| |
| |
| |
| |
| date() { command date "+${1:-${TIMESTAMP_FMT}}"; }; |
| get_var_unsafe() { eval echo \${${1}}; }; |
| set_var_unsafe() { [ -n "${2}" ] && eval ${1}=\"${2}\" || return 0; }; |
| pop_IFS() { IFS="${_pI_IFS}"; unset _pI_IFS; }; |
| push_IFS() { _pI_IFS="${IFS}"; IFS="${1}"; }; |
| set_build_dir() { PKG_BUILD_DIR="${1}-${2}-${PKG_TARGET}"; }; |
| test_cmd() { command -v "${1}" >/dev/null; }; |
| |
| build_fileop() { |
| local _op="${1}"; shift; |
| if [ "${_op}" = cd ]; then |
| log_msg varn "Changing working directory to \`${1}'."; |
| [ \( -n "${1}" \) -a \( -e "${1}" \) ] && cd -- "${1}"; |
| elif [ "${_op}" = cp ]; then |
| log_msg varn "Copying \`${1}' to \`${2}' w/ -pPR."; |
| [ ${#} -ge 2 ] && cp -pPR -- "${@}"; |
| elif [ "${_op}" = ln_symbolic ]; then |
| log_msg varn "Linking \`${1}' to \`${2}' w/ -fs"; |
| [ \( -n "${1}" \) -a \( -n "${2}" \) ] && ln -fs -- "${1}" "${2}"; |
| elif [ "${_op}" = mv ]; then |
| log_msg varn "Moving \`${1}' to \`${2}' w/ -fs"; |
| [ \( -n "${1}" \) -a \( -n "${2}" \) ] && mv -f -- "${1}" "${2}"; |
| elif [ "${_op}" = mkdir ]\ |
| || [ "${_op}" = rm ]; then |
| while [ ${#} -gt 0 ]; do |
| if [ -z "${1}" ]; then |
| return 1; |
| elif [ "${_op}" = mkdir ]\ |
| && [ ! -e "${1}" ]; then |
| log_msg varn "Making directory \`${1}'."; |
| mkdir -p -- "${1}"; |
| elif [ "${_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; |
| }; |
| |
| install_files() { |
| local _verbose _prefix _ln_target _ln_fname _mkdir_fname \ |
| _file_fname_src _file_fname_dst; |
| if [ "${1}" = "-v" ]; then |
| _verbose="${1}"; shift; |
| fi; _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 [ ${_verbose:-0} -eq 1 ]; then |
| echo build_fileop rm "${_ln_fname}"; |
| fi; |
| build_fileop rm "${_ln_fname}"; |
| fi; |
| build_fileop ln_symbolic "${_ln_target}" "${_prefix:+${_prefix}/}${_ln_fname}"; |
| ;; |
| /=*) |
| _mkdir_fname="${1#/=}"; |
| build_fileop mkdir "${_prefix:+${_prefix}/}${_mkdir_fname}"; |
| ;; |
| *) |
| _file_fname_src="${1%=*}"; |
| _file_fname_dst="${1#*=}"; |
| build_fileop cp "${_file_fname_src}" "${_prefix:+${_prefix}/}${_file_fname_dst}"; |
| ;; |
| esac; shift; |
| done; |
| }; |
| |
| is_build_script_done() { |
| local _done_fname="${WORKDIR}/.${1}.${2}" _restart_at="${3}"; |
| if [ -z "${_restart_at}" ]; then |
| if [ -e "${_done_fname}" ]; then |
| return 0; |
| else |
| return 1; |
| fi; |
| elif [ "${_restart_at}" = "ALL" ]; then |
| return 1; |
| elif lmatch "${_restart_at}" , "${2}"; then |
| return 1; |
| else |
| return 0; |
| fi; |
| }; |
| |
| set_build_script_done() { |
| local _pkg_fname="${1}"; |
| local _done_fname_pfx="${WORKDIR}/.${_pkg_fname}"; |
| shift; while [ ${ |
| if [ "${1#-}" != "${1}" ]; then |
| build_fileop rm "${_done_fname_pfx}.${1#-}"; |
| else |
| touch "${_done_fname_pfx}.${1}"; |
| log_msg info "Finished build step ${1} of package \`${_pkg_fname}'."; |
| fi; shift; |
| done; |
| }; |
| |
| lfilter() { |
| local _list="${1}" _filter="${2}" _lnew _litem _lfilter; |
| for _litem in ${_list}; do |
| for _lfilter in ${_filter}; do |
| if [ "${_lfilter}" = "${_litem}" ]; then |
| _lnew="${_lnew:+${_lnew} }${_litem}"; break; |
| fi; |
| done; |
| done; |
| echo ${_lnew}; |
| }; |
| |
| lmatch() { |
| local _cmp="${3}"; push_IFS "${2}"; set -- ${1}; pop_IFS; |
| while [ ${ |
| if [ "${1}" = "${_cmp}" ]; then |
| return 0; |
| fi; shift; |
| done; return 1; |
| }; |
| |
| log_env_vars() { |
| local _nvar=1 _arg _arg_len_max=0; |
| log_msg info "Variables for this ${1:-build}:"; shift; |
| while [ ${_nvar} -le ${ |
| _arg="$(eval echo \${${_nvar}})"; |
| _arg="${_arg%%=*}"; |
| if [ ${ |
| _arg_len_max=${ |
| fi; : $((_nvar+=1)); |
| done; |
| while [ ${ |
| log_msg info "$(printf \ |
| "%${_arg_len_max}.${_arg_len_max}s=%s" \ |
| "${1%%=*}" "$(get_var_unsafe ${1 |
| shift; |
| done; |
| }; |
| |
| log_msg() { |
| local _lvl="${1}"; shift; |
| if [ "${_lvl#v}" != "${_lvl}" ]\ |
| && [ ${ARG_VERBOSE:-0} -eq 0 ]; then |
| return; |
| fi; |
| case "${_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 [ ${ |
| printf "==> %s %s %s\033[0m\n" "$(date)" "${1}" "$*"; |
| else |
| printf "==> %s %s\033[0m\n" "$(date)" "${1}"; |
| fi; [ ${_lvl} = failexit ] && exit 1 || return 0; |
| }; |
| |
| run_cmd_unsplit() { |
| local _cmd="${1}" _cmdline _rc; shift; |
| while [ ${ |
| [ -n "${1}" ] &&\ |
| _cmdline="${_cmdline:+${_cmdline}:}${1}"; |
| shift; |
| done; |
| push_IFS :; ${_cmd} ${_cmdline}; _rc=$?; pop_IFS; |
| return ${_rc}; |
| }; |
| |
| set_env_vars_with_sep() { |
| local _sep="${1}"; shift; push_IFS ${_sep}; set -- ${1}; |
| while [ ${ |
| export "${1}"; shift; |
| done; pop_IFS; |
| }; |
| |
| subst_tgts() { |
| while [ ${ |
| case "${1}" in |
| devroot) |
| echo "${DEVROOT_PACKAGES}"; ;; |
| world) echo "${WORLD_PACKAGES}"; ;; |
| *) echo "${1}"; ;; |
| esac; shift; |
| done; |
| }; |
| |
| |