Commit | Line | Data |
---|---|---|
5e4c4c91 NC |
1 | #!./miniperl -w |
2 | ||
3 | use strict; | |
fdf90be3 JR |
4 | |
5 | my $osname = $^O; | |
6 | my $file = 'lib/buildcustomize.pl'; | |
7 | ||
8 | if ( @ARGV % 2 ) { | |
5e4c4c91 NC |
9 | my $dir = shift; |
10 | chdir $dir or die "Can't chdir '$dir': $!"; | |
11 | unshift @INC, 'lib'; | |
12 | } | |
13 | ||
fdf90be3 JR |
14 | if ( @ARGV ) { |
15 | # Used during cross-compilation. | |
16 | $osname = $ARGV[1]; | |
17 | } | |
b78ac715 | 18 | |
5e4c4c91 NC |
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. | |
f61462d5 CB |
25 | # Term::ReadLine is not here for building but for allowing the debugger to |
26 | # run under miniperl when nothing but miniperl will build :-(. | |
5e4c4c91 NC |
27 | |
28 | my @toolchain = qw(cpan/AutoLoader/lib | |
634ff085 | 29 | dist/Carp/lib |
cb8c8458 | 30 | dist/PathTools dist/PathTools/lib |
d393d7e5 | 31 | cpan/ExtUtils-Install/lib |
5e4c4c91 | 32 | cpan/ExtUtils-MakeMaker/lib |
854a00d8 | 33 | cpan/ExtUtils-Manifest/lib |
5e4c4c91 | 34 | cpan/File-Path/lib |
7353f64c | 35 | ext/re |
f61462d5 | 36 | dist/Term-ReadLine/lib |
3110a055 | 37 | dist/Exporter/lib |
6de85bb4 | 38 | ext/File-Find/lib |
f4e064af | 39 | cpan/Text-Tabs/lib |
70c90635 | 40 | dist/constant/lib |
0c7fc641 | 41 | cpan/version/lib |
5e4c4c91 NC |
42 | ); |
43 | ||
3bdc51af DD |
44 | # Text-ParseWords used only in ExtUtils::Liblist::Kid::_win32_ext() |
45 | # the rest are for XS building on Win32, since nonxs and xs build simultaneously | |
46 | # on Win32 if parallel building | |
47 | push @toolchain, qw( | |
48 | cpan/Text-ParseWords/lib | |
49 | dist/ExtUtils-ParseXS/lib | |
50 | cpan/Getopt-Long/lib | |
51 | cpan/parent/lib | |
52 | cpan/ExtUtils-Constant/lib | |
53 | ) if $^O eq 'MSWin32'; | |
2d11a7e9 NC |
54 | push @toolchain, 'ext/VMS-Filespec/lib' if $^O eq 'VMS'; |
55 | ||
56 | unshift @INC, @toolchain; | |
57 | require File::Spec::Functions; | |
3bdc51af DD |
58 | require Cwd; |
59 | ||
60 | my $cwd = Cwd::getcwd(); | |
5e4c4c91 | 61 | |
2effe01f | 62 | # lib must be last, as the toolchain modules write themselves into it |
5e4c4c91 NC |
63 | # as they build, and it's important that @INC order ensures that the partially |
64 | # written files are always masked by the complete versions. | |
65 | ||
66 | my $inc = join ",\n ", | |
67 | map { "q\0$_\0" } | |
3bdc51af | 68 | (map {File::Spec::Functions::rel2abs($_, $cwd)} ( |
8ce7a7e8 DD |
69 | # faster build on the non-parallel Win32 build process |
70 | $^O eq 'MSWin32' ? ('lib', @toolchain ) : (@toolchain, 'lib') | |
71 | )); | |
5e4c4c91 | 72 | |
b78ac715 NC |
73 | open my $fh, '>', $file |
74 | or die "Can't open $file: $!"; | |
75 | ||
76 | my $error; | |
77 | ||
5e4c4c91 NC |
78 | # If any of the system's build tools are written in Perl, then this module |
79 | # may well be loaded by a much older version than we are building. So keep it | |
80 | # as backwards compatible as is easy. | |
b78ac715 | 81 | print $fh <<"EOT" or $error = "Can't print to $file: $!"; |
5e4c4c91 NC |
82 | #!perl |
83 | ||
66ff7d34 FC |
84 | # !!!!!!! DO NOT EDIT THIS FILE !!!!!!! |
85 | # This file is generated by write_buildcustomize.pl. | |
86 | # Any changes made here will be lost! | |
87 | ||
5e4c4c91 | 88 | # We are miniperl, building extensions |
a462003e FC |
89 | # Replace the first entry of \@INC ("lib") with the list of |
90 | # directories we need. | |
91 | splice(\@INC, 0, 1, $inc); | |
fdf90be3 | 92 | \$^O = '$osname'; |
f4eedc6b | 93 | __END__ |
5e4c4c91 | 94 | EOT |
b78ac715 NC |
95 | |
96 | if ($error) { | |
97 | close $fh | |
98 | or warn "Can't unlink $file after error: $!"; | |
99 | } else { | |
8e6dd9cb NC |
100 | if (close $fh) { |
101 | do $file and exit; | |
102 | $error = "Can't load generated $file: $@"; | |
103 | } else { | |
104 | $error = "Can't close $file: $!"; | |
105 | } | |
b78ac715 NC |
106 | } |
107 | ||
108 | # It's going very wrong, so try to remove the botched file. | |
109 | ||
110 | unlink $file | |
111 | or warn "Can't unlink $file after error: $!"; | |
112 | die $error; | |
113 | ||
b78ac715 | 114 | # ex: set ts=8 sts=4 sw=4 et: |