diff --git a/CMake/FindBreakpad.cmake b/CMake/FindBreakpad.cmake index 1438613ba8..1d9472a695 100644 --- a/CMake/FindBreakpad.cmake +++ b/CMake/FindBreakpad.cmake @@ -1,111 +1,126 @@ +# Attempts to find a build directory of the Breakpad project (as provided by the MITK superbuild) +# +# Fills the following variables: +# Breakpad_FOUND +# Breakpad_INCLUDE_DIR +# Breakpad_LIBRARIES +# function(checkWindowsCompilerFlags) # TODO simplify this with foreach and some string functions set (WINDOWS_CXX_FLAGS_OK_ZI 0) if ( CMAKE_CXX_FLAGS_DEBUG MATCHES .*/Zi.* ) set(WINDOWS_CXX_FLAGS_OK_ZI 1) endif() if ( CMAKE_CXX_FLAGS_RELEASE MATCHES .*/Zi.* ) set(WINDOWS_CXX_FLAGS_OK_ZI 1) endif() if ( CMAKE_CXX_FLAGS MATCHES .*/Zi.* ) set(WINDOWS_CXX_FLAGS_OK_ZI 1) endif() set (WINDOWS_C_FLAGS_OK_ZI 0) if ( CMAKE_C_FLAGS_DEBUG MATCHES .*/Zi.* ) set(WINDOWS_C_FLAGS_OK_ZI 1) endif() if ( CMAKE_C_FLAGS_RELEASE MATCHES .*/Zi.* ) set(WINDOWS_C_FLAGS_OK_ZI 1) endif() if ( CMAKE_C_FLAGS MATCHES .*/Zi.* ) set(WINDOWS_C_FLAGS_OK_ZI 1) endif() if (NOT WINDOWS_CXX_FLAGS_OK_ZI) message(WARNING "When using the breakpad crash reporting module, you should use the /Zi flag in CMAKE_CXX_FLAGS (_RELEASE)") endif() if (NOT WINDOWS_C_FLAGS_OK_ZI) message(WARNING "When using the breakpad crash reporting module, you should use the /Zi flag in CMAKE_C_FLAGS (_RELEASE)") endif() endfunction() function(checkLinuxCompilerFlags) # TODO simplify this with foreach and some string functions set (LINUX_CXX_FLAGS_OK_G 0) if ( CMAKE_CXX_FLAGS_DEBUG MATCHES .*-g.* ) set(LINUX_CXX_FLAGS_OK_G 1) endif() if ( CMAKE_CXX_FLAGS_RELEASE MATCHES .*-g.* ) set(LINUX_CXX_FLAGS_OK_G 1) endif() if ( CMAKE_CXX_FLAGS MATCHES .*-g.* ) set(LINUX_CXX_FLAGS_OK_G 1) endif() set (LINUX_C_FLAGS_OK_G 0) if ( CMAKE_C_FLAGS_DEBUG MATCHES .*-g.* ) set(LINUX_C_FLAGS_OK_G 1) endif() if ( CMAKE_C_FLAGS_RELEASE MATCHES .*-g.* ) set(LINUX_C_FLAGS_OK_G 1) endif() if ( CMAKE_C_FLAGS MATCHES .*-g.* ) set(LINUX_C_FLAGS_OK_G 1) endif() if (NOT LINUX_CXX_FLAGS_OK_G) message(WARNING "When using the breakpad crash reporting module, you should use the -g flag in CMAKE_CXX_FLAGS (_RELEASE)") endif() if (NOT LINUX_C_FLAGS_OK_G) message(WARNING "When using the breakpad crash reporting module, you should use the -g flag in CMAKE_C_FLAGS (_RELEASE)") endif() endfunction() # -------------------- end functions ---------------------------- find_path(Breakpad_INCLUDE_DIR breakpad_googletest_includes.h DOC "Directory breakpad/src/" PATHS ${Breakpad_SRC}/src ${Breakpad_DIR}) if(CMAKE_SYSTEM MATCHES "Windows") message(STATUS "Checking Windows build requirements for breakpad") checkWindowsCompilerFlags() # without debug information, Breakpad makes not much sense, so inform developer find_library(Breakpad_CLIENT_LIB crash_generation_client PATHS ${Breakpad_SRC}/src ${Breakpad_DIR} PATH_SUFFIXES Release Debug) find_library(Breakpad_SERVER_LIB crash_generation_server PATHS ${Breakpad_SRC}/src ${Breakpad_DIR} PATH_SUFFIXES Release Debug) find_library(Breakpad_EXCEPTIONHANDLER_LIB exception_handler PATHS ${Breakpad_SRC}/src ${Breakpad_DIR} PATH_SUFFIXES Release Debug) find_library(Breakpad_COMMON_LIB common PATHS ${Breakpad_SRC}/src ${Breakpad_DIR} PATH_SUFFIXES Release Debug) set(Breakpad_LIBRARIES ${Breakpad_CLIENT_LIB} ${Breakpad_SERVER_LIB} ${Breakpad_EXCEPTIONHANDLER_LIB} ${Breakpad_COMMON_LIB} ) elseif(CMAKE_SYSTEM MATCHES "Linux") message(STATUS "Checking Linux build requirements for breakpad") checkLinuxCompilerFlags() # without debug information, Breakpad makes not much sense, so inform developer find_library(Breakpad_CLIENT_LIB breakpad_client PATHS ${Breakpad_SRC}/src ${Breakpad_DIR}) set(Breakpad_LIBRARIES ${Breakpad_CLIENT_LIB} ) else() message(FATAL_ERROR "Unsupported platform for Breakpad crash reporting: ${CMAKE_SYSTEM}") endif() -message(STATUS "FindBreakpad...") -message(STATUS " .. include at ${Breakpad_INCLUDE_DIR}") -message(STATUS " .. link libraries ${Breakpad_LIBRARIES}") +if (Breakpad_LIBRARIES MATCHES "NOTFOUND") + set(Breakpad_FOUND FALSE) +elseif(Breakpad_INCLUDE_DIR MATCHES "NOTFOUND") + set(Breakpad_FOUND FALSE) +else() + set(Breakpad_FOUND TRUE) +endif() + +#message(STATUS "FindBreakpad... found it: ${Breakpad_FOUND}") +#message(STATUS " .. include at ${Breakpad_INCLUDE_DIR}") +#message(STATUS " .. link libraries ${Breakpad_LIBRARIES}") diff --git a/Modules/BreakpadCrashReporting/CMakeLists.txt b/Modules/BreakpadCrashReporting/CMakeLists.txt index 9d55f17407..9cbdebf3fb 100644 --- a/Modules/BreakpadCrashReporting/CMakeLists.txt +++ b/Modules/BreakpadCrashReporting/CMakeLists.txt @@ -1,28 +1,31 @@ # TODOs # LATER nicer separation of Linux/Window/.. code # OK test should check existence of dump file # - find nice script to use linux symbol writer tool dump_.. on all relevant libraries # - update documentation # OK check buildtype (O2/-g/..) in cmake -# - use the same library structure in "our" cmake script as google uses in their build -# - otherwise we cannot switch between custom-built versions of breakpad and our superbuild version +# OK use the same library structure in "our" cmake script as google uses in their build +# OK otherwise we cannot switch between custom-built versions of breakpad and our superbuild version +# [optional] add install step to our Breakpad build -if(MITK_USE_BREAKPAD) +if(MITK_USE_BREAKPAD) # from top-level CMakeLists.txt find_package(Breakpad) + if (NOT Breakpad_FOUND) + message(FATAL_ERROR "MITK_USE_BREAKPAD was set but Breakpad build cannot be found. Plaese check CMake cache variables regarding Breakpad") + endif() MITK_CREATE_MODULE(BreakpadCrashReporting INTERNAL_INCLUDE_DIRS ${Breakpad_INCLUDE_DIR} ADDITIONAL_LIBS ${Breakpad_LIBRARIES} PACKAGE_DEPENDS QT ) if(CMAKE_SYSTEM MATCHES "Windows") add_executable(CrashReportingServer WIN32 mitkCrashReportingServer.cpp ${SERVER_MOC_CPP}) - target_link_libraries(CrashReportingServer ${ALL_LIBRARIES} ${QT_QTMAIN_LIBRARY} BreakpadCrashReporting) endif() add_subdirectory(Testing) endif(MITK_USE_BREAKPAD)