X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=dh_movefiles;h=2ed8e3763fa0e0e11de5587bb50d167dc1fde7c3;hb=289f1de123932be984ef2a586cc792ae44332d29;hp=ab7dcd013e8fddf202ff3f991e3309049ed8d8e3;hpb=0eed709f4b9dbe92e8c71e60313bfca6f69eea2b;p=debhelper.git diff --git a/dh_movefiles b/dh_movefiles index ab7dcd0..2ed8e37 100755 --- a/dh_movefiles +++ b/dh_movefiles @@ -1,45 +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/lib/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"); - # debian/files has a different purpose, so ignore it. - if [ "$files" -a "$files" != "debian/files" ]; then - if [ "$TMP" = "debian/tmp" ]; then - error "I was asked to move some files from debian/tmp to debian/tmp." - fi + 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 "$TMP" ]; then - doit "install -d $TMP" - fi + if (! -d $sourcedir) { + error("$sourcedir does not exist."); + } - files=`pwd`/$files + @tomove=(); + # debian/files has a different purpose, so ignore it. + if ( $files && $files ne "debian/files" ) { + @tomove=filearray($files); + } + + if (($PACKAGE eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) { + push @tomove, @ARGV; + } + + 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.) - tomove="" - for i in `(cd debian/tmp ; echo \`cat $files\`)`; do - tomove="`(cd debian/tmp ; \ - find $i ! -type d -and ! -type l -print)` \ - $tomove \ - `(cd debian/tmp ; \ - find $i ! -type d -and -type l -print)`" - done - - complex_doit "(cd debian/tmp;tar --create --remove-files --file - "$tomove") | (cd $TMP;tar xpf -)" - fi -done + doit("rm","-f","movelist"); + foreach (@filelist) { + $file=$_; + $ret=1 if (! -e $file && ! -l $file); + $file=~s:^$sourcedir/+::; + complex_doit("(cd $sourcedir ; 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 ; find $file ! -type d -and -type l -print || true) >> movelist"); + } + complex_doit("(cd $sourcedir;tar --create --remove-files --files-from=../../movelist --file -) | (cd $TMP;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;