X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=configpm;h=e0d5847d382b810dcead0d0454fe608c0008644d;hb=db28185901bfe308f53f975f7d61e927a5f806b5;hp=a22f9a2404052f2895e8300e4cd55ecc0f2a04ca;hpb=a1151a3c9c10fc898227cdf7ae1192901ad8fd45;p=p5sagit%2Fp5-mst-13.2.git diff --git a/configpm b/configpm index a22f9a2..e0d5847 100755 --- a/configpm +++ b/configpm @@ -1,7 +1,36 @@ #!./miniperl -w -my $config_pm = $ARGV[0] || 'lib/Config.pm'; +# following options are recognized: +# --no-glossary - no glossary file inclusion, for compactness +# --cross=PALTFORM - crosscompiling for PLATFORM +my %opts = ( + # %known_opts enumerates allowed opts as well as specifies default and initial values + my %known_opts = ( + 'cross' => '', + 'glossary' => 1, + ), + # options itself + my %specified_opts = ( + (map {/^--([\-_\w]+)=(.*)$/} @ARGV), # --opt=smth + (map {/^no-?(.*)$/i?($1=>0):($_=>1)} map {/^--([\-_\w]+)$/} @ARGV), # --opt --no-opt --noopt + ), +); +die "option '$_' is not recognized" for grep {!exists $known_opts{$_}} keys %specified_opts; +@ARGV = grep {!/^--/} @ARGV; + +my $config_pm; my $glossary = $ARGV[1] || 'Porting/Glossary'; + +if ($opts{cross}) { + # creating cross-platform config file + mkdir "xlib"; + mkdir "xlib/$opts{cross}"; + $config_pm = $ARGV[0] || "xlib/$opts{cross}/Config.pm"; +} +else { + $config_pm = $ARGV[0] || 'lib/Config.pm'; +} + @ARGV = "./config.sh"; # list names to put first (and hence lookup fastest) @@ -414,7 +443,9 @@ in such cases. ENDOFTAIL -open(GLOS, "<$glossary") or die "Can't open $glossary: $!"; +if ($opts{glossary}) { + open(GLOS, "<$glossary") or die "Can't open $glossary: $!"; +} %seen = (); $text = 0; $/ = ''; @@ -468,10 +499,12 @@ EOF s/n[\0]t/n't/g; # undo can't, won't damage } -; # Skip the preamble -while () { - process; - print CONFIG; +if ($opts{glossary}) { + ; # Skip the preamble + while () { + process; + print CONFIG; + } } print CONFIG <<'ENDOFTAIL'; @@ -491,6 +524,34 @@ ENDOFTAIL close(CONFIG); close(GLOS); +# Now create Cross.pm if needed +if ($opts{cross}) { + open CROSS, ">lib/Cross.pm" or die "Can not open >lib/Cross.pm: $!"; + my $cross = <<'EOS'; +# typical invocation: +# perl -MCross Makefile.PL +# perl -MCross=wince -V:cc +package Cross; + +sub import { + my ($package,$platform) = @_; + unless (defined $platform) { + # if $platform is not specified, then use last one when + # 'configpm; was invoked with --cross option + $platform = '***replace-marker***'; + } + @INC = map {/\blib\b/?(do{local $_=$_;s/\blib\b/xlib\/$platform/;$_},$_):($_)} @INC; + $::Cross::platform = $platform; +} + +1; +EOS + $cross =~ s/\*\*\*replace-marker\*\*\*/$opts{cross}/g; + print CROSS $cross; + close CROSS; +} + + # Now do some simple tests on the Config.pm file we have created unshift(@INC,'lib'); require $config_pm;