Blame build.subr

Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
#
Lucio Andrés Illanes Albornoz (arab, vxp) 31dc75
# . ./build.vars and set -o errexit are assumed.
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
#
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
lalbornoz 340f4c
TIMESTAMP_FMT="${TIMESTAMP_FMT:-"%Y/%m/%d %H:%M:%S"}";
lalbornoz 340f4c
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
apply_patches() {
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
	(rm_if_exists -m -c ${2};
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
	wget -c -nd -np -r -R \*.htm\* -R \*.sig ${1};
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
	for _patch_fname in			\
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
			$(find . -type f -not -iname \*.sig | sort); do
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
		patch -d ../${PKG_SUBDIR} -p0	\
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
			< ${_patch_fname};
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
	done; unset _patch_fname);
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
};
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
check_path_vars() {
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
	while [ $# -gt 0 ]; do
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
		if [ -z "${_val:=$(eval echo \${${1}})}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
			log_msg fail "Error: variable \`${1}' is empty or unset.";
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
			exit 1;
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
		elif [ "x${_val#* }" != "x${_val}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
			log_msg fail "Error: variable \`${1}' contains one or more whitespace characters.";
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
			exit 1;
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
		else
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
			shift;
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
		fi;
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
	done; unset _val;
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
};
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
check_prereqs() {
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
	for _cmd in "$@"; do
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
		if ! command -v ${_cmd} >/dev/null; then
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
			log_msg fail "Error: missing prerequisite command \`${_cmd}.";
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
			exit 1;
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
		fi;
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
	done; unset _cmd;
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
};
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
lalbornoz 340f4c
date() {
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
	command date +"${1:-${TIMESTAMP_FMT}}";
lalbornoz 340f4c
};
lalbornoz 340f4c
lalbornoz 340f4c
fetch() {
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
	wget --no-check-certificate -N ${1};
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
	if [ $# -eq 2 ] && ! compare_hash ${1##*/} ${2}; then
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
		log_msg fail "Error: hash mismatch for URL \`${1##*/}'.";
Lucio Andrés Illanes Albornoz (arab, vxp) bd43d0
		exit 1;
Lucio Andrés Illanes Albornoz (arab, vxp) bd43d0
	fi;
lalbornoz 340f4c
};
lalbornoz 340f4c
lalbornoz 340f4c
fetch_git() {
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
	if [ -d ${1} ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
		(cd ${1} && git pull origin main);
lalbornoz 340f4c
	else
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
		git clone ${2} ${1};
lalbornoz 340f4c
	fi;
lalbornoz 340f4c
};
lalbornoz 340f4c
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
compare_hash() {
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
	_hash_cmp=${2}; set -- $(openssl dgst -sha256 ${1});
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
	shift $((${#}-1)); set -- ${1} ${_hash_cmp}; unset _hash_cmp;
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
	[ "x${1}" = "x${2}" ];
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
};
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
compare_hash_manifest() {
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
	while [ $# -gt 0 ]; do
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
		if ! compare_hash ${1} ${2}; then
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
			log_msg fail "Error: hash mismatch for patch file \`${1}'.";
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
			exit 1;
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
		else
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
			shift;
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
		fi;
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
	done; return 0;
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
};
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
lalbornoz 340f4c
is_build_script_done() {
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
	_script_fname=${SCRIPT_FNAME##*/};
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
	if [ -f ${WORKDIR}/.${_script_fname%.build}.${1} ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
		unset script_fname;
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
		return 0;
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
	else
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
		unset script_fname;
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
		return 1;
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
	fi;
lalbornoz 340f4c
};
lalbornoz 340f4c
set_build_script_done() {
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
	_script_fname=${SCRIPT_FNAME##*/};
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
	_done_fname=${WORKDIR}/.${_script_fname%.build};
lalbornoz 340f4c
	while [ $# -ge 1 ]; do
lalbornoz 340f4c
		if [ "x${1#-}" != "x${1}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
			rm -f ${_done_fname}.${1#-};
lalbornoz 340f4c
		else
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
			touch ${_done_fname}.${1};
lalbornoz 340f4c
			log_msg info "Finished build step ${1} of build script \`${_script_fname}'.";
lalbornoz 340f4c
		fi; shift;
lalbornoz 340f4c
	done;
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
	unset _script_fname _done_fname;
lalbornoz 340f4c
};
lalbornoz 340f4c
lalbornoz 340f4c
log_msg() {
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
	_lvl=${1}; shift;
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
	case ${_lvl} in
Lucio Andrés Illanes Albornoz (arab, vxp) 31dc75
		fail) printf "\033[${LOG_MSG_FAIL_COLOUR}m"; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) 31dc75
		info) printf "\033[${LOG_MSG_INFO_COLOUR}m"; ;;
Lucio Andrés Illanes Albornoz (arab, vxp) 31dc75
		succ) printf "\033[${LOG_MSG_SUCC_COLOUR}m"; ;;
lalbornoz 340f4c
	esac;
lalbornoz 340f4c
	if [ $# -gt 1 ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
		printf "==> %s %s %s\033[0m\n" "$(date "${TIMESTAMP_FMT}")" "${1}" "$*";
lalbornoz 340f4c
	else
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
		printf "==> %s %s\033[0m\n" "$(date "${TIMESTAMP_FMT}")" "${1}";
lalbornoz 340f4c
	fi;
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
	unset _lvl;
lalbornoz 340f4c
};
lalbornoz 340f4c
lalbornoz 340f4c
parse_with_pkg_name() {
Lucio Andrés Illanes Albornoz (arab, vxp) 75a203
	PKG_NAME=${1}; shift;
lalbornoz 340f4c
	while [ $# -ge 0 ]; do
Lucio Andrés Illanes Albornoz (arab, vxp) 75a203
		if [ "x${PKG_NAME}" = "x${1}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 75a203
			_pkg_NAME=$(echo "${PKG_NAME}" | tr a-z A-Z);
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
			for _vname in							\
Lucio Andrés Illanes Albornoz (arab, vxp) ce7607
					build_type configure_args configure_extra_args	\
Lucio Andrés Illanes Albornoz (arab, vxp) 1d3841
					no_config_cache no_destdir no_libtool_midipix	\
Lucio Andrés Illanes Albornoz (arab, vxp) f9c386
					patches_extra_url prefix prefix_extra sha256sum	\
Lucio Andrés Illanes Albornoz (arab, vxp) 680d83
					url version					\
Lucio Andrés Illanes Albornoz (arab, vxp) 1d3841
					CC CFLAGS LDFLAGS; do
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
				_vNAME=$(echo "${_vname}" | tr a-z A-Z);
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
				if [ -n "${_vval:=$(eval echo \${PKG_${_pkg_NAME}_${_vNAME}})}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 96b309
					export PKG_${_vNAME}="${_vval}";
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
					if [ "x${_vname#[A-Z]}" != "x${_vname}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
						export ${_vname}="${_vval}";
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
					fi;
Lucio Andrés Illanes Albornoz (arab, vxp) 96b309
				else
Lucio Andrés Illanes Albornoz (arab, vxp) 96b309
					unset PKG_${_vNAME};
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
				fi; unset _vval;
Lucio Andrés Illanes Albornoz (arab, vxp) d30b8f
			done; unset _pkg_NAME _vname _vNAME;
Lucio Andrés Illanes Albornoz (arab, vxp) 96b309
			if [ -z "${PKG_URL}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 96b309
				return 1;
Lucio Andrés Illanes Albornoz (arab, vxp) 96b309
			else
Lucio Andrés Illanes Albornoz (arab, vxp) 96b309
				PKG_FNAME=${PKG_URL##*/};
Lucio Andrés Illanes Albornoz (arab, vxp) 96b309
				PKG_SUBDIR=${PKG_FNAME%%.tar*};
Lucio Andrés Illanes Albornoz (arab, vxp) 96b309
				return 0;
Lucio Andrés Illanes Albornoz (arab, vxp) 96b309
			fi;
Lucio Andrés Illanes Albornoz (arab, vxp) c49754
		fi; shift;
Lucio Andrés Illanes Albornoz (arab, vxp) c49754
	done; return 1;
lalbornoz 340f4c
};
lalbornoz 340f4c
lalbornoz 340f4c
rm_if_exists() {
lalbornoz 340f4c
	while [ $# -gt 1 ]; do [ "x${1%[a-z]}" = "x-" ] &&\
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
		eval _${1#-}flag=1; shift; done;
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
	_dir=${1};
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
	if [ -d ${1} ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
		rm -rf ${1} || return 1;
lalbornoz 340f4c
	fi;
lalbornoz 340f4c
	if [ ${_mflag:-0} -eq 1 ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
		unset _mflag; mkdir ${1} || return 2;
lalbornoz 340f4c
	fi;
lalbornoz 340f4c
	if [ ${_cflag:-0} -eq 1 ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
		unset _cflag; cd ${1} || return 3;
lalbornoz 340f4c
	fi;
lalbornoz 340f4c
};
lalbornoz 340f4c
lalbornoz 340f4c
set_build_dir() {
Lucio Andrés Illanes Albornoz (arab, vxp) 96b309
	BUILD_DIR=${1}-${2}-${TARGET};
lalbornoz 340f4c
};
lalbornoz 340f4c
lalbornoz 340f4c
set_env_vars() {
Lucio Andrés Illanes Albornoz (arab, vxp) 6e940c
	_val=${1}; shift;
lalbornoz 340f4c
	while [ $# -ge 1 ]; do
Lucio Andrés Illanes Albornoz (arab, vxp) 0dae87
		if [ -z "${_val}" ]; then
Lucio Andrés Illanes Albornoz (arab, vxp) 0dae87
			unset ${1};
Lucio Andrés Illanes Albornoz (arab, vxp) 0dae87
		else
Lucio Andrés Illanes Albornoz (arab, vxp) 0dae87
			export "${1}=${_val}";
Lucio Andrés Illanes Albornoz (arab, vxp) 0dae87
		fi; shift;
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
	done; unset _val;
lalbornoz 340f4c
};
lalbornoz 340f4c
lalbornoz 340f4c
split() {
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
	_IFS="${IFS}"; IFS="${1}"; set -- ${2};
Lucio Andrés Illanes Albornoz (arab, vxp) f5eeee
	IFS="${_IFS}"; echo "${*}"; unset _IFS;
lalbornoz 340f4c
};
lalbornoz 340f4c
lalbornoz 340f4c
# vim:filetype=sh