Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package kf6-kcrash for openSUSE:Factory checked in at 2026-06-16 13:48:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kf6-kcrash (Old) and /work/SRC/openSUSE:Factory/.kf6-kcrash.new.1981 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kf6-kcrash" Tue Jun 16 13:48:58 2026 rev:28 rq:1358875 version:6.27.0 Changes: -------- --- /work/SRC/openSUSE:Factory/kf6-kcrash/kf6-kcrash.changes 2026-05-11 16:55:55.489300364 +0200 +++ /work/SRC/openSUSE:Factory/.kf6-kcrash.new.1981/kf6-kcrash.changes 2026-06-16 13:54:14.459281104 +0200 @@ -1,0 +2,12 @@ +Sat Jun 6 11:42:07 UTC 2026 - Christophe Marin <[email protected]> + +- Update to 6.27.0 + * New feature release + * For more details please see: + * https://kde.org/announcements/frameworks/6/6.27.0 +- Changes since 6.26.0: + * Update dependency version to 6.27.0 + * Add Android Sentry integration + * Update version to 6.27.0 + +------------------------------------------------------------------- Old: ---- kcrash-6.26.0.tar.xz kcrash-6.26.0.tar.xz.sig New: ---- kcrash-6.27.0.tar.xz kcrash-6.27.0.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kf6-kcrash.spec ++++++ --- /var/tmp/diff_new_pack.f8Yqni/_old 2026-06-16 13:54:15.111308390 +0200 +++ /var/tmp/diff_new_pack.f8Yqni/_new 2026-06-16 13:54:15.115308558 +0200 @@ -19,11 +19,11 @@ %define qt6_version 6.9.0 %define rname kcrash -# Full KF6 version (e.g. 6.26.0) +# Full KF6 version (e.g. 6.27.0) %{!?_kf6_version: %global _kf6_version %{version}} %bcond_without released Name: kf6-kcrash -Version: 6.26.0 +Version: 6.27.0 Release: 0 Summary: An application crash handler License: LGPL-2.1-or-later ++++++ kcrash-6.26.0.tar.xz -> kcrash-6.27.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcrash-6.26.0/.gitlab-ci.yml new/kcrash-6.27.0/.gitlab-ci.yml --- old/kcrash-6.26.0/.gitlab-ci.yml 2026-05-01 13:52:37.000000000 +0200 +++ new/kcrash-6.27.0/.gitlab-ci.yml 2026-06-05 17:46:11.000000000 +0200 @@ -10,5 +10,6 @@ - /gitlab-templates/alpine-qt6.yml - /gitlab-templates/freebsd-qt6.yml - /gitlab-templates/windows-qt6.yml + - /gitlab-templates/android-qt6.yml - /gitlab-templates/xml-lint.yml - /gitlab-templates/yaml-lint.yml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcrash-6.26.0/CMakeLists.txt new/kcrash-6.27.0/CMakeLists.txt --- old/kcrash-6.26.0/CMakeLists.txt 2026-05-01 13:52:37.000000000 +0200 +++ new/kcrash-6.27.0/CMakeLists.txt 2026-06-05 17:46:11.000000000 +0200 @@ -1,14 +1,14 @@ cmake_minimum_required(VERSION 3.29) -set(KF_VERSION "6.26.0") # handled by release scripts -set(KF_DEP_VERSION "6.26.0") # handled by release scripts +set(KF_VERSION "6.27.0") # handled by release scripts +set(KF_DEP_VERSION "6.27.0") # handled by release scripts project(KCrash VERSION ${KF_VERSION}) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) include(FeatureSummary) -find_package(ECM 6.26.0 NO_MODULE) +find_package(ECM 6.27.0 NO_MODULE) set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://commits.kde.org/extra-cmake-modules") feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES) @@ -59,9 +59,13 @@ ecm_set_disabled_deprecation_versions( QT 6.11.0 - KF 6.23.0 + KF 6.26.0 ) +if(ANDROID) + find_package(Gradle REQUIRED) +endif() + add_subdirectory(src) if(BUILD_TESTING) add_subdirectory(autotests) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcrash-6.26.0/LICENSES/BSD-2-Clause.txt new/kcrash-6.27.0/LICENSES/BSD-2-Clause.txt --- old/kcrash-6.26.0/LICENSES/BSD-2-Clause.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/kcrash-6.27.0/LICENSES/BSD-2-Clause.txt 2026-06-05 17:46:11.000000000 +0200 @@ -0,0 +1,9 @@ +Copyright (c) <year> <owner> + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcrash-6.26.0/StaticMessages.sh new/kcrash-6.27.0/StaticMessages.sh --- old/kcrash-6.26.0/StaticMessages.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/kcrash-6.27.0/StaticMessages.sh 2026-06-05 17:46:11.000000000 +0200 @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +# SPDX-FileCopyrightText: 2021 Volker Krause <[email protected]> +# SPDX-License-Identifier: CC0-1.0 + +# The name of catalog we create (without the.pot extension) +# Required by scripty +FILENAME="kcrash-android" + +# relative path to the Android resource folder +ANDROID_RES_DIR="src/android/res" + +# Called by scripty for message extraction +# First parameter will be the path of the pot file we have to create, includes $FILENAME +function export_pot_file +{ + mkdir outdir + ANSI_COLORS_DISABLED=1 a2po export --android $ANDROID_RES_DIR --gettext outdir + mv outdir/template.pot $1 + rm -rf outdir + rm -f rc.cpp +} + +# Called by scripty for merging messages +# First parameter will be a path that will contain several .po files with the format LANG.po +function import_po_files +{ + podir=$1 + # Android doesn't support languages with an @ + find "$podir" -type f -name "*@*.po" -delete + # drop obsolete messages, as Babel cannot parse them -- see: + # https://github.com/python-babel/babel/issues/206 + # https://github.com/python-babel/babel/issues/566 + find "$podir" -name '*.po' -exec msgattrib --no-obsolete -o {} {} \; + ANSI_COLORS_DISABLED=1 a2po import --ignore-fuzzy --android $ANDROID_RES_DIR --gettext $podir +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcrash-6.26.0/metainfo.yaml new/kcrash-6.27.0/metainfo.yaml --- old/kcrash-6.26.0/metainfo.yaml 2026-05-01 13:52:37.000000000 +0200 +++ new/kcrash-6.27.0/metainfo.yaml 2026-06-05 17:46:11.000000000 +0200 @@ -7,6 +7,7 @@ - name: FreeBSD - name: macOS - name: Windows + - name: Android portingAid: false deprecated: false release: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcrash-6.26.0/src/CMakeLists.txt new/kcrash-6.27.0/src/CMakeLists.txt --- old/kcrash-6.26.0/src/CMakeLists.txt 2026-05-01 13:52:37.000000000 +0200 +++ new/kcrash-6.27.0/src/CMakeLists.txt 2026-06-05 17:46:11.000000000 +0200 @@ -1,3 +1,7 @@ +if(ANDROID) + add_subdirectory(android) +endif() + add_library(KF6Crash) add_library(KF6::Crash ALIAS KF6Crash) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcrash-6.26.0/src/android/AndroidManifest.xml new/kcrash-6.27.0/src/android/AndroidManifest.xml --- old/kcrash-6.26.0/src/android/AndroidManifest.xml 1970-01-01 01:00:00.000000000 +0100 +++ new/kcrash-6.27.0/src/android/AndroidManifest.xml 2026-06-05 17:46:11.000000000 +0200 @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + SPDX-FileCopyrightText: 2026 Volker Krause <[email protected]> + SPDX-License-Identifier: CC0-1.0 +--> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="org.kde.crash"> + <application> + <!-- disable automatic Sentry initialization, we do that ourselves on demand --> + <meta-data android:name="io.sentry.auto-init" android:value="false"/> + <provider android:name="io.sentry.android.core.SentryInitProvider" android:authorities="${applicationId}.SentryInitProvider" tools:node="remove"/> + <provider android:name="io.sentry.android.core.SentryPerformanceProvider" android:authorities="${applicationId}.SentryPerformanceProvider" tools:node="remove"/> + </application> +</manifest> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcrash-6.26.0/src/android/CMakeLists.txt new/kcrash-6.27.0/src/android/CMakeLists.txt --- old/kcrash-6.26.0/src/android/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/kcrash-6.27.0/src/android/CMakeLists.txt 2026-06-05 17:46:11.000000000 +0200 @@ -0,0 +1,7 @@ +# SPDX-FileCopyrightText: 2026 Volker Krause <[email protected]> +# SPDX-License-Identifier: BSD-2-Clause + +gradle_add_aar(kcrash_aar BUILDFILE ${CMAKE_CURRENT_SOURCE_DIR}/build.gradle NAME KF6Crash) +gradle_install_aar(kcrash_aar DESTINATION jar) + +install(FILES KF6Crash-android-dependencies.xml DESTINATION ${KDE_INSTALL_LIBDIR} RENAME KF6Crash_${CMAKE_ANDROID_ARCH_ABI}-android-dependencies.xml) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcrash-6.26.0/src/android/KF6Crash-android-dependencies.xml new/kcrash-6.27.0/src/android/KF6Crash-android-dependencies.xml --- old/kcrash-6.26.0/src/android/KF6Crash-android-dependencies.xml 1970-01-01 01:00:00.000000000 +0100 +++ new/kcrash-6.27.0/src/android/KF6Crash-android-dependencies.xml 2026-06-05 17:46:11.000000000 +0200 @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + SPDX-FileCopyrightText: 2026 Volker Krause <[email protected]> + SPDX-License-Identifier: CC0-1.0 +--> +<rules> + <dependencies> + <lib name="KF6Crash"> + <depends> + <jar bundling="1" file="jar/KF6Crash.aar"/> + </depends> + </lib> + </dependencies> +</rules> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcrash-6.26.0/src/android/build.gradle new/kcrash-6.27.0/src/android/build.gradle --- old/kcrash-6.26.0/src/android/build.gradle 1970-01-01 01:00:00.000000000 +0100 +++ new/kcrash-6.27.0/src/android/build.gradle 2026-06-05 17:46:11.000000000 +0200 @@ -0,0 +1,54 @@ +/* + SPDX-FileCopyrightText: 2026 Volker Krause <[email protected]> + SPDX-License-Identifier: BSD-2-Clause +*/ + +buildscript { + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:@Gradle_ANDROID_GRADLE_PLUGIN_VERSION@' + } +} + +repositories { + google() + mavenCentral() +} + +apply plugin: 'com.android.library' + +dependencies { + implementation 'io.sentry:sentry-android-core:8.43.0' +} + +android { + buildToolsVersion '@ANDROID_SDK_BUILD_TOOLS_REVISION@' + compileSdkVersion @ANDROID_SDK_COMPILE_API@ + + sourceSets { + main { + manifest.srcFile '@CMAKE_CURRENT_SOURCE_DIR@/AndroidManifest.xml' + java.srcDirs = ['@CMAKE_CURRENT_SOURCE_DIR@/src/org'] + res.srcDirs = ['@CMAKE_CURRENT_SOURCE_DIR@/res'] + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + lintOptions { + abortOnError false + } + + defaultConfig { + minSdkVersion @ANDROID_API_LEVEL@ + targetSdkVersion @ANDROID_SDK_COMPILE_API@ + namespace "org.kde.crash" + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcrash-6.26.0/src/android/res/values/strings.xml new/kcrash-6.27.0/src/android/res/values/strings.xml --- old/kcrash-6.26.0/src/android/res/values/strings.xml 1970-01-01 01:00:00.000000000 +0100 +++ new/kcrash-6.27.0/src/android/res/values/strings.xml 2026-06-05 17:46:11.000000000 +0200 @@ -0,0 +1,9 @@ +<?xml version='1.0' encoding='utf-8'?> +<!-- + SPDX-FileCopyrightText: 2026 Volker Krause <[email protected]> + SPDX-License-Identifier: CC0-1.0 +--> +<resources> + <string name="submit_dialog_title">Submit crash report</string> + <string name="submit_dialog_text">Do you want to submit an automatic crash report?</string> +</resources> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcrash-6.26.0/src/android/src/org/kde/crash/KCrash.java new/kcrash-6.27.0/src/android/src/org/kde/crash/KCrash.java --- old/kcrash-6.26.0/src/android/src/org/kde/crash/KCrash.java 1970-01-01 01:00:00.000000000 +0100 +++ new/kcrash-6.27.0/src/android/src/org/kde/crash/KCrash.java 2026-06-05 17:46:11.000000000 +0200 @@ -0,0 +1,107 @@ +/* + SPDX-FileCopyrightText: 2026 Volker Krause <[email protected]> + SPDX-License-Identifier: LGPL-2.0-or-later +*/ + +package org.kde.crash; + +import android.app.Activity; +import android.app.ActivityManager; +import android.app.AlertDialog; +import android.app.Application; +import android.app.ApplicationExitInfo; +import android.content.Context; +import android.content.DialogInterface; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.os.Build; +import android.util.Log; + +import io.sentry.ScreenshotStrategyType; +import io.sentry.SentryLevel; +import io.sentry.ProfileLifecycle; +import io.sentry.android.core.SentryAndroid; +import io.sentry.SentryOptions; + +import java.util.List; + +public class KCrash +{ + private static final String TAG = "org.kde.crash"; + + public static void initialize(Context context) + { + if (Build.VERSION.SDK_INT < 30) { + Log.i(TAG, "crash reporting not supported on Android API " + Build.VERSION.SDK_INT); + return; + } + + ActivityManager activityManager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE); + List<ApplicationExitInfo> exitInfoList = activityManager.getHistoricalProcessExitReasons(null, 0, 1); + if (exitInfoList == null || exitInfoList.isEmpty()) { + Log.i(TAG, "no exit info found"); + return; + } + + ApplicationExitInfo lastExit = exitInfoList.get(0); + Log.i(TAG, "found exit info with reason " + lastExit.getReason()); + if (lastExit.getReason() != ApplicationExitInfo.REASON_CRASH_NATIVE) { // TODO add other crash types? + return; + } + + Activity activity = (Activity)context; + if (activity == null) { + Log.i(TAG, "crash reporting not supported from background service"); + return; + } + + String dsn; + PackageManager pm = context.getPackageManager(); + try { + ApplicationInfo appInfo = pm.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA); + dsn = appInfo.metaData.getString("io.sentry.dsn"); + } catch (Exception e) { + Log.i(TAG, "failed to load application meta-data"); + return; + } + if (dsn == null) { + Log.i(TAG, "no Sentry DSN configured for this application"); + return; + } + + activity.runOnUiThread(() -> { + new AlertDialog.Builder(context) + .setTitle(R.string.submit_dialog_title) + .setMessage(R.string.submit_dialog_text) + .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + KCrash.initSentry(context, dsn); + } + }) + .setNegativeButton(android.R.string.no, null) + .setIconAttribute(android.R.attr.alertDialogIcon) + .show(); + }); + } + + private static void initSentry(Context context, String dsn) + { + Log.i(TAG, "initializing Sentry"); + + try { + SentryAndroid.init(context, options -> { + options.setDsn(dsn); + options.setSendDefaultPii(false); + options.setEnableUserInteractionTracing(false); + options.setAttachScreenshot(false); + options.setAttachViewHierarchy(false); + options.setStartProfilerOnAppStart(false); + options.setTombstoneEnabled(true); + }); + } catch (Exception e) { + Log.e(TAG, "Sentry initialization failed", e); + } catch (NoClassDefFoundError e) { + Log.e(TAG, "Sentry not bundled", e); + } + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcrash-6.26.0/src/kcrash.cpp new/kcrash-6.27.0/src/kcrash.cpp --- old/kcrash-6.26.0/src/kcrash.cpp 2026-05-01 13:52:37.000000000 +0200 +++ new/kcrash-6.27.0/src/kcrash.cpp 2026-06-05 17:46:11.000000000 +0200 @@ -47,6 +47,9 @@ #include <QLibraryInfo> #include <QStandardPaths> #include <QThread> +#ifdef Q_OS_ANDROID +#include <QJniObject> +#endif #if HAVE_X11 #include <X11/Xlib.h> @@ -199,6 +202,7 @@ enableDrKonqi = false; } +#ifndef Q_OS_ANDROID const QStringList args = QCoreApplication::arguments(); // Default to core dumping whenever a process is set. When not or when explicitly opting into just in time debugging // we enable drkonqi. This causes the signal handler to directly fork drkonqi opening us to race conditions. @@ -247,6 +251,9 @@ setCrashHandler(defaultCrashHandler); } } // empty s_metadataPath disables writing +#else + QJniObject::callStaticMethod<void>("org/kde/crash/KCrash", "initialize", QNativeInterface::QAndroidApplication::context()); +#endif } void KCrash::setEmergencySaveFunction(HandlerType saveFunction) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcrash-6.26.0/src/kcrash.h new/kcrash-6.27.0/src/kcrash.h --- old/kcrash-6.26.0/src/kcrash.h 2026-05-01 13:52:37.000000000 +0200 +++ new/kcrash-6.27.0/src/kcrash.h 2026-06-05 17:46:11.000000000 +0200 @@ -37,6 +37,24 @@ * However, if you are using KApplication, it will by default enable launching * DrKonqi on crashes, unless the --nocrashhandler argument was passed on * the command line or the environment variable KDE_DEBUG is set to any value. + * + * Since 6.27 KCrash also supports crash report submissions on Android (API 30+). + * For this to work the following Android-specific changes are necessary. + * + * In \c build.gradle, add \c sentry-android-core as a dependency: + * \code + * dependencies { + * ... + * implementation 'io.sentry:sentry-android-core:8.43.0' + * } + * \endcode + * + * In \c AndroidManifest.xml, add a meta-data entry configuring the Sentry DSN for your application: + * \code + * <application ...> + * <meta-data android:name="io.sentry.dsn" android:value="https://<token>@crash-reports.kde.org/<app-id>"/> + * </application> + * \endcode */ namespace KCrash {
