From 5ec69eb58c4d863e9f8f278b7c78d08f8cedd3f4 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 19 May 2023 10:33:13 -0400 Subject: cppdap: Build as part of CMake or use external installation Add `cm3p/` headers to use the selected copy of the library. Co-authored-by: Glen Chung --- CMakeLists.txt | 25 +++++++++++++-- Source/Modules/CMakeBuildUtilities.cmake | 16 ++++++++++ Utilities/cm3p/cppdap/dap.h | 11 +++++++ Utilities/cm3p/cppdap/future.h | 11 +++++++ Utilities/cm3p/cppdap/io.h | 11 +++++++ Utilities/cm3p/cppdap/optional.h | 11 +++++++ Utilities/cm3p/cppdap/protocol.h | 11 +++++++ Utilities/cm3p/cppdap/session.h | 11 +++++++ Utilities/cm3p/cppdap/types.h | 11 +++++++ Utilities/cmThirdParty.h.in | 1 + Utilities/cmcppdap/CMakeLists.txt | 37 ++++++++++++++++++++++ Utilities/cmcppdap/NOTICE | 5 +++ Utilities/cmcppdap/src/jsoncpp_json_serializer.cpp | 2 +- Utilities/cmcppdap/src/jsoncpp_json_serializer.h | 2 +- 14 files changed, 161 insertions(+), 4 deletions(-) create mode 100644 Utilities/cm3p/cppdap/dap.h create mode 100644 Utilities/cm3p/cppdap/future.h create mode 100644 Utilities/cm3p/cppdap/io.h create mode 100644 Utilities/cm3p/cppdap/optional.h create mode 100644 Utilities/cm3p/cppdap/protocol.h create mode 100644 Utilities/cm3p/cppdap/session.h create mode 100644 Utilities/cm3p/cppdap/types.h create mode 100644 Utilities/cmcppdap/CMakeLists.txt create mode 100644 Utilities/cmcppdap/NOTICE diff --git a/CMakeLists.txt b/CMakeLists.txt index 6322aa6..9ec6267 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,6 +131,23 @@ if(CMake_BUILD_LTO) endif() endif() +# Check whether to build cppdap. +if(NOT CMake_TEST_EXTERNAL_CMAKE) + if(NOT DEFINED CMake_ENABLE_CPPDAP) + # cppdap does not compile everywhere. + if(CMAKE_SYSTEM_NAME MATCHES "Windows|Darwin|Linux|BSD|DragonFly|CYGWIN|MSYS" + AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 19.16) + AND NOT (CMAKE_CXX_COMPILER_ID STREQUAL "XLClang" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 16.1) + ) + set(CMake_ENABLE_CPPDAP 1) + else() + set(CMake_ENABLE_CPPDAP 0) + endif() + endif() +else() + set(CMake_ENABLE_CPPDAP 0) +endif() + #----------------------------------------------------------------------- # a macro to deal with system libraries, implemented as a macro # simply to improve readability of the main script @@ -141,7 +158,7 @@ macro(CMAKE_HANDLE_SYSTEM_LIBRARIES) # Allow the user to enable/disable all system utility library options by # defining CMAKE_USE_SYSTEM_LIBRARIES or CMAKE_USE_SYSTEM_LIBRARY_${util}. - set(UTILITIES BZIP2 CURL EXPAT FORM JSONCPP LIBARCHIVE LIBLZMA LIBRHASH LIBUV NGHTTP2 ZLIB ZSTD) + set(UTILITIES BZIP2 CPPDAP CURL EXPAT FORM JSONCPP LIBARCHIVE LIBLZMA LIBRHASH LIBUV NGHTTP2 ZLIB ZSTD) foreach(util IN LISTS UTILITIES) if(NOT DEFINED CMAKE_USE_SYSTEM_LIBRARY_${util} AND DEFINED CMAKE_USE_SYSTEM_LIBRARIES) @@ -169,6 +186,9 @@ macro(CMAKE_HANDLE_SYSTEM_LIBRARIES) # Optionally use system utility libraries. option(CMAKE_USE_SYSTEM_LIBARCHIVE "Use system-installed libarchive" "${CMAKE_USE_SYSTEM_LIBRARY_LIBARCHIVE}") + if(CMake_ENABLE_CPPDAP) + option(CMAKE_USE_SYSTEM_CPPDAP "Use system-installed cppdap" "${CMAKE_USE_SYSTEM_LIBRARY_CPPDAP}") + endif() option(CMAKE_USE_SYSTEM_CURL "Use system-installed curl" "${CMAKE_USE_SYSTEM_LIBRARY_CURL}") option(CMAKE_USE_SYSTEM_EXPAT "Use system-installed expat" "${CMAKE_USE_SYSTEM_LIBRARY_EXPAT}") CMAKE_DEPENDENT_OPTION(CMAKE_USE_SYSTEM_ZLIB "Use system-installed zlib" @@ -182,7 +202,8 @@ macro(CMAKE_HANDLE_SYSTEM_LIBRARIES) CMAKE_DEPENDENT_OPTION(CMAKE_USE_SYSTEM_NGHTTP2 "Use system-installed nghttp2" "${CMAKE_USE_SYSTEM_LIBRARY_NGHTTP2}" "NOT CMAKE_USE_SYSTEM_CURL" ON) option(CMAKE_USE_SYSTEM_FORM "Use system-installed libform" "${CMAKE_USE_SYSTEM_LIBRARY_FORM}") - option(CMAKE_USE_SYSTEM_JSONCPP "Use system-installed jsoncpp" "${CMAKE_USE_SYSTEM_LIBRARY_JSONCPP}") + CMAKE_DEPENDENT_OPTION(CMAKE_USE_SYSTEM_JSONCPP "Use system-installed jsoncpp" + "${CMAKE_USE_SYSTEM_LIBRARY_JSONCPP}" "NOT CMAKE_USE_SYSTEM_CPPDAP" ON) option(CMAKE_USE_SYSTEM_LIBRHASH "Use system-installed librhash" "${CMAKE_USE_SYSTEM_LIBRARY_LIBRHASH}") option(CMAKE_USE_SYSTEM_LIBUV "Use system-installed libuv" "${CMAKE_USE_SYSTEM_LIBRARY_LIBUV}") diff --git a/Source/Modules/CMakeBuildUtilities.cmake b/Source/Modules/CMakeBuildUtilities.cmake index d6e3e88..7d1e7da 100644 --- a/Source/Modules/CMakeBuildUtilities.cmake +++ b/Source/Modules/CMakeBuildUtilities.cmake @@ -376,3 +376,19 @@ if(BUILD_CursesDialog) message(FATAL_ERROR "CMAKE_USE_SYSTEM_FORM in ON but CURSES_FORM_LIBRARY is not set!") endif() endif() + +#--------------------------------------------------------------------- +# Build cppdap library. +if(CMake_ENABLE_CPPDAP) + if(CMAKE_USE_SYSTEM_CPPDAP) + find_package(cppdap CONFIG) + if(NOT cppdap_FOUND) + message(FATAL_ERROR + "CMAKE_USE_SYSTEM_CPPDAP is ON but a cppdap is not found!") + endif() + else() + add_subdirectory(Utilities/cmcppdap) + add_library(cppdap::cppdap ALIAS cmcppdap) + CMAKE_SET_TARGET_FOLDER(cppdap "Utilities/3rdParty") + endif() +endif() diff --git a/Utilities/cm3p/cppdap/dap.h b/Utilities/cm3p/cppdap/dap.h new file mode 100644 index 0000000..84fd332 --- /dev/null +++ b/Utilities/cm3p/cppdap/dap.h @@ -0,0 +1,11 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#pragma once + +/* Use the cppdap library configured for CMake. */ +#include "cmThirdParty.h" +#ifdef CMAKE_USE_SYSTEM_CPPDAP +# include // IWYU pragma: export +#else +# include // IWYU pragma: export +#endif diff --git a/Utilities/cm3p/cppdap/future.h b/Utilities/cm3p/cppdap/future.h new file mode 100644 index 0000000..ad45b6b --- /dev/null +++ b/Utilities/cm3p/cppdap/future.h @@ -0,0 +1,11 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#pragma once + +/* Use the cppdap library configured for CMake. */ +#include "cmThirdParty.h" +#ifdef CMAKE_USE_SYSTEM_CPPDAP +# include // IWYU pragma: export +#else +# include // IWYU pragma: export +#endif diff --git a/Utilities/cm3p/cppdap/io.h b/Utilities/cm3p/cppdap/io.h new file mode 100644 index 0000000..e0401f8 --- /dev/null +++ b/Utilities/cm3p/cppdap/io.h @@ -0,0 +1,11 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#pragma once + +/* Use the cppdap library configured for CMake. */ +#include "cmThirdParty.h" +#ifdef CMAKE_USE_SYSTEM_CPPDAP +# include // IWYU pragma: export +#else +# include // IWYU pragma: export +#endif diff --git a/Utilities/cm3p/cppdap/optional.h b/Utilities/cm3p/cppdap/optional.h new file mode 100644 index 0000000..777184d --- /dev/null +++ b/Utilities/cm3p/cppdap/optional.h @@ -0,0 +1,11 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#pragma once + +/* Use the cppdap library configured for CMake. */ +#include "cmThirdParty.h" +#ifdef CMAKE_USE_SYSTEM_CPPDAP +# include // IWYU pragma: export +#else +# include // IWYU pragma: export +#endif diff --git a/Utilities/cm3p/cppdap/protocol.h b/Utilities/cm3p/cppdap/protocol.h new file mode 100644 index 0000000..da70369 --- /dev/null +++ b/Utilities/cm3p/cppdap/protocol.h @@ -0,0 +1,11 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#pragma once + +/* Use the cppdap library configured for CMake. */ +#include "cmThirdParty.h" +#ifdef CMAKE_USE_SYSTEM_CPPDAP +# include // IWYU pragma: export +#else +# include // IWYU pragma: export +#endif diff --git a/Utilities/cm3p/cppdap/session.h b/Utilities/cm3p/cppdap/session.h new file mode 100644 index 0000000..d4468e7 --- /dev/null +++ b/Utilities/cm3p/cppdap/session.h @@ -0,0 +1,11 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#pragma once + +/* Use the cppdap library configured for CMake. */ +#include "cmThirdParty.h" +#ifdef CMAKE_USE_SYSTEM_CPPDAP +# include // IWYU pragma: export +#else +# include // IWYU pragma: export +#endif diff --git a/Utilities/cm3p/cppdap/types.h b/Utilities/cm3p/cppdap/types.h new file mode 100644 index 0000000..3fc2a88 --- /dev/null +++ b/Utilities/cm3p/cppdap/types.h @@ -0,0 +1,11 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#pragma once + +/* Use the cppdap library configured for CMake. */ +#include "cmThirdParty.h" +#ifdef CMAKE_USE_SYSTEM_CPPDAP +# include // IWYU pragma: export +#else +# include // IWYU pragma: export +#endif diff --git a/Utilities/cmThirdParty.h.in b/Utilities/cmThirdParty.h.in index bd0edb7..da325b1 100644 --- a/Utilities/cmThirdParty.h.in +++ b/Utilities/cmThirdParty.h.in @@ -3,6 +3,7 @@ #pragma once /* Whether CMake is using its own utility libraries. */ +#cmakedefine CMAKE_USE_SYSTEM_CPPDAP #cmakedefine CMAKE_USE_SYSTEM_CURL #cmakedefine CMAKE_USE_SYSTEM_EXPAT #cmakedefine CMAKE_USE_SYSTEM_KWIML diff --git a/Utilities/cmcppdap/CMakeLists.txt b/Utilities/cmcppdap/CMakeLists.txt new file mode 100644 index 0000000..39f72a2 --- /dev/null +++ b/Utilities/cmcppdap/CMakeLists.txt @@ -0,0 +1,37 @@ +# Disable warnings to avoid changing 3rd party code. +if(CMAKE_CXX_COMPILER_ID MATCHES + "^(GNU|LCC|Clang|AppleClang|IBMClang|XLClang|XL|VisualAge|SunPro|HP|Intel|IntelLLVM|NVHPC)$") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w") +elseif(CMAKE_CXX_COMPILER_ID STREQUAL "PathScale") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -woffall") +endif() + +add_library(cmcppdap STATIC + src/content_stream.cpp + src/io.cpp + src/jsoncpp_json_serializer.cpp + src/network.cpp + src/null_json_serializer.cpp + src/protocol_events.cpp + src/protocol_requests.cpp + src/protocol_response.cpp + src/protocol_types.cpp + src/session.cpp + src/socket.cpp + src/typeinfo.cpp + src/typeof.cpp +) + +target_compile_definitions(cmcppdap PRIVATE CPPDAP_JSON_JSONCPP=1) +target_include_directories(cmcppdap PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include) +set_property(TARGET cmcppdap PROPERTY CXX_CLANG_TIDY "") +set_property(TARGET cmcppdap PROPERTY CXX_INCLUDE_WHAT_YOU_USE "") + +target_link_libraries(cmcppdap PRIVATE JsonCpp::JsonCpp) +if(WIN32) + target_link_libraries(cmcppdap PRIVATE ws2_32) +elseif(NOT APPLE) + target_link_libraries(cmcppdap PRIVATE Threads::Threads) +endif() + +install(FILES NOTICE DESTINATION ${CMAKE_DOC_DIR}/cmcppdap) diff --git a/Utilities/cmcppdap/NOTICE b/Utilities/cmcppdap/NOTICE new file mode 100644 index 0000000..5ad206c --- /dev/null +++ b/Utilities/cmcppdap/NOTICE @@ -0,0 +1,5 @@ +'cppdap' is a C++11 library implementation of the Debug Adapter Protocol. +Version as of 2023-01-06 +Copyright Google LLC + +This product includes software developed at Google. diff --git a/Utilities/cmcppdap/src/jsoncpp_json_serializer.cpp b/Utilities/cmcppdap/src/jsoncpp_json_serializer.cpp index 954b0e5..0d037a9 100644 --- a/Utilities/cmcppdap/src/jsoncpp_json_serializer.cpp +++ b/Utilities/cmcppdap/src/jsoncpp_json_serializer.cpp @@ -16,7 +16,7 @@ #include "null_json_serializer.h" -#include +#include #include #include diff --git a/Utilities/cmcppdap/src/jsoncpp_json_serializer.h b/Utilities/cmcppdap/src/jsoncpp_json_serializer.h index 6bdf6a4..93c510b 100644 --- a/Utilities/cmcppdap/src/jsoncpp_json_serializer.h +++ b/Utilities/cmcppdap/src/jsoncpp_json_serializer.h @@ -19,7 +19,7 @@ #include "dap/serialization.h" #include "dap/types.h" -#include +#include namespace dap { namespace json { -- cgit v0.12