#!/bin/sh ######################## build.borealis.sh ################################### # # Build Borealis from source in your sandbox. Before running this script: # # * You need to check out borealis. # # * Set any environment variables you'd like to have override defaults. # There are several packages required to build and run Borealis. # The installation directories for these packages are determined by: # # First using the command following arguments: # # -nmstl <install> # -antlr <install> # -mysql <install> # -bdb <install> # -tinydb <install> # -xercesc <install> # # Secondly by checking these environment variables: # # INSTALL_NMSTL # INSTALL_ANTLR # INSTALL_MYSQL # INSTALL_BDB # INSTALL_TINYDB # INSTALL_XERCESC # # Thirdly by using default values encoded in this script. # Site administrators my want to make a local copy of this script # and modify the InstallDefault function to use different values. # # Note that components to access Berkeley-Db, MySql, and TinyDb # are optional. By default those components are not built unless # they are specified. # # The CVS_SANDBOX variable can be used to specify where you have # checked out the source code. By default CVS_SANDBOX is set to # the value of the HOME variable. # # * If nmstl is not already installed this script can build it. # In this case you need to checkout nmstl as well. # If the -nmstl argument is not used and INSTALL_NMSTL is not set # then this script will build nmstl under your home directory. # It will be installed in the ${HOME}/install_nmstl/ directory. # # * -udb Build the library containing user defined boxes. # # * -test Build the test area (borealis/utility/test) as well. # Borealis will be built before building the the test area. # If Borealis has already been built then it will not be rebuilt. # # * -demo Build the demos (borealis/demo) as well. # Borealis will be built before building the the demos. # If Borealis has already been built then it will not be rebuilt. # # * -tool Build the tools (borealis/tool) as well. # Borealis will be built before building the the tools. # If Borealis has already been built then it will not be rebuilt. # # * -configure Run configure for the selected components. # Creates Makefiles, but does not run them. # # This script will also set and export the LD_LIBRARY_PATH unless it is # already defined. It will be set to to the libraries needed to run Borealis. # You may want to do this in your login script. # # To run Borealis you will also need to add the nmstl bin/ directory to the # PATH variable. If you let this script build it for you it will be in # "${HOME}/install_nmstl/bin". You may want to do this in your login script. # # The return status is 0 when the script runs to completion. # If an error is detected (not all may be) the return status is -1. #............................................................................... ################################################################################ # InstallDefault() # Site specific default settings. { # These settings work at Brown. # # You may want to make a copy of this script and modify it for use at # your site. Note the there is no default location for nmstl. This # is because it's location must be specified as input to this script # or nmstl is built locally. #............................................................................... INSTALL_ROOT=/pro/borealis/software if [ -z ${INSTALL_ANTLR} ]; then INSTALL_ANTLR=${INSTALL_ROOT}/antlr fi if [ -z ${INSTALL_XERCESC} ]; then INSTALL_XERCESC=${INSTALL_ROOT}/xerces fi #if [ -z ${INSTALL_BDB} ]; then # INSTALL_BDB=${INSTALL_ROOT}/bdb #fi #if [ -z ${INSTALL_MYSQL} ]; then # INSTALL_MYSQL=${INSTALL_ROOT}/mysql #fi #if [ -z ${INSTALL_TINYDB} ]; then # INSTALL_TINYDB=${INSTALL_ROOT}/tinydb #fi return } ################################################################################ # Usage() # Message issued when the command line syntax is bad. { #............................................................................... echo "USAGE: build.borealis.sh" echo " -udb -test -tool -configure" echo " -nmstl <install path>" echo " -antlr <install path>" echo " -mysql <install path>" echo " -bdb <install path>" echo " -tinydb <install path>" echo " -xercesc <install path>" return } ################################################################################ # ParseCommandLine() # Parse command line arguments. { #............................................................................... BUILD_UDB=0 BUILD_TEST=0 BUILD_TOOL=0 BUILD_DEMO=0 CONFIGURE_ONLY=0 while [ $# -ge 1 ]; do if [ "$1" = "-test" ]; then shift 1 BUILD_TEST=1 elif [ "$1" = "-demo" ]; then shift 1 BUILD_DEMO=1 elif [ "$1" = "-tool" ]; then shift 1 BUILD_TOOL=1 elif [ "$1" = "-udb" ]; then shift 1 BUILD_UDB=1 elif [ "$1" = "-configure" ]; then shift 1 CONFIGURE_ONLY=1 else if [ $# -eq 1 ]; then echo "ERROR: Argument expected for $1." exit -1 fi case $1 in -xercesc) INSTALL_XERCESC=$2;; -nmstl) INSTALL_NMSTL=$2;; -antlr) INSTALL_ANTLR=$2;; -bdb) INSTALL_BDB=$2;; -mysql) INSTALL_MYSQL=$2;; -tinydb) INSTALL_TINYDB=$2;; *) echo "Unknown argument: $1 $2" Usage exit -1 ;; esac shift 2 fi done return } ################################################################################ # ValidateInstall() # Validate installation libraries. { #............................................................................... echo " INSTALL_ANTLR = ${INSTALL_ANTLR}" echo " INSTALL_XERCESC = ${INSTALL_XERCESC}" if [ -z ${INSTALL_NMSTL} ]; then echo " INSTALL_NMSTL = ${HOME}/install_nmstl" fi if [ ! -z ${INSTALL_NMSTL} ]; then echo " INSTALL_NMSTL = ${INSTALL_NMSTL}" if [ ! -d "${INSTALL_NMSTL}/lib" ]; then echo "ERROR: Missing nmstl library (${INSTALL_NMSTL}/lib" exit -1 fi; fi if [ ! -d "${INSTALL_XERCESC}/lib" ]; then echo "ERROR: Missing xercesc library (${INSTALL_XERCESC}/lib" exit -1 fi if [ ! -d "${INSTALL_ANTLR}/lib" ]; then echo "ERROR: Missing antlr library (${INSTALL_ANTLR}/lib" exit -1 fi if [ ! -z ${INSTALL_BDB} ]; then echo " INSTALL_BDB = ${INSTALL_BDB}" if [ ! -d "${INSTALL_BDB}/lib" ]; then echo "ERROR: Missing Berkeley-Db library (${INSTALL_BDB}/lib" exit -1 fi; fi if [ ! -z ${INSTALL_MYSQL} ]; then echo " INSTALL_MYSQL = ${INSTALL_MYSQL}" if [ ! -d "${INSTALL_MYSQL}/lib" ]; then echo "ERROR: Missing mysql library (${INSTALL_MYSQL}/lib" exit -1 fi; fi if [ ! -z ${INSTALL_TINYDB} ]; then echo " INSTALL_TINYDB = ${INSTALL_TINYDB}" if [ ! -d "${INSTALL_TINYDB}/lib" ]; then echo "ERROR: Missing TinyDb library (${INSTALL_TINYDB}/lib" exit -1 fi; fi echo return } ################################################################################ # Sandbox() # Establish the users sandbox directory. { #............................................................................... if [ -z "${CVS_SANDBOX}" ]; then CVS_SANDBOX=${HOME} export CVS_SANDBOX elif [ ! -d "${CVS_SANDBOX}" ]; then echo "ERROR: Invalid CVS_SANDBOX setting: ${CVS_SANDBOX}." exit -1 fi echo " CVS_SANDBOX = ${CVS_SANDBOX}" return } ################################################################################ # BuildNmstl() # Build nmstl locally. { #............................................................................... # Configure nmstl for your environment. # if [ ! -d "${CVS_SANDBOX}/nmstl" ]; then echo ERROR: You need to checkout nmstl. exit -1 fi cd ${CVS_SANDBOX}/nmstl autoconf if [ $? -ne 0 ]; then echo "ERROR: Borealis setup failed." exit -1 fi ./configure --prefix=${INSTALL_NMSTL} # if [ $? -ne 0 ]; then echo "ERROR: Nmstl configure failed." exit -1 fi # Now you can build and install nmstl. # if [ ${CONFIGURE_ONLY} -eq 0 ]; then # Install nmstl in your home directory. Then use the same directory path as # argument when configuring borealis (below) # rm -r -f ${INSTALL_NMSTL} # Remove any prior installation. mkdir ${INSTALL_NMSTL} # Any subdirectory of home. if [ $? -ne 0 ]; then echo "ERROR: Could not: mkdir ${INSTALL_NMSTL}" exit -1 fi make clean if [ $? -ne 0 ]; then echo "ERROR: Nmstl 'make clean' failed." exit -1 fi make if [ $? -ne 0 ]; then echo "ERROR: Nmstl 'make' failed." exit -1 fi make install if [ $? -ne 0 ]; then echo "ERROR: Nmstl 'make install' failed." exit -1 fi fi return } # end BuildNmstl ################################################################################ # BuildBorealis() # Build Borealis. { # Run setup to generate a fresh configure script. The setup script runs: # # aclocal - Automatically generate aclocal.m4 from configure.ac # libtoolize - Configures either shared or static libraries. # autoheader - Create a template header for configure. # automake --add-missing automatically create Makefile.in's from Makefile.am's # autoconf - Generate a configuration script from `configure.ac' # Output is sent to `configure'. # # configure.ac -> aclocal -> aclocal.m4 # # AC_CONFIG_AUX_DIR=config # -> config/config.sub @ /usr/share/libtool # configure.ac -> libtoolize -> config/config.guess @ /usr/share/libtool # -> config/ltmain.sh @ /usr/share/libtool # # -> config.h.in # configure.ac -> autoheader -> autom4te.cache/output.0 # -> autom4te.cache/requests # -> autom4te.cache/traces.0 # # -> stamp-h.in # */Makefile.am -> -> */Makefile.in # configure.ac -> automake -> config/install-sh @ /usr/share/automake-1.4 # aclocal.m4 -> -> config/mkinstalldirs @ /usr/share/automake-1.4 # -> config/ missing @ /usr/share/automake-1.4 # # configure.ac -> autoconf -> configure # aclocal.m4 -> # # source code -> configure -> config.log # | -> config.status # V # config.h.in -> config.status -> config.h # */Makefile.in -> -> */Makefile # # config.status # Run this file to recreate the current configuration. # # config.log # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. # # stamp-h.in # It always contains the string `timestamp'. It is used as a timestamp # file indicating whether `config.in' is up to date. #............................................................................... if [ ! -d "${CVS_SANDBOX}/borealis" ]; then echo ERROR: You need to checkout borealis. exit -1 fi cd ${CVS_SANDBOX}/borealis/src if [ $? -ne 0 ]; then echo "ERROR: Could not: cd ${CVS_SANDBOX}/borealis/src" exit -1 fi ./setup if [ $? -ne 0 ]; then echo "ERROR: Borealis setup failed." exit -1 fi # Configure Borealis. # # "wtf" comes with nmstl and pretty-prints all gcc error messages (great tool)! # It translates acronyms and filename suffixes for you. # The "--enable-shared --disable-static" flags should prevent the # compiler from generating static libraries. # WITH_OPTION= if [ ! -z ${INSTALL_BDB} ]; then WITH_OPTION="--with-bdb=${INSTALL_BDB}" fi if [ ! -z ${INSTALL_MYSQL} ]; then WITH_OPTION="${WITH_OPTION} --with-mysql=${INSTALL_MYSQL}" fi if [ ! -z ${INSTALL_TINYDB} ]; then WITH_OPTION="${WITH_OPTION} --with-tinydb=${INSTALL_TINYDB}" fi if [ ${BUILD_UDB} -eq 1 ]; then WITH_OPTION="${WITH_OPTION} --enable-udb" fi wtf ./configure --enable-shared --disable-static \ --with-antlr=${INSTALL_ANTLR} \ --with-nmstl=${INSTALL_NMSTL} \ --with-xercesc=${INSTALL_XERCESC} \ ${WITH_OPTION} # # Compile Borealis # if [ ${CONFIGURE_ONLY} -eq 0 ]; then make clean if [ $? -ne 0 ]; then echo "ERROR: Borealis 'make clean' failed." exit -1 fi make if [ $? -ne 0 ]; then echo "ERROR: Borealis 'make' failed." exit -1 fi fi return } # end BuildBorealis ################################################################################ # BuildTest() # Build the test area. { #............................................................................... # # Run setup to generate a fresh configure script. # if [ ! -d "${CVS_SANDBOX}/borealis/utility/test" ]; then echo ERROR: You need to checkout the Borealis test area. exit -1 fi cd ${CVS_SANDBOX}/borealis/utility/test if [ $? -ne 0 ]; then echo "ERROR: Could not: cd ${CVS_SANDBOX}/borealis/utility/test" exit -1 fi ./setup if [ $? -ne 0 ]; then echo "ERROR: Borealis test area setup failed." exit -1 fi # # Configure the Borealis test area. # WITH_OPTION= if [ ! -z ${INSTALL_BDB} ]; then WITH_OPTION="--with-bdb=${INSTALL_BDB}" fi wtf ./configure --enable-shared --disable-static \ --with-nmstl=${INSTALL_NMSTL} \ --with-xercesc=${INSTALL_XERCESC} \ --with-antlr=${INSTALL_ANTLR} \ ${WITH_OPTION} # # Compile the Borealis test area. # if [ ${CONFIGURE_ONLY} -eq 0 ]; then make clean if [ $? -ne 0 ]; then echo "ERROR: Borealis test area 'make clean' failed." exit -1 fi make if [ $? -ne 0 ]; then echo "ERROR: Borealis test area 'make' failed." exit -1 fi fi return } # end BuildTest ################################################################################ # BuildTool() # Build the Borealis tools. { #............................................................................... # Run setup to generate a fresh configure script. # if [ ! -d "${CVS_SANDBOX}/borealis/tool" ]; then echo ERROR: You need to checkout the Borealis tool directory. exit -1 fi cd ${CVS_SANDBOX}/borealis/tool if [ $? -ne 0 ]; then echo "ERROR: Could not: cd ${CVS_SANDBOX}/borealis/tool" exit -1 fi ./setup if [ $? -ne 0 ]; then echo "ERROR: Borealis tool setup failed." exit -1 fi # # Configure the Borealis tool build. # wtf ./configure --enable-shared --disable-static \ --with-nmstl=${INSTALL_NMSTL} \ --with-xercesc=${INSTALL_XERCESC} \ --with-antlr=${INSTALL_ANTLR} # # Compile the Borealis tools. # if [ ${CONFIGURE_ONLY} -eq 0 ]; then make clean if [ $? -ne 0 ]; then echo "ERROR: Borealis tool 'make clean' failed." exit -1 fi make if [ $? -ne 0 ]; then echo "ERROR: Borealis tool 'make' failed." exit -1 fi fi return } # end BuildTool ################################################################################ # BuildDemo() # Build the Borealis demos. { #............................................................................... # Run setup to generate a fresh configure script. # if [ ! -d "${CVS_SANDBOX}/borealis/demo" ]; then echo ERROR: You need to checkout the Borealis demo directory. exit -1 fi cd ${CVS_SANDBOX}/borealis/demo if [ $? -ne 0 ]; then echo "ERROR: Could not: cd ${CVS_SANDBOX}/borealis/demo" exit -1 fi ./setup if [ $? -ne 0 ]; then echo "ERROR: Borealis demo setup failed." exit -1 fi # # Configure the Borealis tool build. # wtf ./configure --enable-shared --disable-static \ --with-nmstl=${INSTALL_NMSTL} \ --with-xercesc=${INSTALL_XERCESC} \ --with-antlr=${INSTALL_ANTLR} # # Compile the Borealis demos. # if [ ${CONFIGURE_ONLY} -eq 0 ]; then make clean if [ $? -ne 0 ]; then echo "ERROR: Borealis demo 'make clean' failed." exit -1 fi make if [ $? -ne 0 ]; then echo "ERROR: Borealis demo 'make' failed." exit -1 fi fi return } # end BuildDemo ################################################################################ ############################### main entry point ############################### ################################################################################ InstallDefault # Default installation directories. ParseCommandLine $@ # Parse the build options. ValidateInstall # Validate installed libraries. # Set up the LD_LIBRARY_PATH to contain the libraries needed to run Borealis. # You may want to put this in your login script. # if [ -z ${LD_LIBRARY_PATH} ]; then LD_LIBRARY_PATH=${INSTALL_ANTLR}/lib LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${INSTALL_XERCESC}/lib if [ ! -z ${INSTALL_BDB} ]; then LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${INSTALL_BDB}/lib fi if [ ! -z ${INSTALL_MYSQL} ]; then LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${INSTALL_MYSQL}/lib fi if [ ! -z ${INSTALL_NMSTL} ]; then LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${INSTALL_NMSTL}/lib else LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${HOME}/install_nmstl/lib fi export LD_LIBRARY_PATH else LD_LIBRARY_PATH=${INSTALL_ANTLR}/lib LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${INSTALL_XERCESC}/lib if [ ! -z ${INSTALL_BDB} ]; then LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${INSTALL_BDB}/lib fi if [ ! -z ${INSTALL_MYSQL} ]; then LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${INSTALL_MYSQL}/lib fi if [ ! -z ${INSTALL_NMSTL} ]; then LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${INSTALL_NMSTL}/lib else LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${HOME}/install_nmstl/lib fi fi echo "LD_LIBRARY_PATH = ${LD_LIBRARY_PATH}" Sandbox # Locate the CVS_SANDBOX. BUILD_SET="" # Optionally build and install nmstl. # if [ -z ${INSTALL_NMSTL} ]; then INSTALL_NMSTL=${HOME}/install_nmstl BuildNmstl BUILD_SET="Nmstl, " fi # Add the nmstl bin/ directory to your path. # If you installed locally it will be in "${HOME}/install_nmstl/bin". # You may want to set this up in your login script. # PATH=${PATH}:${INSTALL_NMSTL}/bin if [ ${BUILD_TEST} -eq 0 ] && \ [ ${BUILD_DEMO} -eq 0 ] && \ [ ${BUILD_TOOL} -eq 0 ]; then BuildBorealis BUILD_SET="${BUILD_SET}Borealis " else if [ ! -f "${CVS_SANDBOX}/borealis/src/src/borealis" ]; then BuildBorealis BUILD_SET="${BUILD_SET}Borealis, " fi if [ ${BUILD_TEST} -ne 0 ]; then BuildTest BUILD_SET="${BUILD_SET}Tests" if [ ${BUILD_DEMO} -ne 0 ] || [ ${BUILD_TOOL} -ne 0 ]; then BUILD_SET="${BUILD_SET}, " fi fi if [ ${BUILD_DEMO} -ne 0 ]; then BuildDemo BUILD_SET="${BUILD_SET}Demos" if [ ${BUILD_TOOL} -ne 0 ]; then BUILD_SET="${BUILD_SET}, " fi fi if [ ${BUILD_TOOL} -ne 0 ]; then BuildTool BUILD_SET="${BUILD_SET}Tools" fi fi if [ ${CONFIGURE_ONLY} -eq 0 ]; then echo "<<< build.borealis.sh: Successfully built: ${BUILD_SET} >>>" else echo "<<< build.borealis.sh: Successfully configured: ${BUILD_SET} >>>" fi exit 0 # ############################ end build.borealis.sh ###########################