Bundle libunwind as part of Sysprof

This builds libunwind-generic.a and links against it from the various
Sysprof tracers instead of relying on a system installed libunwind.

Resolves: RHEL-44892
This commit is contained in:
Christian Hergert 2024-07-02 17:06:02 -07:00
parent 3279993783
commit 05dccd9a34
3 changed files with 56 additions and 5 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
/sysprof-*.tar.xz /sysprof-*.tar.xz
/libunwind-1.8.1.tar.gz

View File

@ -1 +1,2 @@
SHA512 (sysprof-46.0.tar.xz) = f04d887218257d177f7bc68485bcc47c310188335530ff9bf5e3efa7c383d56e97d5d969b2e8b5b0469993456aa734873c599f3d743615716305b8c7f113f534 SHA512 (sysprof-46.0.tar.xz) = f04d887218257d177f7bc68485bcc47c310188335530ff9bf5e3efa7c383d56e97d5d969b2e8b5b0469993456aa734873c599f3d743615716305b8c7f113f534
SHA512 (libunwind-1.8.1.tar.gz) = aba7b578c1b8cbe78f05b64e154f3530525f8a34668b2a9f1ee6acb4b22c857befe34ad4e9e8cca99dbb66689d41bc72060a8f191bd8be232725d342809431b3

View File

@ -1,15 +1,23 @@
%global glib2_version 2.76.0 %global glib2_version 2.76.0
%global tarball_version %%(echo %{version} | tr '~' '.') %global tarball_version %%(echo %{version} | tr '~' '.')
%global bundled_libunwind 1
%if 0%{?bundled_libunwind}
%global libunwind_version 1.8.1
%global _legacy_common_support 1
%endif
Name: sysprof Name: sysprof
Version: 46.0 Version: 46.0
Release: 2%{?dist} Release: 3%{?dist}
Summary: A system-wide Linux profiler Summary: A system-wide Linux profiler
License: GPL-2.0-or-later AND GPL-3.0-or-later AND CC-BY-SA-4.0 AND BSD-2-Clause-Patent License: GPL-2.0-or-later AND GPL-3.0-or-later AND CC-BY-SA-4.0 AND BSD-2-Clause-Patent
URL: http://www.sysprof.com URL: http://www.sysprof.com
Source0: https://download.gnome.org/sources/sysprof/46/sysprof-%{tarball_version}.tar.xz Source0: https://download.gnome.org/sources/sysprof/46/sysprof-%{tarball_version}.tar.xz
%if 0%{?bundled_libunwind}
Source1: https://github.com/libunwind/libunwind/releases/download/v%{libunwind_version}/libunwind-%{libunwind_version}.tar.gz
%endif
BuildRequires: gcc BuildRequires: gcc
BuildRequires: gcc-c++ BuildRequires: gcc-c++
@ -26,12 +34,17 @@ BuildRequires: pkgconfig(libadwaita-1)
BuildRequires: pkgconfig(libdex-1) BuildRequires: pkgconfig(libdex-1)
BuildRequires: pkgconfig(libpanel-1) BuildRequires: pkgconfig(libpanel-1)
BuildRequires: pkgconfig(libsystemd) BuildRequires: pkgconfig(libsystemd)
BuildRequires: pkgconfig(libunwind-generic)
BuildRequires: pkgconfig(polkit-gobject-1) BuildRequires: pkgconfig(polkit-gobject-1)
BuildRequires: pkgconfig(systemd) BuildRequires: pkgconfig(systemd)
BuildRequires: /usr/bin/appstream-util BuildRequires: /usr/bin/appstream-util
BuildRequires: /usr/bin/desktop-file-validate BuildRequires: /usr/bin/desktop-file-validate
%if 0%{?bundled_libunwind}
BuildRequires: automake libtool autoconf make
%else
BuildRequires: pkgconfig(libunwind-generic)
%endif
Requires: glib2%{?_isa} >= %{glib2_version} Requires: glib2%{?_isa} >= %{glib2_version}
Requires: hicolor-icon-theme Requires: hicolor-icon-theme
Requires: %{name}-cli%{?_isa} = %{version}-%{release} Requires: %{name}-cli%{?_isa} = %{version}-%{release}
@ -65,6 +78,9 @@ The %{name}-cli package contains the sysprof-cli command line utility.
Summary: Sysprof libraries Summary: Sysprof libraries
# Subpackage removed/obsoleted in F39 # Subpackage removed/obsoleted in F39
Obsoletes: libsysprof-ui < 45.0 Obsoletes: libsysprof-ui < 45.0
%if 0%{?bundled_libunwind}
Provides: bundled(libunwind) = %{libunwind_version}
%endif
%description -n libsysprof %description -n libsysprof
The libsysprof package contains the Sysprof libraries. The libsysprof package contains the Sysprof libraries.
@ -90,17 +106,47 @@ developing applications that use %{name}.
%prep %prep
%autosetup -p1 -n sysprof-%{tarball_version} %if 0%{?bundled_libunwind}
%setup -b 1 -n libunwind-%{libunwind_version}
%endif
%setup -n sysprof-%{tarball_version}
%build %build
%meson %if 0%{?bundled_libunwind}
# First build private libunwind
%global libunwind_install_dir %{buildroot}%{_builddir}/libunwind
pushd ../libunwind-%{libunwind_version}
mkdir -p %{_builddir}/libunwind/
aclocal
libtoolize --force
autoheader
automake --add-missing
autoconf
%configure --enable-static --disable-shared --enable-setjmp=no --disable-debug --disable-documentation --disable-ptrace --disable-coredump --disable-minidebuginfo --disable-zlibdebuginfo --with-pic
make %{?_smp_mflags} install DESTDIR=%{libunwind_install_dir}
popd
# Our "/usr" install to DESTDIR wont get picked up by the
# pkgconfig use in meson so ensure access to those include
# and linker directories manually.
export CFLAGS="$CFLAGS -I%{libunwind_install_dir}/usr/include"
export LDFLAGS="$LDFLAGS -L%{libunwind_install_dir}/usr/%{_lib}"
%global pkg_config_path_override --pkg-config-path %{libunwind_install_dir}/usr/%{_lib}/pkgconfig
%endif
# Now build sysprof
%meson %{?pkg_config_path_override}
%meson_build %meson_build
%install %install
%meson_install %meson_install
%find_lang %{name} --with-gnome %find_lang %{name} --with-gnome
%if 0%{?bundled_libunwind}
# Appease checks which would include buildroot paths for the
# libunwind-generic.a linked in.
strip -s %{buildroot}/usr/%{_lib}/libsysprof-*.so
%endif
%check %check
@ -166,6 +212,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
%changelog %changelog
* Tue Jul 02 2024 Christian Hergert <chergert@redhat.com> - 46.0-3
- Use static libunwind for Sysprof tracers
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 46.0-2 * Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 46.0-2
- Bump release for June 2024 mass rebuild - Bump release for June 2024 mass rebuild