From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 6D0FE138200 for ; Wed, 26 Jun 2013 17:23:43 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 014D7E0964; Wed, 26 Jun 2013 17:23:43 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 6A515E0964 for ; Wed, 26 Jun 2013 17:23:42 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 52BF933E760 for ; Wed, 26 Jun 2013 17:23:41 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id F326CE5462 for ; Wed, 26 Jun 2013 17:23:39 +0000 (UTC) From: "Sebastien Fabbro" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Sebastien Fabbro" Message-ID: <1372267398.0ed65facdbd4db0e275f314b56d66de1bc00283d.bicatali@gentoo> Subject: [gentoo-commits] proj/sci:master commit in: sys-cluster/modules/files/, sys-cluster/modules/ X-VCS-Repository: proj/sci X-VCS-Files: sys-cluster/modules/ChangeLog sys-cluster/modules/files/createmodule.py sys-cluster/modules/files/createmodule.sh sys-cluster/modules/files/modules-3.2.10-avail.patch sys-cluster/modules/files/modules-3.2.10-bindir.patch sys-cluster/modules/files/modules-3.2.10-clear.patch sys-cluster/modules/files/modules-3.2.10-versioning.patch sys-cluster/modules/files/modules.sh.in sys-cluster/modules/metadata.xml sys-cluster/modules/modules-3.2.10-r1.ebuild X-VCS-Directories: sys-cluster/modules/files/ sys-cluster/modules/ X-VCS-Committer: bicatali X-VCS-Committer-Name: Sebastien Fabbro X-VCS-Revision: 0ed65facdbd4db0e275f314b56d66de1bc00283d X-VCS-Branch: master Date: Wed, 26 Jun 2013 17:23:39 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 4b09d1fc-8bd4-4ff4-9705-a0bb4fc4def9 X-Archives-Hash: 45edb6d2616a4e44b85740ef7ef84d06 commit: 0ed65facdbd4db0e275f314b56d66de1bc00283d Author: Sébastien Fabbro gentoo org> AuthorDate: Wed Jun 26 17:23:18 2013 +0000 Commit: Sebastien Fabbro gentoo org> CommitDate: Wed Jun 26 17:23:18 2013 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=0ed65fac sys-cluster/modules: Prefix keyworded. Added tests. FHS fixes. Add bunch of fedora patches Package-Manager: portage-2.2.01.22013-prefix --- sys-cluster/modules/ChangeLog | 10 ++ sys-cluster/modules/files/createmodule.py | 186 +++++++++++++++++++++ sys-cluster/modules/files/createmodule.sh | 166 ++++++++++++++++++ .../modules/files/modules-3.2.10-avail.patch | 12 ++ .../modules/files/modules-3.2.10-bindir.patch | 11 ++ .../modules/files/modules-3.2.10-clear.patch | 11 ++ .../modules/files/modules-3.2.10-versioning.patch | 10 ++ sys-cluster/modules/files/modules.sh.in | 7 + sys-cluster/modules/metadata.xml | 20 ++- sys-cluster/modules/modules-3.2.10-r1.ebuild | 61 +++++++ 10 files changed, 486 insertions(+), 8 deletions(-) diff --git a/sys-cluster/modules/ChangeLog b/sys-cluster/modules/ChangeLog index b410036..2c395a5 100644 --- a/sys-cluster/modules/ChangeLog +++ b/sys-cluster/modules/ChangeLog @@ -2,6 +2,16 @@ # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2 # $Header: $ +*modules-3.2.10-r1 (26 Jun 2013) + + 26 Jun 2013; Sébastien Fabbro +files/createmodule.py, + +files/createmodule.sh, +files/modules-3.2.10-avail.patch, + +files/modules-3.2.10-bindir.patch, +files/modules-3.2.10-clear.patch, + +files/modules-3.2.10-versioning.patch, +files/modules.sh.in, + +modules-3.2.10-r1.ebuild, metadata.xml: + sys-cluster/modules: Prefix keyworded. Added tests. FHS fixes. Add bunch of + fedora patches + *modules-3.2.10 (06 Jun 2013) 06 Jun 2013; Nicolas Bock +modules-3.2.10.ebuild: diff --git a/sys-cluster/modules/files/createmodule.py b/sys-cluster/modules/files/createmodule.py new file mode 100755 index 0000000..60c6ba7 --- /dev/null +++ b/sys-cluster/modules/files/createmodule.py @@ -0,0 +1,186 @@ +#!/usr/bin/python +# +# createmodule.py - Takes the name of a environment init script and +# produces a modulefile that duplicates the changes made by the init script +# +# Copyright (C) 2012 by Orion E. Poplawski +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from optparse import OptionParser +import os,sys +from subprocess import * + +# Handle options +usage = "Usage: %prog [-p prefix] [args]" +parser = OptionParser() +parser.set_usage(usage) +parser.add_option('-p', '--prefix', dest='prefix', help='Specify path prefix') +(options, args) = parser.parse_args() + +# Need a script name +if not args: + parser.print_usage() + exit(1) + +# Return environment after a command +def getenv(cmd = ':'): + env = {} + p = Popen(cmd + ";env", shell=True, stdout=PIPE, stderr=PIPE) + (stdout, stderr) = p.communicate() + if p.returncode != 0: + print "EROR: Could not execute initscript:" + print "%s returned exit code %d" % (cmd, p.returncode) + print stderr + exit(1) + if stderr != '': + print "WARNING: initscript sent the following to stderr:" + print stderr + # Parse the output key=value pairs + for line in stdout.splitlines(): + try: + (var,value) = line.split('=',1) + except ValueError: + print "ERROR: Could not parse output:" + print stdout + exit(1) + env[var] = value + return env + +#Record initial environment +env1=getenv() + +#Record environment after sourcing the initscript +env2=getenv(". " + " ".join(args)) + +# Initialize our variables for storing modifications +chdir = None +appendpath = {} +prependpath = {} +setenv = {} +unsetenv = [] +pathnames = [] + +# Function to nomalize all paths in a list of paths and remove duplicate items +def normpaths(paths): + newpaths = [] + for path in paths: + normpath = os.path.normpath(path) + if normpath not in newpaths: + newpaths.append(os.path.normpath(path)) + return newpaths + +# Start with existing keys and look for changes +for key in env1.keys(): + # Test for delete + if key not in env2: + unsetenv.append(key) + continue + # No change + if env1[key] == env2[key]: + del env2[key] + continue + #Working directory change + if key == 'PWD': + chdir=os.path.normpath(env2[key]) + pathnames.append(chdir) + del env2[key] + continue + # Determine modifcations to beginning and end of the string + (prepend,append) = env2[key].split(env1[key]) + if prepend: + prependpaths = prepend.strip(':').split(':') + # LICENSE variables often include paths outside install directory + if 'LICENSE' not in key: + pathnames += prependpaths + prependpath[key] = ':'.join(normpaths(prependpaths)) + if append: + appendpaths = append.strip(':').split(':') + # LICENSE variables often include paths outside install directory + if 'LICENSE' not in key: + pathnames += appendpaths + appendpath[key] = ':'.join(normpaths(appendpaths)) + del env2[key] + +# We're left with new keys in env2 +for key in env2.keys(): + # Use prepend-path for new paths + if ('PATH' in key) or (':' in env2[key]): + prependpaths = env2[key].strip(':').split(':') + # MANPATH can have system defaults added it it wasn't previously set + # LICENSE variables often include paths outside install directory + if key != 'MANPATH' and 'LICENSE' not in key: + pathnames += prependpaths + prependpath[key] = ':'.join(normpaths(prependpaths)) + continue + # Set new variables + setenv[key] = os.path.normpath(env2[key]) + if 'LICENSE' not in key: + pathnames.append(setenv[key]) + +# Determine a prefix +prefix = None +if options.prefix: + prefix = options.prefix +else: + prefix = os.path.commonprefix(pathnames).rstrip('/') + if prefix == '': + prefix = None + +# Print out the modulefile +print "#%Module 1.0" + +# Prefix +if prefix is not None: + print "\nset prefix " + prefix + "\n" + +# Chdir +if chdir is not None: + print "chdir\t" + chdir + +# Function to format output line with tabs and substituting prefix +def formatline(item, key, value=None): + print item, + print "\t"*(2-(len(item)+1)/8), + print key, + if value is not None: + print "\t"*(3-(len(key)+1)/8), + if prefix is not None: + print value.replace(prefix,'$prefix') + else: + print value + +# Paths first, grouped by variable name +pathkeys = appendpath.keys() + prependpath.keys() +pathkeys.sort() +for key in pathkeys: + if key in prependpath: + formatline("prepend-path",key,prependpath[key]) + if key in appendpath: + formatline("append-path",key,appendpath[key]) + +# Setenv +setenvkeys = setenv.keys() +setenvkeys.sort() +if setenvkeys: + print +for key in setenvkeys: + formatline("setenv",key,setenv[key]) + +# Unsetenv +unsetenv.sort() +if unsetenv: + print +for key in unsetenv: + formatline("unsetenv",key) diff --git a/sys-cluster/modules/files/createmodule.sh b/sys-cluster/modules/files/createmodule.sh new file mode 100755 index 0000000..b44cf05 --- /dev/null +++ b/sys-cluster/modules/files/createmodule.sh @@ -0,0 +1,166 @@ +#!/bin/bash +# +# createmodule.sh - Takes the name of a environment init script and +# produces a modulefile that duplicates the changes made by the init script +# +# Copyright (C) 2010-2012 by Orion E. Poplawski +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +usage="Usage: $0 [-p prefix] [args]" + +usage() { + echo $usage 1>&2 + exit 1 +} + +while getopts "p:" opt +do + case $opt in + p) prefix=$OPTARG; shift 2;; + *) usage;; + esac +done + +# Need a script name +[ -z "$1" ] && usage + +# Need to be a readable script +if [ ! -r "$1" ] +then + echo "ERROR: Cannot read $1" 1>&2 + exit 1 +fi + +#Will print out array assignment list +printenvarray () { + env | while read x + do + key=${x%%=*} + value=${x#*=} + echo [$key]="'$value'" + done +} + +#Apparently we need to declare the associative arrays +declare -A env1 env2 + +#Record starting environment +eval env1=(`printenvarray`) + +#Source the environment script +. "$@" + +#Record ending environment +eval env2=(`printenvarray`) + +#Print out the modulefile +echo "#%Module 1.0" + +#Prefix +[ -n "$prefix" ] && echo -e "\nset prefix $prefix\n" + +#Subshell so we can sort the output +( +dedup() { + list=`mktemp` + echo $1 | sed -r -e 's,[^/]+/\.\./,,g' -e 's,[^/]+/\.\./,,g' -e 's/:/\n/g' | + while read x + do + grep -Fx ${x} $list && continue + if [ -n "$prefix" ] + then + echo $x | sed -e s,$prefix,\$prefix, + else + echo $x + fi + echo $x >> $list + done | tr '\n' : | sed -e 's/:$//' + rm $list +} + +#Keys that changed +for key in "${!env1[@]}" +do + if [ "${env1[$key]}" != "${env2[$key]}" ] + then + #Working directory change + if [ "$key" = PWD ] + then + if [ -n "$prefix" ] + then + echo -e "chdir\t\t${env2[PWD]}" | sed -e s,$prefix,\$prefix,g + else + echo -e "chdir\t\t${env2[PWD]}" + fi + #Test for delete + elif [ -z "${env2[$key]}" ] + then + echo -e "unsetenv\t${key}\t${env2[$key]}" + #Test for prepend + elif [ "${env2[$key]%${env1[$key]}}" != "${env2[$key]}" ] + then + added=$(dedup ${env2[$key]%:${env1[$key]}}) + echo -e "prepend-path\t$key\t${added}" + #Test for prepend plus : added at end (MANPATH) + elif [ "${env2[$key]%${env1[$key]}:}" != "${env2[$key]}" ] + then + added=$(dedup ${env2[$key]%${env1[$key]}:}) + echo -e "prepend-path\t$key\t${added}" + #Test for append + elif [ "${env2[$key]#${env1[$key]}}" != "${env2[$key]}" ] + then + added=$(dedup ${env2[$key]#:${env1[$key]}}) + echo -e "append-path\t$key\t${added}" + #Test for prepend plus append + elif [ "${env2[$key]%${env1[$key]}:*}" != "${env2[$key]}" ] + then + added=$(dedup ${env2[$key]%:${env1[$key]}*}) + echo -e "prepend-path\t$key\t${added}" + added=$(dedup ${env2[$key]#*${env1[$key]}:}) + echo -e "append-path\t$key\t${added}" + else + #Unhandled + echo "Unhandled change of $key" 1>&2 + echo "Before <${env1[$key]}>" 1>&2 + echo "After <${env2[$key]}>" 1>&2 + fi + fi + #Delete keys we've handled + unset env1[$key] + unset env2[$key] +done + +#New keys +for key in "${!env2[@]}" +do + if [ "$key" = OLDPWD ] + then + continue + fi + #Use prepend-path for new paths + if [ "${key/PATH/}" != "$key" ] + then + # TODO - Need to handle stripping of default MANPATH + echo -e "prepend-path\t${key}\t"$(dedup ${env2[$key]}) + else + if [ -n "$prefix" ] + then + echo -e "setenv\t\t${key}\t${env2[$key]}" | sed -e s,$prefix,\$prefix,g + else + echo -e "setenv\t\t${key}\t${env2[$key]}" + fi + fi +done +) | sort diff --git a/sys-cluster/modules/files/modules-3.2.10-avail.patch b/sys-cluster/modules/files/modules-3.2.10-avail.patch new file mode 100644 index 0000000..8d6f52b --- /dev/null +++ b/sys-cluster/modules/files/modules-3.2.10-avail.patch @@ -0,0 +1,12 @@ +diff -up modules-3.2.10/init/bash_completion.in.avail modules-3.2.10/init/bash_completion.in +--- modules-3.2.10/init/bash_completion.in.avail 2012-10-25 13:33:34.000000000 -0600 ++++ modules-3.2.10/init/bash_completion.in 2013-01-15 12:05:37.247309733 -0700 +@@ -56,7 +56,7 @@ _module() { + unuse) COMPREPLY=( $(IFS=: compgen -W "${MODULEPATH}" -- "$cur") );; + use|*-a*) ;; # let readline handle the completion + -u|--userlvl) COMPREPLY=( $(compgen -W "novice expert advanced" -- "$cur") );; +- display|help|show|whatis) ++ av*|disp*|help|show|whatis) + COMPREPLY=( $(compgen -W "$(_module_avail)" -- "$cur") );; + *) if test $COMP_CWORD -gt 2 + then diff --git a/sys-cluster/modules/files/modules-3.2.10-bindir.patch b/sys-cluster/modules/files/modules-3.2.10-bindir.patch new file mode 100644 index 0000000..2066d7f --- /dev/null +++ b/sys-cluster/modules/files/modules-3.2.10-bindir.patch @@ -0,0 +1,11 @@ +--- modules-3.2.10.orig/init/Makefile.in 2009-09-22 12:13:52.000000000 -0600 ++++ modules-3.2.10/init/Makefile.in 2009-09-23 12:19:50.797470155 -0600 +@@ -404,7 +404,7 @@ + sed -e "/@$(if $(subst 0,,$(WANTS_VERSIONING)),NOT,)VERSIONING\@/d; \ + s,@$(if $(subst 0,,$(WANTS_VERSIONING)),,NOT)VERSIONING\@,,g; \ + s,@prefix\@,${prefix},g; \ +- s,@bindir\@,${exec_prefix}/bin,g; \ ++ s,@bindir\@,${bindir},g; \ + s,@VERSION\@,@VERSION@,g; \ + s,@BASEPREFIX\@,@BASEPREFIX@,g;" < $< > $@ + diff --git a/sys-cluster/modules/files/modules-3.2.10-clear.patch b/sys-cluster/modules/files/modules-3.2.10-clear.patch new file mode 100644 index 0000000..0817db5 --- /dev/null +++ b/sys-cluster/modules/files/modules-3.2.10-clear.patch @@ -0,0 +1,11 @@ +--- modules-3.2.9/utility.c 2011-11-28 22:27:13.000000000 +0100 ++++ modules-3.2.9-new/utility.c 2012-06-13 15:17:41.570629148 +0200 +@@ -727,7 +727,7 @@ int Output_Modulefile_Changes( Tcl_Inter + output_unset_variable( (char*) key); + } else { + val = EMGetEnv(interp, key); +- if(val && *val) ++ if(val) + output_set_variable(interp, (char*) key, val); + null_free((void *)&val); + } diff --git a/sys-cluster/modules/files/modules-3.2.10-versioning.patch b/sys-cluster/modules/files/modules-3.2.10-versioning.patch new file mode 100644 index 0000000..7bda920 --- /dev/null +++ b/sys-cluster/modules/files/modules-3.2.10-versioning.patch @@ -0,0 +1,10 @@ +diff -up modules-3.2.10/modulefiles/modules.in.versioning modules-3.2.10/modulefiles/modules.in +--- modules-3.2.10/modulefiles/modules.in.versioning 2012-10-25 13:33:34.000000000 -0600 ++++ modules-3.2.10/modulefiles/modules.in 2013-01-15 11:30:22.046031158 -0700 +@@ -26,5 +26,5 @@ setenv MODULESHOME $prefix + prepend-path PATH @bindir@ + prepend-path MANPATH @mandir@ + +-module use @VERSIONPATH@ ++@VERSIONING@module use @VERSIONPATH@ + diff --git a/sys-cluster/modules/files/modules.sh.in b/sys-cluster/modules/files/modules.sh.in new file mode 100644 index 0000000..6ed502e --- /dev/null +++ b/sys-cluster/modules/files/modules.sh.in @@ -0,0 +1,7 @@ +shell=$(basename $(ps -p $$ -ocomm=)) +if [ -f @EPREFIX@/usr/share/Modules/init/${shell} ] +then + . @EPREFIX@/usr/share/Modules/init/${shell} +else + . @PREFIX@/usr/share/Modules/init/sh +fi diff --git a/sys-cluster/modules/metadata.xml b/sys-cluster/modules/metadata.xml index 4c7ca47..8076274 100644 --- a/sys-cluster/modules/metadata.xml +++ b/sys-cluster/modules/metadata.xml @@ -1,12 +1,16 @@ - - The Environment Modules package provides for the dynamic modification of a user's environment via modulefiles. - - cluster - - nicolasbock@gmail.com - Nicolas Bock - +cluster + + nicolasbock@gmail.com + Nicolas Bock + + + The environment modules package provides for an easy dynamic + modification of a user's environment via modulefiles. which + typically instruct the module command to alter or set shell + environment variables such as PATH, MANPATH, etc. as well as define + aliases over a variety of shells. + diff --git a/sys-cluster/modules/modules-3.2.10-r1.ebuild b/sys-cluster/modules/modules-3.2.10-r1.ebuild new file mode 100644 index 0000000..fd8fdd8 --- /dev/null +++ b/sys-cluster/modules/modules-3.2.10-r1.ebuild @@ -0,0 +1,61 @@ +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=5 + +inherit autotools-utils multilib + +DESCRIPTION="Dynamic modification of a user's environment via modulefiles" +HOMEPAGE="http://modules.sourceforge.net/" +SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux" +IUSE="test X" + +RDEPEND=" + dev-lang/tcl + dev-tcltk/tclx + X? ( x11-libs/libX11 )" +DEPEND="${RDEPEND} + test? ( dev-util/dejagnu )" + +S="${WORKDIR}/${P%[a-z]}" + +DOCS=(ChangeLog README NEWS TODO) + +src_prepare() { + has_version ">=dev-lang/tcl-8.6.0" && \ + epatch "${FILESDIR}"/${P}-errorline.patch + epatch \ + "${FILESDIR}"/${P}-bindir.patch \ + "${FILESDIR}"/${P}-versioning.patch \ + "${FILESDIR}"/${P}-clear.patch \ + "${FILESDIR}"/${P}-avail.patch + sed -e "s:@EPREFIX@:${EPREFIX}:g" \ + "${FILESDIR}"/modules.sh.in > modules.sh +} + +src_configure() { + local myeconfargs=( + --disable-versioning + --prefix="${EPREFIX}/usr/share" + --exec-prefix="${EPREFIX}/usr/share/Modules" + --with-module-path="${EPREFIX}/etc/modulefiles" + --with-tcl="${EPREFIX}/usr/$(get_libdir)" + $(use_with X x) + ) + autotools-utils_src_configure +} + +src_install() { + autotools-utils_src_install + insinto /etc/profile.d + doins modules.sh + exeinto /usr/share/Modules/bin + doexe "${FILESDIR}"/createmodule.{sh,py} + dosym /usr/share/Modules/init/csh /etc/profile.d/modules.csh + dodir /etc/modulesfiles +}