Mercurial > hg > buildtools
annotate autopoop @ 22:94da1cdc957c
Default svn2cl STRIPPREFIX to empty like in hg2cl.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Wed, 20 May 2020 12:45:06 +0300 |
parents | 86a7054b01d5 |
children |
rev | line source |
---|---|
0
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
1 #!/usr/bin/perl -w |
7 | 2 # autopoop v0.58 (C) 2008-2011 Matti 'ccr' Hamalainen |
0
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($$$$$$$$) { |
7 | 189 my ($mypath, $myfile, $scanned, $substs, $confsubsts, $defines, $usenames, $recurse) = @_; |
0
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
190 |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
191 # 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
|
192 my $filename = realpath($mypath."/".$myfile); |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
193 if (defined($filename)) { |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
194 if (defined($scanned->{$filename})) { |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
195 $scanned->{$filename}++; |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
196 return; |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
197 } |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
198 $scanned->{$filename} = 1; |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
199 } else { |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
200 $filename = $mypath."/".$myfile; |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
201 } |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
202 |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
203 #print "ASDF: $filename\n"; |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
204 |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
205 # Scan file, if found |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
206 if (open(my $SCANFILE, "<", $filename)) { |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
207 print "- Scanning ".shortpath($filename)." ...\n"; |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
208 my $line = 0; |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
209 while (<$SCANFILE>) { |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
210 $line++; |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
211 chop; |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
212 if (/^#/) { |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
213 # ignore comment lines |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
214 } else { |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
215 |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
216 while (/[^\$]\$\{([A-Za-z0-9_]+)\}/g) { |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
217 addhash($usenames, $substs, $filename, $1, $line); |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
218 } |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
219 while (/[^\$]\$\(([A-Za-z0-9_]+)\)/g) { |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
220 addhash($usenames, $substs, $filename, $1, $line); |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
221 } |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
222 while (/\@([A-Za-z0-9_]+)\@/g) { |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
223 addhash($usenames, $confsubsts, $filename, $1, $line); |
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 |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
226 if (/^ifdef\s+([A-Za-z0-9_]+)/g) { |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
227 addhash($usenames, $substs, $filename, $1, $line); |
6 | 228 } elsif (/^([A-Za-z][A-Za-z0-9_]+)\s*[\+:]?=/) { |
0
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
229 addhash($usenames, $defines, $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 elsif (/^include (\S+)/) { |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
232 scanfile($mypath, "$1", $scanned, $substs, $confsubsts, $defines, $usenames, $recurse); |
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 } |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
236 close $SCANFILE; |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
237 } |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
238 |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
239 # Recurse into subdirectories |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
240 if ($recurse) { |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
241 opendir(DIR, $mypath) || return; |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
242 my @dirs = grep { /^[^\.]/ && -d "$mypath/$_" } readdir(DIR); |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
243 closedir(DIR); |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
244 foreach my $dir (@dirs) { |
d72d5d73b93a
Added Autopoop and mkchangelog.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff
changeset
|
245 scanfile($mypath."/".$dir, $myfile, $scanned, $substs, $confsubsts, $defines, $usenames, $recurse); |
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 } |