microperl: fix MICROPERL_INSTALL_TARGET_CMDS
authorThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Tue, 27 Mar 2012 07:06:17 +0000 (09:06 +0200)
committerPeter Korsgaard <jacmet@sunsite.dk>
Tue, 27 Mar 2012 08:30:31 +0000 (10:30 +0200)
The MICROPERL_INSTALL_TARGET_CMDS used the following construct in a
for loop:

[ -d $(@D)/lib/$$j ] && cp -af $(@D)/lib/$$j \
$(TARGET_DIR)/$(MICROPERL_MODS_DIR) ; \
[ -f $(@D)/lib/$$i ] && $(INSTALL) -m 0644 -D $(@D)/lib/$$i \
$(TARGET_DIR)/$(MICROPERL_MODS_DIR)/$$i; \

The problem is that when at the last iteration, the second test (-f)
fails, then the whole loop ends with a non-zero error code, and makes
aborts the build. This happens for example if the last Perl modules in
the list is Time::Local, because such modules are taken care of by the
first condition (that copies a complete directory).

By moving to full if statements, we ensure that the return code is
zero even if the condition was false.

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
package/microperl/microperl.mk

index d5b5a7c4e5a40e18e3371555b3ebb4d50cc857fd..5bf4a2e4d5013a752ecc832d0c8ed30b66f83954 100644 (file)
@@ -132,10 +132,12 @@ define MICROPERL_INSTALL_TARGET_CMDS
        $(MICROPERL_BUILD_EXTENSIONS)
        for i in $(MICROPERL_MODS); do \
                j=`echo $$i|cut -d : -f 1` ; \
-               [ -d $(@D)/lib/$$j ] && cp -af $(@D)/lib/$$j \
-                       $(TARGET_DIR)/$(MICROPERL_MODS_DIR) ; \
-               [ -f $(@D)/lib/$$i ] && $(INSTALL) -m 0644 -D $(@D)/lib/$$i \
-                       $(TARGET_DIR)/$(MICROPERL_MODS_DIR)/$$i; \
+               if [ -d $(@D)/lib/$$j ] ; then \
+                       cp -af $(@D)/lib/$$j $(TARGET_DIR)/$(MICROPERL_MODS_DIR) ; \
+               fi ; \
+               if [ -f $(@D)/lib/$$i ] ; then \
+                       $(INSTALL) -m 0644 -D $(@D)/lib/$$i $(TARGET_DIR)/$(MICROPERL_MODS_DIR)/$$i; \
+               fi ; \
        done
        # Remove test files
        find $(TARGET_DIR)/$(MICROPERL_MODS_DIR) -type f -name *.t \