Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
209 changes: 30 additions & 179 deletions roottest/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,31 +1,5 @@
cmake_minimum_required(VERSION 3.20 FATAL_ERROR)

project(roottest)

# If no explicit ROOTSYS is set, use ${ROOTSYS} environment variable to search
# for ROOT. This may be set by sourcing thisroot.sh from an installation.
if(NOT DEFINED ROOTSYS AND DEFINED ENV{ROOTSYS})
cmake_path(CONVERT "$ENV{ROOTSYS}" TO_CMAKE_PATH_LIST ROOTSYS)
list(INSERT CMAKE_PREFIX_PATH 0 ${ROOTSYS})
endif()

# Use ${ROOTSYS} CMake variable to search for ROOT. This is set when roottest is
# built as part of ROOT, i.e., when ROOT is configured with -Droottest=ON. It
# may also be set by passing -DROOTSYS=<PATH> to CMake when configuring a
# standalone roottest against an installation of ROOT. If this is set, it takes
# precedence over the environment to ensure that when roottest is being built in
# a ROOT build configured with -Droottest=ON, it will find the ROOT being built,
# and not a ROOT installation sourced with thisroot.sh or found in $PATH.
if(DEFINED ROOTSYS)
list(INSERT CMAKE_PREFIX_PATH 0 ${ROOTSYS})
endif()

find_package(ROOT REQUIRED CONFIG)

if(NOT DEFINED Python3_EXECUTABLE)
find_package(Python3 ${ROOT_PYTHON_VERSION} REQUIRED QUIET COMPONENTS Interpreter)
endif()

if(MSVC)
set(CMAKE_SKIP_TEST_ALL_DEPENDENCY TRUE)
set(CMAKE_SUPPRESS_REGENERATION TRUE)
Expand All @@ -49,72 +23,24 @@ if(MSVC)
if(NOT win_broken_tests)
set(WILLFAIL_ON_WIN32 WILLFAIL)
endif()
if (NOT Python3_EXECUTABLE)
find_package(PythonInterp)
endif()

