blob: c13cfdfc7388cb1f0cebe1b58dce0758e1bee4b9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
#
# set +o errexit -o noglob -o nounset is assumed.
#
#
# exp_pkg_env_defaults() - set package variable defaults for single named package
# @_build_steps_default: list of default build steps
# @_pkg_name: single package name
# @_workdir: pathname to build-specific temporary directory
#
# Return: zero (0) on success, non-zero (>0) on failure
#
exp_pkg_env_defaults() {
local _build_steps_default="${1}" _pkg_name="${2}" _workdir="${3}";
: ${PKG_NAME:="${_pkg_name}"};
: ${MIDIPIX_BUILD_PWD:="$(pwd)"};
: ${PKG_BASE_DIR:="${_workdir}/${_pkg_name}-${PKG_BUILD_TYPE}-${PKG_TARGET}"};
if [ -n "${PKG_BUILD_STEPS_DISABLE:-}" ]; then
: ${PKG_BUILD_STEPS:="$(rtl_lfilter "${_build_steps_default}" "${PKG_BUILD_STEPS_DISABLE:-}")"};
else
: ${PKG_BUILD_STEPS:="${_build_steps_default}"};
fi;
if [ -n "${PKG_URL:-}" ]; then
: ${PKG_FNAME:="${PKG_URL##*/}"};
fi;
if [ -z "${PKG_SUBDIR:-}" ]; then
if [ -n "${PKG_URLS_GIT:-}" ]\
&& [ -n "${PKG_FNAME:-}" ]; then
rtl_log_msg "fatalexit" "${MSG_pkg_fail_missing_vars}";
elif [ -n "${PKG_URLS_GIT:-}" ]; then
PKG_SUBDIR="${PKG_URLS_GIT%%=*}";
else case "${PKG_FNAME:-}" in
*.t*) PKG_SUBDIR="${PKG_FNAME%%.t*}"; ;;
*) PKG_SUBDIR="${_pkg_name}"; ;;
esac; fi;
fi;
if [ -z "${PKG_BUILD_DIR:-}" ]; then
case "${PKG_IN_TREE:-0}" in
0) PKG_BUILD_DIR="obj"; ;;
1) PKG_BUILD_DIR="${PKG_SUBDIR}"; ;;
esac;
fi;
PKG_BUILD_DIR="${PKG_BASE_DIR}/${PKG_BUILD_DIR}";
PKG_CONFIGURE="${PKG_BASE_DIR}/${PKG_CONFIGURE:-${PKG_SUBDIR}/configure}";
PKG_DESTDIR="${PKG_BASE_DIR}/${PKG_DESTDIR:-destdir}";
PKG_DESTDIR_HOST="${PKG_BASE_DIR}/${PKG_DESTDIR_HOST:-destdir_host}";
};
#
# exp_pkg_env_set() - set package variables for single named package
# @_build_vars_default: list of default build variables
# @_group_name: build group name
# @_nounset: don't clear package variable namespace
# @_pkg_name: single package name
#
# Sets package variables from either defaults, defaults specific to build type,
# build group, package to inherit from if any, or package for a single named
# package, exports variables optionally named in ${PKG_ENV_VARS_EXTRA}, and
# clears the package variable namespace.
#
# Return: zero (0) on success, non-zero (>0) on failure
#
exp_pkg_env_set() {
local _build_vars_default="${1}" _group_name="${2}" _nounset="${3}" \
_pkg_name="${4}" _cmd_name="" _var_prefixes="" _vars_set="" \
_vname="" IFS IFS0;
rtl_set_vars _vars_set BUILD_TYPE "DEFAULT ${_group_name} PKG_${_pkg_name}";
rtl_set_vars _vars_set INHERIT_FROM "PKG_${_pkg_name}";
_var_prefixes="$(rtl_toupper "DEFAULT DEFAULT_${PKG_BUILD_TYPE} ${_group_name}")";
for _vname in $(rtl_lfilter "${_build_vars_default}" BUILD_TYPE); do
if [ -n "${PKG_INHERIT_FROM:-}" ]; then
rtl_set_vars _vars_set "${_vname}" \
"$(rtl_lconcat "${_var_prefixes}" \
"$(rtl_toupper "PKG_${PKG_INHERIT_FROM} PKG_${PKG_INHERIT_FROM}_${BUILD_KIND} PKG_${_pkg_name} PKG_${_pkg_name}_${BUILD_KIND}")")";
else
rtl_set_vars _vars_set "${_vname}" \
"$(rtl_lconcat "${_var_prefixes}" \
"$(rtl_toupper "PKG_${_pkg_name} PKG_${_pkg_name}_${BUILD_KIND}")")";
fi;
done;
IFS0="${IFS:- }"; IFS=":"; for _vname in ${PKG_ENV_VARS_EXTRA:-}; do
export "${_vname}";
done; IFS="${IFS0}";
if [ "${_nounset:-0}" -eq 0 ]; then
rtl_unset_vars $(rtl_lfilter \
"$(set | sed -ne '/^PKG_[^=]*=/s/=.*$//p' | paste -s -d " ")" \
"${_vars_set}");
fi;
for _vname in AR CC CXX PKG_CONFIG RANLIB; do
if eval [ '"${PKG_'"${_vname}"':+1}"' = 1 ]\
&& eval [ '"${PKG_'"${_vname}"'#/}"' = '"${_cmd_name:=${PKG_'"${_vname}"'}}"' ]; then
eval PKG_${_vname}='$(which "${_cmd_name}")';
fi; _cmd_name="";
done;
};
#
# ex_pkg_env() - set package variables for single named package
# @_build_steps_default: list of default build steps
# @_build_vars_default: list of default build variables
# @_group_name: build group name
# @_nounset: don't clear package variable namespace
# @_pkg_name: single package name
# @_restart_at: optional comma-separated list of build steps at which to rebuild or ALL or LAST
# @_workdir: pathname to build-specific temporary directory
#
# Return: zero (0) on success, non-zero (>0) on failure
#
ex_pkg_env() {
local _build_steps_default="${1}" _build_vars_default="${2}" _group_name="${3}" \
_nounset="${4}" _pkg_name="${5}" _restart_at="${6}" _workdir="${7}" \
_inherit_from="" _vars_file="" _vname="";
if _inherit_from="$(rtl_get_var_unsafe -u "PKG_${_pkg_name}_INHERIT_FROM")"\
&& [ "${#_inherit_from}" -gt 0 ]; then
_vars_file="$(rtl_get_var_unsafe -u "PKG_${_inherit_from}_VARS_FILE")";
else
_vars_file="$(rtl_get_var_unsafe -u "PKG_${_pkg_name}_VARS_FILE")";
fi;
if [ "${#_vars_file}" -eq 0 ]; then
_vars_file="vars/${_pkg_name}.vars";
fi;
rtl_fileop source_opt "${_vars_file}" "${_group_name}/${_pkg_name}.${_group_name}";
if ! exp_pkg_env_set "${_build_vars_default}" "${_group_name}" "${_nounset}" "${_pkg_name}"\
|| ! exp_pkg_env_defaults "${_build_steps_default}" "${_pkg_name}" "${_workdir}"; then
return 1;
fi;
};
#
# ex_pkg_state_set() - update build step status for single named package
# @_pkg_name: single package name
# @_build_step: build step set status of
# [@${@}]: optional list of build steps to invalidate status of
#
# Return: zero (0) on success, non-zero (>0) on failure
#
ex_pkg_state_set() {
rtl_state_set "${_workdir}" "${@}";
};
#
# ex_pkg_state_test() - test build step status of single named package
# @_pkg_name: single package name
# @_build_step: build step to test status of
# @_restart_at: optional comma-separated list of build steps at which to rebuild or ALL or LAST
#
# Return: zero (0) on success, non-zero (>0) on failure
#
ex_pkg_state_test() {
rtl_state_test "${_workdir}" "${@}";
};
# vim:filetype=sh
|