]> git.donarmstrong.com Git - debhelper.git/commitdiff
r510: * Thanks to Benjamin Drieu <benj@debian.org>, dh_installdocs -X now works.
authorjoey <joey>
Sun, 17 Feb 2002 17:52:47 +0000 (17:52 +0000)
committerjoey <joey>
Sun, 17 Feb 2002 17:52:47 +0000 (17:52 +0000)
     I had to modify his patch to use cp --parents, since -P spews warnings
     now. Also, I made it continue to use cp -a if nothing is excluded,
     which is both faster, and means this patch is less likely to break
     anything if it turns out to be buggy. Also, stylistic changes.
Closes: #40649
   * Implemented -X for dh_installexamples as well.
   * dh_clean -X substvars will also work now. Closes: #66890

Debian/Debhelper/Dh_Lib.pm
debian/changelog
dh_clean
dh_installdocs
dh_installexamples
doc/PROGRAMMING
doc/TODO

index a909335bec72ee5c6e4d2a78860896bc36ec69f8..53e86eb91d7ab663cf440d7ff7023268f3a7879e 100644 (file)
@@ -12,7 +12,8 @@ use vars qw(@ISA @EXPORT %dh);
 @ISA=qw(Exporter);
 @EXPORT=qw(&init &doit &complex_doit &verbose_print &error &warning &tmpdir
            &pkgfile &pkgext &isnative &autoscript &filearray &GetPackages
-           &basename &dirname &xargs %dh &compat &addsubstvar &delsubstvar);
+           &basename &dirname &xargs %dh &compat &addsubstvar &delsubstvar
+            &excludefile);
 
 my $max_compat=4;
 
