File glib2.spec of Package glib2

#
# spec file for package glib2
#
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%global flavor @BUILD_FLAVOR@%{nil}
%if "%{flavor}" == "doc"
  %global psuffix -doc
  %bcond_with systemtap
%else
  %if "%{flavor}" == "stage1"
    %global psuffix -stage1-devel
    %bcond_with systemtap
  %else
    %global psuffix %{nil}
    %bcond_without systemtap
  %endif
%endif
%define libver 2_0-0
%define libgio libgio-%{libver}
%define libglib libglib-%{libver}
%define libgmodule libgmodule-%{libver}
%define libgobject libgobject-%{libver}
%define libgthread libgthread-%{libver}
%define libgirepository libgirepository-%{libver}
Name:           glib2%{psuffix}
Version:        2.84.3
Release:        0
Summary:        General-Purpose Utility Library
License:        LGPL-2.1-or-later
Group:          Development/Libraries/C and C++
URL:            https://gitlab.gnome.org/GNOME/glib/
Source0:        glib-%{version}.tar.zst
Source1:        glib2.sh
Source2:        glib2.csh
# Not upstream file. Only proposes upstream packages:
Source4:        glib2-upstream-gnome_defaults.conf
# Some documentation for people writing branding packages, shipped in the branding-upstream package
Source5:        README.Gsettings-overrides
Source6:        macros.glib2
# zsh completion from https://github.com/jmatsuzawa/zsh-comp-gsettings
Source8:        gsettings.zsh
Source98:       glib2-rpmlintrc
Source99:       baselibs.conf
Source200:      files.glib2
Source201:      files.stage1
# PATCH-FEATURE-UPSTREAM glib2-bgo569829-gettext-gkeyfile.patch fate300461 bgo569829 vuntz@novell.com -- Look for translation of desktop entry strings via gettext, part that we share with Ubuntu and try to push upstream
Patch0:         glib2-bgo569829-gettext-gkeyfile.patch
# PATCH-FEATURE-OPENSUSE glib2-fate300461-gettext-gkeyfile-suse.patch fate300461 vuntz@novell.com -- Look for translation of desktop entry strings via gettext, part that deals with the openSUSE specific infrastructure (with desktop_translations)
Patch1:         glib2-fate300461-gettext-gkeyfile-suse.patch
# PATCH-FIX-OPENSUSE glib2-suppress-schema-deprecated-path-warning.patch rh#814053 badshah400@gmail.com -- Suppress the deprecated path warning since it fills up screen unnecessarily during package installations/upgrade.
Patch2:         glib2-suppress-schema-deprecated-path-warning.patch
# PATCH-FIX-OPENSUSE glib2-gdbus-codegen-version.patch  olaf@aepfle.de -- Remove version string from files generated by gdbus-codegen
Patch4:         glib2-gdbus-codegen-version.patch
BuildRequires:  docbook-xsl-stylesheets
BuildRequires:  fdupes
BuildRequires:  gcc-c++
BuildRequires:  libselinux-devel
BuildRequires:  m4
BuildRequires:  meson >= 1.4.0
BuildRequires:  pkgconfig
BuildRequires:  python3-base >= 3.5
BuildRequires:  python3-docutils
# gdbus-codegen is run during the build, so we need python3-xml
BuildRequires:  python3-xml
BuildRequires:  xsltproc
# Needed for gresource
BuildRequires:  pkgconfig(libelf) >= 0.8.12
BuildRequires:  pkgconfig(libffi) >= 3.0.0
BuildRequires:  pkgconfig(libpcre2-8) >= 10.32
BuildRequires:  pkgconfig(mount) >= 2.28
BuildRequires:  pkgconfig(zlib)
%if "%{flavor}" != "stage1"
BuildRequires:  pkgconfig(gobject-introspection-1.0)
%endif
%if "%{flavor}" == "doc"
# Split-provides
Provides:       glib2-devel:%{_datadir}/gtk-doc/html/gobject/index.html
%endif
%if "%{flavor}" == "doc"
BuildRequires:  glib2-devel
BuildRequires:  pkgconfig(gi-docgen)
%endif
%if %{with systemtap}
BuildRequires:  systemtap-dtrace
BuildRequires:  systemtap-headers
%endif
%if "%{flavor}" == "stage1"
Requires:       this-is-only-for-build-envs
Conflicts:      %{libgio}
Conflicts:      %{libgirepository}
Conflicts:      %{libglib}
Conflicts:      %{libgmodule}
Conflicts:      %{libgobject}
Conflicts:      %{libgthread}
Conflicts:      glib2-devel
Conflicts:      glib2-tools
Conflicts:      glib2-tools-32bit
%endif

