home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ARM Club 3
/
TheARMClub_PDCD3.iso
/
hensa
/
maths
/
plplot
/
plplot_2
/
mklinks
< prev
next >
Wrap
Text File
|
1994-08-25
|
7KB
|
255 lines
#!/bin/sh
#*************************************************************************
#
# $Id: mklinks,v 1.4 1994/08/25 03:52:25 mjl Exp $
#
# mklinks - makes (or removes) soft-links from distribution directory to
# more appropriate places (typically under /usr/local).
#
# Maurice LeBrun (mjl@dino.ph.utexas.edu)
# IFS, University of Texas at Austin
# May 17, 1994
#
# Arguments:
# -a Add soft links
# -n Print commands without executing
# -r Remove soft links
#
# Anything else results in a short help message being printed.
#
# I wrote this script to simplify the business of installing software
# distributions. With a lot of packages continuing to evolve at a pretty
# good clip, it helps to be able to update without too much hassle. Also,
# it is best to provide a fairly consistent organization of the files on
# disk, one that fits into just about anyone's system management scheme.
# The method I use works whether you are system manager or just some poor
# slob user :-).
#
# The idea is to type "make install" in the build directory, with the
# install target set to some empty directory. A good choice is
# /usr/local/<pkg><ver>, where <pkg> is the software package name and
# <ver> is the version. This way you can have multiple versions of the
# package installed, with only one of them easily accessible. Or you can
# leave out the version number.
#
# By softlinking the package distribution files into the usual /usr/local
# areas you (a) avoid requiring a change in PATH to get at the binaries,
# (b) avoid requiring changes to makefiles to get include and lib
# settings, (c) avoid requiring changes to MANPATH settings to allow
# access to the man pages, and (d) have an easy way to do upgrades or
# degrades.
#
# The main difficulty as I see it with using softlinks from /usr/local
# areas into /usr/local/bin, /usr/local/lib, /usr/local/include, and
# /usr/local/man, is that once created, the softlinks are hard to get rid
# of. If you decide to delete the package, you must manually delete the
# softlinks as well. Switching between versions is an onerous task,
# especially if you want to back down to a previous revision. Therefore,
# a fundamental capability of this script is to allow easy removal of all
# created softlinks (-r option).
#
#*************************************************************************
# Miscellaneous settings
NAME=$0 # Name of script
CWD=`pwd` # Current directory
LINK_MAN=1 # Install man pages (set to null to disable)
# Infer package name from directory name
# Not all systems have "basename" so use sed for this.
PKG=`echo $CWD | sed 's%/.*/%%'`
# Get base target directory -- the links will go into $INSTALL_DIR/bin,
# $INSTALL_DIR/lib, etc. Since the package is typically in
# /usr/local/<pkg>, INSTALL_DIR is just one directory up. Use an absolute
# path name rather than relative (..) since it's less confusing.
INSTALL_DIR=`echo $CWD | sed 's%/[^/][^/]*$%%'`
# Per-package defaults:
# PKG_NAME Name of package, for help/error messages
# REFERENCE_FILE Name of an installed file to assist internal logic
case "$PKG" in
plplot* )
# Settings relevant to PLplot
# I typically put PLplot in /usr/local/plplot or $HOME/local/plplot.
PKG_NAME="PLplot"
REFERENCE_FILE="$INSTALL_DIR/bin/plrender"
;;
tcl*|tk* )
# Settings relevant to Tcl/TK
# I typically put Tcl/TK and related tools in /usr/local/tk<ver> or
# $HOME/local/tk<ver>.
PKG_NAME="Tcl/TK/etc"
REFERENCE_FILE="$INSTALL_DIR/bin/tclsh"
;;
* )
echo "Unrecognized package; aborting"
exit
;;
esac
# Account for differences in /bin/sh semantics wrt soft links.
IF_SOFT="-h"
if test `uname` = "AIX"; then
IF_SOFT="-L"
fi
# Define a symbol for echo to save a little bit of space.
e=echo
#*************************************************************************
# Spits out help message, then exits
help () {
$e "Usage: $NAME [-n] [-a | -r]"
$e " Creates (-a) or removes (-r) soft links to $PKG_NAME files."
$e " Currently configured to put soft links under $INSTALL_DIR."
$e ""
$e " If -n is specified, commands are printed with no action taken."
$e " The -n flag must come first, if specified."
exit 1
}
#*************************************************************************
# Adds one or many soft-links. Creates directory if necessary.
# $1 - subdir name
# $2 - file spec
add_link () {
if test -d "$CWD/$1"; then
if test ! -d "$INSTALL_DIR/$1"; then
if test "$DO_NOTHING"; then
echo "mkdir -p $INSTALL_DIR/$1"
else
mkdir -p $INSTALL_DIR/$1
fi
fi
if test "$DO_NOTHING"; then
echo "ln -s $CWD/$1/$2 $INSTALL_DIR/$1"
else
ln -s $CWD/$1/$2 $INSTALL_DIR/$1
fi
fi
}
#*************************************************************************
# Removes a single soft-link
# $1 - link name (relative to $INSTALL_DIR)
rm_link () {
if test $IF_SOFT "$INSTALL_DIR/$1"; then
if test "$DO_NOTHING"; then
echo "rm $INSTALL_DIR/$1"
else
rm $INSTALL_DIR/$1
fi
fi
}
#*************************************************************************
# Removes multiple soft-links
# $1 through $# - link specs (relative to $INSTALL_DIR)
rm_links () {
for file in $*; do
rm_link $file
done
}
#*************************************************************************
# Add links
Add () {
# Bomb out if we're not starting clean
if test $IF_SOFT "$REFERENCE_FILE"; then
echo "Must remove old links first -- use \"$NAME -r\"."
exit 1
fi
# Set up links
echo "Adding links from $CWD to $INSTALL_DIR"
add_link "bin" "*"
add_link "lib" "*"
add_link "include" "*.h"
if test "$LINK_MAN"; then
add_link "man/man1" "*.1"
add_link "man/man3" "*.3"
add_link "man/mann" "*.n"
fi
}
#*************************************************************************
# Remove links
Remove () {
# Bomb out if links already removed.
if test ! $IF_SOFT "$REFERENCE_FILE"; then
echo 'Soft links already removed.'
exit 1
fi
# Delete links
# Here we reglob to determine what links need deleting. Note that in each
# case, we check to make sure it really is a soft link.
echo "Removing links from $CWD to $INSTALL_DIR"
rm_links bin/* lib/* include/*.h
if test "$LINK_MAN"; then
rm_links man/man1/*.1 man/man3/*.3 man/mann/*.n
fi
}
#*************************************************************************
# Call the necessary function to do the job.
if test "$1" = "-n"; then
DO_NOTHING=1
shift
fi
if test "$1" = '-a'; then
Add
elif test "$1" = '-r'; then
Remove
else
help
fi
exit 0