This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Move generation of ExtUtils::Miniperl to ext/ExtUtils-Miniperl from minimod.pl
authorNicholas Clark <nick@ccl4.org>
Thu, 4 Jul 2013 09:28:53 +0000 (11:28 +0200)
committerNicholas Clark <nick@ccl4.org>
Sun, 7 Jul 2013 10:52:36 +0000 (12:52 +0200)
It does increase the lines of code slightly but it replaces a bunch of
platform specific special case code in the Makefiles for *nix, Win32 and VMS
with one unified implementation. And in Perl, rather than 3+ different
languages.

This feels like the right maintainability trade-off.

MANIFEST
Makefile.SH
Porting/Maintainers.pl
ext/ExtUtils-Miniperl/Makefile.PL [new file with mode: 0644]
ext/ExtUtils-Miniperl/Miniperl_pm.PL [moved from minimod.pl with 97% similarity]
vms/descrip_mms.template
win32/Makefile
win32/makefile.mk

index 4ed41e3..26bd639 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -3567,6 +3567,8 @@ ext/Errno/ChangeLog       Errno changes
 ext/Errno/Errno_pm.PL  Errno perl module create script
 ext/Errno/Makefile.PL  Errno extension makefile writer
 ext/Errno/t/Errno.t    See if Errno works
+ext/ExtUtils-Miniperl/Makefile.PL      Runs Miniperl_pm.PL
+ext/ExtUtils-Miniperl/Miniperl_pm.PL   Writes ext/ExtUtils-Miniperl/Miniperl.pm
 ext/Fcntl/Fcntl.pm     Fcntl extension Perl module
 ext/Fcntl/Fcntl.xs     Fcntl extension external subroutines
 ext/Fcntl/Makefile.PL  Fcntl extension makefile writer
@@ -4336,7 +4338,6 @@ mg.h                              Magic header
 mg_names.c                     Generated magic names used by dump.c
 mg_raw.h                       Generated magic data used by generate_uudmap.c
 mg_vtable.h                    Generated magic vtable data
-minimod.pl                     Writes lib/ExtUtils/Miniperl.pm
 miniperlmain.c                 Basic perl w/o dynamic loading or extensions
 mkppport                       A script that distributes ppport.h
 mkppport.lst                   List of extensions that need a ppport.h
index 2d5006d..9ef70bd 100755 (executable)
@@ -453,7 +453,7 @@ shextract=`SH_to_target $SH`
 ## In the following dollars and backticks do not need the extra backslash.
 $spitshell >>$Makefile <<!GROK!THIS!
 
-private = preplibrary \$(CONFIGPM) \$(CONFIGPOD) lib/ExtUtils/Miniperl.pm git_version.h lib/buildcustomize.pl
+private = preplibrary \$(CONFIGPM) \$(CONFIGPOD) git_version.h lib/buildcustomize.pl
 
 # Files to be built with variable substitution before miniperl
 # is available.
@@ -684,7 +684,7 @@ generate_uudmap$(OBJ_EXT): mg_raw.h
 generate_uudmap$(HOST_EXE_EXT): generate_uudmap$(OBJ_EXT)
        $(CC) -o generate_uudmap$(EXE_EXT) $(LDFLAGS) generate_uudmap$(OBJ_EXT) $(libs)
 
-perlmain.c: $(MINIPERL_EXE) lib/ExtUtils/Miniperl.pm
+perlmain.c: $(MINIPERL_EXE) ext/ExtUtils-Miniperl/pm_to_blib
        $(MINIPERL) -Ilib -MExtUtils::Miniperl -e 'writemain(@ARGV)' DynaLoader $(static_ext) > perlmain.c
 
 # The file ext.libs is a list of libraries that must be linked in
@@ -978,9 +978,6 @@ $(CONFIGPM_FROM_CONFIG_SH): $(CONFIGPOD)
 $(CONFIGPOD): config.sh $(MINIPERL_EXE) configpm Porting/Glossary lib/Config_git.pl
        $(MINIPERL) configpm
 