%description
GLib is a general-purpose utility library, which provides many useful
data types, macros, type conversions, string utilities, file utilities,
a main loop abstraction, and so on.

%if %{with doc}
This package provides the documentation for the GLib library.
%endif

%package tools
Summary:        Tools from glib2, a general-purpose utility library
# ensure libgio-2_0-0 is updated before glib2-tools' ensures glib-compile-schema to
# be functional when the file trigger fires (boo#1178713)
Group:          Development/Libraries/C and C++
Requires(post): %{libgio} = %{version}

%description tools
GLib is a general-purpose utility library, which provides many useful
data types, macros, type conversions, string utilities, file utilities,
a main loop abstraction, and so on.

%package -n gio-branding-upstream
Summary:        Upstream definitions of default settings and applications
Group:          System/Libraries
Requires:       %{libgio} = %{version}
Supplements:    (%{libgio} and branding-upstream)
Conflicts:      gio-branding
Provides:       %{name}-branding-upstream = %{version}
Obsoletes:      %{name}-branding-upstream < %{version}
Provides:       gio-branding = %{version}
BuildArch:      noarch
#BRAND: The /etc/gnome_defaults.conf allows to define arbitrary
#BRAND: applications as preferred defaults.
#BRAND: A /usr/share/glib-2.0/schemas/$NAME.gschema.override file can
#BRAND: be used to override the default value for GSettings keys. See
#BRAND: README.Gsettings-overrides for more details. The branding
#BRAND: package should then have proper Requires for features changed
#BRAND: with such an override file.
# NOTE: gnome_defaults is not an upstream feature, but a SuSE
# enhancement, but to conform branding conventions, the package is named
# as gio-branding-upstream.

%description -n gio-branding-upstream
This package provides upstream defaults for settings stored with
GSettings and applications used by the MIME system.

%package devel
Summary:        Development files for glib, a general-purpose utility library
Group:          Development/Libraries/C and C++
# GDbusTest launches dbus-daemon with a special env to not interfere with
# the real session bus.
Requires:       %{_bindir}/dbus-daemon
Requires:       %{libgio} = %{version}
Requires:       %{libgirepository} = %{version}
Requires:       %{libglib} = %{version}
Requires:       %{libgmodule} = %{version}
Requires:       %{libgobject} = %{version}
Requires:       %{libgthread} = %{version}
Requires:       glib2-tools = %{version}
Requires:       glibc-devel
Requires:       pkgconfig
# Required by gdbus-codegen
Requires:       python3-xml
Requires:       typelib-1_0-GIRepository-3_0 = %{version}
Requires:       typelib-1_0-GLib-2_0 = %{version}
Requires:       typelib-1_0-GLibUnix-2_0 = %{version}
Requires:       typelib-1_0-GModule-2_0 = %{version}
Requires:       typelib-1_0-GObject-2_0 = %{version}
Requires:       typelib-1_0-Gio-2_0 = %{version}
#

%description devel
GLib is a general-purpose utility library, which provides many useful
data types, macros, type conversions, string utilities, file utilities,
a main loop abstraction, and so on.

This package contains the development files for GLib.

%package devel-static
Summary:        Static libraries for glib, a general-purpose utility library
Group:          Development/Libraries/C and C++
Requires:       %{name}-devel = %{version}

