dh_installtexfonts is ready for testing
Hi all!
A free half hour made me into producing a first version of
dh_installtexfonts
All is in svn under tex-common/trunk/debhelper
I tried it out on a sample package, and it worked.
You have to create a file
debian/$(package).maps
and/or call
dh_installtexfonts <more map files>
what happens is that:
. the /etc/texmf/updmap.d/50$(package).cfg is created
. the /var/lib/tex-common/fontmap-cfg/$package.list is created
. the scripts I recently posted (the snippets from the lmodern package)
are included into the postinst and postrm scripts
. ${misc:Depends} is enriched with tex-common (>= 0.7)
Questions/Todo:
. Should we install the map files automatically?
I would say no, because we cannot guess the location and we don't know
where they actually are (ok, this can be changed)
. I do not create the directories var/lib/tex-common/fontmap-cfg and
etc/texmf/updmap.d, as I don't know about the policy in dh_scripts
about this, anybody knows? Probably we should generate them.
. Did I miss something?
For your convenience I attach the three files, dh_installtexfonts (going
into /usr/bin), postinst-texfonts and postrm-texfonts (going into
/usr/share/debhelper/autoscripts)
Please send me comments/suggestions/flames, or change it yourself in svn!
Best wishes
Norbert
-------------------------------------------------------------------------------
Dr. Norbert Preining <preining AT logic DOT at> Università di Siena
sip:preining@at43.tuwien.ac.at +43 (0) 59966-690018
gpg DSA: 0x09C5B094 fp: 14DF 2E6C 0307 BE6D AD76 A9C0 D2BF 4AA3 09C5 B094
-------------------------------------------------------------------------------
EVERSCREECH (n.)
The look given by a group of polite, angry people to a rude, calm
queue-barger.
--- Douglas Adams, The Meaning of Liff
#!/usr/bin/perl -w
=head1 NAME
dh_installtexfonts - register TeX type1 fonts
=cut
use strict;
use Debian::Debhelper::Dh_Lib;
=head1 SYNOPSIS
B<dh_installtexfonts> [S<I<debhelper options>>]
=head1 DESCRIPTION
dh_installtexfonts is a debhelper program that is responsible for
registering type1 fonts for TeX.
Your package should depend on tex-common (>= 0.7) so that the
update-* commands are available. (This program adds that dependency to
${misc:Depends}.)
This program automatically generates the postinst and postrm commands needed
to register TeX fonts. See L<dh_installdeb(1)> for an explanation of how this
works.
=head1 NOTES
See Debian policy, section 11.8.5. for details about doing fonts the Debian
way.
=cut
init();
foreach my $package (@{$dh{DOPACKAGES}}) {
my $tmp=tmpdir($package);
my $file=pkgfile($package,"maps");
my @maps;
if ($file) {
open(FOO, "<$file") || error("$file cannot be opened.");
@maps = <FOO>;
close(FOO);
chomp @maps;
}
if (($package eq $dh{FIRSTPACKAGE} || $dh{PARAMS_ALL}) && @ARGV) {
push @maps, @ARGV;
}
open(CFGFILE, ">$tmp/etc/texmf/updmap.d/50$package.cfg") ||
error("Cannot open $tmp/etc/texmf/updmap.d/10$package.cfg for writing!");
print CFGFILE <<EOF;
# 50$package.cfg
# You can change/add entries to this file and changes will be preserved
# over upgrades, even if you have removed the main package prior
# (not if you purged it). YOu should leave the following pseudo comment
# present in the file!
# -_- DebPkgProvidedMaps -_-
#
EOF
foreach (@maps) {
print CFGFILE "Map $_\n";
}
close(CFGFILE);
open(LISTFILE, ">$tmp/var/lib/tex-common/fontmap-cfg/$package.list")||
error("Cannot open $tmp/var/lib/tex-common/fmtutil-cnf/$package.list for writing!");
print LISTFILE "50$package";
close(LISTFILE);
autoscript($package, "postinst", "postinst-texfonts", "");
autoscript($package, "postrm", "postrm-texfonts", "");
addsubstvar($package, "misc:Depends", "tex-common", ">= 0.7");
}
=head1 SEE ALSO
L<debhelper(7)>
This program is till now not a part of debhelper.
=head1 AUTHOR
Norbert Preining <preining@logic.at>
=cut
update_fontmaps()
{
update-updmap --quiet
# mktexlsr is recommended now because updmap-sys relies heavily on
# Kpathsea to locate updmap.cfg and the map files. Also, it is slightly
# better not to specify a particular directory to refresh because
# updmap.cfg is typically found in $TEXMFSYSVAR while the map files are in
# $TEXMFMAIN.
# According to the Debian TeX policy, running mktexlsr and updmap-sys
# should work as long as tex-common is configured and these files are
# available (general Debian policy wouldn't assure that without this
# override from the Debian TeX policy).
if which mktexlsr >/dev/null; then mktexlsr; fi
if which updmap-sys >/dev/null; then
printf "Running updmap-sys... "
updmap-sys --quiet
echo "done."
fi
return 0
}
case "$1" in
configure)
update_fontmaps
;;
abort-upgrade|abort-remove|abort-deconfigure)
update_fontmaps
;;
*)
echo "postinst called with unknown argument \`$1'" >&2
exit 1
;;
esac
tell_that_errors_are_ok()
{
# Cheap option handling...
if [ "$1" = -n ]; then
prog="$2"
endwith=' '
else
prog="$1"
endwith='\n'
fi
# According to the Debian TeX policy, running mktexlsr and updmap-sys
# should work as long as tex-common is configured and these files are
# available (general Debian policy wouldn't assure that without this
# override from the Debian TeX policy).
printf "\
Trying to run '$prog' (error messages can be ignored if tex-common
is not configured)...$endwith"
return 0
}
# The function name is *try_to*_update_fontmaps because the following
# scenario might happen:
# 1. this package is deconfigured
# 2. tex-common and tetex-bin are removed
# 3. this package is removed or purged
#
# (cf. Policy § 6.5, step 2, about a conflicting package being removed due
# to the installation of the package being discussed).
#
# In this case, update-updmap, mktexlsr and updmap-sys would all be gone once
# tex-common and tetex-bin are removed, so we must append "|| true" to their
# calls.
try_to_update_fontmaps()
{
# Don't print alarming error messages if the programs aren't even
# available.
if which update-updmap >/dev/null; then
tell_that_errors_are_ok -n update-updmap
update-updmap --quiet || true
echo "done."
fi
# mktexlsr is recommended now because updmap-sys relies heavily on
# Kpathsea to locate updmap.cfg and the map files. Also, it is slightly
# better not to specify a particular directory to refresh because
# updmap.cfg is typically found in $TEXMFSYSVAR while the map files are in
# $TEXMFMAIN.
if which mktexlsr >/dev/null; then
tell_that_errors_are_ok mktexlsr
mktexlsr || true
echo "done."
fi
if which updmap-sys >/dev/null; then
tell_that_errors_are_ok -n updmap-sys
updmap-sys --quiet || true
echo "done."
fi
return 0
}
case "$1" in
remove|disappear)
try_to_update_fontmaps
;;
purge)
# Supposing updmap.cfg & Co are clean (which I think is a reasonable
# assumption), we don't need to call try_to_update_fontmaps().
# Calling it on remove _and_ on purge just for hypothetical users
# who would break their config before purging this package seems to
# be more annoying than useful (it takes a lot of time).
;;
upgrade|failed-upgrade|abort-upgrade|abort-install)
;;
*)
echo "postrm called with unknown argument \`$1'" >&2
exit 1
;;
esac
Reply to: