Blame subr/ex_pkg_env.subr

Lucio Andrés Illanes Albornoz (arab, vxp) 570129
#
Lucio Andrés Illanes Albornoz e1d469
# set +o errexit -o noglob -o nounset is assumed.
Lucio Andrés Illanes Albornoz (arab, vxp) 570129
#
Lucio Andrés Illanes Albornoz (arab, vxp) 570129
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz 2b85d0
# exp_pkg_env_defaults() - set package variable defaults for single named package
Lucio Andrés Illanes Albornoz c6d6e0
# @_build_steps_default:	list of default build steps
Lucio Andrés Illanes Albornoz c6d6e0
# @_pkg_name:			single package name
Lucio Andrés Illanes Albornoz c6d6e0
# @_workdir:			pathname to build-specific temporary directory
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz ccd354
# Return:			zero (0) on success, non-zero (>0) on failure
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz 2b85d0
exp_pkg_env_defaults() {
Lucio Andrés Illanes Albornoz c6d6e0
	local _build_steps_default="${1}" _pkg_name="${2}" _workdir="${3}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	: ${PKG_NAME:="${_pkg_name}"};
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	: ${MIDIPIX_BUILD_PWD:="$(pwd)"};
Lucio Andrés Illanes Albornoz c6d6e0
	: ${PKG_BASE_DIR:="${_workdir}/${_pkg_name}-${PKG_BUILD_TYPE}-${PKG_TARGET}"};
Lucio Andrés Illanes Albornoz e1d469
	if [ -n "${PKG_BUILD_STEPS_DISABLE:-}" ]; then
Lucio Andrés Illanes Albornoz e1d469
		: ${PKG_BUILD_STEPS:="$(rtl_lfilter "${_build_steps_default}" "${PKG_BUILD_STEPS_DISABLE:-}")"};
Lucio Andrés Illanes Albornoz e1d469
	else
Lucio Andrés Illanes Albornoz e1d469
		: ${PKG_BUILD_STEPS:="${_build_steps_default}"};
Lucio Andrés Illanes Albornoz e1d469
	fi;
Lucio Andrés Illanes Albornoz e1d469
	if [ -n "${PKG_URL:-}" ]; then
Lucio Andrés Illanes Albornoz e1d469
		: ${PKG_FNAME:="${PKG_URL##*/}"};
Lucio Andrés Illanes Albornoz e1d469
	fi;
Lucio Andrés Illanes Albornoz e1d469
	if [ -z "${PKG_SUBDIR:-}" ]; then
Lucio Andrés Illanes Albornoz 2c5ce2
		if [ -n "${PKG_URLS_GIT:-}" ]\
Lucio Andrés Illanes Albornoz 2c5ce2
		&& [ -n "${PKG_FNAME:-}" ]; then
Lucio Andrés Illanes Albornoz 2c5ce2
			rtl_log_msg fatalexit "Error: \${PKG_SUBDIR} must be specified given both \${PKG_FNAME} and \${PKG_URLS_GIT}.";
Lucio Andrés Illanes Albornoz 2c5ce2
		elif [ -n "${PKG_URLS_GIT:-}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
			PKG_SUBDIR="${PKG_URLS_GIT%%=*}";
Lucio Andrés Illanes Albornoz e1d469
		else case "${PKG_FNAME:-}" in
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		*.t*)	PKG_SUBDIR="${PKG_FNAME%%.t*}"; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		*)	PKG_SUBDIR="${_pkg_name}"; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		esac; fi;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	fi;
Lucio Andrés Illanes Albornoz e1d469
	if [ -z "${PKG_BUILD_DIR:-}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		case "${PKG_IN_TREE:-0}" in
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		0) PKG_BUILD_DIR="obj"; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) fce0a9
		1) PKG_BUILD_DIR="${PKG_SUBDIR}"; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) d18b1a
		esac;
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
	fi;
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	PKG_BUILD_DIR="${PKG_BASE_DIR}/${PKG_BUILD_DIR}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	PKG_CONFIGURE="${PKG_BASE_DIR}/${PKG_CONFIGURE:-${PKG_SUBDIR}/configure}";
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
	PKG_DESTDIR="${PKG_BASE_DIR}/${PKG_DESTDIR:-destdir}";
Lucio Andrés Illanes Albornoz 8a4e16
	PKG_DESTDIR_HOST="${PKG_BASE_DIR}/${PKG_DESTDIR_HOST:-destdir_host}";
