aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken2/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken2/CMakeLists.txt')
-rw-r--r--sources/shiboken2/CMakeLists.txt37
1 files changed, 32 insertions, 5 deletions
diff --git a/sources/shiboken2/CMakeLists.txt b/sources/shiboken2/CMakeLists.txt
index d499ffc22..513c4ed7e 100644
--- a/sources/shiboken2/CMakeLists.txt
+++ b/sources/shiboken2/CMakeLists.txt
@@ -1,5 +1,6 @@
Include(icecc.cmake)
project(shiboken2)
+include(CheckIncludeFileCXX)
cmake_minimum_required(VERSION 3.1)
cmake_policy(VERSION 3.1)
@@ -80,7 +81,7 @@ else ()
if (NOT "${CLANG_DIR}" STREQUAL "")
EXEC_PROGRAM("${LLVM_CONFIG}" ARGS "--version" OUTPUT_VARIABLE CLANG_VERSION)
if (CLANG_VERSION VERSION_LESS 3.9)
- message(FATAL_ERROR "LLVM version 3.9 is required (${LLVM_CONFIG} detected ${CLANG_VERSION} at ${CLANG_DIR}).")
+ message(FATAL_ERROR "libclang version 3.9 or higher is required (${LLVM_CONFIG} detected ${CLANG_VERSION} at ${CLANG_DIR}).")
endif()
endif()
endif()
@@ -91,14 +92,23 @@ elseif (NOT IS_DIRECTORY ${CLANG_DIR})
message(FATAL_ERROR "${CLANG_DIR} detected by ${CLANG_DIR_SOURCE} does not exist.")
endif()
-set(CLANG_LIB_NAME "clang")
+# The non-development Debian / Ubuntu packages (e.g. libclang1-6.0) do not ship a
+# libclang.so symlink, but only libclang-6.0.so.1 and libclang.so.1 (adjusted for version number).
+# Thus searching for libclang would not succeed.
+# The "libclang.so" symlink is shipped as part of the development package (libclang-6.0-dev) which
+# we need anyway because of the headers. Thus we will search for libclang.so.1 also, and complain
+# about the headers not being found in a check further down. This is more friendly to the user,
+# so they don't scratch their head thinking that they have already installed the necessary package.
+set(CLANG_LIB_NAMES clang libclang.so libclang.so.1)
if(MSVC)
- set(CLANG_LIB_NAME "libclang")
+ set(CLANG_LIB_NAMES libclang)
endif()
-find_library(CLANG_LIBRARY ${CLANG_LIB_NAME} HINTS ${CLANG_DIR}/lib)
+find_library(CLANG_LIBRARY NAMES ${CLANG_LIB_NAMES} HINTS ${CLANG_DIR}/lib)
if (NOT EXISTS ${CLANG_LIBRARY})
- message(FATAL_ERROR "Unable to find Clang library ${CLANG_LIB_NAME} in ${CLANG_DIR}.")
+ string(REPLACE ";" ", " CLANG_LIB_NAMES_STRING "${CLANG_LIB_NAMES}")
+ message(FATAL_ERROR "Unable to find the Clang library in ${CLANG_DIR}.\
+ Names tried: ${CLANG_LIB_NAMES_STRING}.")
endif()
message(STATUS "CLANG: ${CLANG_DIR}, ${CLANG_LIBRARY} detected by ${CLANG_DIR_SOURCE}")
@@ -127,6 +137,23 @@ message(STATUS "CLANG builtins includes directory chosen: ${CLANG_BUILTIN_INCLUD
set(CLANG_EXTRA_INCLUDES ${CLANG_DIR}/include)
set(CLANG_EXTRA_LIBRARIES ${CLANG_LIBRARY})
+# Check if one of the required clang headers is found. Error out early at CMake time instead of
+# compile time if not found.
+# It can happen that a user uses a distro-provided libclang.so, but no development header package
+# was installed (e.g. libclang-6.0-dev on Ubuntu).
+set(CMAKE_REQUIRED_INCLUDES ${CLANG_EXTRA_INCLUDES})
+set(CLANG_HEADER_FILE_TO_CHECK "clang-c/Index.h")
+check_include_file_cxx(${CLANG_HEADER_FILE_TO_CHECK} CLANG_INCLUDE_FOUND)
+unset(CMAKE_REQUIRED_INCLUDES)
+if (NOT CLANG_INCLUDE_FOUND)
+ # Need to unset so that when installing the package, CMake doesn't complain that the header
+ # still isn't found.
+ unset(CLANG_INCLUDE_FOUND CACHE)
+ message(FATAL_ERROR "Unable to find required Clang header file ${CLANG_HEADER_FILE_TO_CHECK} \
+ in ${CLANG_DIR}/include. Perhaps you forgot to install the clang development header \
+ package? (e.g. libclang-6.0-dev)")
+endif()
+
set(SHIBOKEN_VERSION_FILE_PATH "${CMAKE_SOURCE_DIR}/shiboken_version.py")
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS
${SHIBOKEN_VERSION_FILE_PATH}