diff options
author | Alberto Gonzalez Iniesta <agi@inittab.org> | 2012-02-21 15:53:40 +0100 |
---|---|---|
committer | Alberto Gonzalez Iniesta <agi@inittab.org> | 2012-02-21 15:53:40 +0100 |
commit | 349cfa7acb95abe865209a28e417ec74b56f9bba (patch) | |
tree | ad65334821b587c4ecdd461be84c94305ffdb888 /install-win32/ifdef.pl |
Imported Upstream version 2.2.1upstream/2.2.1
Diffstat (limited to 'install-win32/ifdef.pl')
-rw-r--r-- | install-win32/ifdef.pl | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/install-win32/ifdef.pl b/install-win32/ifdef.pl new file mode 100644 index 0000000..d240ebb --- /dev/null +++ b/install-win32/ifdef.pl @@ -0,0 +1,53 @@ +#!/usr/bin/perl + +# Simple ifdef/else/endif processor. + +die "usage: ifdef [-C<command-prefix>] [-Dname ...] [control-file ...] " if (@ARGV[0] =~ /^(-h|--help)$/); + +%Parms = (); + +$pre = "!"; +while ($arg=shift(@ARGV)) { + if ($arg =~ /^-/) { + if ($arg =~ /^-D(\w+)$/) { + $Parms{$1} = 1; + } elsif ($arg =~ /-C(.*)$/) { + $pre = $1; + } else { + die "unrecognized option: $arg"; + } + } else { + open(CONTROL, "< $arg") or die "cannot open $arg"; + while (<CONTROL>) { + if (/^!define\s+(\w+)/) { + $Parms{$1} = 1; + } + } + } +} + +sub ifdef { + my ($var, $enabled) = @_; + my $def = 0; + $def = 1 if (defined $Parms{$var}) || ($var eq "true"); + $def = 0 if $var eq "false"; + while (<STDIN>) { + if (/^\s*\Q$pre\Eifdef\s+(\w+)\s*$/) { + return 1 if ifdef ($1, $def & $enabled); + } elsif (/^\s*\Q$pre\Eelseif\s+(\w+)\s*$/) { + $def = $def ^ 1; + return ifdef ($1, $def & $enabled); + } elsif (/^\s*\Q$pre\Eelse\s*$/) { + $def = $def ^ 1; + } elsif (/^\s*\Q$pre\Eendif\s*$/) { + return 0; + } elsif (/^\s*\Q$pre\E/) { + die "unrecognized command: $_"; + } else { + print if $def && $enabled; + } + } + return 1; +} + +ifdef("true", 1); |