summaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorAlexandru Croitor <alexandru.croitor@qt.io>2020-06-23 13:17:06 +0200
committerAlexandru Croitor <alexandru.croitor@qt.io>2020-06-29 12:20:12 +0200
commit896cdd0e28a8dc4e03bb287fea5c71519297886e (patch)
tree88beb22d4819ae58780297f5e1f546513ad40c03 /cmake
parentb31764887505df43d62013db2cb903b5c537a0bf (diff)
CMake: Fix configure.cmake usage for libclang
Now that the qmake situation of the configure.json files in regards to libclang is fixed, we need to adjust the CMake files to do the same. Remove the old stale configure.cmake files, create the top-level configure.cmake file, evaluate its features in src dir, and make sure to also create the forwarding headers in the global QtTools module as well. Change FindWrapLibClang to accept a version number, and modify configure.cmake to pass the minimum version to be "8". While libclang 6.x is enough to build Qt with qmake, for some reason CMake needs at least 8.x. Explicitly specifying the minimum version will prevent an old libclang library to be found in Coin, and thus breaking integrations during compilation. Once Coin is updated to include latest libclang, qdoc and lupdate will be built as usual. Change-Id: Iab8ec25d256358005850f25d6395d81e0068edfe Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r--cmake/FindWrapLibClang.cmake49
1 files changed, 33 insertions, 16 deletions
diff --git a/cmake/FindWrapLibClang.cmake b/cmake/FindWrapLibClang.cmake
index df6c011f5..30be70b66 100644
--- a/cmake/FindWrapLibClang.cmake
+++ b/cmake/FindWrapLibClang.cmake
@@ -5,30 +5,47 @@ endif()
find_package(Clang CONFIG)
-if(TARGET libclang AND TARGET clangHandleCXX)
+set(WrapLibClang_FOUND FALSE)
+set(__wrap_lib_clang_requested_version_found FALSE)
+
+# Need to explicitly handle the version check, because the Clang package doesn't.
+if(WrapLibClang_FIND_VERSION AND LLVM_PACKAGE_VERSION
+ AND LLVM_PACKAGE_VERSION VERSION_GREATER_EQUAL "${WrapLibClang_FIND_VERSION}")
+ set(__wrap_lib_clang_requested_version_found TRUE)
+endif()
+
+if(TARGET libclang AND TARGET clangHandleCXX AND __wrap_lib_clang_requested_version_found)
+ set(WrapLibClang_FOUND TRUE)
+
get_target_property(type libclang TYPE)
if (MSVC AND type STREQUAL "STATIC_LIBRARY")
if (NOT CMAKE_BUILD_TYPE MATCHES "(Release|MinSizeRel|RelWithDebInfo)")
message(STATUS "Static linkage against libclang with MSVC was requested, but the build is not a release build, therefore libclang cannot be used.")
set(WrapLibClang_FOUND FALSE)
- return()
endif()
endif()
- add_library(WrapLibClang::WrapLibClang IMPORTED INTERFACE)
+ if(WrapLibClang_FOUND)
+ add_library(WrapLibClang::WrapLibClang IMPORTED INTERFACE)
- target_include_directories(WrapLibClang::WrapLibClang INTERFACE ${CLANG_INCLUDE_DIRS})
- if (NOT TARGET Threads::Threads)
- find_package(Threads)
- endif()
- target_link_libraries(WrapLibClang::WrapLibClang INTERFACE libclang clangHandleCXX Threads::Threads)
-
- foreach(version MAJOR MINOR PATCH)
- set(QT_LIB_CLANG_VERSION_${version} ${LLVM_VERSION_${version}} CACHE STRING "" FORCE)
- endforeach()
- set(QT_LIB_CLANG_VERSION ${LLVM_PACKAGE_VERSION} CACHE STRING "" FORCE)
- set(QT_LIB_CLANG_LIBDIR "${LLVM_LIBRARY_DIRS}" CACHE STRING "" FORCE)
- set(QT_LIBCLANG_RESOURCE_DIR "\"${QT_LIB_CLANG_LIBDIR}/clang/${QT_LIB_CLANG_VERSION}/include\"" CACHE STRING "" FORCE)
+ target_include_directories(WrapLibClang::WrapLibClang INTERFACE ${CLANG_INCLUDE_DIRS})
+ if (NOT TARGET Threads::Threads)
+ find_package(Threads)
+ endif()
+ target_link_libraries(WrapLibClang::WrapLibClang
+ INTERFACE libclang clangHandleCXX Threads::Threads)
- set(WrapLibClang_FOUND TRUE)
+ foreach(version MAJOR MINOR PATCH)
+ set(QT_LIB_CLANG_VERSION_${version} ${LLVM_VERSION_${version}} CACHE STRING "" FORCE)
+ endforeach()
+ set(QT_LIB_CLANG_VERSION ${LLVM_PACKAGE_VERSION} CACHE STRING "" FORCE)
+ set(QT_LIB_CLANG_LIBDIR "${LLVM_LIBRARY_DIRS}" CACHE STRING "" FORCE)
+ set(QT_LIBCLANG_RESOURCE_DIR
+ "\"${QT_LIB_CLANG_LIBDIR}/clang/${QT_LIB_CLANG_VERSION}/include\"" CACHE STRING "" FORCE)
+ endif()
endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(WrapLibClang
+ REQUIRED_VARS WrapLibClang_FOUND
+ VERSION_VAR LLVM_PACKAGE_VERSION)