diff --git a/CMakeLists.txt b/CMakeLists.txt index aa0d9016b..e5e5e837c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,12 +113,24 @@ set( QT_VERSION 5.6.0 ) find_package( Qt5 ${QT_VERSION} CONFIG REQUIRED Core Gui Widgets LinguistTools Svg Quick QuickWidgets ) find_package( YAMLCPP 0.5.1 REQUIRED ) find_package( PolkitQt5-1 REQUIRED ) +find_package(ECM 5.18 NO_MODULE) +if( ECM_FOUND ) + set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH}) +endif() option( INSTALL_CONFIG "Install configuration files" ON ) option( WITH_PYTHON "Enable Python modules API (requires Boost.Python)." ON ) option( WITH_PYTHONQT "Enable next generation Python modules API (experimental, requires PythonQt)." OFF ) +option( WITH_KF5Crash "Enable crash reporting with KCrash." ON ) option( BUILD_TESTING "Build the testing tree." ON ) +find_package( KF5 5.18 COMPONENTS CoreAddons Crash OPTIONAL ) +if( KF5Crash_DIR ) # Why not a _FOUND mechanism? + find_package( KF5 5.18 COMPONENTS CoreAddons REQUIRED ) +else() + set( WITH_KF5Crash OFF ) +endif() + if( BUILD_TESTING ) enable_testing() endif () @@ -277,6 +289,7 @@ add_subdirectory( src ) add_feature_info(Python ${WITH_PYTHON} "Python job modules") add_feature_info(PythonQt ${WITH_PYTHONQT} "Python view modules") add_feature_info(Config ${INSTALL_CONFIG} "Install Calamares configuration") +add_feature_info(KCrash ${WITH_KF5Crash} "Crash dumps via KCrash") feature_summary(WHAT ALL) diff --git a/src/calamares/CMakeLists.txt b/src/calamares/CMakeLists.txt index 6129aa553..f47a0a9f5 100644 --- a/src/calamares/CMakeLists.txt +++ b/src/calamares/CMakeLists.txt @@ -49,6 +49,13 @@ SET_TARGET_PROPERTIES(calamares_bin RUNTIME_OUTPUT_NAME calamares ) +if( WITH_KF5Crash ) + set( LINK_LIBRARIES + KF5::CoreAddons + KF5::Crash + ) +endif() + target_link_libraries( calamares_bin PRIVATE ${CALAMARES_LIBRARIES} diff --git a/src/calamares/main.cpp b/src/calamares/main.cpp index a265d1e31..534474337 100644 --- a/src/calamares/main.cpp +++ b/src/calamares/main.cpp @@ -19,11 +19,17 @@ #include "CalamaresApplication.h" +#include "CalamaresConfig.h" #include "kdsingleapplicationguard/kdsingleapplicationguard.h" #include "utils/CalamaresUtils.h" #include "utils/Logger.h" #include "CalamaresConfig.h" +#ifdef WITH_KCRASH +#include +#include +#endif + #include #include #include @@ -33,6 +39,22 @@ main( int argc, char* argv[] ) { CalamaresApplication a( argc, argv ); +#ifdef WITH_KCRASH + KAboutData aboutData( "calamares", + "Calamares", + a.applicationVersion(), + "The universal system installer", + KAboutLicense::GPL_V3, + QString(), + QString(), + "https://calamares.io", + "https://calamares.io/bugs" ); + KAboutData::setApplicationData( aboutData ); + KCrash::initialize(); + KCrash::setCrashHandler(); + // TODO: umount anything in /tmp/calamares-... as an emergency save function +#endif + QCommandLineParser parser; parser.setApplicationDescription( "Distribution-independent installer framework" ); parser.addHelpOption(); diff --git a/src/libcalamares/CalamaresConfig.h.in b/src/libcalamares/CalamaresConfig.h.in index 6fbab422c..cafbe9276 100644 --- a/src/libcalamares/CalamaresConfig.h.in +++ b/src/libcalamares/CalamaresConfig.h.in @@ -10,6 +10,12 @@ //cmakedefines for CMake variables (e.g. for optdepends) go here #cmakedefine WITH_PYTHON + +#cmakedefine WITH_KF5Crash +#ifdef WITH_KF5Crash +#define WITH_KCRASH +#endif + #cmakedefine WITH_PYTHONQT #endif // CALAMARESCONFIG_H diff --git a/src/libcalamaresui/utils/DebugWindow.ui b/src/libcalamaresui/utils/DebugWindow.ui index eb6d5c3e7..c5096b70d 100644 --- a/src/libcalamaresui/utils/DebugWindow.ui +++ b/src/libcalamaresui/utils/DebugWindow.ui @@ -115,6 +115,33 @@ + + + Tools + + + + + + Crash now + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + +