home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / hensa / maths / plplot / plplot_2 / mklinks < prev    next >
Text File  |  1994-08-25  |  7KB  |  255 lines

  1. #!/bin/sh
  2.  
  3. #*************************************************************************
  4. #
  5. # $Id: mklinks,v 1.4 1994/08/25 03:52:25 mjl Exp $
  6. #
  7. # mklinks - makes (or removes) soft-links from distribution directory to
  8. #           more appropriate places (typically under /usr/local).
  9. #
  10. # Maurice LeBrun (mjl@dino.ph.utexas.edu)
  11. # IFS, University of Texas at Austin
  12. # May 17, 1994
  13. #
  14. # Arguments: 
  15. #    -a    Add soft links
  16. #    -n    Print commands without executing
  17. #    -r    Remove soft links
  18. #
  19. # Anything else results in a short help message being printed.
  20. #
  21. # I wrote this script to simplify the business of installing software
  22. # distributions.  With a lot of packages continuing to evolve at a pretty
  23. # good clip, it helps to be able to update without too much hassle.  Also,
  24. # it is best to provide a fairly consistent organization of the files on
  25. # disk, one that fits into just about anyone's system management scheme.
  26. # The method I use works whether you are system manager or just some poor
  27. # slob user :-).
  28. #
  29. # The idea is to type "make install" in the build directory, with the
  30. # install target set to some empty directory.  A good choice is
  31. # /usr/local/<pkg><ver>, where <pkg> is the software package name and
  32. # <ver> is the version.  This way you can have multiple versions of the
  33. # package installed, with only one of them easily accessible.  Or you can
  34. # leave out the version number.
  35. #
  36. # By softlinking the package distribution files into the usual /usr/local
  37. # areas you (a) avoid requiring a change in PATH to get at the binaries,
  38. # (b) avoid requiring changes to makefiles to get include and lib
  39. # settings, (c) avoid requiring changes to MANPATH settings to allow
  40. # access to the man pages, and (d) have an easy way to do upgrades or
  41. # degrades.
  42. #
  43. # The main difficulty as I see it with using softlinks from /usr/local
  44. # areas into /usr/local/bin, /usr/local/lib, /usr/local/include, and
  45. # /usr/local/man, is that once created, the softlinks are hard to get rid
  46. # of.  If you decide to delete the package, you must manually delete the
  47. # softlinks as well.  Switching between versions is an onerous task,
  48. # especially if you want to back down to a previous revision.  Therefore,
  49. # a fundamental capability of this script is to allow easy removal of all
  50. # created softlinks (-r option).
  51. #
  52. #*************************************************************************
  53.  
  54. # Miscellaneous settings
  55.  
  56. NAME=$0            # Name of script
  57. CWD=`pwd`        # Current directory
  58. LINK_MAN=1        # Install man pages (set to null to disable)
  59.  
  60. # Infer package name from directory name
  61. # Not all systems have "basename" so use sed for this.
  62.  
  63. PKG=`echo $CWD | sed 's%/.*/%%'`
  64.  
  65. # Get base target directory -- the links will go into $INSTALL_DIR/bin,
  66. # $INSTALL_DIR/lib, etc.  Since the package is typically in
  67. # /usr/local/<pkg>, INSTALL_DIR is just one directory up.  Use an absolute
  68. # path name rather than relative (..) since it's less confusing.
  69.  
  70. INSTALL_DIR=`echo $CWD | sed 's%/[^/][^/]*$%%'`
  71.  
  72. # Per-package defaults:
  73. #    PKG_NAME        Name of package, for help/error messages
  74. #    REFERENCE_FILE    Name of an installed file to assist internal logic
  75.  
  76. case "$PKG" in
  77.  
  78.     plplot* )
  79.     
  80.     # Settings relevant to PLplot
  81.     # I typically put PLplot in /usr/local/plplot or $HOME/local/plplot.
  82.  
  83.     PKG_NAME="PLplot"
  84.     REFERENCE_FILE="$INSTALL_DIR/bin/plrender"
  85.     ;;
  86.  
  87.     tcl*|tk* )
  88.     
  89.     # Settings relevant to Tcl/TK
  90.     # I typically put Tcl/TK and related tools in /usr/local/tk<ver> or
  91.     # $HOME/local/tk<ver>. 
  92.  
  93.     PKG_NAME="Tcl/TK/etc"
  94.     REFERENCE_FILE="$INSTALL_DIR/bin/tclsh"
  95.     ;;
  96.  
  97.     * )
  98.     echo "Unrecognized package; aborting"
  99.     exit
  100.     ;;
  101. esac
  102.  
  103. # Account for differences in /bin/sh semantics wrt soft links.
  104.  
  105. IF_SOFT="-h"
  106. if test `uname` = "AIX"; then
  107.     IF_SOFT="-L"
  108. fi
  109.  
  110. # Define a symbol for echo to save a little bit of space.
  111.  
  112. e=echo
  113.  
  114. #*************************************************************************
  115.  
  116. # Spits out help message, then exits
  117.  
  118. help () {
  119.  
  120. $e "Usage: $NAME [-n] [-a | -r]"
  121. $e "       Creates (-a) or removes (-r) soft links to $PKG_NAME files."
  122. $e "       Currently configured to put soft links under $INSTALL_DIR."
  123. $e ""
  124. $e "       If -n is specified, commands are printed with no action taken."
  125. $e "       The -n flag must come first, if specified."
  126.     exit 1
  127. }
  128.  
  129. #*************************************************************************
  130.  
  131. # Adds one or many soft-links.  Creates directory if necessary.
  132. # $1 - subdir name
  133. # $2 - file spec
  134.  
  135. add_link () {
  136.  
  137.     if test -d "$CWD/$1"; then
  138.  
  139.     if test ! -d "$INSTALL_DIR/$1"; then
  140.         if test "$DO_NOTHING"; then
  141.         echo "mkdir -p $INSTALL_DIR/$1"
  142.         else
  143.         mkdir -p $INSTALL_DIR/$1
  144.         fi
  145.     fi
  146.  
  147.     if test "$DO_NOTHING"; then
  148.         echo "ln -s $CWD/$1/$2  $INSTALL_DIR/$1"
  149.     else
  150.         ln -s $CWD/$1/$2  $INSTALL_DIR/$1
  151.     fi
  152.     fi
  153. }
  154.  
  155. #*************************************************************************
  156.  
  157. # Removes a single soft-link
  158. # $1 - link name (relative to $INSTALL_DIR)
  159.  
  160. rm_link () {
  161.  
  162.     if test $IF_SOFT "$INSTALL_DIR/$1"; then
  163.     if test "$DO_NOTHING"; then
  164.         echo "rm $INSTALL_DIR/$1"
  165.     else
  166.         rm $INSTALL_DIR/$1
  167.     fi
  168.     fi
  169. }
  170.  
  171. #*************************************************************************
  172.  
  173. # Removes multiple soft-links
  174. # $1 through $# - link specs (relative to $INSTALL_DIR)
  175.  
  176. rm_links () {
  177.     for file in $*; do
  178.     rm_link $file
  179.     done
  180. }
  181.  
  182. #*************************************************************************
  183.  
  184. # Add links
  185.  
  186. Add () {
  187.  
  188. # Bomb out if we're not starting clean
  189.  
  190.     if test $IF_SOFT "$REFERENCE_FILE"; then
  191.     echo "Must remove old links first -- use \"$NAME -r\"."
  192.     exit 1
  193.     fi
  194.  
  195. # Set up links
  196.  
  197.     echo "Adding links from $CWD to $INSTALL_DIR"
  198.  
  199.     add_link "bin"    "*"
  200.     add_link "lib"    "*"
  201.     add_link "include"    "*.h"
  202.  
  203.     if test "$LINK_MAN"; then
  204.     add_link "man/man1" "*.1"
  205.     add_link "man/man3" "*.3"
  206.     add_link "man/mann" "*.n"
  207.     fi
  208. }
  209.  
  210. #*************************************************************************
  211.  
  212. # Remove links
  213.  
  214. Remove () {
  215.  
  216. # Bomb out if links already removed.
  217.  
  218.     if test ! $IF_SOFT "$REFERENCE_FILE"; then
  219.     echo 'Soft links already removed.'
  220.     exit 1
  221.     fi
  222.  
  223. # Delete links
  224. # Here we reglob to determine what links need deleting.  Note that in each
  225. # case, we check to make sure it really is a soft link.
  226.  
  227.     echo "Removing links from $CWD to $INSTALL_DIR"
  228.  
  229.     rm_links bin/* lib/* include/*.h
  230.  
  231.     if test "$LINK_MAN"; then
  232.     rm_links man/man1/*.1 man/man3/*.3 man/mann/*.n
  233.     fi
  234. }
  235.  
  236. #*************************************************************************
  237.  
  238. # Call the necessary function to do the job.
  239.  
  240. if test "$1" = "-n"; then
  241.     DO_NOTHING=1
  242.     shift
  243. fi
  244.  
  245. if test "$1" = '-a'; then
  246.     Add
  247.  
  248. elif test "$1" = '-r'; then
  249.     Remove
  250.  
  251. else
  252.     help
  253. fi
  254. exit 0
  255.