From 6eec91076bb126f3a8fb2e59c7190f95249c33c1 Mon Sep 17 00:00:00 2001 From: Achim Gsell Date: Tue, 9 Apr 2024 09:33:20 +0200 Subject: [PATCH] build-system: setting of prefix and modulefile path reviewed Set prefix and directory/name of modulefile based on group not on environment variables like {COMPILER,MPI,HDF5}_VERSION --- CHANGELOG.md | 4 +- Pmodules/libpbuild.bash | 139 +++++++++++++++++----------------------- 2 files changed, 62 insertions(+), 81 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f5f16c5..6b24f6f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,9 +11,11 @@ (issue #236) * BUGFIX: writing list of 'systems' to module configuration file fixed (issues #235, #243) -* CHANGE: files in `$PMODULES_TMPDIR/` are now removed before +* Files in `$PMODULES_TMPDIR/` are now removed before and after building a module (except cleanup has been disbaled). (issue #242) +* Set prefix and directory/name of modulefile based on group not on + environment variables like `{COMPILER,MPI,HDF5}_VERSION` (issue #244) ### Toolchain * update to Tcl 8.6.14 (issue #239) diff --git a/Pmodules/libpbuild.bash b/Pmodules/libpbuild.bash index a90d481..7d41c41 100644 --- a/Pmodules/libpbuild.bash +++ b/Pmodules/libpbuild.bash @@ -1224,90 +1224,69 @@ _build_module() { # PREFIX # set_full_module_name_and_prefix() { - do_simple_group(){ - modulefile_dir="${ol_mod_root}/${GROUP}/${PMODULES_MODULEFILES_DIR}/" - modulefile_dir+="${module_name}" - modulefile_name="${modulefile_dir}/${module_version}" - PREFIX="${ol_inst_root}/${GROUP}/${module_name}/${module_version}" + die_no_compiler(){ + std::die 1 \ + "%s: %s" \ + "${module_name}/${module_version}" \ + "module is in group '${GROUP}' but no compiler loaded!" } - do_hierarchical_group(){ - join_by() { - local IFS="$1" - shift - echo "$*" - } - # define hierarchies - if [[ -v COMPILER_VERSION ]]; then - Compiler_HIERARCHY='${COMPILER}/${COMPILER_VERSION}' - else - unset Compiler_HIERARCHY - fi - if [[ -v COMPILER_VERSION ]] && \ - [[ -v HDF5_SERIAL_VERSION ]]; then - HDF5_serial_HIERARCHY='${COMPILER}/${COMPILER_VERSION}' - HDF5_serial_HIERARCHY+=' hdf5_serial/${HDF5_SERIAL_VERSION}' - else - unset HDF5_serial_HIERARCHY - fi - if [[ -v COMPILER_VERSION ]] && \ - [[ -v MPI_VERSION ]]; then - MPI_HIERARCHY='${COMPILER}/${COMPILER_VERSION}' - MPI_HIERARCHY+=' ${MPI}/${MPI_VERSION}' - else - unset MPI_HIERARCHY - fi - if [[ -v COMPILER_VERSION ]] && \ - [[ -v MPI_VERSION ]] && \ - [[ HDF5_VERSION ]]; then - HDF5_HIERARCHY='${COMPILER}/${COMPILER_VERSION}' - HDF5_HIERARCHY+=' ${MPI}/${MPI_VERSION}' - HDF5_HIERARCHY+=' hdf5/${HDF5_VERSION}' - else - unset HDF5_HIERARCHY - fi - - # evaluate - local names=() - local -n vname="${GROUP}"_HIERARCHY - if [[ -v vname ]]; then - names=( $(eval echo ${vname}) ) - else - std::die 1 \ - "%s: %s" \ - "${module_name}/${module_version}" \ - "not all hierarchical dependencies loaded!" - fi - - modulefile_dir=$(join_by '/' \ - "${ol_mod_root}" \ - "${GROUP}" \ - "${PMODULES_MODULEFILES_DIR}" \ - "${names[@]}" \ - "${module_name}") - if [[ -L "${modulefile_dir}" ]]; then - modulefile_dir=$(readlink -m "${modulefile_dir}") - fi - modulefile_name="${modulefile_dir}/${module_version}" - - PREFIX="${ol_inst_root}/${GROUP}/${module_name}/${module_version}" - local -i i=0 - for ((i=${#names[@]}-1; i >= 0; i--)); do - PREFIX+="/${names[i]}" - done + die_no_mpi(){ + std::die 1 \ + "%s: %s" \ + "${module_name}/${module_version}" \ + "module is in group '${GROUP}' but no MPI module loaded!" + } + die_no_hdf5(){ + std::die 1 \ + "%s: %s" \ + "${module_name}/${module_version}" \ + "module is in group '${GROUP}' but no HDF5 module loaded!" } - [[ -n ${GROUP} ]] || std::die 1 \ - "%s: %s" \ - "${module_name}/${module_version}" \ - "group not set." - - local -i grp_depth - compute_group_depth grp_depth "${ol_mod_root}/${GROUP}/${PMODULES_MODULEFILES_DIR}" - if (( grp_depth == 0 )); then - do_simple_group - else - do_hierarchical_group + modulefile_dir="${ol_mod_root}/${GROUP}/${PMODULES_MODULEFILES_DIR}/" + PREFIX="${ol_inst_root}/${GROUP}/${module_name}/${module_version}/" + case "${GROUP}" in + Compiler ) + [[ -v COMPILER_VERSION ]] || die_no_compiler + modulefile_dir+="${COMPILER}/${COMPILER_VERSION}/" + PREFIX+="${COMPILER}/${COMPILER_VERSION}/" + ;; + MPI ) + [[ -v COMPILER_VERSION ]] || die_no_compiler + [[ -v MPI_VERSION ]] || die_no_mpi + modulefile_dir+="${COMPILER}/${COMPILER_VERSION}/" + modulefile_dir+="${MPI}/${MPI_VERSION}/" + PREFIX+="${MPI}/${MPI_VERSION}/" + PREFIX+="${COMPILER}/${COMPILER_VERSION}/" + ;; + HDF5 ) + [[ -v COMPILER_VERSION ]] || die_no_compiler + [[ -v MPI_VERSION ]] || die_no_mpi + [[ -v HDF5_VERSION ]] || die_no_hdf5 + modulefile_dir+="${COMPILER}/${COMPILER_VERSION}/" + modulefile_dir+="${MPI}/${MPI_VERSION}/" + modulefile_dir+="${HDF5}/${HDF5_VERSION}/" + PREFIX+="${HDF5}/${HDF5_VERSION}/" + PREFIX+="${MPI}/${MPI_VERSION}/" + PREFIX+="${COMPILER}/${COMPILER_VERSION}/" + ;; + HDF5_serial ) + [[ -v COMPILER_VERSION ]] || die_no_compiler + [[ -v HDF5_SERIAL_VERSION ]] || die_no_hdf5 + modulefile_dir+="${COMPILER}/${COMPILER_VERSION}/" + modulefile_dir+="${hdf5_serial}/${HDF5_SERIAL_VERSION}/" + PREFIX+="${hdf5_serial}/${HDF5_SERIAL_VERSION}/" + PREFIX+="${COMPILER}/${COMPILER_VERSION}/" + ;; + * ) + : + ;; + esac + modulefile_dir+="${module_name}" + if [[ -L "${modulefile_dir}" ]]; then + modulefile_dir=$(readlink -m "${modulefile_dir}") fi + modulefile_name="${modulefile_dir}/${module_version}" } # set_full_module_name_and_prefix #......................................................................