if(DEFINED ROOT_SOURCE_DIR)
set(CMAKE_CXX_FLAGS ${ROOT_CXX_FLAGS})
# ROOT_BINDIR is set by ROOTConfig.cmake
set(ROOT_CONFIG_EXECUTABLE ${ROOT_BINDIR}/root-config.bat)
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--prefix" OUTPUT_VARIABLE ROOTSYS RESULT_VARIABLE RETVAR OUTPUT_STRIP_TRAILING_WHITESPACE)
cmake_path(CONVERT "${ROOTSYS}" TO_CMAKE_PATH_LIST ROOTSYS)
set(ROOTSYS ${ROOTSYS} CACHE INTERNAL "")
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--tutdir" OUTPUT_VARIABLE ROOT_TUTORIALS_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
cmake_path(CONVERT "${ROOT_TUTORIALS_DIR}" TO_CMAKE_PATH_LIST ROOT_TUTORIALS_DIR)
set(ROOT_root_CMD ${ROOTSYS}/bin/root.exe)
set(ROOT_hadd_CMD ${ROOTSYS}/bin/hadd.exe)
set(ROOT_genreflex_CMD ${ROOTSYS}/bin/genreflex.exe)
set(ROOT_rootcint_CMD ${ROOTSYS}/bin/rootcint.exe)
set(ROOT_rootcling_CMD ${ROOTSYS}/bin/rootcling.exe)
if(CMAKE_GENERATOR MATCHES Ninja)
set(ROOT_LIBRARIES Core RIO Net Hist Gpad Graf Tree Rint Matrix MathCore)
else()
set(ROOT_LIBRARIES libCore libRIO libNet libHist libGpad libGraf libTree libRint libMatrix libMathCore)
endif()
set(CMAKE_CXX_FLAGS ${ROOT_CXX_FLAGS})
# ROOT_BINDIR is set by ROOTConfig.cmake
set(ROOT_CONFIG_EXECUTABLE ${ROOT_BINDIR}/root-config.bat)
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--prefix" OUTPUT_VARIABLE ROOTSYS RESULT_VARIABLE RETVAR OUTPUT_STRIP_TRAILING_WHITESPACE)
cmake_path(CONVERT "${ROOTSYS}" TO_CMAKE_PATH_LIST ROOTSYS)
set(ROOTSYS ${ROOTSYS} CACHE INTERNAL "")
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--tutdir" OUTPUT_VARIABLE ROOT_TUTORIALS_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
cmake_path(CONVERT "${ROOT_TUTORIALS_DIR}" TO_CMAKE_PATH_LIST ROOT_TUTORIALS_DIR)
set(ROOT_root_CMD ${ROOTSYS}/bin/root.exe)
set(ROOT_hadd_CMD ${ROOTSYS}/bin/hadd.exe)
set(ROOT_genreflex_CMD ${ROOTSYS}/bin/genreflex.exe)
set(ROOT_rootcint_CMD ${ROOTSYS}/bin/rootcint.exe)
set(ROOT_rootcling_CMD ${ROOTSYS}/bin/rootcling.exe)
if(CMAKE_GENERATOR MATCHES Ninja)
set(ROOT_LIBRARIES Core RIO Net Hist Gpad Graf Tree Rint Matrix MathCore)
else()
include(${ROOT_USE_FILE})
set(ROOT_CONFIG_EXECUTABLE root-config.bat)
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--prefix" OUTPUT_VARIABLE ROOTSYS RESULT_VARIABLE RETVAR OUTPUT_STRIP_TRAILING_WHITESPACE)
cmake_path(CONVERT "${ROOTSYS}" TO_CMAKE_PATH_LIST ROOTSYS)
set(ROOTSYS ${ROOTSYS} CACHE INTERNAL "")
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--srcdir" OUTPUT_VARIABLE ROOT_SOURCE_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
cmake_path(CONVERT "${ROOT_SOURCE_DIR}" TO_CMAKE_PATH_LIST ROOT_SOURCE_DIR)
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--tutdir" OUTPUT_VARIABLE ROOT_TUTORIALS_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
cmake_path(CONVERT "${ROOT_TUTORIALS_DIR}" TO_CMAKE_PATH_LIST ROOT_TUTORIALS_DIR)
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--features" OUTPUT_VARIABLE ROOT_FEATURES RESULT_VARIABLE RETVAR OUTPUT_STRIP_TRAILING_WHITESPACE)
separate_arguments(ROOT_FEATURES)
foreach(item ${ROOT_FEATURES})
if("${item}" MATCHES "^cxx(.*)")
string(REGEX REPLACE "^cxx(.*)" "\\1" CXX_VERSION ${item})
set(CMAKE_CXX_STANDARD ${CXX_VERSION} CACHE INTERNAL "")
endif()
endforeach()
# Some roottest.git tests are checking LZ4 and ZSTD, which has different references depends on its version.
# We recover LZ4/ZSTD version used in ROOT, stored in root-config --config output.
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--config" OUTPUT_VARIABLE ROOT_CONFIG_VARIABLES RESULT_VARIABLE RETVAR OUTPUT_STRIP_TRAILING_WHITESPACE)
separate_arguments(ROOT_CONFIG_VARIABLES)
foreach(item ${ROOT_CONFIG_VARIABLES})
if("${item}" MATCHES "LZ4_VERSION=(.*)")
string(REGEX REPLACE "LZ4_VERSION=(.*)" "\\1" LZ4 ${item})
set(LZ4_VERSION ${LZ4} CACHE INTERNAL "")
elseif("${item}" MATCHES "ZSTD_VERSION=(.*)")
string(REGEX REPLACE "ZSTD_VERSION=(.*)" "\\1" ZSTD ${item})
set(ZSTD_VERSION ${ZSTD} CACHE INTERNAL "")
endif()
endforeach()
if(NOT LZ4_VERSION)
message(FATAL_ERROR "LZ4_VERSION not found in ${ROOTSYS}/bin/root-config.bat")
endif()
if(NOT ZSTD_VERSION)
message(FATAL_ERROR "ZSTD_VERSION not found in ${ROOTSYS}/bin/root-config.bat")
endif()
find_program(ROOT_root_CMD root.exe PATHS ${ROOTSYS}/bin)
find_program(ROOT_hadd_CMD hadd.exe PATHS ${ROOTSYS}/bin)
find_program(ROOT_genreflex_CMD genreflex.exe PATHS ${ROOTSYS}/bin)
find_program(ROOT_rootcint_CMD rootcint.exe PATHS ${ROOTSYS}/bin)
find_program(ROOT_rootcling_CMD rootcling.exe PATHS ${ROOTSYS}/bin)
enable_testing()
set(ROOT_LIBRARIES libCore libRIO libNet libHist libGpad libGraf libTree libRint libMatrix libMathCore)
endif()
else()