Lucio Andrés Illanes Albornoz 2b85d0
};
Lucio Andrés Illanes Albornoz 2b85d0
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz 2b85d0
# exp_pkg_env_set() - set package variables for single named package
Lucio Andrés Illanes Albornoz c6d6e0
# @_build_vars_default:	list of default build variables
Lucio Andrés Illanes Albornoz 2b85d0
# @_group_name:		build group name
Lucio Andrés Illanes Albornoz 60fba6
# @_nounset:		don't clear package variable namespace
Lucio Andrés Illanes Albornoz 2b85d0
# @_pkg_name:		single package name
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz 2b85d0
# Sets package variables from either defaults, defaults specific to build type,
Lucio Andrés Illanes Albornoz 2b85d0
# build group, package to inherit from if any, or package for a single named
Lucio Andrés Illanes Albornoz 2b85d0
# package, exports variables optionally named in ${PKG_ENV_VARS_EXTRA}, and
Lucio Andrés Illanes Albornoz 2b85d0
# clears the package variable namespace.
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz 2b85d0
# Return:		zero (0) on success, non-zero (>0) on failure
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz 2b85d0
exp_pkg_env_set() {
Lucio Andrés Illanes Albornoz ada809
	local	_build_vars_default="${1}" _group_name="${2}" _nounset="${3}"\
Lucio Andrés Illanes Albornoz b6a9a1
		_pkg_name="${4}" _var_prefixes="" _vars_set="" _vname="" IFS IFS0;
Lucio Andrés Illanes Albornoz c6d6e0
	rtl_set_vars _vars_set BUILD_TYPE "DEFAULT ${_group_name} PKG_${_pkg_name}";
Lucio Andrés Illanes Albornoz c6d6e0
	rtl_set_vars _vars_set INHERIT_FROM "PKG_${_pkg_name}";
Lucio Andrés Illanes Albornoz c6d6e0
	_var_prefixes="$(rtl_toupper "DEFAULT DEFAULT_${PKG_BUILD_TYPE} ${_group_name}")";
Lucio Andrés Illanes Albornoz c6d6e0
	for _vname in $(rtl_lfilter "${_build_vars_default}" BUILD_TYPE); do
Lucio Andrés Illanes Albornoz e1d469
		if [ -n "${PKG_INHERIT_FROM:-}" ]; then
Lucio Andrés Illanes Albornoz ada809
			rtl_set_vars _vars_set "${_vname}"				\
Lucio Andrés Illanes Albornoz ada809
				"$(rtl_lconcat "${_var_prefixes}"			\
Lucio Andrés Illanes Albornoz a6970c
				"$(rtl_toupper "PKG_${PKG_INHERIT_FROM} PKG_${PKG_INHERIT_FROM}_${BUILD_KIND} PKG_${_pkg_name} PKG_${_pkg_name}_${BUILD_KIND}")")";
Lucio Andrés Illanes Albornoz 2b85d0
		else
Lucio Andrés Illanes Albornoz ada809
			rtl_set_vars _vars_set "${_vname}"				\
Lucio Andrés Illanes Albornoz ada809
				"$(rtl_lconcat "${_var_prefixes}"			\
Lucio Andrés Illanes Albornoz a6970c
				"$(rtl_toupper "PKG_${_pkg_name} PKG_${_pkg_name}_${BUILD_KIND}")")";
Lucio Andrés Illanes Albornoz 2b85d0
		fi;
Lucio Andrés Illanes Albornoz 2b85d0
	done;
Lucio Andrés Illanes Albornoz e58399
	IFS0="${IFS:- }"; IFS=":"; for _vname in ${PKG_ENV_VARS_EXTRA:-}; do
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
		export "${_vname}";
Lucio Andrés Illanes Albornoz b6a9a1
	done; IFS="${IFS0}";
Lucio Andrés Illanes Albornoz 60fba6
	if [ "${_nounset:-0}" -eq 0 ]; then
Lucio Andrés Illanes Albornoz ada809
		rtl_unset_vars $(rtl_lfilter						\
Lucio Andrés Illanes Albornoz ada809
			"$(set | sed -ne '/^PKG_[^=]*=/s/=.*$//p' | paste -s -d " ")"	\
Lucio Andrés Illanes Albornoz 60fba6
			"${_vars_set}");
Lucio Andrés Illanes Albornoz 60fba6
	fi;
