64dbc3429cb50a323955918365076cb1e72e48e9
[platform/upstream/automake.git] / aclocal.in
1 #!@PERL@
2 # -*- perl -*-
3 # @configure_input@
4
5 eval 'exec @PERL@ -S $0 ${1+"$@"}'
6     if 0;
7
8 # aclocal - scan configure.in and generate aclocal.m4.
9
10 # Some constants.
11 $VERSION = "@VERSION@";
12 $PACKAGE = "@PACKAGE@";
13 $prefix = "@prefix@";
14 $acdir = "@datadir@/@PACKAGE@";
15
16 # Some globals.
17
18 # Exit status.
19 $exit_status = 0;
20
21 # Text to output.
22 $output = '';
23
24 # Output file name.
25 $output_file = 'aclocal.m4';
26
27 # Which files have been seen.
28 %file_seen = ();
29
30 # How much to say.
31 $verbosity = 0;
32
33 @obsolete_macros =
34     (
35      'AC_FEATURE_CTYPE',
36      'AC_FEATURE_ERRNO',
37      'AC_FEATURE_EXIT',
38      'AC_SYSTEM_HEADER',
39      'fp_C_PROTOTYPES',
40      'fp_FUNC_FNMATCH',
41      'fp_PROG_CC_STDC',
42      'fp_PROG_INSTALL',
43      'fp_WITH_DMALLOC',
44      'fp_WITH_REGEX',
45      'gm_PROG_LIBTOOL',
46      'jm_MAINTAINER_MODE',
47      'md_PATH_PROG',
48      'md_TYPE_PTRDIFF_T',
49      'ud_GNU_GETTEXT',
50      'ud_LC_MESSAGES',
51      'ud_PATH_LISPDIR',
52      'ud_WITH_NLS'
53      );
54
55 $obsolete_rx = '(' . join ('|', @obsolete_macros) . ')';
56
57 \f
58
59 &parse_arguments (@ARGV);
60 &scan_configure;
61 if (! $exit_status)
62 {
63     &write_aclocal;
64 }
65
66 exit $exit_status;
67
68 ################################################################
69
70 # Print usage and exit.
71 sub usage
72 {
73     local ($status) = @_;
74
75     print "Usage: aclocal [OPTIONS] ...\n";
76     print "\
77   --acdir=DIR           directory holding config files
78   --help                print this help, then exit
79   --output=FILE         put output in FILE (default aclocal.m4)
80   --verbose             don't be silent
81   --version             print version number, then exit\n";
82
83     exit $status;
84 }
85
86 # Parse command line.
87 sub parse_arguments
88 {
89     local (@arglist) = @_;
90
91     while (@arglist)
92     {
93         if ($arglist[0] =~ /^--acdir=(.+)$/)
94         {
95             $acdir = $1;
96         }
97         elsif ($arglist[0] =~/^--output=(.+)$/)
98         {
99             $output_file = $1;
100         }
101         elsif ($arglist[0] eq '--verbose')
102         {
103             ++$verbosity;
104         }
105         elsif ($arglist[0] eq '--version')
106         {
107             print "aclocal - $PACKAGE $VERSION\n";
108             exit 0;
109         }
110         elsif ($arglist[0] eq '--help')
111         {
112             &usage (0);
113         }
114         else
115         {
116             &usage (1);
117         }
118
119         shift (@arglist);
120     }
121 }
122
123 ################################################################
124
125 sub scan_configure
126 {
127     # First, construct list of regexps to match the things we actually
128     # have.
129     opendir (DIR, $acdir)
130         || die "aclocal: couldn't open directory \`$acdir': $!\n";
131     local ($search, $elt);
132     foreach (sort grep (! /^\./, readdir (DIR)))
133     {
134         # Only examine .m4 files.
135         next unless s/\.m4$//;
136
137         # Skip some files when running out of srcdir.  Eg "aclocal.m4"
138         # must be skipped.
139         next unless /^[A-Za-z]+_[A-Z_]+$/;
140
141         print STDERR "Finding $_\n" if $verbosity;
142         ($elt = $_) =~ s/(\W)/\\$1/g;
143         $search .= "&add_file (\"$elt\") if /$elt/;\n";
144     }
145     closedir (DIR);
146
147     # Construct a new function that does the searching.  We use a
148     # function (instead of just evalling $search in the loop) so that
149     # "die" is correctly and easily propagated if run.
150     eval 'sub search { ' . $search . '};';
151
152     open (CONFIGURE, "configure.in")
153         || die "aclocal: couldn't open \`configure.in': $!\n";
154
155     while (<CONFIGURE>)
156     {
157         # Remove comments from current line.
158         s/\bdnl\b.*$//;
159         s/\#.*$//;
160
161         if (/$obsolete_rx/o)
162         {
163             chop;
164             warn "configure.in: $.: obsolete macro \`$_'\n";
165             $exit_status = 1;
166             next;
167         }
168
169         # Search for things we know about.  The "search" sub is
170         # constructed dynamically, above.
171         &search;
172     }
173
174     close (CONFIGURE);
175
176     # Include this file if it exists
177     if (-f 'acinclude.m4')
178     {
179         &add_file ('acinclude.m4');
180     }
181 }
182
183 ################################################################
184
185 # Add a file to output.
186 sub add_file
187 {
188     local ($file) = @_;
189     local ($fullfile) = $file;
190
191     return if ($file_seen{$file});
192     $file_seen{$file} = 1;
193
194     if (! -f $file)
195     {
196         $fullfile = $acdir . '/' . $file . '.m4';
197         if (! -f $fullfile)
198         {
199             # Maybe the file is an Autoconf built-in.  Check the only
200             # way we know how.  Suggestions on how to make this better
201             # are welcome.
202             return if $file =~ /^AC_[A-Z_]+$/;
203             die "aclocal: file \`$file' not found\n";
204         }
205     }
206
207     open (FILE, $fullfile)
208         || die "aclocal: couldn't open \`$fullfile': $!\n";
209
210     local (@rlist);
211     while (<FILE>)
212     {
213         $output .= $_;
214         # See if some other macro is required.
215         if (/AC_REQUIRE\(\[?([^])]*)\]?\)/)
216         {
217             push (@rlist, $1);
218         }
219     }
220     $output .= "\n";
221     close (FILE);
222
223     foreach $file (@rlist)
224     {
225         &add_file ($file);
226     }
227 }
228
229 ################################################################
230
231 # Write output.
232 sub write_aclocal
233 {
234     return if ! $output;
235
236     print STDERR "Writing aclocal.m4\n" if $verbosity;
237
238     open (ACLOCAL, "> aclocal.m4")
239         || die "aclocal: couldn't open \`aclocal.m4' for writing: $!\n";
240     print ACLOCAL "dnl aclocal.m4 generated automatically by aclocal $VERSION\n\n";
241     print ACLOCAL $output;
242     close (ACLOCAL);
243 }