On my home systems, I install packages into /sw/package-version. For instance, GhostScript 5.03 goes into /sw/gs-5.03, which its binaries in /sw/gs-5.03/bin, its manual pages in /sw/gs-5.03/man/man1, and so forth. However, I want symlinks to the files that make up the package from /usr/local, so that /usr/local/bin/gs is a symlink to /sw/gs-5.03/bin/gs and so forth.
This script handles that process, with a few bells and whistles:
Here's the script:
Usage: mkswlinks [options] <package_name> Options: -h get help -dest <dir> link under <dir> instead of /usr/local -src <dir> package is in <dir> rather than /sw -n don't really install, just print actions -y pre-answer all questions "yes" -q quiet mode (don't print READMEs, etc.) Examples: mkswlinks mh-6.8.3 mkswlinks -n tk-4.0 mkswlinks -y -dest /usr/testing elm-2.4 There must be a directory /sw/<package_name>. For any well-known subdirectory names under <package_name> (such as bin, sbin, lib, etc.), that subdirectory's _contents_ will be symlinked to the corresponding subdirectory under /usr/local. (For instance, /sw/mh-6.8.3/bin/inc would be symlinked to /usr/local/bin/inc.) Note that typically the contents of a packages lib directory should be another subdirectory, so that for instance /sw/mh-6.8.3/lib/mh-6.8.3 will be symlinked to /usr/local/lib/mh-6.8.3 . (man and catman directories are treated specially, to Do The Right Thing(TM).) Subdirectories under /usr/local are created as needed. Non-well-known subdirectories are an error, and probably mean that this script needs to be updated. If a file "link.sh" exists, it will be executed instead to create the links. If a file "install.sh" exists, the user will be given the option to execute it _in addition to_ making the symlinks. This would typically be used to copy some of the files to local disk, e.g. so there can be a copy of tcsh in /bin .