summaryrefslogtreecommitdiff
path: root/dh_installcatalogs
blob: f65ab7cb18008df1c32eab234f4708014a8ca139 (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
131
132
#!/usr/bin/perl -w

=head1 NAME

dh_installcatalogs - install and register SGML Catalogs

=cut

use strict;
use Debian::Debhelper::Dh_Lib;

my $sgmlbasever = "1.26+nmu2";

=head1 SYNOPSIS

B<dh_installcatalogs> [S<I<debhelper options>>] [B<-n>]

=head1 DESCRIPTION

B<dh_installcatalogs> is a debhelper program that installs and
registers SGML catalogs. It complies with the Debian XML/SGML policy.

Catalogs will be registered in a supercatalog, in
F</etc/sgml/I<package>.cat>.

This command automatically adds maintainer script snippets for
registering and unregistering the catalogs and supercatalogs (unless
B<-n> is used). These snippets are inserted into the maintainer scripts
by B<dh_installdeb>; see L<dh_installdeb(1)> for an explanation of
Debhelper maintainer script snippets.

A dependency on B<sgml-base> will be added to B<${misc:Depends}>, so be
sure your package uses that variable in F<debian/control>.

=head1 FILES

=over 4

=item debian/I<package>.sgmlcatalogs

Lists the catalogs to be installed per package. Each line in that file
should be of the form C<I<source> I<dest>>, where I<source> indicates where the
catalog resides in the source tree, and I<dest> indicates the destination
location for the catalog under the package build area. I<dest> should
start with F</usr/share/sgml/>.

=back

=head1 OPTIONS

=over 4

=item B<-n>, B<--noscripts>

Do not modify F<postinst>/F<postrm>/F<prerm> scripts.

=back

=head1 NOTES

Note that this command is not idempotent. L<dh_prep(1)> should be
called between invocations of this command. Otherwise, it may cause
multiple instances of the same text to be added to maintainer scripts.

=cut

init();

# PROMISE: DH NOOP WITHOUT sgmlcatalogs

foreach my $package (@{$dh{DOPACKAGES}}) {
	my $tmpdir = tmpdir($package);
	my $sgmlcatlistfile = pkgfile($package, "sgmlcatalogs");
	my @sgmlinstalled; # catalogs we've installed
	if ($#ARGV >= 0) {
		error("extra command-line arguments");
	}
	if ($sgmlcatlistfile) {
		foreach my $line (filedoublearray($sgmlcatlistfile)) {
			my $source = $line->[0];
			my $dest = $line->[1];
	                my $fulldest = "$tmpdir/$dest"; 
			$fulldest =~ s|//|/|g; # beautification
	
			if (! -d dirname($fulldest)) {
				doit("install","-d","-m755",$tmpdir."/".dirname($dest));
			}

			doit("install","-p","-m644",$source,$fulldest);
	
			push(@sgmlinstalled,$dest);
		}
	}
	if (@sgmlinstalled) {
		addsubstvar($package, "misc:Depends", "sgml-base", ">= $sgmlbasever");

		if (! -d "$tmpdir/etc/sgml") {
			doit("install","-d","-m755","$tmpdir/etc/sgml");
		}

		my $centralcat = "/etc/sgml/$package.cat";

		open(CENTRALCAT, ">", "$tmpdir$centralcat") || error("failed to write to $tmpdir$centralcat");
		foreach my $sgmldest (@sgmlinstalled) {
			print CENTRALCAT "CATALOG " . $sgmldest . "\n";
		}
		close CENTRALCAT;

		if (! $dh{NOSCRIPTS}) {
			autoscript($package, "preinst", "preinst-sgmlcatalog",
				   "s%#CENTRALCAT#%$centralcat%g;");
			autoscript($package, "postrm", "postrm-sgmlcatalog",
				   "s%#CENTRALCAT#%$centralcat%g;");
		}
	}
	else {
		# remove the dependency
		addsubstvar($package, "misc:Depends", "sgml-base", ">= $sgmlbasever", 1);
	}
}

=head1 SEE ALSO

L<debhelper(7)>

F</usr/share/doc/sgml-base-doc/>

=head1 AUTHOR

Adam Di Carlo <aph@debian.org>

=cut