%description devel-static
GLib is a general-purpose utility library, which provides many useful
data types, macros, type conversions, string utilities, file utilities,
a main loop abstraction, and so on.

This package contains static versions of the GLib libraries.

%package -n %{libglib}
Summary:        General-Purpose Utility Library
Group:          System/Libraries
Provides:       %{name} = %{version}
Obsoletes:      %{name} < %{version}
#

%description -n %{libglib}
GLib is a general-purpose utility library, which provides many useful
data types, macros, type conversions, string utilities, file utilities,
a main loop abstraction, and so on.

%package -n %{libgmodule}
Summary:        General-Purpose Utility Library -- Library for Modules
Group:          System/Libraries

%description -n %{libgmodule}
GLib is a general-purpose utility library, which provides many useful
data types, macros, type conversions, string utilities, file utilities,
a main loop abstraction, and so on.

The libgmodule library provides a portable way to dynamically load
object files (commonly known as 'plug-ins').

%package -n %{libgio}
Summary:        A virtual file system library API
Group:          System/Libraries
# The tools are useful for people having libgio
# bnc#555605: shared-mime-info is required by libgio to properly detect mime types, but not during build
#!BuildIgnore:  shared-mime-info
# bnc#678518: libgio interacts with others by means of dbus-launch
Requires:       (%{_bindir}/dbus-launch if dbus-service)
Requires:       %{name}-tools
Requires:       gio-branding = %{version}
Requires:       shared-mime-info
# Needed for branding packages
Provides:       gio = %{version}
# Temporarily disable this, pending further discussion
# Recommends:     gvfs

%description -n %{libgio}
GLib is a general-purpose utility library, which provides many useful
data types, macros, type conversions, string utilities, file utilities,
a main loop abstraction, and so on.

GIO provides a modern, easy-to-use VFS API.

%package -n %{libgthread}
Summary:        Portable API from glib wrapping system threads
Group:          System/Libraries

%description -n %{libgthread}
GLib is a general-purpose utility library, which provides many useful
data types, macros, type conversions, string utilities, file utilities,
a main loop abstraction, and so on.

The libgthread library provides a portable way to write multi-threaded
software.

%package -n %{libgobject}
Summary:        Object-Oriented Framework for C
Group:          System/Libraries

%description -n %{libgobject}
GLib is a general-purpose utility library, which provides many useful
data types, macros, type conversions, string utilities, file utilities,
a main loop abstraction, and so on.

The GObject library provides an object-oriented framework for C.

%package -n %{libgirepository}
Summary:        Object-Oriented Framework for C
Group:          System/Libraries

%description -n %{libgirepository}
GLib is a general-purpose utility library, which provides many useful
data types, macros, type conversions, string utilities, file utilities,
a main loop abstraction, and so on.

The GObject library provides an object-oriented framework for C.

%package tests-devel
Summary:        Tests for the glib2 package
Group:          Development/Libraries/C and C++
Requires:       %{name}-devel = %{version}
Requires:       %{name}-tests = %{version}-%{release}
Provides:       %{name}-tests = %{version}-%{release}
Obsoletes:      %{name}-tests < %{version}-%{release}

%description tests-devel
The glib2-tests-devel package contains tests that can be used to verify
the functionality of the installed glib2 package.

%package -n typelib-1_0-GIRepository-3_0
Summary:        Object-Oriented Framework for C
Group:          System/Libraries

%description -n typelib-1_0-GIRepository-3_0
GLib is a general-purpose utility library, which provides many useful
data types, macros, type conversions, string utilities, file utilities,
a main loop abstraction, and so on.

The GObject library provides an object-oriented framework for C.

%package -n typelib-1_0-GLib-2_0
Summary:        Object-Oriented Framework for C
Group:          System/Libraries

%description -n typelib-1_0-GLib-2_0
GLib is a general-purpose utility library, which provides many useful
data types, macros, type conversions, string utilities, file utilities,
a main loop abstraction, and so on.

The GObject library provides an object-oriented framework for C.