Lucio Andrés Illanes Albornoz 2b85d0
};
Lucio Andrés Illanes Albornoz 2b85d0
Lucio Andrés Illanes Albornoz 168e55
ex_pkg_env_sofort() {
Lucio Andrés Illanes Albornoz 168e55
	local	_pkg_base_dir="${1}" _pkg_sofort_force="${2}" _pkg_subdir="${3}"	\
Lucio Andrés Illanes Albornoz 168e55
		_vname="" _vname_new="" _vval="" _vval_old="";
Lucio Andrés Illanes Albornoz 168e55
Lucio Andrés Illanes Albornoz bfef88
	if [ -d "${_pkg_base_dir}/${_pkg_subdir}/sofort" ]				\
Lucio Andrés Illanes Albornoz 168e55
	|| [ "${_pkg_sofort_force:-0}" -eq 1 ]; then
Lucio Andrés Illanes Albornoz 168e55
		for _vname in	\
Lucio Andrés Illanes Albornoz 168e55
				PKG_SOFORT_NATIVE_CC					\
Lucio Andrés Illanes Albornoz 168e55
				PKG_SOFORT_NATIVE_CFLAGS				\
Lucio Andrés Illanes Albornoz 168e55
				PKG_SOFORT_NATIVE_CXX					\
Lucio Andrés Illanes Albornoz 168e55
				PKG_SOFORT_NATIVE_CXXFLAGS				\
Lucio Andrés Illanes Albornoz 168e55
				PKG_SOFORT_NATIVE_LD					\
Lucio Andrés Illanes Albornoz 168e55
				PKG_SOFORT_NATIVE_LDFLAGS; do
Lucio Andrés Illanes Albornoz 168e55
			_vname_new="PKG_${_vname#PKG_SOFORT_}";
Lucio Andrés Illanes Albornoz 168e55
			rtl_set_var_unsafe "${_vname_new}" "";
Lucio Andrés Illanes Albornoz 168e55
		done;
Lucio Andrés Illanes Albornoz 168e55
		for _vname in	\
Lucio Andrés Illanes Albornoz 168e55
				PKG_SOFORT_NATIVE_CC					\
Lucio Andrés Illanes Albornoz 168e55
				PKG_SOFORT_NATIVE_CFLAGS				\
Lucio Andrés Illanes Albornoz 168e55
				PKG_SOFORT_NATIVE_CFLAGS_EXTRA				\
Lucio Andrés Illanes Albornoz 168e55
				PKG_SOFORT_NATIVE_CXX					\
Lucio Andrés Illanes Albornoz 168e55
				PKG_SOFORT_NATIVE_CXXFLAGS				\
Lucio Andrés Illanes Albornoz 168e55
				PKG_SOFORT_NATIVE_CXXFLAGS_EXTRA			\
Lucio Andrés Illanes Albornoz 168e55
				PKG_SOFORT_NATIVE_LD					\
Lucio Andrés Illanes Albornoz 168e55
				PKG_SOFORT_NATIVE_LDFLAGS				\
Lucio Andrés Illanes Albornoz 168e55
				PKG_SOFORT_NATIVE_LDFLAGS_EXTRA; do
Lucio Andrés Illanes Albornoz 168e55
			if _vval="$(rtl_get_var_unsafe "${_vname}")"			\
Lucio Andrés Illanes Albornoz 168e55
			&& [ -n "${_vval}" ]; then
Lucio Andrés Illanes Albornoz 168e55
				_vname_new="${_vname#PKG_SOFORT_}";
Lucio Andrés Illanes Albornoz 168e55
				case "${_vname}" in
Lucio Andrés Illanes Albornoz 168e55
				*_EXTRA)
Lucio Andrés Illanes Albornoz 168e55
					_vval_old="$(rtl_get_var_unsafe "${_vname_new%_EXTRA}")";
Lucio Andrés Illanes Albornoz 168e55
					rtl_set_var_unsafe "${_vname_new%_EXTRA}" "${_vval_old:+${_vval_old} }${_vval}"; ;;
Lucio Andrés Illanes Albornoz 168e55
				*)
Lucio Andrés Illanes Albornoz 168e55
					rtl_set_var_unsafe "${_vname_new}" "${_vval}"; ;;
Lucio Andrés Illanes Albornoz 168e55
				esac;
Lucio Andrés Illanes Albornoz 168e55
				export "${_vname_new}";
Lucio Andrés Illanes Albornoz 168e55
			fi;