-lib/ExtUtils/Miniperl.pm: miniperlmain.c $(MINIPERL_EXE) minimod.pl $(CONFIGPM)
-       $(MINIPERL) minimod.pl > lib/ExtUtils/Miniperl.pm
-
 unidatafiles $(unidatafiles) pod/perluniprops.pod: uni.data
 
 uni.data: $(MINIPERL_EXE) $(CONFIGPM) lib/unicore/mktables $(nonxs_ext)
index 70556c9..959606b 100755 (executable)
@@ -2030,6 +2030,7 @@ use File::Glob qw(:case);
         'MAINTAINER' => 'p5p',
         'FILES'      => q[
                 ext/arybase/
+                ext/ExtUtils-Miniperl/
                 ext/XS-APItest/
                 lib/CORE.pod
                 lib/Config.t
diff --git a/ext/ExtUtils-Miniperl/Makefile.PL b/ext/ExtUtils-Miniperl/Makefile.PL
new file mode 100644 (file)
index 0000000..16c3ecb
--- /dev/null
@@ -0,0 +1,40 @@
+#!perl -w
+
+# Blatantly copied from ext/Pod-Functions/Makefile.PL
+# If we think we want a third copy, then it's time to find a better way to do
+# this. (Note, we have no ABSTRACT_FROM here)
+# But for now, this replaces a bunch of platform specific special case code
+# in the Makefiles for *nix, Win32 and VMS with one unified implementation.
+# And in Perl, rather than 3+ different languages.
+
+use strict;
+use ExtUtils::MakeMaker;
+use File::Spec::Functions;
+
+WriteMakefile(NAME => 'ExtUtils::Miniperl',
+             VERSION_FROM => 'Miniperl_pm.PL',
+             LICENSE => 'perl',
+             PREREQ_PM => {},
+             AUTHOR => 'Perl 5 Porters <perlbug@perl.org>',
+             INSTALLDIRS => 'perl',
+             PL_FILES => {}, # Stop EU::MM defaulting this to run our PL
+             PM => {'Miniperl.pm' => '$(INST_LIBDIR)/Miniperl.pm'},
+             clean => {FILES => 'Miniperl.pm'},
+            );
+
+# There doesn't seem to be any way to get ExtUtils::MakeMaker to add a
+# dependency on another file (or target), and as it's using :: rules, not :
+# rules, then we can't simply add a one line dependency. So we need to provide
+# the entire thing. Fortunately, the same code in MM_Unix.pm is actually used
+# for all platforms, so this code below should also be portable:
+
+sub MY::postamble {
+    my $main = catfile(updir, updir, 'miniperlmain.c');
+    return <<"EOT";
+all :: Miniperl.pm
+       \$(NOECHO) \$(NOOP)
+
+Miniperl.pm :: Miniperl_pm.PL $main
+       \$(PERLRUN) Miniperl_pm.PL $main
+EOT
+}
similarity index 97%
rename from minimod.pl
rename to ext/ExtUtils-Miniperl/Miniperl_pm.PL
index a59b7f2..a7de280 100644 (file)
 #
 # Version 1.0, Feb 2nd 1995 by Andreas Koenig
 
-BEGIN { unshift @INC, "lib" }
-
 use strict;
 
+open STDOUT, '>Miniperl.pm'
+    or die "Can't open Miniperl.pm: $!";
+
 print <<'END';
 # This File keeps the contents of miniperlmain.c.
 #
@@ -33,7 +34,7 @@ require Exporter;
 $head= <<'EOF!HEAD';
 END
 
-open MINI, "miniperlmain.c";
+open MINI, shift;
 while (<MINI>) {
     last if /Do not delete this line--writemain depends on it/;
     print;
index de57563..73376b2 100644 (file)
@@ -282,7 +282,7 @@ unidatadirs = lib/unicore/To lib/unicore/lib
 # Modules which must be installed before we can build extensions
 LIBPREREQ = $(ARCHDIR)Config.pm $(ARCHDIR)Config_heavy.pl
 
-utils1 = [.utils]perldoc.com [.lib.ExtUtils]Miniperl.pm [.utils]c2ph.com [.utils]h2ph.com 
+utils1 = [.utils]perldoc.com [.utils]c2ph.com [.utils]h2ph.com 
 utils2 = [.utils]h2xs.com [.utils]libnetcfg.com [.lib]perlbug.com [.utils]json_pp.com
 utils3 = [.utils]perlivp.com [.lib]splain.com [.utils]pl2pm.com [.utils]xsubpp.com [.utils]pod2html.com [.utils]instmodsh.com
 utils4 = [.utils]enc2xs.com [.utils]piconv.com [.utils]cpan.com [.utils]prove.com [.utils]ptar.com [.utils]ptardiff.com [.utils]shasum.com
@@ -364,7 +364,7 @@ $(DBG)libperlmini$(OLB) : $(mini_obj)
        @ If F$Search("$(MMS$TARGET)").eqs."" Then Library/Object/Create $(MMS$TARGET)
        Library/Object/Replace $(MMS$TARGET) $(MMS$SOURCE_LIST)
 
-perlmain.c : miniperlmain.c $(MINIPERL_EXE) [.lib.ExtUtils]Miniperl.pm
+perlmain.c : miniperlmain.c $(MINIPERL_EXE) nonxsext
        $(MINIPERL) -"MExtUtils::Miniperl" -e "writemain(@ARGV)" "$(EXT)" > perlmain.c
 
 .ifdef __DEBUG__
@@ -451,9 +451,6 @@ nonxsext : $(LIBPREREQ) preplibrary $(MINIPERL_EXE) [.pod]perlfunc.pod
 [.utils]perldoc.com : [.utils]perldoc.PL $(ARCHDIR)Config.pm
        $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
 
-[.lib.ExtUtils]Miniperl.pm : Minimod.PL miniperlmain.c $(ARCHDIR)Config.pm
-       $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE) >$(MMS$TARGET)
-
 [.utils]perlivp.com : [.utils]perlivp.PL $(ARCHDIR)Config.pm
        $(MINIPERL) -"I[-.lib]" $(MMS$SOURCE)
 
@@ -819,7 +816,6 @@ tidy : cleanlis
        - If F$Search("$(ARCHDIR)Config.pm;-1").nes."" Then Purge/NoConfirm/Log $(ARCHDIR)Config.pm
        - If F$Search("[.lib]Config_heavy.pl;-1").nes."" Then Purge/NoConfirm/Log [.lib]Config_heavy.pl
        - If F$Search("$(ARCHDIR)Config_heavy.pl;-1").nes."" Then Purge/NoConfirm/Log $(ARCHDIR)Config_heavy.pl
-       - If F$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Purge/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm
        - If F$Search("[.lib.VMS]*.*;-1").nes."" Then Purge/NoConfirm/Log [.lib.VMS]*.*
        - If F$Search("$(ARCHCORE)*.*").nes."" Then Purge/NoConfirm/Log $(ARCHCORE)*.*
        - If F$Search("[.lib]*.com;-1").nes."" Then Purge/NoConfirm/Log [.lib]*.com
@@ -878,7 +874,6 @@ realclean : clean
        - If F$Search("[.x2p]*.com").nes."" Then Delete/NoConfirm/Log [.x2p]*.com;*
        - If F$Search("$(ARCHDIR)Config.pm").nes."" Then Delete/NoConfirm/Log $(ARCHDIR)Config.pm;*
        - If F$Search("$(ARCHDIR)Config_heavy.pl").nes."" Then Delete/NoConfirm/Log $(ARCHDIR)Config_heavy.pl;*
-       - If F$Search("[.lib.ExtUtils]Miniperl.pm").nes."" Then Delete/NoConfirm/Log [.lib.ExtUtils]Miniperl.pm;*
        - If F$Search("[.utils]perldoc.com").nes."" Then Delete/NoConfirm/Log [.utils]perldoc.com;*
        - If F$Search("[.utils]perlivp.com").nes."" Then Delete/NoConfirm/Log [.utils]perlivp.com;*
        - If F$Search("[...]*$(E)").nes."" Then Delete/NoConfirm/Log [...]*$(E);*
index 521db48..8968a67 100644 (file)
@@ -550,7 +550,6 @@ WPERLEXE    = ..\wperl.exe
 PERLEXESTATIC  = ..\perl-static.exe
 GLOBEXE                = ..\perlglob.exe
 CONFIGPM       = ..\lib\Config.pm ..\lib\Config_heavy.pl
-MINIMOD                = ..\lib\ExtUtils\Miniperl.pm
 X2P            = ..\x2p\a2p.exe
 GENUUDMAP      = ..\generate_uudmap.exe
 !IF "$(BUILD_STATIC)" == "define" || "$(ALL_STATIC)" == "define"
@@ -816,7 +815,7 @@ ICWD = -I..\dist\Cwd -I..\dist\Cwd\lib
 # Top targets
 #
 
-all : .\config.h ..\git_version.h $(GLOBEXE) $(MINIMOD) $(CONFIGPM) \
+all : .\config.h ..\git_version.h $(GLOBEXE) $(CONFIGPM) \
        $(UNIDATAFILES) MakePPPort $(PERLEXE) $(X2P) Extensions_nonxs Extensions $(PERLSTATIC)
        @echo   Everything is up to date. '$(MAKE_BARE) test' to run test suite.
 
@@ -826,7 +825,7 @@ regnodes : ..\regnodes.h
 
 ..\regexec$(o) : ..\regnodes.h ..\regcharclass.h
 
-reonly : regnodes .\config.h ..\git_version.h $(GLOBEXE) $(MINIMOD) $(CONFIGPM) \
+reonly : regnodes .\config.h ..\git_version.h $(GLOBEXE) $(CONFIGPM) \
        $(UNIDATAFILES) $(PERLEXE) $(X2P) Extensions_reonly
        @echo   Perl and 're' are up to date.
 
@@ -943,7 +942,7 @@ regen_config_h:
        -$(MINIPERL) -I..\lib config_h.PL
        rename config.h $(CFGH_TMPL)
 
-$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl
+$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL
        $(MINIPERL) -I..\lib ..\configpm --chdir=..
        if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL)
        $(XCOPY) ..\*.h $(COREDIR)\*.*
