Mercurial > repo
comparison perl-5.22.2/write_buildcustomize.pl @ 8045:a16537d2fe07
<xfix> tar xf perl-5.22.2.tar.gz # Ah, whatever, I\'m doing it anyway
author | HackBot |
---|---|
date | Sat, 14 May 2016 14:54:38 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
8044:711c038a7dce | 8045:a16537d2fe07 |
---|---|
1 #!./miniperl -w | |
2 | |
3 use strict; | |
4 | |
5 my $osname = $^O; | |
6 my $file = 'lib/buildcustomize.pl'; | |
7 | |
8 if ( @ARGV % 2 ) { | |
9 my $dir = shift; | |
10 chdir $dir or die "Can't chdir '$dir': $!"; | |
11 unshift @INC, 'lib'; | |
12 } | |
13 | |
14 if ( @ARGV ) { | |
15 # Used during cross-compilation. | |
16 $osname = $ARGV[1]; | |
17 } | |
18 | |
19 # To clarify, this isn't the entire suite of modules considered "toolchain" | |
20 # It's not even all modules needed to build ext/ | |
21 # It's just the source paths of the (minimum complete set of) modules in ext/ | |
22 # needed to build the nonxs modules | |
23 # After which, all nonxs modules are in lib, which was always sufficient to | |
24 # allow miniperl to build everything else. | |
25 # Term::ReadLine is not here for building but for allowing the debugger to | |
26 # run under miniperl when nothing but miniperl will build :-(. | |
27 | |
28 my @toolchain = qw(cpan/AutoLoader/lib | |
29 dist/Carp/lib | |
30 dist/PathTools dist/PathTools/lib | |
31 cpan/ExtUtils-Command/lib | |
32 cpan/ExtUtils-Install/lib | |
33 cpan/ExtUtils-MakeMaker/lib | |
34 cpan/ExtUtils-Manifest/lib | |
35 cpan/File-Path/lib | |
36 ext/re | |
37 dist/Term-ReadLine/lib | |
38 dist/Exporter/lib | |
39 ext/File-Find/lib | |
40 cpan/Text-Tabs/lib | |
41 dist/constant/lib | |
42 ); | |
43 | |
44 # Used only in ExtUtils::Liblist::Kid::_win32_ext() | |
45 push @toolchain, 'cpan/Text-ParseWords/lib' if $^O eq 'MSWin32'; | |
46 push @toolchain, 'ext/VMS-Filespec/lib' if $^O eq 'VMS'; | |
47 | |
48 unshift @INC, @toolchain; | |
49 require File::Spec::Functions; | |
50 | |
51 # lib must be last, as the toolchain modules write themselves into it | |
52 # as they build, and it's important that @INC order ensures that the partially | |
53 # written files are always masked by the complete versions. | |
54 | |
55 my $inc = join ",\n ", | |
56 map { "q\0$_\0" } | |
57 (map {File::Spec::Functions::rel2abs($_)} ( | |
58 # faster build on the non-parallel Win32 build process | |
59 $^O eq 'MSWin32' ? ('lib', @toolchain ) : (@toolchain, 'lib') | |
60 )); | |
61 | |
62 open my $fh, '>', $file | |
63 or die "Can't open $file: $!"; | |
64 | |
65 my $error; | |
66 | |
67 # If any of the system's build tools are written in Perl, then this module | |
68 # may well be loaded by a much older version than we are building. So keep it | |
69 # as backwards compatible as is easy. | |
70 print $fh <<"EOT" or $error = "Can't print to $file: $!"; | |
71 #!perl | |
72 | |
73 # !!!!!!! DO NOT EDIT THIS FILE !!!!!!! | |
74 # This file is generated by write_buildcustomize.pl. | |
75 # Any changes made here will be lost! | |
76 | |
77 # We are miniperl, building extensions | |
78 # Replace the first entry of \@INC ("lib") with the list of | |
79 # directories we need. | |
80 ${\($^O eq 'MSWin32' ? '${^WIN32_SLOPPY_STAT} = 1;':'')} | |
81 splice(\@INC, 0, 1, $inc); | |
82 \$^O = '$osname'; | |
83 __END__ | |
84 EOT | |
85 | |
86 if ($error) { | |
87 close $fh | |
88 or warn "Can't unlink $file after error: $!"; | |
89 } else { | |
90 if (close $fh) { | |
91 do $file and exit; | |
92 $error = "Can't load generated $file: $@"; | |
93 } else { | |
94 $error = "Can't close $file: $!"; | |
95 } | |
96 } | |
97 | |
98 # It's going very wrong, so try to remove the botched file. | |
99 | |
100 unlink $file | |
101 or warn "Can't unlink $file after error: $!"; | |
102 die $error; | |
103 | |
104 # ex: set ts=8 sts=4 sw=4 et: |