From c39fa2e617bede381e851fb6f70e41f18307c50a Mon Sep 17 00:00:00 2001
From: Grigori Rybkin <grybkine@cern.ch>
Date: Thu, 15 Jan 2015 10:38:31 +0100
Subject: [PATCH] use -tag_add=<tags> (PackDist-00-14-02)

	PackDist-00-14-02
	* scripts/pack-extern.sh: When evaluating macro values, use -tag_add=<tags> (rather than -tag=<tags>)
	* scripts/pack-proj.sh: idem, also for setup via cmtsite
	* scripts/proj-run.sh: When doing setup via cmthome, use -tag_add=<tags> (rather than -tag=<tags>)

2015-01-13 Grigori Rybkine <Grigori.Rybkine@cern.ch>

	PackDist-00-14-01
	* scripts/pack-extern.sh: Extend the work around for LCG 68 and later presenting external s/w paths depending on LCG version to external s/w packages that use LCG_Interfaces package(s) and are also affected

2015-01-12 Grigori Rybkine <Grigori.Rybkine@cern.ch>

	PackDist-00-14-00
	* scripts/pack-extern.sh: Work around LCG 68 and later presenting external s/w paths depending on LCG version

2014-09-27 Grigori Rybkine <Grigori.Rybkine@cern.ch>

	PackDist-00-13-04
	* scripts/pack-proj.sh: enhance diagnostic message of scripts/relink.py invocation
...
(Long ChangeLog diff - truncated)
---
 PackDist/scripts/pack-extern.sh | 33 +++++++++++-------
 PackDist/scripts/pack-proj.sh   | 49 ++++++++++++++-------------
 PackDist/scripts/proj-run.sh    |  8 ++---
 PackDist/scripts/relink.py      | 60 ++++++++++++++++++++++-----------
 4 files changed, 90 insertions(+), 60 deletions(-)

diff --git a/PackDist/scripts/pack-extern.sh b/PackDist/scripts/pack-extern.sh
index 1ae2f23e875..fff8052c8e5 100755
--- a/PackDist/scripts/pack-extern.sh
+++ b/PackDist/scripts/pack-extern.sh
@@ -137,7 +137,7 @@ _chk_links ()
 [ -d "$1" ] || return 0
 local tmperr=$(mktemp -t tmp.XXXXXXXXXX) || return 1
 
-#    /^other_fs|^dangling/ { print >tmperr; next }
+type symlinks >/dev/null || { warn "type" $FUNCNAME; return 0; }
 symlinks -rv $1 |
     awk -v tmperr=$tmperr '
     /^absolute|^other_fs|^dangling|^messy/ { print >tmperr; next }
@@ -402,13 +402,13 @@ else unset reqpatch
 fi
 
 # Check if there are external packages required
-for pkg in `cmt -q -tag=ATLAS show macro_value ${package}_requires`; do
+for pkg in `cmt -q -tag_add=ATLAS show macro_value ${package}_requires`; do
     [ -f "${tmpreq:-}" ] || tmpreq=$(mktemp -t tmp.XXXXXXXXXX) || { error "mktemp" $FUNCNAME; exit 1; }
     echo "$pkg" >>$tmpreq || { error "echo" $FUNCNAME; exit 1; }
 done
 
 # Check if there is external software to pack
-export_paths=`cmt -q -tag=ATLAS show macro_value ${package}_export_paths`
+export_paths=`cmt -q -tag_add=ATLAS show macro_value ${package}_export_paths`
 # Remove leading and trailing whitespace (to make the value empty if it was whitespace)
 src=(${export_paths})
 
@@ -419,7 +419,7 @@ export_paths=${src[*]}
 
 if [ -n "$export_paths" ]; then
 
