summaryrefslogtreecommitdiff
path: root/dh_installdocs
blob: 7cadc5e88dc2942fd28310d504b8409852fe3bcc (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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/usr/bin/perl -w
#
# Reads debian/docs, installs all files listed there into
# /usr/share/doc/$package
# Also installs the debian/copyright and debian/README.debian and debian/TODO
# and handles debian/doc-base.

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

foreach my $package (@{$dh{DOPACKAGES}}) {
	my $tmp=tmpdir($package);
	my $file=pkgfile($package,"docs");

	# If this is a symlink, leave it alone.
	if ( ! -d "$tmp/usr/share/doc/$package" &&
	     ! -l "$tmp/usr/share/doc/$package") {
		doit("install","-g",0,"-o",0,"-d","$tmp/usr/share/doc/$package");
	}

	my @docs;

	if ($file) {
		@docs=filearray($file, ".");
	}

	if (($package eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) {
		push @docs, @ARGV;
	}

	if (@docs) {
		doit("cp", "-a",@docs,"$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");
	}

	# .Debian is correct, according to policy, but I'm easy.
	my $readme_debian=pkgfile($package,'README.Debian');
	if (! $readme_debian) {
		$readme_debian=pkgfile($package,'README.debian');
	}
	if ($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 (isnative($package)) {
			doit("install","-g",0,"-o",0,"-m","644","-p",$todo,
				"$tmp/usr/share/doc/$package/TODO");
		}
		else {
			doit("install","-g",0,"-o",0,"-m","644","-p",$todo,
				"$tmp/usr/share/doc/$package/TODO.Debian");
		}
	}

	# If the "directory" is a dangling symlink, then don't install
	# the copyright file. This is useful for multibinary packages 
	# that share a doc directory.
	if (-d "$tmp/usr/share/doc/$package") {
		# Support debian/package.copyright, but if not present, fall
		# back on debian/copyright for all packages, not just the 
		# main binary package.
		my $copyright=pkgfile($package,'copyright');
		if (! $copyright && -e "debian/copyright") {
			$copyright="debian/copyright";
		}
		if ($copyright) {
				doit("install","-g",0,"-o",0,"-m","644","-p",$copyright,
					"$tmp/usr/share/doc/$package/copyright");
		}
	}

	# Add in the /usr/doc compatability symlinks code.
	if (! $dh{NOSCRIPTS}) {
		autoscript($package,"postinst","postinst-doc",
			"s/#PACKAGE#/$package/g",
		);
		autoscript($package,"prerm","prerm-doc",
			"s/#PACKAGE#/$package/g",
		);
	}

	# Handle doc-base files. There are two filename formats, the usual
	# plus an extended format (debian/package.*).
	my %doc_ids;
	
	opendir(DEB,"debian/") || error("can't read debian directory: $!");
	# If this is the main package, we need to handle unprefixed filenames.
	# For all packages, we must support both the usual filename format plus
	# that format with a period an something appended.
	my $regexp="\Q$package\E\.";
	if ($package eq $dh{MAINPACKAGE}) {
		$regexp="(|$regexp)";
	}
	foreach my $fn (grep {/^${regexp}doc-base(\..*)?$/} readdir(DEB)) {
		# Parse the file to get the doc id.
		open (IN, "debian/$fn") || die "Cannot read debian/$fn.";
		while (<IN>) {
			if (/^Document:\s+(.*)(\s+)?/) {
				$doc_ids{$fn}=$1;
				last;
			}
		}
		close IN;
	}
	closedir(DEB);
	
	if (%doc_ids) {
		if (! -d "$tmp/usr/share/doc-base/") {
			doit("install","-g",0,"-o",0,"-d","$tmp/usr/share/doc-base/");
		}
	}
	foreach my $fn (keys %doc_ids) {
		doit("install","-g",0,"-o",0,"-m644","-p","debian/$fn",
		     "$tmp/usr/share/doc-base/$doc_ids{$fn}");
		if (! $dh{NOSCRIPTS}) {
			autoscript($package,"postinst","postinst-doc-base",
				"s/#DOC-ID#/$doc_ids{$fn}/",
			);
			autoscript($package,"prerm","prerm-doc-base",
				"s/#DOC-ID#/$doc_ids{$fn}/",
			);
		}
	}
}