]> git.donarmstrong.com Git - debhelper.git/blobdiff - dh_movefiles
r775: This commit was manufactured by cvs2svn to create tag
[debhelper.git] / dh_movefiles
index a5669bfce5ddfb7855fcf4b27fc3ce4cc7afacc6..7978163ee8d683291d4088e07671e45bdd36568f 100755 (executable)
@@ -1,55 +1,82 @@
-#!/bin/sh -e
+#!/usr/bin/perl -w
 #
 # Move files out of debian/tmp, into subpackages.
 
-PATH=debian:$PATH:/usr/lib/debhelper
-. dh_lib
+BEGIN { push @INC, "debian", "/usr/share/debhelper" }
+use Dh_Lib;
+init();
 
-for PACKAGE in $DH_DOPACKAGES; do
-       TMP=`tmpdir $PACKAGE`
-       files=`pkgfile $PACKAGE files`
+$ret=0;
 
-       if [ ! -d "debian/tmp" ]; then
-               error "debian/tmp does not exist"
-       fi
+foreach $PACKAGE (@{$dh{DOPACKAGES}}) {
+       $TMP=tmpdir($PACKAGE);
+       $files=pkgfile($PACKAGE,"files");
 
-       tomove=""
+       if ($dh{SOURCEDIR}) {
+               if ($dh{SOURCEDIR}=~m:^/:) {
+                       error("The sourcedir must be a relative filename, not starting with `/'.");
+               }
+               $sourcedir=$dh{SOURCEDIR};
+       }
+       else {
+               $sourcedir="debian/tmp";
+       }
+
+       if (! -d $sourcedir) {
+               error("$sourcedir does not exist.");
+       }
+
+       @tomove=();
 
         # debian/files has a different purpose, so ignore it.
-       if [ "$files" -a "$files" != "debian/files" ]; then
-               tomove=`cat $files`
-       fi
+       if ( $files && $files ne "debian/files" ) {
+               @tomove=filearray($files);
+       }
        
-       if [ \( "$PACKAGE" = "$DH_FIRSTPACKAGE" -o "$DH_PARAMS_ALL" \) \
-            -a "$*" ]; then
-               tomove="$* $tomove"
-       fi
+       if (($PACKAGE eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) {
+               push @tomove, @ARGV;
+       }
 
-       if [ "$tomove" -a "$TMP" = "debian/tmp" ]; then
-               error "I was asked to move files from debian/tmp to debian/tmp."
-       fi
-
-       if [ "$tomove" ]; then
-               if [ ! -d "$TMP" ]; then
-                       doit "install -d $TMP"
-               fi
+       if (@tomove && $TMP eq $sourcedir) {
+               error("I was asked to move files from $sourcedir to $sourcedir.");
+       }
 
+       if (@tomove) {
+               if (! -d $TMP) {
+                       doit("install","-d",$TMP);
+               }
+               # Now we need to expand wildcards in @tomove.
+               @filelist=();
+               foreach (@tomove) {
+                       push @filelist, glob("$sourcedir/$_");
+               }
+               
                # Order the files. First all real files, then symlinks. 
                # Putting symlinks last is a nice thing to do for library 
                # packages and doesn't affect much of anything else.
-               #
-               # (The echo is in here to expand wildcards. Note that 'ls'
-               # won't work properly.)
-               # The filelist is used, so even very weird filenames can be
-               # moved.
-               doit "rm -f movelist"
-               for i in `(cd debian/tmp; echo $tomove)`; do
-                       complex_doit "(cd debian/tmp ; find $i ! -type d -and ! -type l -print) >> movelist"
-               done
-               for i in `(cd debian/tmp; echo $tomove)`; do
-                       complex_doit "(cd debian/tmp ; find $i ! -type d -and -type l -print) >> movelist"
-               done
-               complex_doit "(cd debian/tmp;tar --create --remove-files --files-from=../../movelist --file -) | (cd $TMP;tar xpf -)"
-               doit "rm -f movelist"
-       fi
-done
+               doit("rm","-f","movelist");
+               foreach (@filelist) {
+                       $file=$_;
+                       $ret=1 if (! -e $file && ! -l $file);
+                       $file=~s:^$sourcedir/+::;
+                       complex_doit("(cd $sourcedir >/dev/null ; find $file ! -type d -and ! -type l -print || true) >> movelist");
+               }
+               foreach (@filelist) {
+                       $file=$_;
+                       $ret=1 if (! -e $file && ! -l $file);
+                       $file=~s:^$sourcedir/+::;
+                       complex_doit("(cd $sourcedir >/dev/null ; find $file ! -type d -and -type l -print || true) >> movelist");
+               }
+               complex_doit("(cd $sourcedir >/dev/null ; tar --create --remove-files --files-from=../../movelist --file -) | (cd $TMP >/dev/null ;tar xpf -)");
+               doit("rm","-f","movelist");
+       }
+}
+
+# If $ret is set, we wern't actually able to find some 
+# files that were specified to be moved, and we should
+# exit with the code in $ret. This program puts off 
+# exiting with an error until all files have been tried
+# to be moved, because this makes it easier for some 
+# packages that arn't always sure exactly which files need
+# to be moved.
+exit $ret;