@@ -1008,11 +1007,6 @@ $(PERLSTATICLIB): Extensions_static
 
 $(PERLEXE_RES): perlexe.rc $(PERLEXE_MANIFEST) $(PERLEXE_ICO)
 
-$(MINIMOD) : $(MINIPERL) ..\minimod.pl
-       cd ..
-       miniperl minimod.pl > lib\ExtUtils\Miniperl.pm
-       cd win32
-
 ..\x2p\a2p$(o) : ..\x2p\a2p.c
        $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\a2p.c
 
@@ -1170,8 +1164,7 @@ utils: $(PERLEXE) $(X2P) ..\utils\Makefile
 
 distclean: realclean
        -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \
-               $(PERLIMPLIB) ..\miniperl.lib $(MINIMOD) \
-               $(PERLEXESTATIC) $(PERLSTATICLIB)
+               $(PERLIMPLIB) ..\miniperl.lib $(PERLEXESTATIC) $(PERLSTATICLIB)
        -del /f *.def *.map
        -del /f $(LIBDIR)\Encode.pm $(LIBDIR)\encoding.pm $(LIBDIR)\Errno.pm
        -del /f $(LIBDIR)\Config.pod $(LIBDIR)\POSIX.pod $(LIBDIR)\threads.pm
index 6a9d620..376eb5a 100644 (file)
@@ -644,7 +644,6 @@ PERLEXESTATIC       = ..\perl-static.exe
 STATICDIR      = .\static.tmp
 GLOBEXE                = ..\perlglob.exe
 CONFIGPM       = ..\lib\Config.pm ..\lib\Config_heavy.pl
