#!/bin/sh ##################################################################### # install_ace: distill the minimal stuff out of the ACE+TAO distribution # alias cpio 'xargs -i echo {}'; # just for testing the script # # according to David Levine on 1999/01/09: # # An even better way would be to only build what you need. # These directories are probably a good start: # # ace # apps/gperf/src # TAO/tao # TAO/TAO_IDL # TAO/orbsvcs # # netsvcs ? - not built in here, probably useful # ##################################################################### # actions unpack=0 config=0 compile=0 install=0 force=0 # can we do it? die=0 # this script name without path this_script=$(basename $0) ##################################################################### # check for install_ace options ##################################################################### while [ $# -gt 0 ]; do case $1 in ########################################## # help output -h | --help*) echo " " echo "$this_script [options]" echo " " echo "options:" echo " -h, --help show brief help" echo " " echo "required options:" echo " -r, --aceroot=ACE_ROOT use ACE_ROOT directory for build/install" echo " " echo "extracting and configuring options:" echo " -z, --archive=FILE unpack specified source archive" echo " -p, --platform=HEADER,MAKE use HEADER,MAKE as config.h, platform_macros" echo " " echo "compiling options:" echo " -c, --compile=ACE_OPTS compile with make options (e.g. debug=0)" echo " " echo "installing options:" echo " -i, --install=ACE_DEST install into ACE_DEST directory" echo " -a, --arch=ACE_ARCH use ACE_ARCH subdirs for arch-dependent files" echo " " echo "miscellaneous options:" echo " -f, --force don't ask for confirmation before proceeding" echo " " exit 0 ;; ########################################## # required options -r) shift if [ $# -gt 0 ]; then ACE_ROOT=$1; export ACE_ROOT else echo "no ACE_ROOT specified" exit 1 fi shift ;; --aceroot*) ACE_ROOT=$(echo $1 | sed -e 's/^[^=]*=//g'); export ACE_ROOT shift ;; ########################################## # extracting and configuring options -z) shift if [ $# -gt 0 ]; then ACE_ARCHIVE=$1; export ACE_ARCHIVE unpack=1 else echo "no archive specified" exit 1 fi shift ;; --archive*) ACE_ARCHIVE=$(echo $1 | sed -e 's/^[^=]*=//g'); export ACE_ARCHIVE unpack=1 shift ;; -p) shift if [ $# -gt 0 ]; then ACE_HEADER=$(echo $1 | cut -f 1 -d ,); export ACE_HEADER ACE_MAKE=$(echo $1 | cut -f 2 -d ,); export ACE_MAKE else echo "no header,make files specified" exit 1 fi config=1 shift ;; --platform*) stuff=$(echo $1 | sed -e 's/^[^=]*=//g') ACE_HEADER=$(echo $stuff | cut -f 1 -d ,); export ACE_HEADER ACE_MAKE=$(echo $stuff | cut -f 2 -d ,); export ACE_MAKE config=1 shift ;; ########################################## # compiling options -c) shift if [ $# -gt 0 ]; then ACE_OPTS="$1"; export ACE_OPTS compile=1 else echo "no compilation options specified (e.g. debug=0)" exit 1 fi shift ;; --compile*) ACE_OPTS=$(echo $1 | sed -e 's/^[^=]*=//g'); export ACE_OPTS compile=1 shift ;; ########################################## # installing options -i) shift if [ $# -gt 0 ]; then ACE_DEST=$1; export ACE_DEST install=1 else echo "no installation target directory specified (e.g. /tools/ace)" exit 1 fi shift ;; --install*) ACE_DEST=$(echo $1 | sed -e 's/^[^=]*=//g'); export ACE_DEST install=1 shift ;; -a) shift if [ $# -gt 0 ]; then ACE_ARCH=$1; export ACE_ARCH else echo "no installation target architecture specified" exit 1 fi shift ;; --arch*) ACE_ARCH=$(echo $1 | sed -e 's/^[^=]*=//g'); export ACE_ARCH shift ;; ########################################## # miscellaneous options -f) shift force=1 ;; *) # no more options, get on with life if [ $# -gt 0 ]; then echo "unrecognized option: $1" exit 1 fi ;; esac done ##################################################################### # sanity checks for required variables ##################################################################### if [ $install -ne 0 ] && [ $compile -ne 0 ] && [ $unpack -eq 0 ]; then echo "- No actions specified." die=1 fi if [ $unpack -ne 0 ] && [ $compile -ne 0 ] && [ $config -eq 0 ] \ || [ $unpack -ne 0 ] && [ $install -ne 0 ] && [ $config -eq 0 ]; then echo "- Must set platform config options with --platform option" echo " ($this_script -h for help) to unpack and compile/install" die=1 fi if [ -z "$ACE_ROOT" ]; then echo "- Must set ACE_ROOT directory before proceeding..." echo " The directory may be set with the ACE_ROOT environment" echo " variable or the --aceroot option ($this_script -h for help)" die=1 fi if [ $install -eq 1 ] && [ -z "$ACE_ARCH" ]; then # just set it to blank if we want to flatten this level of subdirectory ACE_ARCH="" fi if [ $die -ne 0 ]; then echo "- terminating $this_script script" exit 2 fi ##################################################################### # announce intentions ##################################################################### echo "This script will perform the following actions:" echo "using ACE_ROOT directory: $ACE_ROOT" if [ $unpack -ne 0 ]; then echo " " echo "Extracting:" echo "- unpack source archive: $ACE_ARCHIVE" fi if [ $config -ne 0 ]; then echo " " echo "Configuring:" echo "- platform config.h header: $ACE_HEADER" echo "- platform makefile macros: $ACE_MAKE" fi if [ $compile -ne 0 ]; then echo " " echo "Compiling:" echo "- ACE/TAO compile options: $ACE_OPTS" fi if [ $install -ne 0 ]; then echo " " echo "Installing:" echo "- install target directory: $ACE_DEST" echo "- install target arch: $ACE_ARCH" fi echo "" ##################################################################### # confirm desire to proceed ##################################################################### if [ $force -eq 0 ]; then echo " " echo "Type 'yes' to proceed, anything else to exit" read -r ready if [ "$ready" != "yes" ]; then echo "Terminating install script. Thank you for playing." echo "We have some lovely parting gifts for you. =)" exit 1 fi fi ##################################################################### # extract ACE and TAO ##################################################################### if [ $unpack -ne 0 ]; then echo "Unpacking $ACE_ARCHIVE..." cd $(dirname $ACE_ROOT) gzip -dc $ACE_ARCHIVE | tar xvf - fi ##################################################################### # configure ACE and TAO ##################################################################### if [ $config -ne 0 ]; then echo "Configuring: $ACE_HEADER,$ACE_MAKE..." # copy the files if they exist test -f $ACE_ROOT/ace/$ACE_HEADER \ && cp $ACE_ROOT/ace/$ACE_HEADER $ACE_ROOT/ace/config.h test -f $ACE_ROOT/include/makeinclude/$ACE_MAKE \ && cp $ACE_ROOT/include/makeinclude/$ACE_MAKE \ $ACE_ROOT/include/makeinclude/platform_macros.GNU # print error message and die if they don't if [ ! -f $ACE_ROOT/ace/$ACE_HEADER ]; then echo "error: $ACE_HEADER doesn't exist" die=1 fi if [ ! -f $ACE_ROOT/include/makeinclude/$ACE_MAKE ]; then echo "error: $ACE_MAKE doesn't exist" die=1 fi if [ $die -ne 0 ]; then exit $die fi fi ##################################################################### # compile ACE and TAO ##################################################################### if [ $compile -ne 0 ]; then echo "Compiling: $ACE_OPTS..." ########################################## # add ACE_ROOT/ace to LD_LIBRARY_PATH so tao_idl can find libACE.so if [ "$(uname -s)" = "HP-UX" ]; then if [ ! -z "$SHLIB_PATH" ]; then SHLIB_PATH=$ACE_ROOT/ace:$SHLIB_PATH else SHLIB_PATH=$ACE_ROOT/ace; export SHLIB_PATH fi else if [ ! -z "$LD_LIBRARY_PATH" ]; then LD_LIBRARY_PATH=$ACE_ROOT/ace:$LD_LIBRARY_PATH else LD_LIBRARY_PATH=$ACE_ROOT/ace; export LD_LIBRARY_PATH fi fi ########################################## # compile a few select directories for d in ace apps/gperf/src TAO/tao TAO/TAO_IDL TAO/orbsvcs TAO/utils; do echo --- Building in $d. cd "$ACE_ROOT/$d" make $ACE_OPTS if [ $? -ne 0 ]; then echo --- Error during build: $? exit $? fi done fi ##################################################################### # install ACE and TAO ##################################################################### if [ $install -ne 0 ]; then echo "Installing: $ACE_DEST..." ########################################## # determine final target directories ACE_VER=$(head -n 1 $ACE_ROOT/VERSION.txt | sed -e 's/^[^0-9]*//' -e 's/[, ].*//') ACE_DIR="$ACE_DEST/ACE-$ACE_VER"; export ACE_DIR TAO_VER=$(head -n 1 $ACE_ROOT/TAO/VERSION.txt | sed -e 's/^[^0-9]*//' -e 's/[, ].*//') TAO_DIR="$ACE_DEST/TAO-$TAO_VER"; export ACE_DIR ########################################## # create target directories as needed echo "creating target directories..." ace_dirs="$ACE_DIR $ACE_DIR/include $ACE_DIR/man" ace_arch_dirs="$ACE_DIR/$ACE_ARCH/include/ace \ $ACE_DIR/$ACE_ARCH/bin $ACE_DIR/$ACE_ARCH/lib" tao_dirs="$TAO_DIR $TAO_DIR/include $TAO_DIR/include/orbsvcs" tao_arch_dirs="$TAO_DIR/$ACE_ARCH/include \ $TAO_DIR/$ACE_ARCH/bin $TAO_DIR/$ACE_ARCH/lib" for dir in $ace_dirs $ace_arch_dirs $tao_dirs $tao_arch_dirs; do if [ ! -d $dir ]; then echo $dir mkdir -p $dir fi done ########################################## # copy TAO stuff cd $ACE_ROOT/TAO cp VERSION.txt $TAO_DIR/$ACE_ARCH/TAO-VERSION # copy TAO includes echo "Copying include files..." find tao -type f -name "*.idl" -print | cpio -p -d -V $TAO_DIR/include find tao -type f -name "*.pidl" -print | cpio -p -d -V $TAO_DIR/include find tao -type f -name "*.h" -print | grep -v "^config\.h" | cpio -p -d -V $TAO_DIR/include find tao -type f \( -name "*.i" -o -name "*.inl" \) -print | cpio -p -d -V $TAO_DIR/include find tao -type f -name "*.cpp" -print | cpio -p -d -V $TAO_DIR/include # NOTE: may need all .h, .i and .cpp under TAO/orbsvcs, instead of just TAO/orbsvcs/orbsvcs cd orbsvcs find orbsvcs -type f -name "*.idl" -print | cpio -p -d -V $TAO_DIR/include find orbsvcs -type f -name "*.pidl" -print | cpio -p -d -V $TAO_DIR/include find orbsvcs -type f -name "*.h" -print | grep -v "^config\.h" | cpio -p -d -V $TAO_DIR/include find orbsvcs -type f \( -name "*.i" -o -name "*.inl" \) -print | cpio -p -d -V $TAO_DIR/include find orbsvcs -type f -name "*.cpp" -print | cpio -p -d -V $TAO_DIR/include cd .. # copy TAO libs echo "Copying libraries..." for f in $(find . -type f \( -name "lib?*.so*" -o -name "lib?*.a" -o -name "lib?*.dll" -o -name "*.dylib" \) -print); do echo $f cp $f $TAO_DIR/$ACE_ARCH/lib done # copy TAO executables echo "Copying executables..." ALL_PROGS=$(find orbsvcs -type f -perm /a+x -print | grep -v ".*lib.*" | grep -v ".\.pl" | grep -v test | grep -v example) ALL_PROGS="$(find utils -type f -perm /a+x -print) $ALL_PROGS" PROGS=$(echo $ALL_PROGS | tr " " "\n" | grep -v test | grep -v default.bld | grep -v README | grep -v GNUmakefile) for f in TAO_IDL/tao_idl $PROGS; do echo $f cp $f $TAO_DIR/$ACE_ARCH/bin done ########################################## # copy ACE stuff cd $ACE_ROOT cp VERSION.txt $ACE_DIR/$ACE_ARCH/ACE-VERSION # copy ACE includes echo "Copying include files..." find ace -type f -name "*.h" -print | grep -v "^config\.h" | cpio -p -d -V $ACE_DIR/include find ace -type f \( -name "*.i" -o -name "*.inl" \) -print | cpio -p -d -V $ACE_DIR/include find ace -type f -name "*.cpp" -print | cpio -p -d -V $ACE_DIR/include cp ace/config.h $ACE_DIR/$ACE_ARCH/include/ace/config.h chmod -R a+r $ACE_DIR/$ACE_ARCH/include # copy ACE libs echo "Copying libraries..." for f in $(find . -type f \( -name "lib?*.so*" -o -name "lib?*.a" -o -name "lib?*.dll" -o -name "*.dylib" \) -print); do # only copy libs if they're not already in $TAO_DIR/$ACE_ARCH/lib maybe_tao_lib=$TAO_DIR/$ACE_ARCH/lib/$(basename $f) if [ ! -f $maybe_tao_lib ]; then echo $f cp $f $ACE_DIR/$ACE_ARCH/lib fi test -f $maybe_tao_lib && echo "library $f already installed with TAO" done # copy ACE executables echo "Copying executables..." ACE_PROGS=apps/gperf/src/ace_gperf for f in $ACE_PROGS; do echo $f cp $f $ACE_DIR/$ACE_ARCH/bin done # copy ACE man pages echo "Copying man pages..." find man -type f -print | cpio -p -d -V $ACE_DIR # PERMISSIONS chmod -R a+r $ACE_DEST find $ACE_DEST -type d -exec chmod a+x {} \; find $ACE_DEST -type f -perm /a+x -exec chmod a+x {} \; fi # if [ $install -ne 0 ] ##################################################################### # that's all, folks ##################################################################### echo "$this_script: done."