From 09c767acbb312f8de13b077db022984186f772c2 Mon Sep 17 00:00:00 2001 From: Vassil Vassilev <vvasilev@cern.ch> Date: Tue, 18 Oct 2016 10:18:29 +0200 Subject: [PATCH] Allow correct automatic relocatability of cling and ROOT. Patch by Roman Zulak <machtyrtle@gmail.com>! Patch tested and requested by Chris Green (ROOT-8379). --- .../cling/lib/Interpreter/CMakeLists.txt | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/interpreter/cling/lib/Interpreter/CMakeLists.txt b/interpreter/cling/lib/Interpreter/CMakeLists.txt index ad73c722f8c..dde620843f5 100644 --- a/interpreter/cling/lib/Interpreter/CMakeLists.txt +++ b/interpreter/cling/lib/Interpreter/CMakeLists.txt @@ -128,8 +128,9 @@ if (UNIX) if(NOT CLING_CXX_PATH) # Remove absolute path from CMAKE_CXX_COMPILER - get_filename_component(_name ${CMAKE_CXX_COMPILER} NAME) - get_filename_component(_path ${CMAKE_CXX_COMPILER} PATH) + get_filename_component(_real_cxx_compiler ${CMAKE_CXX_COMPILER} REALPATH) + get_filename_component(_name ${_real_cxx_compiler} NAME) + get_filename_component(_path ${_real_cxx_compiler} PATH) # This should probably be more general...but how? if(_name STREQUAL "ccache" OR _name STREQUAL "distcc") @@ -200,17 +201,28 @@ if (UNIX) get_filename_component(_path ${CMAKE_CXX_COMPILER} PATH) endif() - if("$ENV{PATH}" MATCHES ${_path}) - # This adds a lot of unneccessary flags, but may be useful if we're missing something - #set(CLING_CXX_RLTV "${_name} ${CMAKE_CXX_FLAGS}") - set(CLING_CXX_RLTV ${_name}) - elseif(NOT CLING_CXX_PATH) + # Test if path compiler is on PATH. + string(REPLACE ":" ";" _pathlist $ENV{PATH}) + foreach (_pathcomp ${_pathlist}) + get_filename_component(_pathcomp ${_pathcomp} REALPATH) + if (_path STREQUAL _pathcomp) + # This adds a lot of unneccessary flags, but may be useful if there's + # a flag that should be passed to cling. + set(CLING_CXX_RLTV ${_name}) + break() + endif() + endforeach() + + # FIXME: Perhaps CLING_CXX_RLTV should have a better name? + if(NOT CLING_CXX_RLTV AND NOT CLING_CXX_PATH) + # We got nothing, just use whatever CMake is using. set(CLING_CXX_PATH ${CMAKE_CXX_COMPILER}) endif() # If CMAKE_CXX_FLAGS contains --gcc-toolchain= then that should be passed on string(FIND "${CMAKE_CXX_FLAGS}" "--gcc-toolchain=" cling_gcc_toolchain) if ("${cling_gcc_toolchain}" GREATER -1) + # TODO Refactor these two into common function if (CLING_CXX_PATH) string(FIND "${CLING_CXX_PATH}" "--gcc-toolchain=" cling_gcc_toolchain) if ("${cling_gcc_toolchain}" EQUAL -1) -- GitLab