commit:     07a5e93c0d31f67d03e534d3bff5e469e3d3f67c
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri May 26 08:35:40 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri May 26 08:36:12 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=07a5e93c

gnome-base/librsvg: backport -Wl,--gc-sections usage

```
 *   SIZE: 36.28MiB -> 18.79MiB, 22 -> 22 files
 * ------> ABI(nodebug) SIZE(-48.21%)
```

Bug: https://gitlab.gnome.org/GNOME/librsvg/-/issues/965
Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../files/librsvg-2.56.0-gc-sections-shrink.patch  |  53 +++
 gnome-base/librsvg/librsvg-2.56.0-r1.ebuild        | 419 +++++++++++++++++++++
 2 files changed, 472 insertions(+)

diff --git a/gnome-base/librsvg/files/librsvg-2.56.0-gc-sections-shrink.patch 
b/gnome-base/librsvg/files/librsvg-2.56.0-gc-sections-shrink.patch
new file mode 100644
index 000000000000..d20909f4eaa5
--- /dev/null
+++ b/gnome-base/librsvg/files/librsvg-2.56.0-gc-sections-shrink.patch
@@ -0,0 +1,53 @@
+https://gitlab.gnome.org/GNOME/librsvg/-/issues/965
+https://gitlab.gnome.org/GNOME/librsvg/-/merge_requests/832
+https://github.com/rust-lang/rust/issues/111593
+
+From 61bba147f65019eab2a42148065798bc568169ab Mon Sep 17 00:00:00 2001
+From: Federico Mena Quintero <feder...@gnome.org>
+Date: Thu, 18 May 2023 17:57:01 -0600
+Subject: [PATCH] (#965): Shrink the shared library by telling the linker to
+ omit unused code
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Thanks to Sebastian Dröge for spotting this.
+
+Fixes https://gitlab.gnome.org/GNOME/librsvg/-/issues/965
+
+Part-of: <https://gitlab.gnome.org/GNOME/librsvg/-/merge_requests/832>
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -217,12 +217,24 @@ librsvg_@RSVG_API_MAJOR_VERSION@_la_CPPFLAGS = 
$(AM_CPPFLAGS)
+ 
+ librsvg_@RSVG_API_MAJOR_VERSION@_la_CFLAGS = $(AM_CFLAGS)
+ 
+-librsvg_@RSVG_API_MAJOR_VERSION@_la_LDFLAGS = \
+-      $(BSYMBOLIC_LDFLAG) \
+-      -version-info @RSVG_LT_VERSION_INFO@ \
+-      -export-dynamic \
+-      -no-undefined \
+-      -export-symbols-regex "^rsvg_.*" \
++# This is not strictly needed, but since we are telling Cargo to build a 
staticlib, it puts in
++# all of Rust's standard library and code from dependencies even when it is 
not needed.
++# With the following, we shrink the final .so size; see issue #965.
++#
++# This will no longer be needed when we switch to cargo-cbuild, which does 
this automatically.
++if OS_DARWIN
++gc_linked_library_args="-Wl,-dead_strip"
++else
++gc_linked_library_args="-Wl,--gc-sections"
++endif
++
++librsvg_@RSVG_API_MAJOR_VERSION@_la_LDFLAGS = \
++      $(BSYMBOLIC_LDFLAG)                     \
++      -version-info @RSVG_LT_VERSION_INFO@    \
++      -export-dynamic                         \
++      -no-undefined                           \
++      -export-symbols-regex "^rsvg_.*"        \
++      $(gc_linked_library_args)               \
+       $(AM_LDFLAGS)
+ 
+ if OS_DARWIN
+-- 
+GitLab

diff --git a/gnome-base/librsvg/librsvg-2.56.0-r1.ebuild 
b/gnome-base/librsvg/librsvg-2.56.0-r1.ebuild
new file mode 100644
index 000000000000..b4089d7d636c
--- /dev/null
+++ b/gnome-base/librsvg/librsvg-2.56.0-r1.ebuild
@@ -0,0 +1,419 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+PYTHON_COMPAT=( python3_{10..11} )
+GNOME2_EAUTORECONF=yes
+CRATES="
+       adler-1.0.2
+       aho-corasick-0.7.20
+       android_system_properties-0.1.5
+       anes-0.1.6
+       anstyle-0.3.4
+       anyhow-1.0.69
+       approx-0.5.1
+       assert_cmd-2.0.10
+       atty-0.2.14
+       autocfg-1.1.0
+       base-x-0.2.11
+       bit-set-0.5.3
+       bit-vec-0.6.3
+       bitflags-1.3.2
+       block-0.1.6
+       bstr-1.3.0
+       bumpalo-3.12.0
+       bytemuck-1.13.1
+       byteorder-1.4.3
+       cc-1.0.79
+       cairo-rs-0.17.0
+       cairo-sys-rs-0.17.0
+       cast-0.3.0
+       cfg-expr-0.11.0
+       cfg-if-1.0.0
+       chrono-0.4.23
+       chrono-0.4.24
+       ciborium-0.2.0
+       ciborium-io-0.2.0
+       ciborium-ll-0.2.0
+       clap-2.34.0
+       clap-3.2.23
+       clap-4.1.9
+       clap_complete-4.1.5
+       clap_derive-4.1.9
+       clap_lex-0.2.4
+       clap_lex-0.3.3
+       codespan-reporting-0.11.1
+       const-cstr-0.3.0
+       const_fn-0.4.9
+       convert_case-0.4.0
+       core-foundation-sys-0.8.3
+       crc32fast-1.3.2
+       criterion-0.4.0
+       criterion-plot-0.5.0
+       crossbeam-channel-0.5.7
+       crossbeam-deque-0.8.3
+       crossbeam-epoch-0.9.14
+       crossbeam-utils-0.8.15
+       cssparser-0.29.6
+       cssparser-macros-0.6.0
+       cxx-1.0.92
+       cxx-build-1.0.92
+       cxxbridge-flags-1.0.92
+       cxxbridge-macro-1.0.92
+       data-url-0.2.0
+       derive_more-0.99.17
+       difflib-0.4.0
+       discard-1.0.4
+       dlib-0.5.0
+       doc-comment-0.3.3
+       dtoa-0.4.8
+       dtoa-short-0.3.3
+       either-1.8.1
+       encoding-0.2.33
+       encoding-index-japanese-1.20141219.5
+       encoding-index-korean-1.20141219.5
+       encoding-index-simpchinese-1.20141219.5
+       encoding-index-singlebyte-1.20141219.5
+       encoding-index-tradchinese-1.20141219.5
+       encoding_index_tests-0.1.4
+       errno-0.2.8
+       errno-dragonfly-0.1.2
+       fastrand-1.9.0
+       flate2-1.0.25
+       float-cmp-0.9.0
+       fnv-1.0.7
+       form_urlencoded-1.1.0
+       futf-0.1.5
+       futures-channel-0.3.27
+       futures-core-0.3.27
+       futures-executor-0.3.27
+       futures-io-0.3.27
+       futures-macro-0.3.27
+       futures-task-0.3.27
+       futures-util-0.3.27
+       fxhash-0.2.1
+       gdk-pixbuf-0.17.0
+       gdk-pixbuf-sys-0.17.0
+       getrandom-0.1.16
+       getrandom-0.2.8
+       gio-0.17.4
+       gio-sys-0.17.4
+       glib-0.17.5
+       glib-macros-0.17.5
+       glib-sys-0.17.4
+       gobject-sys-0.17.4
+       half-1.8.2
+       hashbrown-0.12.3
+       heck-0.4.1
+       hermit-abi-0.1.19
+       hermit-abi-0.2.6
+       hermit-abi-0.3.1
+       iana-time-zone-0.1.53
+       iana-time-zone-haiku-0.1.1
+       idna-0.3.0
+       indexmap-1.9.2
+       instant-0.1.12
+       io-lifetimes-1.0.7
+       is-terminal-0.4.4
+       itertools-0.10.5
+       itoa-1.0.6
+       js-sys-0.3.61
+       language-tags-0.3.2
+       lazy_static-1.4.0
+       libc-0.2.140
+       libloading-0.7.4
+       libm-0.2.6
+       link-cplusplus-1.0.8
+       linked-hash-map-0.5.6
+       linux-raw-sys-0.1.4
+       locale_config-0.3.0
+       lock_api-0.4.9
+       log-0.4.17
+       lopdf-0.29.0
+       mac-0.1.1
+       malloc_buf-0.0.6
+       markup5ever-0.10.1
+       markup5ever-0.11.0
+       matches-0.1.10
+       matrixmultiply-0.3.2
+       memchr-2.5.0
+       memoffset-0.8.0
+       miniz_oxide-0.6.2
+       nalgebra-0.32.2
+       nalgebra-macros-0.2.0
+       new_debug_unreachable-1.0.4
+       nodrop-0.1.14
+       normalize-line-endings-0.3.0
+       num-complex-0.4.3
+       num-integer-0.1.45
+       num-rational-0.4.1
+       num-traits-0.2.15
+       num_cpus-1.15.0
+       objc-0.2.7
+       objc-foundation-0.1.1
+       objc_id-0.1.1
+       once_cell-1.17.1
+       oorandom-11.1.3
+       os_str_bytes-6.4.1
+       pango-0.17.4
+       pango-sys-0.17.0
+       pangocairo-0.17.0
+       pangocairo-sys-0.17.3
+       parking_lot-0.12.1
+       parking_lot_core-0.9.7
+       paste-1.0.12
+       percent-encoding-2.2.0
+       phf-0.8.0
+       phf-0.10.1
+       phf_codegen-0.8.0
+       phf_codegen-0.10.0
+       phf_generator-0.8.0
+       phf_generator-0.10.0
+       phf_macros-0.10.0
+       phf_shared-0.8.0
+       phf_shared-0.10.0
+       pin-project-lite-0.2.9
+       pin-utils-0.1.0
+       pkg-config-0.3.26
+       plotters-0.3.4
+       plotters-backend-0.3.4
+       plotters-svg-0.3.3
+       png-0.17.7
+       pom-3.2.0
+       ppv-lite86-0.2.17
+       precomputed-hash-0.1.1
+       predicates-2.1.5
+       predicates-3.0.1
+       predicates-core-1.0.6
+       predicates-tree-1.0.9
+       proc-macro-crate-1.3.1
+       proc-macro-error-1.0.4
+       proc-macro-error-attr-1.0.4
+       proc-macro-hack-0.5.20+deprecated
+       proc-macro2-0.4.30
+       proc-macro2-1.0.52
+       proptest-1.1.0
+       quick-error-1.2.3
+       quick-error-2.0.1
+       quote-1.0.26
+       rand-0.7.3
+       rand-0.8.5
+       rand_chacha-0.2.2
+       rand_chacha-0.3.1
+       rand_core-0.5.1
+       rand_core-0.6.4
+       rand_hc-0.2.0
+       rand_pcg-0.2.1
+       rand_xorshift-0.3.0
+       rawpointer-0.2.1
+       rayon-1.7.0
+       rayon-core-1.11.0
+       rctree-0.5.0
+       redox_syscall-0.2.16
+       regex-1.7.1
+       regex-automata-0.1.10
+       regex-syntax-0.6.28
+       remove_dir_all-0.5.3
+       rgb-0.8.36
+       rustc_version-0.2.3
+       rustc_version-0.4.0
+       rusty-fork-0.3.0
+       rustix-0.36.9
+       ryu-1.0.13
+       safe_arch-0.6.0
+       same-file-1.0.6
+       scratch-1.0.5
+       scopeguard-1.1.0
+       selectors-0.24.0
+       semver-0.9.0
+       semver-1.0.17
+       semver-parser-0.7.0
+       serde-1.0.156
+       serde_derive-1.0.156
+       serde_json-1.0.94
+       servo_arc-0.2.0
+       sha1-0.6.1
+       sha1_smol-1.0.0
+       simba-0.8.0
+       siphasher-0.3.10
+       slab-0.4.8
+       smallvec-1.10.0
+       stable_deref_trait-1.2.0
+       standback-0.2.17
+       stdweb-0.4.20
+       stdweb-derive-0.5.3
+       stdweb-internal-macros-0.2.9
+       stdweb-internal-runtime-0.1.5
+       string_cache-0.8.7
+       string_cache_codegen-0.5.2
+       strsim-0.10.0
+       syn-1.0.109
+       system-deps-6.0.3
+       tempfile-3.4.0
+       tendril-0.4.3
+       termcolor-1.2.0
+       termtree-0.4.1
+       textwrap-0.16.0
+       thiserror-1.0.39
+       thiserror-impl-1.0.39
+       time-0.1.44
+       time-0.2.27
+       time-macros-0.1.1
+       time-macros-impl-0.1.2
+       tinytemplate-1.2.1
+       tinyvec-1.6.0
+       tinyvec_macros-0.1.1
+       toml-0.5.11
+       toml_edit-0.19.7
+       toml_datetime-0.6.1
+       typenum-1.16.0
+       unarray-0.1.4
+       unicode-bidi-0.3.11
+       unicode-ident-1.0.8
+       unicode-normalization-0.1.22
+       unicode-width-0.1.10
+       url-2.3.1
+       utf-8-0.7.6
+       version-compare-0.1.1
+       version_check-0.9.4
+       wait-timeout-0.2.0
+       walkdir-2.3.3
+       wasi-0.9.0+wasi-snapshot-preview1
+       wasi-0.11.0+wasi-snapshot-preview1
+       wasm-bindgen-0.2.84
+       wasm-bindgen-backend-0.2.84
+       wasm-bindgen-macro-0.2.84
+       wasm-bindgen-macro-support-0.2.84
+       wasm-bindgen-shared-0.2.84
+       web-sys-0.3.61
+       weezl-0.1.7
+       wide-0.7.8
+       winapi-0.3.9
+       winapi-i686-pc-windows-gnu-0.4.0
+       winapi-util-0.1.5
+       winapi-x86_64-pc-windows-gnu-0.4.0
+       windows-sys-0.42.0
+       windows-sys-0.45.0
+       windows-targets-0.42.2
+       windows_aarch64_gnullvm-0.42.2
+       windows_aarch64_msvc-0.42.2
+       windows_i686_gnu-0.42.2
+       windows_i686_msvc-0.42.2
+       windows_x86_64_gnu-0.42.2
+       windows_x86_64_gnullvm-0.42.2
+       windows_x86_64_msvc-0.42.2
+       winnow-0.3.6
+       xml5ever-0.17.0
+       yeslogic-fontconfig-sys-4.0.1
+"
+
+inherit cargo gnome2 multilib-minimal python-any-r1 rust-toolchain vala
+
+DESCRIPTION="Scalable Vector Graphics (SVG) rendering library"
+HOMEPAGE="https://wiki.gnome.org/Projects/LibRsvg 
https://gitlab.gnome.org/GNOME/librsvg";
+SRC_URI+=" $(cargo_crate_uris ${CRATES})"
+
+LICENSE="Apache-2.0 BSD CC0-1.0 LGPL-2.1+ MIT MPL-2.0 Unicode-DFS-2016"
+
+SLOT="2"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~sparc ~x86"
+
+IUSE="gtk-doc +introspection +vala"
+REQUIRED_USE="
+       gtk-doc? ( introspection )
+       vala? ( introspection )
+"
+RESTRICT="test" # Lots of issues on 32bit builds, 64bit build seems to get 
into an infinite compilation sometimes, etc.
+
+RDEPEND="
+       >=x11-libs/cairo-1.16.0[glib,svg(+),${MULTILIB_USEDEP}]
+       >=media-libs/freetype-2.9:2[${MULTILIB_USEDEP}]
+       >=x11-libs/gdk-pixbuf-2.20:2[introspection?,${MULTILIB_USEDEP}]
+       >=dev-libs/glib-2.50.0:2[${MULTILIB_USEDEP}]
+       >=media-libs/harfbuzz-2.0.0:=[${MULTILIB_USEDEP}]
+       >=dev-libs/libxml2-2.9.1-r4:2[${MULTILIB_USEDEP}]
+       >=x11-libs/pango-1.48.11[${MULTILIB_USEDEP}]
+
+       introspection? ( >=dev-libs/gobject-introspection-0.10.8:= )
+"
+DEPEND="${RDEPEND}"
+BDEPEND="
+       >=virtual/rust-1.64.0[${MULTILIB_USEDEP}]
+       x11-libs/gdk-pixbuf
+       ${PYTHON_DEPS}
+       $(python_gen_any_dep 'dev-python/docutils[${PYTHON_USEDEP}]')
+       gtk-doc? ( dev-util/gi-docgen )
+       virtual/pkgconfig
+       vala? ( $(vala_depend) )
+
+       dev-libs/gobject-introspection-common
+       dev-libs/vala-common
+"
+# dev-libs/gobject-introspection-common, dev-libs/vala-common needed by 
eautoreconf
+
+QA_FLAGS_IGNORED="
+       usr/bin/rsvg-convert
+       usr/lib.*/librsvg.*
+"
+
+PATCHES=(
+       "${FILESDIR}"/${PN}-2.56.0-gc-sections-shrink.patch
+)
+
+src_prepare() {
+       use vala && vala_setup
+       gnome2_src_prepare
+}
+
+multilib_src_configure() {
+       local myconf=(
+               --disable-static
+               --disable-debug
+               $(multilib_native_use_enable gtk-doc)
+               $(multilib_native_use_enable introspection)
+               $(multilib_native_use_enable vala)
+               --enable-pixbuf-loader
+       )
+
+       if ! multilib_is_native_abi; then
+               myconf+=(
+                       # Set the rust target, which can differ from CHOST
+                       RUST_TARGET="$(rust_abi)"
+                       # RUST_TARGET is only honored if cross_compiling, but 
non-native ABIs aren't cross as
+                       # far as C parts and configure auto-detection are 
concerned as CHOST equals CBUILD
+                       cross_compiling=yes
+               )
+       fi
+
+       ECONF_SOURCE=${S} \
+       gnome2_src_configure "${myconf[@]}"
+
+       if multilib_is_native_abi; then
+               ln -s "${S}"/doc/html doc/html || die
+       fi
+}
+
+multilib_src_compile() {
+       gnome2_src_compile
+}
+
+multilib_src_install() {
+       gnome2_src_install
+}
+
+multilib_src_install_all() {
+       find "${ED}" -name '*.la' -delete || die
+
+       if use gtk-doc; then
+               mkdir -p "${ED}"/usr/share/gtk-doc/html/ || die
+               mv "${ED}"/usr/share/doc/Rsvg-2.0 
"${ED}"/usr/share/gtk-doc/html/ || die
+       fi
+}
+
+pkg_postinst() {
+       multilib_foreach_abi gnome2_pkg_postinst
+}
+
+pkg_postrm() {
+       multilib_foreach_abi gnome2_pkg_postrm
+}

Reply via email to