%package -n typelib-1_0-GLibUnix-2_0
Summary:        Object-Oriented Framework for C
Group:          System/Libraries

%description -n typelib-1_0-GLibUnix-2_0
GLib is a general-purpose utility library, which provides many useful
data types, macros, type conversions, string utilities, file utilities,
a main loop abstraction, and so on.

The GObject library provides an object-oriented framework for C.

%package -n typelib-1_0-GModule-2_0
Summary:        Object-Oriented Framework for C
Group:          System/Libraries

%description -n typelib-1_0-GModule-2_0
GLib is a general-purpose utility library, which provides many useful
data types, macros, type conversions, string utilities, file utilities,
a main loop abstraction, and so on.

The GObject library provides an object-oriented framework for C.

%package -n typelib-1_0-GObject-2_0
Summary:        Object-Oriented Framework for C
Group:          System/Libraries

%description -n typelib-1_0-GObject-2_0
GLib is a general-purpose utility library, which provides many useful
data types, macros, type conversions, string utilities, file utilities,
a main loop abstraction, and so on.

The GObject library provides an object-oriented framework for C.

%package -n typelib-1_0-Gio-2_0
Summary:        Object-Oriented Framework for C
Group:          System/Libraries
# GioUnix has been folded into Gio package, as this is transparently loaded
# when including Gio (Platform specific loader in gjs - we know we are on unix)
Provides:       typelib-1_0-GioUnix-2_0 = %{version}
Obsoletes:      typelib-1_0-GioUnix-2_0 <= %{version}

%description -n typelib-1_0-Gio-2_0
GLib is a general-purpose utility library, which provides many useful
data types, macros, type conversions, string utilities, file utilities,
a main loop abstraction, and so on.

The GObject library provides an object-oriented framework for C.

%lang_package

%prep
%autosetup -p1 -n glib-%{version}

cp -a %{SOURCE1} %{SOURCE2} %{SOURCE5} .
cp -a %{SOURCE4} gnome_defaults.conf
sed -i "s/1.32.1/1.32/" docs/reference/meson.build

%build
%if %{with systemtap}
%global _lto_cflags %{nil}
%else
%global _lto_cflags %{_lto_cflags} -ffat-lto-objects
%endif
%meson \
	--default-library=%[ "%{flavor}" == "" ? "both" : "shared" ]\
	-Dselinux=%[ "%{flavor}" != "stage1" ? "enabled" : "disabled" ] \
	-Dman-pages=%[ "%{flavor}" != "stage1" ? "true" : "false" ] \
%if "%{flavor}" == "doc"
	-Ddocumentation=true \
%else
	-Ddocumentation=false \
	-Dinstalled_tests=%[ "%{flavor}" != "stage1" ? "true" : "false" ] \
        -Dnls=%[ "%{flavor}" != "stage1" ? "enabled" : "disabled" ] \
%endif
%if %{with systemtap}
	-Dsystemtap=true \
	-Ddtrace=true \
%else
	-Dsystemtap=false \
	-Ddtrace=false \
%endif
        -Dintrospection=%[ "%{flavor}" != "stage1" ? "enabled" : "disabled" ] \
        -Dglib_debug=disabled \
        -Dsysprof=disabled \
	%{nil}
%meson_build

%install
%meson_install
%if "%{flavor}" == "doc"
  find %{buildroot}/%{_prefix} -not -path "*%{_datadir}/doc/*" -delete || :
%endif

