]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_install
Fix typo in French translation, about debian/package.README.Debian files.
[debhelper.git] / dh_install
index 47c00db2c1a09e3eafe62bc137945d4711dc8fdf..cb30d4d762062f5eab762f7e9857a29484da7758 100755 (executable)
@@ -9,7 +9,6 @@ dh_install - install files into package build directories
 use strict;
 use File::Find;
 use Debian::Debhelper::Dh_Lib;
-use Cwd q{abs_path};
 
 =head1 SYNOPSIS
 
@@ -41,6 +40,10 @@ 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 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 --srcdir).
+
 =head1 OPTIONS
 
 =over 4
@@ -139,13 +142,26 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                if (! defined $dh{AUTODEST} && @$set > 1) {
                        $dest=pop @$set;
                }
+
+               my @filelist;
+               foreach my $glob (@$set) {
+                       my @found = glob "$srcdir/$glob";
+                       if (! compat(6)) {
+                               # Fall back to looking in debian/tmp.
+                               if (! @found || ! -e $found[0]) {
+                                       @found = glob "debian/tmp/$glob";
+                               }
+                       }
+                       push @filelist, @found;
+               }
+
                if (! compat(4)) { # check added in v5
                        # glob now, relative to srcdir
-                       if (! map { glob "$srcdir/$_" } @$set) {
+                       if (! @filelist) {
                                error("$package missing files (@$set), aborting");
                        }
                }
-               foreach my $src (map { glob "$srcdir/$_" } @$set) { 
+               foreach my $src (@filelist) { 
                        next if excludefile($src);
                
                        if (! defined $dest) {
@@ -176,14 +192,14 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                        }
                        
                        if (-d $src && $exclude) {
-                               my ($dir_basename) = basename(abs_path($src));
-                               # Pity there's no cp --exclude ..
+                               my $basename = basename($src);
+                               my $dir = ($basename eq '.') ? $src : "$src/..";
                                my $pwd=`pwd`;
                                chomp $pwd;
-                               complex_doit("cd $src/.. && find $dir_basename $exclude \\( -type f -or -type l \\) -exec cp --parents -dp {} $pwd/$tmp/$dest/ \\;");
+                               complex_doit("cd '$dir' && find '$basename' $exclude \\( -type f -or -type l \\) -exec cp --parents -dp {} $pwd/$tmp/$dest/ \\;");
                                # cp is annoying so I need a separate pass
                                # just for empty directories
-                               complex_doit("cd $src/.. && find $dir_basename $exclude \\( -type d -and -empty \\) -exec cp --parents -a {} $pwd/$tmp/$dest/ \\;");
+                               complex_doit("cd '$dir' && find '$basename' $exclude \\( -type d -and -empty \\) -exec cp --parents -a {} $pwd/$tmp/$dest/ \\;");
                        }
                        else {
                                doit("cp", "-a", $src, "$tmp/$dest/");