Lucio Andrés Illanes Albornoz 168e55
		done;
Lucio Andrés Illanes Albornoz 168e55
	fi; return 0;
Lucio Andrés Illanes Albornoz 168e55
};
Lucio Andrés Illanes Albornoz 168e55
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz 2b85d0
# ex_pkg_env() - set package variables for single named package
Lucio Andrés Illanes Albornoz c6d6e0
# @_build_steps_default:	list of default build steps
Lucio Andrés Illanes Albornoz c6d6e0
# @_build_vars_default:		list of default build variables
Lucio Andrés Illanes Albornoz c6d6e0
# @_group_name:			build group name
Lucio Andrés Illanes Albornoz 60fba6
# @_nounset:			don't clear package variable namespace
Lucio Andrés Illanes Albornoz c6d6e0
# @_pkg_name:			single package name
Lucio Andrés Illanes Albornoz 370e98
# @_restart_at:			optional comma-separated list of build steps at which to rebuild or ALL or LAST
Lucio Andrés Illanes Albornoz c6d6e0
# @_workdir:			pathname to build-specific temporary directory
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz ccd354
# Return:			zero (0) on success, non-zero (>0) on failure
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz 2b85d0
ex_pkg_env() {
Lucio Andrés Illanes Albornoz c6d6e0
	local	_build_steps_default="${1}" _build_vars_default="${2}" _group_name="${3}"	\
Lucio Andrés Illanes Albornoz 60fba6
		_nounset="${4}" _pkg_name="${5}" _restart_at="${6}" _workdir="${7}" _vname="";
Lucio Andrés Illanes Albornoz ccd354
	rtl_fileop source_opt "vars/${_pkg_name}.vars" "${_group_name}/${_pkg_name}.${_group_name}";
Lucio Andrés Illanes Albornoz 60fba6
	if ! exp_pkg_env_set "${_build_vars_default}" "${_group_name}" "${_nounset}" "${_pkg_name}"\
Lucio Andrés Illanes Albornoz 168e55
	|| ! exp_pkg_env_defaults "${_build_steps_default}" "${_pkg_name}" "${_workdir}"\
Lucio Andrés Illanes Albornoz 168e55
	|| ! ex_pkg_env_sofort "${PKG_BASE_DIR:-}" "${PKG_SOFORT_FORCE:-0}" "${PKG_SUBDIR:-}"; then
Lucio Andrés Illanes Albornoz bf9edf
		return 1;
Lucio Andrés Illanes Albornoz 2b85d0
	fi;
Lucio Andrés Illanes Albornoz 2b85d0
};
Lucio Andrés Illanes Albornoz 2b85d0
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz 2b85d0
# ex_pkg_state_set() - update build step status for single named package
Lucio Andrés Illanes Albornoz 2b85d0
# @_pkg_name:		single package name
Lucio Andrés Illanes Albornoz 370e98
# @_build_step:		build step set status of
Lucio Andrés Illanes Albornoz 370e98
# [@${@}]:		optional list of build steps to invalidate status of
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz 2b85d0
# Return:		zero (0) on success, non-zero (>0) on failure
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz 2b85d0
ex_pkg_state_set() {
Lucio Andrés Illanes Albornoz c6d6e0
	rtl_state_set "${_workdir}" "${@}";
Lucio Andrés Illanes Albornoz (arab, vxp) 570129
};
Lucio Andrés Illanes Albornoz (arab, vxp) 570129
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz 2b85d0
# ex_pkg_state_test() - test build step status of single named package
Lucio Andrés Illanes Albornoz 2b85d0
# @_pkg_name:		single package name
Lucio Andrés Illanes Albornoz 2b85d0
# @_build_step:		build step to test status of
Lucio Andrés Illanes Albornoz 370e98
# @_restart_at:		optional comma-separated list of build steps at which to rebuild or ALL or LAST
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz 2b85d0
# Return:		zero (0) on success, non-zero (>0) on failure
Lucio Andrés Illanes Albornoz 2b85d0
#
Lucio Andrés Illanes Albornoz 2b85d0
ex_pkg_state_test() {
Lucio Andrés Illanes Albornoz c6d6e0
	rtl_state_test "${_workdir}" "${@}";
Lucio Andrés Illanes Albornoz 2b85d0
};
Lucio Andrés Illanes Albornoz (arab, vxp) ec19f0
Lucio Andrés Illanes Albornoz (arab, vxp) 570129
# vim:filetype=sh