Conan_Kudo / build / midipix_build

Forked from build/midipix_build 4 years ago
Clone

Blame subr/build.subr

Lucio Andrés Illanes Albornoz (arab, vxp) 59765f
#
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
# set -o errexit -o noglob are assumed.
Lucio Andrés Illanes Albornoz (arab, vxp) 59765f
#
Lucio Andrés Illanes Albornoz (arab, vxp) 59765f
Lucio Andrés Illanes Albornoz (arab, vxp) 48fd14
basename() { echo "${1##*/}"; };
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
date() { command date "+${1:-${TIMESTAMP_FMT}}"; };
Lucio Andrés Illanes Albornoz (arab, vxp) 48fd14
dirname() { echo "${1%/*}"; };
Lucio Andrés Illanes Albornoz (arab, vxp) 154865
get_var_unsafe() { eval echo \${${1}}; };
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
set_var_unsafe() { [ -n "${2}" ] && eval ${1}=\"${2}\" || return 0; };
Lucio Andrés Illanes Albornoz (arab, vxp) 154865
pop_IFS() { IFS="${_pI_IFS}"; unset _pI_IFS; };
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
push_IFS() { _pI_IFS="${IFS}"; IFS="${1}"; };
Lucio Andrés Illanes Albornoz (arab, vxp) 8ee843
set_build_dir() { PKG_BUILD_DIR="${1}-${2}-${PKG_TARGET}"; };
Lucio Andrés Illanes Albornoz (arab, vxp) 154865
test_cmd() { command -v "${1}" >/dev/null; };
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
toupper() { echo "${1}" | tr a-z A-Z; };
Lucio Andrés Illanes Albornoz (arab, vxp) 02175d
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
build_fileop() {
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	local _op="${1}"; shift;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	if [ "${_op}" = cd ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
		log_msg varn "Changing working directory to \`${1}'.";
Lucio Andrés Illanes Albornoz (arab, vxp) 48fd14
		[ \( -n "${1}" \) -a \( -L "${1}" -o -e "${1}" \) ] && cd -- "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	elif [ "${_op}" = cp ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
		log_msg varn "Copying \`${1}' to \`${2}' w/ -pPR.";
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
		[ ${#} -ge 2 ] && cp -pPR -- "${@}";
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	elif [ "${_op}" = ln_symbolic ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
		log_msg varn "Linking \`${1}' to \`${2}' w/ -fs";
Lucio Andrés Illanes Albornoz (arab, vxp) 1fb552
		[ \( -n "${1}" \) -a \( -n "${2}" \) ] && ln -fs -- "${1}" "${2}";
Lucio Andrés Illanes Albornoz (arab, vxp) 05e618
	elif [ "${_op}" = mv ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 05e618
		log_msg varn "Moving \`${1}' to \`${2}' w/ -fs";
Lucio Andrés Illanes Albornoz (arab, vxp) 05e618
		[ \( -n "${1}" \) -a \( -n "${2}" \) ] && mv -f -- "${1}" "${2}";
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	elif [ "${_op}" = mkdir ]\
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	||   [ "${_op}" = rm ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
		while [ ${#} -gt 0 ]; do
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
			if [ -z "${1}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
				return 1;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
			elif [ "${_op}" = mkdir ]\
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
			&&   [ ! -e "${1}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
				log_msg varn "Making directory \`${1}'.";
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
				mkdir -p -- "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
			elif [ "${_op}" = rm ]\
Lucio Andrés Illanes Albornoz (arab, vxp) 48fd14
			&&   [ \( -L "${1}" \) -o \( -e "${1}" \) ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 154865
				log_msg varn "Removing directory or file \`${1}'.";
Lucio Andrés Illanes Albornoz (arab, vxp) 154865
				rm -rf -- "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
			fi; shift;
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
		done;
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
	else
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
		log_msg failexit "Error: build_fileop() called w/ invalid parameter(s) \`${@}'.";
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
	fi;
Lucio Andrés Illanes Albornoz (arab, vxp) 59765f
};
Lucio Andrés Illanes Albornoz (arab, vxp) 59765f
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
build_files_fini() {
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
	: $((BUILD_TIMES_SECS=$(command date +%s)-${BUILD_TIMES_SECS}));
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
	: $((BUILD_TIMES_HOURS=${BUILD_TIMES_SECS}/3600));
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
	: $((BUILD_TIMES_MINUTES=(${BUILD_TIMES_SECS}%3600)/60));
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
	: $((BUILD_TIMES_SECS=(${BUILD_TIMES_SECS}%3600)%60));
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
	if [ -f "${BUILD_STATUS_IN_PROGRESS_FNAME}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
		build_fileop rm ${BUILD_STATUS_IN_PROGRESS_FNAME};
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
	fi;
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
};
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
build_files_init() {
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
	if [ -e ${BUILD_STATUS_IN_PROGRESS_FNAME} ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
		log_msg failexit "Error: another build targeting this architecture and build type is currently in progress.";
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
	else
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
		touch ${BUILD_STATUS_IN_PROGRESS_FNAME};
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
	fi;
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
	if [ -e ${BUILD_LOG_FNAME} ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
		mv -- ${BUILD_LOG_FNAME} ${BUILD_LOG_LAST_FNAME};
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
	fi;
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
	BUILD_DATE_START="$(date %Y-%m-%d-%H-%M-%S)";
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
	BUILD_NFINI=${BUILD_NSKIP:=${BUILD_NFAIL:=${BUILD_NBUILT:=0}}};
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
	BUILD_TIMES_SECS=$(command date +%s);
Lucio Andrés Illanes Albornoz (arab, vxp) c27bea
	BUILD_PKGS_FAILED="";
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
};
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
is_build_script_done() {
Lucio Andrés Illanes Albornoz (arab, vxp) 8ee843
	local _done_fname="${WORKDIR}/.${1}.${2}" _restart_at="${3}";
Lucio Andrés Illanes Albornoz (arab, vxp) 36ab93
	if [ -z "${_restart_at}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 36ab93
		if [ -e "${_done_fname}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 36ab93
			return 0;	# Skip
Lucio Andrés Illanes Albornoz (arab, vxp) 36ab93
		else
Lucio Andrés Illanes Albornoz (arab, vxp) 36ab93
			return 1;	# Build
Lucio Andrés Illanes Albornoz (arab, vxp) 36ab93
		fi;
Lucio Andrés Illanes Albornoz (arab, vxp) d5afb4
	elif [ "${_restart_at}" = "ALL" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) d5afb4
		return 1;		# Build
Lucio Andrés Illanes Albornoz (arab, vxp) 36ab93
	elif lmatch "${_restart_at}" , "${2}"; then
Lucio Andrés Illanes Albornoz (arab, vxp) 36ab93
		return 1;		# Build
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
	else
Lucio Andrés Illanes Albornoz (arab, vxp) 36ab93
		return 0;		# Skip
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
	fi;
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
};
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
set_build_script_done() {
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	local _pkg_fname="${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	local _done_fname_pfx="${WORKDIR}/.${_pkg_fname}";
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	shift; while [ ${#} -ge 1 ]; do
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
		if [ "${1#-}" != "${1}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
			build_fileop rm "${_done_fname_pfx}.${1#-}";
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
		else
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
			touch "${_done_fname_pfx}.${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
			log_msg info "Finished build step ${1} of package \`${_pkg_fname}'.";
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
		fi; shift;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	done;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
};
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
lfilter() {
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
	[ "x${1}" = "x-not" ] && { local _notfl=1; shift; }
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
	local _list="${1}" _filter="${2}" _lnew _litem _lfilter _filterfl;
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
	[ -z "${_filter}" ] && { echo "${_list}"; return 0; };
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	for _litem in ${_list}; do
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
		_filterfl=0;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
		for _lfilter in ${_filter}; do
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
			if [ "${_notfl:-0}" -eq 0 ]\
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
			&& [ "${_lfilter}" = "${_litem}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
				_lnew="${_lnew:+${_lnew} }${_litem}"; break;
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
			elif [ "${_notfl:-0}" -eq 1 ]\
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
			&& [ "${_lfilter}" = "${_litem}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
				_filterfl=1; break;
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
			fi;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
		done;
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
		if [ "${_notfl:-0}" -eq 1 ]\
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
		&& [ "${_filterfl:-0}" -eq 0 ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
			_lnew="${_lnew:+${_lnew} }${_litem}";
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
		fi;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	done;
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
	echo "${_lnew}";
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
};
Lucio Andrés Illanes Albornoz (arab, vxp) bd97b6
Lucio Andrés Illanes Albornoz (arab, vxp) 51fbc3
lmatch() {
Lucio Andrés Illanes Albornoz (arab, vxp) 51fbc3
	local _cmp="${3}"; push_IFS "${2}"; set -- ${1}; pop_IFS;
Lucio Andrés Illanes Albornoz (arab, vxp) 51fbc3
	while [ ${#} -gt 0 ]; do
Lucio Andrés Illanes Albornoz (arab, vxp) 51fbc3
		if [ "${1}" = "${_cmp}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 51fbc3
			return 0;
Lucio Andrés Illanes Albornoz (arab, vxp) 51fbc3
		fi; shift;
Lucio Andrés Illanes Albornoz (arab, vxp) 51fbc3
	done; return 1;
Lucio Andrés Illanes Albornoz (arab, vxp) 51fbc3
};
Lucio Andrés Illanes Albornoz (arab, vxp) 51fbc3
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
log_env_vars() {
Lucio Andrés Illanes Albornoz (arab, vxp) 48549b
	local _nvar=1 _arg _arg_len_max=0;
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
	log_msg info "Variables for this ${1:-build}:"; shift;
Lucio Andrés Illanes Albornoz (arab, vxp) 48549b
	while [ ${_nvar} -le ${#} ]; do
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
		_arg="$(eval echo \${${_nvar}})";
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
		_arg="${_arg%%=*}";
Lucio Andrés Illanes Albornoz (arab, vxp) 48549b
		if [ ${#_arg} -gt ${_arg_len_max} ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
			_arg_len_max=${#_arg};
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
		fi; : $((_nvar+=1));
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	done;
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
	while [ ${#} -gt 0 ]; do
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
		log_msg info "$(printf					\
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
			"%${_arg_len_max}.${_arg_len_max}s=%s"	\
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
			"${1%%=*}" "$(get_var_unsafe ${1#*=})")";
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
		shift;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	done;
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
};
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
log_msg() {
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	local _lvl="${1}"; shift;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	if [ "${_lvl#v}" != "${_lvl}" ]\
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	&& [ ${ARG_VERBOSE:-0} -eq 0 ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
		return;
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
	fi;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	case "${_lvl}" in
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
		failexit) printf "\033[0m\033[${LOG_MSG_FAIL_COLOUR}m"; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
		fail) printf "\033[0m\033[${LOG_MSG_FAIL_COLOUR}m"; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
		info) printf "\033[0m\033[${LOG_MSG_INFO_COLOUR}m"; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
		vnfo) printf "\033[0m\033[${LOG_MSG_INFO_COLOUR}m"; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
		succ) printf "\033[0m\033[${LOG_MSG_SUCC_COLOUR}m"; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
		warn) printf "\033[0m\033[${LOG_MSG_WARN_COLOUR}m"; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
		varn) printf "\033[0m\033[${LOG_MSG_WARN_COLOUR}m"; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	esac;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	if [ ${#} -gt 1 ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
		printf "==> %s %s %s\033[0m\n" "$(date)" "${1}" "$*";
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	else
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
		printf "==> %s %s\033[0m\n" "$(date)" "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	fi; [ ${_lvl} = failexit ] && exit 1 || return 0;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
};
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
run_cmd_unsplit() {
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	local _cmd="${1}" _cmdline _rc; shift;
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
	while [ ${#} -gt 0 ]; do
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
		[ -n "${1}" ] &&\
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
			_cmdline="${_cmdline:+${_cmdline}:}${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
		shift;
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
	done;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	push_IFS :; ${_cmd} ${_cmdline}; _rc=$?; pop_IFS;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	return ${_rc};
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
};
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
set_env_vars_with_sep() {
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	local _sep="${1}"; shift; push_IFS ${_sep}; set -- ${1};
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	while [ ${#} -gt 0 ]; do
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
		export "${1}"; shift;
Lucio Andrés Illanes Albornoz (arab, vxp) 802215
	done; pop_IFS;
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
};
Lucio Andrés Illanes Albornoz (arab, vxp) ce047e
Lucio Andrés Illanes Albornoz (arab, vxp) d1adc7
subst_tgts() {
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
	local _pkgs;
Lucio Andrés Illanes Albornoz (arab, vxp) d1adc7
	while [ ${#} -ge 1 ]; do
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
	_pkgs="$(get_var_unsafe "$(toupper "${1}")_TARGET")";
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
	if [ -n "${_pkgs}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
		echo "${_pkgs}";
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
	else
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
		echo "${1}";
Lucio Andrés Illanes Albornoz (arab, vxp) 49b460
	fi; shift;
Lucio Andrés Illanes Albornoz (arab, vxp) d1adc7
	done;
Lucio Andrés Illanes Albornoz (arab, vxp) d1adc7
};
Lucio Andrés Illanes Albornoz (arab, vxp) d1adc7
Lucio Andrés Illanes Albornoz (arab, vxp) 59765f
# vim:filetype=sh