From 6cc92f2d978384e94b760c218b6974e7edba7d7a Mon Sep 17 00:00:00 2001 From: Achim Gsell Date: Fri, 18 Feb 2022 14:38:54 +0100 Subject: [PATCH] modbuild: fixes --- Pmodules/modbuild.in | 109 ++++++++++--------------------------------- 1 file changed, 24 insertions(+), 85 deletions(-) diff --git a/Pmodules/modbuild.in b/Pmodules/modbuild.in index d9593d3..d55d3f4 100755 --- a/Pmodules/modbuild.in +++ b/Pmodules/modbuild.in @@ -233,11 +233,11 @@ parse_args() { --tmpdir=* ) PMODULES_TMPDIR="${1/--tmpdir=}" ;; - --system ) + --system | --overlay ) opt_system="$2" shift ;; - --system=* ) + --system=* | --overlay=* ) opt_system="${1/*=}" ;; --use-flags ) @@ -264,12 +264,6 @@ parse_args() { --update-modulefiles ) opt_update_modulefiles='yes' ;; - --overlay ) - opt_ol_name_or_dir=$2 - ;; - --overlay=* ) - opt_ol_name_or_dir=${1/*=} - ;; -- ) : ;; @@ -405,6 +399,10 @@ build_modules_legacy() { done std::die 10 "Aborting..." fi + declare ol_name='default' + declare ol_type='' + declare ol_dir="${PMODULES_ROOT}" + declare ol_install_dir="${PMODULES_ROOT}" local -i i=0 local -i num_variants=${#variants[@]} for ((i = 0; i < num_variants; i++)); do @@ -423,6 +421,11 @@ build_modules_yaml(){ local variants_file="${BUILDBLOCK_DIR}/files/" variants_file+="${BNAME_VARIANTS}.${opt_system}.yaml" + yaml_get_overlay(){ + local ol=$(yq e ".overlay" "${variants_file}") + [[ "${ol}" == 'null' ]] && ol='default' + echo "${ol}" + } yaml_get_versions(){ yq e "with_entries(select(.key | test(\"$1\"))) | keys" \ "${variants_file}"|cut -b3- @@ -452,6 +455,14 @@ build_modules_yaml(){ pattern+=" && /${m//\//\\/}( |$)/" done + local ol_name_or_dir=$(yaml_get_overlay) + get_ol_info "${ol_name_or_dir}" \ + ol_name \ + ol_type \ + ol_dir \ + ol_install_dir \ + || std::die 3 "${variants_file##*/}: unknown overlay -- ${ol_name_or_dir}" + # loop over all matching versions and all variants local key='' local -a keys=( $(yaml_get_versions "${version}") ) @@ -480,93 +491,17 @@ build_modules() { if [[ -e "${variants_file}.yaml" ]]; then build_modules_yaml "$@" else - build_modules_legacy "@" + build_modules_legacy "$@" fi } -declare -r OVERLAY_CONF="${PMODULES_ROOT}/${PMODULES_CONFIG_DIR}/overlays.conf" - -# -# Return overlay name *and* directory for an overlay given -# by name *or* directory. Search in the config file ${OVERLAY_CONF}. -# -# Arguments -# $1: name or directory of overlay -# -get_ol_name_and_dir() { - local "$1" # upvar for overlay name - local "$2" # upvar for overlay directory - local config_files=() - if [[ -v PMODULES_OVERLAY_CONF ]]; then - config_files+=("${PMODULES_OVERLAY_CONF}") - fi - config_files+=("${HOME}/.Pmodules/overlays.conf") - config_files+=("${OVERLAY_CONF}") - for config_file in "${config_files[@]}"; do - [[ -r "${config_file}" ]] || continue - local toks=() - while read -a toks; do - [[ -n "${toks[0]}" ]] || continue - [[ ${toks[0]} == \#* ]] && continue - if [[ ${toks[0]} == $3 ]] || [[ ${toks[1]} == $3 ]]; then - std::upvar $1 "${toks[0]}" - std::upvar $2 "${toks[1]}" - return 0 - fi - done < "${config_file}" - done - return 1 -} #............................................................................. # main parse_args "$@" -# -# set ol_name, ol_dir and opt_system -# -# --overlay=name -# lookup overlay directory, system name equivalent to overlay name -# --overlay=name --system=sysname -# lookup name, use given system name -# --overlay=dir -# use given overlay dir and default system name -# --system=name -# lookup name, set ol_dir of found config -declare ol_name='' -declare ol_type='' -declare ol_dir='' -declare ol_install_dir='' -if [[ -n "${opt_ol_name_or_dir}" ]]; then - get_overlay_info "${opt_ol_name_or_dir}" \ - ol_name \ - ol_type \ - ol_dir \ - ol_install_dir - if (( $? != 0 )); then - # not found in config - if [[ ${opt_ol_name_or_dir:0:1} == / ]]; then - ol_dir="${opt_ol_name_or_dir}" - else - std::die 1 "Invalid overlay name -- ${opt_ol_name_or_dir}" - fi - fi - if [[ -z "${opt_system}" ]] && [[ -n "${ol_name}" ]]; then - opt_system="${ol_name}" - fi -elif [[ -n "${opt_system}" ]]; then - get_ol_name_and_dir "${opt_system}" ol_name ol_type ol_dir ol_install_dir || : -fi - -ol_name="${ol_name:-unknown}" -ol_dir="${ol_dir:-${PMODULES_ROOT}}" -ol_install_dir="${ol_install_dir:-${ol_dir}}" opt_system="${opt_system:-$(std::get_os_release)}" -echo ol_name=$ol_name -echo ol_dir=$ol_dir -echo opt_system=$opt_system - pbuild.jobs "${opt_jobs}" pbuild.force_rebuild "${opt_force_rebuild}" pbuild.build_target "${opt_build_target}" @@ -610,6 +545,10 @@ module_name=${fname[${#fname[@]}-2]} # are we bootstrapping? If yes, go for it... # if [[ "${opt_bootstrap}" == 'yes' ]]; then + declare ol_name='default' + declare ol_type='' + declare ol_dir="${PMODULES_ROOT}" + declare ol_install_dir="${PMODULES_ROOT}" pbuild.bootstrap "${module_name}" "${versions[0]}" 'stable' exit $? fi