Expand All @@ -125,83 +51,23 @@ else()
# only for non-Windows platforms
set(OptionalMultiProc MultiProc)

# If ROOT_SOURCE_DIR is set, roottest is built as part of the root build.
# If ROOT_SOURCE_DIR is not set, search for an installation.
if(DEFINED ROOT_SOURCE_DIR)
# root-config --prefix helps to retrieve ROOTSYS env variable.
# ROOT_BINDIR is set by ROOTConfig.cmake
find_program(ROOT_CONFIG_EXECUTABLE root-config PATHS ${ROOT_BINDIR})
if(NOT ROOT_CONFIG_EXECUTABLE)
message(ERROR "root-config is not found, please rerun configuration step.")
endif()
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--prefix" OUTPUT_VARIABLE ROOTSYS RESULT_VARIABLE RETVAR OUTPUT_STRIP_TRAILING_WHITESPACE)
set(ROOTSYS ${ROOTSYS} CACHE INTERNAL "")
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--tutdir" OUTPUT_VARIABLE ROOT_TUTORIALS_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
set(ROOT_LIBRARIES Core RIO Net Hist Gpad Tree Rint Matrix MathCore)
set(ROOT_root_CMD ${ROOTSYS}/bin/root.exe)
set(ROOT_hadd_CMD ${ROOTSYS}/bin/hadd)
set(ROOT_genreflex_CMD ${ROOTSYS}/bin/genreflex)
set(ROOT_rootcint_CMD ${ROOTSYS}/bin/rootcint)
set(ROOT_rootcling_CMD rootcling)
else() # standalone roottest.git
include(${ROOT_USE_FILE})
# root-config --prefix helps to retrieve ROOTSYS env variable.
find_program(ROOT_CONFIG_EXECUTABLE root-config)
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--prefix" OUTPUT_VARIABLE ROOTSYS RESULT_VARIABLE RETVAR OUTPUT_STRIP_TRAILING_WHITESPACE)
set(ROOTSYS ${ROOTSYS} CACHE INTERNAL "")
# Some roottest.git tests are checking LZ4 and ZSTD, which has different references depends on its version.
# We recover LZ4/ZSTD version used in ROOT, stored in root-config --config output.
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--srcdir" OUTPUT_VARIABLE ROOT_SOURCE_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--tutdir" OUTPUT_VARIABLE ROOT_TUTORIALS_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--config" OUTPUT_VARIABLE ROOT_CONFIG_VARIABLES RESULT_VARIABLE RETVAR OUTPUT_STRIP_TRAILING_WHITESPACE)
separate_arguments(ROOT_CONFIG_VARIABLES)
foreach(item ${ROOT_CONFIG_VARIABLES})
if("${item}" MATCHES "LZ4_VERSION=(.*)")
string(REGEX REPLACE "LZ4_VERSION=(.*)" "\\1" LZ4 ${item})
set(LZ4_VERSION ${LZ4} CACHE INTERNAL "")
elseif("${item}" MATCHES "ZSTD_VERSION=(.*)")
string(REGEX REPLACE "ZSTD_VERSION=(.*)" "\\1" ZSTD ${item})
set(ZSTD_VERSION ${ZSTD} CACHE INTERNAL "")
endif()
endforeach()
# If we didn't manage to find LZ4_VERSION/ZSTD_VERSION in "root-config --config" output,
# we consider that ROOT had used system LZ4/ZSTD and we can find it via find_package().
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules ${ROOTSYS}/cmake/modules ${ROOT_SOURCE_DIR}/cmake/modules)
if(NOT LZ4_VERSION)
find_package(LZ4)
if(NOT LZ4_FOUND)
message(FATAL_ERROR "lz4 is required to be installed before running roottest.git")
endif()
endif()
if(NOT ZSTD_VERSION)
find_package(ZSTD)
if(NOT ZSTD_FOUND)
message(FATAL_ERROR "zstd is required to be installed before running roottest.git")
endif()
endif()
# To be able to use the same C++ standard as used in ROOT, we can try to retrieve it from root-config --features
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--features" OUTPUT_VARIABLE ROOT_FEATURES RESULT_VARIABLE RETVAR OUTPUT_STRIP_TRAILING_WHITESPACE)
separate_arguments(ROOT_FEATURES)
foreach(item ${ROOT_FEATURES})
if("${item}" MATCHES "^cxx(.*)")
string(REGEX REPLACE "^cxx(.*)" "\\1" CXX_VERSION ${item})
set(CMAKE_CXX_STANDARD ${CXX_VERSION} CACHE INTERNAL "")
endif()
endforeach()
find_program(ROOT_root_CMD root.exe PATHS ${ROOTSYS}/bin)
find_program(ROOT_hadd_CMD hadd PATHS ${ROOTSYS}/bin)
find_program(ROOT_genreflex_CMD genreflex PATHS ${ROOTSYS}/bin)
find_program(ROOT_rootcint_CMD rootcint PATHS ${ROOTSYS}/bin)
find_program(ROOT_rootcling_CMD rootcling PATHS ${ROOTSYS}/bin)
enable_testing()
# root-config --prefix helps to retrieve ROOTSYS env variable.
# ROOT_BINDIR is set by ROOTConfig.cmake
find_program(ROOT_CONFIG_EXECUTABLE root-config PATHS ${ROOT_BINDIR})
if(NOT ROOT_CONFIG_EXECUTABLE)
message(ERROR "root-config is not found, please rerun configuration step.")
endif()
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--prefix" OUTPUT_VARIABLE ROOTSYS RESULT_VARIABLE RETVAR OUTPUT_STRIP_TRAILING_WHITESPACE)
set(ROOTSYS ${ROOTSYS} CACHE INTERNAL "")
execute_process(COMMAND ${ROOT_CONFIG_EXECUTABLE} "--tutdir" OUTPUT_VARIABLE ROOT_TUTORIALS_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
set(ROOT_LIBRARIES Core RIO Net Hist Gpad Tree Rint Matrix MathCore)
set(ROOT_root_CMD ${ROOTSYS}/bin/root.exe)
set(ROOT_hadd_CMD ${ROOTSYS}/bin/hadd)
set(ROOT_genreflex_CMD ${ROOTSYS}/bin/genreflex)
set(ROOT_rootcint_CMD ${ROOTSYS}/bin/rootcint)
set(ROOT_rootcling_CMD rootcling)
endif()

# Synchronizing default compression algorithm used for ROOT.
# We need to have it for CMake settings for switching tests references.
# FIXME: it should be exported from ROOT build.
set(compression_default "zlib" CACHE STRING "" FORCE)

get_filename_component(ROOT_LIBRARY_DIR "${ROOTSYS}/lib" ABSOLUTE)

set(ref_suffix ".ref")
Expand Down Expand Up @@ -252,21 +118,6 @@ set(CMAKE_ROOTTEST_DICT ON)
# Set the CMake module path. Here are all the custom CMake modules.
set(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${ROOT_SOURCE_DIR}/roottest/cmake/modules")

# Find python.
if(ROOT_pyroot_FOUND)
if (NOT Python3_EXECUTABLE)
find_package(PythonInterp)
if(PYTHONINTERP_FOUND)
execute_process(COMMAND ${Python3_EXECUTABLE} -c "import sys;sys.stdout.write(sys.prefix)"
OUTPUT_VARIABLE PYTHON_PREFIX)
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${PYTHON_PREFIX})
endif()
if (NOT Python3_LIBRARIES)
find_package(PythonLibs)
endif()
endif()
endif()

#---Set flag for PyROOT tests that are expected to fail
if(ROOT_pyroot_FOUND)
set(PYTESTS_WILLFAIL WILLFAIL)
Expand Down
4 changes: 2 additions & 2 deletions roottest/root/dataframe/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ ROOTTEST_ADD_TEST(test_callables

ROOTTEST_GENERATE_EXECUTABLE(testIMT
testIMT.cxx
LIBRARIES ${DFLIBRARIES}
LIBRARIES ${DFLIBRARIES} GenVector
FIXTURES_SETUP root-dataframe-testIMT-fixture)

ROOTTEST_ADD_TEST(testIMT
Expand Down Expand Up @@ -217,7 +217,7 @@ ROOTTEST_ADD_TEST(typeguessing

ROOTTEST_GENERATE_EXECUTABLE(misc
test_misc.cxx
LIBRARIES ${DFLIBRARIES}
LIBRARIES ${DFLIBRARIES} GenVector
FIXTURES_SETUP root-dataframe-misc-fixture)

ROOTTEST_ADD_TEST(misc
Expand Down
2 changes: 2 additions & 0 deletions roottest/root/io/datamodelevolution/cms-00/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ ROOTTEST_GENERATE_REFLEX_DICTIONARY(libDataModelV1_dictrflx
SELECTION DataModelV1_selection.xml
LIBNAME libDataModelV1_dictrflx
NO_ROOTMAP
LIBRARIES Smatrix
FIXTURES_SETUP root-io-datamodelevolution-cms-00-libDataModelV1_dictrflx-fixture)

ROOTTEST_GENERATE_DICTIONARY(libDataModelV2_dictcint
Expand All @@ -40,6 +41,7 @@ ROOTTEST_GENERATE_REFLEX_DICTIONARY(libDataModelV2_dictrflx
SELECTION DataModelV2_selection.xml
LIBNAME libDataModelV2_dictrflx
NO_ROOTMAP
LIBRARIES Smatrix
FIXTURES_SETUP root-io-datamodelevolution-cms-00-libDataModelV2_dictrflx-fixture)

ROOTTEST_COMPILE_MACRO(test1.cxx
Expand Down
1 change: 1 addition & 0 deletions roottest/root/meta/iotypeioname/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
ROOTTEST_GENERATE_REFLEX_DICTIONARY(classes
classes.h
SELECTION classes_selection.xml
LIBRARIES GenVector
FIXTURES_SETUP root-meta-iotypeioname-dict-fixture)

ROOTTEST_ADD_TEST(ionameiotype
Expand Down
4 changes: 2 additions & 2 deletions roottest/root/multicore/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ endif()

ROOTTEST_GENERATE_EXECUTABLE(testSetAddress
testSetAddress.cpp
LIBRARIES Core MathCore RIO Tree
LIBRARIES Core MathCore RIO Tree GenVector Physics
FIXTURES_SETUP root-multicore-testSetAddress-fixture)

if(MSVC)
Expand Down Expand Up @@ -296,7 +296,7 @@ if(imt)

ROOTTEST_GENERATE_EXECUTABLE(tp_process_imt
tp_process_imt.cpp
LIBRARIES Core Imt Thread Tree TreePlayer
LIBRARIES Core Imt Thread Tree TreePlayer Physics
FIXTURES_SETUP root-multicore-tp_process_imt-fixture)

ROOTTEST_ADD_TEST(tp_process_imt
Expand Down
Loading