From 858754c6dd86f0f40634c16219fef3b21b2b0243 Mon Sep 17 00:00:00 2001 From: Oksana Shadura Date: Fri, 4 Jun 2021 11:20:35 +0200 Subject: [PATCH 1/7] Update minimal CMake version in favour of advances features it offers --- CMakeLists.txt | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ac6efba6ab539..af3c1c5086dad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,15 +4,7 @@ # For the licensing terms see $ROOTSYS/LICENSE. # For the list of contributors see $ROOTSYS/README/CREDITS. -if(MSVC) - # required for the following feature & bug fix: - # 3.15: Added $ generator expression - # 3.16: Bug fix with CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS: the auto-generated exports - # are now updated only when the object files providing the symbols are updated - cmake_minimum_required(VERSION 3.16 FATAL_ERROR) -else() - cmake_minimum_required(VERSION 3.9 FATAL_ERROR) -endif() +cmake_minimum_required(VERSION 3.16 FATAL_ERROR) if(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) message(FATAL_ERROR @@ -649,11 +641,7 @@ if(testing) endif() endif() -if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.10.0") - cmake_host_system_information(RESULT PROCESSOR QUERY PROCESSOR_DESCRIPTION) -else() - set(PROCESSOR ${CMAKE_HOST_SYSTEM_PROCESSOR}) -endif() +cmake_host_system_information(RESULT PROCESSOR QUERY PROCESSOR_DESCRIPTION) message(STATUS "ROOT Configuration \n System ${CMAKE_SYSTEM} From d2caabf64803f030d8c7a9879d2ebacac44773c0 Mon Sep 17 00:00:00 2001 From: Oksana Shadura Date: Fri, 4 Jun 2021 11:53:55 +0200 Subject: [PATCH 2/7] Remove workaround for FindDoxygen (cmake < 3.13) --- math/minuit2/doc/CMakeLists.txt | 70 ++++++++++++--------------------- 1 file changed, 26 insertions(+), 44 deletions(-) diff --git a/math/minuit2/doc/CMakeLists.txt b/math/minuit2/doc/CMakeLists.txt index b00badf21225c..3169c4e866021 100644 --- a/math/minuit2/doc/CMakeLists.txt +++ b/math/minuit2/doc/CMakeLists.txt @@ -11,49 +11,31 @@ set_package_properties(Doxygen PROPERTIES TYPE OPTIONAL PURPOSE "Requires CMake 3.9, adds docs target") -# Note that CMake 3.9+ provides a much more powerful and idiomatic FindDoxygen -# On the older version, generating the main page is difficult. -if(CMAKE_VERSION VERSION_LESS 3.9) - # Provide nice warning to user about docs target - find_package(Doxygen) - if(DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND) - message(WARNING "Docs not supported on CMake < 3.9") - else() - message(WARNING "Docs not supported on CMake < 3.9, and Doxygen not found") - endif() +find_package(Doxygen OPTIONAL_COMPONENTS dot) + +# Only add docs target if Doxygen present +if(TARGET Doxygen::doxygen AND TARGET Doxygen::dot) + # Setting DOXYGEN settings + set(DOXYGEN_GENERATE_LATEX YES) + set(DOXYGEN_SOURCE_BROWSER YES) + set(DOXYGEN_EXTRACT_ALL YES) + set(DOXYGEN EXTRACT_PRIVATE YES) + set(DOXYGEN_EXTRACT_STATIC YES) + + get_target_property(MATH_SOURCES Minuit2Math SOURCES) + get_target_property(MINUIT2_SOURCES Minuit2 SOURCES) + + file(READ Minuit2.md MINUIT2_MAINPAGE) + string(REPLACE "\\page Minuit2Page" "\\mainpage" MINUIT2_MAINPAGE "${MINUIT2_MAINPAGE}") + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/index.md" "${MINUIT2_MAINPAGE}") + + # Actually add the docs target + doxygen_add_docs(docs + "${CMAKE_CURRENT_BINARY_DIR}/index.md" + ${MATH_SOURCES} + ${MINUIT2_SOURCES} + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.." + ) else() - # Policy needs to be set to use the new version of FindDoxygen - # when the main minimum required CMake is < 3.3 - cmake_policy(SET CMP0057 NEW) - - find_package(Doxygen OPTIONAL_COMPONENTS dot) - - # Only add docs target if Doxygen present - if(TARGET Doxygen::doxygen AND TARGET Doxygen::dot) - - # Setting DOXYGEN settings - set(DOXYGEN_GENERATE_LATEX YES) - set(DOXYGEN_SOURCE_BROWSER YES) - set(DOXYGEN_EXTRACT_ALL YES) - set(DOXYGEN EXTRACT_PRIVATE YES) - set(DOXYGEN_EXTRACT_STATIC YES) - - get_target_property(MATH_SOURCES Minuit2Math SOURCES) - get_target_property(MINUIT2_SOURCES Minuit2 SOURCES) - - file(READ Minuit2.md MINUIT2_MAINPAGE) - string(REPLACE "\\page Minuit2Page" "\\mainpage" MINUIT2_MAINPAGE "${MINUIT2_MAINPAGE}") - file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/index.md" "${MINUIT2_MAINPAGE}") - - # Actually add the docs target - doxygen_add_docs(docs - "${CMAKE_CURRENT_BINARY_DIR}/index.md" - ${MATH_SOURCES} - ${MINUIT2_SOURCES} - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.." - ) - else() - message(STATUS "Doxygen and/or Dot not found, not adding docs target") - endif() - + message(STATUS "Doxygen and/or Dot not found, not adding docs target") endif() From 5c2fa7e11057f895820fdd4e300efed62a1799de Mon Sep 17 00:00:00 2001 From: Oksana Shadura Date: Fri, 4 Jun 2021 11:56:07 +0200 Subject: [PATCH 3/7] Remnove workaround for cmake < 3.14 to able to report issue directly to stdout --- interpreter/cling/tools/plugins/clad/CMakeLists.txt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/interpreter/cling/tools/plugins/clad/CMakeLists.txt b/interpreter/cling/tools/plugins/clad/CMakeLists.txt index 0237b4a0f6b9c..b86510f165fc9 100644 --- a/interpreter/cling/tools/plugins/clad/CMakeLists.txt +++ b/interpreter/cling/tools/plugins/clad/CMakeLists.txt @@ -61,10 +61,7 @@ set(_clad_cmake_logging_settings LOG_INSTALL ON ) -# Newer CMake can report the issue with Clad directly to stdout -if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.14) - list(APPEND _clad_cmake_logging_settings LOG_OUTPUT_ON_FAILURE ON) -endif() +list(APPEND _clad_cmake_logging_settings LOG_OUTPUT_ON_FAILURE ON) ExternalProject_Add( clad From dde2a1b68635b6562828c94be3e510d9da4dbcec Mon Sep 17 00:00:00 2001 From: Oksana Shadura Date: Fri, 4 Jun 2021 11:58:19 +0200 Subject: [PATCH 4/7] Remove workaround for CMake < 3.14 when Ninja 1.9.0 builds static libraries twice --- cmake/modules/SetUpMacOS.cmake | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/cmake/modules/SetUpMacOS.cmake b/cmake/modules/SetUpMacOS.cmake index cb73a39c7232b..482b3fffca887 100644 --- a/cmake/modules/SetUpMacOS.cmake +++ b/cmake/modules/SetUpMacOS.cmake @@ -7,26 +7,6 @@ set(ROOT_ARCHITECTURE macosx) set(ROOT_PLATFORM macosx) -# https://gitlab.kitware.com/cmake/cmake/issues/19222 -if(CMAKE_VERSION VERSION_LESS 3.14.4) - if(CMAKE_GENERATOR STREQUAL "Ninja") - find_program(NINJAPROG ninja DOC "looking for Ninja to be used") - if (NINJAPROG) - execute_process(COMMAND ${NINJAPROG} --version - OUTPUT_VARIABLE NINJAVERSION - OUTPUT_STRIP_TRAILING_WHITESPACE - RESULT_VARIABLE NINJAVERSIONRES) - if(${NINJAVERSIONRES} EQ 0) - if(${NINJAVERSION} VERSION_GREATER 1.8.2) - message(WARNING "You have hit https://gitlab.kitware.com/cmake/cmake/issues/19222\n" - "Your build will be indeterministic, i.e. unreliable for incremental builds." - "To fix this, please install CMake >= 3.14.4!") - endif() - endif() - endif() - endif() -endif() - if (CMAKE_SYSTEM_NAME MATCHES Darwin) EXECUTE_PROCESS(COMMAND sw_vers "-productVersion" COMMAND cut -d . -f 1-2 From 2b4a98f73403ee3f5a8d4ea909e0e3e4a0d6e1af Mon Sep 17 00:00:00 2001 From: Oksana Shadura Date: Fri, 4 Jun 2021 12:07:30 +0200 Subject: [PATCH 5/7] Remove other CMake hack from multi-python ROOT builds --- cmake/modules/RootConfiguration.cmake | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/cmake/modules/RootConfiguration.cmake b/cmake/modules/RootConfiguration.cmake index f318536c84c23..48313177c9963 100644 --- a/cmake/modules/RootConfiguration.cmake +++ b/cmake/modules/RootConfiguration.cmake @@ -274,13 +274,8 @@ set(gvizcflags) set(buildpython ${value${pyroot}}) set(pythonlibdir ${PYTHON_LIBRARY_DIR}) -if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.14) - set(pythonlib ${PYTHON_LIBRARIES}) - set(pythonincdir ${PYTHON_INCLUDE_DIRS}) -else() - set(pythonlib ${PYTHON_LIBRARY}) - set(pythonincdir ${PYTHON_INCLUDE_DIR}) -endif() +set(pythonlib ${PYTHON_LIBRARIES}) +set(pythonincdir ${PYTHON_INCLUDE_DIRS}) set(pythonlibflags) set(buildxml ${value${xml}}) From 445c4fbf71b67e4cb05189689648304365637779 Mon Sep 17 00:00:00 2001 From: Oksana Shadura Date: Fri, 4 Jun 2021 12:10:47 +0200 Subject: [PATCH 6/7] We are using 3.16 as a min CMake version and REGEX is definitely available in this version --- cmake/modules/RootTestDriver.cmake | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/cmake/modules/RootTestDriver.cmake b/cmake/modules/RootTestDriver.cmake index 431c3efe4ff37..65e7edd57cebc 100644 --- a/cmake/modules/RootTestDriver.cmake +++ b/cmake/modules/RootTestDriver.cmake @@ -168,17 +168,7 @@ if(CMD) # Filter messages in stderr that are expected string(STRIP "${_errvar0}" _errvar0) string(REPLACE "\n" ";" _lines "${_errvar0}") - if(CMAKE_VERSION VERSION_GREATER 3.6) - list(FILTER _lines EXCLUDE REGEX "^Info in <.+::ACLiC>: creating shared library.+") - else() - set(__lines) - foreach(_line ${_lines}) - if(NOT _line MATCHES "^Info in <.+::ACLiC>: creating shared library.+") - list(APPEND __lines "${_line}") - endif() - endforeach() - set(_lines ${__lines}) - endif() + list(FILTER _lines EXCLUDE REGEX "^Info in <.+::ACLiC>: creating shared library.+") string(REPLACE ";" "\n" _errvar0 "${_lines}") if(_errvar0) message(FATAL_ERROR "Unexpected error output") From 186a2f0c02c9f2daae3dcf672c640d96888d7eed Mon Sep 17 00:00:00 2001 From: Oksana Shadura Date: Tue, 29 Jun 2021 14:11:29 +0200 Subject: [PATCH 7/7] Remove code used to search Python2/Python3 with <= CMake 3.14 --- cmake/modules/SearchRootCoreDeps.cmake | 295 +++++++++++-------------- 1 file changed, 130 insertions(+), 165 deletions(-) diff --git a/cmake/modules/SearchRootCoreDeps.cmake b/cmake/modules/SearchRootCoreDeps.cmake index 98b318651d7af..b26c36ef261e1 100644 --- a/cmake/modules/SearchRootCoreDeps.cmake +++ b/cmake/modules/SearchRootCoreDeps.cmake @@ -70,187 +70,152 @@ set(Python_FIND_FRAMEWORK LAST) set(Python2_FIND_FRAMEWORK LAST) set(Python3_FIND_FRAMEWORK LAST) -# CMake 3.14 is the minimum because in 3.12 and 3.13, despite find_package(PythonX) being present, -# the Numpy-related variables are not set -if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.14) - - if(PYTHON_EXECUTABLE) - # - Check if the PYTHON_EXECUTABLE deprecated variable - # was passed by the user; if so, PyROOT will be built with a single version - execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import sys;print(sys.version_info[0])" - OUTPUT_VARIABLE PYTHON_PREFER_VERSION - ERROR_VARIABLE PYTHON_PREFER_VERSION_ERR) - if(PYTHON_PREFER_VERSION_ERR) - message(WARNING "Unable to determine version of ${PYTHON_EXECUTABLE}: ${PYTHON_PREFER_VERSION_ERR}") +if(PYTHON_EXECUTABLE) + # - Check if the PYTHON_EXECUTABLE deprecated variable + # was passed by the user; if so, PyROOT will be built with a single version + execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import sys;print(sys.version_info[0])" + OUTPUT_VARIABLE PYTHON_PREFER_VERSION + ERROR_VARIABLE PYTHON_PREFER_VERSION_ERR) + if(PYTHON_PREFER_VERSION_ERR) + message(WARNING "Unable to determine version of ${PYTHON_EXECUTABLE}: ${PYTHON_PREFER_VERSION_ERR}") + endif() + string(STRIP "${PYTHON_PREFER_VERSION}" PYTHON_PREFER_VERSION) + set(Python${PYTHON_PREFER_VERSION}_EXECUTABLE "${PYTHON_EXECUTABLE}") + find_package(Python${PYTHON_PREFER_VERSION} COMPONENTS Interpreter Development NumPy) + if(Python${PYTHON_PREFER_VERSION}_Interpreter_FOUND) + set(PYTHON_EXECUTABLE "${Python${PYTHON_PREFER_VERSION}_EXECUTABLE}") + set(PYTHON_VERSION_STRING "${Python${PYTHON_PREFER_VERSION}_VERSION}" CACHE INTERNAL "" FORCE) + set(PYTHON_VERSION_MAJOR "${Python${PYTHON_PREFER_VERSION}_VERSION_MAJOR}" CACHE INTERNAL "" FORCE) + set(PYTHON_VERSION_MINOR "${Python${PYTHON_PREFER_VERSION}_VERSION_MINOR}" CACHE INTERNAL "" FORCE) + if(Python${PYTHON_PREFER_VERSION}_Development_FOUND) + set(PYTHON_INCLUDE_DIRS "${Python${PYTHON_PREFER_VERSION}_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE) + set(PYTHON_LIBRARIES "${Python${PYTHON_PREFER_VERSION}_LIBRARIES}" CACHE INTERNAL "" FORCE) + set(PYTHON_LIBRARY_DIR "${Python${PYTHON_PREFER_VERSION}_LIBRARY_DIRS}" CACHE INTERNAL "" FORCE) + # Set PyROOT variables + set(Python${PYTHON_PREFER_VERSION}_Interpreter_Development_FOUND ON) # This means we have both Interpreter and Development, hence we can build PyROOT with this Python + set(PYTHON_EXECUTABLE_Development_Main "${Python${PYTHON_PREFER_VERSION}_EXECUTABLE}") + set(PYTHON_VERSION_STRING_Development_Main "${Python${PYTHON_PREFER_VERSION}_VERSION}") + set(PYTHON_VERSION_MAJOR_Development_Main "${Python${PYTHON_PREFER_VERSION}_VERSION_MAJOR}") + set(PYTHON_VERSION_MINOR_Development_Main "${Python${PYTHON_PREFER_VERSION}_VERSION_MINOR}") + set(PYTHON_UNDER_VERSION_STRING_Development_Main "${Python${PYTHON_PREFER_VERSION}_VERSION_MAJOR}_${Python${PYTHON_PREFER_VERSION}_VERSION_MINOR}") + set(PYTHON_INCLUDE_DIRS_Development_Main "${Python${PYTHON_PREFER_VERSION}_INCLUDE_DIRS}") + set(PYTHON_LIBRARIES_Development_Main "${Python${PYTHON_PREFER_VERSION}_LIBRARIES}") endif() - string(STRIP "${PYTHON_PREFER_VERSION}" PYTHON_PREFER_VERSION) - set(Python${PYTHON_PREFER_VERSION}_EXECUTABLE "${PYTHON_EXECUTABLE}") - find_package(Python${PYTHON_PREFER_VERSION} COMPONENTS Interpreter Development NumPy) - if(Python${PYTHON_PREFER_VERSION}_Interpreter_FOUND) - set(PYTHON_EXECUTABLE "${Python${PYTHON_PREFER_VERSION}_EXECUTABLE}") - set(PYTHON_VERSION_STRING "${Python${PYTHON_PREFER_VERSION}_VERSION}" CACHE INTERNAL "" FORCE) - set(PYTHON_VERSION_MAJOR "${Python${PYTHON_PREFER_VERSION}_VERSION_MAJOR}" CACHE INTERNAL "" FORCE) - set(PYTHON_VERSION_MINOR "${Python${PYTHON_PREFER_VERSION}_VERSION_MINOR}" CACHE INTERNAL "" FORCE) - if(Python${PYTHON_PREFER_VERSION}_Development_FOUND) - set(PYTHON_INCLUDE_DIRS "${Python${PYTHON_PREFER_VERSION}_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE) - set(PYTHON_LIBRARIES "${Python${PYTHON_PREFER_VERSION}_LIBRARIES}" CACHE INTERNAL "" FORCE) - set(PYTHON_LIBRARY_DIR "${Python${PYTHON_PREFER_VERSION}_LIBRARY_DIRS}" CACHE INTERNAL "" FORCE) - # Set PyROOT variables - set(Python${PYTHON_PREFER_VERSION}_Interpreter_Development_FOUND ON) # This means we have both Interpreter and Development, hence we can build PyROOT with this Python - set(PYTHON_EXECUTABLE_Development_Main "${Python${PYTHON_PREFER_VERSION}_EXECUTABLE}") - set(PYTHON_VERSION_STRING_Development_Main "${Python${PYTHON_PREFER_VERSION}_VERSION}") - set(PYTHON_VERSION_MAJOR_Development_Main "${Python${PYTHON_PREFER_VERSION}_VERSION_MAJOR}") - set(PYTHON_VERSION_MINOR_Development_Main "${Python${PYTHON_PREFER_VERSION}_VERSION_MINOR}") - set(PYTHON_UNDER_VERSION_STRING_Development_Main "${Python${PYTHON_PREFER_VERSION}_VERSION_MAJOR}_${Python${PYTHON_PREFER_VERSION}_VERSION_MINOR}") - set(PYTHON_INCLUDE_DIRS_Development_Main "${Python${PYTHON_PREFER_VERSION}_INCLUDE_DIRS}") - set(PYTHON_LIBRARIES_Development_Main "${Python${PYTHON_PREFER_VERSION}_LIBRARIES}") - endif() - if(Python${PYTHON_PREFER_VERSION}_NumPy_FOUND) - set(NUMPY_FOUND ${Python${PYTHON_PREFER_VERSION}_NumPy_FOUND}) - set(NUMPY_INCLUDE_DIRS "${Python${PYTHON_PREFER_VERSION}_NumPy_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE) - endif() + if(Python${PYTHON_PREFER_VERSION}_NumPy_FOUND) + set(NUMPY_FOUND ${Python${PYTHON_PREFER_VERSION}_NumPy_FOUND}) + set(NUMPY_INCLUDE_DIRS "${Python${PYTHON_PREFER_VERSION}_NumPy_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE) endif() - if(DEFINED Python${PYTHON_PREFER_VERSION}_VERSION AND "${Python${PYTHON_PREFER_VERSION}_VERSION}" VERSION_LESS "2.7") - message(FATAL_ERROR "Ignoring Python installation: unsupported version ${Python${PYTHON_PREFER_VERSION}_VERSION} (version>=2.7 required)") + endif() + if(DEFINED Python${PYTHON_PREFER_VERSION}_VERSION AND "${Python${PYTHON_PREFER_VERSION}_VERSION}" VERSION_LESS "2.7") + message(FATAL_ERROR "Ignoring Python installation: unsupported version ${Python${PYTHON_PREFER_VERSION}_VERSION} (version>=2.7 required)") + endif() + if(NOT (Python${PYTHON_PREFER_VERSION}_Interpreter_FOUND AND Python${PYTHON_PREFER_VERSION}_Development_FOUND)) + message(WARNING "No supported Python development package was found for the specified Python executable; PyROOT will not be built") + endif() + +else() + # - Look for Python3 and set the deprecated variables to the ones set + # automatically by find_package(Python3 ...) + # - Look for Python2 and set the deprecated variables to the ones set + # automatically by find_package(Python2 ...) ONLY IF PYTHON3 WASN'T FOUND + find_package(Python3 COMPONENTS Interpreter Development NumPy) + if(Python3_Interpreter_FOUND) + set(PYTHON_EXECUTABLE "${Python3_EXECUTABLE}") + set(PYTHON_VERSION_STRING "${Python3_VERSION}" CACHE INTERNAL "" FORCE) + set(PYTHON_VERSION_MAJOR "${Python3_VERSION_MAJOR}" CACHE INTERNAL "" FORCE) + set(PYTHON_VERSION_MINOR "${Python3_VERSION_MINOR}" CACHE INTERNAL "" FORCE ) + if(Python3_Development_FOUND) + set(PYTHON_INCLUDE_DIRS "${Python3_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE) + set(PYTHON_LIBRARIES "${Python3_LIBRARIES}" CACHE INTERNAL "" FORCE) + set(PYTHON_LIBRARY_DIR "${Python3_LIBRARY_DIRS}" CACHE INTERNAL "" FORCE) + # Set PyROOT variables + set(Python3_Interpreter_Development_FOUND ON) # This means we have both Interpreter and Development, hence we can build PyROOT with Python3 + set(PYTHON_EXECUTABLE_Development_Main "${Python3_EXECUTABLE}") + set(PYTHON_VERSION_STRING_Development_Main "${Python3_VERSION}") + set(PYTHON_VERSION_MAJOR_Development_Main "${Python3_VERSION_MAJOR}") + set(PYTHON_VERSION_MINOR_Development_Main "${Python3_VERSION_MINOR}") + set(PYTHON_UNDER_VERSION_STRING_Development_Main "${Python3_VERSION_MAJOR}_${Python3_VERSION_MINOR}") + set(PYTHON_INCLUDE_DIRS_Development_Main "${Python3_INCLUDE_DIRS}") + set(PYTHON_LIBRARIES_Development_Main "${Python3_LIBRARIES}") endif() - if(NOT (Python${PYTHON_PREFER_VERSION}_Interpreter_FOUND AND Python${PYTHON_PREFER_VERSION}_Development_FOUND)) - message(WARNING "No supported Python development package was found for the specified Python executable; PyROOT will not be built") + if(Python3_NumPy_FOUND) + set(NUMPY_FOUND ${Python3_NumPy_FOUND}) + set(NUMPY_INCLUDE_DIRS "${Python3_NumPy_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE) endif() + endif() - else() - # - Look for Python3 and set the deprecated variables to the ones set - # automatically by find_package(Python3 ...) - # - Look for Python2 and set the deprecated variables to the ones set - # automatically by find_package(Python2 ...) ONLY IF PYTHON3 WASN'T FOUND - find_package(Python3 COMPONENTS Interpreter Development NumPy) - if(Python3_Interpreter_FOUND) - set(PYTHON_EXECUTABLE "${Python3_EXECUTABLE}") - set(PYTHON_VERSION_STRING "${Python3_VERSION}" CACHE INTERNAL "" FORCE) - set(PYTHON_VERSION_MAJOR "${Python3_VERSION_MAJOR}" CACHE INTERNAL "" FORCE) - set(PYTHON_VERSION_MINOR "${Python3_VERSION_MINOR}" CACHE INTERNAL "" FORCE ) - if(Python3_Development_FOUND) - set(PYTHON_INCLUDE_DIRS "${Python3_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE) - set(PYTHON_LIBRARIES "${Python3_LIBRARIES}" CACHE INTERNAL "" FORCE) - set(PYTHON_LIBRARY_DIR "${Python3_LIBRARY_DIRS}" CACHE INTERNAL "" FORCE) - # Set PyROOT variables - set(Python3_Interpreter_Development_FOUND ON) # This means we have both Interpreter and Development, hence we can build PyROOT with Python3 - set(PYTHON_EXECUTABLE_Development_Main "${Python3_EXECUTABLE}") - set(PYTHON_VERSION_STRING_Development_Main "${Python3_VERSION}") - set(PYTHON_VERSION_MAJOR_Development_Main "${Python3_VERSION_MAJOR}") - set(PYTHON_VERSION_MINOR_Development_Main "${Python3_VERSION_MINOR}") - set(PYTHON_UNDER_VERSION_STRING_Development_Main "${Python3_VERSION_MAJOR}_${Python3_VERSION_MINOR}") - set(PYTHON_INCLUDE_DIRS_Development_Main "${Python3_INCLUDE_DIRS}") - set(PYTHON_LIBRARIES_Development_Main "${Python3_LIBRARIES}") - endif() - if(Python3_NumPy_FOUND) - set(NUMPY_FOUND ${Python3_NumPy_FOUND}) - set(NUMPY_INCLUDE_DIRS "${Python3_NumPy_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE) + find_package(Python2 COMPONENTS Interpreter Development NumPy) + if(DEFINED Python2_VERSION AND "${Python2_VERSION}" VERSION_LESS "2.7") + message(WARNING "Ignoring Python2 installation: unsupported version ${Python2_VERSION} (version>=2.7 required)") + endif() + if("${Python2_VERSION}" VERSION_GREATER_EQUAL "2.7") + if(NOT Python3_Interpreter_FOUND) + # Only Python2 was found, set as main + if(Python2_Interpreter_FOUND) + set(PYTHON_EXECUTABLE "${Python2_EXECUTABLE}") + set(PYTHON_VERSION_STRING "${Python2_VERSION}" CACHE INTERNAL "" FORCE) + set(PYTHON_VERSION_MAJOR "${Python2_VERSION_MAJOR}" CACHE INTERNAL "" FORCE) + set(PYTHON_VERSION_MINOR "${Python2_VERSION_MINOR}" CACHE INTERNAL "" FORCE) + if(Python2_Development_FOUND) + set(PYTHON_INCLUDE_DIRS "${Python2_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE) + set(PYTHON_LIBRARIES "${Python2_LIBRARIES}" CACHE INTERNAL "" FORCE) + set(PYTHON_LIBRARY_DIR "${Python2_LIBRARY_DIRS}" CACHE INTERNAL "" FORCE) + # Set PyROOT variables + set(Python2_Interpreter_Development_FOUND ON) # This means we have both Interpreter and Development, hence we can build PyROOT with Python2 + set(PYTHON_EXECUTABLE_Development_Main "${Python2_EXECUTABLE}") + set(PYTHON_VERSION_STRING_Development_Main "${Python2_VERSION}") + set(PYTHON_VERSION_MAJOR_Development_Main "${Python2_VERSION_MAJOR}") + set(PYTHON_VERSION_MINOR_Development_Main "${Python2_VERSION_MINOR}") + set(PYTHON_UNDER_VERSION_STRING_Development_Main "${Python2_VERSION_MAJOR}_${Python2_VERSION_MINOR}") + set(PYTHON_INCLUDE_DIRS_Development_Main "${Python2_INCLUDE_DIRS}") + set(PYTHON_LIBRARIES_Development_Main "${Python2_LIBRARIES}") + endif() + if(Python2_NumPy_FOUND) + set(NUMPY_FOUND ${Python2_NumPy_FOUND}) + set(NUMPY_INCLUDE_DIRS "${Python2_NumPy_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE) + endif() endif() - endif() - - find_package(Python2 COMPONENTS Interpreter Development NumPy) - if(DEFINED Python2_VERSION AND "${Python2_VERSION}" VERSION_LESS "2.7") - message(WARNING "Ignoring Python2 installation: unsupported version ${Python2_VERSION} (version>=2.7 required)") - endif() - if("${Python2_VERSION}" VERSION_GREATER_EQUAL "2.7") - if(NOT Python3_Interpreter_FOUND) - # Only Python2 was found, set as main - if(Python2_Interpreter_FOUND) - set(PYTHON_EXECUTABLE "${Python2_EXECUTABLE}") - set(PYTHON_VERSION_STRING "${Python2_VERSION}" CACHE INTERNAL "" FORCE) - set(PYTHON_VERSION_MAJOR "${Python2_VERSION_MAJOR}" CACHE INTERNAL "" FORCE) - set(PYTHON_VERSION_MINOR "${Python2_VERSION_MINOR}" CACHE INTERNAL "" FORCE) - if(Python2_Development_FOUND) - set(PYTHON_INCLUDE_DIRS "${Python2_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE) - set(PYTHON_LIBRARIES "${Python2_LIBRARIES}" CACHE INTERNAL "" FORCE) - set(PYTHON_LIBRARY_DIR "${Python2_LIBRARY_DIRS}" CACHE INTERNAL "" FORCE) - # Set PyROOT variables - set(Python2_Interpreter_Development_FOUND ON) # This means we have both Interpreter and Development, hence we can build PyROOT with Python2 - set(PYTHON_EXECUTABLE_Development_Main "${Python2_EXECUTABLE}") - set(PYTHON_VERSION_STRING_Development_Main "${Python2_VERSION}") - set(PYTHON_VERSION_MAJOR_Development_Main "${Python2_VERSION_MAJOR}") - set(PYTHON_VERSION_MINOR_Development_Main "${Python2_VERSION_MINOR}") - set(PYTHON_UNDER_VERSION_STRING_Development_Main "${Python2_VERSION_MAJOR}_${Python2_VERSION_MINOR}") - set(PYTHON_INCLUDE_DIRS_Development_Main "${Python2_INCLUDE_DIRS}") - set(PYTHON_LIBRARIES_Development_Main "${Python2_LIBRARIES}") + else() + # Both Python3 and 2 found, set 2 as 'other' + # In this case, since the 'other' variables are used only for PyROOT (which requires development package), + # we can simply use the if(Python2_Development_FOUND) condition + if(Python2_Interpreter_FOUND AND Python2_Development_FOUND) + set(Python2_Interpreter_Development_FOUND ON) # This means we have both Interpreter and Development, hence we can build PyROOT with Python2 + if(Python3_Interpreter_Development_FOUND) + set(PYTHON_EXECUTABLE_Development_Other "${Python2_EXECUTABLE}") + set(PYTHON_VERSION_STRING_Development_Other "${Python2_VERSION}") + set(PYTHON_VERSION_MAJOR_Development_Other "${Python2_VERSION_MAJOR}") + set(PYTHON_VERSION_MINOR_Development_Other "${Python2_VERSION_MINOR}") + set(PYTHON_UNDER_VERSION_STRING_Development_Other "${Python2_VERSION_MAJOR}_${Python2_VERSION_MINOR}") + set(PYTHON_INCLUDE_DIRS_Development_Other "${Python2_INCLUDE_DIRS}") + set(PYTHON_LIBRARIES_Development_Other "${Python2_LIBRARIES}") + if(Python2_NumPy_FOUND) + set(OTHER_NUMPY_FOUND ${Python2_NumPy_FOUND}) + set(OTHER_NUMPY_INCLUDE_DIRS "${Python2_NumPy_INCLUDE_DIRS}") endif() + else() + set(PYTHON_INCLUDE_DIRS "${Python2_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE) + set(PYTHON_LIBRARIES "${Python2_LIBRARIES}" CACHE INTERNAL "" FORCE) + set(PYTHON_LIBRARY_DIR "${Python2_LIBRARY_DIRS}" CACHE INTERNAL "" FORCE) + # Set PyROOT variables + set(PYTHON_EXECUTABLE_Development_Main "${Python2_EXECUTABLE}") + set(PYTHON_VERSION_STRING_Development_Main "${Python2_VERSION}") + set(PYTHON_VERSION_MAJOR_Development_Main "${Python2_VERSION_MAJOR}") + set(PYTHON_VERSION_MINOR_Development_Main "${Python2_VERSION_MINOR}") + set(PYTHON_UNDER_VERSION_STRING_Development_Main "${Python2_VERSION_MAJOR}_${Python2_VERSION_MINOR}") + set(PYTHON_INCLUDE_DIRS_Development_Main "${Python2_INCLUDE_DIRS}") + set(PYTHON_LIBRARIES_Development_Main "${Python2_LIBRARIES}") if(Python2_NumPy_FOUND) set(NUMPY_FOUND ${Python2_NumPy_FOUND}) set(NUMPY_INCLUDE_DIRS "${Python2_NumPy_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE) endif() endif() - else() - # Both Python3 and 2 found, set 2 as 'other' - # In this case, since the 'other' variables are used only for PyROOT (which requires development package), - # we can simply use the if(Python2_Development_FOUND) condition - if(Python2_Interpreter_FOUND AND Python2_Development_FOUND) - set(Python2_Interpreter_Development_FOUND ON) # This means we have both Interpreter and Development, hence we can build PyROOT with Python2 - if(Python3_Interpreter_Development_FOUND) - set(PYTHON_EXECUTABLE_Development_Other "${Python2_EXECUTABLE}") - set(PYTHON_VERSION_STRING_Development_Other "${Python2_VERSION}") - set(PYTHON_VERSION_MAJOR_Development_Other "${Python2_VERSION_MAJOR}") - set(PYTHON_VERSION_MINOR_Development_Other "${Python2_VERSION_MINOR}") - set(PYTHON_UNDER_VERSION_STRING_Development_Other "${Python2_VERSION_MAJOR}_${Python2_VERSION_MINOR}") - set(PYTHON_INCLUDE_DIRS_Development_Other "${Python2_INCLUDE_DIRS}") - set(PYTHON_LIBRARIES_Development_Other "${Python2_LIBRARIES}") - if(Python2_NumPy_FOUND) - set(OTHER_NUMPY_FOUND ${Python2_NumPy_FOUND}) - set(OTHER_NUMPY_INCLUDE_DIRS "${Python2_NumPy_INCLUDE_DIRS}") - endif() - else() - set(PYTHON_INCLUDE_DIRS "${Python2_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE) - set(PYTHON_LIBRARIES "${Python2_LIBRARIES}" CACHE INTERNAL "" FORCE) - set(PYTHON_LIBRARY_DIR "${Python2_LIBRARY_DIRS}" CACHE INTERNAL "" FORCE) - # Set PyROOT variables - set(PYTHON_EXECUTABLE_Development_Main "${Python2_EXECUTABLE}") - set(PYTHON_VERSION_STRING_Development_Main "${Python2_VERSION}") - set(PYTHON_VERSION_MAJOR_Development_Main "${Python2_VERSION_MAJOR}") - set(PYTHON_VERSION_MINOR_Development_Main "${Python2_VERSION_MINOR}") - set(PYTHON_UNDER_VERSION_STRING_Development_Main "${Python2_VERSION_MAJOR}_${Python2_VERSION_MINOR}") - set(PYTHON_INCLUDE_DIRS_Development_Main "${Python2_INCLUDE_DIRS}") - set(PYTHON_LIBRARIES_Development_Main "${Python2_LIBRARIES}") - if(Python2_NumPy_FOUND) - set(NUMPY_FOUND ${Python2_NumPy_FOUND}) - set(NUMPY_INCLUDE_DIRS "${Python2_NumPy_INCLUDE_DIRS}" CACHE INTERNAL "" FORCE) - endif() - endif() - endif() endif() endif() - - if(NOT Python3_Interpreter_Development_FOUND AND (NOT Python2_Interpreter_Development_FOUND OR "${Python2_VERSION}" VERSION_LESS "2.7")) - message(WARNING "No supported Python 2 or 3 development packages were found; PyROOT will not be built.") - endif() - - endif() - -else() - - find_package(PythonInterp ${python_version} REQUIRED) - - find_package(PythonLibs ${python_version}) - - if(PYTHONLIBS_FOUND) - if(NOT "${PYTHONLIBS_VERSION_STRING}" MATCHES "${PYTHON_VERSION_STRING}") - message(FATAL_ERROR "Version mismatch between Python interpreter (${PYTHON_VERSION_STRING})" - " and libraries (${PYTHONLIBS_VERSION_STRING}).\nROOT cannot work with this configuration. " - "Please specify only PYTHON_EXECUTABLE to CMake with an absolute path to ensure matching versions are found.") - endif() - else() - message(WARNING "No supported Python development package was found; PyROOT will not be built.") endif() - find_package(NumPy) - - if (PYTHONLIBS_FOUND) - set(Python${PYTHON_VERSION_MAJOR}_Interpreter_Development_FOUND ON) # This means we have both Interpreter and Development, hence we can build PyROOT with this Python - set(PYTHON_EXECUTABLE_Development_Main "${PYTHON_EXECUTABLE}") - set(PYTHON_VERSION_STRING_Development_Main "${PYTHON_VERSION_STRING}") - set(PYTHON_VERSION_MAJOR_Development_Main "${PYTHON_VERSION_MAJOR}") - set(PYTHON_VERSION_MINOR_Development_Main "${PYTHON_VERSION_MINOR}") - set(PYTHON_UNDER_VERSION_STRING_Development_Main "${PYTHON_VERSION_MAJOR}_${PYTHON_VERSION_MINOR}") - set(PYTHON_INCLUDE_DIRS_Development_Main "${PYTHON_INCLUDE_DIRS}") - set(PYTHON_LIBRARIES_Development_Main "${PYTHON_LIBRARIES}") + if(NOT Python3_Interpreter_Development_FOUND AND (NOT Python2_Interpreter_Development_FOUND OR "${Python2_VERSION}" VERSION_LESS "2.7")) + message(WARNING "No supported Python 2 or 3 development packages were found; PyROOT will not be built.") endif() endif()