]> mj.ucw.cz Git - libucw.git/blobdiff - build/genconf
Moved object reading and writing functions where they belong.
[libucw.git] / build / genconf
index 2c3147861b67ef792eb8dbd7e8fbca98106057e1..7a53dc1b3c824749ec689b0a30db8d93feecef47 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 #!/usr/bin/perl
-# Configuration file preprocessor
-# (c) 2003 Martin Mares <mj@ucw.cz>
+# Configuration file and script preprocessor
+# (c) 2004 Martin Mares <mj@ucw.cz>
 
 use strict;
 use warnings;
 
 use strict;
 use warnings;
@@ -10,28 +10,28 @@ use warnings;
 open CF, $ARGV[2] or die "Unable to open $ARGV[2]";
 my %options = ();
 while (<CF>) {
 open CF, $ARGV[2] or die "Unable to open $ARGV[2]";
 my %options = ();
 while (<CF>) {
-       /^(CONFIG_\w+)=1/ || next;
+       /^(CONFIG_\w+)=[^0]/ || next;
        $options{$1} = 1;
 }
 close CF;
 
 open IN, $ARGV[0] or die "Unable to open $ARGV[0]";
 open OUT, ">$ARGV[1]" or die "Unable to create $ARGV[1]";
        $options{$1} = 1;
 }
 close CF;
 
 open IN, $ARGV[0] or die "Unable to open $ARGV[0]";
 open OUT, ">$ARGV[1]" or die "Unable to create $ARGV[1]";
-my @ifs = ();  # stack of conditions, 1=satisfied
+my @ifs = ();  # stack of conditions, 1=satisfied, -1=unsatisfied, 0=shadowed
 my $empty = 0; # last line was empty
 while (<IN>) {
 my $empty = 0; # last line was empty
 while (<IN>) {
-       if (/^#?ifdef\s+(\w+)/) {
-               push @ifs, !defined $options{$1};
+       if (/^#ifdef\s+(\w+)/) {
+               push @ifs, (@ifs && $ifs[$#ifs] <= 0) ? 0 : (defined $options{$1}) ? 1 : -1;
        } elsif (/^#ifndef\s+(\w+)/) {
        } elsif (/^#ifndef\s+(\w+)/) {
-               push @ifs, defined $options{$1};
-       } elsif (/^#?endif/) {
+               push @ifs, (@ifs && $ifs[$#ifs] <= 0) ? 0 : (defined $options{$1}) ? -1 : 1;
+       } elsif (/^#endif/) {
                defined pop @ifs || die "Improper nesting of conditionals";
                defined pop @ifs || die "Improper nesting of conditionals";
-       } elsif (/^#?else/) {
+       } elsif (/^#else/) {
                my $x = pop @ifs;
                defined $x || die "Improper nesting of conditionals";
                my $x = pop @ifs;
                defined $x || die "Improper nesting of conditionals";
-               push @ifs, !$x;
+               push @ifs, -$x;
        } else {
        } else {
-               @ifs && $ifs[$#ifs] && next;
+               @ifs && $ifs[$#ifs] <= 0 && next;
                if (/^$/) {
                        $empty && next;
                        $empty = 1;
                if (/^$/) {
                        $empty && next;
                        $empty = 1;