summaryrefslogtreecommitdiffhomepage
path: root/subr.pkg
diff options
context:
space:
mode:
authorLucía Andrea Illanes Albornoz <lucia@luciaillanes.de>2023-02-17 19:29:28 +0100
committerLucía Andrea Illanes Albornoz <lucia@luciaillanes.de>2023-02-17 19:29:28 +0100
commite9fa0774ed2e7e030a68f5b0ae51fe6dd69fe492 (patch)
tree37e46c2578bd8f4f435073db01abc514976da8a8 /subr.pkg
parent56495632fc8bf612766a9c431e37ff27a903e8c6 (diff)
downloadmidipix_build-e9fa0774ed2e7e030a68f5b0ae51fe6dd69fe492.tar.bz2
midipix_build-e9fa0774ed2e7e030a68f5b0ae51fe6dd69fe492.tar.xz
Make everything a bit faster.
0) Issues several prayers and sacrifices to Enki under threat of a terrible deluge sent down by Ellil 1) Convert fork-write/read exprs to be non-forking 2) Pass mostly everything by reference 3) Don't bother cleaning the variable namespace because Bourne shell is an abomination 4) Removes broken ./pkgtool.sh -s, --restart-at, --update-diff & ./build.sh --dump-{in,on-abort} 5) Cleanup
Diffstat (limited to 'subr.pkg')
-rw-r--r--subr.pkg/pkg_build.subr67
-rw-r--r--subr.pkg/pkg_build_clean.subr37
-rw-r--r--subr.pkg/pkg_clean.subr32
-rw-r--r--subr.pkg/pkg_configure.subr194
-rw-r--r--subr.pkg/pkg_configure_autotools.subr114
-rw-r--r--subr.pkg/pkg_configure_clean.subr21
-rw-r--r--subr.pkg/pkg_configure_patch.subr44
-rw-r--r--subr.pkg/pkg_configure_patch_pre.subr48
-rw-r--r--subr.pkg/pkg_fetch_clean.subr25
-rw-r--r--subr.pkg/pkg_fetch_download.subr43
-rw-r--r--subr.pkg/pkg_fetch_extract.subr48
-rw-r--r--subr.pkg/pkg_install.subr37
-rw-r--r--subr.pkg/pkg_install_clean.subr15
-rw-r--r--subr.pkg/pkg_install_files.subr133
-rw-r--r--subr.pkg/pkg_install_libs.subr94
-rw-r--r--subr.pkg/pkg_install_make.subr46
-rw-r--r--subr.pkg/pkg_install_rpm.subr66
-rw-r--r--subr.pkg/pkg_install_subdirs.subr26
18 files changed, 1090 insertions, 0 deletions
diff --git a/subr.pkg/pkg_build.subr b/subr.pkg/pkg_build.subr
new file mode 100644
index 00000000..8ea97368
--- /dev/null
+++ b/subr.pkg/pkg_build.subr
@@ -0,0 +1,67 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkg_build() {
+ local _pb_group_name="${1}" _pb_pkg_name="${2}" _pb_restart_at="${3}" \
+ _pb_libtool="" _pb_makeflags_verbosity="" _pb_no_autoconf="" \
+ _pb_rc=0 _pb_subdir="";
+ _pb_makeflags_verbosity="${PKG_MAKEFLAGS_VERBOSITY:-none}";
+ if [ "${_pb_makeflags_verbosity}" = "none" ]; then
+ _pb_makeflags_verbosity="";
+ fi;
+
+ case "${PKG_LIBTOOL:-}" in
+ "") _pb_libtool=""; ;;
+ none) _pb_libtool=""; ;;
+ *) _pb_libtool="${PKG_LIBTOOL}"; ;;
+ esac;
+
+ if [ ! -x "${PKG_CONFIGURE:-}" ]; then
+ _pb_no_autoconf=1;
+ fi;
+
+ for _pb_subdir in ${PKG_MAKE_SUBDIRS:-:}; do
+ if [ "${_pb_subdir}" = ":" ]; then
+ _pb_subdir="";
+ fi;
+
+ if [ "${#_pb_libtool}" -gt 0 ]; then
+ export MAKE="make LIBTOOL=${_pb_libtool}";
+ fi;
+
+ # N.B. We only specify CC= here if the current package does not use GNU
+ # autoconf as it often abuses it by appending -std={gnu99,...} to it
+ # instead of amending CFLAGS.
+ rtl_run_cmd_unsplit "${PKG_MAKE}" \
+ ${PKG_MAKEFLAGS_BUILD:-} \
+ ${PKG_MAKEFLAGS_BUILD_EXTRA:-} \
+ "AR=${PKG_AR}" "${_pb_no_autoconf:+CC=${PKG_CC}}" "RANLIB=${PKG_RANLIB}" \
+ "${PKG_CFLAGS_BUILD:+CFLAGS=${PKG_CFLAGS_BUILD}}" \
+ "${PKG_CFLAGS_BUILD_EXTRA:+CFLAGS+=${PKG_CFLAGS_BUILD_EXTRA}}" \
+ "${PKG_CPPFLAGS_BUILD:+CPPFLAGS=${PKG_CPPFLAGS_BUILD}}" \
+ "${PKG_CPPFLAGS_BUILD_EXTRA:+CPPFLAGS+=${PKG_CPPFLAGS_BUILD_EXTRA}}" \
+ "${PKG_CXXFLAGS_BUILD:+CXXFLAGS=${PKG_CXXFLAGS_BUILD}}" \
+ "${PKG_CXXFLAGS_BUILD_EXTRA:+CXXFLAGS+=${PKG_CXXFLAGS_BUILD_EXTRA}}" \
+ "${PKG_LDFLAGS_BUILD:+LDFLAGS=${PKG_LDFLAGS_BUILD}}" \
+ "${PKG_LDFLAGS_BUILD_EXTRA:+LDFLAGS+=${PKG_LDFLAGS_BUILD_EXTRA}}" \
+ "${PKG_PKG_CONFIG:+PKG_CONFIG=${PKG_PKG_CONFIG}}" \
+ "${PKG_PKG_CONFIG_LIBDIR:+PKG_CONFIG_LIBDIR=${PKG_PKG_CONFIG_LIBDIR}}" \
+ ${_pb_libtool:+"LIBTOOL=${_pb_libtool}"} \
+ ${_pb_makeflags_verbosity} \
+ ${_pb_subdir:+-C "${_pb_subdir}"};
+ _pb_rc="${?}";
+
+ if [ "${#_pb_libtool}" -gt 0 ]; then
+ unset MAKE;
+ fi;
+
+ if [ "${_pb_rc}" -ne 0 ]; then
+ break;
+ fi;
+ done;
+
+ return "${_pb_rc}";
+};
+
+# vim:filetype=sh
diff --git a/subr.pkg/pkg_build_clean.subr b/subr.pkg/pkg_build_clean.subr
new file mode 100644
index 00000000..bf41456b
--- /dev/null
+++ b/subr.pkg/pkg_build_clean.subr
@@ -0,0 +1,37 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkg_build_clean() {
+ local _pbc_group_name="${1}" _pbc_pkg_name="${2}" _pbc_restart_at="${3}" \
+ _pbc_libtool="" _pbc_makeflags_verbosity="${PKG_MAKEFLAGS_VERBOSITY:-}" \
+ _pbc_no_autoconf="" _pbc_rc=0 _pbc_subdir="";
+
+ if ex_pkg_state_test "${PKG_NAME}" "build" "${_pbc_restart_at}"; then
+ case "${PKG_LIBTOOL:-}" in
+ "") _pbc_libtool=""; ;;
+ none) _pbc_libtool=""; ;;
+ *) _pbc_libtool="${PKG_LIBTOOL}"; ;;
+ esac;
+ [ ! -x "${PKG_CONFIGURE:-}" ] && _pbc_no_autoconf=1;
+
+ for _pbc_subdir in ${PKG_MAKE_SUBDIRS:-:}; do
+ [ "${_pbc_subdir}" = ":" ] && _pbc_subdir="";
+ [ "${#_pbc_libtool}" -gt 0 ] && export MAKE="make LIBTOOL=${_pbc_libtool}";
+
+ rtl_run_cmd_unsplit "${PKG_MAKE}" \
+ ${PKG_MAKEFLAGS_BUILD:-} \
+ ${PKG_MAKEFLAGS_BUILD_EXTRA:-} \
+ ${_pbc_libtool:+"LIBTOOL=${_pbc_libtool}"} \
+ ${_pbc_makeflags_verbosity} \
+ ${_pbc_subdir:+-C "${_pbc_subdir}"} \
+ clean; _pbc_rc="${?}";
+
+ [ "${#_pbc_libtool}" -gt 0 ] && unset MAKE;
+ [ "${_pbc_rc}" -ne 0 ] && return 1;
+ done;
+ fi;
+ return 0;
+};
+
+# vim:filetype=sh
diff --git a/subr.pkg/pkg_clean.subr b/subr.pkg/pkg_clean.subr
new file mode 100644
index 00000000..0b65ec8e
--- /dev/null
+++ b/subr.pkg/pkg_clean.subr
@@ -0,0 +1,32 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkg_clean() {
+ local _pc_group_name="${1}" _pc_pkg_name="${2}" _pc_restart_at="${3}";
+
+ if [ "${PKG_NO_CLEAN:-0}" -eq 0 ]; then
+ if rtl_lmatch \$ARG_CLEAN_BUILDS "build" ","\
+ && [ "${PKG_NO_CLEAN_BUILD_DIR:-0}" -eq 0 ]; then
+ if ! rtl_fileop rm "${PKG_BUILD_DIR}"; then
+ return 1;
+ fi;
+ fi;
+ if rtl_lmatch \$ARG_CLEAN_BUILDS "dest" ","; then
+ if ! rtl_fileop rm "${PKG_DESTDIR}"; then
+ return 1;
+ elif [ -e "${PKG_DESTDIR_HOST}" ]\
+ && ! rtl_fileop rm "${PKG_DESTDIR_HOST}"; then
+ return 1;
+ fi;
+ fi;
+ if rtl_lmatch \$ARG_CLEAN_BUILDS "src" ","; then
+ if ! rtl_fileop rm "${PKG_BASE_DIR}/${PKG_SUBDIR}"; then
+ return 1;
+ fi;
+ fi;
+ fi;
+ return 0;
+};
+
+# vim:filetype=sh
diff --git a/subr.pkg/pkg_configure.subr b/subr.pkg/pkg_configure.subr
new file mode 100644
index 00000000..818ede10
--- /dev/null
+++ b/subr.pkg/pkg_configure.subr
@@ -0,0 +1,194 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkgp_configure_autotools() {
+ local _ppca_libtool="" _ppca_rc=0;
+
+ if ! [ -x "${PKG_CONFIGURE:-}" ]; then
+ _ppca_rc=2;
+ elif [ -d "${PKG_BASE_DIR}/${PKG_SUBDIR}/sofort" ]\
+ || [ "${PKG_CONFIGURE_TYPE:-}" = "sofort" ];
+ then
+ _ppca_rc=2;
+ else
+ case "${PKG_LIBTOOL:-}" in
+ "") _ppca_libtool=""; ;;
+ none) _ppca_libtool=""; ;;
+ *) _ppca_libtool="${PKG_LIBTOOL}"; ;;
+ esac;
+
+ rtl_export_vars \
+ PKG_CONFIG "${PKG_PKG_CONFIG:-}" \
+ PKG_CONFIG_LIBDIR "${PKG_PKG_CONFIG_LIBDIR:-}" \
+ PYTHON "${PKG_PYTHON:-}" \
+ ${_ppca_libtool:+MAKE} ${_ppca_libtool:+"make LIBTOOL=${_ppca_libtool}"};
+
+ AR="${PKG_AR}" \
+ CC="${PKG_CC}" \
+ RANLIB="${PKG_RANLIB}" \
+ CFLAGS="${PKG_CFLAGS_CONFIGURE:-}${PKG_CFLAGS_CONFIGURE_EXTRA:+ ${PKG_CFLAGS_CONFIGURE_EXTRA}}" \
+ CPPFLAGS="${PKG_CFLAGS_CONFIGURE:-}${PKG_CFLAGS_CONFIGURE_EXTRA:+ ${PKG_CFLAGS_CONFIGURE_EXTRA}}" \
+ CXXFLAGS="${PKG_CXXFLAGS_CONFIGURE:-}${PKG_CXXFLAGS_CONFIGURE_EXTRA:+ ${PKG_CXXFLAGS_CONFIGURE_EXTRA}}" \
+ LDFLAGS="${PKG_LDFLAGS_CONFIGURE:-}${PKG_LDFLAGS_CONFIGURE_EXTRA:+ ${PKG_LDFLAGS_CONFIGURE_EXTRA}}" \
+ "${PKG_CONFIGURE}" ${PKG_CONFIGURE_ARGS:-} ${PKG_CONFIGURE_ARGS_EXTRA:-} ${PKG_CONFIGURE_ARGS_EXTRA_DEBUG:-};
+ _ppca_rc=$((${?} ? 1 : ${_ppca_rc}));
+
+ rtl_export_vars -u \
+ PKG_CONFIG "${PKG_PKG_CONFIG:-}" \
+ PKG_CONFIG_LIBDIR "${PKG_PKG_CONFIG_LIBDIR:-}" \
+ PYTHON "${PKG_PYTHON:-}" \
+ ${_ppca_libtool:+MAKE} ${_ppca_libtool:+"make LIBTOOL=${_ppca_libtool}"};
+ fi;
+
+ return "${_ppca_rc}";
+};
+
+pkgp_configure_cmake() {
+ local _ppcc_cmake_args_auto"" _ppcc_build_type="" _ppcc_IFS0="${IFS:- }" _ppcc_rc=0 IFS;
+
+ if [ "${PKG_CMAKE_LISTFILE:+1}" != 1 ]\
+ || ! [ -e "${PKG_BASE_DIR}/${PKG_SUBDIR}/${PKG_CMAKE_LISTFILE}" ]; then
+ _ppcc_rc=2;
+ else
+ rtl_fileop rm config.cache || return 1;
+ rtl_export_vars \
+ PKG_CONFIG "${PKG_PKG_CONFIG:-}" \
+ PKG_CONFIG_LIBDIR "${PKG_PKG_CONFIG_LIBDIR:-}" \
+ PYTHON "${PKG_PYTHON:-}";
+
+ case "${BUILD_KIND}" in
+ debug) _ppcc_build_type="debug"; ;;
+ release|*) _ppcc_build_type="release"; ;;
+ esac;
+
+ _ppcc_cmake_args_auto="
+ -DCMAKE_AR=${PKG_AR}
+ -DCMAKE_BUILD_TYPE=${_ppcc_build_type}
+ -DCMAKE_C_COMPILER=${PKG_CC}
+ -DCMAKE_C_FLAGS=${PKG_CFLAGS_CONFIGURE:-}${PKG_CFLAGS_CONFIGURE_EXTRA:+ ${PKG_CFLAGS_CONFIGURE_EXTRA}}
+ -DCMAKE_CPP_FLAGS=${PKG_CPPFLAGS_CONFIGURE:-}${PKG_CPPFLAGS_CONFIGURE_EXTRA:+ ${PKG_CPPFLAGS_CONFIGURE_EXTRA}}
+ -DCMAKE_CXX_COMPILER=${PKG_CXX}
+ -DCMAKE_CXX_FLAGS=${PKG_CXXFLAGS_CONFIGURE:-}${PKG_CXXFLAGS_CONFIGURE_EXTRA:+ ${PKG_CXXFLAGS_CONFIGURE_EXTRA}}
+ -DCMAKE_EXE_LINKER_FLAGS=${PKG_LDFLAGS_CONFIGURE:-}${PKG_LDFLAGS_CONFIGURE_EXTRA:+ ${PKG_LDFLAGS_CONFIGURE_EXTRA}}
+ -DCMAKE_FIND_ROOT_PATH=${PKG_PREFIX}
+ -DCMAKE_INSTALL_PREFIX=
+ -DCMAKE_LINKER=$(which "ld")
+ -DCMAKE_MODULE_LINKER_FLAGS=${PKG_LDFLAGS_CONFIGURE:-}${PKG_LDFLAGS_CONFIGURE_EXTRA:+ ${PKG_LDFLAGS_CONFIGURE_EXTRA}}
+ -DCMAKE_RANLIB=${PKG_RANLIB}
+ -DCMAKE_SHARED_LINKER_FLAGS=${PKG_LDFLAGS_CONFIGURE:-}${PKG_LDFLAGS_CONFIGURE_EXTRA:+ ${PKG_LDFLAGS_CONFIGURE_EXTRA}}
+ -DPKG_CONFIG_EXECUTABLE=${PKG_PKG_CONFIG}" || return 1;
+
+ case "${PKG_BUILD_TYPE}" in
+ host|cross)
+ ;;
+
+ native)
+ _ppcc_cmake_args_auto="${_ppcc_cmake_args_auto:+${_ppcc_cmake_args_auto}}
+ -DCMAKE_LINKER=$(which "${PKG_TARGET}-ld")
+ -DCMAKE_SYSROOT=${PKG_PREFIX}
+ -DCMAKE_SYSTEM_NAME=Midipix" || return 1;
+
+ case "${ARCH}" in
+ nt32) _ppcc_cmake_args_auto="${_ppcc_cmake_args_auto:+${_ppcc_cmake_args_auto}}
+ -DCMAKE_SYSTEM_PROCESSOR=i686"; ;;
+ nt64) _ppcc_cmake_args_auto="${_ppcc_cmake_args_auto:+${_ppcc_cmake_args_auto}}
+ -DCMAKE_SYSTEM_PROCESSOR=x86_64"; ;;
+ esac; ;;
+
+ esac;
+
+ IFS="
+ "; "${PKG_CMAKE}" \
+ ${_ppcc_cmake_args_auto} \
+ ${PKG_CMAKE_ARGS:-} \
+ ${PKG_CMAKE_ARGS_EXTRA:-} \
+ "${PKG_BASE_DIR}/${PKG_SUBDIR}";
+ _ppcc_rc=$((${?} ? ${?} : ${_ppcc_rc})); IFS="${_ppcc_IFS0}";
+
+ rtl_export_vars -u \
+ PKG_CONFIG "${PKG_PKG_CONFIG:-}" \
+ PKG_CONFIG_LIBDIR "${PKG_PKG_CONFIG_LIBDIR:-}" \
+ PYTHON "${PKG_PYTHON:-}";
+ fi;
+
+ return "${_ppcc_rc}";
+};
+
+pkgp_configure_sofort() {
+ local _ppcs_rc=0 _ppcs_vname="" _ppcs_vnames="" _ppcs_vval="";
+
+ if ! [ -x "${PKG_CONFIGURE:-}" ]; then
+ _ppcs_rc=2;
+ elif ! [ -d "${PKG_BASE_DIR}/${PKG_SUBDIR}/sofort" ]\
+ && ! [ "${PKG_CONFIGURE_TYPE:-}" = "sofort" ]; then
+ _ppcs_rc=2;
+ else
+ for _ppcs_vname in AR CC CXX LD RANLIB; do
+ if eval [ '"${PKG_'"${_ppcs_vname}"':+1}"' = 1 ]; then
+ _ppcs_vnames="${_ppcs_vnames:+${_ppcs_vnames} }${_ppcs_vname}";
+ eval ${_ppcs_vname}='${PKG_'"${_ppcs_vname}"'}'; export ${_ppcs_vname};
+ fi;
+
+ if eval [ '"${PKG_SOFORT_NATIVE_'"${_ppcs_vname}"':+1}"' = 1 ]; then
+ _ppcs_vnames="${_ppcs_vnames:+${_ppcs_vnames} }NATIVE_${_ppcs_vname}";
+ eval NATIVE_${_ppcs_vname}='${PKG_SOFORT_NATIVE_'"${_ppcs_vname}"'}'; export NATIVE_${_ppcs_vname};
+ fi;
+ done;
+
+ for _ppcs_vname in CFLAGS CPPFLAGS CXXFLAGS LDFLAGS; do
+ if eval [ '"${PKG_'"${_ppcs_vname}"'_CONFIGURE:+1}"' = 1 ]; then
+ eval _ppcs_vval='${PKG_'"${_ppcs_vname}"'_CONFIGURE}';
+ if eval [ '"${PKG_'"${_ppcs_vname}"'_CONFIGURE_EXTRA:+1}"' = 1 ]; then
+ eval _ppcs_vval='${_ppcs_vval:+${_ppcs_vval} }${PKG_'"${_ppcs_vname}"'_CONFIGURE_EXTRA}';
+ fi;
+ _ppcs_vnames="${_ppcs_vnames:+${_ppcs_vnames} }${_ppcs_vname} ${_ppcs_vname}_SHARED ${_ppcs_vname}_STATIC";
+ eval ${_ppcs_vname}='${_ppcs_vval}'\; ${_ppcs_vname}_SHARED='${_ppcs_vval}'\; ${_ppcs_vname}_STATIC='${_ppcs_vval}';
+ export ${_ppcs_vname} ${_ppcs_vname}_SHARED ${_ppcs_vname}_STATIC;
+ fi;
+
+ if eval [ '"${PKG_SOFORT_NATIVE_'"${_ppcs_vname}"':+1}"' = 1 ]; then
+ eval _ppcs_vval='${PKG_SOFORT_NATIVE_'"${_ppcs_vname}"'}';
+ if eval [ '"${PKG_SOFORT_NATIVE_'"${_ppcs_vname}"'_EXTRA:+1}"' = 1 ]; then
+ eval _ppcs_vval='${_ppcs_vval:+${_ppcs_vval} }${PKG_SOFORT_NATIVE_'"${_ppcs_vname}"'_EXTRA}';
+ fi;
+ _ppcs_vnames="${_ppcs_vnames:+${_ppcs_vnames} }NATIVE_${_ppcs_vname}";
+ eval NATIVE_${_ppcs_vname}='${_ppcs_vval}'; export NATIVE_${_ppcs_vname};
+ fi;
+ done;
+
+ RANLIB="${PKG_RANLIB}" \
+ "${PKG_CONFIGURE}" \
+ ${PKG_CONFIGURE_ARGS:-} \
+ ${PKG_CONFIGURE_ARGS_EXTRA:-} \
+ ${PKG_CONFIGURE_ARGS_EXTRA_DEBUG:-};
+ _ppcs_rc=$((${?} ? 1 : ${_ppcs_rc}));
+
+ for _ppcs_vname in ${_ppcs_vnames}; do
+ unset "${_ppcs_vname}";
+ done;
+ fi;
+
+ return "${_ppcs_rc}";
+};
+
+pkg_configure() {
+ local _pc_group_name="${1}" _pc_pkg_name="${2}" _pc_restart_at="${3}" \
+ _pc_rc=0 _pc_type="";
+
+ for _pc_type in autotools sofort cmake; do
+ if [ "${PKG_CONFIGURE_TYPE:+1}" = 1 ]\
+ && [ "${PKG_CONFIGURE_TYPE}" != "${_pc_type}" ]; then
+ continue;
+ else
+ pkgp_configure_${_pc_type} "${@}"; _pc_rc="${?}";
+ case "${_pc_rc}" in
+ 0|1) return "${_pc_rc}"; ;;
+ 2) _pc_rc=0; continue; ;;
+ esac;
+ fi;
+ done;
+ return "${_pc_rc}";
+};
+
+# vim:filetype=sh textwidth=0
diff --git a/subr.pkg/pkg_configure_autotools.subr b/subr.pkg/pkg_configure_autotools.subr
new file mode 100644
index 00000000..c5753dc5
--- /dev/null
+++ b/subr.pkg/pkg_configure_autotools.subr
@@ -0,0 +1,114 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkg_configure_autotools() {
+ local _pca_group_name="${1}" _pca_pkg_name="${2}" _pca_restart_at="${3}" \
+ _pca_config_cache="" _pca_config_guest_fname="" _pca_fname="" \
+ _pca_subdir_tgt="";
+
+ if [ "${PKG_CONFIGURE_TYPE:+1}" = 1 ]\
+ && [ "${PKG_CONFIGURE_TYPE}" != "autotools" ]; then
+ return 0;
+ fi;
+
+ if [ "${PKG_AUTOCONF_CONFIG_GUESS:-midipix}" = "midipix" ]; then
+ _pca_config_guest_fname="config.guess";
+ else
+ _pca_config_guest_fname="";
+ fi;
+
+ if rtl_exists_any "${PKG_BASE_DIR}/${PKG_SUBDIR}" \
+ ${_pca_config_guest_fname:+"${_pca_config_guest_fname}"} \
+ "configure.ac" "configure.in" "configure";
+ then
+ rtl_export_vars PKG_CONFIG "${PKG_PKG_CONFIG:-}" PKG_CONFIG_LIBDIR "${PKG_PKG_CONFIG_LIBDIR:-}";
+
+ if [ "${PKG_FORCE_AUTORECONF:-0}" -eq 1 ]\
+ && ! (cd "${PKG_BASE_DIR}/${PKG_SUBDIR}" && autoreconf -fiv); then
+ return 1;
+ fi;
+
+ if [ -e "${PKG_BASE_DIR}/${PKG_SUBDIR}/configure.ac" ]\
+ && [ ! -e "${PKG_BASE_DIR}/${PKG_SUBDIR}/configure" ]; then
+ for _pca_fname in bootstrap bootstrap.sh autogen.sh; do
+ if [ -e "${PKG_BASE_DIR}/${PKG_SUBDIR}/${_pca_fname}" ]; then
+ for _pca_subdir_tgt in \
+ "${PKG_BASE_DIR}/${PKG_SUBDIR}/build-aux" \
+ "${PKG_BASE_DIR}/${PKG_SUBDIR}";
+ do if [ -e "${_pca_subdir_tgt}" ]; then
+ if ! rtl_fileop install -m 0700 \
+ "${MIDIPIX_BUILD_PWD}/etc/config.sub" \
+ "${_pca_subdir_tgt}/config.sub"; then
+ return 1;
+ fi;
+
+ if [ "${PKG_AUTOCONF_CONFIG_GUESS:-midipix}" = "midipix" ]; then
+ if ! rtl_fileop install -m 0700 \
+ "${MIDIPIX_BUILD_PWD}/etc/config.guess"\
+ "${_pca_subdir_tgt}/config.guess"; then
+ return 1;
+ else
+ break;
+ fi;
+ fi;
+ fi;
+ done;
+
+ if ! (rtl_fileop cd "${PKG_BASE_DIR}/${PKG_SUBDIR}" && \
+ /bin/sh "${_pca_fname}"); then
+ return 1;
+ else
+ break;
+ fi;
+ fi;
+ done;
+
+ if ! (rtl_fileop cd "${PKG_BASE_DIR}/${PKG_SUBDIR}" && autoconf); then
+ return 1;
+ fi;
+ fi;
+
+ for _pca_fname in $(find "${PKG_BASE_DIR}/${PKG_SUBDIR}" -name config.sub); do
+ if ! rtl_fileop mv "${_pca_fname}" "${_pca_fname}.orig"\
+ || ! rtl_fileop install -m 0700 "${MIDIPIX_BUILD_PWD}/etc/config.sub" "${_pca_fname}"; then
+ return 1;
+ fi;
+ done;
+
+ if [ "${PKG_AUTOCONF_CONFIG_GUESS:-midipix}" = "midipix" ]; then
+ for _pca_fname in $(find "${PKG_BASE_DIR}/${PKG_SUBDIR}" -name config.guess); do
+ if ! rtl_fileop mv "${_pca_fname}" "${_pca_fname}.orig"\
+ || ! rtl_fileop install -m 0700 "${MIDIPIX_BUILD_PWD}/etc/config.guess" "${_pca_fname}"; then
+ return 1;
+ fi;
+ done;
+ fi;
+
+ if [ "${PKG_BUILD_TYPE}" != host ]; then
+ if ! rtl_fileop touch "${PKG_BUILD_DIR}/config.cache"; then
+ return 1;
+ else
+ for _pca_config_cache in \
+ "${PKG_CONFIG_CACHE:-}" \
+ "${PKG_CONFIG_CACHE_LOCAL:-}" \
+ "${PKG_CONFIG_CACHE_EXTRA:-}";
+ do if [ "${_pca_config_cache:+1}" = 1 ]\
+ && ! printf "%s\n" "${_pca_config_cache}" |\
+ tr " " "\n" >> "${PKG_BUILD_DIR}/config.cache"; then
+ return 1;
+ fi;
+ done;
+
+ if ! sed -i"" "s,%PREFIX%,${PKG_PREFIX},g" "${PKG_BUILD_DIR}/config.cache"; then
+ return 1;
+ fi;
+ fi;
+ fi;
+ rtl_export_vars -u PKG_CONFIG "${PKG_PKG_CONFIG:-}" PKG_CONFIG_LIBDIR "${PKG_PKG_CONFIG_LIBDIR:-}";
+ fi;
+
+ return 0;
+};
+
+# vim:filetype=sh
diff --git a/subr.pkg/pkg_configure_clean.subr b/subr.pkg/pkg_configure_clean.subr
new file mode 100644
index 00000000..dd24efd6
--- /dev/null
+++ b/subr.pkg/pkg_configure_clean.subr
@@ -0,0 +1,21 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkg_configure_clean() {
+ local _pcc_group_name="${1}" _pcc_pkg_name="${2}" _pcc_restart_at="${3}";
+
+ if ex_pkg_state_test \
+ "${_pcc_pkg_name}" \
+ "configure_patch_pre,configure_autotools,configure_patch,configure" \
+ "${_pcc_restart_at}"\
+ && [ "${PKG_BUILD_DIR:-}" != "${PKG_SUBDIR:-}" ];
+ then
+ rtl_fileop rm "${PKG_BUILD_DIR}" || return 1;
+ rtl_fileop mkdir "${PKG_BUILD_DIR}" || return 1;
+ rtl_fileop cd "${PKG_BUILD_DIR}" || return 1;
+ fi;
+ return 0;
+};
+
+# vim:filetype=sh
diff --git a/subr.pkg/pkg_configure_patch.subr b/subr.pkg/pkg_configure_patch.subr
new file mode 100644
index 00000000..ba78d46e
--- /dev/null
+++ b/subr.pkg/pkg_configure_patch.subr
@@ -0,0 +1,44 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkg_configure_patch() {
+ local _pcp_group_name="${1}" _pcp_pkg_name="${2}" _pcp_restart_at="${3}" \
+ _pcp_patch_cwd="" _pcp_patch_dir="${MIDIPIX_BUILD_PWD}/patches" \
+ _pcp_patch_fname="" _pcp_patches_done="" _pcp_pkg_name_full="" \
+ _pcp_strip_count=0;
+ _pcp_pkg_name_full="${_pcp_pkg_name}${PKG_VERSION:+-${PKG_VERSION}}";
+
+ if [ "${PKG_FNAME:+1}" = 1 ]\
+ && [ "${PKG_URLS_GIT:+1}" = 1 ];
+ then
+ _pcp_patch_cwd="${PKG_BASE_DIR}";
+ _pcp_strip_count=0;
+ else
+ _pcp_patch_cwd="${PKG_BASE_DIR}/${PKG_SUBDIR}";
+ _pcp_strip_count=1;
+ fi;
+
+ set +o noglob;
+ for _pcp_patch_fname in \
+ "${_pcp_patch_dir}/${PKG_NAME}/"*.patch \
+ "${_pcp_patch_dir}/${_pcp_pkg_name_full}.local.patch" \
+ "${_pcp_patch_dir}/${_pcp_pkg_name_full}.local@${BUILD_HNAME}.patch" \
+ ${PKG_PATCHES_EXTRA:-};
+ do
+ if [ -r "${_pcp_patch_fname}" ]\
+ && ! rtl_lmatch \$_pcp_patches_done "${_pcp_patch_fname}";
+ then
+ if ! patch -b -d "${_pcp_patch_cwd}" "-p${_pcp_strip_count}" < "${_pcp_patch_fname}"; then
+ set -o noglob; return 1;
+ else
+ rtl_lconcat \$_pcp_patches_done "${_pcp_patch_fname}";
+ fi;
+ fi;
+ done;
+ set -o noglob;
+
+ return 0;
+};
+
+# vim:filetype=sh
diff --git a/subr.pkg/pkg_configure_patch_pre.subr b/subr.pkg/pkg_configure_patch_pre.subr
new file mode 100644
index 00000000..54352328
--- /dev/null
+++ b/subr.pkg/pkg_configure_patch_pre.subr
@@ -0,0 +1,48 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkgp_configure_patch_pre() {
+ local _ppcpp_patch_path="";
+
+ for _ppcpp_patch_path in \
+ "${MIDIPIX_BUILD_PWD}/patches/${PKG_NAME}${PKG_VERSION:+-${PKG_VERSION}}_pre.local.patch" \
+ "${MIDIPIX_BUILD_PWD}/patches/${PKG_NAME}${PKG_VERSION:+-${PKG_VERSION}}_pre.local@${BUILD_HNAME}.patch";
+ do
+ if [ -r "${_ppcpp_patch_path}" ]\
+ && ! patch -b -d "${PKG_BASE_DIR}/${PKG_SUBDIR}" -p1 < "${_ppcpp_patch_path}";
+ then
+ return 1;
+ fi;
+ done;
+ return 0;
+};
+
+pkgp_configure_patch_pre_chainport() {
+ local _ppcppc_patch_dname="" _ppcppc_patch_fname="" _ppcppc_oldpwd="";
+ _ppcppc_patch_dname="${PKG_BASE_DIR}/${PKG_SUBDIR}/patches/${PKG_NAME%%_ppcppc_*}";
+
+ if [ "${PKG_VERSION:+1}" = 1 ]; then
+ _ppcppc_patch_fname="${BUILD_WORKDIR}/chainport/patches/${PKG_NAME%%_ppcppc_*}/${PKG_NAME%%_ppcppc_*}-${PKG_VERSION}.midipix.patch";
+ fi;
+ if [ -e "${_ppcppc_patch_fname}" ]; then
+ if ! rtl_fileop mkdir "${_ppcppc_patch_dname}"\
+ || ! rtl_fileop cp "${_ppcppc_patch_fname}" "${_ppcppc_patch_dname}"; then
+ return 1;
+ fi;
+ fi;
+ return 0;
+};
+
+pkg_configure_patch_pre() {
+ local _pcpp_group_name="${1}" _pcpp_pkg_name="${2}" _pcpp_restart_at="${3}";
+
+ if ! pkgp_configure_patch_pre_chainport\
+ || ! pkgp_configure_patch_pre;
+ then
+ return 1;
+ fi;
+ return 0;
+};
+
+# vim:filetype=sh
diff --git a/subr.pkg/pkg_fetch_clean.subr b/subr.pkg/pkg_fetch_clean.subr
new file mode 100644
index 00000000..6202b18b
--- /dev/null
+++ b/subr.pkg/pkg_fetch_clean.subr
@@ -0,0 +1,25 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkg_fetch_clean() {
+ local _pfc_group_name="${1}" _pfc_pkg_name="${2}" _pfc_restart_at="${3}" \
+ _pfc_dname="";
+
+ if [ "${PKG_URLS_GIT:+1}" = 1 ]; then
+ if [ "${PKG_SUBDIR:+1}" = 1 ]\
+ && [ "${PKG_SUBDIR}" != "${PKG_URLS_GIT%%=*}" ]; then
+ rtl_fileop rm "${PKG_SUBDIR}";
+ fi;
+
+ for _pfc_dname in ${PKG_URLS_GIT}; do
+ _pfc_dname="${_pfc_dname%%=*}"; rtl_fileop rm "${_pfc_dname}";
+ done;
+ elif [ "${PKG_SUBDIR:+1}" = 1 ]; then
+ rtl_fileop rm "${PKG_SUBDIR}";
+ fi;
+
+ return 0;
+};
+
+# vim:filetype=sh
diff --git a/subr.pkg/pkg_fetch_download.subr b/subr.pkg/pkg_fetch_download.subr
new file mode 100644
index 00000000..fe7fff85
--- /dev/null
+++ b/subr.pkg/pkg_fetch_download.subr
@@ -0,0 +1,43 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkg_fetch_download() {
+ local _pfd_group_name="${1}" _pfd_pkg_name="${2}" _pfd_restart_at="${3}";
+
+ if [ "${ARG_FETCH_FORCE:-}" != "offline" ]; then
+ if [ "${PKG_URL:+1}" = 1 ]; then
+ if ! rtl_fetch_dlcache_subdir \
+ "${BUILD_DLCACHEDIR}" "${PKG_NAME}" \
+ "${PKG_INHERIT_FROM:-}";
+ then
+ return 1;
+ elif ! rtl_fetch_url_wget \
+ "${PKG_URL}" "${PKG_SHA256SUM}" "${BUILD_DLCACHEDIR}/${PKG_NAME}"\
+ "${PKG_FNAME}" "${PKG_NAME}" "${PKG_MIRRORS:-}"; then
+ return 1;
+ fi;
+ fi;
+
+ if [ "${PKG_URLS_GIT:+1}" = 1 ]; then
+ if ! rtl_fetch_dlcache_subdir \
+ "${BUILD_DLCACHEDIR}" "${PKG_NAME}" \
+ "${PKG_INHERIT_FROM:-}";
+ then
+ return 1;
+ elif ! rtl_fetch_urls_git \
+ "${BUILD_DLCACHEDIR}/${PKG_NAME}" "${DEFAULT_GIT_ARGS}" "${PKG_BASE_DIR}"\
+ "${PKG_NAME}" "${PKG_MIRRORS_GIT:-}" ${PKG_URLS_GIT}; then
+ return 1;
+ fi;
+ fi;
+
+ rtl_fetch_clean_dlcache \
+ "${BUILD_DLCACHEDIR}" "${PKG_NAME}" \
+ "${PKG_FNAME:-}" "${PKG_URLS_GIT:-}";
+ fi;
+
+ return 0;
+};
+
+# vim:filetype=sh
diff --git a/subr.pkg/pkg_fetch_extract.subr b/subr.pkg/pkg_fetch_extract.subr
new file mode 100644
index 00000000..ed4bad78
--- /dev/null
+++ b/subr.pkg/pkg_fetch_extract.subr
@@ -0,0 +1,48 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkgp_fetch_extract_type() {
+ local _ppfet_fname="${1}" _ppfet_rtype="${2#\$}";
+
+ if [ "${1##*.tar.}" != "${1}" ]; then
+ eval ${_ppfet_rtype}='${1##*.tar.}';
+ elif [ "${1##*.t}" != "${1}" ]; then
+ eval ${_ppfet_rtype}='${1##*.t}';
+ fi;
+ return 0;
+};
+
+pkg_fetch_extract() {
+ local _pfe_group_name="${1}" _pfe_pkg_name="${2}" _pfe_restart_at="${3}" \
+ _pfe_type="";
+
+ if [ "${PKG_URL:+1}" = 1 ]; then
+ _pfe_oldpwd="${PWD}";
+
+ if ! rtl_fileop cd "${PKG_BASE_DIR}"\
+ || ! rtl_fileop rm "${PKG_BASE_DIR}/${PKG_SUBDIR}"; then
+ rtl_fileop cd "${_pfe_oldpwd}"; return 1;
+ else
+ pkgp_fetch_extract_type "${PKG_NAME}" \$_pfe_type;
+
+ case "${_pfe_type}" in
+ bz2) bunzip2 -d < "${BUILD_DLCACHEDIR}/${PKG_NAME}/${PKG_FNAME}" | tar -C "${PKG_BASE_DIR}" -xf -; ;;
+ gz) gunzip -d < "${BUILD_DLCACHEDIR}/${PKG_NAME}/${PKG_FNAME}" | tar -C "${PKG_BASE_DIR}" -xf -; ;;
+ lz) lzip -d < "${BUILD_DLCACHEDIR}/${PKG_NAME}/${PKG_FNAME}" | tar -C "${PKG_BASE_DIR}" -xf -; ;;
+ xz) xz -d < "${BUILD_DLCACHEDIR}/${PKG_NAME}/${PKG_FNAME}" | tar -C "${PKG_BASE_DIR}" -xf -; ;;
+ *) tar -C "${PKG_BASE_DIR}" -xf "${BUILD_DLCACHEDIR}/${PKG_NAME}/${PKG_FNAME}"; ;;
+ esac;
+
+ if [ "${?}" -ne 0 ]; then
+ rtl_fileop cd "${_pfe_oldpwd}"; return 1;
+ else
+ rtl_fileop cd "${_pfe_oldpwd}";
+ fi;
+ fi;
+ fi;
+
+ return 0;
+};
+
+# vim:filetype=sh
diff --git a/subr.pkg/pkg_install.subr b/subr.pkg/pkg_install.subr
new file mode 100644
index 00000000..6fe420df
--- /dev/null
+++ b/subr.pkg/pkg_install.subr
@@ -0,0 +1,37 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkg_install() {
+ local _group_name="${1}" _pkg_name="${2}" _restart_at="${3}" \
+ _destdir="" _destdir_prefix="" _pkglist_name="";
+
+ if ! rtl_fileop mkdir "${PKG_PREFIX}"; then
+ return 1;
+ else for _destdir in "${PKG_DESTDIR}:${PKG_PREFIX}" "${PKG_DESTDIR_HOST}:${PREFIX}"; do
+ rtl_lassign "_destdir _destdir_prefix" ":" "${_destdir}";
+ if [ -e "${_destdir}" ]; then
+ (set +o errexit -o noglob; rtl_flock_acquire 4 || exit "${?}";
+ trap "rm -f \"${BUILD_WORKDIR}/install.lock\"" EXIT;
+ if ! tar -C "${_destdir}" -cpf - . | tar -C "${_destdir_prefix}" --overwrite -xpf -; then
+ exit 1;
+ fi) 4<>"${BUILD_WORKDIR}/install.lock";
+ fi;
+ done;
+ if [ "${?}" -ne 0 ]; then
+ return 1;
+ elif [ "${PKG_PKGLIST_DISABLE:-0}" -eq 0 ]; then
+ if [ ! -e "${PREFIX}/pkglist.${PKG_BUILD_TYPE}" ]\
+ && ! touch "${PREFIX}/pkglist.${PKG_BUILD_TYPE}"; then
+ return 1;
+ else
+ _pkglist_name="${PKG_BASE_DIR##*/}"; _pkglist_name="${_pkglist_name%%-*}";
+ if ! printf "%s\n" "${_pkglist_name}" >> "${PREFIX}/pkglist.${PKG_BUILD_TYPE}"; then
+ return 1;
+ fi;
+ fi;
+ fi;
+ fi;
+};
+
+# vim:filetype=sh
diff --git a/subr.pkg/pkg_install_clean.subr b/subr.pkg/pkg_install_clean.subr
new file mode 100644
index 00000000..bb8df2c2
--- /dev/null
+++ b/subr.pkg/pkg_install_clean.subr
@@ -0,0 +1,15 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkg_install_clean() {
+ local _pic_group_name="${1}" _pic_pkg_name="${2}" _pic_restart_at="${3}";
+
+ if [ "${PKG_DESTDIR:+1}" = 1 ]; then
+ rtl_fileop rm "${PKG_DESTDIR}" || return 1;
+ rtl_fileop mkdir "${PKG_DESTDIR}" || return 1;
+ fi;
+ return 0;
+};
+
+# vim:filetype=sh
diff --git a/subr.pkg/pkg_install_files.subr b/subr.pkg/pkg_install_files.subr
new file mode 100644
index 00000000..364bd363
--- /dev/null
+++ b/subr.pkg/pkg_install_files.subr
@@ -0,0 +1,133 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkgp_install_files() {
+ if [ "${PKG_INSTALL_FILES:+1}" = 1 ]; then
+ if ! rtl_install -v "${PKG_DESTDIR}" ${PKG_INSTALL_FILES}; then
+ return 1;
+ fi;
+ fi;
+ return 0;
+};
+
+pkgp_install_files_v2() {
+ local _ppifv2_status="" _ppifv2_vflag="";
+
+ if [ "${PKG_INSTALL_FILES_V2:+1}" = 1 ]; then
+ if rtl_lmatch \$ARG_VERBOSE_TAGS "install" ","; then
+ _ppifv2_vflag="-v";
+ fi;
+ if ! rtl_install_v2 \
+ \$_ppifv2_status \
+ -p "_builddir=${PKG_BUILD_DIR}" \
+ -p "_destdir=${PKG_BASE_DIR}/${PKG_DESTDIR}" \
+ -p "_destdir_host=${PKG_BASE_DIR}/${PKG_DESTDIR_HOST}" \
+ -p "_files=${MIDIPIX_BUILD_PWD}/files/${PKG_NAME}" \
+ -p "_name=${PKG_NAME}" \
+ -p "_prefix=${PKG_PREFIX}" \
+ -p "_prefix_host=${PREFIX}" \
+ -p "_prefix_native=${PREFIX_NATIVE}" \
+ -p "_subdir=${PKG_BASE_DIR}/${PKG_SUBDIR}" \
+ -p "_target=${PKG_TARGET}" \
+ -p "_version=${PKG_VERSION:-}" \
+ -p "_workdir=${BUILD_WORKDIR}" \
+ ${_ppifv2_vflag} -- "${PKG_DESTDIR}" \
+ "${PKG_INSTALL_FILES_V2}";
+ then
+ return 1;
+ fi;
+ fi;
+};
+
+pkgp_install_files_perms() {
+ local _ppifp_destdir="" _ppifp_fname="" IFS;
+
+ for _ppifp_destdir in "${PKG_DESTDIR}" "${PKG_DESTDIR_HOST}"; do
+ if [ -e "${_ppifp_destdir}" ]; then
+ rtl_set_IFS_nl;
+
+ for _ppifp_fname in $(find "${_ppifp_destdir}" -type d); do
+ if ! rtl_fileop chmod 0755 "${_ppifp_fname}"; then
+ return 1;
+ fi;
+ done;
+
+ for _ppifp_fname in $(find "${_ppifp_destdir}" \( -not -perm /0111 \) -type f); do
+ if ! rtl_fileop chmod 0644 "${_ppifp_fname}"; then
+ return 1;
+ fi;
+ done;
+
+ for _ppifp_fname in $(find "${_ppifp_destdir}" -perm /0111 -type f); do
+ if ! rtl_fileop chmod 0755 "${_ppifp_fname}"; then
+ return 1;
+ fi;
+ done;
+ fi;
+ done;
+ return 0;
+};
+
+pkgp_install_files_pkgconfig() {
+ local _ppifp2_pc_path="";
+
+ for _ppifp2_pc_path in $(find "${PKG_DESTDIR}" -name \*.pc); do
+ if [ -n "$(sed -ne '/^libdir=[^$]*$/p' "${_ppifp2_pc_path}")" ] \
+ && ! sed -i"" -e '/^libdir=[^$]*$/s/^libdir=\(.*\)$/libdir=${exec_prefix}\1/' \
+ -e '/^exec_prefix=$/s/^.*$/exec_prefix=${prefix}/' \
+ "${_ppifp2_pc_path}"; then
+ return 1;
+ fi;
+
+ if [ -n "$(sed -ne '/^includedir=[^$]*$/p' "${_ppifp2_pc_path}")" ] \
+ && ! sed -i"" -e '/^includedir=[^$]*$/s/^includedir=\(.*\)$/includedir=${prefix}\1/' \
+ "${_ppifp2_pc_path}"; then
+ return 1;
+ fi;
+ done;
+};
+
+pkgp_install_files_strip() {
+ local _ppifs_bin_path="" _ppifs_stripfl=0 _ppifs_tree_root="${PKG_DESTDIR}";
+
+ if [ -e "${_ppifs_tree_root}" ]; then
+ if rtl_match "${PKG_NAME}" "*_ppifs_minipix"; then
+ : $((_ppifs_stripfl=(${ARG_DEBUG_MINIPIX:-0} ? 0 : 1)));
+ elif [ "${BUILD_KIND}" = release ]\
+ && [ "${PKG_BUILD_TYPE}" = native ];
+ then
+ _ppifs_stripfl=1;
+ else
+ _ppifs_stripfl=0;
+ fi;
+
+ if [ "${_ppifs_stripfl:-0}" -eq 1 ]; then
+ for _ppifs_bin_path in $(find "${_ppifs_tree_root}" -perm /a=x -type f); do
+ if objdump -sj .debug_frame -j .debug_info "${_ppifs_bin_path}" >/dev/null 2>&1; then
+ rtl_log_msg "pkg_strip" "${MSG_pkg_strip}" "${_ppifs_bin_path}";
+ if ! "${PKG_TARGET}-strip" "${_ppifs_bin_path}"; then
+ return 1;
+ fi;
+ fi;
+ done;
+ fi;
+ fi;
+ return 0;
+};
+
+pkg_install_files() {
+ local _pif_group_name="${1}" _pif_pkg_name="${2}" _pif_restart_at="${3}";
+
+ if ! pkgp_install_files\
+ || ! pkgp_install_files_v2\
+ || ! pkgp_install_files_perms\
+ || ! pkgp_install_files_pkgconfig\
+ || ! pkgp_install_files_strip;
+ then
+ return 1;
+ fi;
+ return 0;
+};
+
+# vim:filetype=sh
diff --git a/subr.pkg/pkg_install_libs.subr b/subr.pkg/pkg_install_libs.subr
new file mode 100644
index 00000000..e81f3a11
--- /dev/null
+++ b/subr.pkg/pkg_install_libs.subr
@@ -0,0 +1,94 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkgp_install_libs_purge_la() {
+ local _ppilpl_la_path="";
+
+ for _ppilpl_la_path in $(find "${PKG_DESTDIR}" -type f -name \*.la); do
+ if ! rtl_fileop rm "${_ppilpl_la_path}"; then
+ return 1;
+ fi;
+ done;
+ return 0;
+};
+
+pkgp_install_libs_shared_link() {
+ local _ppilsl_lib_name="${1}" _ppilsl_so_dir="${2}" _ppilsl_so_path="${3}" \
+ _ppilsl_lib_link_path="${3%.so*}.lib.a" _ppilsl_fname="" _ppilsl_lib_link_tgt="";
+
+ if _ppilsl_lib_link_tgt="$(find "${_ppilsl_so_dir}" -name "${_ppilsl_lib_name%%.*}.*.lib.a" | sort | tail -1)"\
+ && [ "${_ppilsl_lib_link_tgt:+1}" = 1 ]\
+ && [ "${_ppilsl_lib_link_tgt}" != "${_ppilsl_lib_link_path}" ];
+ then
+ rtl_basename2 \$_ppilsl_lib_link_tgt \$_ppilsl_fname;
+
+ if ! rtl_fileop rm "${_ppilsl_lib_link_path}"\
+ || ! rtl_fileop ln_symbolic "${_ppilsl_fname}" "${_ppilsl_lib_link_path}"; then
+ return 1;
+ fi;
+ fi;
+ return 0;
+};
+
+pkgp_install_libs_shared() {
+ local _ppils_head="" _ppils_lib_dst_path="" _ppils_lib_name="" \
+ _ppils_lib_src_path="" _ppils_so_dst_dir="" _ppils_so_src_path="";
+
+ if [ "${PKG_BUILD_TYPE}" != "host" ]; then
+ for _ppils_so_src_path in \
+ $(find "${PKG_DESTDIR}" \
+ \( -name "*.so" -or -name "*.so.*" \) -print);
+ do
+ if [ "$(readlink -f "${_ppils_so_src_path}")" != "/dev/null" ]\
+ && rtl_head "[0-9.]" "${_ppils_so_src_path##*.so}" \$_ppils_head\
+ && [ "${_ppils_head:+1}" != 1 ]; then
+ case "${_ppils_so_src_path}" in
+ *.so) _ppils_lib_src_path="${_ppils_so_src_path%%.so}.lib.a"; ;;
+ *.so.*) _ppils_lib_src_path="${_ppils_so_src_path%%.so.*}.${_ppils_so_src_path##*.so.}.lib.a"; ;;
+ esac;
+
+ _ppils_so_dst_dir="${_ppils_so_src_path%/*}";
+ rtl_basename2 \$_ppils_lib_src_path \$_ppils_lib_name;
+ _ppils_lib_dst_path="${_ppils_so_dst_dir}/${_ppils_lib_name}";
+
+ if [ ! -L "${_ppils_lib_src_path}" ]\
+ && [ ! -e "${_ppils_lib_dst_path}" ]; then
+ if ! (rtl_basename2 \$_ppils_so_src_path \$_ppils_fname; \
+ rtl_basename2 \$_ppils_lib_dst_path \$_ppils_fname_dst; \
+ rtl_dirname2 \$_ppils_so_src_path \$_ppils_dname; \
+ rtl_fileop cd "${_ppils_dname}" && \
+ perk -e "${_ppils_fname}" |\
+ "${PKG_TARGET}-mdso" \
+ -i "${_ppils_fname_dst}" \
+ -n "${_ppils_fname}" -);
+ then
+ return 1;
+ fi;
+ fi;
+
+ if ! pkgp_install_libs_shared_link \
+ "${_ppils_lib_name}" "${_ppils_so_dst_dir}" \
+ "${_ppils_so_src_path}";
+ then
+ return 1;
+ fi;
+ fi;
+ done;
+ fi;
+
+ return 0;
+};
+
+pkg_install_libs() {
+ local _pil_group_name="${1}" _pil_pkg_name="${2}" _pil_restart_at="${3}";
+
+ if ! pkgp_install_libs_purge_la\
+ || ! pkgp_install_libs_shared;
+ then
+ return 1;
+ fi;
+ return 0;
+};
+
+# vim:filetype=sh
diff --git a/subr.pkg/pkg_install_make.subr b/subr.pkg/pkg_install_make.subr
new file mode 100644
index 00000000..a2291218
--- /dev/null
+++ b/subr.pkg/pkg_install_make.subr
@@ -0,0 +1,46 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkg_install_make() {
+ local _pim_group_name="${1}" _pim_pkg_name="${2}" _pim_restart_at="${3}"
+ _pim_libtool="" _pim_rc=0 _pim_subdir="";
+
+ case "${PKG_LIBTOOL:-}" in
+ "") _pim_libtool=""; ;;
+ none) _pim_libtool=""; ;;
+ *) _pim_libtool="${PKG_LIBTOOL}"; ;;
+ esac;
+
+ for _pim_subdir in ${PKG_MAKE_SUBDIRS:-:}; do
+ if [ "${_pim_subdir}" = ":" ]; then
+ _pim_subdir="";
+ fi;
+
+ if [ "${#_pim_libtool}" -gt 0 ]; then
+ export MAKE="make LIBTOOL=${_pim_libtool}";
+ fi;
+
+ rtl_run_cmd_unsplit "${PKG_MAKE}" \
+ ${PKG_MAKEFLAGS_INSTALL:-} \
+ ${PKG_MAKEFLAGS_INSTALL_EXTRA:-} \
+ AR="${PKG_AR}" CC="${PKG_CC}" RANLIB="${PKG_RANLIB}" \
+ "${PKG_RANLIB_INSTALL:+RANLIB=${PKG_RANLIB_INSTALL}}" \
+ ${_pim_libtool:+"LIBTOOL=${_pim_libtool}"} \
+ "${PKG_MAKE_INSTALL_VNAME:-DESTDIR}=${PKG_DESTDIR}/" \
+ ${PKG_INSTALL_TARGET:-install} \
+ ${_pim_subdir:+-C "${_pim_subdir}"}; _pim_rc="${?}";
+
+ if [ "${#_pim_libtool}" -gt 0 ]; then
+ unset MAKE;
+ fi;
+
+ if [ "${_pim_rc}" -ne 0 ]; then
+ return 1;
+ fi;
+ done;
+
+ return 0;
+};
+
+# vim:filetype=sh
diff --git a/subr.pkg/pkg_install_rpm.subr b/subr.pkg/pkg_install_rpm.subr
new file mode 100644
index 00000000..11cdfd85
--- /dev/null
+++ b/subr.pkg/pkg_install_rpm.subr
@@ -0,0 +1,66 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkg_install_rpm() {
+ local _pir_group_name="${1}" _pir_pkg_name="${2}" _pir_restart_at="${3}" \
+ _pir_pkg_url="" _pir_pkg_version_full="" _pir_pkg_version_rpm="" \
+ _pir_rc=0;
+
+ if rtl_lmatch \$ARG_DIST "rpm" ","\
+ && [ "${PKG_RPM_DISABLE:-0}" -eq 0 ]\
+ && command which rpmbuild >/dev/null 2>&1;
+ then
+ if [ "${PKG_URL:+1}" = 1 ]; then
+ _pir_pkg_url="${PKG_URL%% *}"; _pir_pkg_version_full="${PKG_VERSION}"; _pir_pkg_version_rpm="${PKG_VERSION%%-*}";
+ elif [ "${PKG_URLS_GIT:+1}" = 1 ]; then
+ _pir_pkg_version_rpm="$(cd "${PKG_BASE_DIR}/${PKG_SUBDIR}" && git rev-parse HEAD)";
+ _pir_pkg_version_full="${_pir_pkg_version_rpm} ($(cd "${PKG_BASE_DIR}/${PKG_SUBDIR}" && git rev-parse --abbrev-ref HEAD))";
+ _pir_pkg_url="${PKG_URLS_GIT%% *}"; _pir_pkg_url="${_pir_pkg_url##*=}"; _pir_pkg_url="${_pir_pkg_url%%@*}";
+
+ if [ "${_pir_pkg_url#${DEFAULT_GITROOT_HEAD}}" != "${_pir_pkg_url}" ]; then
+ _pir_pkg_url="Unknown";
+ fi;
+ fi;
+
+ if ! rtl_fileop cp "${MIDIPIX_BUILD_PWD}/etc/package.spec" \
+ "${PKG_BASE_DIR}/${PKG_NAME}-${_pir_pkg_version_rpm}.spec";
+ then
+ return 1;
+ else
+ while true; do
+ rpmbuild \
+ -bb \
+ --define="_tmppath ${BUILD_WORKDIR}" \
+ --define="_topdir ${PREFIX_RPM}/${PKG_NAME}-${_pir_pkg_version_rpm}" \
+ --define="pkg_destdir ${PKG_DESTDIR}" \
+ --define="pkg_name ${PKG_NAME}" \
+ --define="pkg_url ${_pir_pkg_url}" \
+ --define="pkg_version_full ${_pir_pkg_version_full}" \
+ --define="pkg_version_rpm ${_pir_pkg_version_rpm}" \
+ --nodeps "${PKG_BASE_DIR}/${PKG_NAME}-${_pir_pkg_version_rpm}.spec";
+ _pir_rc="${?}";
+
+ if [ "${_pir_rc}" -eq 0 ]; then
+ break;
+ elif [ "${_pir_rc}" -eq 141 ]; then
+ continue;
+ else
+ return "${_pir_rc}";
+ fi;
+ done;
+
+ if ! find "${PREFIX_RPM}/${PKG_NAME}-${_pir_pkg_version_rpm}/RPMS" \
+ -iname \*.rpm -exec cp -pP {} "${PREFIX_RPM}/" \; \
+ || ! rtl_fileop rm "${PREFIX_RPM}/${PKG_NAME}-${_pir_pkg_version_rpm}" \
+ || ! rtl_fileop cp "${PKG_BASE_DIR}/${PKG_NAME}-${_pir_pkg_version_rpm}.spec" "${PREFIX_RPM}/";
+ then
+ return 1;
+ fi;
+ fi;
+ fi;
+
+ return 0;
+};
+
+# vim:filetype=sh
diff --git a/subr.pkg/pkg_install_subdirs.subr b/subr.pkg/pkg_install_subdirs.subr
new file mode 100644
index 00000000..4ea68628
--- /dev/null
+++ b/subr.pkg/pkg_install_subdirs.subr
@@ -0,0 +1,26 @@
+#
+# set +o errexit -o noglob -o nounset is assumed.
+#
+
+pkg_install_subdirs() {
+ local _pis_group_name="${1}" _pkg_name="${2}" _restart_at="${3}" \
+ _pis_gspec="";
+
+ for _pis_gspec in \
+ "${PKG_INSTALL_FILES_DESTDIR:-}" \
+ "${PKG_INSTALL_FILES_DESTDIR_EXTRA:-}"; do
+ if ! rtl_install "${PKG_DESTDIR}" ${_pis_gspec}; then
+ return 1;
+ fi;
+ done;
+
+ if [ "${PKG_PREFIX%/}" = "${PREFIX_NATIVE%/}" ]; then
+ if ! rtl_install "${PKG_DESTDIR}/${DEFAULT_TARGET}" ${PKG_INSTALL_FILES_DESTDIR}; then
+ return 1;
+ fi;
+ fi;
+
+ return 0;
+};
+
+# vim:filetype=sh