From e7aeea7989625523259d99908cf63b68ffb03a23 Mon Sep 17 00:00:00 2001 From: Philippe Canal Date: Wed, 5 Mar 2025 21:11:11 +0000 Subject: [PATCH 1/4] build: Fix removal of ROOTSYS from CMAKE_PREFIX_PATH. Current code was, if CMAKE_PREFIX_PATH had more than one element, essentially inadvertently replacing ROOTSYS by the current path. --- CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6f8fda49990b0..1e6b0682ea0b1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,7 +61,11 @@ if(NOT $ENV{ROOTSYS} STREQUAL "") string(REPLACE "$ENV{ROOTSYS}/bin" "" ENV_PATH "$ENV{PATH}") string(REPLACE "$ENV{ROOTSYS}/lib" "" ENV_LD_LIBRARY_PATH "$ENV{LD_LIBRARY_PATH}") string(REPLACE "$ENV{ROOTSYS}/lib" "" ENV_PYTHONPATH "$ENV{PYTHONPATH}") - string(REPLACE "$ENV{ROOTSYS}" "" ENV_CMAKE_PREFIX_PATH "$ENV{CMAKE_PREFIX_PATH}") + # if we leave the ':' it will result in an empty entry in the CMAKE_PREFIX_PATH + # which will interpreted as the current directory. + string(REPLACE "$ENV{ROOTSYS}:" "" ENV_CMAKE_PREFIX_PATH "$ENV{CMAKE_PREFIX_PATH}") + string(REPLACE ":$ENV{ROOTSYS}" "" ENV_CMAKE_PREFIX_PATH "${ENV_CMAKE_PREFIX_PATH}") + string(REPLACE "$ENV{ROOTSYS}" "" ENV_CMAKE_PREFIX_PATH "${ENV_CMAKE_PREFIX_PATH}") set(ENV{PATH} "${ENV_PATH}") set(ENV{LD_LIBRARY_PATH} "${ENV_LD_LIBRARY_PATH}") set(ENV{PYTHONPATH} "${ENV_PYTHONPATH}") From 72e5f757340bd5596ae8e0fbd874b3aee55485d9 Mon Sep 17 00:00:00 2001 From: Philippe Canal Date: Wed, 5 Mar 2025 21:14:10 +0000 Subject: [PATCH 2/4] build: Fix find_package disabling for zstd. LLVM uses the lower case spelling for 'zstd' and thus find_package was still being called. --- cmake/modules/SearchInstalledSoftware.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/modules/SearchInstalledSoftware.cmake b/cmake/modules/SearchInstalledSoftware.cmake index c67db478abbf9..966975898589c 100644 --- a/cmake/modules/SearchInstalledSoftware.cmake +++ b/cmake/modules/SearchInstalledSoftware.cmake @@ -386,6 +386,7 @@ if(NOT builtin_zstd) endif() if(builtin_zstd) + list(APPEND ROOT_BUILTINS zstd) list(APPEND ROOT_BUILTINS ZSTD) add_subdirectory(builtins/zstd) endif() From 25e1904a8053bb983ec5e0de2fad7ee67cc31345 Mon Sep 17 00:00:00 2001 From: Philippe Canal Date: Mon, 10 Mar 2025 15:41:30 +0000 Subject: [PATCH 3/4] build: Consistently remove path related to ROOTSYS. In particular only remove full match. This fixes: https://its.cern.ch/jira/browse/ROOT-10537 which saw: ``` ...:${ROOTSYS}/lib:${ROOTSYS}/lib64:... ``` being replaced by: ``` ...::64:... ``` being replaced by: --- CMakeLists.txt | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e6b0682ea0b1..c89075ede549a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,18 +58,22 @@ set(DIR_PERMISSIONS DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE G # ROOT build. This is significant e,g. for roottest, which will otherwise have libraries # of a different ROOT build available / visible / reachable. if(NOT $ENV{ROOTSYS} STREQUAL "") - string(REPLACE "$ENV{ROOTSYS}/bin" "" ENV_PATH "$ENV{PATH}") - string(REPLACE "$ENV{ROOTSYS}/lib" "" ENV_LD_LIBRARY_PATH "$ENV{LD_LIBRARY_PATH}") - string(REPLACE "$ENV{ROOTSYS}/lib" "" ENV_PYTHONPATH "$ENV{PYTHONPATH}") + function(strip_path ENV_VAR _path) + string(REPLACE ":${_path}:" ":" _temp_envvar "${_temp_envvar}") + string(REGEX REPLACE "^${_path}:" "" _temp_envvar "$ENV{${ENV_VAR}}") + string(REGEX REPLACE ":${_path}$" "" _temp_envvar "${_temp_envvar}") + if ("${_temp_envvar}" STREQUAL "${_path}") + set(ENV{ENV_VAR} "") + else() + set(ENV{ENV_VAR} "${_temp_envvar}") + endif() + endfunction() + strip_path("PATH" "$ENV{ROOTSYS}/bin") + strip_path("LD_LIBRARY_PATH" "$ENV{ROOTSYS}/lib") + strip_path("PYTHONPATH" "$ENV{ROOTSYS}/lib") # if we leave the ':' it will result in an empty entry in the CMAKE_PREFIX_PATH # which will interpreted as the current directory. - string(REPLACE "$ENV{ROOTSYS}:" "" ENV_CMAKE_PREFIX_PATH "$ENV{CMAKE_PREFIX_PATH}") - string(REPLACE ":$ENV{ROOTSYS}" "" ENV_CMAKE_PREFIX_PATH "${ENV_CMAKE_PREFIX_PATH}") - string(REPLACE "$ENV{ROOTSYS}" "" ENV_CMAKE_PREFIX_PATH "${ENV_CMAKE_PREFIX_PATH}") - set(ENV{PATH} "${ENV_PATH}") - set(ENV{LD_LIBRARY_PATH} "${ENV_LD_LIBRARY_PATH}") - set(ENV{PYTHONPATH} "${ENV_PYTHONPATH}") - set(ENV{CMAKE_PREFIX_PATH} "${ENV_CMAKE_PREFIX_PATH}") + strip_path("CMAKE_PREFIX_PATH" "$ENV{ROOTSYS}") set(ENV{ROOTSYS} ${CMAKE_BINARY_DIR}) endif() From 12e984c18ad451953c628f3ff685495117787cf4 Mon Sep 17 00:00:00 2001 From: Philippe Canal Date: Mon, 10 Mar 2025 18:11:52 +0000 Subject: [PATCH 4/4] build: ROOTSYS strip, right var, remove spurrious quotes --- CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c89075ede549a..772f4aadc7310 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,10 +59,10 @@ set(DIR_PERMISSIONS DIRECTORY_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE G # of a different ROOT build available / visible / reachable. if(NOT $ENV{ROOTSYS} STREQUAL "") function(strip_path ENV_VAR _path) - string(REPLACE ":${_path}:" ":" _temp_envvar "${_temp_envvar}") - string(REGEX REPLACE "^${_path}:" "" _temp_envvar "$ENV{${ENV_VAR}}") - string(REGEX REPLACE ":${_path}$" "" _temp_envvar "${_temp_envvar}") - if ("${_temp_envvar}" STREQUAL "${_path}") + string(REPLACE ":${_path}:" ":" _temp_envvar $ENV{${ENV_VAR}}) + string(REGEX REPLACE "^${_path}:" "" _temp_envvar ${_temp_envvar}) + string(REGEX REPLACE ":${_path}$" "" _temp_envvar ${_temp_envvar}) + if (_temp_envvar STREQUAL _path) set(ENV{ENV_VAR} "") else() set(ENV{ENV_VAR} "${_temp_envvar}")