@@ -199,7 +200,8 @@ sub warning {
 # Returns the basename of the argument passed to it.
 sub basename {
        my $fn=shift;
-       
+
+       $fn=~s/\/$//g; # ignore trailing slashes
        $fn=~s:^.*/(.*?)$:$1:;
        return $fn;
 }
@@ -208,6 +210,7 @@ sub basename {
 sub dirname {
        my $fn=shift;
        
+       $fn=~s/\/$//g; # ignore trailing slashes
        $fn=~s:^(.*)/.*?$:$1:;
        return $fn;
 }
@@ -450,6 +453,15 @@ sub filearray {
        return @ret;
 }
 
+# Passed a filename, returns true if -X says that file should be excluded.
+sub excludefile {
+        my $filename = shift;
+        foreach my $f (@{$dh{EXCLUDE}}) {
+                return 1 if $filename =~ /\Q$f\E/;
+        }
+        return 0;
+}
+
 # Returns the build architecture. (Memoized)
 {
        my $arch;
index 0011fd9199b6199c352fd1cbc88d2444df01d5a5..67991443dd17087d4e5a77040205d702f19e067f 100644 (file)
@@ -1,3 +1,16 @@
+debhelper (3.4.8) unstable; urgency=low
+
+  * Thanks to Benjamin Drieu <benj@debian.org>, dh_installdocs -X now works.
+    I had to modify his patch to use cp --parents, since -P spews warnings
+    now. Also, I made it continue to use cp -a if nothing is excluded,
+    which is both faster, and means this patch is less likely to break
+    anything if it turns out to be buggy. Also, stylistic changes.
+    Closes: #40649
+  * Implemented -X for dh_installexamples as well.
+  * dh_clean -X substvars will also work now. Closes: #66890
+
+ -- Joey Hess <joeyh@debian.org>  Sun, 17 Feb 2002 12:26:37 -0500
+
 debhelper (3.4.7) unstable; urgency=low
 
   * dh_perl: don't gripe if there is no substvar file. Closes: #133140
index 095844aa5aef59c00f0f3db17cb0c9576c4d2aa5..9583a55b02e04190681fd2a964c86c0cc764f2e0 100755 (executable)
--- a/dh_clean
+++ b/dh_clean
@@ -62,10 +62,12 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
        my $ext=pkgext($package);
 
        if (! $dh{D_FLAG}) {
-               doit("rm","-f","debian/${ext}substvars");
+               doit("rm","-f","debian/${ext}substvars")
+                       unless excludefile("debian/${ext}substvars");
        }
        
-       doit ("rm","-rf",$tmp);
+       doit ("rm","-rf",$tmp)
+               unless excludefile($tmp);
 }
 
 if (! $dh{D_FLAG}) {
@@ -74,7 +76,8 @@ if (! $dh{D_FLAG}) {
        }
 
        if (! $dh{K_FLAG}) {
-               doit("rm","-f","debian/files");
+               doit("rm","-f","debian/files")
+                       unless excludefile("debian/files");
        }
 
        # These are all debhelper temp files, and so it is safe to 
index 2920446aec9b53b5d358554d2402bd9b9d3d5dcf..9b5922f84148666a9ad2f3d16e5e325eb18cac68 100755 (executable)
@@ -11,7 +11,7 @@ use Debian::Debhelper::Dh_Lib;
 
 =head1 SYNOPSIS
 
-B<dh_installdocs> [S<I<debhelper options>>] [B<-A>] [B<-n>] [S<I<file ...>>]
+B<dh_installdocs> [S<I<debhelper options>>] [B<-A>] [B<-n>] [B<-X>I<item>] [S<I<file ...>>]
 
 =head1 DESCRIPTION
 
@@ -26,7 +26,7 @@ debian/package.copyright.
 
 Any filenames specified as parameters will be installed into the first
 package dh_installdocs is told to act on. By default, this is the first
-binary package in debian/control, but if you use -p, -i, or -a flags, it
+binary package in debian/control, but if you use B<-p>, B<-i>, or B<-a> flags, it
 will be the first package specified by those flags.
 
 Also, debian/README.Debian (or debian/README.debian) and debian/TODO, if
@@ -66,20 +66,25 @@ acted on.
 
 Do not modify postinst/prerm scripts.
 
+=item B<-Xitem>, B<--exclude=item>
+
+Exclude files that contain "item" anywhere in their filename from
+being installed.
+
 =item I<file ...>
 
 Install these files as documentation into the first package acted on. (Or
-in all packages if -A is specified).
+in all packages if B<-A> is specified).
 
 =back
 
 =head1 NOTES
 
 Note that dh_installdocs will happily copy entire directory hierarchies if
-you ask it to (it uses cp -a internally). If it is asked to install a
+you ask it to (similar to cp -a). If it is asked to install a
 directory, it will install the complete contents of the directory.
 
-Note that this command is not idempotent. "dh_clean -k" should be called
+Note that this command is not idempotent. "dh_clean B<-k>" should be called
 between invocations of this command. Otherwise, it may cause multiple
 instances of the same text to be added to maintainer scripts.
 
@@ -108,7 +113,23 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
        }
 
        if (@docs) {
-               doit("cp", "-a",@docs,"$tmp/usr/share/doc/$package/");
+               my $exclude = '';
+               if ($dh{EXCLUDE_FIND}) {
+                       $exclude = ' \( ! '.$dh{EXCLUDE_FIND}.' \)';
+               }
+               foreach my $doc (@docs) {
+                       next if excludefile($doc);
+                       if (-d $doc && $exclude) {
+                           my ($dir_basename) = basename($doc);
+                           # Pity there's no cp --exclude ..
+                           my $pwd=`pwd`;
+                           chomp $pwd;
+                           complex_doit("cd $doc/.. && find $dir_basename -type f$exclude -exec cp --parents -dp {} $pwd/$tmp/usr/share/doc/$package \\;");
+                       }
+                       else {
+                               doit("cp","-a",$doc,"$tmp/usr/share/doc/$package");
+                       }
+               }
                doit("chown","-R","0.0","$tmp/usr/share/doc");
                doit("chmod","-R","go=rX","$tmp/usr/share/doc");
                doit("chmod","-R","u+rw","$tmp/usr/share/doc");
@@ -119,13 +140,13 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
        if (! $readme_debian) {
                $readme_debian=pkgfile($package,'README.debian');
        }
-       if ($readme_debian) {
+       if ($readme_debian && ! excludefile($readme_debian)) {
                doit("install","-g",0,"-o",0,"-m","644","-p","$readme_debian",
                        "$tmp/usr/share/doc/$package/README.Debian");
        }
 
        my $todo=pkgfile($package,'TODO');
-       if ($todo) {
+       if ($todo && ! excludefile($todo)) {
                if (isnative($package)) {
                        doit("install","-g",0,"-o",0,"-m","644","-p",$todo,
                                "$tmp/usr/share/doc/$package/TODO");
@@ -147,7 +168,7 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
                if (! $copyright && -e "debian/copyright") {
                        $copyright="debian/copyright";
                }
-               if ($copyright) {
+               if ($copyright && ! excludefile($copyright)) {
                                doit("install","-g",0,"-o",0,"-m","644","-p",$copyright,
                                        "$tmp/usr/share/doc/$package/copyright");
                }
index fae330124de49f9744db524bb8979b8fb703aeb7..f53dbc979a2e84a6b12c313e81e7d6a4779d136d 100755 (executable)
@@ -11,7 +11,7 @@ use Debian::Debhelper::Dh_Lib;
 
 =head1 SYNOPSIS
 
-B<dh_installexamples> [S<I<debhelper options>>] [B<-A>] [S<I<file ...>>]
+B<dh_installexamples> [S<I<debhelper options>>] [B<-A>] [B<-X>I<item>] [S<I<file ...>>]
 
 =head1 DESCRIPTION
 
@@ -40,12 +40,17 @@ acted on.
 Install these files as examples into the first package acted on. (Or into
 all packages if -A is specified.)
 
+=item B<-Xitem>, B<--exclude=item>
+
+Exclude files that contain "item" anywhere in their filename from
+being installed.
+
 =back
 
 =head1 NOTES
 
 Note that dh_installexamples will happily copy entire directory hierarchies
-if you ask it to (it uses cp -a internally). If it is asked to install a
+if you ask it to (similar to cp -a). If it is asked to install a
 directory, it will install the complete contents of the directory.
 
 =cut
@@ -65,13 +70,30 @@ foreach my $package (@{$dh{DOPACKAGES}}) {
        if (($package eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) {
                push @examples, @ARGV;
        }
-
+       
        if (@examples) {
                if (! -d "$tmp/usr/share/doc/$package/examples") {
                        doit("install","-d","$tmp/usr/share/doc/$package/examples");
                }
                
-               doit("cp","-a",@examples,"$tmp/usr/share/doc/$package/examples");
+               my $exclude = '';
+               if ($dh{EXCLUDE_FIND}) {
+                       $exclude = ' \( ! '.$dh{EXCLUDE_FIND}.' \)';
+               }
+               
+               foreach my $example (@examples) {
+                       next if excludefile($example);
+                       if (-d $example && $exclude) {
+                               my ($dir_basename) = basename($example);
+                               # Pity there's no cp --exclude ..
+                               my $pwd=`pwd`;
+                               chomp $pwd;
+                               complex_doit("cd $example/.. && find $dir_basename -type f$exclude -exec cp --parents -dp {} $pwd/$tmp/usr/share/doc/$package/examples \\;");
+                       }
+                       else {
+                               doit("cp", "-a", $example, "$tmp/usr/share/doc/$package/examples");
+                       }
+               }
        }
 }
 
index b12a1a262a302e9c4cbfb937983148ec5ba5098c..d90d50caadbee770d9e33ef6e177d05f5d039d85 100644 (file)
@@ -230,6 +230,9 @@ addsubstvar($package, $substvar, $deppackage, $verinfo, $remove)
 delsubstvar($package, $substvar)
        This function removes the entire line for the substvar from the
        package's shlibs file.
+excludefile($filename)
+       This function returns true if -X has been used to ask for the file
+       to be excluded.
 
 -- Joey Hess <joeyh@debian.org>
 
index 548a394958c1a2e3e3067330a12c227bc848c52d..81ba0d6c7460113f65456e7bf5383146acf3b53b 100644 (file)
--- a/doc/TODO
+++ b/doc/TODO
@@ -53,8 +53,6 @@ Wishlist items:
 * Add a switch to dh_installdeb to allow it to do user defined
   substitutions. OTOH, maybe it's better if people just sed
   postinst.in before debhelper gets it's hands on it... (#25235)
-* dh_installdocs needs -X support, which probably means going with tar
-  instead of cp -a. Ugh.
 
 v4: