blob: 9e06ceb05ab5859a2238b06231680a51c8a06a9b [file] [log] [blame]
#!/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;
}