-MINIMOD                = ..\lib\ExtUtils\Miniperl.pm
 X2P            = ..\x2p\a2p.exe
 GENUUDMAP      = ..\generate_uudmap.exe
 .IF "$(BUILD_STATIC)" == "define" || "$(ALL_STATIC)" == "define"
@@ -929,7 +928,7 @@ ICWD = -I..\dist\Cwd -I..\dist\Cwd\lib
 #
 
 all : CHECKDMAKE .\config.h ..\git_version.h $(GLOBEXE) $(MINIPERL)    \
-       $(MINIMOD) $(CONFIGPM) $(UNIDATAFILES) MakePPPort               \
+       $(CONFIGPM) $(UNIDATAFILES) MakePPPort                          \
        $(PERLEXE) $(X2P) Extensions Extensions_nonxs $(PERLSTATIC)
 
 regnodes : ..\regnodes.h
@@ -939,7 +938,7 @@ regnodes : ..\regnodes.h
 ..\regexec$(o) : ..\regnodes.h ..\regcharclass.h
 
 reonly : regnodes .\config.h ..\git_version.h $(GLOBEXE) $(MINIPERL)   \
-       $(MINIMOD) $(CONFIGPM) $(UNIDATAFILES) $(PERLEXE)               \
+       $(CONFIGPM) $(UNIDATAFILES) $(PERLEXE)                          \
        $(X2P) Extensions_reonly
 
 static: $(PERLEXESTATIC)
