Strip *.so* and not only executable files
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Tue, 4 Feb 2014 15:36:18 +0000 (16:36 +0100)
committerPeter Korsgaard <peter@korsgaard.com>
Tue, 4 Feb 2014 17:10:15 +0000 (18:10 +0100)
Our current stripping strategy requires that shared libraries have the
executable permission. However, this is by far not something
recognized as a standard behavior: Debian/Ubuntu distributions for
example do not have executable permissions on their
libraries. Therefore, pushing to upstream packages fixes that add the
executable permissions is not easy.

As a result, this commit improves the stripping logic so that it not
only strips the files that are executable, but also the ones that
match '*.so*', which should match both the shared libraries and the
dlopen()'able plugins, as long as they have a .so extension.

Thanks to this addition, a number of manual "chmod +x" done by various
packages can be removed.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
Makefile
package/gcc/gcc-final/gcc-final.mk
package/gettext/gettext.mk
package/libiconv/libiconv.mk
package/pciutils/pciutils.mk
package/sunxi-mali/sunxi-mali.mk

index dec06941de9b8674170a75cbebc3842218a9727f..d05c5844a9db455818157d0327c8c0e4c1c84bad 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -487,7 +487,7 @@ STRIP_FIND_CMD = find $(TARGET_DIR)
 ifneq (,$(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS)))
 STRIP_FIND_CMD += \( $(call finddirclauses,$(TARGET_DIR),$(call qstrip,$(BR2_STRIP_EXCLUDE_DIRS))) \) -prune -o
 endif
-STRIP_FIND_CMD += -type f -perm /111
+STRIP_FIND_CMD += -type f \( -perm /111 -o -name '*.so*' \)
 STRIP_FIND_CMD += -not \( $(call findfileclauses,libpthread*.so* $(call qstrip,$(BR2_STRIP_EXCLUDE_FILES))) \) -print
 
 target-finalize:
index 47b30da1056f798f760605132367ec33a24cd70e..ecc4068b4930ee575d1ffcd9b69a9042f4a47368 100644 (file)
@@ -103,14 +103,12 @@ HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_LD_LINUX_LINK
 endif
 
 # Cannot use the HOST_GCC_FINAL_USR_LIBS mechanism below, because we want
-# libgcc_s to be installed in /lib and not /usr/lib. We add +x on
-# libgcc_s to ensure it will be stripped.
+# libgcc_s to be installed in /lib and not /usr/lib.
 define HOST_GCC_FINAL_INSTALL_LIBGCC
        -cp -dpf $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/lib*/libgcc_s* \
                $(STAGING_DIR)/lib/
        -cp -dpf $(HOST_DIR)/usr/$(GNU_TARGET_NAME)/lib*/libgcc_s* \
                $(TARGET_DIR)/lib/
-       -chmod +x $(TARGET_DIR)/lib/libgcc_s.so.1
 endef
 
 HOST_GCC_FINAL_POST_INSTALL_HOOKS += HOST_GCC_FINAL_INSTALL_LIBGCC
index fbdb19ced25f3a783209508bab0d3e1a42059dee..748c2a59fdd8f24280593ce9068429c2675339fa 100644 (file)
@@ -57,12 +57,5 @@ endef
 endif
 endif # GETTEXT_TOOLS = n
 
-# Library lacks +x so strip skips it
-define GETTEXT_FIX_LIBRARY_MODE
-       -chmod +x $(TARGET_DIR)/usr/lib/libintl.so*
-endef
-
-GETTEXT_POST_INSTALL_TARGET_HOOKS += GETTEXT_FIX_LIBRARY_MODE
-
 $(eval $(autotools-package))
 $(eval $(host-autotools-package))
index 3a513b3dc1d5d182f35053e174bde12b04ead843..ee313cea7fdbd400a98784ab1a40972dbdbccfaf 100644 (file)
@@ -20,14 +20,6 @@ endef
 LIBICONV_POST_INSTALL_TARGET_HOOKS += LIBICONV_TARGET_REMOVE_PRELOADABLE_LIBS
 LIBICONV_POST_INSTALL_STAGING_HOOKS += LIBICONV_STAGING_REMOVE_PRELOADABLE_LIBS
 
-# Library lacks +x so strip skips it
-define LIBICONV_FIX_LIBRARY_MODE
-       -chmod +x $(TARGET_DIR)/usr/lib/libcharset.so*
-       -chmod +x $(TARGET_DIR)/usr/lib/libiconv.so*
-endef
-
-LIBICONV_POST_INSTALL_TARGET_HOOKS += LIBICONV_FIX_LIBRARY_MODE
-
 $(eval $(autotools-package))
 
 # Configurations where the toolchain supports locales and the libiconv
index 16ba61b07bf50316558161c7c4aa569bb7a28460..bc88ab38e86884f3fc95378e39caa795417b3ccb 100644 (file)
@@ -66,11 +66,4 @@ define PCIUTILS_INSTALL_STAGING_CMDS
 endef
 
 
-# Library lacks +x so strip skips it
-define PCIUTILS_FIX_LIBRARY_MODE
-       -chmod +x $(TARGET_DIR)/usr/lib/libpci.so*
-endef
-
-PCIUTILS_POST_INSTALL_TARGET_HOOKS += PCIUTILS_FIX_LIBRARY_MODE
-
 $(eval $(generic-package))
index d9fd8be25f9b8608b9b05b61062b6fbe4db918d1..c625c6ef7e5a322d1bd05c624d73331eee3b3909 100644 (file)
@@ -68,8 +68,6 @@ endef
 define SUNXI_MALI_INSTALL_TARGET_CMDS
        $(SUNXI_MALI_MAKE_ENV) $(MAKE) -C $(@D)/lib \
                $(SUNXI_MALI_MAKE_OPTS) DESTDIR=$(TARGET_DIR) install
-       # add execution permissions so that libraries are properly stripped
-       chmod +x $(addprefix $(TARGET_DIR)/usr/lib/lib,EGL.so GLESv1_CM.so GLESv2.so Mali.so UMP.so*)
        $(if $(BR2_PACKAGE_SUNXI_MALI_DBG),
                $(INSTALL) -m 755 $(@D)/version/version $(TARGET_DIR)/usr/bin/maliver; \
                $(INSTALL) -m 755 $(@D)/test/test $(TARGET_DIR)/usr/bin/malitest