#!./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)
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;
$/ = '';
(?! e \. g \. ) # Not e.g.
(?! \. \. \. ) # Not ...
(?! \d ) # Not 5.004
- ( [\w./]* [./] [\w./]* ) # Require . or / inside
- (?<! \. (?= \s ) ) # Do not include trailing dot
+ (?! read/ ) # Not read/write
+ (?! etc\. ) # Not etc.
+ (?! I/O ) # Not I/O
+ (
+ \$ ? # Allow leading $
+ [\w./]* [./] [\w./]* # Require . or / inside
+ )
+ (?<! \. (?= [\s)] ) ) # Do not include trailing dot
(?! [\w/] ) # Include all of it
}
(F<$1>)xg; # /usr/local
s/n[\0]t/n't/g; # undo can't, won't damage
}
-<GLOS>; # Skip the preamble
-while (<GLOS>) {
- process;
- print CONFIG;
+if ($opts{glossary}) {
+ <GLOS>; # Skip the preamble
+ while (<GLOS>) {
+ process;
+ print CONFIG;
+ }
}
print CONFIG <<'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;