summaryrefslogtreecommitdiff
path: root/dh_movefiles
blob: 140f749afff1dc36c6eb15a10b41d533f5a0d184 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/perl -w
#
# Move files out of debian/tmp, into subpackages.

use Debian::Debhelper::Dh_Lib;
init();

$ret=0;

foreach $PACKAGE (@{$dh{DOPACKAGES}}) {
	$TMP=tmpdir($PACKAGE);
	$files=pkgfile($PACKAGE,"files");

	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 && $files ne "debian/files" ) {
		@tomove=filearray($files, $sourcedir);
	}
	
	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. Perhaps you should set DH_COMAPT=2?");
	}

	# Now we need to expand wildcards in @tomove.
	# This is only necessary in pre-v3 land -- as of v3, the
	# expension is automatically done by filearray().
	if (@tomove && Debian::Debhelper::Dh_Lib::compat(2)) {
		@filelist=();
		foreach (@tomove) {
			push @filelist, glob("$sourcedir/$_");
		}
		@tomove=@filelist;
	}
	else {
		# However, filearray() does not add the sourcedir,
		# which we need.
		@tomove = map { "$sourcedir/$_" } @tomove;
	}

	if (@tomove) {
		if (! -d $TMP) {
			doit("install","-d",$TMP);
		}

		doit("rm","-f","debian/movelist");
		foreach (@tomove) {
			$file=$_;
			if (! -e $file && ! -l $file) {
				$ret=1;
				warning("$file not found");
			}
			$file=~s:^\Q$sourcedir\E/+::;
			complex_doit("(cd $sourcedir >/dev/null ; find $file ! -type d -print || true) >> debian/movelist");
		}
		complex_doit("(cd $sourcedir >/dev/null ; tar --create --remove-files --files-from=../movelist --file -) | (cd $TMP >/dev/null ;tar xpf -)");
		doit("rm","-f","debian/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;