El lun, 28-05-2012 a las 09:58 +0200, Michał Górny escribió: > 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 This was the main reason for me still doing manually cleaning over using this function
signature.asc
Description: This is a digitally signed message part