@@ -1068,7 +1067,7 @@ regen_config_h:
        -$(MINIPERL) -I..\lib config_h.PL "ARCHPREFIX=$(ARCHPREFIX)"
        rename config.h $(CFGH_TMPL)
 
-$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl
+$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL
        $(MINIPERL) -I..\lib ..\configpm --chdir=..
        if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL)
        $(XCOPY) ..\*.h $(COREDIR)\*.*
@@ -1171,9 +1170,6 @@ $(PERLSTATICLIB): $(PERLDLL_OBJ) Extensions_static
 
 $(PERLEXE_RES): perlexe.rc $(PERLEXE_MANIFEST) $(PERLEXE_ICO)
 
-$(MINIMOD) : $(MINIPERL) ..\minimod.pl
-       cd .. && miniperl minimod.pl > lib\ExtUtils\Miniperl.pm
-
 ..\x2p\a2p$(o) : ..\x2p\a2p.c
        $(CC) -I..\x2p $(CFLAGS) $(OBJOUT_FLAG)$@ -c ..\x2p\a2p.c
 
@@ -1346,8 +1342,7 @@ utils: $(PERLEXE) $(X2P) ..\utils\Makefile
 
 distclean: realclean
        -del /f $(MINIPERL) $(PERLEXE) $(PERLDLL) $(GLOBEXE) \
-               $(PERLIMPLIB) ..\miniperl$(a) $(MINIMOD) \
-               $(PERLEXESTATIC) $(PERLSTATICLIB)
+               $(PERLIMPLIB) ..\miniperl$(a) $(PERLEXESTATIC) $(PERLSTATICLIB)
        -del /f *.def *.map
        -del /f $(LIBDIR)\Encode.pm $(LIBDIR)\encoding.pm $(LIBDIR)\Errno.pm
        -del /f $(LIBDIR)\Config.pod $(LIBDIR)\POSIX.pod $(LIBDIR)\threads.pm