#!/usr/bin/env perl # Haiku OS: we don't care! use strict; my $in = 'cmake-config.h.in'; my $out = "$in.$$"; my ($fin, $fout); open $fin, "< $in" or die "can't open $in: $!"; open $fout, "> $out" or die "can't create $out: $!"; my $zipconf_defines = read_zipconf_defines(); my $in_defines = 0; while (my $line = <$fin>) { if ($in_defines) { if ($line =~ m,/* END DEFINES,) { $in_defines = 0; } else { next; } } print $fout $line; if ($line =~ m,/\* BEGIN DEFINES,) { $in_defines = 1; add_defines($fout, $zipconf_defines); } } close $fin; close $fout; rename($out, $in); sub add_defines { my ($fout, $zipconf_defines) = @_; my $fin; open $fin, "< CMakeLists.txt" or die "can't open CMakeLists.txt: $!"; while (my $line = <$fin>) { my ($key, $value); if ($line =~ m/CHECK_TYPE_SIZE\(.* (\S*)\)/) { $key = $1; $value = "\${$1}"; } elsif ($line =~ m/CHECK_\S*\(.* (\S*)\)/) { $key = $1; } if (defined($key) && !defined($zipconf_defines->{$key})) { print $fout "#cmakedefine $key" . ($value ? " $value" : "") . "\n"; } } close $fin; } sub read_zipconf_defines { my %zipconf_defines = (); my $fin; open $fin, "< cmake-zipconf.h.in" or die "can't open cmake-zipconf.h.in: $!"; while (my $line = <$fin>) { if ($line =~ m/#cmakedefine\s+(\S+)/) { $zipconf_defines{$1} = 1; } } close $fin; return \%zipconf_defines; }