diff --git a/CMakeLists.txt b/CMakeLists.txt index 518baf442fc0a576a2d237ca1939f062366868da..db1a9ac10f9ca84510dfab249b5fa87b3c0d4fd1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,6 +59,12 @@ IF(${CMAKE_CXX_STANDARD} LESS 14) MESSAGE(FATAL_ERROR "DD4hep requires at least CXX Standard 14 to compile") ENDIF() +# ----for APPLE scripts have to set the DYLD_LIBRARY_PATH +if(APPLE) + set(USE_DYLD 1) + set(CMAKE_MACOSX_RPATH 1) +endif() + ############################### # Define DD4hep build options # ############################### diff --git a/cmake/thisdd4hep.sh b/cmake/thisdd4hep.sh index 2172d81e85211fd80397d7b2c9f5c48847f880d6..f303868c4bb820cc2fd24b08858b46bad953ee2d 100644 --- a/cmake/thisdd4hep.sh +++ b/cmake/thisdd4hep.sh @@ -27,40 +27,36 @@ dd4hep_parse_this() { thisroot=$(dirname ${SOURCE}) THIS=$(cd ${thisroot}/.. > /dev/null;pwd); export THIS fi + unset SOURCE package thisroot } #----------------------------------------------------------------------------- dd4hep_add_path() { - path_name=${1}; - path_prefix=${2}; - eval path_value=\$$path_name; + path_name=${1} + path_prefix=${2} + eval path_value=\$$path_name if [ "${path_value}" ]; then - path_value=${path_prefix}:"${path_value}"; + # Prevent duplicates + if ! echo ${path_value} | tr : '\n' | grep -q "^${path_prefix}$"; then + path_value="${path_prefix}:${path_value}" + fi else - path_value=${path_prefix}; + path_value="${path_prefix}" fi; - eval export ${path_name}="${path_value}"; + eval export ${path_name}='${path_value}' + unset path_name path_prefix path_value } #----------------------------------------------------------------------------- dd4hep_add_library_path() { - path_prefix=${1}; - if [ @APPLE@ ]; - then - if [ ${DYLD_LIBRARY_PATH} ]; then - export DYLD_LIBRARY_PATH=${path_prefix}:$DYLD_LIBRARY_PATH; - export LD_LIBRARY_PATH=${path_prefix}:$LD_LIBRARY_PATH; - export DD4HEP_LIBRARY_PATH=${path_prefix}:$DD4HEP_LIBRARY_PATH; - else - export DYLD_LIBRARY_PATH=${path_prefix}; - export LD_LIBRARY_PATH=${path_prefix}; - export DD4HEP_LIBRARY_PATH=${path_prefix}; - fi; + p=${1}; + if [ @APPLE@ ]; then + # Do not prepend system library locations on macOS. Stuff will break. + [[ "$p" = "/usr/lib" || "$p" = "/usr/local/lib" ]] && unset p && return + dd4hep_add_path DYLD_LIBRARY_PATH "$p" + dd4hep_add_path DD4HEP_LIBRARY_PATH "$p" else - if [ ${LD_LIBRARY_PATH} ]; then - export LD_LIBRARY_PATH=${path_prefix}:$LD_LIBRARY_PATH; - else - export LD_LIBRARY_PATH=${path_prefix}; - fi; - fi; + dd4hep_add_path LD_LIBRARY_PATH "$p" + fi + unset p } #----------------------------------------------------------------------------- # @@ -131,4 +127,5 @@ fi; # unset ROOTENV_INIT; unset THIS; +unset SOURCE; #----------------------------------------------------------------------------- diff --git a/cmake/thisdd4hep_only.sh b/cmake/thisdd4hep_only.sh index 844bb8f0ac7a9593748f50b7c85c97242844f564..a3f79bd11623d2e9347bf1b379ade33f0fb66e43 100644 --- a/cmake/thisdd4hep_only.sh +++ b/cmake/thisdd4hep_only.sh @@ -12,53 +12,62 @@ # #----------------------------------------------------------------------------- dd4hep_parse_this() { + SOURCE=${1} package=${2}; - if [ "x${1}" = "x" ]; then - if [ ! -f bin/this${package}_only.sh ]; then - echo ERROR: must "cd where/${package}/is" before calling ". bin/this${package}_only.sh" for this version of bash!; - return 1; - fi - THIS="${PWD}"; + if [ "x${SOURCE}" = "x" ]; then + if [ -f bin/this${package}_only.sh ]; then + THIS="$PWD"; export THIS + elif [ -f ./this${package}_only.sh ]; then + THIS=$(cd .. > /dev/null; pwd); export THIS + else + echo ERROR: must "cd where/${package}/is" before calling ". bin/this${package}_only.sh" for this version of bash! + THIS=; export THIS + return 1 + fi else - THIS=$(dirname $(dirname ${1})); - fi; - THIS=$(cd ${THIS} > /dev/null; pwd); + # get param to "." + thisroot=$(dirname ${SOURCE}) + THIS=$(cd ${thisroot}/.. > /dev/null;pwd); export THIS + fi + unset SOURCE package thisroot } #----------------------------------------------------------------------------- dd4hep_add_path() { - path_name=${1}; - path_prefix=${2}; - eval path_value=\$$path_name; - if [ ${path_value} ]; then - path_value=${path_prefix}:${path_value}; + path_name=${1} + path_prefix=${2} + eval path_value=\$$path_name + if [ "${path_value}" ]; then + # Prevent duplicates + if ! echo ${path_value} | tr : '\n' | grep -q "^${path_prefix}$"; then + path_value="${path_prefix}:${path_value}" + fi else - path_value=${path_prefix}; - fi; - eval export ${path_name}=${path_value}; + path_value="${path_prefix}" + fi; + eval export ${path_name}='${path_value}' + unset path_name path_prefix path_value } #----------------------------------------------------------------------------- dd4hep_add_library_path() { - path_prefix=${1}; - if [ @USE_DYLD@ ]; - then - if [ ${DYLD_LIBRARY_PATH} ]; then - export DYLD_LIBRARY_PATH=${path_prefix}:$DYLD_LIBRARY_PATH; - export DD4HEP_LIBRARY_PATH=${path_prefix}:$DD4HEP_LIBRARY_PATH; - else - export DYLD_LIBRARY_PATH=${path_prefix}; - export DD4HEP_LIBRARY_PATH=${path_prefix}; - fi; + p=${1}; + if [ @APPLE@ ]; then + # Do not prepend system library locations on macOS. Stuff will break. + [[ "$p" = "/usr/lib" || "$p" = "/usr/local/lib" ]] && unset p && return + dd4hep_add_path DYLD_LIBRARY_PATH "$p" + dd4hep_add_path DD4HEP_LIBRARY_PATH "$p" else - if [ ${LD_LIBRARY_PATH} ]; then - export LD_LIBRARY_PATH=${path_prefix}:$LD_LIBRARY_PATH; - else - export LD_LIBRARY_PATH=${path_prefix}; - fi; - fi; + dd4hep_add_path LD_LIBRARY_PATH "$p" + fi + unset p } #----------------------------------------------------------------------------- # -dd4hep_parse_this ${BASH_ARGV[0]} DD4hep; +SOURCE=${BASH_ARGV[0]} +if [ "x$SOURCE" = "x" ]; then + SOURCE=${(%):-%N} # for zsh +fi + +dd4hep_parse_this $SOURCE dd4hep; # #----DD4hep installation directory-------------------------------------------- export DD4hepINSTALL=${THIS}; @@ -83,4 +92,5 @@ fi; #----------------------------------------------------------------------------- # unset THIS; +unset SOURCE; #-----------------------------------------------------------------------------