diff options
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 |