summaryrefslogtreecommitdiff
path: root/dh_movefiles
blob: ba482050ce2d4be2d468700bb26927736c7a87c6 (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
#!/bin/sh -e
#
# Move files out of debian/tmp, into subpackages.

PATH=debian:$PATH:/usr/lib/debhelper
. dh_lib

for PACKAGE in $DH_DOPACKAGES; do
	TMP=`tmpdir $PACKAGE`
	files=`pkgfile $PACKAGE files`

	if [ ! -d "debian/tmp" ]; then
		error "debian/tmp does not exist"
	fi

	tomove=""

        # debian/files has a different purpose, so ignore it.
	if [ "$files" -a "$files" != "debian/files" ]; then
		tomove=`cat $files`
	fi
	
	if [ \( "$PACKAGE" = "$DH_FIRSTPACKAGE" -o "$DH_PARAMS_ALL" \) \
	     -a "$*" ]; then
		tomove="$* $tomove"
	fi

	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

		# 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 file list is used, so even very weird filenames can be
		# moved.
		doit "rm -f movelist"
		for i in `(cd debian/tmp; echo $tomove)`; do
			if [ ! -e "debian/tmp/$i" -o -L "debian/tmp/$i" ]; then
				fail=1
			fi
			complex_doit "(cd debian/tmp ; find $i ! -type d -and ! -type l -print || true) >> movelist"
		done
		for i in `(cd debian/tmp; echo $tomove)`; do
			if [ ! -e "debian/tmp/$i" -o -L "debian/tmp/$i" ]; then
				fail=1
			fi
			complex_doit "(cd debian/tmp ; find $i ! -type d -and -type l -print || true) >> 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

# If fail 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 fail. 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 $fail