perl: add option "custom install"
authorFrancois Perrad <fperrad@gmail.com>
Fri, 19 Oct 2012 03:13:51 +0000 (03:13 +0000)
committerPeter Korsgaard <jacmet@sunsite.dk>
Sat, 3 Nov 2012 11:00:38 +0000 (12:00 +0100)
allows same behaviour (and footprint) as microperl

Signed-off-by: Francois Perrad <francois.perrad@gadz.org>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
package/perl/Config.in
package/perl/perl.mk

index 98b41da4fa6401cebc9c810b383165b76a271af8..0642debf395949d529fed28e86808cf3b5a3fbe1 100644 (file)
@@ -16,6 +16,22 @@ config BR2_PACKAGE_PERL
 
 if BR2_PACKAGE_PERL
 
+config BR2_PACKAGE_PERL_CUSTOM_INSTALL
+       bool "custom install"
+       help
+         Don't use the full install target
+         Install only a selection of modules (like microperl).
+
+config BR2_PACKAGE_PERL_MODULES
+       string "additional modules"
+       depends on BR2_PACKAGE_PERL_CUSTOM_INSTALL
+       help
+         List of space-separated perl modules to copy to the rootfs.
+
+         Examples: constant.pm Getopt/Std.pm Time/Local.pm
+
+         Module dependencies are not automatic so check your needs.
+
 config BR2_PACKAGE_PERL_DB_FILE
        bool "DB_File"
        select BR2_PACKAGE_BERKELEYDB
index 56abbc1f199cb7de155f4c574f1cc0a93e08df88..81dff049ea2de5a55feed2f60c270f3b02612e33 100644 (file)
@@ -89,7 +89,38 @@ PERL_RUN_PERL = $(QEMU_USER) $(@D)/perl -Ilib
 PERL_ARCHNAME = $(shell $(PERL_RUN_PERL) -MConfig -e "print Config->{archname}")
 PERL_LIB = $(TARGET_DIR)/usr/lib/perl5/$(PERL_VERSION)
 PERL_ARCHLIB = $(PERL_LIB)/$(PERL_ARCHNAME)
+PERL_MODS = $(call qstrip,$(BR2_PACKAGE_PERL_MODULES))
+# Minimal set of modules required for 'perl -V' to work
+PERL_ARCH_MODS = Config.pm Config_git.pl Config_heavy.pl
+PERL_BASE_MODS = strict.pm vars.pm warnings.pm warnings/register.pm
 
+define PERL_INSTALL_MODULES
+       for i in $(PERL_ARCH_MODS); do \
+               $(INSTALL) -m 0644 -D $(@D)/lib/$$i $(PERL_ARCHLIB)/$$i; \
+       done
+       for i in $(PERL_BASE_MODS); do \
+               $(INSTALL) -m 0644 -D $(@D)/lib/$$i $(PERL_LIB)/$$i; \
+       done
+       for i in $(PERL_MODS); do \
+               j=`echo $$i|cut -d : -f 1` ; \
+               if [ -d $(@D)/lib/$$j ] ; then \
+                       cp -af $(@D)/lib/$$j $(PERL_LIB) ; \
+               fi ; \
+               if [ -f $(@D)/lib/$$i ] ; then \
+                       $(INSTALL) -m 0644 -D $(@D)/lib/$$i $(PERL_LIB)/$$i; \
+               fi ; \
+       done
+       # Remove test files
+       find $(PERL_LIB) -type f -name *.t -exec rm -f {} \;
+endef
+
+ifeq ($(BR2_PACKAGE_PERL_CUSTOM_INSTALL),y)
+define PERL_INSTALL_TARGET_CMDS
+       $(INSTALL) -m 0755 -D $(@D)/perl $(TARGET_DIR)/usr/bin/perl
+       $(INSTALL) -m 0755 -D $(@D)/libperl.so $(PERL_ARCHLIB)/CORE/libperl.so
+       $(PERL_INSTALL_MODULES)
+endef
+else
 define PERL_INSTALL_TARGET_CMDS
        $(MAKE) INSTALL_DEPENDENCE= \
                INSTALLFLAGS=-p \
@@ -98,6 +129,7 @@ define PERL_INSTALL_TARGET_CMDS
        rm -f $(PERL_ARCHLIB)/CORE/*.h
        find $(PERL_ARCHLIB) -type f -name *.bs -exec rm -f {} \;
 endef
+endif
 
 define PERL_CLEAN_CMDS
        -$(MAKE) -C $(@D) clean