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.
206 lines
5.8 KiB
206 lines
5.8 KiB
13 years ago
|
# 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
|
||
|
}
|