Skip to content

Commit abbf2de

Browse files
committed
Correctly parse module spec on depends-on & co
Correctly parse the module specifications passed as argument on depends-on, always-load and prereq-all modulefile commands. It especially fixes module specification containing the definition of variants. Closes #626 Signed-off-by: Xavier Delaruelle <xavier.delaruelle@cea.fr>
1 parent 01bbca0 commit abbf2de

8 files changed

Lines changed: 79 additions & 9 deletions

File tree

NEWS.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff 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:

tcl/mfcmd.tcl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff 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]} {

tcl/modscan.tcl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -138,27 +138,27 @@ proc provide-sc {args} {
138138

139139
proc 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

148148
proc 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

157157
proc 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
}

testsuite/modulefiles.4/bar/1

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff 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+
}

testsuite/modulefiles.4/lcompat/1.12

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff 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
}

testsuite/modules.50-cmds/515-depends-on.exp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,23 @@ set tserr "$modlin $mpre $modlin
227227
testouterr_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
#

testsuite/modules.50-cmds/516-prereq-all.exp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,22 @@ set tserr "$modlin $mpre $modlin
227227
testouterr_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
#

testsuite/modules.50-cmds/517-always-load.exp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,22 @@ set tserr "$modlin $mpre $modlin
281281
testouterr_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
#

0 commit comments

Comments
 (0)