File glib2.spec of Package glib2
#
# spec file for package glib2
#
# Copyright (c) 2020 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/
#
%bcond_without systemtap
Name: glib2
Version: 2.62.6
Release: 0
Summary: General-Purpose Utility Library
License: LGPL-2.1-or-later
Group: Development/Libraries/C and C++
URL: https://wiki.gnome.org/Projects/GLib
Source0: http://download.gnome.org/sources/glib/2.62/glib-%{version}.tar.xz
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
# 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-dbus-socket-path.patch bnc#845287 dimstar@opensuse.org -- Have gio look for the system dbus socket in /run instead of /var/run.
Patch3: glib2-dbus-socket-path.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
# PATCH-FEATURE-UPSTREAM glib2-add-support-for-slim-timezone-format.patch bsc#1178346, glgo#GNOME/glib!1533 alynx.zhou@suse.com -- Add support for slim timezone format.
Patch5: glib2-add-support-for-slim-timezone-format.patch
# PATCH-FIX-UPSTREAM glib2-fix-6-days-until-the-end-of-the-month.patch bsc#1178346, glgo#GNOME/glib!1683 alynx.zhou@suse.com -- Fix incorrect DST end of month, require Patch5.
Patch6: glib2-fix-6-days-until-the-end-of-the-month.patch
# PATCH-FIX-UPSTREAM glib2-CVE-2021-27219-add-g_memdup2.patch bsc#1182362, glgo#GNOME/glib!1927 alynx.zhou@suse.com -- Add g_memdup2 to replace g_memdup because of integer overflow.
Patch7: glib2-CVE-2021-27219-add-g_memdup2.patch
# PATCH-FIX-UPSTREAM glib2-CVE-2021-27218.patch bsc#1182328, glgo#GNOME/glib!1944 alynx.zhou@suse.com -- Do not create too large GByteArray.
Patch8: glib2-CVE-2021-27218.patch
BuildRequires: docbook-xsl-stylesheets
BuildRequires: fdupes
BuildRequires: gamin-devel
BuildRequires: gcc-c++
BuildRequires: gtk-doc
BuildRequires: libselinux-devel
BuildRequires: m4
BuildRequires: meson >= 0.49.2
BuildRequires: pkgconfig
BuildRequires: python3-base
# gdbus-codegen is run during the build, so we need python3-xml
BuildRequires: python3-xml
BuildRequires: translation-update-upstream
BuildRequires: xsltproc
# Needed for gresource
BuildRequires: pkgconfig(libelf) >= 0.8.12
BuildRequires: pkgconfig(libffi) >= 3.0.0
BuildRequires: pkgconfig(libpcre) >= 8.31
BuildRequires: pkgconfig(mount) >= 2.28
BuildRequires: pkgconfig(zlib)
# gtk-doc requires glib2-devel, but we will only be building this here; break up a cycle
#!BuildIgnore: glib2-devel
%if %{with systemtap}
BuildRequires: systemtap-dtrace
BuildRequires: systemtap-headers
%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.
%package tools
Summary: Tools from glib2, a general-purpose utility library
Group: Development/Libraries/C and C++
%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-2_0-0 = %{version}
Supplements: packageand(libgio-2_0-0: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
# Now require the subpackages too
Group: Development/Libraries/C and C++
Requires: glib2-tools = %{version}
Requires: glibc-devel
Requires: libgio-2_0-0 = %{version}
Requires: libglib-2_0-0 = %{version}
Requires: libgmodule-2_0-0 = %{version}
Requires: libgobject-2_0-0 = %{version}
Requires: libgthread-2_0-0 = %{version}
Requires: pkgconfig
# Required by gdbus-codegen
Requires: python3-xml
Provides: glib2-doc = 2.19.6
Obsoletes: glib2-doc < 2.19.6
#
%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-2_0-0
Summary: General-Purpose Utility Library
Group: System/Libraries
Provides: %{name} = %{version}
Obsoletes: %{name} < %{version}
#
%description -n libglib-2_0-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.
%package -n libgmodule-2_0-0
Summary: General-Purpose Utility Library -- Library for Modules
Group: System/Libraries
%description -n libgmodule-2_0-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 libgmodule library provides a portable way to dynamically load
object files (commonly known as 'plug-ins').
%package -n libgio-2_0-0
Summary: A virtual file system library API
# 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
Group: System/Libraries
Requires: %{name}-tools
# bnc#678518: libgio interacts with others by means of dbus-launch
Requires: dbus-launch
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-2_0-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.
GIO provides a modern, easy-to-use VFS API.
%package -n libgio-fam
Summary: GIO module to use FAM
# we need gio-querymodules in %%post/%%postun
Group: System/Libraries
Requires(post): %{name}-tools
Requires(postun): %{name}-tools
Supplements: packageand(libgio-2_0-0:fam)
%description -n libgio-fam
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 packages provides a GIO module to use FAM for file monitoring.
%package -n libgthread-2_0-0
Summary: Portable API from glib wrapping system threads
Group: System/Libraries
%description -n libgthread-2_0-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 libgthread library provides a portable way to write multi-threaded
software.
%package -n libgobject-2_0-0
Summary: Object-Oriented Framework for C
Group: System/Libraries
%description -n libgobject-2_0-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 tests
Summary: Tests for the glib2 package
Group: Development/Libraries/C and C++
Requires: %{name}-devel = %{version}
%description tests
The glib2-tests package contains tests that can be used to verify
the functionality of the installed glib2 package.
%lang_package
%prep
%setup -q -n glib-%{version}
translation-update-upstream
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
cp -a %{SOURCE1} %{SOURCE2} %{SOURCE5} .
cp -a %{SOURCE4} gnome_defaults.conf
# replace /usr/bin/env shebangs
# /usr/bin/env @PYTHON@ -> /usr/bin/python3
grep "%{_bindir}/env @PYTHON@" . -rl | xargs sed -i "s|%{_bindir}/env @PYTHON@|%{_bindir}/python3|g"
%build
%if %{with systemtap}
%global _lto_cflags %{nil}
%else
%global _lto_cflags %{_lto_cflags} -ffat-lto-objects
%endif
%meson \
--default-library=both \
-Dselinux=enabled \
-Dman=true \
-Dgtk_doc=true \
-Dfam=true \
%if %{with systemtap}
-Dsystemtap=true \
-Ddtrace=true \
%else
-Dsystemtap=false \
-Ddtrace=false \
%endif
-Dinternal_pcre=false \
-Dinstalled_tests=true \
%{nil}
%meson_build
%install
%meson_install
%if 0%{?suse_version} <= 1120
rm %{buildroot}%{_datadir}/locale/en@shaw/LC_MESSAGES/*
%endif
%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
touch %{buildroot}%{_localstatedir}/cache/gio-2.0/gnome-mimeapps.list
touch %{buildroot}%{_localstatedir}/cache/gio-2.0/xfce-mimeapps.list
touch %{buildroot}%{_localstatedir}/cache/gio-2.0/lxde-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 %{buildroot}%{_bindir}/gio-querymodules %{buildroot}%{_bindir}/gio-querymodules-64
%endif
mkdir -p %{buildroot}%{_libdir}/gio/modules
touch %{buildroot}%{_libdir}/gio/modules/giomodule.cache
# gsettings magic
touch %{buildroot}%{_datadir}/glib-2.0/schemas/gschemas.compiled
# Install rpm macros
mkdir -p %{buildroot}%{_rpmmacrodir}
cp %{SOURCE6} %{buildroot}%{_rpmmacrodir}
# Install zsh completion for gsettings
mkdir -p %{buildroot}%{_datadir}/zsh/site-functions/
cp %{SOURCE8} %{buildroot}%{_datadir}/zsh/site-functions/_gsettings
%fdupes %{buildroot}/%{_prefix}
%filetriggerin -n glib2-tools -- %{_datadir}/glib-2.0/schemas
# Too many users complain about schemas compiled with wrong permissions
# when in fact the system just honors there umask setting
# Let's reset umask to 022 for glib-compile-schemas, then reset to
# what the user had configured
UMASK=$(umask)
umask 022
%{_bindir}/glib-compile-schemas %{_datadir}/glib-2.0/schemas
umask $UMASK
unset UMASK
%filetriggerpostun -n glib2-tools -- %{_datadir}/glib-2.0/schemas
# Too many users complain about schemas compiled with wrong permissions
# when in fact the system just honors there umask setting
# Let's reset umask to 022 for glib-compile-schemas, then reset to
# what the user had configured
UMASK=$(umask)
umask 022
%{_bindir}/glib-compile-schemas %{_datadir}/glib-2.0/schemas
umask $UMASK
unset UMASK
%post -n libglib-2_0-0 -p /sbin/ldconfig
%post -n libgobject-2_0-0 -p /sbin/ldconfig
%post -n libgthread-2_0-0 -p /sbin/ldconfig
%post -n libgio-2_0-0
/sbin/ldconfig
for ENV in gnome xfce lxde ; do
if ! test -f %{_localstatedir}/cache/gio-2.0/$ENV-mimeapps.list ; then
cat >%{_localstatedir}/cache/gio-2.0/$ENV-mimeapps.list <<EOF
# Dummy file. Install desktop-file-utils to get a better defaults.
[Default Applications]
EOF
fi
done
%check
### FIXME ### Figure out how to run the "stable tests" only ref info from upstream.
#%%meson_test
%post -n libgmodule-2_0-0 -p /sbin/ldconfig
%post -n libgio-fam
%if 0
###############################################################################
# Note: when updating this scriptlet, don't forget to also update baselibs.conf
###############################################################################
%endif
%if "%{_lib}" == "lib64"
%{_bindir}/gio-querymodules-64 %{_libdir}/gio/modules
%else
%{_bindir}/gio-querymodules %{_libdir}/gio/modules
%endif
%postun -n libglib-2_0-0 -p /sbin/ldconfig
%postun -n libgobject-2_0-0 -p /sbin/ldconfig
%postun -n libgthread-2_0-0 -p /sbin/ldconfig
%postun -n libgio-2_0-0 -p /sbin/ldconfig
%postun -n libgmodule-2_0-0 -p /sbin/ldconfig
%postun -n libgio-fam
%if 0
###############################################################################
# Note: when updating this scriptlet, don't forget to also update baselibs.conf
###############################################################################
%endif
%if "%{_lib}" == "lib64"
[ -x %{_bindir}/gio-querymodules-64 ] && %{_bindir}/gio-querymodules-64 %{_libdir}/gio/modules || :
%else
[ -x %{_bindir}/gio-querymodules ] && %{_bindir}/gio-querymodules %{_libdir}/gio/modules || :
%endif
%files tools
%{_bindir}/gapplication
%{_bindir}/gdbus
%{_bindir}/gio
%{_bindir}/gio-launch-desktop
%{_bindir}/gio-querymodules*
%{_bindir}/glib-compile-schemas
%{_bindir}/gresource
%{_bindir}/gsettings
%dir %{_datadir}/bash-completion
%dir %{_datadir}/bash-completion/completions
%{_datadir}/bash-completion/completions/gapplication
%{_datadir}/bash-completion/completions/gdbus
%{_datadir}/bash-completion/completions/gio
%{_datadir}/bash-completion/completions/gresource
%{_datadir}/bash-completion/completions/gsettings
%dir %{_datadir}/zsh
%dir %{_datadir}/zsh/site-functions
%{_datadir}/zsh/site-functions/_gsettings
%{_mandir}/man1/gapplication.1%{?ext_man}
%{_mandir}/man1/gdbus.1%{?ext_man}
%{_mandir}/man1/gio.1%{?ext_man}
%{_mandir}/man1/gio-querymodules.1%{?ext_man}
%{_mandir}/man1/glib-compile-schemas.1%{?ext_man}
%{_mandir}/man1/gresource.1%{?ext_man}
%{_mandir}/man1/gsettings.1%{?ext_man}
# We put those files here, but they don't really belong here. They just don't
# have a better home... The zzz-glib2 scripts could arguably be in
# libglib-2_0-0 but that would break the shared library policy.
%{_sysconfdir}/profile.d/zzz-glib2.*
%files -n gio-branding-upstream
%doc README.Gsettings-overrides
%config (noreplace) %{_sysconfdir}/gnome_defaults.conf
%files -n libglib-2_0-0
%license COPYING
%doc AUTHORS README NEWS
%{_libdir}/libglib*.so.*
%files -n libgmodule-2_0-0
%{_libdir}/libgmodule*.so.*
%files -n libgobject-2_0-0
%{_libdir}/libgobject*.so.*
%files -n libgthread-2_0-0
%{_libdir}/libgthread*.so.*
%files -n libgio-2_0-0
%{_libdir}/libgio*.so.*
%dir %{_libdir}/gio
%dir %{_libdir}/gio/modules
%ghost %{_libdir}/gio/modules/giomodule.cache
%dir %{_datadir}/glib-2.0/
%dir %{_datadir}/glib-2.0/schemas/
%ghost %{_datadir}/glib-2.0/schemas/gschemas.compiled
%{_datadir}/applications/gnome-mimeapps.list
%dir %{_localstatedir}/cache/gio-2.0
%ghost %{_localstatedir}/cache/gio-2.0/gnome-mimeapps.list
%ghost %{_localstatedir}/cache/gio-2.0/xfce-mimeapps.list
%ghost %{_localstatedir}/cache/gio-2.0/lxde-mimeapps.list
%files -n libgio-fam
%{_libdir}/gio/modules/libgiofam.so
%files devel
%doc HACKING README.rationale
%{_bindir}/gdbus-codegen
%{_bindir}/glib-compile-resources
%{_bindir}/glib-genmarshal
%{_bindir}/glib-gettextize
%{_bindir}/glib-mkenums
%{_bindir}/gobject-query
%{_bindir}/gtester
%{_bindir}/gtester-report
%{_mandir}/man?/gdbus-codegen*%{ext_man}
%{_mandir}/man?/glib-compile-resources*%{ext_man}
%{_mandir}/man?/glib-genmarshal*%{ext_man}
%{_mandir}/man?/glib-gettextize*%{ext_man}
%{_mandir}/man?/glib-mkenums*%{ext_man}
%{_mandir}/man?/gobject-query*%{ext_man}
%{_mandir}/man?/gtester*%{ext_man}
%dir %{_datadir}/aclocal
%{_datadir}/aclocal/glib-2.0.m4
%{_datadir}/aclocal/glib-gettext.m4
%{_datadir}/aclocal/gsettings.m4
%dir %{_datadir}/gettext/its/
%{_datadir}/gettext/its/gschema*
%dir %{_datadir}/glib-2.0/
%{_datadir}/glib-2.0/gdb/
%{_datadir}/glib-2.0/gettext/
%{_datadir}/glib-2.0/codegen/
%{_datadir}/glib-2.0/schemas/gschema.dtd
%{_datadir}/glib-2.0/valgrind/
%{_includedir}/glib-2.0
%{_includedir}/gio-unix-2.0
%{_libdir}/lib*.so
%dir %{_libdir}/glib-2.0/
%{_libdir}/glib-2.0/include/
%{_libdir}/pkgconfig/*.pc
%{_datadir}/gtk-doc/html/gio
%{_datadir}/gtk-doc/html/glib
%{_datadir}/gtk-doc/html/gobject
%{_datadir}/gdb/auto-load/%{_libdir}/*-gdb.py
%if %{with systemtap}
%dir %{_datadir}/systemtap
%dir %{_datadir}/systemtap/tapset
%dir %{_datadir}/systemtap/tapset/*
%{_datadir}/systemtap/tapset/*/libgio-*.so.*.stp
%{_datadir}/systemtap/tapset/*/libglib-*.so.*.stp
%{_datadir}/systemtap/tapset/*/libgobject-*.so.*.stp
%endif
%{_rpmmacrodir}/macros.glib2
# Own these directories to not avoid breakages throughout the project
%dir %{_datadir}/gtk-doc
%dir %{_datadir}/gtk-doc/html
# Own these directories to avoid build requirement on gdb
# only for directories ownership
%dir %{_datadir}/gdb
%dir %{_datadir}/gdb/auto-load
%dir %{_datadir}/gdb/auto-load%{_prefix}
%dir %{_datadir}/gdb/auto-load%{_libdir}
%files devel-static
%{_libdir}/lib*.a
%files lang -f glib20.lang
%files tests
%{_libexecdir}/installed-tests
%{_datadir}/installed-tests
%changelog