You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/app-admin/eselect-boost/files/boost.eselect-0.2

206 lines
5.8 KiB

# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id: boost.eselect-0.2,v 1.2 2010/01/22 15:00:56 jer Exp $
# This eclass-module has been initially written by Łukasz Michalik <lmi@ift.uni.wroc.pl>
# Corrections and extensions by Tiziano Müller <dev-zero@gentoo.org>
DESCRIPTION="Manage boost installations"
_boost_tools="bcp bjam compiler_status inspect library_status process_jam_log quickbook wave"
find_targets() {
local f
for f in "${ROOT}"/usr/include/boost-[[:digit:]]* ; do
[[ -d "${f}" ]] && echo $(basename "${f}")
done
}
remove_installation() {
local link
for link in "${ROOT}/usr/include/boost" "${ROOT}/usr/share/boostbook" ; do
if [[ -L "${link}" ]] ; then
rm "${link}" || die -q "Couldn't remove \"${link}\" symlink"
else
[[ -e "${link}" ]] && die -q "\"${link}\" exists and isn't a symlink"
fi
done
pushd "${ROOT}/usr/%LIBDIR%" 1>/dev/null
local lib
for lib in libboost_*.{a,so} ; do
[[ -L "${lib}" && "${lib}" != libboost_*[[:digit:]]_[[:digit:]][[:digit:]].@(a|so) ]] || continue
rm "${lib}" || die -q "Unable to remove \"/usr/%LIBDIR%/${lib}\" symlink"
done
popd 1>/dev/null
pushd "${ROOT}"/usr/bin 1>/dev/null
local tool
for tool in ${_boost_tools} ; do
[[ -L "${tool}" ]] && ( rm "${tool}" || die -q "Unable to remove \"/usr/bin/${tool}\" symlink" )
done
popd 1>/dev/null
local mod="mpi.so"
for moddir in "${ROOT}"/usr/%LIBDIR%/python*/site-packages ; do
if [ -L "${moddir}/${mod}" ] ; then
rm "${moddir}/${mod}" || die -q "Unable to remove \"${moddir}/${mod}\" symlink"
else
[[ -e "${moddir}/${mod}" ]] && die -q "\"${moddir}/${mod}\" exists and isn't a symlink"
fi
done
}
set_installation() {
[[ -z "${2}" ]] && die -q "Too few parameters to set_installation()"
local target="${1}"
local version="${2}"
if [[ -d "${ROOT}/usr/include/${target}" ]] ; then
pushd "${ROOT}/usr/include" 1>/dev/null
ln -s "${target}/boost" boost || die -q "Couldn't create symlink \"/usr/include/boost\""
popd 1>/dev/null
pushd "${ROOT}/usr/share/" 1>/dev/null
[[ -d "boostbook-${version}" ]] && \
( ln -s "boostbook-${version}" "boostbook" || die -q "Couldn't create symlink \"/usr/bin/${tool}\"" )
popd 1>/dev/null
pushd "${ROOT}/usr/%LIBDIR%" 1>/dev/null
local lib
for lib in libboost_*-"${version}".{a,so} ; do
[[ -e "${lib}" ]] && \
( ln -s "${lib}" "${lib//-${version}}" || die -q "Couldn't create symlink \"/usr/%LIBDIR%/${lib}\"" )
done
popd 1>/dev/null
pushd "${ROOT}/usr/bin/" 1>/dev/null
local tool
for tool in ${_boost_tools} ; do
[[ -e "${tool}" ]] && die -q "\"/usr/bin/${tool}\" exists and isn't a symlink"
[[ -e "${tool}-${version}" ]] && \
( ln -s "${tool}-${version}" "${tool}" || die -q "Couldn't create symlink \"/usr/bin/${tool}\"" )
done
popd 1>/dev/null
local mod="mpi.so"
for moddir in "${ROOT}"/usr/%LIBDIR%/python*/site-packages ; do
pushd "${moddir}" 1>/dev/null
[[ -e "${mod}" ]] && die -q "\"${moddir}/${mod}\" exists and isn't a symlink"
[[ -e "mpi_${version}/mpi.so" ]] && \
( ln -s "mpi_${version}/${mod}" "${mod}" || die -q "Couldn't create symlink \"${moddir}/${mod}\"" )
popd 1>/dev/null
done
else
die -q "Target \"${target}\" doesn't appear to be valid!"
fi
}
### show action ###
describe_show() {
echo "Show the current boost version used"
}
do_show() {
local include
write_list_start "Current boost version:"
if [[ -L "${ROOT}"/usr/include/boost ]] ; then
include=$(basename $(dirname $(canonicalise "${ROOT}"/usr/include/boost )))
write_kv_list_entry "${include%/}" ""
else
write_kv_list_entry "(unset)" ""
fi
}
### list action ###
describe_list() {
echo "List available boost versions"
}
do_list() {
local targets=( $(find_targets ) )
write_list_start "Available boost versions:"
if [[ -n "${targets[@]}" ]] ; then
local i
for (( i = 0 ; i < ${#targets[@]} ; i = i + 1 )) ; do
[[ "${targets[${i}]}" == $(basename $(dirname $(canonicalise "${ROOT}"/usr/include/boost))) ]] && \
targets[${i}]="${targets[${i}]} $(highlight '*' )"
done
write_numbered_list "${targets[@]}"
else
write_kv_list_entry "(none found)" ""
fi
}
### set action ###
describe_set() {
echo "Set a new boost version"
}
describe_set_parameters() {
echo "<target>"
}
describe_set_options() {
echo "target : Target name or number (from 'list' action)"
}
do_set() {
if [[ -z "${1}" ]] ; then
# no parameter
die -q "You didn't tell me what to set the version to"
fi
local target="${1}"
if is_number "${target}" ; then
targets=($(find_targets))
target="${targets[$((${target} - 1))]}"
fi
local version="${target//boost-}"
if [[ -L "${ROOT}"/usr/include/boost ]] ; then
if ! remove_installation ; then
die -q "Couldn't unset existing installation"
elif ! set_installation "${target}" "${version}" ; then
die -q "Couldn't set a new installation"
fi
elif [[ -e "${ROOT}"/usr/include/boost ]] ; then
die -q "Sorry, existing boost installation confuses me"
else
set_installation "${target}" "${version}" || die -q "Couldn't set a new version"
fi
}
### update action ###
describe_update() {
echo "Automaticly update boost version used"
}
do_update() {
local current=
if [[ -L "${ROOT}/usr/include/boost" ]]; then
current=$(basename $(canonicalise "${ROOT}/usr/include/boost") )
if [[ ! -e $(canonicalise "${ROOT}/usr/include/boost") ]]; then
# clean up dead symlinks
remove_installation || die -q "Couldn't remove existing installation"
fi
elif [[ -e "${ROOT}/usr/include/boost" ]]; then
die -q "Sorry, \"/usr/include/boost\" exists but is not a symlink"
fi
local targets=($(find_targets))
if [[ ${#targets[@]} -gt 0 ]]; then
remove_installation
local target="${targets[@]:(-1)}"
set_installation "${target}" "${target//boost-}" || die -q "Couldn't set a new symlink"
else
die -q "No slotted boost version found"
fi
}