modbuild: better support for build modules in overlays

A new configuration file has been added to map human readable overlay
names to the corresponding directory. The overlay can be specified
with the --overlay option. The passed string can be either a name or a
directory. If a name is passed, this name must map to directory in the
configuration file ${PMODULES_ROOT}/config/overlays.conf. The name is
also used as to select the variant files 'files/variants.name'. The
selection of variant files can be overriden with the --system
option.
This commit is contained in:
2021-04-29 17:54:25 +02:00
parent d23fdf930a
commit 47b5fae59b
2 changed files with 57 additions and 11 deletions
+3 -3
View File
@@ -764,12 +764,12 @@ pbuild::make_all() {
fi
modulefile_dir=$(join_by '/' \
"${overlay}/${GROUP}/${PMODULES_MODULEFILES_DIR}" \
"${overlay_dir}/${GROUP}/${PMODULES_MODULEFILES_DIR}" \
"${names[@]}" \
"${module_name}")
modulefile_name="${modulefile_dir}/${module_version}"
PREFIX="${overlay}/${GROUP}/${module_name}/${module_version}"
PREFIX="${overlay_dir}/${GROUP}/${module_name}/${module_version}"
local -i i=0
for ((i=${#names[@]}-1; i >= 0; i--)); do
PREFIX+="/${names[i]}"
@@ -1479,7 +1479,7 @@ pbuild.bootstrap() {
MODULECMD=$(which true)
GROUP='Tools'
PREFIX="${overlay}/${GROUP}/Pmodules/${PMODULES_VERSION}"
PREFIX="${overlay_dir}/${GROUP}/Pmodules/${PMODULES_VERSION}"
C_INCLUDE_PATH="${PREFIX}/include"
CPLUS_INCLUDE_PATH="${PREFIX}/include"
+54 -8
View File
@@ -154,7 +154,7 @@ declare opt_verbose='no'
# array collecting all modules specified on the command line via '--with=module'
declare -a opt_with_modules=()
declare overlay=''
declare opt_overlay_name_or_dir=''
parse_args() {
@@ -259,10 +259,10 @@ parse_args() {
opt_update_modulefiles='yes'
;;
--overlay )
overlay=$2
opt_overlay_name_or_dir=$2
;;
--overlay=* )
overlay=${1/*=}
opt_overlay_name_or_dir=${1/*=}
;;
-- )
:
@@ -366,7 +366,6 @@ build_modules() {
fi
done
local variants=()
local variants_files=()
for f in "${files[@]}"; do
@@ -408,15 +407,64 @@ build_modules() {
done
}
declare -r OVERLAY_CONF="${PMODULES_ROOT}/${PMODULES_CONFIG_DIR}/overlays.conf"
get_overlay_name_and_dir() {
local "$1"
local "$2"
if [[ -r "${OVERLAY_CONF}" ]]; then
local toks=()
while read -a toks; do
if [[ ${toks[0]} == $3 ]] || [[ ${toks[1]} == $3 ]]; then
std::upvar $1 "${toks[0]}"
std::upvar $2 "${toks[1]}"
return 0
fi
done < "${OVERLAY_CONF}"
fi
return 1
}
#.............................................................................
# main
parse_args "$@"
if [[ -z "${opt_system}" ]]; then
opt_system=$(std::get_os_release)
#
# --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 overlay_dir of found confi
declare overlay_name=''
declare overlay_dir=''
if [[ -n "${opt_overlay_name_or_dir}" ]]; then
if ! get_overlay_name_and_dir overlay_name overlay_dir "${opt_overlay_name_or_dir}"; then
# not found in config
if [[ ${opt_overlay_name_or_dir:0:1} == / ]]; then
overlay_dir="${opt_overlay_name_or_dir}"
else
std::die 1 "Invalid overlay name -- ${opt_overlay_name_or_dir}"
fi
fi
if [[ -z "${opt_system}" ]] && [[ -n "${overlay_name}" ]]; then
opt_system="${overlay_name}"
fi
elif [[ -n "${opt_system}" ]]; then
get_overlay_name_and_dir overlay_name overlay_dir "${opt_system}" || :
fi
[[ -z "${overlay_name}" ]] && overlay_name='unknown'
[[ -z "${overlay_dir}" ]] && overlay_dir="${PMODULES_ROOT}"
[[ -z "${opt_system}" ]] && opt_system=$(std::get_os_release)
echo overlay_name=$overlay_name
echo overlay_dir=$overlay_dir
echo opt_system=$opt_system
pbuild.jobs "${opt_jobs}"
pbuild.force_rebuild "${opt_force_rebuild}"
pbuild.build_target "${opt_build_target}"
@@ -441,8 +489,6 @@ fi
source "${opt_build_config}" || \
std::die 3 "Oops: Cannot source configuration file -- '$_'"
[[ -z "${overlay}" ]] && overlay=${PMODULES_ROOT}
# :FIXME: should go dist files to
# ${PMODULES_ROOT}/var/distfiles
# or