[1337] | 1 | #! /bin/bash - |
---|
| 2 | # ====================================================================== |
---|
| 3 | # A script for Geant4 packaging |
---|
| 4 | # |
---|
| 5 | # Version 2.2 Dec 2008 |
---|
| 6 | # |
---|
| 7 | # ====================================================================== |
---|
| 8 | export LANG=C |
---|
| 9 | |
---|
| 10 | IFS=' |
---|
| 11 | ' |
---|
| 12 | |
---|
| 13 | PATH=/bin:/usr/bin |
---|
| 14 | export PATH |
---|
| 15 | |
---|
| 16 | # ====================================================================== |
---|
| 17 | # testing the echo features |
---|
| 18 | # ====================================================================== |
---|
| 19 | if `(echo "testing\c"; echo 1,2,3) | grep c > /dev/null` ; then |
---|
| 20 | if `(echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn > /dev/null`; then |
---|
| 21 | ac_n= ac_c=' |
---|
| 22 | ' ac_t=' ' |
---|
| 23 | else |
---|
| 24 | ac_n=-n ac_c= ac_t= |
---|
| 25 | fi |
---|
| 26 | else |
---|
| 27 | ac_n= ac_c='\c' ac_t= |
---|
| 28 | fi |
---|
| 29 | |
---|
| 30 | # ====================================================================== |
---|
| 31 | # help message |
---|
| 32 | # ====================================================================== |
---|
| 33 | show_help() { |
---|
| 34 | cat <<EOF |
---|
| 35 | Usage: g4pack [<options>] |
---|
| 36 | |
---|
| 37 | Options: |
---|
| 38 | --help, -h print this message |
---|
| 39 | |
---|
| 40 | --with-g4system=G4SYSTEM G4SYSTEM [\$G4SYSTEM] |
---|
| 41 | --with-g4-dir=DIR Geant4 dir [\$G4INSTALL] |
---|
| 42 | --with-clhep-dir=DIR CLHEP dir [\$CLHEP_BASE_DIR] |
---|
| 43 | |
---|
| 44 | --with-lib-dir=DIR G4 static granular libdir [lib] |
---|
| 45 | --with-glib-dir=DIR G4 global static libdir [glib] |
---|
| 46 | --with-slib-dir=DIR G4 global shared libdir [slib] |
---|
| 47 | |
---|
| 48 | --with-install-dir=DIR install path (MacOSX only) |
---|
| 49 | |
---|
| 50 | Enable/disable options: prefix with either --enable- or --disable- |
---|
| 51 | lib packing static granular lib [disable] |
---|
| 52 | glib packing global static lib [enable] |
---|
| 53 | slib packing global shared lib [enable] |
---|
| 54 | |
---|
| 55 | EOF |
---|
| 56 | } |
---|
| 57 | |
---|
| 58 | # ====================================================================== |
---|
| 59 | # rebuild shared library (MacOSX only) |
---|
| 60 | # ====================================================================== |
---|
| 61 | rebuild_sharedlib() { |
---|
| 62 | mkdir tmp |
---|
| 63 | mv lib*.dylib ./tmp |
---|
| 64 | |
---|
| 65 | liblist=lib*.a |
---|
| 66 | |
---|
| 67 | for lib in $liblist |
---|
| 68 | do |
---|
| 69 | slibname=${lib%.*}.dylib |
---|
| 70 | |
---|
| 71 | #check linked libraries... |
---|
| 72 | extliblist=`otool -L tmp/$slibname | grep -v /usr/lib | grep -v $slibname | awk '{print $1}'` |
---|
| 73 | |
---|
| 74 | ar x $lib |
---|
| 75 | g++ -dynamiclib -single_module -undefined dynamic_lookup \ |
---|
| 76 | -install_name $install_dir/lib/$slibname \ |
---|
| 77 | $extliblist -o $slibname *.o |
---|
| 78 | rm *.o __.SYMDEF |
---|
| 79 | |
---|
| 80 | chmod 755 $slibname |
---|
| 81 | done |
---|
| 82 | |
---|
| 83 | rm -r tmp |
---|
| 84 | } |
---|
| 85 | |
---|
| 86 | |
---|
| 87 | # ====================================================================== |
---|
| 88 | # main |
---|
| 89 | # ====================================================================== |
---|
| 90 | # default values |
---|
| 91 | g4system=${G4SYSTEM:-XXX} |
---|
| 92 | g4dir=${G4INSTALL:-/zzz} |
---|
| 93 | clhepdir=${CLHEP_BASE_DIR:-/zzz} |
---|
| 94 | |
---|
| 95 | install_dir=/zzz |
---|
| 96 | |
---|
| 97 | libdir=lib |
---|
| 98 | glibdir=glib |
---|
| 99 | slibdir=slib |
---|
| 100 | |
---|
| 101 | enable_lib=0 |
---|
| 102 | enable_glib=1 |
---|
| 103 | enable_slib=1 |
---|
| 104 | |
---|
| 105 | # parsing options |
---|
| 106 | while test $# -gt 0 |
---|
| 107 | do |
---|
| 108 | case $1 in |
---|
| 109 | -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; |
---|
| 110 | *) optarg= ;; |
---|
| 111 | esac |
---|
| 112 | |
---|
| 113 | case $1 in |
---|
| 114 | --help|-h) show_help; exit 0 ;; |
---|
| 115 | # --------------------------------------------------------------- |
---|
| 116 | --with-g4system=*) g4system=$optarg ;; |
---|
| 117 | --with-g4-dir=*) g4dir=$optarg ;; |
---|
| 118 | --with-clhep-dir=*) clhepdir=$optarg ;; |
---|
| 119 | --with-lib-dir=*) libdir=$optarg ;; |
---|
| 120 | --with-glib-dir=*) glibdir=$optarg ;; |
---|
| 121 | --with-slib-dir=*) slibdir=$optarg ;; |
---|
| 122 | --with-install-dir=*) install_dir=$optarg ;; |
---|
| 123 | # --------------------------------------------------------------- |
---|
| 124 | --enable-lib ) enable_lib=1 ;; |
---|
| 125 | --disable-lib ) enable_lib=0 ;; |
---|
| 126 | --enable-glib ) enable_glib=1 ;; |
---|
| 127 | --disable-glib ) enable_glib=0 ;; |
---|
| 128 | --enable-slib ) enable_slib=1 ;; |
---|
| 129 | --disable-slib ) enable_slib=0 ;; |
---|
| 130 | # --------------------------------------------------------------- |
---|
| 131 | -*) |
---|
| 132 | echo "Unrecognized option: $1" |
---|
| 133 | exit -1 |
---|
| 134 | ;; |
---|
| 135 | *) |
---|
| 136 | echo "Invalid argument: $1" |
---|
| 137 | exit -1 |
---|
| 138 | ;; |
---|
| 139 | esac |
---|
| 140 | shift |
---|
| 141 | done |
---|
| 142 | |
---|
| 143 | # check something |
---|
| 144 | shlib=so |
---|
| 145 | if [ $g4system = Darwin-g++ ]; then |
---|
| 146 | shlib=dylib |
---|
| 147 | fi |
---|
| 148 | |
---|
| 149 | echo $ac_n "Checking for G4 dir ...$ac_c" |
---|
| 150 | if [ ! -d $g4dir ]; then |
---|
| 151 | echo "no" |
---|
| 152 | echo "### $g4dir does not exist." |
---|
| 153 | exit -1 |
---|
| 154 | fi |
---|
| 155 | echo $g4dir |
---|
| 156 | |
---|
| 157 | echo $ac_n "Checking for CLHEP dir ...$ac_c" |
---|
| 158 | if [ ! -d $clhepdir ]; then |
---|
| 159 | echo "no" |
---|
| 160 | echo "### $clhepdir does not exist." |
---|
| 161 | exit -1 |
---|
| 162 | fi |
---|
| 163 | echo $clhepdir |
---|
| 164 | |
---|
| 165 | echo $ac_n "Checking for G4SYSTEM ...$ac_c" |
---|
| 166 | if [ ! -e $g4dir/config/sys/$g4system.gmk ]; then |
---|
| 167 | echo "no" |
---|
| 168 | echo "### $g4system is invalid." |
---|
| 169 | exit -1 |
---|
| 170 | fi |
---|
| 171 | echo $g4system |
---|
| 172 | |
---|
| 173 | if [ $enable_lib = 1 ]; then |
---|
| 174 | echo $ac_n "Checking for lib dir ...$ac_c" |
---|
| 175 | if [ ! -d $g4dir/$libdir ]; then |
---|
| 176 | echo "no" |
---|
| 177 | echo "### $libdir is invalid." |
---|
| 178 | exit -1 |
---|
| 179 | fi |
---|
| 180 | echo $libdir |
---|
| 181 | fi |
---|
| 182 | |
---|
| 183 | if [ $enable_glib = 1 ]; then |
---|
| 184 | echo $ac_n "Checking for glib dir ...$ac_c" |
---|
| 185 | if [ ! -d $g4dir/$glibdir ]; then |
---|
| 186 | echo "no" |
---|
| 187 | echo "### $glibdir is invalid." |
---|
| 188 | exit -1 |
---|
| 189 | fi |
---|
| 190 | echo $glibdir |
---|
| 191 | fi |
---|
| 192 | |
---|
| 193 | if [ $enable_slib = 1 ]; then |
---|
| 194 | echo $ac_n "Checking for slib dir ...$ac_c" |
---|
| 195 | if [ ! -d $g4dir/$slibdir ]; then |
---|
| 196 | echo "no" |
---|
| 197 | echo "### $slibdir is invalid." |
---|
| 198 | exit -1 |
---|
| 199 | fi |
---|
| 200 | echo $slibdir |
---|
| 201 | fi |
---|
| 202 | |
---|
| 203 | # ---------------------------------------------------------------------- |
---|
| 204 | # ok go ahead |
---|
| 205 | |
---|
| 206 | echo "" |
---|
| 207 | echo "Packing ..." |
---|
| 208 | |
---|
| 209 | g4packdir=g4 |
---|
| 210 | |
---|
| 211 | if [ -d $g4packdir ]; then |
---|
| 212 | echo "### $g4packdir/ already exist. Please move it." |
---|
| 213 | exit -1 |
---|
| 214 | fi |
---|
| 215 | |
---|
| 216 | mkdir -p $g4packdir |
---|
| 217 | mkdir -p $g4packdir/include |
---|
| 218 | mkdir -p $g4packdir/lib |
---|
| 219 | |
---|
| 220 | # CLHEP |
---|
| 221 | cp -pR $clhepdir/include/CLHEP $g4packdir/include/ |
---|
| 222 | cp -pR $clhepdir/lib/libCLHEP-[12]* $g4packdir/lib/ |
---|
| 223 | |
---|
| 224 | # Geant4 |
---|
| 225 | cp -pR $g4dir/include $g4packdir/include/ |
---|
| 226 | mv $g4packdir/include/include $g4packdir/include/Geant4 |
---|
| 227 | rm $g4packdir/include/Geant4/README |
---|
| 228 | |
---|
| 229 | if [ $enable_glib = 1 ]; then |
---|
| 230 | cp -pR $g4dir/$glibdir/$g4system/lib* $g4packdir/lib |
---|
| 231 | fi |
---|
| 232 | |
---|
| 233 | if [ $enable_slib = 1 ]; then |
---|
| 234 | cp -pR $g4dir/$slibdir/$g4system/lib* $g4packdir/lib |
---|
| 235 | |
---|
| 236 | if [ $g4system = Darwin-g++ ]; then |
---|
| 237 | if [ $enable_glib = 0 ]; then |
---|
| 238 | echo "### gobal static library is required for the operation." |
---|
| 239 | exit -1 |
---|
| 240 | fi |
---|
| 241 | pushd $g4packdir/lib > /dev/null 2>&1 |
---|
| 242 | rebuild_sharedlib |
---|
| 243 | popd > /dev/null 2>&1 |
---|
| 244 | fi |
---|
| 245 | fi |
---|
| 246 | |
---|
| 247 | if [ $enable_lib = 1 ]; then |
---|
| 248 | cp -pR $g4dir/$libdir/$g4system/lib* $g4packdir/lib |
---|
| 249 | fi |
---|
| 250 | |
---|
| 251 | # CLHEP links |
---|
| 252 | pushd $g4packdir/lib > /dev/null 2>&1 |
---|
| 253 | ln -s libCLHEP-*.a libCLHEP.a |
---|
| 254 | ln -s libCLHEP-*.$shlib libCLHEP.$shlib |
---|
| 255 | popd > /dev/null 2>&1 |
---|
| 256 | |
---|
| 257 | exit 0 |
---|
| 258 | |
---|