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/pkg_install_libs.subr | |
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/pkg_install_libs.subr')
-rw-r--r-- | subr.pkg/pkg_install_libs.subr | 94 |
1 files changed, 94 insertions, 0 deletions
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 |