/usr/bin/dh_autoreconf is in dh-autoreconf 9.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | #!/usr/bin/perl -w
=head1 NAME
dh_autoreconf - Call autoreconf -f -i and keep track of the changed files.
=cut
use strict;
use Debian::Debhelper::Dh_Lib;
=head1 SYNOPSIS
B<dh_autoreconf> [S<I<debhelper options>>] [B<-X>I<item>] [B<--mode=>I<mode>]
[S<I<program> B<--> I<params>>]
=head1 DESCRIPTION
dh_autoreconf is responsible for calling autoreconf and creating the files
debian/autoreconf.before and debian/autoreconf.after which contain checksums
of all files before/after the build. It is complemented by dh_autoreconf_clean
which creates a list of all changed and added files and removes them.
Please note that dh_autoreconf can only be run once. Thus, if you need to
run multiple commands, use a script or similar. An example is given in
L<dh-autoreconf(7)>.
=head1 FILES
=over 4
=item debian/autoreconf
This file can contain a list of directories. If present, dh_autoreconf will
only scan the given directories for changes. If no special command is given
to dh_autoreconf, it will also forward the directory list to autoreconf
which causes it to be run only on those sub directories.
=back
=head1 OPTIONS
=over 4
=item B<-X>I<item> B<--exclude=>I<item>
Exclude files that contain "item" anywhere in their filename from being
checked for changes. This means that those files won't be deleted by
C<dh_autoreconf_clean> even if there are changes. You may use this option
multiple times to build up a list of things to exclude.
Starting with version 3, the directories of common version control systems
such as cvs, git, hg, svn, and bzr are excluded automatically.
=item B<--mode=>I<mode>
Change the way in which modifications to files are detected. The default mode
is I<md5> for using MD5 checksums, but there is also I<timesize> for using
the time of the last modification and the file size.
=item B<--as-needed>
Enable support for -Wl,--as-needed in all ltmain.sh files identical to
the one of the libtool package. This only works in the MD5 mode (the
default one). The changes are reverted in dh_autoreconf_clean. You should
not prevent LIBTOOLIZE from running with this, as it only works correctly
with libtoolize running.
=item I<program> B<--> I<params>
Run the program given by I<program> with the arguments given by I<params>
instead of autoreconf -f -i. If you need to run multiple commands, put them in
a script and pass the script instead (or add a target to debian/rules).
=back
=head1 ENVIRONMENT
For each tool executed by L<autoreconf(1)>, one can export a variable with
the uppercase name of the tool to the specific program which shall be run,
including B<true> to prevent the tool in question from being run. The following
example shows the beginning of a debian/rules for a package where automake
1.10 shall be run instead of the default automake version and libtoolize
shall not be run:
#!/usr/bin/make -f
export AUTOMAKE = automake1.10
export LIBTOOLIZE = true
=cut
init(options => { "mode=s" => \$dh{MODE},
"as-needed" => \$dh{AS_NEEDED}});
my $exception;
my @directories;
my $find_options='! -ipath "./debian/*" -a ';
my @exclude_default = ("'*/.git/*'", "'*/.hg/*'", "'*/.bzr/*'", "'*/.svn/*'",
"'*/CVS/*'");
$find_options .= ("! \\( -path " . join(" -o -path ", @exclude_default) .
" \\) -a ");
if (defined($dh{EXCLUDE_FIND}) && $dh{EXCLUDE_FIND} ne '') {
$find_options .= "! \\( $dh{EXCLUDE_FIND} \\) -a ";
}
if ($dh{AS_NEEDED}) {
$find_options = "/usr/share/libtool/config/ltmain.sh . " . $find_options;
}
if (-e "debian/autoreconf") {
@directories=filearray("debian/autoreconf", ".");
$find_options = join(" ",@directories)." ".$find_options;
}
if (-e "debian/autoreconf.before" || -e "debian/autoreconf.after") {
error("Can only be run once, see dh-autoreconf(7)");
}
my %modes = (
'md5' => "find $find_options -type f -exec md5sum {} \\;",
'timesize' => "find $find_options -type f -printf \"%s|%T@ %p\n\""
);
my $find = $modes{$dh{MODE} || "md5"} ||
error("Unknown value $dh{MODE} passed to --mode");
complex_doit("$find > debian/autoreconf.before");
eval {
# Run autoreconf to recreate the needed files.
@ARGV ? doit(@ARGV, @{$dh{U_PARAMS}}) : doit('autoreconf', '-f', '-i', @directories);
1;
} or do {
$exception = $@;
};
complex_doit("$find > debian/autoreconf.after");
# Let's fail here if autoreconf failed.
die $exception if (defined $exception);
# Fix ltmain.sh to support -Wl,--as-needed
if ($dh{AS_NEEDED}) {
open(FILE, 'debian/autoreconf.after') or die($!);
my $ltcheck = "";
while(<FILE>) {
chomp($_);
my ($checksum, $filename) = split;
if ($filename eq "/usr/share/libtool/config/ltmain.sh") {
$ltcheck = $checksum;
} elsif ($filename =~ m/\/ltmain.sh$/ and $checksum eq $ltcheck) {
doit("patch", "-f", "--no-backup-if-mismatch", "-i",
"/usr/share/dh-autoreconf/ltmain-as-needed.diff",
$filename);
}
}
close(FILE);
}
=head1 SEE ALSO
L<debhelper(7)>, L<dh_autoreconf_clean(1)>, L<dh-autoreconf(7)>
=head1 AUTHOR
Julian Andres Klode <jak@debian.org>
=cut
|