diff --git a/clang/cmake/modules/CMakeLists.txt b/clang/cmake/modules/CMakeLists.txt --- a/clang/cmake/modules/CMakeLists.txt +++ b/clang/cmake/modules/CMakeLists.txt @@ -32,6 +32,10 @@ ${CMAKE_CURRENT_SOURCE_DIR}/ClangConfig.cmake.in ${clang_cmake_builddir}/ClangConfig.cmake @ONLY) +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/ClangConfigVersion.cmake.in + ${clang_cmake_builddir}/ClangConfigVersion.cmake + @ONLY) set(CLANG_CONFIG_CMAKE_DIR) set(CLANG_CONFIG_LLVM_CMAKE_DIR) @@ -59,6 +63,10 @@ ${CMAKE_CURRENT_SOURCE_DIR}/ClangConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/ClangConfig.cmake @ONLY) +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/ClangConfigVersion.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/ClangConfigVersion.cmake + @ONLY) set(CLANG_CONFIG_CODE) set(CLANG_CONFIG_CMAKE_DIR) @@ -67,6 +75,7 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/ClangConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/ClangConfigVersion.cmake ${CMAKE_CURRENT_SOURCE_DIR}/AddClang.cmake DESTINATION ${CLANG_INSTALL_PACKAGE_DIR} COMPONENT clang-cmake-exports) diff --git a/clang/cmake/modules/ClangConfig.cmake.in b/clang/cmake/modules/ClangConfig.cmake.in --- a/clang/cmake/modules/ClangConfig.cmake.in +++ b/clang/cmake/modules/ClangConfig.cmake.in @@ -2,7 +2,8 @@ @CLANG_CONFIG_CODE@ -find_package(LLVM REQUIRED CONFIG +set(LLVM_VERSION @LLVM_VERSION_MAJOR@.@LLVM_VERSION_MINOR@.@LLVM_VERSION_PATCH@) +find_package(LLVM ${LLVM_VERSION} EXACT REQUIRED CONFIG HINTS "@CLANG_CONFIG_LLVM_CMAKE_DIR@") set(CLANG_EXPORTED_TARGETS "@CLANG_EXPORTS@") diff --git a/clang/cmake/modules/ClangConfigVersion.cmake.in b/clang/cmake/modules/ClangConfigVersion.cmake.in new file mode 100644 --- /dev/null +++ b/clang/cmake/modules/ClangConfigVersion.cmake.in @@ -0,0 +1,13 @@ +set(PACKAGE_VERSION "@PACKAGE_VERSION@") + +# LLVM is API-compatible only with matching major.minor versions +# and patch versions not less than that requested. +if("@LLVM_VERSION_MAJOR@.@LLVM_VERSION_MINOR@" VERSION_EQUAL + "${PACKAGE_FIND_VERSION_MAJOR}.${PACKAGE_FIND_VERSION_MINOR}" + AND NOT "@LLVM_VERSION_PATCH@" VERSION_LESS "${PACKAGE_FIND_VERSION_PATCH}") + set(PACKAGE_VERSION_COMPATIBLE 1) + if("@LLVM_VERSION_PATCH@" VERSION_EQUAL + "${PACKAGE_FIND_VERSION_PATCH}") + set(PACKAGE_VERSION_EXACT 1) + endif() +endif() diff --git a/flang/cmake/modules/CMakeLists.txt b/flang/cmake/modules/CMakeLists.txt --- a/flang/cmake/modules/CMakeLists.txt +++ b/flang/cmake/modules/CMakeLists.txt @@ -28,8 +28,8 @@ "${FLANG_BINARY_DIR}/include" ) configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/FlangConfig.cmake.in - ${flang_cmake_builddir}/FlangConfig.cmake + ${CMAKE_CURRENT_SOURCE_DIR}/FlangConfigVersion.cmake.in + ${flang_cmake_builddir}/FlangConfigVersion.cmake @ONLY) set(FLANG_CONFIG_CMAKE_DIR) set(FLANG_CONFIG_LLVM_CMAKE_DIR) @@ -46,6 +46,10 @@ ${CMAKE_CURRENT_SOURCE_DIR}/FlangConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/FlangConfig.cmake @ONLY) +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/FlangConfigVersion.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/FlangConfigVersion.cmake + @ONLY) set(FLANG_CONFIG_CODE) set(FLANG_CONFIG_CMAKE_DIR) @@ -56,6 +60,7 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/FlangConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/FlangConfigVersion.cmake DESTINATION ${FLANG_INSTALL_PACKAGE_DIR} COMPONENT flang-cmake-exports) diff --git a/flang/cmake/modules/FlangConfig.cmake.in b/flang/cmake/modules/FlangConfig.cmake.in --- a/flang/cmake/modules/FlangConfig.cmake.in +++ b/flang/cmake/modules/FlangConfig.cmake.in @@ -2,7 +2,8 @@ @FLANG_CONFIG_CODE@ -find_package(LLVM REQUIRED CONFIG +set(LLVM_VERSION @LLVM_VERSION_MAJOR@.@LLVM_VERSION_MINOR@.@LLVM_VERSION_PATCH@) +find_package(LLVM ${LLVM_VERSION} EXACT REQUIRED CONFIG HINTS "@FLANG_CONFIG_LLVM_CMAKE_DIR@") set(FLANG_EXPORTED_TARGETS "@FLANG_EXPORTS@") diff --git a/flang/cmake/modules/FlangConfigVersion.cmake.in b/flang/cmake/modules/FlangConfigVersion.cmake.in new file mode 100644 --- /dev/null +++ b/flang/cmake/modules/FlangConfigVersion.cmake.in @@ -0,0 +1,13 @@ +set(PACKAGE_VERSION "@PACKAGE_VERSION@") + +# LLVM is API-compatible only with matching major.minor versions +# and patch versions not less than that requested. +if("@LLVM_VERSION_MAJOR@.@LLVM_VERSION_MINOR@" VERSION_EQUAL + "${PACKAGE_FIND_VERSION_MAJOR}.${PACKAGE_FIND_VERSION_MINOR}" + AND NOT "@LLVM_VERSION_PATCH@" VERSION_LESS "${PACKAGE_FIND_VERSION_PATCH}") + set(PACKAGE_VERSION_COMPATIBLE 1) + if("@LLVM_VERSION_PATCH@" VERSION_EQUAL + "${PACKAGE_FIND_VERSION_PATCH}") + set(PACKAGE_VERSION_EXACT 1) + endif() +endif() diff --git a/lld/cmake/modules/CMakeLists.txt b/lld/cmake/modules/CMakeLists.txt --- a/lld/cmake/modules/CMakeLists.txt +++ b/lld/cmake/modules/CMakeLists.txt @@ -31,6 +31,10 @@ ${CMAKE_CURRENT_SOURCE_DIR}/LLDConfig.cmake.in ${lld_cmake_builddir}/LLDConfig.cmake @ONLY) +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/LLDConfigVersion.cmake.in + ${lld_cmake_builddir}/LLDConfigVersion.cmake + @ONLY) set(LLD_CONFIG_CMAKE_DIR) set(LLD_CONFIG_LLVM_CMAKE_DIR) @@ -44,6 +48,10 @@ ${CMAKE_CURRENT_SOURCE_DIR}/LLDConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/LLDConfig.cmake @ONLY) +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/LLDConfigVersion.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/LLDConfigVersion.cmake + @ONLY) set(LLD_CONFIG_CODE) set(LLD_CONFIG_CMAKE_DIR) @@ -52,6 +60,7 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/LLDConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/LLDConfigVersion.cmake DESTINATION ${LLD_INSTALL_PACKAGE_DIR} COMPONENT lld-cmake-exports) diff --git a/lld/cmake/modules/LLDConfig.cmake.in b/lld/cmake/modules/LLDConfig.cmake.in --- a/lld/cmake/modules/LLDConfig.cmake.in +++ b/lld/cmake/modules/LLDConfig.cmake.in @@ -2,7 +2,8 @@ @LLD_CONFIG_CODE@ -find_package(LLVM REQUIRED CONFIG +set(LLVM_VERSION @LLVM_VERSION_MAJOR@.@LLVM_VERSION_MINOR@.@LLVM_VERSION_PATCH@) +find_package(LLVM ${LLVM_VERSION} EXACT REQUIRED CONFIG HINTS "@LLD_CONFIG_LLVM_CMAKE_DIR@") set(LLD_EXPORTED_TARGETS "@LLD_EXPORTS@") diff --git a/lld/cmake/modules/LLDConfigVersion.cmake.in b/lld/cmake/modules/LLDConfigVersion.cmake.in new file mode 100644 --- /dev/null +++ b/lld/cmake/modules/LLDConfigVersion.cmake.in @@ -0,0 +1,13 @@ +set(PACKAGE_VERSION "@PACKAGE_VERSION@") + +# LLVM is API-compatible only with matching major.minor versions +# and patch versions not less than that requested. +if("@LLVM_VERSION_MAJOR@.@LLVM_VERSION_MINOR@" VERSION_EQUAL + "${PACKAGE_FIND_VERSION_MAJOR}.${PACKAGE_FIND_VERSION_MINOR}" + AND NOT "@LLVM_VERSION_PATCH@" VERSION_LESS "${PACKAGE_FIND_VERSION_PATCH}") + set(PACKAGE_VERSION_COMPATIBLE 1) + if("@LLVM_VERSION_PATCH@" VERSION_EQUAL + "${PACKAGE_FIND_VERSION_PATCH}") + set(PACKAGE_VERSION_EXACT 1) + endif() +endif() diff --git a/mlir/cmake/modules/CMakeLists.txt b/mlir/cmake/modules/CMakeLists.txt --- a/mlir/cmake/modules/CMakeLists.txt +++ b/mlir/cmake/modules/CMakeLists.txt @@ -41,6 +41,10 @@ ${CMAKE_CURRENT_SOURCE_DIR}/MLIRConfig.cmake.in ${mlir_cmake_builddir}/MLIRConfig.cmake @ONLY) +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/MLIRConfigVersion.cmake.in + ${mlir_cmake_builddir}/MLIRConfigVersion.cmake + @ONLY) set(MLIR_CONFIG_CMAKE_DIR) set(MLIR_CONFIG_LLVM_CMAKE_DIR) set(MLIR_CONFIG_INCLUDE_DIRS) @@ -75,6 +79,10 @@ ${CMAKE_CURRENT_SOURCE_DIR}/MLIRConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/MLIRConfig.cmake @ONLY) +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/MLIRConfigVersion.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/MLIRConfigVersion.cmake + @ONLY) set(MLIR_CONFIG_CODE) set(MLIR_CONFIG_CMAKE_DIR) set(MLIR_CONFIG_LLVM_CMAKE_DIR) @@ -87,6 +95,7 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/MLIRConfig.cmake + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/MLIRConfigVersion.cmake ${CMAKE_CURRENT_SOURCE_DIR}/AddMLIR.cmake ${CMAKE_CURRENT_SOURCE_DIR}/AddMLIRPython.cmake ${CMAKE_CURRENT_SOURCE_DIR}/MLIRDetectPythonEnv.cmake diff --git a/mlir/cmake/modules/MLIRConfig.cmake.in b/mlir/cmake/modules/MLIRConfig.cmake.in --- a/mlir/cmake/modules/MLIRConfig.cmake.in +++ b/mlir/cmake/modules/MLIRConfig.cmake.in @@ -2,7 +2,8 @@ @MLIR_CONFIG_CODE@ -find_package(LLVM REQUIRED CONFIG +set(LLVM_VERSION @LLVM_VERSION_MAJOR@.@LLVM_VERSION_MINOR@.@LLVM_VERSION_PATCH@) +find_package(LLVM ${LLVM_VERSION} EXACT REQUIRED CONFIG HINTS "@MLIR_CONFIG_LLVM_CMAKE_DIR@") set(MLIR_EXPORTED_TARGETS "@MLIR_EXPORTS@") diff --git a/mlir/cmake/modules/MLIRConfigVersion.cmake.in b/mlir/cmake/modules/MLIRConfigVersion.cmake.in new file mode 100644 --- /dev/null +++ b/mlir/cmake/modules/MLIRConfigVersion.cmake.in @@ -0,0 +1,13 @@ +set(PACKAGE_VERSION "@PACKAGE_VERSION@") + +# LLVM is API-compatible only with matching major.minor versions +# and patch versions not less than that requested. +if("@LLVM_VERSION_MAJOR@.@LLVM_VERSION_MINOR@" VERSION_EQUAL + "${PACKAGE_FIND_VERSION_MAJOR}.${PACKAGE_FIND_VERSION_MINOR}" + AND NOT "@LLVM_VERSION_PATCH@" VERSION_LESS "${PACKAGE_FIND_VERSION_PATCH}") + set(PACKAGE_VERSION_COMPATIBLE 1) + if("@LLVM_VERSION_PATCH@" VERSION_EQUAL + "${PACKAGE_FIND_VERSION_PATCH}") + set(PACKAGE_VERSION_EXACT 1) + endif() +endif() diff --git a/polly/cmake/CMakeLists.txt b/polly/cmake/CMakeLists.txt --- a/polly/cmake/CMakeLists.txt +++ b/polly/cmake/CMakeLists.txt @@ -82,6 +82,10 @@ ${CMAKE_CURRENT_SOURCE_DIR}/PollyConfig.cmake.in ${polly_cmake_builddir}/PollyConfig.cmake @ONLY) +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/PollyConfigVersion.cmake.in + ${polly_cmake_builddir}/PollyConfigVersion.cmake + @ONLY) file(GENERATE OUTPUT ${polly_cmake_builddir}/${POLLY_EXPORTS_FILE_NAME} @@ -138,6 +142,10 @@ ${CMAKE_CURRENT_SOURCE_DIR}/PollyConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/PollyConfig.cmake @ONLY) +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/PollyConfigVersion.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/PollyConfigVersion.cmake + @ONLY) file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${POLLY_EXPORTS_FILE_NAME} CONTENT "${POLLY_EXPORTS}") @@ -146,6 +154,7 @@ install( FILES "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/PollyConfig.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/PollyConfigVersion.cmake" "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${POLLY_EXPORTS_FILE_NAME}" DESTINATION "${POLLY_INSTALL_PACKAGE_DIR}") endif () diff --git a/polly/cmake/PollyConfig.cmake.in b/polly/cmake/PollyConfig.cmake.in --- a/polly/cmake/PollyConfig.cmake.in +++ b/polly/cmake/PollyConfig.cmake.in @@ -2,7 +2,8 @@ @POLLY_CONFIG_CODE@ -find_package(LLVM REQUIRED CONFIG +set(LLVM_VERSION @LLVM_VERSION_MAJOR@.@LLVM_VERSION_MINOR@.@LLVM_VERSION_PATCH@) +find_package(LLVM ${LLVM_VERSION} EXACT REQUIRED CONFIG HINTS "@POLLY_CONFIG_LLVM_CMAKE_DIR@") set(Polly_CMAKE_DIR ${CMAKE_CURRENT_LIST_DIR}) diff --git a/polly/cmake/PollyConfigVersion.cmake.in b/polly/cmake/PollyConfigVersion.cmake.in new file mode 100644 --- /dev/null +++ b/polly/cmake/PollyConfigVersion.cmake.in @@ -0,0 +1,13 @@ +set(PACKAGE_VERSION "@PACKAGE_VERSION@") + +# LLVM is API-compatible only with matching major.minor versions +# and patch versions not less than that requested. +if("@LLVM_VERSION_MAJOR@.@LLVM_VERSION_MINOR@" VERSION_EQUAL + "${PACKAGE_FIND_VERSION_MAJOR}.${PACKAGE_FIND_VERSION_MINOR}" + AND NOT "@LLVM_VERSION_PATCH@" VERSION_LESS "${PACKAGE_FIND_VERSION_PATCH}") + set(PACKAGE_VERSION_COMPATIBLE 1) + if("@LLVM_VERSION_PATCH@" VERSION_EQUAL + "${PACKAGE_FIND_VERSION_PATCH}") + set(PACKAGE_VERSION_EXACT 1) + endif() +endif()