| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977 | 
							- #!/bin/bash
 
- # $Id: install.sh 7942 2008-03-26 06:08:08Z xmldoc $
 
- # $Source$ #
 
- # install.sh - Set up user environment for a XML/XSLT distribution
 
- # This is as an interactive installer for updating your
 
- # environment to use an XML/XSLT distribution such as the DocBook
 
- # XSL Stylesheets. Its main purpose is to configure your
 
- # environment with XML catalog data and schema "locating rules"
 
- # data provided in the XML/XSLT distribution.
 
- #
 
- # Although this installer was created for the DocBook project, it
 
- # is a general-purpose tool that can be used with any XML/XSLT
 
- # distribution that provides XML/SGML catalogs and locating rules.
 
- #
 
- # This script is mainly intended to make things easier for you if
 
- # you want to install a particular XML/XSLT distribution that has
 
- # not (yet) been packaged for your OS distro (Debian, Fedora,
 
- # whatever), or to use "snapshot" or development releases 
 
- #
 
- # It works by updating your shell startup file (e.g., .bashrc and
 
- # .cshrc) and .emacs file and by finding or creating a writable
 
- # CatalogManager.properties file to update.
 
- #
 
- # It makes backup copies of any files it touches, and also
 
- # generates a uninstall.sh script for reverting its changes.
 
- #
 
- # In the same directory where it is located, it expects to find
 
- # the following four files:
 
- #   - locatingrules.xml
 
- #   - catalog.xml
 
- #   - catalog
 
- #   - .urilist
 
- # And if it's unable to locate a CatalogManager.properties file in
 
- # your environment, it expects to find an "example" one in the
 
- # same directory as itself, which it copies over to your
 
- # ~/.resolver directory.
 
- #
 
- # If the distribution contains any executables, change the value
 
- # of the thisBinDir to a colon-separated list of the pathnames of
 
- # the directories that contain those executables.
 
- # mydir is the "canonical" absolute pathname for install.sh
 
- mydir=$(cd -P $(dirname $0) && pwd -P) || exit 1
 
- thisLocatingRules=$mydir/locatingrules.xml
 
- thisXmlCatalog=$mydir/catalog.xml
 
- thisSgmlCatalog=$mydir/catalog
 
- # .urilist file contains a list of pairs of local pathnames and
 
- # URIs to test for catalog resolution
 
- thisUriList=$mydir/.urilist
 
- exampleCatalogManager=$mydir/.CatalogManager.properties.example
 
- thisCatalogManager=$HOME/.resolver/CatalogManager.properties
 
- # thisBinDir directory is a colon-separated list of the pathnames
 
- # to all directories that contain executables provided with the
 
- # distribution (for example, the DocBook XSL Stylesheets
 
- # distribution contains a "docbook-xsl-update" convenience script
 
- # for rsync'ing up to the latest docbook-xsl snapshot). The
 
- # install.sh script adds the value of thisBinDir to your PATH
 
- # environment variable
 
- thisBinDir=$mydir/tools/bin
 
- emit_message() {
 
-   echo "$1" 1>&2
 
- }
 
- if [ ! "${*#--batch}" = "$*" ]; then
 
-   batchmode="Yes";
 
- else
 
-   batchmode="No";
 
-   emit_message
 
-   if [ ! "$1" = "--test" ]; then 
 
-     emit_message "NOTE: For non-interactive installs/uninstalls, use --batch"
 
-     if [ ! "$1" = "--uninstall" ]; then
 
-       emit_message
 
-     fi
 
-   fi
 
- fi
 
- osName="Unidentified"
 
- if uname -s | grep -qi "cygwin"; then
 
-   osName="Cygwin"
 
- fi
 
- classPathSeparator=":"
 
- if [ "$osName" = "Cygwin" ]; then
 
-   thisJavaXmlCatalog=$(cygpath -m $thisXmlCatalog)
 
-   classPathSeparator=";"
 
- else
 
-   thisJavaXmlCatalog=$thisXmlCatalog
 
- fi
 
- main() {
 
-   removeOldFiles
 
-   checkRoot
 
-   updateCatalogManager
 
-   checkForResolver
 
-   writeDotFiles
 
-   updateUserStartupFiles
 
-   updateUserDotEmacs
 
-   writeUninstallFile
 
-   writeTestFile
 
-   printExitMessage
 
- }
 
- removeOldFiles() {
 
-   rm -f $mydir/.profile.incl
 
-   rm -f $mydir/.cshrc.incl
 
-   rm -f $mydir/.emacs.el
 
- }
 
- checkRoot() {
 
-   if [ $(id -u)  == "0" ]; then
 
-     cat 1>&2 <<EOF
 
- WARNING: This install script is meant to be run as a non-root
 
-          user, but you are running it as root.
 
- EOF
 
-     read -s -n1 -p "Are you sure you want to continue? [No] "
 
-     emit_message "$REPLY"
 
-     case $REPLY in
 
-       [yY])
 
