summaryrefslogtreecommitdiffstats
path: root/dh_installcatalogs
diff options
context:
space:
mode:
Diffstat (limited to 'dh_installcatalogs')
-rwxr-xr-xdh_installcatalogs138
1 files changed, 138 insertions, 0 deletions
diff --git a/dh_installcatalogs b/dh_installcatalogs
new file mode 100755
index 0000000..aa5f45d
--- /dev/null
+++ b/dh_installcatalogs
@@ -0,0 +1,138 @@
+#!/usr/bin/perl
+
+=head1 NAME
+
+dh_installcatalogs - install and register SGML Catalogs
+
+=cut
+
+use strict;
+use warnings;
+use Debian::Debhelper::Dh_Lib;
+
+our $VERSION = DH_BUILTIN_VERSION;
+
+my $sgmlbasever = "1.28";
+
+=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 and the B<triggers> file 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/>.
+
+Supports substitution variables in compat 13 and later as
+documented in L<debhelper(7)>.
+
+=back
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-n>, B<--no-scripts>
+
+Do not modify F<postinst>/F<postrm>/F<prerm> scripts nor add an
+activation trigger.
+
+=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 cli-options()
+
+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)) {
+ # Ensure the parent exist
+ install_dir($tmpdir."/".dirname($dest));
+ }
+
+ install_file($source,$fulldest);
+
+ push(@sgmlinstalled,$dest);
+ }
+ }
+ if (@sgmlinstalled) {
+ addsubstvar($package, "misc:Depends", "sgml-base", ">= $sgmlbasever");
+
+ install_dir("$tmpdir/etc/sgml");
+
+ my $centralcat = "/etc/sgml/$package.cat";
+
+ open(my $fd, ">", "$tmpdir$centralcat") || error("failed to write to $tmpdir$centralcat");
+ foreach my $sgmldest (@sgmlinstalled) {
+ print {$fd} "CATALOG " . $sgmldest . "\n";
+ }
+ close($fd) or error("close $tmpdir$centralcat: $!");
+
+ if (! $dh{NOSCRIPTS}) {
+ autotrigger($package, "activate-await", "update-sgmlcatalog");
+ autoscript($package, "postrm", "postrm-sgmlcatalog",
+ { 'CENTRALCAT' => $centralcat });
+ }
+ }
+ 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