From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1SYurk-0000lf-2D for garchives@archives.gentoo.org; Mon, 28 May 2012 07:59:48 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 2A000E06EE; Mon, 28 May 2012 07:59:26 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id B6BEEE0793 for ; Mon, 28 May 2012 07:58:28 +0000 (UTC) Received: from pomiocik.lan (213-238-104-252.adsl.inetia.pl [213.238.104.252]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: mgorny) by smtp.gentoo.org (Postfix) with ESMTPSA id 183AF1B4024; Mon, 28 May 2012 07:58:25 +0000 (UTC) From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= To: gentoo-dev@lists.gentoo.org Cc: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= Subject: [gentoo-dev] [PATCH eutils] Move remove_libtool_files() from autotools-utils for wider use. Date: Mon, 28 May 2012 09:58:56 +0200 Message-Id: <1338191936-2091-1-git-send-email-mgorny@gentoo.org> X-Mailer: git-send-email 1.7.10.2 Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-dev@lists.gentoo.org Reply-to: gentoo-dev@lists.gentoo.org X-Archives-Salt: 7f401683-9e63-4499-85ad-499e6e981874 X-Archives-Hash: fbf4f09b928f614b6f8d7d0b2e2bbef0 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