diff options
-rw-r--r-- | Repository.mk | 1 | ||||
-rw-r--r-- | desktop/Library_crashreport.mk | 44 | ||||
-rw-r--r-- | desktop/Library_sofficeapp.mk | 12 | ||||
-rw-r--r-- | desktop/Module_desktop.mk | 1 | ||||
-rw-r--r-- | desktop/source/app/crashreport.cxx | 16 | ||||
-rw-r--r-- | desktop/source/app/sofficemain.cxx | 15 | ||||
-rw-r--r-- | include/desktop/crashreport.hxx | 6 | ||||
-rw-r--r-- | include/desktop/dllapi.h | 6 |
8 files changed, 82 insertions, 19 deletions
diff --git a/Repository.mk b/Repository.mk index 0f6fc18afe32..83cfeb081813 100644 --- a/Repository.mk +++ b/Repository.mk @@ -543,6 +543,7 @@ $(eval $(call gb_Helper_register_libraries_for_install,PLAINLIBS_OOO,ooo, \ collator_data \ comphelper \ $(call gb_Helper_optional,DBCONNECTIVITY,dbpool2) \ + $(call gb_Helper_optional,BREAKPAD,crashreport) \ deployment \ deploymentgui \ dict_ja \ diff --git a/desktop/Library_crashreport.mk b/desktop/Library_crashreport.mk new file mode 100644 index 000000000000..5b14519dd6f3 --- /dev/null +++ b/desktop/Library_crashreport.mk @@ -0,0 +1,44 @@ +# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*- +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# + +$(eval $(call gb_Library_Library,crashreport)) + +$(eval $(call gb_Library_set_include,crashreport,\ + $$(INCLUDE) \ + -I$(SRCDIR)/desktop/inc \ +)) + +$(eval $(call gb_Library_use_external,crashreport,breakpad)) + +$(eval $(call gb_Library_add_defs,crashreport,\ + -DCRASHREPORT_DLLIMPLEMENTATION \ +)) + +$(eval $(call gb_Library_add_libs,crashreport,\ + $(if $(filter LINUX %BSD SOLARIS, $(OS)), \ + $(DLOPEN_LIBS) \ + -lpthread \ + ) \ +)) + +$(eval $(call gb_Library_use_libraries,crashreport,\ + comphelper \ + cppu \ + cppuhelper \ + sal \ + salhelper \ + $(gb_UWINAPI) \ +)) + +$(eval $(call gb_Library_add_exception_objects,crashreport,\ + desktop/source/app/crashreport \ +)) + + +# vim: set ts=4 sw=4 et: diff --git a/desktop/Library_sofficeapp.mk b/desktop/Library_sofficeapp.mk index 99fa9795efee..d24f6156d20c 100644 --- a/desktop/Library_sofficeapp.mk +++ b/desktop/Library_sofficeapp.mk @@ -25,6 +25,10 @@ $(eval $(call gb_Library_add_libs,sofficeapp,\ $(eval $(call gb_Library_use_external,sofficeapp,boost_headers)) +ifeq ($(ENABLE_BREAKPAD),TRUE) +$(eval $(call gb_Library_use_external,sofficeapp,breakpad)) +endif + $(eval $(call gb_Library_use_custom_headers,sofficeapp,\ officecfg/registry \ )) @@ -44,6 +48,9 @@ $(eval $(call gb_Library_use_libraries,sofficeapp,\ comphelper \ cppu \ cppuhelper \ + $(if $(filter TRUE,$(ENABLE_BREAKPAD)), \ + crashreport \ + ) \ deploymentmisc \ editeng \ i18nlangtag \ @@ -86,7 +93,6 @@ $(eval $(call gb_Library_add_exception_objects,sofficeapp,\ desktop/source/app/check_ext_deps \ desktop/source/app/cmdlineargs \ desktop/source/app/cmdlinehelp \ - desktop/source/app/crashreport \ desktop/source/app/desktopcontext \ desktop/source/app/desktopresid \ desktop/source/app/dispatchwatcher \ @@ -117,10 +123,6 @@ $(eval $(call gb_Library_add_libs,sofficeapp,\ endif endif -ifeq ($(ENABLE_BREAKPAD),TRUE) -$(eval $(call gb_Library_use_external,sofficeapp,breakpad)) -endif - # LibreOfficeKit bits ifneq ($(filter $(OS),ANDROID IOS MACOSX WNT),) $(eval $(call gb_Library_add_exception_objects,sofficeapp,\ diff --git a/desktop/Module_desktop.mk b/desktop/Module_desktop.mk index c87a777f27f0..619c060fdf16 100644 --- a/desktop/Module_desktop.mk +++ b/desktop/Module_desktop.mk @@ -17,6 +17,7 @@ $(eval $(call gb_Module_add_targets,desktop,\ Library_deploymentmisc \ Library_offacc \ Library_sofficeapp \ + $(if $(ENABLE_BREAKPAD),Library_crashreport) \ $(if $(ENABLE_HEADLESS),,Library_spl) \ Package_branding \ $(if $(CUSTOM_BRAND_DIR),Package_branding_custom) \ diff --git a/desktop/source/app/crashreport.cxx b/desktop/source/app/crashreport.cxx index 4065b4dd5d9f..1ded7f0ed80e 100644 --- a/desktop/source/app/crashreport.cxx +++ b/desktop/source/app/crashreport.cxx @@ -16,15 +16,6 @@ osl::Mutex CrashReporter::maMutex; #if HAVE_FEATURE_BREAKPAD -namespace { - -const char* getIniFileName() -{ - return "/tmp/dump.ini"; -} - -} - void CrashReporter::AddKeyValue(const OUString& rKey, const OUString& rValue) { osl::MutexGuard aGuard(maMutex); @@ -33,6 +24,13 @@ void CrashReporter::AddKeyValue(const OUString& rKey, const OUString& rValue) ini_file << rtl::OUStringToOString(rKey, RTL_TEXTENCODING_UTF8).getStr() << "="; ini_file << rtl::OUStringToOString(rValue, RTL_TEXTENCODING_UTF8).getStr() << "\n"; } + #endif +const char* CrashReporter::getIniFileName() +{ + // TODO: we need a generic solution for the location + return "/tmp/dump.ini"; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/desktop/source/app/sofficemain.cxx b/desktop/source/app/sofficemain.cxx index e89dcdc3e0da..742bbba879cd 100644 --- a/desktop/source/app/sofficemain.cxx +++ b/desktop/source/app/sofficemain.cxx @@ -44,6 +44,8 @@ #include <unotools/mediadescriptor.hxx> #if HAVE_FEATURE_BREAKPAD +#include <fstream> +#include <desktop/crashreport.hxx> #if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID #include <client/linux/handler/exception_handler.h> @@ -74,10 +76,13 @@ OString getLibDir() #if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID static bool dumpCallback(const google_breakpad::MinidumpDescriptor& descriptor, void* /*context*/, bool succeeded) { + std::string ini_path = CrashReporter::getIniFileName(); + std::ofstream minidump_file(ini_path, std::ios_base::app); + minidump_file << "DumpFile=" << descriptor.path() << "\n";; + minidump_file.close(); // send the minidump to the server (not yet implemented) SAL_WARN("destkop.crashreport", "minidump generated: " << descriptor.path()); - OString aCommand = getLibDir().copy(7) + "/minidump_upload -p LibreOffice -v \"" LIBO_VERSION_DOTTED "\" "; - aCommand = aCommand + descriptor.path() + " http://libreofficecrash.org/submit"; + OString aCommand = getLibDir().copy(7) + "/minidump_upload " + ini_path.c_str(); int retVal = std::system(aCommand.getStr()); SAL_WARN_IF(retVal != 0, "destkop.crashreport", "Failed to upload minidump. Error Code: " << retVal); return succeeded; @@ -90,6 +95,12 @@ extern "C" int DESKTOP_DLLPUBLIC soffice_main() #if HAVE_FEATURE_BREAKPAD //limit the amount of code that needs to be executed before the crash reporting + std::string ini_path = CrashReporter::getIniFileName(); + std::ofstream minidump_file(ini_path, std::ios_base::trunc); + minidump_file << "ProductName=LibreOffice\n"; + minidump_file << "Version=" << LIBO_VERSION_DOTTED << "\n"; + minidump_file.close(); + #if defined( UNX ) && !defined MACOSX && !defined IOS && !defined ANDROID google_breakpad::MinidumpDescriptor descriptor("/tmp"); google_breakpad::ExceptionHandler eh(descriptor, nullptr, dumpCallback, nullptr, true, -1); diff --git a/include/desktop/crashreport.hxx b/include/desktop/crashreport.hxx index 02cc5a05a5ac..b9bbb7ce01bf 100644 --- a/include/desktop/crashreport.hxx +++ b/include/desktop/crashreport.hxx @@ -27,14 +27,14 @@ * * AdapterDeviceId * */ -class DESKTOP_DLLPUBLIC CrashReporter +class CRASHREPORT_DLLPUBLIC CrashReporter { public: static void AddKeyValue(const OUString& rKey, const OUString& rValue); -private: + static const char* getIniFileName(); - static std::map<OUString, OUString> maValueMap; +private: static osl::Mutex maMutex; }; diff --git a/include/desktop/dllapi.h b/include/desktop/dllapi.h index ebc75f1214ac..fd23aeb7f973 100644 --- a/include/desktop/dllapi.h +++ b/include/desktop/dllapi.h @@ -19,6 +19,12 @@ # define DESKTOP_DLLPUBLIC SAL_DLLPUBLIC_IMPORT #endif +#if defined(CRASHREPORT_DLLIMPLEMENTATION) +# define CRASHREPORT_DLLPUBLIC SAL_DLLPUBLIC_EXPORT +#else +# define CRASHREPORT_DLLPUBLIC SAL_DLLPUBLIC_IMPORT +#endif + #endif /* vim: set shiftwidth=4 softtabstop=4 expandtab: */ |