annotate autopoop @ 0:d72d5d73b93a

Added Autopoop and mkchangelog.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 22 Apr 2008 14:31:44 +0300
parents
children 5665a846d227
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 #!/usr/bin/perl -w
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 # autopoop v0.57 (C) 2008 Matti 'ccr' Hamalainen
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3 #
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4 # Tries to generate extra.mk.in from known configure.ac and other
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
5 # autoconf m4-macros, scanning against Makefiles. Also checks for
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 # missing / unsubstituted symbols, etc.
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7 #
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
8 # Requirements:
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
9 # - Recent enough GNU Autoconf (and requirements for that)
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
10 # - Perl 5
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
11 #
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
12 # TODO:
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
13 # - see fixmes
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
14 # - document this
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
15 # - find bugs
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
16 # - ???
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
17 # - profit
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
18 #
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
19 use strict;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
20 use Cwd qw(getcwd realpath);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
21
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
22 # List of subdirectories to check for additional Autoconf m4 macros
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
23 my @m4testdirs = ("m4", "unix");
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
24
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
25 # Misc. settings
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
26 my $makefile = "Makefile";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
27 my $extrasys = "extra.mk";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
28 my $buildsys = "buildsys.mk";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
29 my $tmpfile = "autopoop.tmp";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
30 my $autom4te = "autom4te";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
31
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
32 # Things that may be set by user
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
33 my %bsdefines = (
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
34 "DESTDIR" => 1,
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
35 );
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
36
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
37 # Special substitutions
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
38 my %confdefines = (
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
39 # "VPATH" => "srcdir",
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
40 # "SET_MAKE" => "",
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
41 );
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
42
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
43
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
44 ### Function prototypes
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
45 sub shortpath($);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
46 sub scanfile($$$$$$$$);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
47
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
48
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
49 ### Argument handling
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
50 my $pcwd = getcwd();
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
51 my $argc = ($#ARGV + 1);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
52 print "Autopoop v0.57 (C) 2008 Matti 'ccr' Hamalainen\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
53 die("Usage: autopoop <configurefile> <outfile> [autom4te options]\n".
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
54 "Example: autopoop configure.ac extra.mk.in\n\n".
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
55 "NOTICE! Assumes following files are used:\n".
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
56 "$buildsys\[.in\], $extrasys, $makefile\n\n") unless ($argc >= 2);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
57 my $configure = shift;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
58 my $outfile = shift;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
59
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
60
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
61 ### Execute Autoconf 'autom4te' ...
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
62 my @args = (@ARGV);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
63 foreach my $dir (@m4testdirs) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
64 if (-d $dir) { push(@args, ("-I", $dir)); }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
65 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
66
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
67 push(@args, (
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
68 "--force", "--no-cache", "--melt", "--language=autoconf",
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
69 "--trace=AC_SUBST", "-o", $tmpfile, $configure));
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
70
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
71 print "- Running $autom4te ".join(" ", @args)." ...\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
72 system($autom4te, @args) == 0 or die("Failed to execute $autom4te: $?\n");
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
73
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
74
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
75 ### Paf files
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
76 $buildsys = realpath($buildsys);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
77 $extrasys = realpath($extrasys);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
78 $outfile = realpath($outfile);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
79
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
80
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
81 ### Process results
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
82 open(INFILE,"<".$tmpfile) or die("Could not open '$tmpfile'!\n");
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
83 while (<INFILE>) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
84 chop;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
85 my @entries = split(/:/);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
86 my $key = $entries[3];
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
87 unless ($key =~ /_(FALSE|TRUE)$/) { $confdefines{$key} = $key; }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
88 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
89 close INFILE;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
90 unlink($tmpfile);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
91
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
92
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
93 ### Scan Makefiles and depencies
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
94 my %makesubsts = ();
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
95 my %confsubsts = ();
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
96 my %makedefines = ();
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
97 my %scanned = ($outfile => 1, $extrasys => 1);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
98 scanfile(".", $makefile, \%scanned, \%makesubsts, \%confsubsts, \%makedefines, 1, 1);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
99 scanfile("", $buildsys, \%scanned, \%makesubsts, \%confsubsts, \%makedefines, 1, 0);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
100
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
101
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
102 ### Scan buildsys.mk.in
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
103 my %bssubsts = ();
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
104 scanfile("", $buildsys.".in", \%scanned, \%bssubsts, \%bssubsts, \%bsdefines, 0, 0);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
105
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
106
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
107 my %globdefs = ();
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
108 foreach my $file (keys %makedefines) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
109 foreach my $s (keys %{$makedefines{$file}}) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
110 $globdefs{$s} = 1;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
111 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
112 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
113
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
114
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
115 ### Compare results
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
116 print "- Checking for used, but possibly undefined Make variables:\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
117 foreach my $file (keys %makesubsts) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
118 foreach my $s (sort { $a cmp $b } keys %{$makesubsts{$file}}) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
119 if (!defined($confdefines{$s}) && !defined($makedefines{$file}{$s}) && !defined($bsdefines{$s})) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
120 my $err = 0;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
121 if (!defined($globdefs{$s})) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
122 $err = 1;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
123 } elsif ($file ne $buildsys && $file ne $outfile) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
124 $err = 2;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
125 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
126 if ($err) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
127 printf " %-20s", "'$s'";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
128 print " in ".shortpath($file).":".$makesubsts{$file}{$s}." ($err)\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
129 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
130 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
131 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
132 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
133 print qq|Legend:
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
134 (1) = Not defined anywhere (or misdetected).
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
135 (2) = Defined 'somewhere', but unsure if symbol is propagated.
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
136
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
137 |;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
138
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
139
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
140 print "- Checking for used, but possibly undefined substitutions:\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
141 foreach my $file (keys %confsubsts) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
142 foreach my $s (keys %{$confsubsts{$file}}) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
143 if (!defined($confdefines{$s})) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
144 printf " %-20s", "'$s'";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
145 print " in ".shortpath($file).":".$confsubsts{$file}{$s}."\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
146 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
147 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
148 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
149 print "\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
150
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
151
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
152 ### Output stuff
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
153 print "- Outputting '$outfile'\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
154 open(OUTFILE, ">", $outfile) or die("Could not open '$outfile'!\n");
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
155 foreach my $s (keys %confdefines) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
156 if ($confdefines{$s} ne "") {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
157 print OUTFILE "$s ?= \@".$confdefines{$s}."\@\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
158 } else {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
159 print OUTFILE "\@".$s."\@\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
160 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
161 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
162 close OUTFILE;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
163
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
164 print "- Done.\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
165
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
166
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
167 ###
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
168 ### Functions
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
169 ###
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
170 sub shortpath($) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
171 if (index($_[0], $pcwd) == 0) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
172 return substr($_[0], length($pcwd) + 1);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
173 } else {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
174 return $_[0];
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
175 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
176 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
177
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
178 sub addhash($$$$$)
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
179 {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
180 # if ($usenames) { $substs->{$filename}{$1} = $line; } else { $substs->{$1} = $line; }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
181 if ($_[0]) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
182 $_[1]->{$_[2]}{$_[3]} = $_[4];
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
183 } else {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
184 $_[1]->{$_[3]} = $_[4];
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
185 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
186 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
187
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
188 sub scanfile($$$$$$$$) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
189 my $mypath = $_[0];
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
190 my $myfile = $_[1];
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
191
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
192 my $scanned = $_[2];
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
193 my $substs = $_[3];
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
194 my $confsubsts = $_[4];
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
195 my $defines = $_[5];
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
196
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
197 my $usenames = $_[6];
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
198 my $recurse = $_[7];
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
199
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
200 # Form real path and check if we have already scanned the file
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
201 my $filename = realpath($mypath."/".$myfile);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
202 if (defined($filename)) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
203 if (defined($scanned->{$filename})) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
204 $scanned->{$filename}++;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
205 return;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
206 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
207 $scanned->{$filename} = 1;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
208 } else {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
209 $filename = $mypath."/".$myfile;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
210 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
211
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
212 #print "ASDF: $filename\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
213
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
214 # Scan file, if found
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
215 if (open(my $SCANFILE, "<", $filename)) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
216 print "- Scanning ".shortpath($filename)." ...\n";
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
217 my $line = 0;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
218 while (<$SCANFILE>) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
219 $line++;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
220 chop;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
221 if (/^#/) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
222 # ignore comment lines
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
223 } else {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
224
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
225 while (/[^\$]\$\{([A-Za-z0-9_]+)\}/g) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
226 addhash($usenames, $substs, $filename, $1, $line);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
227 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
228 while (/[^\$]\$\(([A-Za-z0-9_]+)\)/g) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
229 addhash($usenames, $substs, $filename, $1, $line);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
230 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
231 while (/\@([A-Za-z0-9_]+)\@/g) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
232 addhash($usenames, $confsubsts, $filename, $1, $line);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
233 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
234
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
235 if (/^ifdef\s+([A-Za-z0-9_]+)/g) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
236 addhash($usenames, $substs, $filename, $1, $line);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
237 } elsif (/^([A-Za-z][A-Za-z0-9_]+)\s*[\+]?=/) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
238 addhash($usenames, $defines, $filename, $1, $line);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
239 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
240 elsif (/^include (\S+)/) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
241 scanfile($mypath, "$1", $scanned, $substs, $confsubsts, $defines, $usenames, $recurse);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
242 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
243 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
244 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
245 close $SCANFILE;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
246 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
247
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
248 # Recurse into subdirectories
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
249 if ($recurse) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
250 opendir(DIR, $mypath) || return;
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
251 my @dirs = grep { /^[^\.]/ && -d "$mypath/$_" } readdir(DIR);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
252 closedir(DIR);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
253 foreach my $dir (@dirs) {
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
254 scanfile($mypath."/".$dir, $myfile, $scanned, $substs, $confsubsts, $defines, $usenames, $recurse);
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
255 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
256 }
d72d5d73b93a Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
257 }