Start to make DynaLoader's Makefile.PL platform agnostic.
Nicholas Clark [Wed, 16 Sep 2009 09:23:56 +0000 (10:23 +0100)]
ext/DynaLoader/Makefile.PL

index 2a9aa7b..a58e952 100644 (file)
@@ -1,5 +1,10 @@
+use strict;
 use ExtUtils::MakeMaker;
 
+my $is_mswin    = $^O eq 'MSWin32';
+my $is_netware  = $^O eq 'NetWare';
+my $is_vms      = $^O eq 'VMS';
+
 WriteMakefile(
     NAME => 'DynaLoader',
     LINKTYPE   => 'static',
@@ -17,10 +22,12 @@ WriteMakefile(
 );
 
 sub MY::postamble {
-       '
-DynaLoader.xs: $(DLSRC)
-       $(RM_F) $@
-       $(CP) $? $@
+    my $test_xs;
+
+    if ($is_mswin || $is_netware || $is_vms) {
+       $test_xs = '';
+    } else {
+       $test_xs = <<'EOT';
 
 # Perform very simple tests just to check for major gaffs.
 # We can\'t do much more for platforms we are not executing on.
@@ -28,15 +35,32 @@ test-xs:
        for i in dl_*xs; \
            do $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSUBPPARGS) $$i > /dev/null; \
        done
-';
+EOT
+    }
+
+    return '
+DynaLoader.xs: $(DLSRC)
+       $(RM_F) $@
+       $(CP) $? $@
+' . $test_xs;
 }
 
 sub MY::static {
-       '
-$(PERL_SRC)/$(OBJECT) : $(FIRST_MAKEFILE) $(OBJECT)
-       $(RM_RF) $(PERL_SRC)/$(OBJECT)
-       $(CP) $(OBJECT) $(PERL_SRC)/$(OBJECT)
+    my $object;
+    if ($is_mswin || $is_netware) {
+       $object = '$(PERL_SRC)\\$(OBJECT)';
+    } elsif ($is_vms) {
+       $object = '[$(PERL_SRC)].$(OBJECT)';
+    } else {
+       $object = '$(PERL_SRC)/$(OBJECT)';
+    }
+
+
+    return "
+$object : \$(FIRST_MAKEFILE) \$(OBJECT)
+       \$(RM_RF) $object
+       \$(CP) \$(OBJECT) $object
 
-static :: $(PERL_SRC)/$(OBJECT)
-';
+static :: $object
+";
 }