summaryrefslogtreecommitdiffhomepage
path: root/subr/build_init.subr
diff options
context:
space:
mode:
authorLucio Andrés Illanes Albornoz <lucio@lucioillanes.de>2020-03-05 13:43:03 +0000
committerLucio Andrés Illanes Albornoz <lucio@lucioillanes.de>2020-03-05 13:43:03 +0000
commit487c40f31185b5bbcf3c1f278af2fe05150ac9d5 (patch)
treea16ca2957c6fa3a0224044c5dcf79c2eb8e25c23 /subr/build_init.subr
parent7bed8897ea5cd2bb80f275f93e4287754bd5cc97 (diff)
downloadmidipix_build-487c40f31185b5bbcf3c1f278af2fe05150ac9d5.tar.bz2
midipix_build-487c40f31185b5bbcf3c1f278af2fe05150ac9d5.tar.xz
subr/ex_pkg_dispatch.subr: implement *<group>: inhibit group-group dependency expansion.
etc/{build.usage,README.md}, subr/build_init.subr: updated.
Diffstat (limited to 'subr/build_init.subr')
-rw-r--r--subr/build_init.subr103
1 files changed, 56 insertions, 47 deletions
diff --git a/subr/build_init.subr b/subr/build_init.subr
index 075affb3..95641d5d 100644
--- a/subr/build_init.subr
+++ b/subr/build_init.subr
@@ -53,7 +53,8 @@ buildp_init_defaults() {
ARG_FETCH_FORCE=0; ARG_PARALLEL=1; ARG_RELAXED=0; ARG_RESTART=""; ARG_VERBOSE=0;
# Build parameters & state
- BUILD_DLCACHEDIR="";BUILD_HNAME=""; BUILD_IS_PARENT=1; BUILD_GROUPS=""; BUILD_TARGET=""; BUILD_USER=""; BUILD_WORKDIR="";
+ BUILD_DLCACHEDIR=""; BUILD_HNAME=""; BUILD_IS_PARENT=1; BUILD_GROUPS="";
+ BUILD_GROUPS_INHIBIT_DEPS=0; BUILD_TARGET=""; BUILD_USER=""; BUILD_WORKDIR="";
MIDIPIX_BUILD_PWD=""; PREFIX=""; PREFIX_RPM="";
# Global defaults
@@ -121,7 +122,7 @@ buildp_init_files() {
};
buildp_init_getopts() {
- local _opt="" _rc=0 _shiftfl=0 OPTIND=0; _status="";
+ local _arg="" _opt="" _rc=0 _shiftfl=0 OPTIND=0; _status="";
while [ "${#}" -gt 0 ]; do
case "${1}" in
--as-needed) ARG_AS_NEEDED=1; _shiftfl=1; ;;
@@ -153,16 +154,60 @@ buildp_init_getopts() {
done;
if [ "${_rc}" -eq 0 ]; then
while [ ${#} -gt 0 ]; do
- case "${1}" in
- *=*) rtl_set_var_unsafe "${1%%=*}" "${1#*=}"; ;;
- [^a-zA-Z]*) _rc=1; _status="Error: build group names must start with [a-zA-Z]."; ;;
- *[^_a-zA-Z]*) _rc=1; _status="Error: build group names must not contain [^_a-zA-Z]."; ;;
- *) BUILD_GROUPS="$(rtl_lconcat "${BUILD_GROUPS}" "${1}")";
+ if [ "${1#\*}" != "${1}" ]; then
+ BUILD_GROUPS_INHIBIT_DEPS=1; _arg="${1#\*}";
+ else
+ _arg="${1}";
+ fi;
+ case "${_arg}" in
+ *=*) rtl_set_var_unsafe "${_arg%%=*}" "${_arg#*=}"; ;;
+ [^a-zA-Z]*) _rc=1; _status="Error: build group names must start with [a-zA-Z] (in argument \`${_arg}'.)"; ;;
+ *[^_a-zA-Z]*) _rc=1; _status="Error: build group names must not contain [^_a-zA-Z] (in argument \`${_arg}'.)"; ;;
+ *) BUILD_GROUPS="$(rtl_lconcat "${BUILD_GROUPS}" "${_arg}")"; ;;
esac; shift; done;
fi;
return "${_rc}";
};
+buildp_init_groups() {
+ local _default_build_groups="" _fname="" _group="" _groups="" _rc=0; _status="";
+ for _fname in $(find ./groups -name *.group | sort); do
+ rtl_fileop source_opt "${_fname}";
+ if [ -n "${GROUP_TARGET}" ]; then
+ _group="${GROUP_TARGET}"; unset GROUP_TARGET;
+ else
+ _group="${_fname##*/}"; _group="${_group%.group}"; _group="${_group#*.}";
+ fi;
+ if ! rtl_lmatch "${_groups}" "${_group}"; then
+ _groups="$(rtl_lconcat "${_groups}" "${_group}")";
+ if [ -n "${GROUP_AUTO}" ]; then
+ if [ "${GROUP_AUTO:-0}" -ne 0 ]; then
+ _default_build_groups="$(rtl_lconcat "${_default_build_groups}" "${_group}")";
+ fi;
+ unset GROUP_AUTO;
+ else
+ _default_build_groups="$(rtl_lconcat "${_default_build_groups}" "${_group}")";
+ fi;
+ fi;
+ done;
+ _default_build_groups="$(rtl_uniq "${_default_build_groups}")";
+ if ! rtl_lmatch "${ARG_DIST}" "rpm" ","; then
+ _default_build_groups="$(rtl_lfilter "${_default_build_groups}" "host_deps_rpm")";
+ fi;
+ if [ -z "${BUILD_GROUPS}" ]; then
+ BUILD_GROUPS="${_default_build_groups}";
+ fi;
+ if [ -n "${ARG_DIST}" ]; then
+ BUILD_GROUPS="$(rtl_lconcat "$(rtl_lfilter "${BUILD_GROUPS}" "dist")" "dist")";
+ fi;
+ for _group in ${BUILD_GROUPS}; do
+ if ! rtl_lmatch "${_groups}" "${_group}"; then
+ _rc=1; _status="Error: unknown build group \`${_group}'."; break;
+ fi;
+ done;
+ return "${_rc}";
+};
+
buildp_init_prereqs() {
local _cmd="" _cmds_missing="" _rc=0; _status="";
for _cmd in \
@@ -186,7 +231,7 @@ buildp_init_prereqs() {
};
buildp_init_vars() {
- local _default_build_groups="" _fname="" _group="" _groups="" _rc=0; _status="";
+ local _rc=0; _status="";
if ! rtl_lmatch "${ARCH}" "nt32 nt64"; then
_rc=1; _status="Error: invalid architecture \`${ARCH}'.";
elif ! rtl_lmatch "${BUILD}" "debug release"; then
@@ -194,8 +239,7 @@ buildp_init_vars() {
elif [ -n "${ARG_PARALLEL}" ] && [ "${ARG_PARALLEL}" != "auto" ]\
&& ! rtl_isnumber "${ARG_PARALLEL}"; then
_rc=1; _status="Error: invalid jobs count \`${ARG_PARALLEL}'.";
- else
- case "${ARCH}" in
+ else case "${ARCH}" in
nt32) DEFAULT_TARGET="i686-nt32-midipix"; ;;
nt64) DEFAULT_TARGET="x86_64-nt64-midipix"; ;;
esac;
@@ -211,43 +255,7 @@ buildp_init_vars() {
../midipix_build.vars ./midipix.env;
if [ -z "${PREFIX}" ]; then
_rc=1; _status="Error: \${PREFIX} empty or unset.";
- else
- for _fname in $(find ./groups -name *.group | sort); do
- rtl_fileop source_opt "${_fname}";
- if [ -n "${GROUP_TARGET}" ]; then
- _group="${GROUP_TARGET}"; unset GROUP_TARGET;
- else
- _group="${_fname##*/}"; _group="${_group%.group}"; _group="${_group#*.}";
- fi;
- if ! rtl_lmatch "${_groups}" "${_group}"; then
- _groups="$(rtl_lconcat "${_groups}" "${_group}")";
- if [ -n "${GROUP_AUTO}" ]; then
- if [ "${GROUP_AUTO:-0}" -ne 0 ]; then
- _default_build_groups="$(rtl_lconcat "${_default_build_groups}" "${_group}")";
- fi;
- unset GROUP_AUTO;
- else
- _default_build_groups="$(rtl_lconcat "${_default_build_groups}" "${_group}")";
- fi;
- fi;
- done;
- _default_build_groups="$(rtl_uniq "${_default_build_groups}")";
- if ! rtl_lmatch "${ARG_DIST}" "rpm" ","; then
- _default_build_groups="$(rtl_lfilter "${_default_build_groups}" "host_deps_rpm")";
- fi;
- if [ -z "${BUILD_GROUPS}" ]; then
- BUILD_GROUPS="${_default_build_groups}";
- fi;
- if [ -n "${ARG_DIST}" ]; then
- BUILD_GROUPS="$(rtl_lconcat "$(rtl_lfilter "${BUILD_GROUPS}" "dist")" "dist")";
- fi;
- for _group in ${BUILD_GROUPS}; do
- if ! rtl_lmatch "${_groups}" "${_group}"; then
- _rc=1; _status="Error: unknown build group \`${_group}'."; break;
- fi;
- done;
- fi;
- fi;
+ fi; fi;
return "${_rc}";
};
@@ -258,6 +266,7 @@ build_init() {
|| ! buildp_init_getopts "${@}" \
|| ! buildp_init_prereqs \
|| ! buildp_init_vars \
+ || ! buildp_init_groups \
|| ! buildp_init_args \
|| ! buildp_init_files; then
_rc="${?}"; rtl_log_msg fail "${_status}"; exit "${_rc}";