From fd90b39021524aecf0e0eaf318e0501d3657914c Mon Sep 17 00:00:00 2001 From: jsbronder Date: Sun, 15 Jun 2008 19:44:02 +0000 Subject: Bump eselect-mpi-0.0.4. Adds /etc/profile.d support. Thanks to Bryan Green for suggesting this. git-svn-id: http://overlays.gentoo.org/svn/proj/science/overlay@1143 32389bae-6d03-0410-99cf-db05cde120eb --- app-admin/eselect-mpi/Manifest | 4 + app-admin/eselect-mpi/eselect-mpi-0.0.4.ebuild | 26 +++ app-admin/eselect-mpi/files/mpi.csh | 3 + app-admin/eselect-mpi/files/mpi.eselect-0.0.4 | 234 +++++++++++++++++++++++++ app-admin/eselect-mpi/files/mpi.sh | 3 + 5 files changed, 270 insertions(+) create mode 100644 app-admin/eselect-mpi/eselect-mpi-0.0.4.ebuild create mode 100644 app-admin/eselect-mpi/files/mpi.csh create mode 100644 app-admin/eselect-mpi/files/mpi.eselect-0.0.4 create mode 100644 app-admin/eselect-mpi/files/mpi.sh (limited to 'app-admin') diff --git a/app-admin/eselect-mpi/Manifest b/app-admin/eselect-mpi/Manifest index aae0e2bc4..afc73af9d 100644 --- a/app-admin/eselect-mpi/Manifest +++ b/app-admin/eselect-mpi/Manifest @@ -1,4 +1,8 @@ +AUX mpi.csh 105 RMD160 6f5d66e3ba735857bcc4602d557b6506accebcb2 SHA1 b3dcaa750a0d0b534624bf5000939326c654b88f SHA256 ee93756d2cb8b1f41775d786c408b38bf4502700c63f51604b0011fda9947b4e AUX mpi.eselect-0.0.3 6686 RMD160 bf322c55ffe26e35c9bda9e8705cc38bd23341dc SHA1 40d5e3f438a26a0b6c7ccc780a64ef6a6b209697 SHA256 9a68894b5535376688373f5b4a1450bf437e68e3950f0e77c7b44d3fdf4eac78 +AUX mpi.eselect-0.0.4 6432 RMD160 09740bcec922c14c8a06eb8afc83ad8c849d5d49 SHA1 f6f82d26a2ec191f2306c20e0a79239ddd80b30b SHA256 e08c95043d260092dff89d2220319b09885bb9e2c1629beb5f01550fb2955c8f +AUX mpi.sh 101 RMD160 aca45809ad649cdfa2cd43d21848ad049a9a262d SHA1 07877c648c103af7e8f13e27361e50592a77380d SHA256 d55162bdc58d24f77b9eca0a7a45cc0b32834513c3f94ca4caa8b28085eab354 EBUILD eselect-mpi-0.0.3-r1.ebuild 761 RMD160 167664aff8d2d858294995c121b6f5f2ccfacd58 SHA1 cbccf20a159fc15f3e95065414746a24394d7858 SHA256 5dacaea0cc67f4966ea315bb687d03225f6182c6107d78ad09b31bd73a0ad637 EBUILD eselect-mpi-0.0.3.ebuild 503 RMD160 b9bbe6d8b994948ed9f40945dd09b5e6a3264d4a SHA1 979fca1a9cc901798a38d84d2259e41d2d209f33 SHA256 1c00f8dbc1b83d0958179c0a7e86e32d1f06e1631b10a3fb0ab31c66308a4b92 +EBUILD eselect-mpi-0.0.4.ebuild 571 RMD160 7b02bf6c2037c328cdcbfc9b727bedb4a0cd5db8 SHA1 2c45b54b3114f709554ece171d5513d9a175f018 SHA256 4503bfeed8c2517293c59b5edc2e2c4a285ce1fa22273becace8fb1ae0c7d363 MISC ChangeLog 378 RMD160 5df435e9f2ff9409dba31cd7e645fc794cdb7adf SHA1 aad5a2ad8e4bdfc3053c889ac08844675b5e04b6 SHA256 380c32841c8371e4f3ed025cdd0c6ffab9c56fe71871f059fbd4bac7f4bd32d8 diff --git a/app-admin/eselect-mpi/eselect-mpi-0.0.4.ebuild b/app-admin/eselect-mpi/eselect-mpi-0.0.4.ebuild new file mode 100644 index 000000000..a71421c8d --- /dev/null +++ b/app-admin/eselect-mpi/eselect-mpi-0.0.4.ebuild @@ -0,0 +1,26 @@ +# Copyright 1999-2008 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +DESCRIPTION="eselect-mpi" +HOMEPAGE="http://www.gentoo.org/proj/en/eselect/" +SRC_URI="" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="amd64 x86" +IUSE="" + +DEPEND="app-admin/eselect" +RDEPEND="${DEPEND}" + +src_install() { + MODULEDIR="/usr/share/eselect/modules" + MODULE="mpi" + dodir ${MODULEDIR} + insinto ${MODULEDIR} + newins "${FILESDIR}"/${MODULE}.eselect-${PV} ${MODULE}.eselect + exeinto /etc/profile.d + doexe "${FILESDIR}"/mpi.csh + doexe "${FILESDIR}"/mpi.sh +} diff --git a/app-admin/eselect-mpi/files/mpi.csh b/app-admin/eselect-mpi/files/mpi.csh new file mode 100644 index 000000000..32506b4cc --- /dev/null +++ b/app-admin/eselect-mpi/files/mpi.csh @@ -0,0 +1,3 @@ +if ( -d "${HOME}"/.env.d && -f "${HOME}"/.env.d/mpi.csh ) then + source "${HOME}"/.env.d/mpi.csh +endif diff --git a/app-admin/eselect-mpi/files/mpi.eselect-0.0.4 b/app-admin/eselect-mpi/files/mpi.eselect-0.0.4 new file mode 100644 index 000000000..64303ee9b --- /dev/null +++ b/app-admin/eselect-mpi/files/mpi.eselect-0.0.4 @@ -0,0 +1,234 @@ +# Copyright 1999-2005 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id: $ + +DESCRIPTION="Manage MPI implementations" +MAINTAINER="jsbronder@gentoo.org" +SVN_DATE='$Date: $' +VERSION="0.0.2" + +inherit path-manipulation config + +# The basic idea is we want to allow every use to select their own mpi +# implementation they want, and a ${HOME}/.env.d/mpi file is created for them. +# A user then is -required- to source the env file. This sets PATH, MANPATH, +# and LD_LIBRARY_PATH. I'm sure I'm forgetting something here. +# Calling unset only wipes out the env file, replacing it with what we +# previously added stripped out. + +# If you can think of a better way to do this, while still allowing user's +# freedom, please let me know. + +# List the valid mpi implementations currently installed. +find_implementations() { + local imps + for f in ${ROOT}/etc/env.d/mpi/*; do + [[ -f ${f} ]] || continue + f=$(basename ${f}) + [[ "${f#mpi-}" == "${f}" ]] && continue + imps=(${imps[@]} ${f}) + done + echo ${imps[@]} +} + +# User's current environment has the implementation configured in it. +is_in_use() { [ "${ESELECT_MPI_IMP}" == "${1}" ]; } + +# User's env file is ready for sourcing for this implementation. +is_enabled() { + [ "$(var_from_user_envd ESELECT_MPI_IMP)" == "${1}" ] +} + +var_from_user_envd(){ + [ ! -f ${user_ev_sh} ] && return 0 + echo "$(source ${user_ev_sh}; echo ${!1})" +} + +# Is this a valid implementation? +is_implementation() { + local imps=$(find_implementations) + for i in ${imps[@]}; do + [[ "${i}" == "${1}" ]] && return 0 + done + return 1 +} + +init() { + local d + [[ ${UID} -eq 0 ]] && HOME="${ROOT}/root" + d="$(canonicalise "${ROOT}/${HOME}")" + d="${d}/.env.d/" + user_ev_sh="${d}mpi.sh"; + user_ev_csh="${d}mpi.csh"; + + if [[ ! -d "${d}" ]]; then + mkdir "${d}" || die -q "Failed to create ${d}." + elif [[ ! -w "${d}" ]]; then + die -q "You do not have permission to mkdir ${d}." + fi + [[ -f "${user_ev_sh}" && ! -w "${user_ev_sh}" \ + && -f "${user_ev_csh}" && ! -w "${user_ev_csh}" ]] \ + && die -q "You do not have permission to write to ${user_ev_sh} or ${user_ev_csh}." +} + +global_env() { + local d=$(canonicalise "${ROOT}/etc/env.d/mpi/${1}") + [ -z "${d}" ] && die "Cannot find global env file for ${1}" + ev=${d} +} + +clean_var() { + local imp v + local value="${!1}" + local d="$(canonicalise "${ROOT}/etc/env.d/mpi/${imp}")" + [ -z "${value}" ] && return 0 + [ -z "${d}" ] && continue + + for imp in $(find_implementations); do + v=$(load_config ${d}/${imp} ${1}) + [ -z "${v}" ] && continue + value="$(echo ${value} | sed -e "s|${v}:||g")" + done + echo ${value} +} + + +### list action ### + +describe_list() { echo "List available implementations"; } +describe_list_parameters() { echo "[-p]"; } + +do_list() { + imps=( $(find_implementations) ) + init + if [[ ${@} == *-p* ]]; then + echo "${imps[@]}" + else + write_list_start "Available MPI implementations:" + if [[ -n "${imps[@]}" ]]; then + for (( i=0; i<${#imps[@]}; i++ )); do + if is_in_use ${imps[$i]} && is_enabled ${imps[$i]}; then + write_kv_list_entry "${imps[$i]}" "Enabled, In Use" + elif is_in_use ${imps[$i]}; then + write_kv_list_entry "${imps[$i]}" "In Use" + elif is_enabled ${imps[$i]}; then + write_kv_list_entry "${imps[$i]}" "Enabled" + else + write_kv_list_entry "${imps[$i]}" "--" + fi + done + else + write_kv_list_entry "(none found)" "" + fi + fi + return 0 +} + + +### set action ### + +describe_set() { + echo "Select a MPI implementation." +} + +describe_set_parameters() { + echo "" +} + +do_set() { + local binpath lld manpath + + init + global_env ${1} + + [[ -z ${1} ]] && die -q "You didnt specifiy any implementation for use." + [[ ${#@} -ne 1 ]] && die -q "You may only select exactly one implementation." + ! is_implementation ${1} && die -q "${1} is not an implementation." + is_enabled ${1} && return 0 + + binpath="$(load_config ${ev} PATH):$(clean_var PATH)" + lld="$(load_config ${ev} LD_LIBRARY_PATH):$(clean_var LD_LIBRARY_PATH)" + manpath="$(load_config ${ev} MANPATH):$(clean_var MANPATH)" + +cat <<-EOF >${user_ev_sh} +export PATH="${binpath}" +export MANPATH="${manpath}" +export LD_LIBRARY_PATH="${lld}" +export ESELECT_MPI_IMP="${1}" +EOF + +cat <<-EOF >${user_ev_csh} +setenv PATH "${binpath}" +setenv MANPATH "${manpath}" +setenv LD_LIBRARY_PATH "${lld}" +setenv ESELECT_MPI_IMP "${1}" +EOF + + echo "Remember to source ${user_ev_sh}, ${user_ev_csh} or /etc/profile" +} + + +### unset action ### +describe_unset() { + echo "Restore MPI-less environment." +} + +do_unset() { + local binpath lld manpath + + init + [ -f "${user_ev_sh}" ] && rm -f "${user_ev_sh}" + [ -f "${user_ev_csh}" ] && rm -f "${user_ev_csh}" + + echo "Remember to source ${user_ev_sh}, ${user_ev_csh} or /etc/profile" +} + +### add action (from skel pretty much) +describe_add() { + echo "Add a new mpi implementation" +} + +describe_add_parameters() { + echo "" +} + +do_add() { + local imp + [[ ${#@} -ne 1 ]] \ + && die -q "Bad arguments, use: mpi add /some/full/path/.eselect" + + # If $D is set, we're adding from portage so we want to respect sandbox. + # Otherwise, respect the ROOT variable. + local PREFIX=${D:-${ROOT}/} + + # Create directory if necessary + if [[ ! -e ${PREFIX}/etc/env.d/mpi/ ]]; then + mkdir -p ${PREFIX}/etc/env.d/mpi/ + else + if [[ ! -d ${PREFIX}/etc/env.d/mpi/ ]]; then + die -q "${PREFIX}/etc/env.d/mpi/ exists but isn't a directory!" + fi + fi + + imp=$(basename ${1}); imp=${imp%.eselect} + if ! cp ${1} ${PREFIX}/etc/env.d/mpi/${imp}; then + die -q "Installing ${1} as ${PREFIX}/etc/env.d/mpi/${imp} failed!" + fi +} + + +### printvar action ### +describe_printvar() { echo "Print variables stored in global env.d file."; } +describe_printvar_parameters() { echo " "; } + +do_printvar() { + if [[ ${#@} -ne 2 ]] \ + || ! is_implementation ${1}; then + die -q "Specify exactly 1 implementation and 1 variable." + fi + global_env ${1} + echo "$(load_config ${ev} ${2})" +} + +# vim: set ft=eselect : + diff --git a/app-admin/eselect-mpi/files/mpi.sh b/app-admin/eselect-mpi/files/mpi.sh new file mode 100644 index 000000000..5483247e5 --- /dev/null +++ b/app-admin/eselect-mpi/files/mpi.sh @@ -0,0 +1,3 @@ +if [ -d "${HOME}"/.env.d -a -f "${HOME}"/.env.d/mpi.sh ]; then + source "${HOME}"/.env.d/mpi.sh +fi -- cgit v1.2.3-65-gdbad