-       emit_message
 
-       ;;
 
-       *) emit_message "OK, exiting without making changes."
 
-       exit
 
-       ;;
 
-     esac
 
-   fi
 
-   return 0
 
- }
 
- updateCatalogManager() {
 
-   #  - finds or creates a writable CatalogManager.properties file
 
-   #
 
-   #  - adds the catalog.xml file for this distribution to the
 
-   #    CatalogManager.properties file found
 
-   if [ -z "$CLASSPATH" ]; then
 
-     cat 1>&2 <<EOF
 
- NOTE: There is no CLASSPATH variable set in your environment.
 
-       No attempt was made to find a CatalogManager.properties
 
-       file.  Using $thisCatalogManager instead
 
- EOF
 
-   else
 
-     # split CLASSPATH in a list of pathnames by replacing all separator
 
-     # characters with spaces
 
-     if [ "$osName" = "Cygwin" ]; then
 
-       pathnames=$(echo $CLASSPATH | tr ";" " ")
 
-     else
 
-       pathnames=$(echo $CLASSPATH | tr ":" " ")
 
-     fi
 
-     for path in $pathnames; do
 
-     if [ "$osName" = "Cygwin" ]; then
 
-       path=$(cygpath -u $path)
 
-     fi
 
-       # strip out trailing slash from pathname
 
-       path=$(echo $path | sed 's/\/$//')
 
-       # find CatalogManager.properties file
 
-       if [ -f $path/CatalogManager.properties ];
 
-       then
 
-         existingCatalogManager=$path/CatalogManager.properties
 
-         break
 
-       fi
 
-     done
 
-   fi
 
-   # end of CLASSPATH check
 
-   if [ -w "$existingCatalogManager" ]; then
 
-     # existing CatalogManager.properties was found and it is
 
-     # writable, so use it
 
-     myCatalogManager=$existingCatalogManager
 
-   else
 
-     if [ -f "$existingCatalogManager" ]; then
 
-       # a non-writable CatalogManager.properties exists, so emit a
 
-       # note saying that it won't be used
 
-       cat 1>&2 <<EOF
 
- NOTE: $existingCatalogManager file found,
 
-       but you don't have permission to write to it.
 
-       Will instead use:
 
-       $thisCatalogManager
 
- EOF
 
-     else
 
-       # CLASSPATH is set, but no CatalogManager.properties found
 
-       if [ -n "$CLASSPATH" ]; then
 
-         cat 1>&2 <<EOF
 
- NOTE: No CatalogManager.properties found from CLASSPATH.
 
-       Will instead use:
 
-       $thisCatalogManager
 
- EOF
 
-       fi
 
-     fi
 
-     if [ "$batchmode" = "Yes" ]; then
 
-       emit_message
 
-     fi
 
-     # end of check for existing writable CatalogManager.properties
 
-     if [ -f $thisCatalogManager ]; then
 
-       myCatalogManager=$thisCatalogManager
 
-     else
 
-       REPLY=""
 
-       if [ ! "$batchmode" = "Yes" ]; then
 
-         emit_message
 
-         read -s -n1 -p "Create $thisCatalogManager file? [Yes] "
 
-         emit_message "$REPLY"
 
-         emit_message
 
-       fi
 
-       case $REPLY in
 
-         [nNqQ])
 
-         emitNoChangeMsg
 
-         ;;
 
-         *)
 
-         if [ ! -d "${thisCatalogManager%/*}" ]; then
 
-           mkdir -p ${thisCatalogManager%/*}
 
-         fi
 
-         cp $mydir/.CatalogManager.properties.example $thisCatalogManager || exit 1
 
-         emit_message "NOTE: Created the following file:"
 
-         emit_message "      $thisCatalogManager"
 
-         myCatalogManager=$thisCatalogManager
 
-         ;;
 
-       esac
 
-       # end of creating "private" CatalogManager.properties
 
-     fi
 
-     # end of check for "private" CatalogManager.properties
 
-   fi
 
-   # end of check finding/creating writable CatalogManager.properties
 
-   if [ -n "$myCatalogManager" ]; then
 
-     etcXmlCatalog=
 
-     catalogsLine=$(grep "^catalogs=" $myCatalogManager)
 
-     if [ -f /etc/xml/catalog ] && [ "$osName" != "Cygwin" ] \
 
-       && [ "${catalogsLine#*/etc/xml/catalog*}" = "$catalogsLine" ]; then
 
-       cat 1>&2 <<EOF
 
- WARNING: /etc/xml/catalog exists but was not found in:
 
-          $myCatalogManager
 
-          If /etc/xml/catalog file has content, you probably
 
-          should reference it in:
 
-          $myCatalogManager
 
-          This installer can automatically add it for you,
 
-          but BE WARNED that once it has been added, the
 
-          uninstaller for this distribution CANNOT REMOVE IT
 
-          automatically during uninstall. If you no longer want
 
