[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: