public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Michał Górny" <mgorny@gentoo.org>
To: gentoo-dev@lists.gentoo.org
Cc: "Michał Górny" <mgorny@gentoo.org>
Subject: [gentoo-dev] [PATCH] autotools-utils.eclass: punt unnecessary .la files even w/ USE=static-libs.
Date: Mon, 12 Sep 2011 21:57:45 +0200	[thread overview]
Message-ID: <1315857465-8179-1-git-send-email-mgorny@gentoo.org> (raw)

Right now, autotools-utils.eclass punts .la files only with
USE=-static-libs. We'd like to broaden the range of it and strip .la
files when they are not necessary for static linkage as well.

The following patch introduces an initial support for that. It assumes
that the .la file can be removed if the library is mentioned in any of
pkg-config files installed by the package, or if doesn't specify any
dependency libs nor linker flags.

The code would probably use some refactoring but we will handle that
after more testing (and possibly extensions) to the concept itself.
---
 autotools-utils.eclass |   25 +++++++++++++++++++++++--
 1 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/autotools-utils.eclass b/autotools-utils.eclass
index 7905d44..ce6613b 100644
--- a/autotools-utils.eclass
+++ b/autotools-utils.eclass
@@ -132,7 +132,7 @@ _check_build_dir() {
 }
 
 # @FUNCTION: remove_libtool_files
-# @USAGE: [all|none]
+# @USAGE: [all|only-not-required|none]
 # @DESCRIPTION:
 # Determines unnecessary libtool files (.la) and libtool static archives (.a)
 # and removes them from installation image.
@@ -145,11 +145,32 @@ _check_build_dir() {
 remove_libtool_files() {
 	debug-print-function ${FUNCNAME} "$@"
 
+	if [[ "$1" == 'only-not-required' ]]; then
+		local pc_libs=''
+
+		for arg in $(find "${D}" -name '*.pc' -exec sed -n -e 's;^Libs:;;p' {} +); do
+			if [[ ${arg} == -l* ]]; then
+				pc_libs="${pc_libs} lib${arg#-l}.la"
+			fi
+		done
+	fi
+
 	local f
 	for f in $(find "${D}" -type f -name '*.la'); do
 		# Keep only .la files with shouldnotlink=yes - likely plugins
 		local shouldnotlink=$(sed -ne '/^shouldnotlink=yes$/p' "${f}")
 		if [[  "$1" == 'all' || -z ${shouldnotlink} ]]; then
+			if [[ "$1" == 'only-not-required' ]]; then
+				# remove .la files only when .pc files provide the libs
+				# already or they don't give any information
+				! has $(basename "${f}") ${pc_libs} \
+						&& [[ -n "$(sed -n \
+							-e "s/^dependency_libs='\(.*\)'$/\1/p" \
+							-e "s/^inherited_linker_flags='\(.*\)'$/\1/p" \
+							"${f}")" ]] \
+						&& continue
+			fi
+
 			if [[ "$1" != 'none' ]]; then
 				echo "Removing unnecessary ${f}"
 				rm -f "${f}"
@@ -246,7 +267,7 @@ autotools-utils_src_install() {
 
 	# Remove libtool files and unnecessary static libs
 	local args
-	has static-libs ${IUSE//+} && ! use static-libs || args='none'
+	has static-libs ${IUSE//+} && ! use static-libs || args='only-not-required'
 	remove_libtool_files ${args}
 }
 
-- 
1.7.6.1




             reply	other threads:[~2011-09-12 19:56 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-12 19:57 Michał Górny [this message]
2011-09-12 21:00 ` [gentoo-dev] [PATCH] autotools-utils.eclass: punt unnecessary .la files even w/ USE=static-libs Donnie Berkholz
2011-09-12 21:46   ` Samuli Suominen
2011-09-12 21:51     ` Donnie Berkholz
2011-09-12 22:34       ` Samuli Suominen
2011-09-12 21:58   ` Michał Górny
2011-09-12 22:10     ` Donnie Berkholz
2011-09-13  6:40       ` Michał Górny
2011-09-13 14:10 ` [gentoo-dev] [PATCH autotools-utils 1/9] Fix handling whitespace in filenames when looking for .la files Michał Górny
2011-09-13 14:10   ` [gentoo-dev] [PATCH autotools-utils 2/9] Strip ${D} from removal message to shorten it Michał Górny
2011-09-13 14:10   ` [gentoo-dev] [PATCH autotools-utils 3/9] For .la removal, look for static archives rather than USE=static-libs Michał Górny
2011-09-13 14:10   ` [gentoo-dev] [PATCH autotools-utils 4/9] Clean up & simplify la removal code a little Michał Górny
2011-09-13 14:10   ` [gentoo-dev] [PATCH autotools-utils 5/9] Check command-line args completely in remove_libtool_files() Michał Górny
2011-09-13 14:10   ` [gentoo-dev] [PATCH autotools-utils 6/9] Refactor remove_libtool_files() to simplify conditions Michał Górny
2011-09-13 14:10   ` [gentoo-dev] [PATCH autotools-utils 7/9] Drop 'empty' .la files as well (those lacking libs & flags) Michał Górny
2011-09-13 14:10   ` [gentoo-dev] [PATCH autotools-utils 8/9] Remove static libs covered by .pc files as well Michał Górny
2011-09-13 14:10   ` [gentoo-dev] [PATCH autotools-utils 9/9] Explain .la removal reasons in output Michał Górny
2011-09-13 15:13   ` [gentoo-dev] [PATCH autotools-utils 1/9] Fix handling whitespace in filenames when looking for .la files Dirkjan Ochtman
2011-09-13 16:23     ` Nirbheek Chauhan
2011-09-16 13:45       ` Donnie Berkholz
2011-09-13 18:33     ` Michał Górny

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1315857465-8179-1-git-send-email-mgorny@gentoo.org \
    --to=mgorny@gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox