This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Explicitly close filehandle in ExtUtils::CBuilder::have_compiler().
authorCraig A. Berry <craigberry@mac.com>
Mon, 13 Dec 2010 13:21:28 +0000 (07:21 -0600)
committerCraig A. Berry <craigberry@mac.com>
Mon, 13 Dec 2010 13:21:28 +0000 (07:21 -0600)
A recent change removed the lexical scope that would have caused
the lexical filehandle on the temporary source file to get closed
automatically.  If the filehandle is still open for write, you
can't compile it or delete unless it's open for shared access,
which is not the default on VMS (and deleting an open fle might
be a problem on Windows as well).

Without deleting the .c files, a subsequent make (even after a make
realclean) will identify CBuilder as an XS extension and fail when
it can't compile the non-existent CBuilder.c, which breaks the build
for second and subsequent runs of a smoke test.

cpan/ExtUtils-CBuilder/lib/ExtUtils/CBuilder/Base.pm

index b1c5dc5..3249032 100644 (file)
@@ -198,6 +198,7 @@ sub have_compiler {
   else {
     print $FH "int boot_compilet() { return 1; }\n";
   }
   else {
     print $FH "int boot_compilet() { return 1; }\n";
   }
+  close $FH;
 
   my ($obj_file, @lib_files);
   eval {
 
   my ($obj_file, @lib_files);
   eval {