Files
geant4/cmake/Templates/geant4-config.in
T
2016-06-30 14:12:05 +02:00

625 lines
16 KiB
Bash

#!/bin/sh
#-----------------------------------------------------------------------
# sh config query script for Geant4 @Geant4_VERSION@ on UNIX platforms
# Autogenerated by CMake DO NOT EDIT
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
# Determine location of this script.
# NB, we don't always use the result of this calculation, but it does not
# hurt to do it. Only possible error is if too long a chain of symbolic
# links are used to point to the physical script.
#
# Resolve symbolic links to script - we should end up with a physical file
script="$0"
calldir=`pwd`
loopcount=""
while [ "x`readlink $script`" != "x" ] ; do
preloc=`dirname $script`
script=`readlink $script`
if [ ${script##/} = ${script##~} ] ; then
# The symbolic link was relative...
script="$preloc/$script"
fi
loopcount="l$loopcount"
if [ ${#loopcount} -gt 10 ] ; then
echo "error: more than 10 symbolic links to geant4-config traversed."
exit 1
fi
done
# If we still have a relative path, then it must be relative to the
# calling dir. NB we don't attempt to resolve directory symbolic
# links or remove '.' or '..'
if [ ${script##/} = ${script##~} ] ; then
script="$calldir/$script"
fi
#-----------------------------------------------------------------------
# Finally, grab the directory in which the script is located
# Used below should we be setup to be relocatable.
scriptloc=`dirname $script`
#-----------------------------------------------------------------------
# Expansion and calculation of all needed variables
#
prefix=@GEANT4_CONFIG_INSTALL_PREFIX@
exec_prefix=@GEANT4_CONFIG_EXECPREFIX@
libdir=@GEANT4_CONFIG_LIBDIR@
includedirs="@GEANT4_CONFIG_INCLUDE_DIRS@"
name="geant4"
description="Geant4 toolkit for the simulation of the passage of particles through matter"
version="@Geant4_VERSION@"
# 'Requires' that may affect cflags and libs.
# Basic flags and libraries for visualization
vis_cflags="-DG4UI_USE_TCSH"
vis_libs="-lG4Tree \
-lG4FR \
-lG4GMocren \
-lG4visHepRep \
-lG4RayTracer \
-lG4VRML \
-lG4vis_management \
-lG4modeling"
#-----------------------------------------------------------------------
# Core setup...
#
cflags="@CMAKE_CXX_FLAGS@ @GEANT4_CXXSTD_FLAGS@"
feature_list=""
# - CXX Standard
geant4_cxx_std="c++@GEANT4_BUILD_CXXSTD@"
# - static libs
have_staticlibs="@G4_BUILTWITH_STATICLIBS@"
feature_list="${feature_list} staticlibs[${have_staticlibs}]"
# No action as yet
# - multithreading
have_multithreading="@G4_BUILTWITH_MULTITHREADING@"
feature_list="${feature_list} multithreading[${have_multithreading}]"
if test "x${have_multithreading}" = "xyes" ; then
geant4_tls_model="@GEANT4_BUILD_TLS_MODEL@"
cflags="${cflags} -DG4MULTITHREADED"
else
geant4_tls_model=""
fi
# - Includes and Libs
for g4incdir in ${includedirs} ; do
cflags="${cflags} -I${g4incdir}"
done
libs="-lG4interfaces \
-lG4persistency \
-lG4analysis \
-lG4error_propagation \
-lG4readout \
-lG4physicslists \
-lG4run \
-lG4event \
-lG4tracking \
-lG4parmodels \
-lG4processes \
-lG4digits_hits \
-lG4track \
-lG4particles \
-lG4geometry \
-lG4materials \
-lG4graphics_reps \
-lG4intercoms \
-lG4global"
#-----------------------------------------------------------------------
# - Extra optional features that were enabled.
# - ALL
geant4_uses_opengl="no"
geant4_uses_x11="no"
# - CLHEP
have_clhep="@G4_BUILTWITH_CLHEP@"
feature_list="${feature_list} clhep[${have_clhep}]"
if test "x${have_clhep}" = "xno" ; then
cflags="${cflags} -I@G4_SYSTEM_CLHEP_INCLUDE_DIR@"
libs="${libs} @G4_SYSTEM_CLHEP_LIBRARIES@"
fi
if test "x${have_clhep}" = "xyes" ; then
libs="${libs} -lG4clhep"
fi
# - EXPAT
have_expat="@G4_BUILTWITH_EXPAT@"
feature_list="${feature_list} expat[${have_expat}]"
if test "x${have_expat}" = "xyes" ; then
libs="${libs} -lG4expat"
fi
# - ZLIB
have_zlib="@G4_BUILTWITH_ZLIB@"
feature_list="${feature_list} zlib[${have_zlib}]"
if test "x${have_zlib}" = "xyes" ; then
libs="${libs} -lG4zlib"
fi
# - GDML
have_gdml="@G4_BUILTWITH_GDML@"
feature_list="${feature_list} gdml[${have_gdml}]"
if test "x${have_gdml}" = "xyes" ; then
cflags="${cflags} @G4_XERCESC_CFLAGS@"
fi
# - USolids
have_usolids="@G4_BUILTWITH_USOLIDS@"
feature_list="${feature_list} usolids[${have_usolids}]"
if test "x${have_usolids}" = "xyes" ; then
cflags="${cflags} @G4_USOLIDS_CFLAGS@"
fi
# - Freetype
have_freetype="@G4_BUILTWITH_FREETYPE@"
feature_list="${feature_list} freetype[${have_freetype}]"
# - G3toG4
have_g3tog4="@G4_BUILTWITH_G3TOG4@"
feature_list="${feature_list} g3tog4[${have_g3tog4}]"
if test "x${have_g3tog4}" = "xyes" ; then
libs="-lG3toG4 ${libs}"
fi
# - Qt
have_qt="@G4_BUILTWITH_QT@"
feature_list="${feature_list} qt[${have_qt}]"
if test "x${have_qt}" = "xyes" ; then
vis_cflags="${vis_cflags} \
-DG4INTY_USE_QT -DG4UI_USE_QT -DG4VIS_USE_OPENGLQT @G4_QT_CFLAGS@"
geant4_uses_opengl="yes"
fi
# - Motif
have_motif="@G4_BUILTWITH_MOTIF@"
feature_list="${feature_list} motif[${have_motif}]"
if test "x${have_motif}" = "xyes" ; then
vis_cflags="${vis_cflags} -DG4UI_USE_XM -DG4VIS_USE_OPENGLXM"
geant4_uses_x11="yes"
geant4_uses_opengl="yes"
fi
# - RayTracerX11
have_raytracerx11="@G4_BUILTWITH_RAYTRACERX11@"
feature_list="${feature_list} raytracer-x11[${have_raytracerx11}]"
if test "x${have_raytracerx11}" = "xyes" ; then
vis_cflags="${vis_cflags} -DG4VIS_USE_RAYTRACERX"
geant4_uses_x11="yes"
fi
# - OpenGL with X11
have_openglx11="@G4_BUILTWITH_OPENGLX11@"
feature_list="${feature_list} opengl-x11[${have_openglx11}]"
if test "x${have_openglx11}" = "xyes" ; then
vis_cflags="${vis_cflags} -DG4VIS_USE_OPENGLX"
geant4_uses_opengl="yes"
geant4_uses_x11="yes"
fi
# - OpenInventor
# Whilst it *is* an Xt based driver, don't *think* Xt or X11 appear
# in the public interface, nor do the Inventor headers...
have_openinventor="@G4_BUILTWITH_INVENTOR@"
feature_list="${feature_list} openinventor[${have_openinventor}]"
if test "x${have_openinventor}" = "xyes" ; then
vis_cflags="${vis_cflags} -DG4INTY_USE_XT -DG4VIS_USE_OI -DG4VIS_USE_OIX"
vis_libs="-lG4OpenInventor ${vis_libs}"
fi
# - If we have any OpenGL based feature, then we need to add in the
# OpenGL global define and the G4OpenGL/G4gl2ps libraries.
if test "x${geant4_uses_opengl}" = "xyes" ; then
vis_cflags="-DG4VIS_USE_OPENGL ${vis_cflags}"
vis_libs="-lG4OpenGL -lG4gl2ps ${vis_libs}"
fi
# - If we have any X11 based feature, then we need the INTY_XT define and
# *may* need the X11 includes
if test "x${geant4_uses_x11}" = "xyes" ; then
vis_cflags="-DG4INTY_USE_XT @G4_X11_CFLAGS@ ${vis_cflags}"
fi
#-----------------------------------------------------------------------
# Datasets
# - List creation for sh compatibility, see:
# https://wiki.ubuntu.com/DashAsBinSh
# Note however that the guide in the link uses the GNU awk extension
# 'length' to find the number of elements in the array. This will fail
# on other awk implementations. Use standard feature of split function
# returning number of elements.
dataset_url="@GEANT4_DATASETS_URL@"
dataset_timeout="@GEANT4_INSTALL_DATA_TIMEOUT@"
dataset_list=$(awk 'BEGIN { n = split( "@GEANT4_CONFIG_DATASET_DESCRIPTIONS@", array, ";"); for (i=1;i<=n;i++) { print array[i]; } }')
#-----------------------------------------------------------------------
# function print_datasets
# print dataset information with one line per dataset and each
# line in the format
# <NAME> <ENVVARNAME> <PATH>
print_datasets()
{
for ds in ${dataset_list} ; do
dataset_name=$(echo $ds | cut -d "|" -f1)
dataset_envvar=$(echo $ds | cut -d "|" -f2)
dataset_path=$(echo $ds | cut -d "|" -f3)
echo ${dataset_name} ${dataset_envvar} ${dataset_path}
done
exit 0
}
#-----------------------------------------------------------------------
# function check_datasets
# Check whether datasets exist as directories at the expected
# location. Print dataset name, path and install status
#
check_datasets()
{
for ds in ${dataset_list} ; do
dataset_name=$(echo $ds | cut -d "|" -f1)
dataset_path=$(echo $ds | cut -d "|" -f3)
dataset_status="NOTFOUND"
if test -d ${dataset_path} ; then
dataset_status="INSTALLED"
fi
echo ${dataset_name} ${dataset_status} ${dataset_path}
done
}
#-----------------------------------------------------------------------
# function install_datasets
# Download and install datasets if they are not already installed
#
install_datasets()
{
G4CURL=$(which curl)
if test "x${G4CURL}" = "x" ; then
echo "- error: no curl executable found"
exit 1
fi
if test ! -x "${G4CURL}" ; then
echo "- error: curl '${G4CURL}' is not executable"
exit 1
fi
G4OPENSSL=$(which openssl)
if test "x${G4OPENSSL}" = "x" ; then
echo "- error: no openssl executable found"
exit 1
fi
if test ! -x "${G4OPENSSL}" ; then
echo "- error: openssl '${G4OPENSSL}' is not executable"
exit 1
fi
G4TAR=$(which tar)
if test "x${G4TAR}" = "x" ; then
echo "- error: no tar executable found"
exit 1
fi
if test ! -x "${G4TAR}" ; then
echo "- error: tar '${G4TAR}' is not executable"
exit 1
fi
datasets_to_install=''
for ds in ${dataset_list} ; do
dataset_path=$(echo $ds | cut -d "|" -f3)
if test ! -d ${dataset_path} ; then
datasets_to_install="${datasets_to_install} ${ds}"
fi
done
dataset_install="ok"
if test "x${datasets_to_install}" != "x" ; then
# - Create download cache
g4downloaddir=$(mktemp -d -t g4dlcXXXXXXXXXX)
if test -d ${g4downloaddir} ; then
echo "+ created download cache"
else
echo "- error : failed to create '${g4downloaddir}'"
dataset_install="fail"
break
fi
# - Download/install loop
for ds in ${datasets_to_install} ; do
# Create base path (repetitive)
dataset_path=$(echo $ds | cut -d "|" -f3)
mkdir -p $(dirname ${dataset_path})
if [ "$?" != "0" ] || [ ! -w $(dirname ${dataset_path}) ] ; then
echo "- error : failed to create base directory '$(dirname ${dataset_path})'"
dataset_install="fail"
break
fi
# - Download bundle to cache
dataset_file=$(echo $ds | cut -d "|" -f4)
echo "+ downloading ${dataset_file}"
${G4CURL} -f -m ${dataset_timeout} -o ${g4downloaddir}/${dataset_file} ${dataset_url}/${dataset_file}
curl_status="$?"
if [ "$curl_status" != "0" ] ; then
echo "- download of '${dataset_file}' failed : CURL error $?"
dataset_install="fail"
break
fi
# Validate bundle hash (basic)
dataset_md5=$(echo $ds | cut -d "|" -f5)
actual_md5=$(${G4OPENSSL} dgst -md5 ${g4downloaddir}/${dataset_file} | cut -d" " -f2)
echo "+ checking md5 of ${dataset_file}"
if [ "${actual_md5}" != "${dataset_md5}" ] ; then
echo "- md5 mismatch for '${dataset_file}' : ${actual_md5}(actual) != ${dataset_md5}(expected)"
dataset_install="fail"
break
fi
# Unpack bundle
echo "+ untar ${dataset_file}"
${G4TAR} -C ${g4downloaddir} -xf ${g4downloaddir}/${dataset_file}
tar_status="$?"
if [ "$tar_status" != "0" ] ; then
echo "- untar of '${dataset_file}' failed : tar error $?"
dataset_install="fail"
break
fi
# Install bundle
echo "+ installing $(basename ${dataset_path})"
cp -R ${g4downloaddir}/$(basename ${dataset_path}) $(dirname ${dataset_path})
cp_status="$?"
if [ "$cp_status" != "0" ] ; then
echo "- copy of '$(basename ${dataset_path})' failed : cp error $?"
# Extra task - remove anything copied...
rm -Rf ${dataset_path}
dataset_install="fail"
break
fi
done
# - Clean up download cache
rm -Rf ${g4downloaddir}
if test -d ${g4downloaddir} ; then
echo "- failed to remove '${g4downloaddir}'"
else
echo "+ cleaned download cache"
fi
fi
if [ "${dataset_install}" = "ok" ] ; then
echo "+ all datasets installed"
exit 0
else
echo "- dataset installation failed"
exit 1
fi
exit 1
}
#-----------------------------------------------------------------------
# function help
# print help on available command line arguments and enabled
# and disabled features of the toolkit
#
help()
{
cat<<EOF
Usage: geant4-config [OPTION...]
--prefix output installation prefix of Geant4
--version output version for Geant4
--cxxstd C++ Standard compiled against
--tls-model Thread Local Storage model used
--libs output all linker flags
--cflags output all preprocessor
and compiler flags
--libs-without-gui output linker flags without
GUI components
--cflags-without-gui output preprocessor and compiler
flags without GUI components
--has-feature FEATURE output yes if FEATURE is supported,
or no if not supported
--datasets output dataset name, environment variable
and path, with one line per dataset
--check-datasets output dataset name, installation status and
expected installation location, with one line
per dataset
--install-datasets download and install any missing datasets,
requires a network connection and for the dataset
path to be user writable
Known Features:
EOF
for f in ${feature_list} ; do
echo " $f"
done
cat<<EOF
Help options:
-?, --help show this help message
--usage display brief usage message
EOF
exit 1
}
#-----------------------------------------------------------------------
# function usage
# print basic usage message
#
usage()
{
cat<<EOF
Usage: geant4-config [--prefix] [--version] [--libs] [--cflags]
EOF
exit 1
}
#-----------------------------------------------------------------------
# Process arguments
#
if test $# -eq 0 ; then
usage
fi
while test $# -gt 0 ; do
case "$1" in
-*=*)
optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
;;
*)
optarg=
;;
esac
case "$1" in
--prefix)
echo ${prefix}
;;
--version)
echo ${version}
;;
--cxxstd)
echo ${geant4_cxx_std}
;;
--tls-model)
echo ${geant4_tls_model}
;;
--libs)
echo "-L${libdir}" ${vis_libs} ${libs}
;;
--cflags)
echo ${vis_cflags} ${cflags}
;;
--libs-without-gui)
echo "-L${libdir}" ${libs}
;;
--cflags-without-gui)
echo ${cflags}
;;
--has-feature)
shift
case "$1" in
static)
echo ${have_staticlibs}
;;
multithreading)
echo ${have_multithreading}
;;
clhep)
echo ${have_clhep}
;;
expat)
echo ${have_expat}
;;
zlib)
echo ${have_zlib}
;;
gdml)
echo ${have_gdml}
;;
usolids)
echo ${have_usolids}
;;
freetype)
echo ${have_freetype}
;;
g3tog4)
echo ${have_g3tog4}
;;
qt)
echo ${have_qt}
;;
motif)
echo ${have_motif}
;;
raytracer-x11)
echo ${have_raytracerx11}
;;
opengl-x11)
echo ${have_openglx11}
;;
openinventor)
echo ${have_openinventor}
;;
*)
echo "no"
;;
esac
;;
--datasets)
print_datasets
;;
--check-datasets)
check_datasets
;;
--install-datasets)
install_datasets
;;
-?)
help
;;
--help)
help
;;
--usage)
usage
;;
*)
usage
;;
esac
shift
done
# Finally...
exit 0