#!/usr/bin/perl # Generate build_info.c. # Copyright (C) 2009 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . use strict; use warnings; use FindBin qw($Bin); use File::Spec (); my $file = File::Spec->catfile($Bin, 'src', 'build_info.c.in'); { my $data = parse_config(); output_code($data); } sub parse_config { my (%block, @defines, %feature); 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; } sub output_code { my ($block, $defines, $feature) = map $_[0]->{$_}, qw(block defines feature); print do { local $/; }, "\n"; print <{$define}) { push @output, <{$define}", #else "-$feature->{$define}", #endif EOC } else { push @output, <{$define} EOC } } print join "\n", @output; print <