]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_install
r1774: * dh_install: in v5 mode, error out if there are wildcards in the file
[debhelper.git] / dh_install
index 0d807d6fd917db86b87ae08cfc34b87353edba38..4ae155325da8c49d0c819d9a80ec123d2533d9a1 100755 (executable)
@@ -12,7 +12,7 @@ use Debian::Debhelper::Dh_Lib;
 
 =head1 SYNOPSIS
 
-B<dh_install> [B<-X>I<item>] [B<--autodest>] [B<--list-missing>] [B<--sourcedir=>I<dir>] [S<I<debhelper options>>] [S<I<file [...] dest>>]
+B<dh_install> [B<-X>I<item>] [B<--autodest>] [B<--sourcedir=>I<dir>] [S<I<debhelper options>>] [S<I<file [...] dest>>]
 
 =head1 DESCRIPTION
 
@@ -62,7 +62,8 @@ 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 only a filename on a line by itself in a
+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.
 
@@ -79,6 +80,11 @@ you don't miss installing newly added files in new upstream releases.
 Note that files that are excluded from being moved via the -X option are not
 warned about.
 
+=item B<--fail-missing>
+
+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<--sourcedir=dir>
 
 Makes all source files be found under dir. If this is specified, it is
@@ -132,7 +138,12 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                if (! defined $dh{AUTODEST} && @$set > 1) {
                        $dest=pop @$set;
                }
-               # glob now, relative to srcdir
+               if (! compat(4)) { # check added in v5
+                       # glob now, relative to srcdir
+                       if (! map { glob "$srcdir/$_" } @$set) {
+                               error("missing files (@$set), aborting");
+                       }
+               }
                foreach my $src (map { glob "$srcdir/$_" } @$set) { 
                        next if excludefile($src);
                
@@ -154,7 +165,7 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                        }
 
                        # Keep track of what's installed.
-                       if ($dh{LIST_MISSING}) {
+                       if ($dh{LIST_MISSING} || $dh{FAIL_MISSING}) {
                                # Kill any extra slashes. Makes the
                                # @installed stuff more robust.
                                $src=~y:/:/:s;
@@ -184,8 +195,7 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
        }
 }
 
-if ($dh{LIST_MISSING}) {
-       
+if ($dh{LIST_MISSING} || $dh{FAIL_MISSING}) {
        # . as srcdir makes no sense, so this is a special case.
        if ($srcdir eq '.') {
                $srcdir='debian/tmp';
@@ -193,14 +203,21 @@ if ($dh{LIST_MISSING}) {
        
        my @missing;
        my $installed=join("|", @installed);
-       $installed=qr{^$installed$};
+       $installed=qr{^($installed)$};
        find(sub {
                -f || -l || return;
                $_="$File::Find::dir/$_";
-               push @missing, $_ unless /$installed/ || excludefile($_);
+               if (! /$installed/ && ! excludefile($_)) {
+                       my $file=$_;
+                       $file=~s/^\Q$srcdir\E\///;
+                       push @missing, $file;
+               }
        }, $srcdir);
        if (@missing) {
-               warning "$_ exists in debian/tmp but not installed to anywhere" foreach @missing;
+               warning "$_ exists in debian/tmp but is not installed to anywhere" foreach @missing;
+               if ($dh{FAIL_MISSING}) {
+                       error("missing files, aborting");
+               }
        }
 }
 
@@ -217,7 +234,7 @@ contain:
 
 While debian/libfoo.install contains:
 
-  usr/libfoo*.so.*
+  usr/lib/libfoo*.so.*
 
 If you want a libfoo-dev package too, debian/libfoo-dev.install might contain:
 
@@ -225,7 +242,7 @@ If you want a libfoo-dev package too, debian/libfoo-dev.install might contain:
   usr/lib/libfoo*.so
   usr/share/man/man3
 
-=head1 LIMITIATIONS
+=head1 LIMITATIONS
 
 dh_install cannot rename files or directories, it can only install them
 with the names they already have into wherever you want in the package