-          it included, you will need to remove it manually.
 
- EOF
 
-       REPLY=""
 
-       if [ ! "$batchmode" = "Yes" ]; then
 
-         read -s -n1 -p "Add /etc/xml/catalog to $myCatalogManager? [Yes] "
 
-         emit_message "$REPLY"
 
-       fi
 
-       case $REPLY in
 
-         [nNqQ])
 
-         emit_message
 
-         ;;
 
-         *)
 
-         etcXmlCatalog=/etc/xml/catalog
 
-         ;;
 
-       esac
 
-     fi
 
-     catalogBackup="$myCatalogManager.$$.bak"
 
-     if [ ! -w "${myCatalogManager%/*}" ]; then
 
-       emit_message
 
-       emit_message "WARNING: ${myCatalogManager%/*} directory is not writable."
 
-       emit_message
 
-       emitNoChangeMsg
 
-     else
 
-       REPLY=""
 
-       if [ ! "$batchmode" = "Yes" ]; then
 
-         emit_message
 
-         emit_message "Add $thisJavaXmlCatalog"
 
-         read -s -n1 -p "to $myCatalogManager file? [Yes] "
 
-         emit_message "$REPLY"
 
-         emit_message
 
-       fi
 
-       case $REPLY in
 
-         [nNqQ])
 
-         emitNoChangeMsg
 
-         ;;
 
-         *)
 
-         if [ "$catalogsLine" ] ; then
 
-           if [ "${catalogsLine#*$thisJavaXmlCatalog*}" != "$catalogsLine" ]; then
 
-             emit_message "NOTE: $thisJavaXmlCatalog"
 
-             emit_message "      already in:"
 
-             emit_message "      $myCatalogManager"
 
-           else
 
-             mv $myCatalogManager $catalogBackup || exit 1
 
-             sed "s#^catalogs=\(.*\)\$#catalogs=$thisJavaXmlCatalog;\1;$etcXmlCatalog#" $catalogBackup \
 
-             | sed 's/;\+/;/' | sed 's/;$//' > $myCatalogManager || exit 1
 
-             emit_message "NOTE: Successfully updated the following file:"
 
-             emit_message "      $myCatalogManager"
 
-             emit_message "      Backup written to:"
 
-             emit_message "      $catalogBackup"
 
-           fi
 
-         else
 
-           mv $myCatalogManager $catalogBackup || exit 1
 
-           cp $catalogBackup $myCatalogManager
 
-           echo "catalogs=$thisJavaXmlCatalog;$etcXmlCatalog" \
 
-           | sed 's/;\+/;/' | sed 's/;$//' >> $myCatalogManager || exit 1
 
-           emit_message "NOTE: \"catalogs=\" line added to $myCatalogManager."
 
-           emit_message "      Backup written to $catalogBackup"
 
-         fi
 
-         ;;
 
-       esac
 
-       # end of backing up and updating CatalogManager.properties
 
-     fi
 
-   fi
 
-   # end of CatalogManager.properties updates
 
-   if [ "$osName" = "Cygwin" ]; then
 
-     myCatalogManager=$(cygpath -m $myCatalogManager)
 
-   fi
 
-   return 0
 
- }
 
