1
0
mirror of https://github.com/moparisthebest/wget synced 2024-07-03 16:38:41 -04:00

build_info.pl improvements, advertise large-file support.

This commit is contained in:
Micah Cowan 2009-10-09 02:02:39 -07:00
parent 3648b91197
commit 186ee6d0ff
5 changed files with 103 additions and 63 deletions

View File

@ -1,3 +1,11 @@
2009-10-09 Micah Cowan <micah@cowan.name>
* 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 <micah@cowan.name>
* vms/vms.c: Moved to src/src.c.

View File

@ -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 $/; <DATA> }, "\n";
print <<EOC;
open(my $fh, '>', "$file") or die "Cannot open $file: $!";
print $fh do { local $/; <DATA> }, "\n";
print $fh <<EOC;
const char* (compiled_features[]) =
{
EOC
my @output;
foreach my $define (@$defines) {
if (!exists $block->{$define}) {
push @output, <<EOC;
#ifdef $define
"+$feature->{$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 <<EOC;
#if $ch_check
"+$name/$ch_name",
EOC
}
else {
push @output, <<EOC;
$block->{$define}
foreach my $choice (@$check) {
($ch_name, $ch_check) = @$choice;
print $fh <<EOC;
#elif $ch_check
"+$name/$ch_name",
EOC
}
print $fh <<EOC;
#else
"-$name",
#endif
EOC
} else {
print $fh <<EOC;
#if $check
"+$name",
#else
"-$name",
#endif
EOC
}
}
print join "\n", @output;
print <<EOC;
print $fh <<EOC;
/* sentinel value */
NULL

View File

@ -1,3 +1,9 @@
2009-10-09 Micah Cowan <micah@cowan.name>
* 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 <micah@cowan.name>
* sysdep.h: Unconditionally include stdbool.h (gnulib has it for

View File

@ -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) \

View File

@ -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