Mercurial > gnulib
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 |
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: |