diff options
Diffstat (limited to 'subr/build.subr')
-rw-r--r-- | subr/build.subr | 140 |
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 |