%if "%{flavor}" == ""
  %find_lang glib20 %{?no_lang_C}
  mkdir -p %{buildroot}%{_sysconfdir}/profile.d
  install -D -m0644 glib2.sh %{buildroot}%{_sysconfdir}/profile.d/zzz-glib2.sh
  install -D -m0644 glib2.csh %{buildroot}%{_sysconfdir}/profile.d/zzz-glib2.csh
  install -D -m0644 gnome_defaults.conf %{buildroot}%{_sysconfdir}/gnome_defaults.conf
  # default apps magic
  mkdir -p %{buildroot}%{_localstatedir}/cache/gio-2.0 %{buildroot}%{_datadir}/applications
  >> %{buildroot}%{_localstatedir}/cache/gio-2.0/gnome-mimeapps.list
  >> %{buildroot}%{_localstatedir}/cache/gio-2.0/xfce-mimeapps.list
  >> %{buildroot}%{_localstatedir}/cache/gio-2.0/lxde-mimeapps.list
  >> %{buildroot}%{_localstatedir}/cache/gio-2.0/pantheon-mimeapps.list
  >> %{buildroot}%{_localstatedir}/cache/gio-2.0/budgie-mimeapps.list
  >> %{buildroot}%{_localstatedir}/cache/gio-2.0/mate-mimeapps.list
  ln -s %{_localstatedir}/cache/gio-2.0/gnome-mimeapps.list %{buildroot}%{_datadir}/applications/gnome-mimeapps.list
  # gio-querymodules magic

  %if "%{_lib}" == "lib64"
    mv -T %{buildroot}%{_bindir}/gio-querymodules %{buildroot}%{_bindir}/gio-querymodules-64
    sed -i -e "/^gio_querymodules=/s/gio-querymodules/gio-querymodules-64/" %{buildroot}%{_libdir}/pkgconfig/gio-2.0.pc
  %endif

  mkdir -p %{buildroot}%{_libdir}/gio/modules
  >> %{buildroot}%{_libdir}/gio/modules/giomodule.cache
  # gsettings magic
  >> %{buildroot}%{_datadir}/glib-2.0/schemas/gschemas.compiled
  # Install rpm macros
  mkdir -p %{buildroot}%{_rpmmacrodir}
  cp -t%{buildroot}%{_rpmmacrodir} %{SOURCE6}
  # Install zsh completion for gsettings
  mkdir -p  %{buildroot}%{_datadir}/zsh/site-functions/
  cp -T %{SOURCE8} %{buildroot}%{_datadir}/zsh/site-functions/_gsettings
  %fdupes %{buildroot}/%{_prefix}
  %python3_fix_shebang
  %if %{suse_version} >= 1600
    %python3_fix_shebang_path %{buildroot}%{_libexecdir}/installed-tests/glib/*
  %endif

  # Too many users complain about schemas compiled with wrong permissions
  # when in fact the system just honours their umask setting
  # subshell restores umask for paranoia mode
%define compile_schemas \
(umask 022 && %{_bindir}/glib-compile-schemas %{_datadir}/glib-2.0/schemas)

%filetriggerin -n glib2-tools -- %{_datadir}/glib-2.0/schemas
%{compile_schemas}

%filetriggerpostun -n glib2-tools -- %{_datadir}/glib-2.0/schemas
%{compile_schemas} &> /dev/null || :

%post -n %{libgio}
%{ldconfig}
for ENV in gnome xfce lxde pantheon mate
do mimeapps="%{_localstatedir}/cache/gio-2.0/$ENV-mimeapps.list" &&
	2>/dev/null <"${mimeapps}" || cat >"${mimeapps}" <<EOF
# Dummy file. Install desktop-file-utils to get better defaults.
[Default Applications]
EOF
done

%postun -n %{libgio} -p %{ldconfig}

%ldconfig_scriptlets -n %{libglib}
%ldconfig_scriptlets -n %{libgobject}
%ldconfig_scriptlets -n %{libgthread}
%ldconfig_scriptlets -n %{libgmodule}
%ldconfig_scriptlets -n %{libgirepository}
%endif

%check
### FIXME ### Figure out how to run the "stable tests" only ref info from upstream.
#%%meson_test

%if "%{flavor}" == "doc"
%files
%{_datadir}/doc/g*-2.0/
%endif

%if "%{flavor}" == ""
%include %{SOURCE200}
%endif

%if "%{flavor}" == "stage1"
%include %{SOURCE201}
%endif

%changelog
openSUSE Build Service is sponsored by