diff --git a/doc/source/design/extra-match-search.rst b/doc/source/design/extra-match-search.rst index c94bf969..ea6e575e 100644 --- a/doc/source/design/extra-match-search.rst +++ b/doc/source/design/extra-match-search.rst @@ -499,4 +499,9 @@ Specific impact - FUTURE: there may have room for optimization here +* As environment variable defined by modulefile commands like ``setenv`` are + set to an empty value during scan evaluation, if a modulepath entry contains + a reference to such environment variable, it will not match its expecting + value. + .. vim:set tabstop=2 shiftwidth=2 expandtab autoindent: diff --git a/testsuite/modulefiles.spider1/moda/1 b/testsuite/modulefiles.spider1/moda/1 index a2436e8b..d50da500 100644 --- a/testsuite/modulefiles.spider1/moda/1 +++ b/testsuite/modulefiles.spider1/moda/1 @@ -19,5 +19,27 @@ if {[info exists env(TESTSUITE_SPIDER_MODPATH1)]} { remove_modpath2 { remove-path MODULEPATH $env(TESTSUITEDIR)/modulefiles.spider2 } + use_append_modpath_extref1 { + module use -a $env(TESTSUITEDIR)/modulefiles.spid\$TESTSUITE_SPIDER_EXTREF + } + use_append_modpath_inref1 { + setenv TESTSUITE_SPIDER_INREF unk + module use -a $env(TESTSUITEDIR)/modulefiles.spid\$TESTSUITE_SPIDER_INREF + } + use_append_modpath_inref2 { + setenv TESTSUITE_SPIDER_INREF er2 + module use -a $env(TESTSUITEDIR)/modulefiles.spid\$TESTSUITE_SPIDER_INREF + } + prepend_modpath_extref1 { + prepend-path MODULEPATH $env(TESTSUITEDIR)/modulefiles.spid\$TESTSUITE_SPIDER_EXTREF + } + prepend_modpath_inref1 { + setenv TESTSUITE_SPIDER_INREF unk + prepend-path MODULEPATH $env(TESTSUITEDIR)/modulefiles.spid\$TESTSUITE_SPIDER_INREF + } + prepend_modpath_inref2 { + setenv TESTSUITE_SPIDER_INREF er2 + prepend-path MODULEPATH $env(TESTSUITEDIR)/modulefiles.spid\$TESTSUITE_SPIDER_INREF + } } } diff --git a/testsuite/modules.92-spider/090-spider-modpath.exp b/testsuite/modules.92-spider/090-spider-modpath.exp index 5f117de6..08bd585c 100644 --- a/testsuite/modules.92-spider/090-spider-modpath.exp +++ b/testsuite/modules.92-spider/090-spider-modpath.exp @@ -182,6 +182,62 @@ moda/2" } +# modulepath entry with environment variable reference +setenv_var TESTSUITE_SPIDER_MODPATH1 use_append_modpath_extref1 + +set tserr "$modpath.spider1: +moda/1 +moda/2 + +$modpath.spider2: +modb/1 +modb/2 + +$modpath.spider3: +modc/1 +modc/2" +set tserr_unkref "$modpath.spider1: +moda/1 +moda/2" + +setenv_var TESTSUITE_SPIDER_EXTREF er2 +testouterr_cmd sh {spider -t} OK $tserr +setenv_var TESTSUITE_SPIDER_EXTREF bad +testouterr_cmd sh {spider -t} OK $tserr_unkref +unsetenv_var TESTSUITE_SPIDER_EXTREF +testouterr_cmd sh {spider -t} OK $tserr_unkref + +setenv_var TESTSUITE_SPIDER_MODPATH1 use_append_modpath_inref1 +testouterr_cmd sh {spider -t} OK $tserr_unkref +setenv_var TESTSUITE_SPIDER_MODPATH1 use_append_modpath_inref2 +# setenv is not performed on env variable during scan evaluation +testouterr_cmd sh {spider -t} OK $tserr_unkref + + +setenv_var TESTSUITE_SPIDER_MODPATH1 prepend_modpath_extref1 +setenv_var TESTSUITE_SPIDER_EXTREF er2 +testouterr_cmd sh {spider -t} OK $tserr +setenv_var TESTSUITE_SPIDER_EXTREF bad +testouterr_cmd sh {spider -t} OK $tserr_unkref +unsetenv_var TESTSUITE_SPIDER_EXTREF +testouterr_cmd sh {spider -t} OK $tserr_unkref + +setenv_var TESTSUITE_SPIDER_MODPATH1 prepend_modpath_inref1 +testouterr_cmd sh {spider -t} OK $tserr_unkref +setenv_var TESTSUITE_SPIDER_MODPATH1 prepend_modpath_inref2 +# setenv is not performed on env variable during scan evaluation +testouterr_cmd sh {spider -t} OK $tserr_unkref + +setenv_var MODULEPATH $modpath.spid\$TESTSUITE_SPIDER_EXTREF +setenv_var TESTSUITE_SPIDER_MODPATH1 use_append_modpath2 +setenv_var TESTSUITE_SPIDER_EXTREF er1 +testouterr_cmd sh {spider -t} OK $tserr +setenv_var TESTSUITE_SPIDER_EXTREF bad +testouterr_cmd sh {spider -t} OK {} +unsetenv_var TESTSUITE_SPIDER_EXTREF +testouterr_cmd sh {spider -t} OK {} + + # # Cleanup #