aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGyusun Yeom <omniavinco@gmail.com>2020-12-17 17:16:41 +0900
committerGitHub <noreply@github.com>2020-12-17 00:16:41 -0800
commit1c33981078fdd7baef4c6a201bff9f7a27233871 (patch)
tree634dbdd791c280d2fd3e65e040e31294911ceeef
parent4177474d9716cd7e04c6a2489800923903a50eef (diff)
downloadvcpkg-1c33981078fdd7baef4c6a201bff9f7a27233871.tar.gz
vcpkg-1c33981078fdd7baef4c6a201bff9f7a27233871.zip
[breakpad] Support breakpad_client on Linux & macOS (#15092)
-rw-r--r--ports/breakpad/CMakeLists.txt83
-rw-r--r--ports/breakpad/CONTROL1
-rw-r--r--ports/breakpad/check_getcontext.cc9
-rw-r--r--ports/breakpad/portfile.cmake17
4 files changed, 81 insertions, 29 deletions
diff --git a/ports/breakpad/CMakeLists.txt b/ports/breakpad/CMakeLists.txt
index 113002943..352cefde6 100644
--- a/ports/breakpad/CMakeLists.txt
+++ b/ports/breakpad/CMakeLists.txt
@@ -21,8 +21,16 @@ option(INSTALL_HEADERS "Install header files" ${DEFAULT_INSTALL_HEADERS})
# libbreakpad target
file(GLOB_RECURSE LIBBREAKPAD_SOURCES src/processor/*.cc)
-list(FILTER LIBBREAKPAD_SOURCES EXCLUDE REGEX
- "_unittest|synth_minidump|/tests|/testdata|/linux|/mac|/android|/solaris|microdump_stackwalk|minidump_dump|minidump_stackwalk")
+if(WIN32)
+ list(FILTER LIBBREAKPAD_SOURCES EXCLUDE REGEX
+ "_unittest|synth_minidump|/tests|/testdata|/linux|/mac|/android|/solaris|microdump_stackwalk|minidump_dump|minidump_stackwalk")
+elseif(APPLE)
+ list(FILTER LIBBREAKPAD_SOURCES EXCLUDE REGEX
+ "_unittest|synth_minidump|/tests|/testdata|/linux|/windows|/android|/solaris|microdump_stackwalk|minidump_dump|minidump_stackwalk")
+else()
+ list(FILTER LIBBREAKPAD_SOURCES EXCLUDE REGEX
+ "_unittest|synth_minidump|/tests|/testdata|/mac|/windows|/android|/solaris|microdump_stackwalk|minidump_dump|minidump_stackwalk")
+endif()
find_library(LIBDISASM_LIB NAMES libdisasmd libdisasm)
@@ -37,35 +45,50 @@ target_include_directories(libbreakpad
set(TARGETS libbreakpad)
if(WIN32)
- # libbreakpad_client target does not currently work on non-windows
- if(WIN32)
- file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES src/client/windows/*.cc src/common/windows/*.cc)
- include_directories("$ENV{VSINSTALLDIR}/DIA SDK/include")
- elseif(APPLE)
- add_definitions(-DHAVE_MACH_O_NLIST_H)
- file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES src/client/mac/*.cc src/common/mac/*.cc)
- else()
- add_definitions(-DHAVE_A_OUT_H)
- file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES src/client/linux/*.cc src/common/linux/*.cc)
- endif()
- file(GLOB LIBBREAKPAD_COMMON_SOURCES src/common/*.cc src/common/*.c src/client/*.cc)
- list(APPEND LIBBREAKPAD_CLIENT_SOURCES ${LIBBREAKPAD_COMMON_SOURCES})
- list(FILTER LIBBREAKPAD_CLIENT_SOURCES EXCLUDE REGEX "/tests|/unittests|_unittest")
- if(WIN32)
- list(FILTER LIBBREAKPAD_CLIENT_SOURCES EXCLUDE REGEX "language.cc|path_helper.cc|stabs_to_module.cc|stabs_reader.cc|minidump_file_writer.cc")
+ file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES src/client/windows/*.cc src/common/windows/*.cc)
+ include_directories("$ENV{VSINSTALLDIR}/DIA SDK/include")
+elseif(APPLE)
+ add_definitions(-DHAVE_MACH_O_NLIST_H)
+ file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES src/client/mac/*.cc src/common/mac/*.cc)
+ list(APPEND LIBBREAKPAD_CLIENT_SOURCES src/common/mac/MachIPC.mm)
+else()
+ add_definitions(-DHAVE_A_OUT_H)
+ file(GLOB_RECURSE LIBBREAKPAD_CLIENT_SOURCES src/client/linux/*.cc src/common/linux/*.cc)
+endif()
+file(GLOB LIBBREAKPAD_COMMON_SOURCES src/common/*.cc src/common/*.c src/client/*.cc)
+list(APPEND LIBBREAKPAD_CLIENT_SOURCES ${LIBBREAKPAD_COMMON_SOURCES})
+list(FILTER LIBBREAKPAD_CLIENT_SOURCES EXCLUDE REGEX "/sender|/tests|/unittests|/testcases|_unittest|_test")
+if(WIN32)
+ list(FILTER LIBBREAKPAD_CLIENT_SOURCES EXCLUDE REGEX "language.cc|path_helper.cc|stabs_to_module.cc|stabs_reader.cc|minidump_file_writer.cc")
+elseif(NOT APPLE)
+ try_compile(HAVE_GETCONTEXT ${CMAKE_BINARY_DIR}/check_getcontext ${CMAKE_CURRENT_LIST_DIR}/check_getcontext.cc OUTPUT_VARIABLE BUILD_OUT)
+ if (NOT HAVE_GETCONTEXT)
+ enable_language(ASM)
+ list(APPEND LIBBREAKPAD_CLIENT_SOURCES src/common/linux/breakpad_getcontext.S)
endif()
+endif()
- add_library(libbreakpad_client ${LIBBREAKPAD_CLIENT_SOURCES})
+add_library(libbreakpad_client ${LIBBREAKPAD_CLIENT_SOURCES})
+if(WIN32)
target_link_libraries(libbreakpad_client PRIVATE wininet.lib)
-
- target_include_directories(libbreakpad_client
- PUBLIC
- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
- $<INSTALL_INTERFACE:include>
- )
- list(APPEND TARGETS libbreakpad_client)
+elseif(APPLE)
+ find_library(CoreFoundation_FRAMEWORK CoreFoundation)
+ target_link_libraries(libbreakpad_client PRIVATE ${CoreFoundation_FRAMEWORK})
+else()
+ find_library(PTHREAD_LIBRARIES pthread)
+ target_link_libraries(libbreakpad_client PRIVATE ${PTHREAD_LIBRARIES})
+ if (HAVE_GETCONTEXT)
+ target_compile_definitions(libbreakpad_client PRIVATE HAVE_GETCONTEXT=1)
+ endif()
endif()
+target_include_directories(libbreakpad_client
+ PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
+ $<INSTALL_INTERFACE:include>
+)
+list(APPEND TARGETS libbreakpad_client)
+
# installation
install(TARGETS ${TARGETS} EXPORT unofficial-breakpad-targets
RUNTIME DESTINATION bin
@@ -77,9 +100,15 @@ if(INSTALL_HEADERS)
if(WIN32)
set(HEADER_EXCLUDE_REGEX "/apple|/ios|/linux|/mac|/solaris|/android|/dwarf|/tests|/testdata|/unittests")
elseif(APPLE)
- set(HEADER_EXCLUDE_REGEX "/apple|/ios|/linux|/windows|/solaris|/android|/dwarf|/tests|/testdata|/unittests|/*proj|/gcov")
+ set(HEADER_EXCLUDE_REGEX "/apple|/ios|/linux|/windows|/solaris|/android|/dwarf|/tests|/testdata|/unittests|/sender|/testapp|/*proj|/gcov")
else()
set(HEADER_EXCLUDE_REGEX "/apple|/ios|/client/linux/data|/client/linux/sender|/windows|/mac|/solaris|/android|/dwarf|/tests|/testdata|/unittests")
+ install(
+ DIRECTORY src/third_party/lss
+ DESTINATION include/third_party
+ FILES_MATCHING PATTERN "*.h"
+ REGEX "${HEADER_EXCLUDE_REGEX}" EXCLUDE
+ )
endif()
install(
DIRECTORY src/client src/common src/google_breakpad
diff --git a/ports/breakpad/CONTROL b/ports/breakpad/CONTROL
index ccafe9918..110b225b0 100644
--- a/ports/breakpad/CONTROL
+++ b/ports/breakpad/CONTROL
@@ -1,5 +1,6 @@
Source: breakpad
Version: 2020-09-14
+Port-Version: 1
Build-Depends: libdisasm
Homepage: https://github.com/google/breakpad
Description: a set of client and server components which implement a crash-reporting system.
diff --git a/ports/breakpad/check_getcontext.cc b/ports/breakpad/check_getcontext.cc
new file mode 100644
index 000000000..762147479
--- /dev/null
+++ b/ports/breakpad/check_getcontext.cc
@@ -0,0 +1,9 @@
+#include <ucontext.h>
+#include <cstddef>
+
+int main() {
+ ucontext_t context;
+ getcontext(&context);
+
+ return 0;
+}
diff --git a/ports/breakpad/portfile.cmake b/ports/breakpad/portfile.cmake
index 27761bc21..aafbb4bc9 100644
--- a/ports/breakpad/portfile.cmake
+++ b/ports/breakpad/portfile.cmake
@@ -3,14 +3,27 @@ vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO google/breakpad
- REF 9c4671f2e3a63c0f155d9b2511192d0b5fa7f760 # accessed on 2020-09-14
+ REF 9c4671f2e3a63c0f155d9b2511192d0b5fa7f760 # accessed on 2020-09-14
SHA512 4c9ed9b675a772f9a6a84692865381130901820cb395b725511e7a9e2cbf4aaa5212a9ef5f87086baf58bb9d729082232b564bd827a205f87b5c1ffc1c53892a
HEAD_REF master
PATCHES
fix-unique_ptr.patch
)
-file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH})
+if(VCPKG_HOST_IS_LINUX)
+ vcpkg_from_git(
+ OUT_SOURCE_PATH LSS_SOURCE_PATH
+ URL https://chromium.googlesource.com/linux-syscall-support
+ REF 7bde79cc274d06451bf65ae82c012a5d3e476b5a
+ )
+
+ file(RENAME ${LSS_SOURCE_PATH} ${SOURCE_PATH}/src/third_party/lss)
+endif()
+
+file(
+ COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt ${CMAKE_CURRENT_LIST_DIR}/check_getcontext.cc
+ DESTINATION ${SOURCE_PATH}
+)
vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH}