#!/bin/sh

#-----------------------------------------------------------------------
# sh config query script for Geant4 10.6.3 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=/opt/local
exec_prefix=
libdir=/opt/local/lib/Geant4/Geant4.10.6
includedirs="/opt/local/include/Geant4/Geant4.10.6/Geant4"

name="geant4"
description="Geant4 toolkit for the simulation of the passage of particles through matter"
version="10.6.3"

# '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="-pipe -Os -DNDEBUG -I/opt/local/include -stdlib=libc++ -isysroot/Library/Developer/CommandLineTools/SDKs/MacOSX11.sdk -W -Wall -pedantic -Wno-non-virtual-dtor -Wno-long-long -Wwrite-strings -Wpointer-arith -Woverloaded-virtual -Wno-variadic-macros -Wshadow -pipe -Qunused-arguments -DGL_SILENCE_DEPRECATION -stdlib=libc++ -std=c++11"
feature_list=""

# - CXX Standard
geant4_cxx_std="c++11"

# - static libs
have_staticlibs="no"
feature_list="${feature_list} staticlibs[${have_staticlibs}]"
# No action as yet

# - multithreading
have_multithreading="no"
feature_list="${feature_list} multithreading[${have_multithreading}]"
if test "x${have_multithreading}" = "xyes" ; then
  geant4_tls_model=""
  if test "x${geant4_tls_model}" = "xauto" ; then
    geant4_tls_model=""
  fi
else
  geant4_tls_model=""
fi

# - smart stacking
have_smartstack="no"
feature_list="${feature_list} smartstack[${have_smartstack}]"
if test "x${have_smartstack}" = "xyes" ; then
  cflags="-DG4_USESMARTSTACK ${cflags}"
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="yes"
feature_list="${feature_list} clhep[${have_clhep}]"

if test "x${have_clhep}" = "xno" ; then
  cflags="${cflags} -I"
  libs="${libs} "
fi
if test "x${have_clhep}" = "xyes" ; then
  libs="${libs} -lG4clhep"
fi

# - EXPAT
have_expat="no"
feature_list="${feature_list} expat[${have_expat}]"

if test "x${have_expat}" = "xyes" ; then
  libs="${libs} -lG4expat"
fi

# - ZLIB
have_zlib="yes"
feature_list="${feature_list} zlib[${have_zlib}]"

if test "x${have_zlib}" = "xyes" ; then
  libs="${libs} -lG4zlib"
fi

# - GDML
have_gdml="yes"
feature_list="${feature_list} gdml[${have_gdml}]"

if test "x${have_gdml}" = "xyes" ; then
  cflags="${cflags} "
fi

# - USolids
have_usolids="no"
feature_list="${feature_list} usolids[${have_usolids}]"
if test "x${have_usolids}" = "xyes" ; then
  cflags="${cflags} "
fi

# - Freetype
have_freetype="no"
feature_list="${feature_list} freetype[${have_freetype}]"

# - HDF5
have_hdf5="no"
feature_list="${feature_list} hdf5[${have_hdf5}]"

# - G3toG4
have_g3tog4="no"
feature_list="${feature_list} g3tog4[${have_g3tog4}]"

if test "x${have_g3tog4}" = "xyes" ; then
  libs="-lG3toG4 ${libs}"
fi

# - Qt
have_qt="yes"
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  -I/opt/local/libexec/qt5/lib/QtCore.framework -I/opt/local/libexec/qt5/lib/QtCore.framework/Headers -I/opt/local/libexec/qt5/.//mkspecs/macx-clang -I/opt/local/libexec/qt5/lib/QtGui.framework -I/opt/local/libexec/qt5/lib/QtGui.framework/Headers -I/Library/Developer/CommandLineTools/SDKs/MacOSX11.sdk/System/Library/Frameworks/OpenGL.framework/Headers -I/opt/local/libexec/qt5/lib/QtWidgets.framework -I/opt/local/libexec/qt5/lib/QtWidgets.framework/Headers -I/opt/local/libexec/qt5/lib/QtOpenGL.framework -I/opt/local/libexec/qt5/lib/QtOpenGL.framework/Headers -I/opt/local/libexec/qt5/lib/QtPrintSupport.framework -I/opt/local/libexec/qt5/lib/QtPrintSupport.framework/Headers"

  geant4_uses_opengl="yes"
fi

# - Motif
have_motif="no"
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="no"
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="no"
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="no"
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  ${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="https://cern.ch/geant4-data/datasets"
dataset_timeout="1500"
dataset_list=$(awk 'BEGIN { n = split( "G4NDL|G4NEUTRONHPDATA|/opt/local/share/Geant4/Data/Geant4.10.6/G4NDL4.6|G4NDL.4.6.tar.gz|d07e43499f607e01f2c1ce06d7a09f3e;G4EMLOW|G4LEDATA|/opt/local/share/Geant4/Data/Geant4.10.6/G4EMLOW7.9.1|G4EMLOW.7.9.1.tar.gz|1308dc5d73b5539557e2ec6b96f7e5ef;PhotonEvaporation|G4LEVELGAMMADATA|/opt/local/share/Geant4/Data/Geant4.10.6/PhotonEvaporation5.5|G4PhotonEvaporation.5.5.tar.gz|707514c864414089af9671db0f656e35;RadioactiveDecay|G4RADIOACTIVEDATA|/opt/local/share/Geant4/Data/Geant4.10.6/RadioactiveDecay5.4|G4RadioactiveDecay.5.4.tar.gz|08abe2bcc0bcd1ac4bbe09f5ae69cdbe;G4PARTICLEXS|G4PARTICLEXSDATA|/opt/local/share/Geant4/Data/Geant4.10.6/G4PARTICLEXS2.1|G4PARTICLEXS.2.1.tar.gz|24a68bb627a95629e2edcd098131d6b3;G4PII|G4PIIDATA|/opt/local/share/Geant4/Data/Geant4.10.6/G4PII1.3|G4PII.1.3.tar.gz|05f2471dbcdf1a2b17cbff84e8e83b37;RealSurface|G4REALSURFACEDATA|/opt/local/share/Geant4/Data/Geant4.10.6/RealSurface2.1.1|G4RealSurface.2.1.1.tar.gz|1d0fcc24c7082edae1e22a3d43fbb4d9;G4SAIDDATA|G4SAIDXSDATA|/opt/local/share/Geant4/Data/Geant4.10.6/G4SAIDDATA2.0|G4SAIDDATA.2.0.tar.gz|d5d4e9541120c274aeed038c621d39da;G4ABLA|G4ABLADATA|/opt/local/share/Geant4/Data/Geant4.10.6/G4ABLA3.1|G4ABLA.3.1.tar.gz|180f1f5d937733b207f8d5677f76296e;G4INCL|G4INCLDATA|/opt/local/share/Geant4/Data/Geant4.10.6/G4INCL1.0|G4INCL.1.0.tar.gz|85fe937b6df46d41814f07175d3f5b51;G4ENSDFSTATE|G4ENSDFSTATEDATA|/opt/local/share/Geant4/Data/Geant4.10.6/G4ENSDFSTATE2.2|G4ENSDFSTATE.2.2.tar.gz|495439cf600225753d7bd99825e5c6bc", 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} -L -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}
          ;;
        smartstack)
          echo ${have_smartstack}
          ;;
        clhep)
          echo ${have_clhep}
          ;;
        expat)
          echo ${have_expat}
          ;;
        zlib)
          echo ${have_zlib}
          ;;
        gdml)
          echo ${have_gdml}
          ;;
        usolids)
          echo ${have_usolids}
          ;;
        freetype)
          echo ${have_freetype}
          ;;
        hdf5)
          echo ${have_hdf5}
          ;;
        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
