X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=configpm;h=e0d5847d382b810dcead0d0454fe608c0008644d;hb=db28185901bfe308f53f975f7d61e927a5f806b5;hp=9f1a2e11cd876742ee8ffcfc4e58748293a4c455;hpb=8e0fc1cdff8c4d07f11a5b0bd5056e1acbe2a68a;p=p5sagit%2Fp5-mst-13.2.git diff --git a/configpm b/configpm index 9f1a2e1..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,26 +443,33 @@ 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; $/ = ''; sub process { - s/\A(\w*)\s+\(([\w.]+)\):\s*\n(\t?)/=item C<$1>\n\nFrom F<$2>:\n\n/m; - my $c = substr $1, 0, 1; - unless ($seen{$c}++) { - print CONFIG <\n\nFrom F<$2>:\n\n/m) { + my $c = substr $1, 0, 1; + unless ($seen{$c}++) { + print CONFIG < paragraphs @@ -446,8 +482,14 @@ EOF (?! e \. g \. ) # Not e.g. (?! \. \. \. ) # Not ... (?! \d ) # Not 5.004 - ( [\w./]* [./] [\w./]* ) # Require . or / inside - (?)xg; # /usr/local @@ -457,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'; @@ -480,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;