summaryrefslogtreecommitdiff
path: root/elpa/irony-20220110.849/server/cmake/CheckClangResourceDir.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'elpa/irony-20220110.849/server/cmake/CheckClangResourceDir.cmake')
-rw-r--r--elpa/irony-20220110.849/server/cmake/CheckClangResourceDir.cmake90
1 files changed, 90 insertions, 0 deletions
diff --git a/elpa/irony-20220110.849/server/cmake/CheckClangResourceDir.cmake b/elpa/irony-20220110.849/server/cmake/CheckClangResourceDir.cmake
new file mode 100644
index 0000000..20bcda9
--- /dev/null
+++ b/elpa/irony-20220110.849/server/cmake/CheckClangResourceDir.cmake
@@ -0,0 +1,90 @@
+#
+# Get the Clang resource directory.
+#
+# If found the following variable will be set:
+# - CLANG_RESOURCE_DIR
+#
+set(CHECK_CLANG_RESOURCE_DIR_CHECKER_CODE_IN
+ ${CMAKE_CURRENT_LIST_DIR}/LibClangDiagnosticsChecker.cpp)
+
+function(check_clang_resource_dir)
+ if (CLANG_RESOURCE_DIR)
+ return() # already in cache
+ endif()
+
+ message(STATUS "Detecting Clang resource directory")
+ find_package (LibClang REQUIRED)
+
+ set(checker_code
+ ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/LibClangDiagnosticsChecker.cpp)
+ set(checked_file
+ "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/check-libclang-stddef.cpp")
+
+ configure_file(${CHECK_CLANG_RESOURCE_DIR_CHECKER_CODE_IN}
+ ${checker_code} COPYONLY)
+ file(WRITE "${checked_file}" "#include <stddef.h>\n")
+
+ # Paths stolen from Rip-Rip/clang_complete#getBuiltinHeaderPath()
+ find_path(CHECK_CLANG_RESOURCE_DIR include/stddef.h
+ NO_DEFAULT_PATH
+ # the default path, favor this one over the other, in case a specific
+ # libclang has been chosen.
+ HINTS "${LIBCLANG_LIBRARY_DIR}/../lib/clang"
+ # other, distribution specific, paths
+ PATHS
+ "${LIBCLANG_LIBRARY_DIR}/../clang" # Gentoo
+ "${LIBCLANG_LIBRARY_DIR}/clang" # openSUSE, Windows
+ "${LIBCLANG_LIBRARY_DIR}/" # Google
+ "/usr/lib64/clang" # x86_64 (openSUSE, Fedora)
+ "/usr/lib/clang"
+ PATH_SUFFIXES ${LIBCLANG_KNOWN_LLVM_VERSIONS})
+
+ if (CHECK_CLANG_RESOURCE_DIR)
+ # On Windows the paths weren't escaped correctly, similar to:
+ # http://public.kitware.com/pipermail/cmake/2006-February/008473.html
+ list(APPEND run_args -resource-dir \"${CHECK_CLANG_RESOURCE_DIR}\")
+ endif()
+
+ list(APPEND run_args ${checked_file})
+
+ try_run(
+ CHECK_CLANG_RESOURCE_DIR_NUM_DIAGNOSTICS
+ CHECK_CLANG_RESOURCE_DIR_COMPILE_RESULT
+ ${CMAKE_BINARY_DIR}
+ ${checker_code}
+ CMAKE_FLAGS
+ "-DINCLUDE_DIRECTORIES:STRING=${LIBCLANG_INCLUDE_DIRS}"
+ "-DLINK_LIBRARIES:STRING=${LIBCLANG_LIBRARIES}"
+ COMPILE_OUTPUT_VARIABLE compile_output
+ RUN_OUTPUT_VARIABLE run_output
+ ARGS ${run_args}
+ )
+
+ if (NOT CHECK_CLANG_RESOURCE_DIR_COMPILE_RESULT)
+ set(CHECK_CLANG_RESOURCE_DIR_NUM_DIAGNOSTICS 1)
+ endif()
+
+ if (CHECK_CLANG_RESOURCE_DIR_NUM_DIAGNOSTICS EQUAL 0)
+ message(STATUS "Detecting libclang builtin headers directory -- success")
+ if (CHECK_CLANG_RESOURCE_DIR)
+ set(CLANG_RESOURCE_DIR "${CHECK_CLANG_RESOURCE_DIR}"
+ CACHE INTERNAL "Clang resource directory.")
+ endif()
+ else()
+ message(STATUS "Detecting Clang resource directory -- fail")
+
+ if (NOT CHECK_CLANG_RESOURCE_DIR_COMPILE_RESULT)
+ message(WARNING "CheckClangResourceDir: failed to compile checker, please report.
+ Compile output:
+ ${compile_output}
+")
+ else()
+ message(WARNING "CheckClangResourceDir: unsupported configuration, please report.
+
+ Check with args: ${run_args}
+ Check output:
+ ${run_output}
+")
+ endif()
+ endif()
+endfunction()