FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Gentoo > Gentoo Development

 
 
LinkBack Thread Tools
 
Old 05-28-2012, 07:58 AM
Michał Górny
 
Default Move remove_libtool_files() from autotools-utils for wider use.

As autotools-utils exports phase functions, it will be better if
remove_libtool_files() functions would be somewhere else.
---
eutils.eclass | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++
1 file changed, 68 insertions(+)

diff --git a/eutils.eclass b/eutils.eclass
index c88ef35..fb92256 100644
--- a/eutils.eclass
+++ b/eutils.eclass
@@ -1330,6 +1330,74 @@ makeopts_jobs() {
echo ${jobs:-1}
}

+# @FUNCTION: remove_libtool_files
+# @USAGE: [all]
+# @DESCRIPTION:
+# Determines unnecessary libtool files (.la) and libtool static archives (.a),
+# and removes them from installation image.
+#
+# To unconditionally remove all libtool files, pass 'all' as an argument.
+# Otherwise, libtool archives required for static linking will be preserved.
+remove_libtool_files() {
+ debug-print-function ${FUNCNAME} "$@"
+ local removing_all
+ [[ ${#} -le 1 ]] || die "Invalid number of args to ${FUNCNAME}()"
+ if [[ ${#} -eq 1 ]]; then
+ case "${1}" in
+ all)
+ removing_all=1
+ ;;
+ *)
+ die "Invalid argument to ${FUNCNAME}(): ${1}"
+ esac
+ fi
+
+ local pc_libs=()
+ if [[ ! ${removing_all} ]]; then
+ local arg
+ for arg in $(find "${D}" -name '*.pc' -exec
+ sed -n -e 's;^Libs:;;p' {} +); do
+ [[ ${arg} == -l* ]] && pc_libs+=(lib${arg#-l}.la)
+ done
+ fi
+
+ local f
+ find "${D}" -type f -name '*.la' -print0 | while read -r -d ' f; do
+ local shouldnotlink=$(sed -ne '/^shouldnotlink=yes$/p' "${f}")
+ local archivefile=${f/%.la/.a}
+ [[ "${f}" != "${archivefile}" ]] || die 'regex sanity check failed'
+
+ # Remove static libs we're not supposed to link against.
+ if [[ ${shouldnotlink} ]]; then
+ einfo "Removing unnecessary ${archivefile#${D%/}}"
+ rm -f "${archivefile}" || die
+ # The .la file may be used by a module loader, so avoid removing it
+ # unless explicitly requested.
+ [[ ${removing_all} ]] || continue
+ fi
+
+ # Remove .la files when:
+ # - user explicitly wants us to remove all .la files,
+ # - respective static archive doesn't exist,
+ # - they are covered by a .pc file already,
+ # - they don't provide any new information (no libs & no flags).
+ local removing
+ if [[ ${removing_all} ]]; then removing='forced'
+ elif [[ ! -f ${archivefile} ]]; then removing='no static archive'
+ elif has "$(basename "${f}")" "${pc_libs[@]}"; then
+ removing='covered by .pc'
+ elif [[ ! $(sed -n -e
+ "s/^(dependency_libs|inherited_linker_flags)='(.*)'$/2/p"
+ "${f}") ]]; then removing='no libs & flags'
+ fi
+
+ if [[ ${removing} ]]; then
+ einfo "Removing unnecessary ${f#${D%/}} (${removing})"
+ rm -f "${f}" || die
+ fi
+ done
+}
+
check_license() { die "you no longer need this as portage supports ACCEPT_LICENSE itself"; }

fi
--
1.7.10.2
 

Thread Tools




All times are GMT. The time now is 05:10 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org