]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_install
Fix build system auto-selection breakage.
[debhelper.git] / dh_install
index 17ca12555b93cbc5e0e16c146498f96ff52b3a0a..875f80bfe45d3be04e07525799ec98b45105d0f8 100755 (executable)
@@ -24,15 +24,6 @@ those particular tasks. dh_install, then, is useful for installing everything
 else, for which no particular intelligence is needed. It is a replacement for
 the old dh_movefiles command.
 
-Files named debian/package.install list the files to install into each
-package and the directory they should be installed to. The format is a set
-of lines, where each line lists a file or files to install, and at the end
-of the line tells the directory it should be installed in. The name of the
-files (or directories) to install should be given relative to the current
-directory, while the installation directory is given relative to the
-package build directory. You may use wildcards in the names of the files to
-install (in v3 mode and above).
-
 This program may be used in one of two ways. If you just have a file or two
 that the upstream Makefile does not install for you, you can run dh_install
 on them to move them into place. On the other hand, maybe you have a large
@@ -40,36 +31,29 @@ package that builds multiple binary packages. You can use the upstream
 Makefile to install it all into debian/tmp, and then use dh_install to copy
 directories and files from there into the proper package build directories.
 
-From debhelper compatability level 7 on, if --sourcedir is not specified,
-dh_install will install files from debian/tmp if the directory contains the
-files. Otherwise, it will install files from the current directory.
+From debhelper compatibility level 7 on, dh_install will fall back to
+looking in debian/tmp for files, if it doesn't find them in the current
+directory (or whereever you've told it to look using --sourcedir).
 
-=head1 OPTIONS
+=head1 FILES
 
 =over 4
 
-=item B<-Xitem>, B<--exclude=item>
-
-Exclude files that contain "item" anywhere in their filename from
-being installed.
+=item debian/I<package>.install
 
-=item B<--autodest>
+List the files to install into each package and the directory they should be
+installed to. The format is a set of lines, where each line lists a file or
+files to install, and at the end of the line tells the directory it should be
+installed in. The name of the files (or directories) to install should be given
+relative to the current directory, while the installation directory is given
+relative to the package build directory. You may use wildcards in the names of
+the files to install (in v3 mode and above).
 
-Guess as the destination directory to install things to. If this is
-specified, you should not list destination directories in
-debian/package.install files or on the command line. Instead, dh_install
-will guess as follows:
+=back
 
-Strip off debian/tmp (or the sourcedir if one is given) from the front of
-the filename, if it is present, and install into the dirname of the
-filename. So if the filename is debian/tmp/usr/bin, then that directory
-will be copied to debian/package/usr/. If the filename is
-debian/tmp/etc/passwd, it will be copied to debian/package/etc/.
+=head1 OPTIONS
 
-Note that if you list exactly one filename or wildcard-pattern on a line by
-itself in a
-debian/package.install file, with no explicit destination, then dh_install
-will automatically guess the destination even if this flag is not set.
+=over 4
 
 =item B<--list-missing>
 
@@ -89,16 +73,37 @@ warned about.
 This option is like --list-missing, except if a file was missed, it will
 not only list the missing files, but also fail with a nonzero exit code. 
 
+=item B<-Xitem>, B<--exclude=item>
+
+Exclude files that contain "item" anywhere in their filename from
+being installed.
+
 =item B<--sourcedir=dir>
 
-Makes all source files be found under dir. If this is specified, it is
-akin to all the source filenames having "dir/" prepended to them.
+Look in the specified directory for files to be installed.
+
+Note that this is not the same as the --sourcedirectory option used
+by the dh_auto_* commands. You rarely need to use this option, since
+dh_install automatically looks for files in debian/tmp in debhelper
+compatibility level 7 and above.
+
+=item B<--autodest>
 
-To make dh_install behave like the old dh_movefiles, move your
-package.files file to package.install and call dh_install with
-"--sourcedir=debian/tmp" appended to the command. This will
-approximate dh_movefiles behaviour, except it will copy files instead
-of moving them.
+Guess as the destination directory to install things to. If this is
+specified, you should not list destination directories in
+debian/package.install files or on the command line. Instead, dh_install
+will guess as follows:
+
+Strip off debian/tmp (or the sourcedir if one is given) from the front of
+the filename, if it is present, and install into the dirname of the
+filename. So if the filename is debian/tmp/usr/bin, then that directory
+will be copied to debian/package/usr/. If the filename is
+debian/tmp/etc/passwd, it will be copied to debian/package/etc/.
+
+Note that if you list exactly one filename or wildcard-pattern on a line by
+itself in a
+debian/package.install file, with no explicit destination, then dh_install
+will automatically guess the destination even if this flag is not set.
 
 =item I<file [...] dest>
 
@@ -109,12 +114,17 @@ The files will be installed into the first package dh_install acts on.
 
 =cut
 
-init();
+init(options => {
+       "autodest" => \$dh{AUTODEST},
+       "list-missing" => \$dh{LIST_MISSING},
+       "fail-missing" => \$dh{FAIL_MISSING},
+       "sourcedir=s" => \$dh{SOURCEDIR},       
+});
 
 my @installed;
 
 my $srcdir = '.';
-$srcdir = $dh{SOURCEDIR}."/" if defined $dh{SOURCEDIR};
+$srcdir = $dh{SOURCEDIR} if defined $dh{SOURCEDIR};
 
 foreach my $package (@{$dh{DOPACKAGES}}) {
        my $tmp=tmpdir($package);
@@ -148,7 +158,7 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                        my @found = glob "$srcdir/$glob";
                        if (! compat(6)) {
                                # Fall back to looking in debian/tmp.
-                               if (! @found || ! -e $found[0]) {
+                               if (! @found || ! (-e $found[0] || -l $found[0])) {
                                        @found = glob "debian/tmp/$glob";
                                }
                        }
@@ -156,7 +166,6 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                }
 
                if (! compat(4)) { # check added in v5
-                       # glob now, relative to srcdir
                        if (! @filelist) {
                                error("$package missing files (@$set), aborting");
                        }
@@ -167,12 +176,9 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                        if (! defined $dest) {
                                # Guess at destination directory.
                                $dest=$src;
-                               my $strip=$srcdir;
-                               if ($strip eq '.') {
-                                       $strip = "debian/tmp";
-                               }
-                               $dest=~s/^(.*\/)?\Q$strip\E//;
-                               $dest=dirname($dest);
+                               $dest=~s/^(.*\/)?\Q$srcdir\E\///;
+                               $dest=~s/^(.*\/)?debian\/tmp\///;
+                               $dest=dirname("/".$dest);
                                $tmpdest=1;
                        }