From bd97b660147609b31020e06ecf552d8473dfb0d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucio=20Andr=C3=A9s=20Illanes=20Albornoz=20=28arab=2C=20vx?= =?UTF-8?q?p=29?= Date: Fri, 3 Feb 2017 18:07:44 +0100 Subject: build.sh, etc/build.usage, {subr,vars}/*: general cleanup. --- subr/build.subr | 252 +++++++++++++++++++++++++++++++++++++++++++ subr/pkg_autoconf.subr | 7 +- subr/pkg_build_dir.subr | 2 +- subr/pkg_configure.subr | 2 +- subr/pkg_distclean.subr | 4 +- subr/pkg_extract.subr | 4 +- subr/pkg_fetch.subr | 14 +-- subr/pkg_install.subr | 7 +- subr/pkg_setup_env.subr | 2 +- subr/post_tarballs.subr | 2 +- subr/pre_subdirs.subr | 37 +++---- subr/rtl.subr | 276 ------------------------------------------------ 12 files changed, 293 insertions(+), 316 deletions(-) create mode 100644 subr/build.subr delete mode 100644 subr/rtl.subr (limited to 'subr') diff --git a/subr/build.subr b/subr/build.subr new file mode 100644 index 00000000..a1009c2b --- /dev/null +++ b/subr/build.subr @@ -0,0 +1,252 @@ +# +# . ./build.vars and set -o errexit -o noglob are assumed. +# See warning at the top of build.vars. +# + +date() { command date +"${1:-${TIMESTAMP_FMT}}"; }; +get_var_unsafe() { eval echo \${${1}}; }; +set_var_unsafe() { eval ${1}=\"${2}\"; }; +push_IFS() { _pI_IFS="${IFS}"; IFS="${1}"; }; +pop_IFS() { IFS="${_pI_IFS}"; unset _pI_IFS; }; +set_build_dir() { PKG_BUILD_DIR=${1}-${2}-${PKG_TARGET}; }; +split() { push_IFS "${1}"; set -- ${2}; pop_IFS; echo "${*}"; }; +test_cmd() { command -v "${1}" >/dev/null; }; +unsplit() { push_IFS "${1}"; shift; set -- "${@}"; echo "${*}"; pop_IFS; }; + +get_vars_unsafe() { + while [ ${#} -gt 0 ]; do + _gvu_vval="$(eval echo \${${1}})"; + [ -z "${_gvu_vval}" ] || _gvu_vval_="${_gvu_vval}"; + shift; + done; echo "${_gvu_vval_}"; + unset _gvu_vval _gvu_vval_; +}; + +set_env_vars_with_sep() { + _sevws_sep=${1}; shift; push_IFS ${_sevws_sep}; set -- ${1}; + while [ ${#} -gt 0 ]; do + export "${1}"; shift; + done; unset _sevws_sep; pop_IFS; +}; + +log_msg() { + _lm_lvl=${1}; shift; + if [ "${_lm_lvl#v}" != "${_lm_lvl}" ]\ + && [ ${ARG_VERBOSE:-0} -eq 0 ]; then + return; + fi; + case ${_lm_lvl} in + failexit) printf "\033[0m\033[${LOG_MSG_FAIL_COLOUR}m"; ;; + fail) printf "\033[0m\033[${LOG_MSG_FAIL_COLOUR}m"; ;; + info) printf "\033[0m\033[${LOG_MSG_INFO_COLOUR}m"; ;; + vnfo) printf "\033[0m\033[${LOG_MSG_INFO_COLOUR}m"; ;; + succ) printf "\033[0m\033[${LOG_MSG_SUCC_COLOUR}m"; ;; + warn) printf "\033[0m\033[${LOG_MSG_WARN_COLOUR}m"; ;; + varn) printf "\033[0m\033[${LOG_MSG_WARN_COLOUR}m"; ;; + esac; + if [ $# -gt 1 ]; then + printf "==> %s %s %s\033[0m\n" "$(date "${TIMESTAMP_FMT}")" "${1}" "$*"; + else + printf "==> %s %s\033[0m\n" "$(date "${TIMESTAMP_FMT}")" "${1}"; + fi; [ ${_lm_lvl} = failexit ] && exit 1 || unset _lm_lvl; +}; + +install_files() { + if [ "${1}" = "-v" ]; then + _if_verbose="${1}"; shift; + fi; _if_prefix="${1}"; shift; + while [ ${#} -gt 0 ]; do + case "${1}" in + @*=*) + __ln_target="${1%=*}"; + __ln_target="${__ln_target#@}"; + __ln_fname="${1#*=}"; + if [ -e ${__ln_fname} ]; then + if [ ${_if_verbose:-0} -eq 1 ]; then + echo build_fileop rm ${__ln_fname}; + fi; + build_fileop rm ${__ln_fname}; + fi; + build_fileop ln_symbolic ${__ln_target} ${_if_prefix:+${_if_prefix}/}${__ln_fname}; + ;; + /=*) + __mkdir_fname="${1#/=}"; + build_fileop mkdir ${_if_prefix:+${_if_prefix}/}${__mkdir_fname}; + ;; + *) + __file_fname_src="${1%=*}"; + __file_fname_dst="${1#*=}"; + build_fileop cp ${__file_fname_src} ${_if_prefix:+${_if_prefix}/}${__file_fname_dst}; + ;; + esac; shift; + done; unset _if_verbose _if_prefix; +}; + +match_list() { + _ml_cmp="${3}"; push_IFS "${2}"; set -- ${1}; pop_IFS; + while [ ${#} -gt 0 ]; do + if [ "${1}" = "${_ml_cmp}" ]; then + unset _ml_cmp; return 0; + fi; shift; + done; unset _ml_cmp; return 1; +}; + +build_fileop() { + _bf_op=${1}; shift; + if [ "${_bf_op}" = cd ]; then + log_msg varn "Changing working directory to \`${1}'."; + [ \( -n "${1}" \) -a \( -e "${1}" \) ] && cd -- ${1}; + elif [ "${_bf_op}" = cp ]; then + log_msg varn "Copying \`${1}' to \`${2}' w/ -pPR."; + [ ${#} -ge 2 ] && cp -pPR -- "${@}"; + elif [ "${_bf_op}" = ln_symbolic ]; then + log_msg varn "Linking \`${1}' to \`${2}' w/ -fs"; + [ \( -n "${1}" \) -a \( -n "${2}" \) ] && ln -fs -- ${1} ${2}; + elif [ "${_bf_op}" = mkdir ]\ + || [ "${_bf_op}" = rm ]; then + while [ ${#} -gt 0 ]; do + if [ -z "${1}" ]; then + return 1; + elif [ "${_bf_op}" = mkdir ]\ + && [ ! -e "${1}" ]; then + log_msg varn "Making directory \`${1}'."; + mkdir -p -- "${1}"; + elif [ "${_bf_op}" = rm ]\ + && [ -e "${1}" ]; then + log_msg varn "Removing directory or file \`${1}'."; + rm -rf -- "${1}"; + fi; shift; + done; + else + log_msg failexit "Error: build_fileop() called w/ invalid parameter(s) \`${@}'."; + fi; +}; + +is_build_script_done() { + if [ "${1}" = "clean" ]\ + || [ "${1}" = distclean ]; then + if match_list "${ARG_RESTART}" , ${BUILD_PACKAGE_LC} \ + && [ -n "${ARG_RESTART_AT}" ] \ + && match_list "${ARG_RESTART_AT}" , "${1}"; then + return 1; # Build + else + return 0; # Skip + fi; + elif [ "${ARG_RESTART}" = "ALL" ]; then + return 1; # Build + elif match_list "${ARG_RESTART}" , ${BUILD_PACKAGE_LC}; then + if [ -n "${ARG_RESTART_AT}" ]; then + if [ "${ARG_RESTART_AT}" = "ALL" ]; then + return 1; # Build + elif match_list "${ARG_RESTART_AT}" , "${1}"; then + return 1; # Build + else + return 0; # Skip + fi; + else + return 1; # Build + fi; + elif [ -f ${WORKDIR}/.${2:-${BUILD_PACKAGE_LC}}.${1} ]; then + return 0; # Skip + else + return 1; # Build + fi; +}; + +set_build_script_done() { + _sbsd_script_fname=${BUILD_PACKAGE_LC}; + _sbsd_done_fname=${WORKDIR}/.${_sbsd_script_fname}; + while [ $# -ge 1 ]; do + if [ "${1#-}" != "${1}" ]; then + build_fileop rm ${_sbsd_done_fname}.${1#-}; + else + touch ${_sbsd_done_fname}.${1}; + log_msg info "Finished build step ${1} of \`${_sbsd_script_fname}'."; + fi; shift; + done; unset _sbsd_script_fname _sbsd_done_fname; +}; + +log_env_vars() { + log_msg info "Variables for this ${1:-build}:"; shift; + while [ ${_lev_nvar:=0} -lt ${#} ]; do + _lev_arg="$(eval echo \${${_lev_nvar}})"; + _lev_arg="${_lev_arg%%=*}"; + if [ ${#_lev_arg} -gt ${_lev_arg_len_max:=0} ]; then + _lev_arg_len_max=${#_lev_arg}; + fi; : $((_lev_nvar+=1)); + done; unset _lev_nvar _lev_arg; + while [ ${#} -gt 0 ]; do + log_msg info "$(printf \ + "%${_lev_arg_len_max}.${_lev_arg_len_max}s=%s" \ + "${1%%=*}" "$(get_var_unsafe ${1#*=})")"; + shift; + done; unset _lev_arg_len_max; +}; + +parse_with_pkg_name() { + PKG_NAME=${1}; shift; PKG_TARGET=${TARGET}; + MIDIPIX_BUILD_PWD=$(pwd); build_fileop cd ${WORKDIR}; + for __ in vars/${PKG_NAME}.vars; do + [ -e ${MIDIPIX_BUILD_PWD}/${__} ] && . ${MIDIPIX_BUILD_PWD}/${__}; + done; + _pwpn_pkg_name_uc=$(echo ${PKG_NAME} | tr a-z A-Z); + if [ -z "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_URL)" ]\ + && [ -z "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_URLS_GIT)" ]\ + && [ -z "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_VERSION)" ]; then + unset _pwpn_pkg_name_uc; + log_msg failexit "Error: package \`${PKG_NAME}' missing in build.vars."; + else + for _pwpn_vname in ${PKG_BUILD_VARS}; do + if [ -n "$(get_var_unsafe DEFAULT_${_pwpn_vname})" ]; then + set_var_unsafe PKG_${_pwpn_vname} "$(get_var_unsafe DEFAULT_${_pwpn_vname})"; + fi; + if [ -n "$(get_var_unsafe ${BUILD_TARGET}_${_pwpn_vname})" ]; then + set_var_unsafe PKG_${_pwpn_vname} "$(get_var_unsafe ${BUILD_TARGET}_${_pwpn_vname})"; + fi; + if [ "${BUILD}" = "debug" ] \ + && [ -n "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_${_pwpn_vname}_DEBUG)" ]; then + set_var_unsafe PKG_${_pwpn_vname} "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_${_pwpn_vname}_DEBUG)"; + elif [ "${BUILD}" = "release" ] \ + && [ -n "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_${_pwpn_vname}_RELEASE)" ]; then + set_var_unsafe PKG_${_pwpn_vname} "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_${_pwpn_vname}_RELEASE)"; + elif [ -n "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_${_pwpn_vname})" ]; then + set_var_unsafe PKG_${_pwpn_vname} "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_${_pwpn_vname})"; + fi; + done; unset _pwpn_vname; + fi; + [ -z "${PKG_FNAME}" ] && PKG_FNAME=${PKG_URL##*/}; + [ -z "${PKG_SUBDIR}" ] && PKG_SUBDIR=${PKG_FNAME%%.tar*}; + [ -n "${PKG_ENV_VARS_EXTRA}" ] && set_env_vars_with_sep : "${PKG_ENV_VARS_EXTRA}"; + for _pwpn_env_var in $(set); do + if [ "${_pwpn_env_var#PKG_${_pwpn_pkg_name_uc}}" != "${_pwpn_env_var}" ]; then + _pwpn_env_vars="${_pwpn_env_vars:+${_pwpn_env_vars} }${_pwpn_env_var%%=*}"; + fi; + done; + if [ -n "${_pwpn_env_vars}" ]; then + log_env_vars "build" ${_pwpn_env_vars}; + fi; unset _pwpn_pkg_name_uc _pwpn_env_var _pwpn_env_vars; +}; + +run_cmd_unsplit() { + _rcu_cmd=${1}; shift; + while [ ${#} -gt 0 ]; do + [ -n "${1}" ] &&\ + _rcu_cmdline="${_rcu_cmdline:+${_rcu_cmdline}:}${1}"; + shift; + done; + push_IFS :; ${_rcu_cmd} ${_rcu_cmdline}; _rcu_rc=$?; pop_IFS; + unset _rcu_cmd _rcu_cmdline; return ${_rcu_rc}; +}; + +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 diff --git a/subr/pkg_autoconf.subr b/subr/pkg_autoconf.subr index 1896fc1c..6390dc97 100644 --- a/subr/pkg_autoconf.subr +++ b/subr/pkg_autoconf.subr @@ -27,14 +27,13 @@ pkg_autoconf() { break; fi; done; - (cd ${PKG_SUBDIR} && ${SHELL} ./autogen.sh) || exit 1; + (build_fileop cd ${PKG_SUBDIR} && ${SHELL} ./autogen.sh) || exit 1; else - (cd ${PKG_SUBDIR} && autoconf) || exit 1; + (build_fileop cd ${PKG_SUBDIR} && autoconf) || exit 1; fi; fi; for __ in ${PKG_BUILD_DIR} ${PKG_CONFIG_CACHE_EXTRA}; do - echo cp -- ${MIDIPIX_BUILD_PWD}/etc/config.cache ${__}/; - cp -- ${MIDIPIX_BUILD_PWD}/etc/config.cache ${__}/; + build_fileop cp ${MIDIPIX_BUILD_PWD}/etc/config.cache ${__}/; done; fi; set_build_script_done autoconf -patch; diff --git a/subr/pkg_build_dir.subr b/subr/pkg_build_dir.subr index abb852f9..7d500758 100644 --- a/subr/pkg_build_dir.subr +++ b/subr/pkg_build_dir.subr @@ -8,7 +8,7 @@ pkg_build_dir() { set_build_dir ${PKG_SUBDIR} ${PKG_BUILD_TYPE:-native}; fi; if [ ! -d "${PKG_BUILD_DIR}" ]; then - insecure_mkdir ${PKG_BUILD_DIR}; + build_fileop mkdir ${PKG_BUILD_DIR}; fi; set_build_script_done build_dir -patch_pre; }; diff --git a/subr/pkg_configure.subr b/subr/pkg_configure.subr index 501ad710..598c2366 100644 --- a/subr/pkg_configure.subr +++ b/subr/pkg_configure.subr @@ -10,7 +10,7 @@ pkg_configure() { fi; CFLAGS="${PKG_CFLAGS_CONFIGURE}${PKG_CFLAGS_CONFIGURE_EXTRA:+ ${PKG_CFLAGS_CONFIGURE_EXTRA}}"\ LDFLAGS="${PKG_LDFLAGS_CONFIGURE}${PKG_LDFLAGS_CONFIGURE_EXTRA:+ ${PKG_LDFLAGS_CONFIGURE_EXTRA}}"\ - ${PKG_CONFIGURE} \ + ${PKG_CONFIGURE} \ ${PKG_CONFIGURE_ARGS} ${PKG_CONFIGURE_ARGS_EXTRA} ${PKG_CONFIGURE_ARGS_EXTRA_DEBUG}; fi; set_build_script_done configure clean -build; diff --git a/subr/pkg_distclean.subr b/subr/pkg_distclean.subr index aae22162..ed380727 100644 --- a/subr/pkg_distclean.subr +++ b/subr/pkg_distclean.subr @@ -5,8 +5,8 @@ pkg_distclean() { if [ "${PKG_SUBDIR}" != "${PKG_BUILD_DIR}" ]; then - secure_rm ${PKG_BUILD_DIR}; - insecure_mkdir ${PKG_BUILD_DIR}; + build_fileop rm ${PKG_BUILD_DIR}; + build_fileop mkdir ${PKG_BUILD_DIR}; fi; set_build_script_done distclean -configure; }; diff --git a/subr/pkg_extract.subr b/subr/pkg_extract.subr index 2b7d4fd4..f63cefa0 100644 --- a/subr/pkg_extract.subr +++ b/subr/pkg_extract.subr @@ -6,9 +6,9 @@ pkg_extract() { if [ -n "${PKG_URL}" ]\ && [ "${PKG_URL_TYPE:-wget}" = wget ]; then - secure_rm ${PKG_SUBDIR}; + build_fileop rm ${PKG_SUBDIR}; if [ ${PKG_SUBDIR_CREATE:-0} -eq 1 ]; then - insecure_mkdir ${PKG_SUBDIR}; + build_fileop mkdir ${PKG_SUBDIR}; fi; if [ "${PKG_FNAME##*.tar.}" = "bz2" ]; then bunzip2 -d < ${DLCACHEDIR}/${PKG_FNAME} | tar ${PKG_SUBDIR_CREATE:+-C ${PKG_SUBDIR}} -xf -; diff --git a/subr/pkg_fetch.subr b/subr/pkg_fetch.subr index beb76e60..f7da99fe 100644 --- a/subr/pkg_fetch.subr +++ b/subr/pkg_fetch.subr @@ -32,20 +32,22 @@ pkgp_fetch_git() { _fg_subdir="${1}"; _fg_url="${2}"; _fg_branch="${3}"; if [ ${ARG_OFFLINE:-0} -eq 0 ]; then if [ -e "${DLCACHEDIR}/${_fg_subdir}" ]; then - cd ${DLCACHEDIR}/${_fg_subdir} &&\ - git pull origin ${_fg_branch:-main} && cd ${OLDPWD}; + build_fileop cd ${DLCACHEDIR}/${_fg_subdir} &&\ + git pull origin ${_fg_branch:-main} &&\ + build_fileop cd ${OLDPWD}; else git clone ${_fg_url} ${DLCACHEDIR}/${_fg_subdir}; if [ -n "${_fg_branch}" -a \ \( -z "${_fg_branch#main}" \) -a \ \( -z "${_fg_branch#master}" \) ]; then - cd ${DLCACHEDIR}/${_fg_subdir} &&\ - git checkout -b ${_fg_branch} && cd ${OLDPWD}; + build_fileop cd ${DLCACHEDIR}/${_fg_subdir} &&\ + git checkout -b ${_fg_branch} &&\ + build_fileop cd ${OLDPWD}; fi; fi; fi; - secure_rm ${_fg_subdir}; - cp -pr ${DLCACHEDIR}/${_fg_subdir} .; + build_fileop rm ${_fg_subdir}; + build_fileop cp ${DLCACHEDIR}/${_fg_subdir} .; }; pkgp_fetch_urls_git() { diff --git a/subr/pkg_install.subr b/subr/pkg_install.subr index 73898337..ad451e80 100644 --- a/subr/pkg_install.subr +++ b/subr/pkg_install.subr @@ -6,7 +6,7 @@ pkgp_install_clean_lib() { if [ -d ${PKG_PREFIX}/lib ]; then for __ in $(find ${PKG_PREFIX}/lib -type f -name \*.la); do - secure_rm ${__}; + build_fileop rm ${__}; done; fi; }; @@ -33,8 +33,7 @@ pkgp_install_dlltool() { -D ${__so_fname} -d ${__so_fname%.so}.def; ${PKG_TARGET}-dlltool -l ${__so_fname%.so}.lib.a \ -D ${__so_fname} -d ${__so_fname%.so}.def; - echo cp -- ${__so_fname%.so}.lib.a "${PKG_PREFIX}/lib"; - cp -- ${__so_fname%.so}.lib.a "${PKG_PREFIX}/lib"; + build_fileop cp ${__so_fname%.so}.lib.a "${PKG_PREFIX}/lib"; fi; done; fi; @@ -71,7 +70,7 @@ pkg_install() { fi; pkgp_install_clean_lib; if [ -n "${PKG_INSTALL_FILES}" ]; then - (install_files -v ${PKG_INSTALL_FILES}); + (install_files -v ${PKG_PREFIX} ${PKG_INSTALL_FILES}); fi; pkgp_install_dlltool; set_build_script_done install -finish; diff --git a/subr/pkg_setup_env.subr b/subr/pkg_setup_env.subr index de304328..9faf3875 100644 --- a/subr/pkg_setup_env.subr +++ b/subr/pkg_setup_env.subr @@ -29,7 +29,7 @@ pkg_setup_env() { if [ "${PKG_SLIBTOOL}" != "default" ]; then export MAKE="make LIBTOOL=${PKG_SLIBTOOL:-slibtool}"; fi; - cd ${PKG_BUILD_DIR}; + build_fileop cd ${PKG_BUILD_DIR}; set_build_script_done setup distclean -configure; }; diff --git a/subr/post_tarballs.subr b/subr/post_tarballs.subr index 739acdd9..d55d2a41 100644 --- a/subr/post_tarballs.subr +++ b/subr/post_tarballs.subr @@ -84,7 +84,7 @@ post_tarballs() { TARBALL_COMPRESS_ARGS="-T0"; ;; *) log_msg failexit "Unknown tarball suffix \`.${TARBALL_SUFFIX}'."; esac; - cd ${PREFIX}; PREFIX_BASENAME=${PREFIX_NATIVE##*/}; + build_fileop cd ${PREFIX}; PREFIX_BASENAME=${PREFIX_NATIVE##*/}; postp_tarball_dist; postp_tarball_toolchain; postp_tarball_minipix; if [ "${BUILD}" = "debug" ]; then postp_tarball_src; diff --git a/subr/pre_subdirs.subr b/subr/pre_subdirs.subr index 81b89d06..383ab55a 100644 --- a/subr/pre_subdirs.subr +++ b/subr/pre_subdirs.subr @@ -2,31 +2,32 @@ # . ./build.vars and set -o errexit -o noglob are assumed. # -post_subdirs() { +pre_subdirs() { 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}/${__}; + build_rm ${PREFIX}/${__}; fi; done; fi; - install_files \ - /=${DLCACHEDIR} \ - /=${WORKDIR} \ - /=${PREFIX} \ - /=${PREFIX}/x86_64-w64-mingw32/mingw/include \ - /=${PREFIX_CROSS} \ - /=${PREFIX_MINIPIX}/bin \ - /=${PREFIX_NATIVE} \ - /=${PREFIX_TARGET}/lib \ - @.=${PREFIX}/usr \ - @.=${PREFIX}/x86_64-w64-mingw32/mingw \ - @.=${PREFIX_NATIVE}/usr \ - @bin=${PREFIX_MINIPIX}/lib \ - @bin=${PREFIX_MINIPIX}/libexec \ - @bin=${PREFIX_MINIPIX}/share \ - @share/man=${PREFIX}/man \ + install_files "" \ + /=${DLCACHEDIR} \ + /=${WORKDIR} \ + /=${PREFIX} \ + /=${PREFIX}/x86_64-w64-mingw32 \ + /=${PREFIX_CROSS} \ + /=${PREFIX_MINIPIX}/bin \ + /=${PREFIX_NATIVE} \ + /=${PREFIX_TARGET}/lib \ + @.=${PREFIX}/usr \ + @.=${PREFIX}/x86_64-w64-mingw32/mingw \ + /=${PREFIX}/x86_64-w64-mingw32/mingw/include \ + @.=${PREFIX_NATIVE}/usr \ + @bin=${PREFIX_MINIPIX}/lib \ + @bin=${PREFIX_MINIPIX}/libexec \ + @bin=${PREFIX_MINIPIX}/share \ + @share/man=${PREFIX}/man \ @share/man=${PREFIX_NATIVE}/man; }; diff --git a/subr/rtl.subr b/subr/rtl.subr deleted file mode 100644 index 4779af8c..00000000 --- a/subr/rtl.subr +++ /dev/null @@ -1,276 +0,0 @@ -# -# . ./build.vars and set -o errexit -o noglob are assumed. -# See warning at the top of build.vars. -# - -date() { command date +"${1:-${TIMESTAMP_FMT}}"; }; -get_var_unsafe() { eval echo \${${1}}; }; -set_var_unsafe() { eval ${1}=\"${2}\"; }; -push_IFS() { _pI_IFS="${IFS}"; IFS="${1}"; }; -pop_IFS() { IFS="${_pI_IFS}"; unset _pI_IFS; }; -set_build_dir() { PKG_BUILD_DIR=${1}-${2}-${PKG_TARGET}; }; -split() { push_IFS "${1}"; set -- ${2}; pop_IFS; echo "${*}"; }; -test_cmd() { command -v "${1}" >/dev/null; }; -unsplit() { push_IFS "${1}"; shift; set -- "${@}"; echo "${*}"; pop_IFS; }; - -get_vars_unsafe() { - while [ ${#} -gt 0 ]; do - _gvu_vval="$(eval echo \${${1}})"; - [ -z "${_gvu_vval}" ] || _gvu_vval_="${_gvu_vval}"; - shift; - done; echo "${_gvu_vval_}"; - unset _gvu_vval _gvu_vval_; -}; - -log_msg() { - _lm_lvl=${1}; shift; - if [ "${_lm_lvl#v}" != "${_lm_lvl}" ]\ - && [ ${ARG_VERBOSE:-0} -eq 0 ]; then - return; - fi; - case ${_lm_lvl} in - failexit) printf "\033[0m\033[${LOG_MSG_FAIL_COLOUR}m"; ;; - fail) printf "\033[0m\033[${LOG_MSG_FAIL_COLOUR}m"; ;; - info) printf "\033[0m\033[${LOG_MSG_INFO_COLOUR}m"; ;; - vnfo) printf "\033[0m\033[${LOG_MSG_INFO_COLOUR}m"; ;; - succ) printf "\033[0m\033[${LOG_MSG_SUCC_COLOUR}m"; ;; - warn) printf "\033[0m\033[${LOG_MSG_WARN_COLOUR}m"; ;; - varn) printf "\033[0m\033[${LOG_MSG_WARN_COLOUR}m"; ;; - esac; - if [ $# -gt 1 ]; then - printf "==> %s %s %s\033[0m\n" "$(date "${TIMESTAMP_FMT}")" "${1}" "$*"; - else - printf "==> %s %s\033[0m\n" "$(date "${TIMESTAMP_FMT}")" "${1}"; - fi; [ ${_lm_lvl} = failexit ] && exit 1 || unset _lm_lvl; -}; - -insecure_mkdir() { - while [ ${#} -gt 0 ]; do - if [ -z "${1}" ]; then - return 1; - elif [ ! -e "${1}" ]; then - log_msg varn "Making directory \`${1}'."; - mkdir -p -- "${1}"; - fi; shift; - done; -}; - -install_files() { - if [ "${1}" = "-v" ]; then - _if_verbose="${1}"; shift; - fi; - while [ ${#} -gt 0 ]; do - case "${1}" in - @*=*) - __ln_target="${1%=*}"; - __ln_target="${__ln_target#@}"; - __ln_fname="${1#*=}"; - if [ -e ${__ln_fname} ]; then - if [ ${_if_verbose:-0} -eq 1 ]; then - echo secure_rm ${__ln_fname}; - fi; - secure_rm ${__ln_fname}; - fi; - if [ ${_if_verbose:-0} -eq 1 ]; then - echo ln -sf -- ${__ln_target} ${PKG_PREFIX:+${PKG_PREFIX}/}${__ln_fname}; - fi; - ln -sf -- ${__ln_target} ${PKG_PREFIX:+${PKG_PREFIX}/}${__ln_fname}; - ;; - /=*) - __mkdir_fname="${1#/=}"; - if [ ${_if_verbose:-0} -eq 1 ]; then - echo insecure_mkdir ${PKG_PREFIX:+${PKG_PREFIX}/}${__mkdir_fname}; - fi; - insecure_mkdir ${PKG_PREFIX:+${PKG_PREFIX}/}${__mkdir_fname}; - ;; - *) - __file_fname_src="${1%=*}"; - __file_fname_dst="${1#*=}"; - if [ ${_if_verbose:-0} -eq 1 ]; then - echo cp -pP -- ${__file_fname_src} ${PKG_PREFIX:+${PKG_PREFIX}/}${__file_fname_dst}; - fi; - cp -pP -- ${__file_fname_src} ${PKG_PREFIX:+${PKG_PREFIX}/}${__file_fname_dst}; - ;; - esac; shift; - done; unset _if_verbose; -}; - -match_list() { - _ml_cmp="${3}"; push_IFS "${2}"; set -- ${1}; pop_IFS; - while [ ${#} -gt 0 ]; do - if [ "${1}" = "${_ml_cmp}" ]; then - unset _ml_cmp; return 0; - fi; shift; - done; unset _ml_cmp; return 1; -}; - -secure_cd() { - if [ \( -z "${1}" \) -o \( ! -e "${1}" \) ]; then - return 1; - else - (cd "${1}"; [ "${PWD#${PREFIX_ROOT}}" = "${PWD}" ] &&\ - return 1 || return 0); - if [ ${?} -eq 0 ]; then - log_msg varn "Changing working directory to \`${1}'."; - cd -- "${1}"; - else - log_msg failexit "secure_cd() called with pathname \`${1}' not below \${PREFIX_ROOT} (${PREFIX_ROOT}). This is a bug."; - fi; - fi; -}; - -secure_rm() { - while [ ${#} -gt 0 ]; do - if [ -z "${1}" ]; then - return 1; - elif [ -e "${1}" ]; then - if [ -d "${1}" ]; then - _sr_pname_check="${1}"; - else - _sr_pname_check="$(dirname "${1}")"; - fi; - (cd "${_sr_pname_check}"; [ "${PWD#${PREFIX_ROOT}}" = "${PWD}" ] &&\ - return 1 || return 0); - if [ ${?} -eq 0 ]; then - unset _sr_pname_check; - log_msg varn "Removing directory or file \`${1}'."; - rm -rf -- "${1}"; - else - log_msg failexit "secure_rm() called with pathname \`${1}' not below \${PREFIX_ROOT} (${PREFIX_ROOT}). This is a bug."; - fi; - fi; shift; - done; -}; - - -is_build_script_done() { - if [ "${1}" = "clean" ]\ - || [ "${1}" = distclean ]; then - if match_list "${ARG_RESTART}" , ${BUILD_PACKAGE_LC} \ - && [ -n "${ARG_RESTART_AT}" ] \ - && match_list "${ARG_RESTART_AT}" , "${1}"; then - return 1; # Build - else - return 0; # Skip - fi; - elif [ "${ARG_RESTART}" = "ALL" ]; then - return 1; # Build - elif match_list "${ARG_RESTART}" , ${BUILD_PACKAGE_LC}; then - if [ -n "${ARG_RESTART_AT}" ]; then - if [ "${ARG_RESTART_AT}" = "ALL" ]; then - return 1; # Build - elif match_list "${ARG_RESTART_AT}" , "${1}"; then - return 1; # Build - else - return 0; # Skip - fi; - else - return 1; # Build - fi; - elif [ -f ${WORKDIR}/.${2:-${BUILD_PACKAGE_LC}}.${1} ]; then - return 0; # Skip - else - return 1; # Build - fi; -}; - -log_env_vars() { - log_msg info "Variables for this ${1:-build}:"; shift; - while [ ${_lev_nvar:=0} -lt ${#} ]; do - _lev_arg="$(eval echo \${${_lev_nvar}})"; - _lev_arg="${_lev_arg%%=*}"; - if [ ${#_lev_arg} -gt ${_lev_arg_len_max:=0} ]; then - _lev_arg_len_max=${#_lev_arg}; - fi; : $((_lev_nvar+=1)); - done; unset _lev_nvar _lev_arg; - while [ ${#} -gt 0 ]; do - log_msg info "$(printf \ - "%${_lev_arg_len_max}.${_lev_arg_len_max}s=%s" \ - "${1%%=*}" "$(get_var_unsafe ${1#*=})")"; - shift; - done; unset _lev_arg_len_max; -}; - -parse_with_pkg_name() { - PKG_NAME=${1}; shift; - _pwpn_pkg_name_uc=$(echo ${PKG_NAME} | tr a-z A-Z); - if [ -z "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_URL)" ]\ - && [ -z "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_URLS_GIT)" ]\ - && [ -z "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_VERSION)" ]; then - unset _pwpn_pkg_name_uc; - log_msg failexit "Error: package \`${PKG_NAME}' missing in build.vars."; - else - for _pwpn_vname in ${PKG_BUILD_VARS}; do - if [ -n "$(get_var_unsafe DEFAULT_${_pwpn_vname})" ]; then - set_var_unsafe PKG_${_pwpn_vname} "$(get_var_unsafe DEFAULT_${_pwpn_vname})"; - fi; - if [ -n "$(get_var_unsafe ${BUILD_TARGET}_${_pwpn_vname})" ]; then - set_var_unsafe PKG_${_pwpn_vname} "$(get_var_unsafe ${BUILD_TARGET}_${_pwpn_vname})"; - fi; - if [ "${BUILD}" = "debug" ] \ - && [ -n "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_${_pwpn_vname}_DEBUG)" ]; then - set_var_unsafe PKG_${_pwpn_vname} "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_${_pwpn_vname}_DEBUG)"; - elif [ "${BUILD}" = "release" ] \ - && [ -n "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_${_pwpn_vname}_RELEASE)" ]; then - set_var_unsafe PKG_${_pwpn_vname} "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_${_pwpn_vname}_RELEASE)"; - elif [ -n "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_${_pwpn_vname})" ]; then - set_var_unsafe PKG_${_pwpn_vname} "$(get_var_unsafe PKG_${_pwpn_pkg_name_uc}_${_pwpn_vname})"; - fi; - done; unset _pwpn_vname; - fi; - [ -z "${PKG_FNAME}" ] && PKG_FNAME=${PKG_URL##*/}; - [ -z "${PKG_SUBDIR}" ] && PKG_SUBDIR=${PKG_FNAME%%.tar*}; - [ -n "${PKG_ENV_VARS_EXTRA}" ] && set_env_vars_with_sep : "${PKG_ENV_VARS_EXTRA}"; - for _pwpn_env_var in $(set); do - if [ "${_pwpn_env_var#PKG_${_pwpn_pkg_name_uc}}" != "${_pwpn_env_var}" ]; then - _pwpn_env_vars="${_pwpn_env_vars:+${_pwpn_env_vars} }${_pwpn_env_var%%=*}"; - fi; - done; - if [ -n "${_pwpn_env_vars}" ]; then - log_env_vars "build" ${_pwpn_env_vars}; - fi; unset _pwpn_pkg_name_uc _pwpn_env_var _pwpn_env_vars; -}; - -run_cmd_unsplit() { - _rcu_cmd=${1}; shift; - while [ ${#} -gt 0 ]; do - [ -n "${1}" ] &&\ - _rcu_cmdline="${_rcu_cmdline:+${_rcu_cmdline}:}${1}"; - shift; - done; - push_IFS :; ${_rcu_cmd} ${_rcu_cmdline}; _rcu_rc=$?; pop_IFS; - unset _rcu_cmd _rcu_cmdline; return ${_rcu_rc}; -}; - -set_build_script_done() { - _sbsd_script_fname=${BUILD_PACKAGE_LC}; - _sbsd_done_fname=${WORKDIR}/.${_sbsd_script_fname}; - while [ $# -ge 1 ]; do - if [ "${1#-}" != "${1}" ]; then - secure_rm ${_sbsd_done_fname}.${1#-}; - else - touch ${_sbsd_done_fname}.${1}; - log_msg info "Finished build step ${1} of \`${_sbsd_script_fname}'."; - fi; shift; - done; unset _sbsd_script_fname _sbsd_done_fname; -}; - -set_env_vars_with_sep() { - _sevws_sep=${1}; shift; push_IFS ${_sevws_sep}; set -- ${1}; - while [ ${#} -gt 0 ]; do - export "${1}"; shift; - done; unset _sevws_sep; pop_IFS; -}; - -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 -- cgit v1.2.3