blob: 9e06ceb05ab5859a2238b06231680a51c8a06a9b [file] [log] [blame]
Thomas Klausnerb174cc62013-11-28 12:49:50 +01001#!/usr/bin/env perl
2# Haiku OS: we don't care!
3
4use strict;
5
6my $in = 'cmake-config.h.in';
7my $out = "$in.$$";
8
9my ($fin, $fout);
10open $fin, "< $in" or die "can't open $in: $!";
11open $fout, "> $out" or die "can't create $out: $!";
12
13my $zipconf_defines = read_zipconf_defines();
14
15my $in_defines = 0;
16while (my $line = <$fin>) {
17 if ($in_defines) {
18 if ($line =~ m,/* END DEFINES,) {
19 $in_defines = 0;
20 }
21 else {
22 next;
23 }
24 }
25 print $fout $line;
26 if ($line =~ m,/\* BEGIN DEFINES,) {
27 $in_defines = 1;
28 add_defines($fout, $zipconf_defines);
29 }
30}
31
32close $fin;
33close $fout;
34
35rename($out, $in);
36
37sub add_defines {
38 my ($fout, $zipconf_defines) = @_;
39
40 my $fin;
41 open $fin, "< CMakeLists.txt" or die "can't open CMakeLists.txt: $!";
42
43 while (my $line = <$fin>) {
44 my ($key, $value);
45
46 if ($line =~ m/CHECK_TYPE_SIZE\(.* (\S*)\)/) {
47 $key = $1;
48 $value = "\${$1}";
49 }
50 elsif ($line =~ m/CHECK_\S*\(.* (\S*)\)/) {
51 $key = $1;
52 }
53
54 if (defined($key) && !defined($zipconf_defines->{$key})) {
55 print $fout "#cmakedefine $key" . ($value ? " $value" : "") . "\n";
56 }
57 }
58
59 close $fin;
60}
61
62sub read_zipconf_defines {
63 my %zipconf_defines = ();
64
65 my $fin;
66 open $fin, "< cmake-zipconf.h.in" or die "can't open cmake-zipconf.h.in: $!";
67
68 while (my $line = <$fin>) {
69 if ($line =~ m/#cmakedefine\s+(\S+)/) {
70 $zipconf_defines{$1} = 1;
71 }
72 }
73
74 close $fin;
75
76 return \%zipconf_defines;
77}