annotate build-aux/prefix-gnulib-mk @ 17360:6959449c25f6

prefix-gnulib-mk: give better diagnostics * build-aux/prefix-gnulib-mk: Don't just "die". Give better diagnostics upon failure.
author Jim Meyering <meyering@fb.com>
date Sun, 27 Jan 2013 09:54:55 -0800
parents 4aefd9877c8a
children a653fc661fde
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17093
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
1 eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
2 & eval 'exec perl -wS "$0" $argv:q'
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
3 if 0;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
4
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
5 use strict;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
6 use IO::File;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
7 use Getopt::Long;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
8 use File::Basename; # for dirname
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
9
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
10 my $VERSION = '2012-01-21 17:13'; # UTC
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
11 (my $ME = $0) =~ s|.*/||;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
12
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
13 my $prefix;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
14 my $lib_name;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
15
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
16 sub usage ($)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
17 {
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
18 my ($exit_code) = @_;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
19 my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
20 if ($exit_code != 0)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
21 {
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
22 print $STREAM "Try '$ME --help' for more information.\n";
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
23 }
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
24 else
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
25 {
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
26 print $STREAM <<EOF;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
27 Usage: $ME --lib-name=NAME FILE
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
28 or: $ME [--help|--version]
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
29 Rewrite a gnulib-tool-generated FILE like lib/gnulib.mk to work with
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
30 automake's subdir-objects.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
31
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
32 OPTIONS:
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
33
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
34 This option must be specified:
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
35
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
36 --lib-name=NAME library name, often "lib\$project"
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
37
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
38 The following are optional:
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
39
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
40 --help display this help and exit
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
41 --version output version information and exit
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
42
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
43 EOF
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
44 }
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
45 exit $exit_code;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
46 }
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
47
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
48 # contents ($FILE_NAME)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
49 # ---------------------
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
50 sub contents ($)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
51 {
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
52 my ($file) = @_;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
53 local $/; # Turn on slurp-mode.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
54 my $f = new IO::File "< $file" or die "$file";
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
55 my $contents = $f->getline or die "$file";
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
56 $f->close;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
57 return $contents;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
58 }
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
59
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
60 # prefix_word ($WORD)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
61 # -------------------
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
62 # Do not prefix special words such as variable dereferences. Also,
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
63 # "Makefile" is really "Makefile", since precisely there is no
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
64 # lib/Makefile.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
65 sub prefix_word ($)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
66 {
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
67 local ($_) = @_;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
68 $_ = $prefix . $_
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
69 unless (/^-/ || m{^\$\(\w+\)} || $_ eq "Makefile" || $_ eq '\\'
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
70 || $_ eq '@ALLOCA@');
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
71 return $_;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
72 }
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
73
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
74
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
75 # prefix_words ($TEXT)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
76 # --------------------
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
77 sub prefix_words ($)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
78 {
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
79 local ($_) = @_;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
80 s{(\S+)}{prefix_word($1)}gem;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
81 return $_;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
82 }
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
83
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
84
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
85 # prefix_assignment ($LHS-AND-ASSIGN-OP, $RHS)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
86 # --------------------------------------------
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
87 sub prefix_assignment ($$)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
88 {
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
89 my ($lhs_and_assign_op, $rhs) = @_;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
90 my $res;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
91
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
92 # Some variables are initialized by gnulib.mk, and we don't want
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
93 # that. Change '=' to '+='.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
94 if ($lhs_and_assign_op =~ /^GPERF =$/)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
95 {
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
96 # Do not change the RHS, which specifies the GPERF program.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
97 }
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
98 elsif ($lhs_and_assign_op =~
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
99 /^(SUBDIRS|EXTRA_DIST|BUILT_SOURCES|SUFFIXES|MOSTLYCLEANFILES
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
100 |CLEANFILES|DISTCLEANFILES|MAINTAINERCLEANFILES|AM_CFLAGS
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
101 |AM_CPPFLAGS|AM_GNU_GETTEXT)\ =/x)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
102 {
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
103 $lhs_and_assign_op =~ s/=/+=/;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
104 }
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
105 # We don't want to inherit gnulib's AUTOMAKE_OPTIONS, comment them.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
106 elsif ($lhs_and_assign_op =~ /^AUTOMAKE_OPTIONS =/)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
107 {
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
108 $lhs_and_assign_op =~ s/^/# /;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
109 }
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
110 elsif ($lhs_and_assign_op =~ /^SUFFIXES /)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
111 {
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
112 # Elide any SUFFIXES assignment or concatenation.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
113 $lhs_and_assign_op =~ s/^/# /;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
114 }
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
115 # The words are (probably) paths to files in lib/: prefix them.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
116 else
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
117 {
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
118 $rhs = prefix_words($rhs)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
119 }
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
120
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
121 # Variables which name depend on the location: libbison_a_SOURCES =>
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
122 # lib_libbison_a_SOURCES.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
123 $lhs_and_assign_op =~ s/($lib_name)/lib_$1/g;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
124
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
125 return $lhs_and_assign_op . $rhs;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
126 }
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
127
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
128 # prefix $CONTENTS
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
129 # ----------------
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
130 # $CONTENTS is a Makefile content. Post-process it so that each file-name
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
131 # is prefixed with $prefix (e.g., "lib/").
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
132 #
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
133 # Relies heavily on the regularity of the file generated by gnulib-tool.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
134 sub prefix ($)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
135 {
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
136 # Work on $_.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
137 local ($_) = @_;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
138
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
139 # Prefix all the occurrence of files in rules. If there is nothing
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
140 # after in the :, it's probably a phony target, or a suffix rule.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
141 # Don't touch it.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
142 s{^([-\w+/]+\.[-\w.]+ *: *\S.*)$}
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
143 {prefix_words($1)}gem;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
144
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
145 # Prefix files in variables.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
146 s{^([\w.]+\s*\+?=)(.*)$}
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
147 {prefix_assignment($1, $2)}gem;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
148
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
149 # These three guys escape all the other regular rules.
17154
4aefd9877c8a prefix-gnulib-mk: avoid overzealous "lib/"-prefix addition
Jim Meyering <jim@meyering.net>
parents: 17093
diff changeset
150 # Require the leading white space to avoid inserting the prefix
4aefd9877c8a prefix-gnulib-mk: avoid overzealous "lib/"-prefix addition
Jim Meyering <jim@meyering.net>
parents: 17093
diff changeset
151 # on a line like this:
4aefd9877c8a prefix-gnulib-mk: avoid overzealous "lib/"-prefix addition
Jim Meyering <jim@meyering.net>
parents: 17093
diff changeset
152 # charset_alias = $(DESTDIR)$(libdir)/charset.alias
4aefd9877c8a prefix-gnulib-mk: avoid overzealous "lib/"-prefix addition
Jim Meyering <jim@meyering.net>
parents: 17093
diff changeset
153 # With $(libdir), it would be erroneous.
4aefd9877c8a prefix-gnulib-mk: avoid overzealous "lib/"-prefix addition
Jim Meyering <jim@meyering.net>
parents: 17093
diff changeset
154 s{(\s)(charset\.alias|ref-add\.sed|ref-del\.sed)}{$1$prefix$2}g;
17093
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
155 # Unfortunately, as a result we sometimes have lib/lib.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
156 s{($prefix){2}}{$1}g;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
157
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
158 # lib_libcoreutils_a_SOURCES += \
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
159 # imaxtostr.c \
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
160 # inttostr.c \
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
161 # offtostr.c \
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
162 # uinttostr.c \
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
163 # umaxtostr.c
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
164 # The above are not handled since they're on continued lines, so
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
165 # deal with them manually:
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
166 s{^(\s*)((?:[ui]max|u?int|off)tostr\.c(:? \\)?)$}{$1$prefix$2}gm;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
167
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
168 # $(srcdir)/ is actually $(top_srcdir)/$prefix/.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
169 # The trailing slash is required to avoid matching this rule:
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
170 # test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
171 s{\$\(srcdir\)/}{\$(top_srcdir)/$prefix}g;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
172
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
173 # Sometimes, t-$@ is used instead of $@-t, which, of course, does
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
174 # not work when we have a $@ with a directory in it.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
175 s{t-\$\@}{\$\@-t}g;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
176
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
177 # Some AC_SUBST patterns remain and would better be Make macros.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
178 s{\@(MKDIR_P)\@}{\$($1)}g;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
179
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
180 # Adjust paths in mkdir.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
181 s{(\$\(MKDIR_P\))\s*(\w+)}{$1 $prefix$2}g;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
182
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
183 return $_;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
184 }
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
185
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
186 # process ($IN)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
187 # -------------
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
188 sub process ($)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
189 {
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
190 my ($file) = @_;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
191 my ($bak) = "$file.bak";
17360
6959449c25f6 prefix-gnulib-mk: give better diagnostics
Jim Meyering <meyering@fb.com>
parents: 17154
diff changeset
192 rename ($file, $bak) or die "$ME: rename $file $bak failed: $!\n";
17093
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
193 my $contents = contents ($bak);
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
194 $contents = prefix ($contents);
17360
6959449c25f6 prefix-gnulib-mk: give better diagnostics
Jim Meyering <meyering@fb.com>
parents: 17154
diff changeset
195 my $out = new IO::File(">$file")
6959449c25f6 prefix-gnulib-mk: give better diagnostics
Jim Meyering <meyering@fb.com>
parents: 17154
diff changeset
196 or die "$ME: $file: failed to open for writing: $!\n";
17093
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
197 print $out $contents;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
198 }
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
199
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
200 {
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
201 GetOptions
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
202 (
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
203 'lib-name=s' => \$lib_name,
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
204 help => sub { usage 0 },
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
205 version => sub { print "$ME version $VERSION\n"; exit },
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
206 ) or usage 1;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
207
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
208 my $fail = 0;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
209 defined $lib_name
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
210 or (warn "$ME: no library name; use --lib-name=NAME\n"), $fail = 1;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
211
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
212 # There must be exactly one argument.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
213 @ARGV == 0
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
214 and (warn "$ME: missing FILE argument\n"), $fail = 1;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
215 1 < @ARGV
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
216 and (warn "$ME: too many arguments:\n", join ("\n", @ARGV), "\n"),
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
217 $fail = 1;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
218 $fail
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
219 and usage 1;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
220
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
221 my $file = $ARGV[0];
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
222 $prefix = (dirname $file) . '/';
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
223 warn "prefix=$prefix\n";
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
224
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
225 process $file;
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
226 }
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
227
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
228 ### Setup "GNU" style for perl-mode and cperl-mode.
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
229 ## Local Variables:
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
230 ## perl-indent-level: 2
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
231 ## perl-continued-statement-offset: 2
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
232 ## perl-continued-brace-offset: 0
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
233 ## perl-brace-offset: 0
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
234 ## perl-brace-imaginary-offset: 0
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
235 ## perl-label-offset: -2
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
236 ## cperl-indent-level: 2
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
237 ## cperl-brace-offset: 0
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
238 ## cperl-continued-brace-offset: 0
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
239 ## cperl-label-offset: -2
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
240 ## cperl-extra-newline-before-brace: t
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
241 ## cperl-merge-trailing-else: nil
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
242 ## cperl-continued-statement-offset: 2
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
243 ## eval: (add-hook 'write-file-hooks 'time-stamp)
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
244 ## time-stamp-start: "my $VERSION = '"
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
245 ## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
246 ## time-stamp-time-zone: "UTC"
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
247 ## time-stamp-end: "'; # UTC"
d31c977f5af4 non-recursive-gnulib-prefix-hack: new module
Jim Meyering <meyering@redhat.com>
parents:
diff changeset
248 ## End: