File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -76,6 +76,10 @@ Modules 5.7.0 (not yet released)
7676* Fix superseding definition of ``source `` Tcl command when
7777 :mconfig: `source_cache ` configuration option is enabled to support
7878 ``-encoding `` option. (fix issue #627)
79+ * Correctly parse the module specifications passed as argument on
80+ :mfcmd: `depends-on `, mfcmd:`always-load ` and :mfcmd: `prereq-all ` modulefile
81+ commands. It especially fixes module specification containing the definition
82+ of variants. (fixes issue #626)
7983
8084
8185.. _5.6 release notes :
Original file line number Diff line number Diff line change @@ -1152,6 +1152,10 @@ proc parsePrereqCommandArgs {cmd args} {
11521152 } elseif {[set mispopt [lsearch -inline -glob $prereq_list --*]] ne {}} {
11531153 knerror " Misplaced option '$mispopt '"
11541154 }
1155+
1156+ # parse module version specification
1157+ set prereq_list [parseModuleSpecification 0 0 0 0 {*}$prereq_list ]
1158+
11551159 return [list $tag_list $modulepath_list $optional $opt_list $prereq_list ]
11561160}
11571161
@@ -1162,9 +1166,6 @@ proc prereqAnyModfileCmd {tryload auto args} {
11621166 set currentModule [currentState modulename]
11631167 set curmodnamevr [currentState modulenamevr]
11641168
1165- # parse module version specification
1166- set args [parseModuleSpecification 0 0 0 0 {*}$args ]
1167-
11681169 # register prereq list (sets of optional prereq are registered as list)
11691170 # unless record inhibited for current iterp context
11701171 if {[currentState inhibit_req_record] != [currentState evalid]} {
Original file line number Diff line number Diff line change @@ -138,27 +138,27 @@ proc provide-sc {args} {
138138
139139proc prereq-sc {args} {
140140 lassign [parsePrereqCommandArgs prereq {*}$args ] tag_list modulepath_list\
141- optional opt_list args
141+ optional opt_list modspec_list
142142
143- foreach modspec [parseModuleSpecification 0 0 0 0 {*} $args ] {
143+ foreach modspec $modspec_list {
144144 recordScanModuleElt $modspec prereq prereq-any depends-on-any require
145145 }
146146}
147147
148148proc prereq-all-sc {args} {
149149 lassign [parsePrereqCommandArgs prereq-all {*}$args ] tag_list\
150- modulepath_list optional opt_list args
150+ modulepath_list optional opt_list modspec_list
151151
152- foreach modspec [parseModuleSpecification 0 0 0 0 {*} $args ] {
152+ foreach modspec $modspec_list {
153153 recordScanModuleElt $modspec prereq-all depends-on require
154154 }
155155}
156156
157157proc always-load-sc {args} {
158158 lassign [parsePrereqCommandArgs always-load {*}$args ] tag_list\
159- modulepath_list optional opt_list args
159+ modulepath_list optional opt_list modspec_list
160160
161- foreach modspec [parseModuleSpecification 0 0 0 0 {*} $args ] {
161+ foreach modspec $modspec_list {
162162 recordScanModuleElt $modspec always-load require
163163 }
164164}
Original file line number Diff line number Diff line change @@ -71,3 +71,10 @@ if {[info exists env(TESTSUITE_PROVIDE)]} {
7171 }
7272 }
7373}
74+ if {[info exists env(TESTSUITE_LCOMPAT)]} {
75+ switch -- $env(TESTSUITE_LCOMPAT) {
76+ depon_spec1 - allo_spec1 - prall_spec1 {
77+ variant foo val1 val2 val3
78+ }
79+ }
80+ }
Original file line number Diff line number Diff line change @@ -10,5 +10,14 @@ if {[info exists env(TESTSUITE_LCOMPAT)]} {
1010 haveDynamicMPATH2 {
1111 haveDynamicMPATH foo bar
1212 }
13+ depon_spec1 {
14+ depends-on bar/1 foo=val1
15+ }
16+ allo_spec1 {
17+ always-load bar/1 foo=val1
18+ }
19+ prall_spec1 {
20+ prereq-all bar/1 foo=val1
21+ }
1322 }
1423}
Original file line number Diff line number Diff line change @@ -227,6 +227,23 @@ set tserr "$modlin $mpre $modlin
227227testouterr_cmd_re sh "whatis $mod" OK $tserr
228228
229229
230+ setenv_var TESTSUITE_LCOMPAT depon_spec1
231+ setenv_var MODULES_ADVANCED_VERSION_SPEC 1
232+ set mp $modpath.4
233+ setenv_path_var MODULEPATH $mp
234+ set mod lcompat/1.12
235+
236+ set ans [list]
237+ lappend ans [list set __MODULES_LMVARIANT bar/1&foo|val1|0|0]
238+ lappend ans [list set __MODULES_LMPREREQ $mod&bar/1\ foo=val1]
239+ lappend ans [list set _LMFILES_ $mp/bar/1:$mp/$mod]
240+ lappend ans [list set LOADEDMODULES bar/1:$mod]
241+ lappend ans [list set __MODULES_LMTAG bar/1&auto-loaded]
242+ set tserr [msg_top_load $mod {} bar/1{foo=val1} {}]
243+ testouterr_cmd sh "load --auto $mod" $ans $tserr
244+
245+
246+
230247#
231248# Cleanup
232249#
Original file line number Diff line number Diff line change @@ -227,6 +227,22 @@ set tserr "$modlin $mpre $modlin
227227testouterr_cmd_re sh "whatis $mod" OK $tserr
228228
229229
230+ setenv_var TESTSUITE_LCOMPAT prall_spec1
231+ setenv_var MODULES_ADVANCED_VERSION_SPEC 1
232+ set mp $modpath.4
233+ setenv_path_var MODULEPATH $mp
234+ set mod lcompat/1.12
235+
236+ set ans [list]
237+ lappend ans [list set __MODULES_LMVARIANT bar/1&foo|val1|0|0]
238+ lappend ans [list set __MODULES_LMPREREQ $mod&bar/1\ foo=val1]
239+ lappend ans [list set _LMFILES_ $mp/bar/1:$mp/$mod]
240+ lappend ans [list set LOADEDMODULES bar/1:$mod]
241+ lappend ans [list set __MODULES_LMTAG bar/1&auto-loaded]
242+ set tserr [msg_top_load $mod {} bar/1{foo=val1} {}]
243+ testouterr_cmd sh "load --auto $mod" $ans $tserr
244+
245+
230246#
231247# Cleanup
232248#
Original file line number Diff line number Diff line change @@ -281,6 +281,22 @@ set tserr "$modlin $mpre $modlin
281281testouterr_cmd_re sh "whatis $mod" OK $tserr
282282
283283
284+ setenv_var TESTSUITE_LCOMPAT allo_spec1
285+ setenv_var MODULES_ADVANCED_VERSION_SPEC 1
286+ set mp $modpath.4
287+ setenv_path_var MODULEPATH $mp
288+ set mod lcompat/1.12
289+
290+ set ans [list]
291+ lappend ans [list set __MODULES_LMVARIANT bar/1&foo|val1|0|0]
292+ lappend ans [list set __MODULES_LMPREREQ $mod&bar/1\ foo=val1]
293+ lappend ans [list set _LMFILES_ $mp/bar/1:$mp/$mod]
294+ lappend ans [list set LOADEDMODULES bar/1:$mod]
295+ lappend ans [list set __MODULES_LMTAG bar/1&keep-loaded&auto-loaded]
296+ set tserr [msg_top_load $mod {} bar/1{foo=val1} {}]
297+ testouterr_cmd sh "load --auto $mod" $ans $tserr
298+
299+
284300#
285301# Cleanup
286302#
You can’t perform that action at this time.
0 commit comments