Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions init/cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,15 @@ if(DEFINED ENV{MODULES_RUN_QUARANTINE})
foreach(_mlv ${_mlv_list})
if(${_mlv} MATCHES "^[A-Za-z_][A-Za-z0-9_]*$")
if(DEFINED ENV{${_mlv}})
set(_mlre "${_mlre}__MODULES_QUAR_${_mlv}=$ENV{${_mlv}};")
string(APPEND _mlre
" [===[__MODULES_QUAR_${_mlv}=$ENV{${_mlv}}]===]")
endif()
set(_mlrv "MODULES_RUNENV_${_mlv}")
set(_mlre "${_mlre}${_mlv}=$ENV{${_mlrv}};")
string(APPEND _mlre " [===[${_mlv}=$ENV{${_mlrv}}]===]")
endif()
endforeach()
if (NOT "${_mlre}" STREQUAL "")
set(_mlre "env;${_mlre}__MODULES_QUARANTINE_SET=1;")
set(_mlre "env ${_mlre} __MODULES_QUARANTINE_SET=1")
endif()
endif()

Expand All @@ -26,8 +27,9 @@ endif()
execute_process(COMMAND mktemp -t moduleinit.cmake.XXXXXXXXXXXX
OUTPUT_VARIABLE tempfile_name
OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND ${_mlre} @TCLSH@ "@libexecdir@/modulecmd.tcl" cmake autoinit
OUTPUT_FILE ${tempfile_name})
set(quotedArgs "COMMAND ${_mlre} @TCLSH@ \"@libexecdir@/modulecmd.tcl\" cmake")
string(APPEND quotedArgs " autoinit OUTPUT_FILE ${tempfile_name}")
cmake_language(EVAL CODE "execute_process(${quotedArgs})")
if(EXISTS ${tempfile_name})
include(${tempfile_name})
file(REMOVE ${tempfile_name})
Expand Down
42 changes: 17 additions & 25 deletions tcl/envmngt.tcl.in
Original file line number Diff line number Diff line change
Expand Up @@ -1178,13 +1178,10 @@ end}
}
cmake {
if {[getConf quarantine_support]} {
set pre_exec "\n execute_process(COMMAND \${_mlre} $tclshbin\
\"$::argv0\" cmake "
set pre_exec "COMMAND \${_mlre} $tclshbin \\\"$::argv0\\\" cmake"
} else {
set pre_exec "\n execute_process(COMMAND $tclshbin\
\"$::argv0\" cmake "
set pre_exec "COMMAND $tclshbin \\\"$::argv0\\\" cmake"
}
set post_exec "\n OUTPUT_FILE \${tempfile_name})\n"
set fdef {function(module)
cmake_policy(SET CMP0007 NEW)}
if {[getConf quarantine_support]} {
Expand All @@ -1195,14 +1192,15 @@ end}
foreach(_mlv ${_mlv_list})
if(${_mlv} MATCHES "^[A-Za-z_][A-Za-z0-9_]*$")
if(DEFINED ENV{${_mlv}})
set(_mlre "${_mlre}__MODULES_QUAR_${_mlv}=$ENV{${_mlv}};")
string(APPEND _mlre
" [===[__MODULES_QUAR_${_mlv}=$ENV{${_mlv}}]===]")
endif()
set(_mlrv "MODULES_RUNENV_${_mlv}")
set(_mlre "${_mlre}${_mlv}=$ENV{${_mlrv}};")
string(APPEND _mlre " [===[${_mlv}=$ENV{${_mlrv}}]===]")
endif()
endforeach()
if (NOT "${_mlre}" STREQUAL "")
set(_mlre "env;${_mlre}__MODULES_QUARANTINE_SET=1;")
set(_mlre "env ${_mlre} __MODULES_QUARANTINE_SET=1")
endif()
endif()}
}
Expand All @@ -1211,23 +1209,17 @@ end}
execute_process(COMMAND mktemp -t moduleinit.cmake.XXXXXXXXXXXX
OUTPUT_VARIABLE tempfile_name
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(${ARGC} EQUAL 1)}
# adapt command definition depending on the number of args to be
# able to pass to some extend (<5 args) empty string element to
# modulecmd (no other way as empty element in ${ARGV} are skipped
append fdef "$pre_exec\"\${ARGV0}\"$post_exec"
append fdef { elseif(${ARGC} EQUAL 2)}
append fdef "$pre_exec\"\${ARGV0}\" \"\${ARGV1}\"$post_exec"
append fdef { elseif(${ARGC} EQUAL 3)}
append fdef "$pre_exec\"\${ARGV0}\" \"\${ARGV1}\"\
\"\${ARGV2}\"$post_exec"
append fdef { elseif(${ARGC} EQUAL 4)}
append fdef "$pre_exec\"\${ARGV0}\" \"\${ARGV1}\"\
\"\${ARGV2}\" \"\${ARGV3}\"$post_exec"
append fdef { else()}
append fdef "$pre_exec\${ARGV}$post_exec"
append fdef { endif()
if(EXISTS ${tempfile_name})
}
append fdef " set(quotedArgs \"$pre_exec\")"
append fdef {
cmake_parse_arguments(PARSE_ARGV 0 FWD "" "" "")
foreach(arg IN LISTS FWD_UNPARSED_ARGUMENTS)
string(APPEND quotedArgs " [===[${arg}]===]")
endforeach()
string(APPEND quotedArgs " OUTPUT_FILE ${tempfile_name}")
cmake_language(EVAL CODE "execute_process(${quotedArgs})")
}
append fdef { if(EXISTS ${tempfile_name})
include(${tempfile_name})
file(REMOVE ${tempfile_name})
endif()
Expand Down
76 changes: 16 additions & 60 deletions testsuite/bin/install_test_cmake
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ include(${initfile})

# execute command list
set(code 0)
set(runml 0)
set(func "module")
string(REPLACE ":" ";" cmdsplit "${cmdlist}")
# empty command list, means one empty command
list (LENGTH cmdlist cmdcnt)
Expand All @@ -38,70 +38,26 @@ else()
foreach(cmd ${cmdsplit})
# call ml procedure instead of module
if("${cmd}" STREQUAL "ml")
set(runml 1)
# if command equals to NOARG string, means call with no arg passed
elseif("${cmd}" STREQUAL "NOARG")
if (${runml} EQUAL 0)
module()
else()
ml()
endif()
set(func "ml")
else()
string(REPLACE "," ";" cmdelt "${cmd}")
list (LENGTH cmdelt eltcnt)
if(${eltcnt} GREATER 4)
list(GET cmdelt 0 elt0)
list(GET cmdelt 1 elt1)
list(GET cmdelt 2 elt2)
list(GET cmdelt 3 elt3)
list(GET cmdelt 4 elt4)
if (${runml} EQUAL 0)
module("${elt0}" "${elt1}" "${elt2}" "${elt3}" "${elt4}")
else()
ml("${elt0}" "${elt1}" "${elt2}" "${elt3}" "${elt4}")
endif()
elseif(${eltcnt} GREATER 3)
list(GET cmdelt 0 elt0)
list(GET cmdelt 1 elt1)
list(GET cmdelt 2 elt2)
list(GET cmdelt 3 elt3)
if (${runml} EQUAL 0)
module("${elt0}" "${elt1}" "${elt2}" "${elt3}")
else()
ml("${elt0}" "${elt1}" "${elt2}" "${elt3}")
endif()
elseif(${eltcnt} GREATER 2)
list(GET cmdelt 0 elt0)
list(GET cmdelt 1 elt1)
list(GET cmdelt 2 elt2)
if (${runml} EQUAL 0)
module("${elt0}" "${elt1}" "${elt2}")
else()
ml("${elt0}" "${elt1}" "${elt2}")
endif()
elseif(${eltcnt} GREATER 1)
list(GET cmdelt 0 elt0)
list(GET cmdelt 1 elt1)
if (${runml} EQUAL 0)
module("${elt0}" "${elt1}")
else()
ml("${elt0}" "${elt1}")
endif()
elseif(${eltcnt} GREATER 0)
list(GET cmdelt 0 elt0)
if (${runml} EQUAL 0)
module("${elt0}")
else()
ml("${elt0}")
endif()
else()
set(quotedArgs "")
# if command equals to NOARG string, means call with no arg passed
if(NOT "${cmd}" STREQUAL "NOARG")
string(REPLACE "," ";" cmdelt "${cmd}")
list (LENGTH cmdelt eltcnt)
# empty arg list, means one empty arg
if (${runml} EQUAL 0)
module("")
if (${eltcnt} EQUAL 0)
string(APPEND quotedArgs "\"\"")
else()
ml("")
foreach(elt IN LISTS cmdelt)
if(NOT "${quotedArgs}" STREQUAL "")
string(APPEND quotedArgs " ")
endif()
string(APPEND quotedArgs "[===[${elt}]===]")
endforeach()
endif()
endif()
cmake_language(EVAL CODE "${func}(${quotedArgs})")
endif()
if(NOT module_result AND NOT ${module_result} STREQUAL "")
set(code 1)
Expand Down
2 changes: 1 addition & 1 deletion testsuite/install.00-init/080-args.exp
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ foreach shell $othlang_list {
set postmsg "\nError: \nExecution halted"
}
cmake {
set postmsg "\nCMake Error at testsuite/bin/install_test_cmake:115 \\\(message\\\):\n\n"
set postmsg "\nCMake Error at testsuite/bin/install_test_cmake:71 \\\(message\\\):\n\n"
}
default {
set postmsg {}
Expand Down
53 changes: 18 additions & 35 deletions testsuite/modules.70-maint/120-autoinit.exp
Original file line number Diff line number Diff line change
Expand Up @@ -413,36 +413,28 @@ set func_cmake "function\\\(module\\\)
\\s*foreach\\\(_mlv \\\${_mlv_list}\\\)
\\s*if\\\(\\\${_mlv} MATCHES \"\\\^\\\[A-Za-z_\\\]\\\[A-Za-z0-9_\\\]\\\*\\\$\"\\\)
\\s*if\\\(DEFINED ENV{\\\${_mlv}}\\\)
\\s*set\\\(_mlre \"\\\${_mlre}__MODULES_QUAR_\\\${_mlv}=\\\$ENV{\\\${_mlv}};\"\\\)
\\s*string\\\(APPEND _mlre
\\s*\" \\\[===\\\[__MODULES_QUAR_\\\${_mlv}=\\\$ENV{\\\${_mlv}}\\\]===\\\]\"\\\)
\\s*endif\\\(\\\)
\\s*set\\\(_mlrv \"MODULES_RUNENV_\\\${_mlv}\"\\\)
\\s*set\\\(_mlre \"\\\${_mlre}\\\${_mlv}=\\\$ENV{\\\${_mlrv}};\"\\\)
\\s*string\\\(APPEND _mlre \" \\\[===\\\[\\\${_mlv}=\\\$ENV{\\\${_mlrv}}\\\]===\\\]\"\\\)
\\s*endif\\\(\\\)
\\s*endforeach\\\(\\\)
\\s*if \\\(NOT \"\\\${_mlre}\" STREQUAL \"\"\\\)
\\s*set\\\(_mlre \"env;\\\${_mlre}__MODULES_QUARANTINE_SET=1;\"\\\)
\\s*set\\\(_mlre \"env \\\${_mlre} __MODULES_QUARANTINE_SET=1\"\\\)
\\s*endif\\\(\\\)
\\s*endif\\\(\\\)
\\s*set\\\(_mlstatus TRUE\\\)
\\s*execute_process\\\(COMMAND mktemp -t moduleinit.cmake.XXXXXXXXXXXX
\\s*OUTPUT_VARIABLE tempfile_name
\\s*OUTPUT_STRIP_TRAILING_WHITESPACE\\\)
\\s*if\\\(\\\${ARGC} EQUAL 1\\\)
\\s*execute_process\\\(COMMAND \\\${_mlre} $tclshlocre \"$modulecmd_pathre\" cmake \"\\\${ARGV0}\"
\\s*OUTPUT_FILE \\\${tempfile_name}\\\)
\\s*elseif\\\(\\\${ARGC} EQUAL 2\\\)
\\s*execute_process\\\(COMMAND \\\${_mlre} $tclshlocre \"$modulecmd_pathre\" cmake \"\\\${ARGV0}\" \"\\\${ARGV1}\"
\\s*OUTPUT_FILE \\\${tempfile_name}\\\)
\\s*elseif\\\(\\\${ARGC} EQUAL 3\\\)
\\s*execute_process\\\(COMMAND \\\${_mlre} $tclshlocre \"$modulecmd_pathre\" cmake \"\\\${ARGV0}\" \"\\\${ARGV1}\" \"\\\${ARGV2}\"
\\s*OUTPUT_FILE \\\${tempfile_name}\\\)
\\s*elseif\\\(\\\${ARGC} EQUAL 4\\\)
\\s*execute_process\\\(COMMAND \\\${_mlre} $tclshlocre \"$modulecmd_pathre\" cmake \"\\\${ARGV0}\" \"\\\${ARGV1}\" \"\\\${ARGV2}\" \"\\\${ARGV3}\"
\\s*OUTPUT_FILE \\\${tempfile_name}\\\)
\\s*else\\\(\\\)
\\s*execute_process\\\(COMMAND \\\${_mlre} $tclshlocre \"$modulecmd_pathre\" cmake \\\${ARGV}
\\s*OUTPUT_FILE \\\${tempfile_name}\\\)
\\s*endif\\\(\\\)
\\s*set\\\(quotedArgs \"COMMAND \\\${_mlre} $tclshlocre \\\\\"$modulecmd_pathre\\\\\" cmake\"\\\)
\\s*cmake_parse_arguments\\\(PARSE_ARGV 0 FWD \"\" \"\" \"\"\\\)
\\s*foreach\\\(arg IN LISTS FWD_UNPARSED_ARGUMENTS\\\)
\\s*string\\\(APPEND quotedArgs \" \\\[===\\\[\\\${arg}\\\]===\\\]\"\\\)
\\s*endforeach\\\(\\\)
\\s*string\\\(APPEND quotedArgs \" OUTPUT_FILE \\\${tempfile_name}\"\\\)
\\s*cmake_language\\\(EVAL CODE \"execute_process\\\(\\\${quotedArgs}\\\)\"\\\)
\\s*if\\\(EXISTS \\\${tempfile_name}\\\)
\\s*include\\\(\\\${tempfile_name}\\\)
\\s*file\\\(REMOVE \\\${tempfile_name}\\\)
Expand Down Expand Up @@ -619,22 +611,13 @@ set func_cmake "function\\\(module\\\)
\\s*execute_process\\\(COMMAND mktemp -t moduleinit.cmake.XXXXXXXXXXXX
\\s*OUTPUT_VARIABLE tempfile_name
\\s*OUTPUT_STRIP_TRAILING_WHITESPACE\\\)
\\s*if\\\(\\\${ARGC} EQUAL 1\\\)
\\s*execute_process\\\(COMMAND $tclshlocre \"$modulecmd_pathre\" cmake \"\\\${ARGV0}\"
\\s*OUTPUT_FILE \\\${tempfile_name}\\\)
\\s*elseif\\\(\\\${ARGC} EQUAL 2\\\)
\\s*execute_process\\\(COMMAND $tclshlocre \"$modulecmd_pathre\" cmake \"\\\${ARGV0}\" \"\\\${ARGV1}\"
\\s*OUTPUT_FILE \\\${tempfile_name}\\\)
\\s*elseif\\\(\\\${ARGC} EQUAL 3\\\)
\\s*execute_process\\\(COMMAND $tclshlocre \"$modulecmd_pathre\" cmake \"\\\${ARGV0}\" \"\\\${ARGV1}\" \"\\\${ARGV2}\"
\\s*OUTPUT_FILE \\\${tempfile_name}\\\)
\\s*elseif\\\(\\\${ARGC} EQUAL 4\\\)
\\s*execute_process\\\(COMMAND $tclshlocre \"$modulecmd_pathre\" cmake \"\\\${ARGV0}\" \"\\\${ARGV1}\" \"\\\${ARGV2}\" \"\\\${ARGV3}\"
\\s*OUTPUT_FILE \\\${tempfile_name}\\\)
\\s*else\\\(\\\)
\\s*execute_process\\\(COMMAND $tclshlocre \"$modulecmd_pathre\" cmake \\\${ARGV}
\\s*OUTPUT_FILE \\\${tempfile_name}\\\)
\\s*endif\\\(\\\)
\\s*set\\\(quotedArgs \"COMMAND $tclshlocre \\\\\"$modulecmd_pathre\\\\\" cmake\"\\\)
\\s*cmake_parse_arguments\\\(PARSE_ARGV 0 FWD \"\" \"\" \"\"\\\)
\\s*foreach\\\(arg IN LISTS FWD_UNPARSED_ARGUMENTS\\\)
\\s*string\\\(APPEND quotedArgs \" \\\[===\\\[\\\${arg}\\\]===\\\]\"\\\)
\\s*endforeach\\\(\\\)
\\s*string\\\(APPEND quotedArgs \" OUTPUT_FILE \\\${tempfile_name}\"\\\)
\\s*cmake_language\\\(EVAL CODE \"execute_process\\\(\\\${quotedArgs}\\\)\"\\\)
\\s*if\\\(EXISTS \\\${tempfile_name}\\\)
\\s*include\\\(\\\${tempfile_name}\\\)
\\s*file\\\(REMOVE \\\${tempfile_name}\\\)
Expand Down