postgrespro-1c/pg-wrapper.in

218 lines
6.1 KiB
Bash

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
NAME=`basename $0`
BINDIR=@BINDIR@
MANDIR=@MANDIR@
MANSUF=.gz
# List of possible names of man.config in the various distributions
MAN_CONFIGS="/etc/manpath.config /etc/man_db.conf /etc/man.config"
USAGE_STRING="Usage: $0 links (update|remove)"
make_ua_path() {
if [ -x /usr/sbin/update-alternatives ]; then
echo /usr/sbin/update-alternatives
else
if [ -x /usr/bin/update-alternatives ]; then
echo /usr/bin/update-alternatives
else
echo /sbin/update-alternatives
fi
fi
}
update_man_config() {
for config in $MAN_CONFIGS; do
[ -f "$config" ] || continue
if ! grep $MANDIR "$config" >/dev/null; then
echo "Updating $config"
if [ "$config" = "/etc/man.config" ]; then
echo "MANPATH $MANDIR" >> "$config"
else
echo "MANDATORY_MANPATH $MANDIR" >> "$config"
fi
fi
done
}
cleanup_man_config() {
for config in $MAN_CONFIGS; do
[ -f "$config" ] || continue
if grep $MANDIR "$config" >/dev/null; then
echo "Updating $config"
MANDIR_PATTERN=`echo $MANDIR | sed -e 's,\/,\\\/,g'`
if [ "$config" = "/etc/man.config" ]; then
sed -i.bak "/MANPATH $MANDIR_PATTERN/d" "$config" && rm -f "${config}.bak"
else
sed -i.bak "/MANDATORY_MANPATH $MANDIR_PATTERN/d" "$config" && rm -f "${config}.bak"
fi
fi
done
}
update_links() {
BINLIST=`ls $BINDIR`
MAN1LIST=`ls $MANDIR/man1`
MAN1RULIST=`ls $MANDIR/ru/man1`
UA=`make_ua_path`
if [ -x $UA ] && [ ! "`realpath $UA 2>/dev/null`" = "/bin/true" ]; then
man_installed=0
for name in $BINLIST; do
$UA --install /usr/bin/$name pgsql-${name} $BINDIR/pg-wrapper @VERSION@00
done
for name in $MAN1LIST; do
name=`echo $name | sed -e 's/\.1.*//g'`
$UA --install /usr/share/man/man1/${name}.1${MANSUF} pgsql-${name}man $MANDIR/man1/${name}.1${MANSUF} @VERSION@00 && man_installed=1
done
if [ ! -d /usr/share/man/ru/man1 ]; then
mkdir -p /usr/share/man/ru/man1
fi
for name in $MAN1RULIST; do
name=`echo $name | sed -e 's/\.1.*//g'`
$UA --install /usr/share/man/ru/man1/${name}.1${MANSUF} pgsql-${name}manru $MANDIR/ru/man1/${name}.1${MANSUF} @VERSION@00
done
if [ $man_installed -eq 1 ]; then
update_man_config
fi
else
bin_ready=1
man_ready=1
man_ru_ready=1
for name in $BINLIST; do
if [ -f /usr/bin/$name ] && [ ! -L /usr/bin/$name ]; then
echo "Warning: skipping binary link setup. Binary file already exists: /usr/bin/$name"
bin_ready=0
fi
done
for name in $MAN1LIST; do
name=`echo $name | sed -e 's/\.1.*//g'`
if [ -f /usr/share/man/man1/${name}.1${MANSUF} ] && [ ! -L /usr/share/man/man1/${name}.1${MANSUF} ]; then
echo "Warning: skipping man page setup. Man page with the same name already exists: /usr/share/man/man1/${name}.1${MANSUF}"
man_ready=0
fi
done
for name in $MAN1RULIST; do
name=`echo $name | sed -e 's/\.1.*//g'`
if [ -f /usr/share/man/ru/man1/${name}.1${MANSUF} ] && [ ! -L /usr/share/man/ru/man1/${name}.1${MANSUF} ]; then
echo "Warning: skipping man page setup. Man page with the same name already exists: /usr/share/man/ru/man1/${name}.1${MANSUF}"
man_ru_ready=0
fi
done
if [ $bin_ready -eq 1 ] && [ $man_ready -eq 1 ] && [ $man_ru_ready -eq 1 ]; then
for name in $BINLIST; do
echo "Creating link for /usr/bin/$name"
ln -snf $BINDIR/pg-wrapper /usr/bin/$name
done
for name in $MAN1LIST; do
name=`echo $name | sed -e 's/\.1.*//g'`
echo "Creating link for /usr/share/man/man1/${name}.1${MANSUF}"
ln -snf $MANDIR/man1/${name}.1${MANSUF} /usr/share/man/man1/${name}.1${MANSUF}
done
if [ ! -d /usr/share/man/ru/man1 ]; then
mkdir -p /usr/share/man/ru/man1
fi
for name in $MAN1RULIST; do
name=`echo $name | sed -e 's/\.1.*//g'`
echo "Creating link for /usr/share/man/ru/man1/${name}.1${MANSUF}"
ln -snf $MANDIR/ru/man1/${name}.1${MANSUF} /usr/share/man/ru/man1/${name}.1${MANSUF}
done
update_man_config
fi
fi
}
remove_links() {
BINLIST=`ls $BINDIR`
MAN1LIST=`ls $MANDIR/man1`
MAN1RULIST=`ls $MANDIR/ru/man1`
UA=`make_ua_path`
if [ -x $UA ] && [ ! "`realpath $UA`" = "/bin/true" ] 2>/dev/null; then
for name in $BINLIST; do
$UA --remove pgsql-$name $BINDIR/pg-wrapper
done
for name in $MAN1LIST; do
name=`echo $name | sed -e 's/\.1.*//g'`
$UA --remove pgsql-${name}man $MANDIR/man1/${name}.1${MANSUF}
done
for name in $MAN1RULIST; do
name=`echo $name | sed -e 's/\.1.*//g'`
$UA --remove pgsql-${name}manru $MANDIR/ru/man1/${name}.1${MANSUF}
done
else
PGHOME=`/usr/bin/dirname $BINDIR`
for name in $BINLIST; do
if [ -L /usr/bin/$name ] ; then
path=`readlink /usr/bin/$name`
if echo $path | grep $PGHOME >/dev/null; then
echo "Removing link for /usr/bin/$name"
rm -f /usr/bin/$name
fi
fi
done
for name in $MAN1LIST; do
name=`echo $name | sed -e 's/\.1.*//g'`
if [ -L /usr/share/man/man1/${name}.1${MANSUF} ] ; then
path=`readlink /usr/share/man/man1/${name}.1${MANSUF}`
if echo $path | grep $PGHOME >/dev/null; then
echo "Removing link for /usr/share/man/man1/${name}.1${MANSUF}"
rm -f /usr/share/man/man1/${name}.1${MANSUF}
fi
fi
done
for name in $MAN1RULIST; do
name=`echo $name | sed -e 's/\.1.*//g'`
if [ -L /usr/share/man/ru/man1/${name}.1 ] ; then
path=`readlink /usr/share/man/ru/man1/${name}.1${MANSUF}`
if echo $path | grep $PGHOME >/dev/null; then
echo "Removing link for /usr/share/man/ru/man1/${name}.1${MANSUF}"
rm -f /usr/share/man/ru/man1/${name}.1${MANSUF}
fi
fi
done
fi
cleanup_man_config
}
links() {
case "$1" in
update)
shift
update_links $@
;;
remove)
shift
remove_links $@
;;
*)
echo >&2 "$USAGE_STRING"
exit 2
esac
}
if [ -z "$NAME" ]; then
echo "Error: failed to extract basename of $0"
exit 1
fi
if [ "$NAME" = "pg-wrapper" ]; then
case "$1" in
links)
shift
if [ $(id -u) -ne 0 ]; then
echo "Links management requires root privileges" >&2
exit 1;
fi
links $@
;;
*)
echo >&2 "$USAGE_STRING"
exit 2
esac
else
exec $BINDIR/$NAME ${1:+"$@"}
fi