- writeDotFiles() {
 
-   while read; do
 
-     echo "$REPLY" >> $mydir/.profile.incl
 
-   done <<EOF
 
- # $thisBinDir is not in PATH, so add it
 
- if [ "\${PATH#*$thisBinDir*}" = "\$PATH" ]; then
 
-   PATH="$thisBinDir:\$PATH"
 
-   export PATH
 
- fi
 
- if [ -z "\$XML_CATALOG_FILES" ]; then
 
-   XML_CATALOG_FILES="$thisXmlCatalog"
 
- else
 
-   # $thisXmlCatalog is not in XML_CATALOG_FILES, so add it
 
-   if [ "\${XML_CATALOG_FILES#*$thisXmlCatalog*}" = "\$XML_CATALOG_FILES" ]; then
 
-     XML_CATALOG_FILES="$thisXmlCatalog \$XML_CATALOG_FILES"
 
-   fi
 
- fi
 
- # /etc/xml/catalog exists but is not in XML_CATALOG_FILES, so add it
 
- if [ -f /etc/xml/catalog ] && \
 
-   [ "\${XML_CATALOG_FILES#*/etc/xml/catalog*}" = "\$XML_CATALOG_FILES" ]; then
 
-   XML_CATALOG_FILES="\$XML_CATALOG_FILES /etc/xml/catalog"
 
- fi
 
- export XML_CATALOG_FILES
 
- if [ -z "\$SGML_CATALOG_FILES" ]; then
 
-   SGML_CATALOG_FILES="$thisSgmlCatalog"
 
- else
 
-   # $thisSgmlCatalog is not in SGML_CATALOG_FILES, so add it
 
-   if [ "\${SGML_CATALOG_FILES#*$thisSgmlCatalog}" = "\$SGML_CATALOG_FILES" ]; then
 
-     SGML_CATALOG_FILES="$thisSgmlCatalog:\$SGML_CATALOG_FILES"
 
-   fi
 
- fi
 
- # /etc/sgml/catalog exists but is not in SGML_CATALOG_FILES, so add it
 
- if [ -f /etc/sgml/catalog ] && \
 
-   [ "\${SGML_CATALOG_FILES#*/etc/sgml/catalog*}" = "\$SGML_CATALOG_FILES" ]; then
 
-   SGML_CATALOG_FILES="\$SGML_CATALOG_FILES:/etc/sgml/catalog"
 
- fi
 
- export SGML_CATALOG_FILES
 
- EOF
 
- while read; do
 
-   echo "$REPLY" >> $mydir/.cshrc.incl
 
- done <<EOF
 
- # $thisBinDir is not in PATH, so add it
 
- if ( "\\\`echo \$PATH | grep -v $thisBinDir\\\`" != "" ) then
 
-   setenv PATH "$thisBinDir:\$PATH"
 
- endif
 
- if ( ! $\?XML_CATALOG_FILES ) then
 
-   setenv XML_CATALOG_FILES "$thisXmlCatalog"
 
- # $thisXmlCatalog is not in XML_CATALOG_FILES, so add it
 
- else if ( "\\\`echo \$XML_CATALOG_FILES | grep -v $thisXmlCatalog\\\`" != "" ) then
 
-   setenv XML_CATALOG_FILES "$thisXmlCatalog \$XML_CATALOG_FILES"
 
- endif
 
- endif
 
- # /etc/xml/catalog exists but is not in XML_CATALOG_FILES, so add it
 
- if ( -f /etc/xml/catalog && "\\\`echo \$XML_CATALOG_FILES | grep -v /etc/xml/catalog\\\`" != "" ) then
 
-   setenv XML_CATALOG_FILES "\$XML_CATALOG_FILES /etc/xml/catalog"
 
- endif
 
- endif
 
- if ( ! $\?SGML_CATALOG_FILES ) then
 
-   setenv SGML_CATALOG_FILES "$thisSgmlCatalog"
 
- else if ( "\\\`echo \$SGML_CATALOG_FILES | grep -v $thisSgmlCatalog\\\`" != "" ) then
 
-   setenv SGML_CATALOG_FILES "$thisSgmlCatalog:\$SGML_CATALOG_FILES"
 
- endif
 
- endif
 
- # /etc/SGML/catalog exists but is not in SGML_CATALOG_FILES, so add it
 
- if ( -f /etc/sgml/catalog && "\\\`echo \$SGML_CATALOG_FILES | grep -v /etc/sgml/catalog\\\`" != "" ) then
 
-   setenv SGML_CATALOG_FILES {\$SGML_CATALOG_FILES}:/etc/sgml/catalog
 
- endif
 
- EOF
 
- if [ -n "$myCatalogManager" ]; then
 
-   myCatalogManagerDir=${myCatalogManager%/*}
 
-   while read; do
 
-     echo "$REPLY" >> $mydir/.profile.incl
 
-   done <<EOF
 
- if [ -z "\$CLASSPATH" ]; then
 
-   CLASSPATH="$myCatalogManagerDir"
 
- else
 
-   # $myCatalogManagerDir is not in CLASSPATH, so add it
 
-   if [ "\${CLASSPATH#*$myCatalogManagerDir*}" = "\$CLASSPATH" ]; then
 
-     CLASSPATH="$myCatalogManagerDir$classPathSeparator\$CLASSPATH"
 
-   fi
 
- fi
 
- export CLASSPATH
 
- EOF
 
-   while read; do
 
-     echo "$REPLY" >> $mydir/.cshrc.incl
 
-   done <<EOF
 
- if ( ! $\?CLASSPATH ) then
 
-   setenv CLASSPATH "$myCatalogManagerDir"
 
- # $myCatalogManagerDir is not in CLASSPATH, so add it
 
- else if ( "\\\`echo \$CLASSPATH | grep -v $myCatalogManagerDir\\\`" != "" ) then
 
-   setenv CLASSPATH "$myCatalogManagerDir$classPathSeparator\$CLASSPATH"
 
- endif
 
- endif
 
- EOF
 
- fi
 
- while read; do
 
-   echo "$REPLY" >> $mydir/.emacs.el
 
- done <<EOF
 
- (add-hook
 
-   'nxml-mode-hook
 
-   (lambda ()
 
-     (setq rng-schema-locating-files-default
 
-           (append '("$thisLocatingRules")
 
-                   rng-schema-locating-files-default ))))
 
- EOF
 
- return 0
 
- }
 
- updateUserStartupFiles() {
 
-   if [ ! "$batchmode" = "Yes" ]; then
 
-   cat 1>&2 <<EOF
 
- NOTE: To source your environment correctly for using the catalog
 
-       files in this distribution, you need to update one or more
 
-       of your shell startup files. This installer can
 
-       automatically make the necessary changes. Or, if you prefer,
 
-       you can make the changes manually.
 
- EOF
 
-   else
 
-     emit_message
 
-   fi
 
-   # if running csh or tcsh, target .cshrc and .tcshrc files for
 
-   # update; otherwise, target .bash_* and .profiles
 
-   parent=$(ps -p $PPID | grep "/")
 
-   if [ "${parent#*csh}" != "$parent" ] || [ "${parent#*tcsh}" != "$parent" ]; then
 
-     myStartupFiles=".cshrc .tcshrc"
 
-     appendLine="source $mydir/.cshrc.incl"
 
-   else
 
-     myStartupFiles=".bash_profile .bash_login .profile .bashrc"
 
-     appendLine=". $mydir/.profile.incl"
 
-   fi
 
-   for file in $myStartupFiles; do
 
-     if [ -f "$HOME/$file" ]; then
 
-       dotFileBackup=$HOME/$file.$$.bak
 
-       REPLY=""
 
-       if [ ! "$batchmode" = "Yes" ]; then
 
-         read -s -n1 -p "Update $HOME/$file? [Yes] "
 
-         emit_message "$REPLY"
 
-       fi
 
-       case $REPLY in
 
-         [nNqQ])
 
-         cat 1>&2 <<EOF
 
- NOTE: No change made to $HOME/$file. You either need
 
-       to add the following line to it, or manually source
 
-       the shell environment for this distribution each
 
-       time you want use it.
 
- $appendLine
 
- EOF
 
-         ;;
 
-         *)
 
-         lineExists="$(grep "$appendLine" $HOME/$file )"
 
-         if [ ! "$lineExists" ]; then
 
-           mv $HOME/$file $dotFileBackup     || exit 1
 
-           cp $dotFileBackup $HOME/$file     || exit 1
 
-           echo "$appendLine" >> $HOME/$file || exit 1
 
-           cat 1>&2 <<EOF
 
- NOTE: Successfully updated the following file:
 
-       $HOME/$file 
 
-       Backup written to:
 
-       $dotFileBackup
 
- EOF
 
-         else
 
-           cat 1>&2 <<EOF
 
- NOTE: The following file already contains information for this
 
-       distribution, so I did not update it.
 
-       $HOME/$file
 
- EOF
 
-         fi
 
-         ;;
 
-       esac
 
-     fi
 
-   done
 
-   if [ -z "$dotFileBackup" ]; then
 
-     if [ ! "$batchmode" = "Yes" ]; then
 
-       emit_message
 
-     fi
 
-     cat 1>&2 <<EOF
 
- NOTE: No shell startup files updated. You can source the
 
-       environment for this distribution manually, each time you
 
-       want to use it, by typing the following.
 
- $appendLine
 
- EOF
 
-   fi
 
- }
 
- updateUserDotEmacs() {
 
-   if [ -f $thisLocatingRules ]; then
 
-   cat 1>&2 <<EOF
 
- NOTE: This distribution includes a "schema locating rules" file
 
-       for Emacs/nXML.  To use it, you should update either your
 
-       .emacs or .emacs.el file.  This installer can automatically
 
-       make the necessary changes. Or, if you prefer, you can make
 
-       the changes manually.
 
- EOF
 
-   emacsAppendLine="(load-file \"$mydir/.emacs.el\")"
 
-   myEmacsFile=
 
-   for file in .emacs .emacs.el; do
 
-     if [ -f "$HOME/$file" ]; then
 
-       myEmacsFile=$HOME/$file
 
-       break
 
-     fi
 
-   done
 
-   if [ ! -f "$myEmacsFile" ]; then
 
-     REPLY=""
 
-     if [ ! "$batchmode" = "Yes" ]; then
 
-       read -s -n1 -p "No .emacs or .emacs.el file. Create one? [No] "
 
-       emit_message "$REPLY"
 
-       emit_message
 
-     fi
 
-     case $REPLY in
 
-       [yY])
 
-       myEmacsFile=$HOME/.emacs
 
-       touch $myEmacsFile
 
-       ;;
 
-       *)
 
-       cat 1>&2 <<EOF
 
- NOTE: No Emacs changes made. To use this distribution with,
 
-       Emacs/nXML, you can create a .emacs file and manually add
 
-       the following line to it, or you can run it as a command
 
-       within Emacs.
 
- $emacsAppendLine
 
- EOF
 
-       ;;
 
-     esac
 
-   fi
 
-   if [ -n "$myEmacsFile" ]; then
 
-     REPLY=""
 
-     if [ ! "$batchmode" = "Yes" ]; then
 
-       read -s -n1 -p  "Update $myEmacsFile? [Yes] "
 
-       emit_message "$REPLY"
 
-       emit_message
 
-     fi
 
-     case $REPLY in
 
-       [nNqQ])
 
-       cat 1>&2 <<EOF
 
- NOTE: No change made to $myEmacsFile. To use this distribution
 
-       with Emacs/nXML, you can manually add the following line
 
-       to your $myEmacsFile, or you can run it as a command
 
-       within Emacs.
 
- $emacsAppendLine
 
- EOF
 
-       ;;
 
-       *)
 
-       lineExists="$(grep "$emacsAppendLine" $myEmacsFile)"
 
-       if [ ! "$lineExists" ]; then
 
-         dotEmacsBackup=$myEmacsFile.$$.bak
 
-         mv $myEmacsFile $dotEmacsBackup    || exit 1
 
-         cp $dotEmacsBackup $myEmacsFile    || exit 1
 
-         echo "$emacsAppendLine" >> $myEmacsFile || exit 1
 
-         cat 1>&2 <<EOF
 
- NOTE: Successfully updated the following file:
 
-       $myEmacsFile
 
-       Backup written to:
 
-       $dotEmacsBackup
 
- EOF
 
-       else
 
-         cat 1>&2 <<EOF
 
- NOTE: The following file already contains information for this
 
-       distribution, so I did not update it.
 
-       $myEmacsFile
 
- EOF
 
-       fi
 
-       ;;
 
-     esac
 
-   fi
 
- fi
 
- }
 
- uninstall() {
 
-   if [ ! "$batchmode" = "Yes" ]; then
 
-   cat 1>&2 <<EOF
 
- NOTE: To "uninstall" this distribution, the changes made to your
 
-       CatalogManagers.properties, startup files, and/or .emacs
 
-       file need to be reverted. This uninstaller can automatically
 
-       revert them.  Or, if you prefer, you can revert them manually.
 
- EOF
 
-   fi
 
-   if [ "$osName" = "Cygwin" ]; then
 
-     thisXmlCatalog=$thisJavaXmlCatalog
 
-   fi
 
-   # make "escaped" version of PWD to use with sed and grep
 
-   escapedPwd=$(echo $mydir | sed "s#/#\\\\\/#g")
 
-   # check to see if a non-empty value for catalogManager was fed
 
-   # to uninstaller.
 
-   if [ -n ${1#--catalogManager=} ]; then
 
-     myCatalogManager=${1#--catalogManager=}
 
-     catalogBackup="$myCatalogManager.$$.bak"
 
-     catalogsLine=$(grep "^catalogs=" $myCatalogManager)
 
-     if [ "$catalogsLine" ] ; then
 
-       if [ "${catalogsLine#*$thisXmlCatalog*}" != "$catalogsLine" ]; then
 
-         REPLY=""
 
-         if [ ! "$batchmode" = "Yes" ]; then
 
-           read -s -n1 -p "Revert $myCatalogManager? [Yes] "
 
-           emit_message "$REPLY"
 
-         fi
 
-         case $REPLY in
 
-           [nNqQ]*)
 
-           cat 1>&2 <<EOF
 
- NOTE: No change made to $myCatalogManager. You need to manually
 
-       remove the following path from the "catalog=" line.
 
-           $thisXmlCatalog
 
- EOF
 
-           ;;
 
-           *)
 
-           mv $myCatalogManager $catalogBackup || exit 1
 
-           sed "s#^catalogs=\(.*\)$thisXmlCatalog\(.*\)\$#catalogs=\1\2#" $catalogBackup \
 
-           | sed 's/;\+/;/' | sed 's/;$//' | sed 's/=;/=/' > $myCatalogManager || exit 1
 
-           cat 1>&2 <<EOF
 
- NOTE: Successfully updated the following file:
 
-       $myCatalogManager
 
-       Backup written to:
 
-       $catalogBackup
 
- EOF
 
-           ;;
 
-         esac
 
-       else
 
-         emit_message "NOTE: No data for this distribution found in:"
 
-         emit_message "       $myCatalogManager"
 
-         emit_message
 
-       fi
 
-     else
 
-       cat 1>&2 <<EOF
 
- NOTE: No data for this distribution was found in the following
 
-       file, so I did not revert it.
 
-       $myCatalogManager
 
- EOF
 
-     fi
 
-   fi
 
-   if [ -n "$myEmacsFile" ]; then 
 
-     # check to see if a non-empty value for --dotEmacs file was fed
 
-     # to uninstaller.
 
-     if [ -n ${2#--dotEmacs=} ]; then
 
-       myEmacsFile=${2#--dotEmacs=}
 
-       revertLine="(load-file \"$escapedPwd\/\.emacs\.el\")"
 
-       loadLine="$(grep "$revertLine" "$myEmacsFile")"
 
-       if [ -n "$loadLine" ]; then
 
-         emit_message
 
-         REPLY=""
 
-         if [ ! "$batchmode" = "Yes" ]; then
 
-           read -s -n1 -p "Revert $myEmacsFile? [Yes] "
 
-           emit_message "$REPLY"
 
-         fi
 
-         case $REPLY in
 
-           [nNqQ]*)
 
-           cat 1>&2 <<EOF
 
- NOTE: No change made to $myEmacsFile. You need to manually
 
- remove the following line.
 
- (load-file \"$mydir/.emacs.el\")
 
- EOF
 
-           ;;
 
-           *)
 
-           dotEmacsBackup=$myEmacsFile.$$.bak
 
-           sed -e "/$revertLine/d" -i".$$.bak" $myEmacsFile  || exit 1
 
-           cat 1>&2 <<EOF
 
- NOTE: successfully reverted the following file:
 
-       $myEmacsFile
 
-       Backup written to:
 
-       $dotEmacsBackup
 
- EOF
 
-           ;;
 
-         esac
 
-       else
 
-         emit_message "NOTE: No data for this distribution found in:"
 
-         emit_message "      $myEmacsFile"
 
-       fi
 
-     fi
 
-   fi
 
-   # check all startup files
 
-   myStartupFiles=".bash_profile .bash_login .profile .bashrc .cshrc .tcshrc"
 
-   for file in $myStartupFiles; do
 
-     if [ -e "$HOME/$file" ]; then
 
-       case $file in
 
-         .tcshrc|.cshrc)
 
-         revertLine="source $mydir/.cshrc.incl"
 
-         revertLineEsc="source $escapedPwd\/\.cshrc\.incl"
 
-         ;;
 
-         *)
 
-         revertLine=". $mydir/.profile.incl"
 
-         revertLineEsc="\. $escapedPwd\/\.profile\.incl"
 
-         ;;
 
-       esac
 
-       lineExists="$(grep "$revertLineEsc" $HOME/$file )"
 
-       if [ "$lineExists" ]; then
 
-         REPLY=""
 
-         if [ ! "$batchmode" = "Yes" ]; then
 
-           read -s -n1 -p "Update $HOME/$file? [Yes] "
 
-           emit_message "$REPLY"
 
-         fi
 
-         case $REPLY in
 
-           [nNqQ]*)
 
-           cat 1>&2 <<EOF
 
- NOTE: No change made to $HOME/$file. You need to manually remove
 
-       the following line from it.
 
-  $revertLine
 
- EOF
 
-           ;;
 
-           *)
 
-           dotFileBackup=$HOME/$file.$$.bak
 
-           sed -e "/$revertLineEsc/d" -i".$$.bak" $HOME/$file  || exit 1
 
-           cat 1>&2 <<EOF
 
- NOTE: Successfully updated the following file:
 
-       $HOME/$file
 
-       Backup written to:
 
-       $dotFileBackup
 
- EOF
 
-           ;;
 
-         esac
 
-       else
 
-         emit_message "NOTE: No data for this distribution found in:"
 
-         emit_message "      $HOME/$file"
 
-         emit_message
 
-       fi
 
-     fi
 
-   done
 
-   removeOldFiles
 
-   emit_message "Done. Deleted uninstall.sh file."
 
-   rm -f $mydir/test.sh      || exit 1
 
-   rm -f $mydir/uninstall.sh || exit 1
 
- }
 
- writeUninstallFile() {
 
-   uninstallFile=$mydir/uninstall.sh
 
-   echo '#!/bin/bash'                               > $uninstallFile || exit 1
 
-   echo 'mydir=$(cd -P $(dirname $0) && pwd -P)'   >> $uninstallFile || exit 1
 
-   echo "\$mydir/install.sh \\"                    >> $uninstallFile || exit 1
 
-   echo "  --uninstall \\"                         >> $uninstallFile || exit 1
 
-   echo "  --catalogManager=$myCatalogManager \\"  >> $uninstallFile || exit 1
 
-   echo "  --dotEmacs='$myEmacsFile' \\"           >> $uninstallFile || exit 1
 
-   echo '  $@'                                     >> $uninstallFile || exit 1
 
-   chmod 755 $uninstallFile || exit 1
 
- }
 
- writeTestFile() {
 
-   testFile=$mydir/test.sh
 
-   echo "#!/bin/bash"                                > $testFile || exit 1
 
-   echo 'mydir=$(cd -P $(dirname $0) && pwd -P)'    >> $testFile || exit 1
 
-   echo '$mydir/install.sh --test'                  >> $testFile || exit 1
 
-   chmod 755 $testFile || exit 1
 
- }
 
- printExitMessage() {
 
-   cat 1>&2 <<EOF
 
- To source your shell environment for this distribution, type the
 
- following:
 
- $appendLine
 
- EOF
 
- }
 
- checkForResolver() {
 
-   resolverResponse="$(java org.apache.xml.resolver.apps.resolver uri -u foo 2>/dev/null)"
 
-   if [ -z "$resolverResponse" ]; then
 
-     cat 1>&2 <<EOF
 
- NOTE: Your environment does not seem to contain the Apache XML
 
-       Commons Resolver; without that, you can't use XML catalogs
 
-       with Java applications. For more information, see the "How
 
-       to use a catalog file" section in Bob Stayton's "DocBook
 
-       XSL: The Complete Guide"
 
-       http://sagehill.net/docbookxsl/UseCatalog.html
 
- EOF
 
-   fi
 
- }
 
- emitNoChangeMsg() {
 
-   cat 1>&2 <<EOF
 
- NOTE: No changes were made to CatalogManagers.properties. To
 
-       provide your Java tools with XML catalog information for
 
-       this distribution, you will need to make the appropriate
 
-       changes manually.
 
- EOF
 
- }
 
- testCatalogs() {
 
-   if [ ! -f "$thisXmlCatalog" ]; then
 
-     cat 1>&2 <<EOF
 
- FATAL: $thisXmlCatalog file needed but not found. Stopping.
 
- EOF
 
-   exit
 
-   fi
 
-   if [ -z "$XML_CATALOG_FILES" ]; then
 
-     emit_message
 
-     emit_message "WARNING: XML_CATALOG_FILES not set. Not testing with xmlcatalog."
 
-   else
 
-     xmlCatalogResponse="$(xmlcatalog 2>/dev/null)"
 
-     if [ -z "$xmlCatalogResponse" ]; then
 
-     cat 1>&2 <<EOF
 
- WARNING: Cannot locate the "xmlcatalog" command. Make sure that
 
-          you have libxml2 and its associated utilities installed.
 
-          http://xmlsoft.org/
 
- EOF
 
-     else
 
-       emit_message "Testing with xmlcatalog..."
 
-       # read in pathname-uri pairs from .urilist file
 
-       while read pair; do
 
-         if [ ! "${pair%* *}" = "." ]; then
 
-           path=$mydir/${pair%* *}
 
-         else
 
-           path=$mydir/
 
-         fi
 
-         uri=${pair#* *}
 
-         emit_message
 
-         emit_message "  Tested: $uri"
 
-         for catalog in $XML_CATALOG_FILES; do
 
-           response="$(xmlcatalog $catalog $uri| grep -v "No entry")"
 
-           if [ -n "$response" ]; then
 
-             if [ "$response" = "$path" ]; then
 
-               emit_message "  Result: $path"
 
-               break
 
-             else
 
-               emit_message "  Result: FAILED"
 
-             fi
 
-           fi
 
-         done
 
-       done < $mydir/.urilist
 
-     fi
 
-   fi
 
-   if [ -z "$CLASSPATH" ]; then
 
-     emit_message
 
-     emit_message "NOTE: CLASSPATH not set. Not testing with Apache XML Commons Resolver."
 
-   else
 
-     if [ "$(checkForResolver)" ]; then
 
-       checkForResolver
 
-     else
 
-       emit_message
 
-       emit_message "Testing with Apache XML Commons Resolver..."
 
-       # read in pathname-uri pairs from .urilist file
 
-       while read pair; do
 
-         if [ ! "${pair%* *}" = "." ]; then
 
-           path=$mydir/${pair%* *}
 
-         else
 
-           path=$mydir/
 
-         fi
 
-         uri=${pair#* *}
 
-         emit_message
 
-         emit_message "  Tested: $uri"
 
-         if [ ${uri%.dtd} != $uri ]; then
 
-           response="$(java org.apache.xml.resolver.apps.resolver system -s $uri | grep "Result")"
 
-         else
 
-           response="$(java org.apache.xml.resolver.apps.resolver uri -u $uri | grep "Result")"
 
-         fi
 
-         if [ "$response" ]; then
 
-           if [ "${response#*$path}" != "$response" ]; then
 
-             emit_message "  Result: $path"
 
-           else
 
-             emit_message "  Result: FAILED"
 
-           fi
 
-           echo
 
-         fi
 
-       done < $mydir/.urilist
 
-     fi
 
-   fi
 
- }
 
- # get opts and execute appropriate function
 
- case $1 in
 
-   *-uninstall)
 
-   uninstall $2 $3 $4
 
-   ;;
 
-   *-test)
 
-   testCatalogs
 
-   ;;
 
-   *)
 
-   main
 
-   ;;
 
- esac
 
- # Copyright
 
- # ---------
 
- # Copyright 2005-2007 Michael(tm) Smith <smith@sideshowbarker.net>
 
- # 
 
- # Permission is hereby granted, free of charge, to any person
 
- # obtaining a copy of this software and associated documentation
 
- # files (the "Software"), to deal in the Software without
 
- # restriction, including without limitation the rights to use, copy,
 
- # modify, merge, publish, distribute, sublicense, and/or sell copies
 
- # of the Software, and to permit persons to whom the Software is
 
- # furnished to do so, subject to the following conditions:
 
- # 
 
- # The above copyright notice and this permission notice shall be
 
- # included in all copies or substantial portions of the Software.
 
- # 
 
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 
- # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 
- # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 
- # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 
- # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 
- # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 
- # DEALINGS IN THE SOFTWARE.
 
- # vim: number
 
 
  |