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 

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to