Let's assume that all libtool files have a consistent format and contain
a line stating 'shouldnotlink=(yes|no)'. We use that to distinguish
modules from libraries, so we can as well use it to validate the .la
file to avoid removing non-libtool .la files.

This should also make the big 'if' a bit more readable.

Note: this is '-w' patch, since a large block of code was reindented.

Fixes: https://bugs.gentoo.org/show_bug.cgi?id=468380
---
 gx86/eclass/eutils.eclass | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/gx86/eclass/eutils.eclass b/gx86/eclass/eutils.eclass
index 04e99e3..db5aa18 100644
--- a/gx86/eclass/eutils.eclass
+++ b/gx86/eclass/eutils.eclass
@@ -1458,11 +1458,12 @@ prune_libtool_files() {
                local archivefile=${f/%.la/.a}
 
                [[ ${f} != ${archivefile} ]] || die 'regex sanity check failed'
-
                local reason pkgconfig_scanned
+               local snotlink=$(sed -n -e 's:^shouldnotlink=::p' "${f}")
+
+               if [[ ${snotlink} == yes ]]; then
 
                        # Remove static libs we're not supposed to link against.
-               if grep -q '^shouldnotlink=yes$' "${f}"; then
                        if [[ -f ${archivefile} ]]; then
                                einfo "Removing unnecessary 
${archivefile#${D%/}} (static plugin)"
                                queue+=( "${archivefile}" )
@@ -1474,13 +1475,19 @@ prune_libtool_files() {
                                reason='module'
                        fi
 
+               elif [[ ${snotlink} == no ]]; then
+
+                       # A valid .la file must have a valid 'shouldnotlink='.
+                       # That assumption helps us avoid removing random files
+                       # which match '*.la', see bug #468380.
+
                        # 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).
 
-               elif [[ ${removing_all} ]]; then
+                       if [[ ${removing_all} ]]; then
                                reason='requested'
                        elif [[ ! -f ${archivefile} ]]; then
                                reason='no static archive'
@@ -1526,10 +1533,12 @@ prune_libtool_files() {
                                        fi
 
                                        pkgconfig_scanned=1
-                       fi
+                               fi # pkgconfig_scanned
 
                                has "${f##*/}" "${pc_libs[@]}" && 
reason='covered by .pc'
-               fi
+                       fi # removal due to .pc
+
+               fi # shouldnotlink==no
 
                if [[ ${reason} ]]; then
                        einfo "Removing unnecessary ${f#${D%/}} (${reason})"
-- 
1.8.2.1


Reply via email to