diff --git a/ChangeLog b/ChangeLog index 111460c9..f24317b6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-10-09 Micah Cowan + + * build_aux/build_info.pl: Reworked the input format. Eliminated + support, and need, for arbitrary #if blocks. Introduced + "choices", and explicitly open the .c file rather than print to + STDOUT, so we avoid creating the file if we find problems with + the input. Options are advertised in alphabetical order. + 2009-09-24 Micah Cowan * vms/vms.c: Moved to src/src.c. diff --git a/build-aux/build_info.pl b/build-aux/build_info.pl index a006b6da..372fe42e 100755 --- a/build-aux/build_info.pl +++ b/build-aux/build_info.pl @@ -20,8 +20,7 @@ use strict; use warnings; -use FindBin qw($Bin); -use File::Spec (); +use Carp qw(croak); my $file = shift @ARGV; @@ -32,59 +31,92 @@ my $file = shift @ARGV; sub parse_config { - my (%block, @defines, %feature); + my $features = []; + my $choice_key; + my $choice = []; + my $list = $features; + + open(my $fh, '<', "$file.in") or die "Cannot open $file.in: $!"; + + while (<$fh>) { + next if /^\s*$/; + + if ($list eq $choice) { + unless (s/^\s+//) { + $list = $features; + push @$features, [$choice_key, $choice]; + $choice = []; + undef $choice_key; + } + } elsif (/^([A-Za-z0-9_-]+) \s+ choice:\s*$/x) { + $choice_key = $1; + $list = $choice; + next; + } + + if (/^([A-Za-z0-9_-]+) \s+ (.*)$/x) { + push @$list, [$1, $2]; + } else { + croak "Can't parse line: $_"; + } + } + + if ($list eq $choice) { + push @$features, [$choice_key, $choice]; + } - open(my $fh, '<', $file) or die "Cannot open $file: $!"; - my $cfg = do { local $/; <$fh> }; close($fh); - while ($cfg =~ /^\ *? (\w+) (?:\s+?)? (\w+?)? \s*$/gmx) { - $feature{$1} = $2 || '_MISSING'; - push @defines, $1; - } - while ($cfg =~ /^(\ *? \#\w+? \s+? (\w+) .+ \#\w+)/gmsx) { - $block{$2} = $1; - } - - my %data = ( - block => \%block, - defines => \@defines, - feature => \%feature, - ); - - return \%data; + return $features; } sub output_code { - my ($block, $defines, $feature) = - map $_[0]->{$_}, qw(block defines feature); + my $features = shift; - print do { local $/; }, "\n"; - print <', "$file") or die "Cannot open $file: $!"; + + print $fh do { local $/; }, "\n"; + print $fh <{$define}) { - push @output, <{$define}", -#else - "-$feature->{$define}", -#endif + foreach my $feature (sort { $a->[0] cmp $b->[0] } @$features) { + my ($name, $check) = @$feature; + + if (ref $check eq 'ARRAY') { + my ($ch_name, $ch_check) = @{ shift @$check }; + print $fh <{$define} + foreach my $choice (@$check) { + ($ch_name, $ch_check) = @$choice; + + print $fh < + + * build_info.c.in: Adapt to new input format. Added a check for + large-file support. Replaced the "openssl" and "gnutls" + advertisements with a single "ssl/foo" advertisement. + 2009-09-30 Micah Cowan * sysdep.h: Unconditionally include stdbool.h (gnulib has it for diff --git a/src/Makefile.am b/src/Makefile.am index 44b62fb3..e1b997ee 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -65,7 +65,7 @@ MD5_LDADD = @MD5_LDADD@ build_info.c: $(srcdir)/Makefile.am $(srcdir)/build_info.c.in $(PERL) $(top_srcdir)/build-aux/build_info.pl \ - $(srcdir)/build_info.c.in > $@ + $(srcdir)/build_info.c ESCAPEQUOTE = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/' version.c: $(wget_SOURCES) ../lib/libgnu.a $(MD5_LDADD) \ diff --git a/src/build_info.c.in b/src/build_info.c.in index 7530dae0..39311811 100644 --- a/src/build_info.c.in +++ b/src/build_info.c.in @@ -1,24 +1,18 @@ -ENABLE_DIGEST digest -ENABLE_IPV6 ipv6 -ENABLE_NLS nls -ENABLE_NTLM ntlm -ENABLE_OPIE opie -HAVE_MD5 -HAVE_SSL https -HAVE_LIBGNUTLS gnutls -HAVE_LIBSSL openssl -ENABLE_IRI iri +digest defined ENABLE_DIGEST +https defined HAVE_SSL +ipv6 defined ENABLE_IPV6 +iri defined ENABLE_IRI +large-file SIZEOF_OFF_T >= 8 -#ifdef HAVE_MD5 -#ifdef HAVE_BUILTIN_MD5 - "+md5/builtin", -#elif HAVE_OPENSSL_MD5 - "+md5/openssl", -#elif HAVE_SOLARIS_MD5 - "+md5/solaris", -#else -#error "md5 set, but no library found!", -#endif -#else - "-md5", -#endif +md5 choice: + builtin defined HAVE_BUILTIN_MD5 + openssl defined HAVE_OPENSSL_MD5 + solaris defined HAVE_SOLARIS_MD5 + +nls defined ENABLE_NLS +ntlm defined ENABLE_NTLM +opie defined ENABLE_OPIE + +ssl choice: + openssl defined HAVE_LIBSSL + gnutls defined HAVE_LIBGNUTLS