-dst=($(cmt -q -tag=ATLAS,STANDALONE show macro_value ${package}_export_paths))
+dst=($(cmt -q -tag_add=ATLAS,STANDALONE show macro_value ${package}_export_paths))
 dst=(${dst[*]#${SITEROOT}/})
 
 info "source:\n'${src[*]}'" $FUNCNAME
@@ -442,18 +442,27 @@ info "requires:\n'$(<$tmpreq)'" $FUNCNAME
 fi
 
 native_version=`cmt -q -tag_add=PACK show macro_value ${package}_native_version`
-#native_version=`cmt -q show macro_value ${package}_native_version`
+if [ -n "$native_version" ]; then
+    if [ LCG_Interfaces = "$(cmt -q show macro_value ${package}_offset)" ] || \
+	cmt -q show uses|grep -q -F -w LCG_Interfaces; then
+	LCG_config_version=$(cmt -q show macro_value LCG_config_version)
+	_LCG_config_version=$(echo ${LCG_config_version}|sed -n 's/^\([[:digit:]]\{1,\}\).*/\1/p')
+	if [ -n "${_LCG_config_version}" ] && [ ${_LCG_config_version} -ge 68 ] && \
+	    [ -n "$export_paths" ] && echo "${dst[*]}"|grep -q -F "/LCG_${LCG_config_version}/" && \
+	    ! echo "$native_version"|grep -q -F "_lcgcmt${LCG_config_version}"; then
+	    version=${native_version}_lcgcmt${LCG_config_version}
+	fi
+    fi
+    [ -z ${version+t} ] && version=$native_version
+else
 version=`cmt show macro_value version`
 [ "${version}" = "v*" ] &&
 { warn "Invalid CMT package version: $version: $project $release $package" $FUNCNAME;
 version=v1; }
-if [ -n "$native_version" ]; then
-    version=$native_version
-else
     warn "Macro ${package}_native_version unspecified: $project $release $package $version" $FUNCNAME
 fi
 
-platform=`cmt -q -tag=PACK show macro_value ${package}_platform`
+platform=`cmt -q -tag_add=PACK show macro_value ${package}_platform`
 
 #
 # Need to handle dbg mode
@@ -487,7 +496,7 @@ if [ -n "$export_paths" ] && [[ ${CMTCONFIG} == *dbg* ]] && [ -z ${platform} ];
     dst=(${dst[*]})
 fi
 
-follow_symlinks=`cmt -q -tag=PACK show macro_value ${package}_follow_symlinks`
+follow_symlinks=`cmt -q -tag_add=PACK show macro_value ${package}_follow_symlinks`
 
 # if [ -f ${externcache}/kits/$name.tar.gz -a "${overwrite}" != yes ]; then
 #     info "Existing ${externcache}/kits/$name.tar.gz will not be overwritten" $FUNCNAME
@@ -510,8 +519,8 @@ if [ -f $fpath -a "${overwrite}" != yes ]; then
 
 else
 
-#follow_symlinks=`cmt -tag=PACK show macro_value ${package}_follow_symlinks`
-include_objfiles=`cmt -q -tag=PACK show macro_value ${package}_include_objfiles`
+#follow_symlinks=`cmt -tag_add=PACK show macro_value ${package}_follow_symlinks`
+include_objfiles=`cmt -q -tag_add=PACK show macro_value ${package}_include_objfiles`
 if [ -n "$include_objfiles" ]; then
     unset exclude_objfiles
 else
diff --git a/PackDist/scripts/pack-proj.sh b/PackDist/scripts/pack-proj.sh
index 74d10ad8909..5fcda8576af 100755
--- a/PackDist/scripts/pack-proj.sh
+++ b/PackDist/scripts/pack-proj.sh
@@ -557,14 +557,15 @@ fi
 
 [ -d $tmpdir/${projdir}/$3 ] || return 0
 
-$scriptdir/relink.py -S $1 -H ${projdir}/$3 ${4:+-X ${4}} $tmpdir/${projdir}/$3 >/dev/null 2>|$tmperr
-#projsrc=$1 projhat=${projdir}/$3 $scriptdir/relink.py $tmpdir/${projdir}/$3 ${4:-} >/dev/null 2>|$tmperr
-#projsrc=$1 projhat=${projdir}/$3 $scriptdir/relink.py $tmpdir/${projdir}/$3 >/dev/null 2>|$tmperr
-#projsrc=$1 projdst=${projdir}/$3 $scriptdir/relink.py $tmpdir/${projdir}/$3 >/dev/null 2>|$tmperr
+$scriptdir/relink.py -S $1 -H ${projdir}/$3 ${4:+-X ${4}} $tmpdir/${projdir}/$3 >/dev/null 2>|$tmperr ||
+{ [ -s $tmperr ] && cat $tmperr >&2
+error "$scriptdir/relink.py" $FUNCNAME; return 1; }
+
 [ -s $tmperr ] && warn "\n$(<$tmperr)" $FUNCNAME
 
 if [ -z "${4:-}" ]; then
 # check symlinks left
+type symlinks >/dev/null || { warn "type" $FUNCNAME; return 0; }
 symlinks -r $tmpdir/${projdir}/$3 | grep '^absolute\|^other_fs\|^dangling\|^messy' >|$tmperr
 
 # check exit status instead?
@@ -841,8 +842,8 @@ local cntnrcmt=${cntnr[1]}${cntnr[0]}/${verdir}cmt
 cd $1/$cntnrcmt || return 1
 [ -f ${tmppatch}/$2/$3/$cntnrcmt/requirements ] &&
 export CMTUSERCONTEXT=$(echo ${tmppatch}/$2/$3/$cntnrcmt)
-local project_post=$(cmt -q -tag=PACK show macro_value $(sed 's/[-.]/_/g' <<<${2})_post)
-#local project_post=$(cmt -tag=PACK show macro_value ${2}_post)
+local project_post=$(cmt -q -tag_add=PACK show macro_value $(sed 's/[-.]/_/g' <<<${2})_post)
+#local project_post=$(cmt -tag_add=PACK show macro_value ${2}_post)
 unset CMTUSERCONTEXT
 cd $OLDPWD
 
@@ -874,36 +875,36 @@ case ${CMTCONFIG} in
     *) local mode=opt ;;
 esac
 cat <<EOF
-unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag=${3},${mode},noTest; cd @INSTALL_PREFIX@/$(basename $(dirname $1))/$3/AtlasRelease/*/cmt; cmt br - cmt -no_cleanup config; cd @INSTALL_PREFIX@/$(basename $(dirname $1))/$3/Control/AthenaRunTime/*/cmt; . ./setup.sh; cmt build library_links; ${project_post:+cd @INSTALL_PREFIX@/$(basename $(dirname $1))/$3/AtlasRelease/*/cmt; ${project_post}; }true
+unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag_add=${3},${mode},noTest; cd @INSTALL_PREFIX@/$(basename $(dirname $1))/$3/AtlasRelease/*/cmt; cmt br - cmt -no_cleanup config; cd @INSTALL_PREFIX@/$(basename $(dirname $1))/$3/Control/AthenaRunTime/*/cmt; . ./setup.sh; cmt build library_links; ${project_post:+cd @INSTALL_PREFIX@/$(basename $(dirname $1))/$3/AtlasRelease/*/cmt; ${project_post}; }true
 EOF
 
-#PATH=/bin:/usr/bin; unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag=${3},${mode},noTest; cd @INSTALL_PREFIX@/$(basename $(dirname $1))/$3/AtlasRelease/*/cmt; cmt -quiet br - cmt -quiet -no_cleanup config; cd @INSTALL_PREFIX@/$(basename $(dirname $1))/$3/Control/AthenaRunTime/*/cmt; . setup.sh; cmt build library_links; ${project_post:+cd @INSTALL_PREFIX@/$(basename $(dirname $1))/$3/AtlasRelease/*/cmt; ${project_post}; }true
+#PATH=/bin:/usr/bin; unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag_add=${3},${mode},noTest; cd @INSTALL_PREFIX@/$(basename $(dirname $1))/$3/AtlasRelease/*/cmt; cmt -quiet br - cmt -quiet -no_cleanup config; cd @INSTALL_PREFIX@/$(basename $(dirname $1))/$3/Control/AthenaRunTime/*/cmt; . setup.sh; cmt build library_links; ${project_post:+cd @INSTALL_PREFIX@/$(basename $(dirname $1))/$3/AtlasRelease/*/cmt; ${project_post}; }true
 elif [ $2 == LCGCMT ]; then
 cat <<EOF
-unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag=${mode},noTest; unset CMTPATH CMTHOME CMTUSERCONTEXT; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt br - 'cmt -no_cleanup config;cmt build library_links'; ${project_post:+${project_post}; }true
+unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag_add=${mode},noTest; unset CMTPATH CMTHOME CMTUSERCONTEXT; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt br - 'cmt -no_cleanup config;cmt build library_links'; ${project_post:+${project_post}; }true
 EOF
 
-#PATH=/bin:/usr/bin; unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag=${mode},noTest; unset CMTPATH; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt -quiet br - 'cmt -quiet -no_cleanup config;cmt -quiet build library_links'; ${project_post:+${project_post}; }true
+#PATH=/bin:/usr/bin; unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag_add=${mode},noTest; unset CMTPATH; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt -quiet br - 'cmt -quiet -no_cleanup config;cmt -quiet build library_links'; ${project_post:+${project_post}; }true
 elif [ $2 == Gaudi ]; then
 cat <<EOF
-unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag=${mode},noTest; unset CMTPATH CMTHOME CMTUSERCONTEXT; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt br - 'cmt -no_cleanup config;cmt build library_links'; ${project_post:+${project_post}; }true
+unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag_add=${mode},noTest; unset CMTPATH CMTHOME CMTUSERCONTEXT; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt br - 'cmt -no_cleanup config;cmt build library_links'; ${project_post:+${project_post}; }true
 EOF
 
-#PATH=/bin:/usr/bin; unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag=${mode},noTest; unset CMTPATH; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt -quiet br - 'cmt -quiet -no_cleanup config;cmt -quiet build library_links'; ${project_post:+${project_post}; }true
+#PATH=/bin:/usr/bin; unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag_add=${mode},noTest; unset CMTPATH; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt -quiet br - 'cmt -quiet -no_cleanup config;cmt -quiet build library_links'; ${project_post:+${project_post}; }true
 elif [[ $2 == Atlas?* ]]; then # Atlas projects
 cat <<EOF
-unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag=${2},${3},${mode},noTest; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt br - 'cmt -no_cleanup config;cmt build library_links'; ${project_post:+${project_post}; }true
+unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag_add=${2},${3},${mode},noTest; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt br - 'cmt -no_cleanup config;cmt build library_links'; ${project_post:+${project_post}; }true
 EOF
 
-#PATH=/bin:/usr/bin; unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag=${2},${3},${mode},noTest; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt -quiet br - 'cmt -quiet -no_cleanup config;cmt -quiet build library_links'; ${project_post:+${project_post}; }true
+#PATH=/bin:/usr/bin; unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag_add=${2},${3},${mode},noTest; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt -quiet br - 'cmt -quiet -no_cleanup config;cmt -quiet build library_links'; ${project_post:+${project_post}; }true
 else
 cat <<EOF
-unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag=${mode},noTest; unset CMTPATH CMTHOME CMTUSERCONTEXT; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt br - 'cmt -no_cleanup config;cmt build library_links'; ${project_post:+${project_post}; }true
+unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag_add=${mode},noTest; unset CMTPATH CMTHOME CMTUSERCONTEXT; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt br - 'cmt -no_cleanup config;cmt build library_links'; ${project_post:+${project_post}; }true
 EOF
 
-#PATH=/bin:/usr/bin; unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag=${mode},noTest; unset CMTPATH; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt -quiet br - 'cmt -quiet -no_cleanup config;cmt -quiet build library_links'; ${project_post:+${project_post}; }true
+#PATH=/bin:/usr/bin; unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag_add=${mode},noTest; unset CMTPATH; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt -quiet br - 'cmt -quiet -no_cleanup config;cmt -quiet build library_links'; ${project_post:+${project_post}; }true
 # cat <<EOF
-# PATH=/bin:/usr/bin; unset CMTROOT CMTSITE; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag=${mode},noTest; unset CMTPATH; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt -quiet br - cmt -quiet -no_cleanup config; ${project_post:+${project_post}; }true
+# PATH=/bin:/usr/bin; unset CMTROOT CMTSITE; . @INSTALL_PREFIX@/cmtsite/setup.sh -tag_add=${mode},noTest; unset CMTPATH; cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt; cmt -quiet br - cmt -quiet -no_cleanup config; ${project_post:+${project_post}; }true
 # EOF
 
 fi
@@ -931,8 +932,8 @@ local cntnrcmt=${cntnr[1]}${cntnr[0]}/${verdir}cmt
 cd $1/$cntnrcmt || return 1
 [ -f ${tmppatch}/$2/$3/$cntnrcmt/requirements ] &&
 export CMTUSERCONTEXT=$(echo ${tmppatch}/$2/$3/$cntnrcmt)
-local project_preun=$(cmt -q -tag=PACK show macro_value $(sed 's/[-.]/_/g' <<<${2})_preun)
-#local project_preun=$(cmt -tag=PACK show macro_value ${2}_preun)
+local project_preun=$(cmt -q -tag_add=PACK show macro_value $(sed 's/[-.]/_/g' <<<${2})_preun)
+#local project_preun=$(cmt -tag_add=PACK show macro_value ${2}_preun)
 local installarea=$(cmt -q show macro_value ${2}_installarea_prefix)
 unset CMTUSERCONTEXT
 cd $OLDPWD
@@ -999,7 +1000,7 @@ cat <<EOF
 if [ \$1 -eq 0 ]; then
 shift \$#;
 unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite;
-. @INSTALL_PREFIX@/cmtsite/setup.sh -tag=${3},${mode},noTest;
+. @INSTALL_PREFIX@/cmtsite/setup.sh -tag_add=${3},${mode},noTest;
 ${project_preun:+cd @INSTALL_PREFIX@/$(basename $(dirname $1))/$3/AtlasRelease/*/cmt;
 ${project_preun}
 }cd @INSTALL_PREFIX@/$(basename $(dirname $1))/$3/AtlasRelease/*/cmt;
@@ -1014,7 +1015,7 @@ cat <<EOF
 if [ \$1 -eq 0 ]; then
 shift \$#;
 unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite;
-. @INSTALL_PREFIX@/cmtsite/setup.sh -tag=${mode},noTest;
+. @INSTALL_PREFIX@/cmtsite/setup.sh -tag_add=${mode},noTest;
 unset CMTPATH CMTHOME CMTUSERCONTEXT;
 ${project_preun:+cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt
 ${project_preun}
@@ -1033,7 +1034,7 @@ cat <<EOF
 if [ \$1 -eq 0 ]; then
 shift \$#;
 unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite;
-. @INSTALL_PREFIX@/cmtsite/setup.sh -tag=${mode},noTest;
+. @INSTALL_PREFIX@/cmtsite/setup.sh -tag_add=${mode},noTest;
 unset CMTPATH CMTHOME CMTUSERCONTEXT
 ${project_preun:+cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt;
 ${project_preun}
@@ -1051,7 +1052,7 @@ cat <<EOF
 if [ \$1 -eq 0 ]; then
 shift \$#;
 unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite;
-. @INSTALL_PREFIX@/cmtsite/setup.sh -tag=${2},${3},${mode},noTest;
+. @INSTALL_PREFIX@/cmtsite/setup.sh -tag_add=${2},${3},${mode},noTest;
 ${project_preun:+cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt;
 ${project_preun}
 }cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt;
@@ -1068,7 +1069,7 @@ cat <<EOF
 if [ \$1 -eq 0 ]; then
 shift \$#;
 unset CMTROOT CMTSITE; cd @INSTALL_PREFIX@/cmtsite;
-. @INSTALL_PREFIX@/cmtsite/setup.sh -tag=${mode},noTest;
+. @INSTALL_PREFIX@/cmtsite/setup.sh -tag_add=${mode},noTest;
 unset CMTPATH CMTHOME CMTUSERCONTEXT;
 ${project_preun:+cd @INSTALL_PREFIX@/$2/$3/$cntnrcmt;
 ${project_preun}
diff --git a/PackDist/scripts/proj-run.sh b/PackDist/scripts/proj-run.sh
index 2201f62e9d4..bcde0b560d8 100755
--- a/PackDist/scripts/proj-run.sh
+++ b/PackDist/scripts/proj-run.sh
@@ -369,7 +369,7 @@ unset CMTPATH CMTPROJECTPATH
 unset CMTROOT CMTSITE
 if [ $project == AtlasRelease ]; then
     [ "$PROJRUNDBG" ] && set +x
-    . ${cmthome}/setup.sh -tag=${release},${mode},noTest${tags:+,${tags}} || exit 1
+    . ${cmthome}/setup.sh -tag_add=${release},${mode},noTest${tags:+,${tags}} || exit 1
     [ "$PROJRUNDBG" ] && set -x
     if [ -z ${projbase} ]; then
 	projbase=`cmt -q show macro_value ATLAS_DIST_AREA`
@@ -382,7 +382,7 @@ if [ $project == AtlasRelease ]; then
 
 elif [ $project == LCGCMT -o $project == Gaudi ]; then
     [ "$PROJRUNDBG" ] && set +x
-    . ${cmthome}/setup.sh -tag=${mode},noTest${tags:+,${tags}} || exit 1
+    . ${cmthome}/setup.sh -tag_add=${mode},noTest${tags:+,${tags}} || exit 1
     [ "$PROJRUNDBG" ] && set -x
     if [ -z ${projbase} ]; then
 	projbase=`cmt -q show macro_value EXTERNAL_PROJECT_AREA`
@@ -399,7 +399,7 @@ elif [ $project == LCGCMT -o $project == Gaudi ]; then
 
 elif [ $project == CMT ]; then
     [ "$PROJRUNDBG" ] && set +x
-    . ${cmthome}/setup.sh -tag=${mode},noTest${tags:+,${tags}} || exit 1
+    . ${cmthome}/setup.sh -tag_add=${mode},noTest${tags:+,${tags}} || exit 1
     [ "$PROJRUNDBG" ] && set -x
     cmtinfo=(`cmt show uses | awk '
 $1 == "use" && $2 == "CMT" { gsub(/[()]/, "", $4); print $4, $3; exit }
@@ -418,7 +418,7 @@ $1 == "use" && $2 == "CMT" { gsub(/[()]/, "", $4); print $4, $3; exit }
 
 else
     [ "$PROJRUNDBG" ] && set +x
-    . ${cmthome}/setup.sh -tag=${project},${release},${mode},noTest,builds${tags:+,${tags}} || exit 1
+    . ${cmthome}/setup.sh -tag_add=${project},${release},${mode},noTest,builds${tags:+,${tags}} || exit 1
     [ "$PROJRUNDBG" ] && set -x
     if [ -z ${projbase} ]; then
 	projbase=`echo $CMTPROJECTPATH | sed 's#^:\+##' | cut -d: -f1`
diff --git a/PackDist/scripts/relink.py b/PackDist/scripts/relink.py
index 74af744eb85..540c573a6ec 100755
--- a/PackDist/scripts/relink.py
+++ b/PackDist/scripts/relink.py
@@ -6,8 +6,8 @@
 Developed against Python 2.2
 """
 
-__version__ = '0.6.0'
-__date__ = 'Thu Oct 27 2011'
+__version__ = '0.7.0'
+__date__ = 'Fri Sep 26 2014'
 __author__  = 'Grigori Rybkine <Grigori.Rybkine@cern.ch>'
 
 import os, sys
@@ -169,9 +169,7 @@ def relink(path, Arg = (None, False)):
                             if v: print 'symlinked', `hatpath`, '->', `src`
                     else:
                         print >> sys.stderr, 'not_exported:', srcpath
-                        #print >> sys.stderr, 'not_exported:', hatpath, '->', s
                         os.remove(path);
-                        #if v: print >> sys.stderr, 'removed', `hatpath`
                         if v: print >> sys.stderr, 'removed', `hatpath`, '->', `s`
                 else:
                     print >> sys.stderr, 'external:', hatpath, '->', s
@@ -221,25 +219,47 @@ class ExportPaths(object):
             for l in f:
                 i = l.split()
                 assert len(i) == 2, '%s: %s: Wrong line format' % (path, `l`)
-                #i = [os.path.normpath(p) for p in i]
-                i[0] = os.path.realpath(i[0])
-                i[1] = os.path.normpath(i[1])
-                if i[0] in self.paths:
-                    if i[1] == self.paths[i[0]]:
-                        print >>sys.stderr, '%s %s: Duplicate export path' % \
-                              (i[0], i[1])
-                    else:
-                        print >>sys.stderr, '%s %s, %s: Redundant export paths' % \
-                              (i[0], self.paths[i[0]], i[1])
-                self.paths[i[0]] = i[1]
+                r = os.path.realpath(i[0])
+                i = [os.path.normpath(p) for p in i]
+                assert os.path.realpath(i[0]) == r, '%s (%s): Ambiguous export path' % (i[0], i[1])
+                # i[0] = os.path.realpath(i[0])
+                # i[1] = os.path.normpath(i[1])
+
+                for (_r, s), d in self.paths.iteritems():
+                    if r == _r:
+                        if i[0] == s and i[1] == d:
+                            print >>sys.stderr, '%s (%s): Duplicate export path' % (i[0], i[1])
+                        else:
+                            print >>sys.stderr, '%s (%s), %s (%s): Redundant export paths' % \
+                              (i[0], i[1], s, d)
+                self.paths[(r, i[0])] = i[1]
+                # if i[0] in self.paths:
+                #     if i[1] == self.paths[i[0]]:
+                #         print >>sys.stderr, '%s %s: Duplicate export path' % \
+                #               (i[0], i[1])
+                #     else:
+                #         print >>sys.stderr, '%s %s, %s: Redundant export paths' % \
+                #               (i[0], self.paths[i[0]], i[1])
+                # self.paths[i[0]] = i[1]
             f.close()
 
     def destination(self, path):
-#        pathl = path.lstrip(os.sep).split(os.sep)
-        pathl = os.path.realpath(path).lstrip(os.sep).split(os.sep)
-        for s, d in self.paths.iteritems():
+        rpathl = os.path.realpath(path).lstrip(os.sep).split(os.sep)
+        pathl = os.path.normpath(path).lstrip(os.sep).split(os.sep)
+        for (r, s), d in self.paths.iteritems():
+            # first try with real paths
+            rl = r.lstrip(os.sep).split(os.sep)
+            head = commonhead(rl, rpathl)
+#            print >>sys.stderr, 'destination: %s %s: %s' % \
+#                  (str(rl), str(rpathl), str(head))
+            if len(rl) == len(head):
+                return os.path.join(*(d.split(os.sep) + rpathl[len(rl):]))
+            elif len(rpathl) == len(head):
+                dl = d.lstrip(os.sep).split(os.sep)
+                if len(dl) + len(rpathl) - len(rl) > 0:
+                    return os.path.join(*dl[:len(dl) + len(rpathl) - len(rl)])
+            # then try with normalized paths
             sl = s.lstrip(os.sep).split(os.sep)
-#            sl = os.path.realpath(s).lstrip(os.sep).split(os.sep)
             head = commonhead(sl, pathl)
 #            print >>sys.stderr, 'destination: %s %s: %s' % \
 #                  (str(sl), str(pathl), str(head))
@@ -248,7 +268,7 @@ class ExportPaths(object):
             elif len(pathl) == len(head):
                 dl = d.lstrip(os.sep).split(os.sep)
                 if len(dl) + len(pathl) - len(sl) > 0:
-                    return os.path.join(*(dl[:len(dl) + len(pathl) - len(sl)]))
+                    return os.path.join(*dl[:len(dl) + len(pathl) - len(sl)])
         return None
 
 def main(argv=[__name__]):
-- 
GitLab