diff options
author | Lucía Andrea Illanes Albornoz <lucia@luciaillanes.de> | 2023-02-17 19:29:28 +0100 |
---|---|---|
committer | Lucía Andrea Illanes Albornoz <lucia@luciaillanes.de> | 2023-02-17 19:29:28 +0100 |
commit | e9fa0774ed2e7e030a68f5b0ae51fe6dd69fe492 (patch) | |
tree | 37e46c2578bd8f4f435073db01abc514976da8a8 /subr.pkg | |
parent | 56495632fc8bf612766a9c431e37ff27a903e8c6 (diff) | |
download | midipix_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.subr | 67 | ||||
-rw-r--r-- | subr.pkg/pkg_build_clean.subr | 37 | ||||
-rw-r--r-- | subr.pkg/pkg_clean.subr | 32 | ||||
-rw-r--r-- | subr.pkg/pkg_configure.subr | 194 | ||||
-rw-r--r-- | subr.pkg/pkg_configure_autotools.subr | 114 | ||||
-rw-r--r-- | subr.pkg/pkg_configure_clean.subr | 21 | ||||
-rw-r--r-- | subr.pkg/pkg_configure_patch.subr | 44 | ||||
-rw-r--r-- | subr.pkg/pkg_configure_patch_pre.subr | 48 | ||||
-rw-r--r-- | subr.pkg/pkg_fetch_clean.subr | 25 | ||||
-rw-r--r-- | subr.pkg/pkg_fetch_download.subr | 43 | ||||
-rw-r--r-- | subr.pkg/pkg_fetch_extract.subr | 48 | ||||
-rw-r--r-- | subr.pkg/pkg_install.subr | 37 | ||||
-rw-r--r-- | subr.pkg/pkg_install_clean.subr | 15 | ||||
-rw-r--r-- | subr.pkg/pkg_install_files.subr | 133 | ||||
-rw-r--r-- | subr.pkg/pkg_install_libs.subr | 94 | ||||
-rw-r--r-- | subr.pkg/pkg_install_make.subr | 46 | ||||
-rw-r--r-- | subr.pkg/pkg_install_rpm.subr | 66 | ||||
-rw-r--r-- | subr.pkg/pkg_install_subdirs.subr | 26 |
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 |