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
