#!/bin/sh # $Id: update-fonts-alias 189 2005-06-11 00:04:27Z branden $ # This program compiles fonts.alias files for X font directories; see # mkfontdir(1x) for a description of the format of fonts.alias files. # Copyright 1999, 2001, 2002, 2004 Branden Robinson. # Copyright 2006 Steve Langasek. # Licensed under the GNU General Public License, version 2. See the file # /usr/share/common-licenses/GPL or . PROGNAME=${0##*/} # Query the terminal to establish a default number of columns to use for # displaying messages to the user. This is used only as a fallback in the event # the COLUMNS variable is not set. ($COLUMNS can react to SIGWINCH while the # script is running, and this cannot, only being calculated once.) DEFCOLUMNS=$(stty size 2>/dev/null | awk '{print $2}') || true if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" >/dev/null 2>&1; then DEFCOLUMNS=80 fi # Display a message, wrapping lines at the terminal width. message () { echo "$*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS} } # Display a warning message. warn () { message "warning: $*" >&2 } # Display an error message and exit. die () { message "fatal error: $*" >&2 exit 1 } # Display a usage message. usage () { if [ -n "$*" ]; then message "usage error: $*" fi cat <&2 exit 2 fi INCLUDE_ALIAS="$INCLUDE_ALIAS $2" shift 2 ;; -x|--exclude) if [ $# -lt 2 ]; then usage "alias file to exclude is missing" >&2 exit 2 fi EXCLUDE_ALIAS="$EXCLUDE_ALIAS $2" shift 2 ;; -*) usage "unrecognized option" >&2 exit 2 ;; *) break ;; esac done if [ $# -eq 0 ]; then usage "one or more font directories must be specified" >&2 exit 2 fi # Remove aliases to be included from exclude list for f in $INCLUDE_ALIAS; do sed -i "\\,^$f$,d" $EXCLUDE_CONF done # Add aliases to be excluded to exclude list for f in $EXCLUDE_ALIAS; do sed -i "\\,^$f$,d" $EXCLUDE_CONF echo "$f" >> $EXCLUDE_CONF done while [ -n "$1" ]; do # Try to be clever about the argument; were we given an absolute path? if expr "$1" : "/.*" >/dev/null 2>&1; then # Yes; an absolute path to an X font directory was provided. X11R7DIR=$1 ETCDIR=/etc/X11/fonts/${X11R7DIR##*/} ETC7DIR=/etc/X11/fonts/X11R7/${X11R7DIR##*/} if [ "$X11R7DIR" = "$ETCDIR" ] || [ "$X11R7DIR" = "$ETC7DIR" ]; then # We were given an /etc directory as an argument. die "path to X font directory must be used" else warn "absolute path $X11R7DIR was provided" fi else # No; a relative path was provided -- assume we were given just the # basename. X11R7DIR=/usr/share/fonts/X11/$1 ETCDIR=/etc/X11/fonts/$1 ETC7DIR=/etc/X11/fonts/X11R7/$1 fi shift # Confirm that the directories to be operated on exist. VALIDSRC= if [ -d "$ETCDIR" ]; then VALIDSRC=yes else warn "$ETCDIR does not exist or is not a directory" fi if [ -d "$ETC7DIR" ]; then VALIDSRC=yes else if [ -n "$X11R7_LAYOUT" ]; then warn "$ETC7DIR does not exist or is not a directory" fi fi VALIDDEST= if [ -d "$X11R7DIR" ]; then VALIDDEST=yes else warn "$X11R7DIR does not exist or is not a directory" fi if [ -z "$VALIDSRC" ] || [ -z "$VALIDDEST" ]; then continue fi if [ -n "$X11R7DIR" ] && [ -d "$X11R7DIR" ]; then # Write the new alias file in a temporary location in case we are # interrupted. cat >"$X11R7DIR/fonts.alias.update-new" <>"$X11R7DIR/fonts.alias.update-new" cat "$FILE" >>"$X11R7DIR/fonts.alias.update-new" has_data=1 done if [ $has_data -eq 1 ]; then mv "$X11R7DIR/fonts.alias.update-new" "$X11R7DIR/fonts.alias" else rm -f "$X11R7DIR/fonts.alias.update-new" # There are no files to process; remove any alias file already in # the font directory. rm -f "$X11R7DIR/fonts.alias" # Remove the font directory if it is empty. rmdir "$X11R7DIR" >/dev/null 2>&1 || true fi fi done exit 0 # vim:set ai et sts=4 sw=4 tw=80: