Linux ip-172-26-7-228 5.4.0-1103-aws #111~18.04.1-Ubuntu SMP Tue May 23 20:04:10 UTC 2023 x86_64
Your IP : 18.227.105.110
#!/bin/bash -e
#
# update-tl-stacked-conffile --- Generate stacked conffiles of TL for all trees
# Copyright (C) 2012-2015 Norbert Preining
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 dated June, 1991.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; see the file COPYING. If not, write to the
# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
# Boston, MA 02110-1301 USA.
version="1.0"
progname=$(basename "$0")
if [ "$progname" = "update-updmap" ] ; then
SNIPPET_BASE=/var/lib/tex-common/fontmap-cfg
SNIPPET_OLD_BASE=/etc/texmf/updmap.d
NAME=updmap
EXT=.cfg
elif [ "$progname" = "update-fmtutil" ] ; then
SNIPPET_BASE=/var/lib/tex-common/fmtutil-cnf
SNIPPET_OLD_BASE=/etc/texmf/fmt.d
NAME=fmtutil
EXT=.cnf
else
echo "Please call me either as update-updmap or update-fmtutil!"
exit 1
fi
# this needs to be kept in sync with dh_installtex
COMPONENTS="texmf texlive"
usage="Usage: $progname [OPTION...]
Generate $NAME configuration files.
Options:
--checks perform sanity checks on the generated config file
--quiet don't write anything to the standard output during
normal operation
--help display this help message and exit
--version output version information and exit"
# This ensures that if $tempfile is in the *environment*, we won't erase
# the file it could point to in case the script is killed by a signal before
# it has had a chance to even create its temporary file.
tempfile=""
cleanup()
{
rc=$?
[ -n "$tempfile" ] && rm -f "$tempfile"
exit $rc
}
perform_contents_check ()
{
if [ $NAME = fmtutil ] ; then
# no checks at the moment
return 0
elif [ $NAME = updmap ] ; then
fn="$1"
grep -i '^\W*\(Mixed\|Kanji\)\?Map' "$fn" | while read foo map ; do
# now check the existence of the hyphenation file
if [ -z $(kpsewhich -format=map $map) ] ; then
cat >&2 <<EOF
The config file $fn references a file not in the kpathsea database:
$map
Calling updmap(-sys) will break!
This may be ok, but it could also be a typing error.
EOF
fi
done
fi
}
####################################################
#
# STUFF THAT IS ONLY HERE TO KEEP COMPATIBILITY WITH
# PACKAGES OUTSIDE DEBIAN THAT SHIP OLD updmap.d
# FILES AND WE CANNOT BREAK AGAINST THEM
#
####################################################
# include_file <file path>
include_file()
{
file="$1"
printf "\n# ## From file: $file\n"
cat "$file"
echo "# End of file: $file"
}
# do_not_include_file <file path>
do_not_include_file()
{
file="$1"
cat <<EOF
#
# $file not included because either it wasn't
# up-to-date (conffile update pending) or the package shipping it was
# apparently removed (no corresponding .list file in
# $SNIPPET_BASE/).
#
EOF
}
handle_file()
{
file="$1"
DebPkgProvidedMaps_magic_comment="^[#%] -_- DebPkgProvidedMaps -_-"
# Does the file have a dpkg-new sister?
if [ -f "${file}.dpkg-new" ]; then
do_not_include_file "$file"
else
# Does the file have the magic comment?
if grep -E "$DebPkgProvidedMaps_magic_comment" "$file" >/dev/null; then
# Is the package "$file" comes from still installed?
if [ -d "$SNIPPET_BASE" ] \
&& find "$SNIPPET_BASE" -type f -name '*.list' -print0 \
| xargs -0r cat \
| grep -E "^$(basename "$file" $EXT)\$" >/dev/null;
then
include_file "$file"
else
do_not_include_file "$file"
fi
else
include_file "$file"
fi
fi
}
#######################################################
#
# end of backward compatibility stuff
#
#######################################################
# The list of signals to trap is taken from teTeX 3's updmap script, but they
# have been converted to signal names because we can only rely on these on
# POSIX systems.
trap 'cleanup' HUP INT QUIT BUS PIPE TERM
# -v (verbose) is here for backward compatibility only.
TEMP=$(getopt -o +vc:o: --longoptions \
check,quiet,help,version \
-n "$progname" -- "$@")
case $? in
0) : ;;
1) echo "$usage" >&2; exit 1 ;;
*) exit 1 ;;
esac
# Don't remove the quotes around $TEMP!
eval set -- "$TEMP"
# ****************************************************************************
# * Defaults *
# ****************************************************************************
quiet=0
dochecks=0
# ****************************************************************************
# * Options handling *
# ****************************************************************************
while true; do
case "$1" in
--quiet) quiet=1; shift ;;
--check) dochecks=1; shift ;;
-v) printf "\
${progname}'s -v option is deprecated. The default mode of operation will
be verbose as soon as enough packages use the --quiet option. Please update
your scripts accordingly.\n\n" >&2; quiet=0; shift ;;
--help) echo "$usage"; exit 0 ;;
--version) echo "$progname $version"; exit 0 ;;
--) shift; break ;;
*) echo "$progname: unexpected option '$1'; please report a bug." >&2
exit 1 ;;
esac
done
# Non-option arguments are not allowed.
if [ $# -ne 0 ]; then
echo "$usage" >&2
exit 1
fi
# ****************************************************************************
# * Actual work *
# ****************************************************************************
updated_files=""
for tree in $COMPONENTS ; do
if [ $tree = "texmf" ] ; then
# output_file=/usr/share/texmf/web2c/updmap.cfg
if [ $NAME = "updmap" ] ; then
output_file=/var/lib/texmf/updmap.cfg-DEBIAN
else
output_file=/var/lib/texmf/fmtutil.cnf-DEBIAN
fi
elif [ $tree = "texlive" ] ; then
# output_file=/usr/share/texlive/texmf-dist/web2c/updmap.cfg
if [ $NAME = "updmap" ] ; then
output_file=/var/lib/texmf/updmap.cfg-TEXLIVEDIST
else
output_file=/var/lib/texmf/fmtutil.cnf-TEXLIVEDIST
fi
else
echo "$progname: that cannot happen!" >&2
exit 1
fi
# create output dir in any case ...
destdir=$(dirname $output_file)
mkdir -p "$destdir"
cd "$destdir"
#
if [ $quiet = 0 ]; then
if [ -f "$output_file" ]; then
printf "Regenerating '${output_file}'... "
else
printf "Generating '${output_file}'... "
fi
fi
# Creating the temporary file in the output directory gives it
# automatically the default permissions appropriate for that
# directory, according to the user's umask. When it is complete,
# we'll be able to rename it atomically to the desired output
# file, which will therefore have the right permissions.
tempfile="update-tl-conffile.$tree.new"
if ! printf "" > "$tempfile" ; then
echo "$progname: cannot write to the temporary file '$tempfile'" >&2
exit 1
fi
printf "\
### This file was automatically generated by ${progname}.
#
# Any local change will be overwritten. Please see the documentation
# of updmap on how to override things from here.
#
###\n" >> "$tempfile"
# From now on, $tempfile must be deleted on exit; therefore, cleanup() should
# be used.
if [ -d "$SNIPPET_BASE/$tree" ] ; then
find "$SNIPPET_BASE/$tree" -maxdepth 1 -type f -name '*'$EXT \
-exec cat '{}' \; >> "$tempfile"
fi
if [ $tree = "texmf" ] ; then
#
# also include snippets in /etc/texmf/updmap.d but give
# big fat warnings that this might create problems!!!
if [ -d $SNIPPET_OLD_BASE ] ; then
old_files=$(find $SNIPPET_OLD_BASE -maxdepth 1 -type f -name '*'$EXT | LC_COLLATE=C sort)
if [ -n "$old_files" ] ; then
cat >&2 <<EOF
Warning: Old configuration style found in $SNIPPET_OLD_BASE
Warning: For now these files have been included,
Warning: but expect inconsistencies.
Warning: These packages should be rebuild with tex-common.
Warning: Please see /usr/share/doc/tex-common/NEWS.Debian.gz
EOF
for file in $old_files ; do
echo "Warning: found file: $file" >&2
done
echo "" >&2
fi
for file in $old_files ; do
handle_file $file >> "$tempfile"
done
fi
fi
# This is atomic.
mv "$tempfile" "$output_file"
updated_files="$updated_files\t$output_file\n";
# Check wether the generated file is decent, if all necessary files are
# installed, etc.
if [ "$dochecks" = 1 ] ; then
perform_contents_check "$output_file"
fi
if [ $quiet = 0 ]; then
printf "done.\n"
fi
done
if [ $quiet = 0 ] && [ -n "$updated_files" ] ; then
echo "$progname has updated the following file(s):"
printf "$updated_files"
echo "If you want to activate the changes in the above file(s),"
echo "you should run ${NAME}-sys or $NAME."
fi
# vim:set expandtab tabstop=4 autoindent: #
|