diff options
Diffstat (limited to 'dh_installcatalogs')
-rwxr-xr-x | dh_installcatalogs | 138 |
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 |