From 3f4a0d5370ae6c34afe180df96add3b8522f4af1 Mon Sep 17 00:00:00 2001 From: mattkae Date: Wed, 11 May 2022 09:23:58 -0400 Subject: initial commit --- elpa/irony-20220110.849/server/src/CMakeLists.txt | 111 ++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 elpa/irony-20220110.849/server/src/CMakeLists.txt (limited to 'elpa/irony-20220110.849/server/src/CMakeLists.txt') diff --git a/elpa/irony-20220110.849/server/src/CMakeLists.txt b/elpa/irony-20220110.849/server/src/CMakeLists.txt new file mode 100644 index 0000000..c516e70 --- /dev/null +++ b/elpa/irony-20220110.849/server/src/CMakeLists.txt @@ -0,0 +1,111 @@ +# XXX: if there are issues +# due to https://reviews.llvm.org/D30911 / SVN Revision 298424 +# then use the fallback when LLVM_VERSION VERSION_LESS 5.0.1 +find_package(Clang) + +if (Clang_FOUND) + # XXX: at least since Clang 8.0.0 + # it's looks like the 'libclang' IMPORTED target + # does not specify the following target property: + # INTERFACE_INCLUDE_DIRECTORIES ${CLANG_INCLUDE_DIRS} + # which is confirmed by https://github.com/Sarcasm/irony-mode/issues/530 + # so we work around this, + # but ideally Clang upstream should export fully usable IMPORTED targets + add_library(irony_libclang INTERFACE) + target_link_libraries(irony_libclang INTERFACE libclang) + target_include_directories(irony_libclang INTERFACE ${CLANG_INCLUDE_DIRS}) + + get_property(IRONY_CLANG_EXECUTABLE TARGET clang PROPERTY LOCATION) + execute_process( + COMMAND "${IRONY_CLANG_EXECUTABLE}" -print-resource-dir + OUTPUT_VARIABLE CLANG_RESOURCE_DIR + OUTPUT_STRIP_TRAILING_WHITESPACE + ) +else() + # fallback to historically FindLibClang.cmake + # and -resource-dir guess mecanism + include(CheckClangResourceDir) + find_package(LibClang REQUIRED) + check_clang_resource_dir() +endif() + +# not to be taken as a module-definition file to link on Windows +set_source_files_properties(Commands.def PROPERTIES HEADER_FILE_ONLY TRUE) + +if(MSVC) + # irony-server uses some code that breaks when iterator debugging is enabled + # + # The culprit is CommandLineArgumentParser who initialize its member + # 'Position', of type 'std::string::const_iterator', to 'Input.begin() - 1'. + # With checked iterator the begin() - 1 breaks in debug build. + add_definitions(/D_ITERATOR_DEBUG_LEVEL=0) +endif() + +add_executable(irony-server + support/CommandLineParser.cpp + support/CommandLineParser.h + support/iomanip_quoted.h + support/NonCopyable.h + support/CIndex.h + support/TemporaryFile.cpp + support/TemporaryFile.h + + Command.cpp + Commands.def + Command.h + CompDBCache.h + CompDBCache.cpp + Irony.cpp + Irony.h + TUManager.cpp + TUManager.h + + main.cpp) + +irony_target_set_cxx_standard(irony-server) + +target_include_directories(irony-server PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) + +# retrieve the package version from irony.el +function(irony_find_package_version OUTPUT_VAR) + # this is a hack that force CMake to reconfigure, it is necessary to see if + # the version in irony.el has changed, this is not possible to add the + # definitions at build time + configure_file(${PROJECT_SOURCE_DIR}/../irony.el + ${CMAKE_CURRENT_BINARY_DIR}/irony.el + COPYONLY) + + set(version_header "\;\; Version: ") + file(STRINGS ${CMAKE_CURRENT_BINARY_DIR}/irony.el version + LIMIT_COUNT 1 + REGEX "^${version_header}*") + + if (NOT version) + message (FATAL_ERROR "couldn't find irony.el's version header!") + endif() + + string(LENGTH ${version_header} version_header_length) + string(SUBSTRING ${version} ${version_header_length} -1 package_version) + set(${OUTPUT_VAR} ${package_version} PARENT_SCOPE) +endfunction() + +irony_find_package_version(IRONY_PACKAGE_VERSION) +message(STATUS "Irony package version is '${IRONY_PACKAGE_VERSION}'") + +set_source_files_properties(main.cpp + PROPERTIES + COMPILE_DEFINITIONS IRONY_PACKAGE_VERSION=\"${IRONY_PACKAGE_VERSION}\") + +if (CLANG_RESOURCE_DIR) + # look for CLANG_RESOURCE_DIR_DIR usage in the code for an explanation + set_source_files_properties(TUManager.cpp + PROPERTIES + COMPILE_DEFINITIONS CLANG_RESOURCE_DIR=\"${CLANG_RESOURCE_DIR}\") +endif() + +target_link_libraries(irony-server irony_libclang) + +set_target_properties(irony-server + PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}) + +install(TARGETS irony-server DESTINATION ${CMAKE_INSTALL_BINDIR}) -- cgit v1.2.1