This is a live mirror of the Perl 5 development currently hosted at
Change the *nix and VMS Makefiles to to pass a filename to writemain().
authorNicholas Clark <>
Mon, 8 Jul 2013 15:00:35 +0000 (17:00 +0200)
committerNicholas Clark <>
Tue, 9 Jul 2013 05:54:34 +0000 (07:54 +0200)
Adding a first argument as a reference to the filename "perlmain.c" makes
ExtUtils::Miniperl::writemain() open and close the file for us. This is
safer than having the Makefile create the file using output redirection as
that can create an empty file if compilation aborts. This change means that
the file is only moved into place with the correct name if it has been
written completely without error. If an error happens the file is not
created, the make aborts, and any subsequent make will re-attempt to create
the file, instead of continuing with an incorrect file, hiding the real
cause of the problems.


index 9ef70bd..ab0d48b 100755 (executable)
@@ -685,7 +685,7 @@ 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) ext/ExtUtils-Miniperl/pm_to_blib
-       $(MINIPERL) -Ilib -MExtUtils::Miniperl -e 'writemain(@ARGV)' DynaLoader $(static_ext) > perlmain.c
+       $(MINIPERL) -Ilib -MExtUtils::Miniperl -e 'writemain(\"perlmain.c", @ARGV)' DynaLoader $(static_ext)
 # The file ext.libs is a list of libraries that must be linked in
 # for static extensions, e.g. -lm -lgdbm, etc.  The individual
index 523daf6..0415b95 100644 (file)
@@ -365,7 +365,7 @@ $(DBG)libperlmini$(OLB) : $(mini_obj)
        Library/Object/Replace $(MMS$TARGET) $(MMS$SOURCE_LIST)
 perlmain.c : miniperlmain.c $(MINIPERL_EXE) nonxsext
-       $(MINIPERL) -"MExtUtils::Miniperl" -e "writemain(@ARGV)" "$(EXT)" > perlmain.c
+       $(MINIPERL) -"MExtUtils::Miniperl" -e "writemain(\'perlmain.c', @ARGV)" "$(EXT)"
 .ifdef __DEBUG__
 # Link an extra perl that doesn't invoke the debugger