pkgsrc/lang/perl5/files/perllink.in
tron 8ea403ece5 Teach perllink(1) to transparently handle the case where a file has been
compressed with "gzip". This stops it from creating a lot of broken
symbolic links if "MANZ" is defined.

Bump package revision because of this change.
2012-03-04 10:26:57 +00:00

205 lines
6 KiB
Text

#!@SH@
# $NetBSD: perllink.in,v 1.4 2012/03/04 10:26:57 tron Exp $
#
# Copyright (c) 2005 The NetBSD Foundation, Inc.
# All rights reserved.
#
# This code is derived from software contributed to The NetBSD Foundation
# by Johnny C. Lam.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. All advertising materials mentioning features or use of this software
# must display the following acknowledgement:
# This product includes software developed by the NetBSD
# Foundation, Inc. and its contributors.
# 4. Neither the name of The NetBSD Foundation nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
#
# This script parses the packlists listed on the command line and either
# adds or deletes the symlinks in
#
# <prefix>/bin
# <prefix>/@PKGMANDIR@/man1
#
# that match the files in the packlists.
#
perlprog="@PERL5@"
usage()
{
echo 1>&2 "usage: $0 [-fnv] [-p prefix] add|delete [packlist ...]"
exit 1
}
opt_action=
opt_force=
opt_noaction=
opt_prefix=
opt_packlists=
opt_verbose=
while test $# -gt 0; do
opt="$1"
case "$opt" in
-f|--force) opt_force=yes; shift ;;
-n|--noaction) opt_noaction=yes; shift ;;
-p) opt_prefix="$2"; shift; shift ;;
--prefix=*) opt_prefix="${1#--prefix=}"; shift ;;
-v|--verbose) opt_verbose=yes; shift ;;
--) break; shift ;;
-*) usage ;;
[!-]*) break ;;
esac
done
# We expect the action argument, as well as any packlists, to be left
# in the argument list.
#
test $# -gt 0 || usage
opt_action="$1"; shift
# Get the values of various Config.pm values from perl.
eval `$perlprog -V:prefix -V:scriptdir -V:man1dir -V:vendorprefix -V:vendorscript -V:vendorman1dir -V:siteprefix -V:sitescript -V:siteman1dir -V:archlib`
# The remaining arguments, if any, are packlists.
if test $# -gt 0; then
opt_packlists="$@"
elif test -f "$archlib/.packlist"; then
opt_packlists="$archlib/.packlist"
fi
test -n "$opt_prefix" || opt_prefix="$prefix"
pkgmandir="@PKGMANDIR@"
# Re-point variables so that if they are under $prefix, then they are
# recomputed to point under $opt_prefix.
#
case "$scriptdir" in
$prefix/*) scriptdir="$opt_prefix/${scriptdir#$prefix/}" ;;
"") scriptdir="$opt_prefix/bin" ;;
esac
case "$man1dir" in
$prefix/*) man1dir="$opt_prefix/${man1dir#$prefix/}" ;;
"") man1dir="$opt_prefix/$pkgmandir/man1" ;;
esac
case "$siteprefix" in
$prefix/*) siteprefix="$opt_prefix/${siteprefix#$prefix/}" ;;
"") siteprefix="$opt_prefix" ;;
esac
case "$sitescript" in
$prefix/*) sitescript="$opt_prefix/${sitescript#$prefix/}" ;;
"") sitescript="$scriptdir" ;;
esac
case "$siteman1dir" in
$prefix/*) siteman1dir="$opt_prefix/${siteman1dir#$prefix/}" ;;
"") siteman1dir="$man1dir" ;;
esac
case "$vendorprefix" in
$prefix/*) vendorprefix="$opt_prefix/${vendorprefix#$prefix/}" ;;
"") vendorprefix="$opt_prefix" ;;
esac
case "$vendorscript" in
$prefix/*) vendorscript="$opt_prefix/${vendorscript#$prefix/}" ;;
"") vendorscript="$scriptdir" ;;
esac
case "$vendorman1dir" in
$prefix/*) vendorman1dir="$opt_prefix/${vendorman1dir#$prefix/}" ;;
"") vendorman1dir="$man1dir" ;;
esac
destbindir="$opt_prefix/bin"
destman1dir="$opt_prefix/$pkgmandir/man1"
echo __dummy__ | $perlprog -pe '0' $opt_packlists |
{ while read file junk; do
if [ ! -f "$file" ] && [ -f "$file.gz" ]; then
file="$file.gz"
fi
case "$file" in
$scriptdir/*|$sitescript/*|$vendorscript/*) destdir="$destbindir" ;;
$man1dir/*|$siteman1dir/*|$vendorman1dir/*) destdir="$destman1dir" ;;
esac
case "$file" in
$scriptdir/*) dest="$destdir/${file#$scriptdir/}" ;;
$sitescript/*) dest="$destdir/${file#$sitescript/}" ;;
$vendorscript/*) dest="$destdir/${file#$vendorscript/}" ;;
$man1dir/*) dest="$destdir/${file#$man1dir/}" ;;
$siteman1dir/*) dest="$destdir/${file#$siteman1dir/}" ;;
$vendorman1dir/*) dest="$destdir/${file#$vendorman1dir/}" ;;
*) continue ;;
esac
test "$file" != "$dest" || continue
# Set $src to be a relative symlink from $file into $destdir.
file="${file#/}"
destdir="${destdir#/}"
while test "${file%%/*}" = "${destdir%%/*}"; do
case "$file" in
*/*) file="${file#*/}" ;;
*) file= ;;
esac
case "$destdir" in
*/*) destdir="${destdir#*/}" ;;
*) destdir= ;;
esac
done
src=""
while test -n "$destdir"; do
src="../$src"
case "$destdir" in
*/*) destdir="${destdir#*/}" ;;
*) destdir= ;;
esac
done
src="$src$file"
case "$opt_action" in
add|delete)
if test -n "$opt_force"; then
test -z "$opt_verbose" || \
echo "print STDERR \"rm $dest\\n\";"
test -n "$opt_noaction" || \
echo "unlink(\"$dest\");"
fi
;;
*)
usage
;;
esac
case "$opt_action" in
add)
test -z "$opt_verbose" || \
echo "print STDERR \"ln -s $src $dest\\n\";"
test -n "$opt_noaction" || \
echo "symlink(\"$src\", \"$dest\");"
;;
esac
done;
echo "exit(0);"; } | $perlprog -w -