summaryrefslogtreecommitdiffhomepage
path: root/subr/build.subr
diff options
context:
space:
mode:
Diffstat (limited to 'subr/build.subr')
-rw-r--r--subr/build.subr140
1 files changed, 140 insertions, 0 deletions
diff --git a/subr/build.subr b/subr/build.subr
new file mode 100644
index 00000000..98bd4555
--- /dev/null
+++ b/subr/build.subr
@@ -0,0 +1,140 @@
+#
+# . ./build.vars and set -o errexit -o noglob are assumed.
+# See warning at the top of build.vars.
+#
+
+check_cpuinfo() {
+ if [ -z "${BUILD_CPUS}" ] \
+ && [ -e /proc/cpuinfo ]; then
+ BUILD_CPUS=$(awk '/^processor/{cpus++} END{print cpus}' /proc/cpuinfo);
+ fi;
+};
+
+clear_env() {
+ for __ in $(export | sed -e 's/^export //' -e 's/=.*$//'); do
+ if ! match_list "${CLEAR_ENV_VARS_EXCEPT}" " " "${__}"; then
+ unset "${__}";
+ fi;
+ done;
+};
+
+check_paths() {
+ for __ in ${CHECK_PATH_VARS}; do
+ if [ -z "${___:=$(get_var_unsafe "${__}")}" ]; then
+ log_msg failexit "Error: variable \`${__}' is empty or unset.";
+ elif [ "${___#* *}" != "${___}" ]; then
+ log_msg failexit "Error: variable \`${__}' contains one or more whitespace characters.";
+ fi;
+ done;
+ for __ in ${CHECK_PREREQ_CMDS} $(eval echo ${CHECK_PREREQ_FILES_DYNAMIC}) ${CHECK_PREREQ_FILES}; do
+ if [ "${__#/}" != "${__}" ]; then
+ if [ ! -e "${__}" ]; then
+ log_msg fail "Error: missing prerequisite file \`${__}'.";
+ __exit=1;
+ fi;
+ else
+ if ! test_cmd "${__}"; then
+ log_msg fail "Error: missing prerequisite command \`${__}'.";
+ __exit=1;
+ fi;
+ fi;
+ done;
+ for __ in ${CHECK_PREREQ_PERL_MODULES}; do
+ if ! perl -M"${__}" -e "" 2>/dev/null; then
+ log_msg fail "Error: missing prerequisite Perl module \`${__}'.";
+ __exit=1;
+ fi;
+ done;
+ if [ ${__exit:-0} = 1 ]; then
+ exit 1;
+ elif [ -n "${__exit}" ]; then
+ unset __exit;
+ fi;
+};
+
+clean_prefix() {
+ if [ ${ARG_CLEAN:-0} -eq 1 ]; then
+ log_msg info "-c specified, cleaning prefix...";
+ for __ in ${CLEAR_PREFIX_DIRS}; do
+ if [ -e ${PREFIX}/${__} ]; then
+ secure_rm ${PREFIX}/${__};
+ fi;
+ done;
+ fi;
+};
+
+create_dirs() {
+ insecure_mkdir ${PREFIX} ${PREFIX_NATIVE} ${PREFIX_CROSS} ${PREFIX_TARGET}/lib ${DLCACHEDIR} ${WORKDIR};
+ for __ in ${PREFIX}/usr ${PREFIX_NATIVE}/usr; do
+ if [ ! -L "${__}" ]; then
+ secure_rm "${__}"; ln -sf -- . "${__}";
+ fi;
+ done;
+ insecure_mkdir ${PREFIX_MINIPIX}/bin;
+ for __ in lib libexec share; do
+ if [ ! -e ${PREFIX_MINIPIX}/${__} ]; then
+ ln -sf bin ${PREFIX_MINIPIX}/${__};
+ fi;
+ done;
+};
+
+fini_build_progress_file() {
+ if [ -f "${BUILD_STATUS_IN_PROGRESS_FNAME}" ]; then
+ secure_rm ${BUILD_STATUS_IN_PROGRESS_FNAME};
+ fi;
+};
+
+fini_build_vars() {
+ : $((BUILD_TIMES_SECS=$(command date +%s)-${BUILD_TIMES_SECS}));
+ : $((BUILD_TIMES_HOURS=${BUILD_TIMES_SECS}/3600));
+ : $((BUILD_TIMES_MINUTES=(${BUILD_TIMES_SECS}%3600)/60));
+ : $((BUILD_TIMES_SECS=(${BUILD_TIMES_SECS}%3600)%60));
+};
+
+init_build_log() {
+ if [ -e ${BUILD_LOG_FNAME} ]; then
+ mv -- ${BUILD_LOG_FNAME} ${BUILD_LOG_LAST_FNAME};
+ fi;
+};
+
+init_build_progress_file() {
+ touch ${BUILD_STATUS_IN_PROGRESS_FNAME};
+};
+
+init_build_vars() {
+ BUILD_DATE_START="$(date %Y-%m-%d-%H-%M-%S)";
+ BUILD_NFINI=${BUILD_NSKIP:=${BUILD_NFAIL:=${BUILD_NBUILT:=0}}};
+ BUILD_TIMES_SECS=$(command date +%s);
+};
+
+source_scripts() {
+ set -- ${BUILD_PACKAGE_LC%.*} ${BUILD_PACKAGE_LC#*.};
+ for SCRIPT_SOURCE in vars/${BUILD_PACKAGE_LC}.vars ${BUILD_SCRIPT_FNAME}; do
+ if [ -f ${MIDIPIX_BUILD_PWD}/${SCRIPT_SOURCE} ]; then
+ if [ ${ARG_DRYRUN:-0} -eq 1 ]; then
+ echo . ${MIDIPIX_BUILD_PWD}/${SCRIPT_SOURCE};
+ else
+ . ${MIDIPIX_BUILD_PWD}/${SCRIPT_SOURCE};
+ fi;
+ fi;
+ done;
+};
+
+source_vars() {
+ for __ in ${HOME}/midipix_build.vars ../midipix_build.vars ./vars/build.vars; do
+ [ -e ${__} ] && . ${__};
+ done;
+};
+
+subst_tgts() {
+ while [ ${#} -ge 1 ]; do
+ case "${1}" in
+ devroot)
+ echo ${DEVROOT_PACKAGES}; ;;
+ world) echo ${WORLD_PACKAGES}; ;;
+ *) echo ${1}; ;;
+ esac; shift;
+ done;
+};
+
+# vim:filetype=sh