commit 528f89a79b6fa8f5989d78880cd15cc39f686ea0 Author: root Date: Sat Nov 23 01:15:11 2024 +0200 first commit diff --git a/dev-lang/odin/Manifest b/dev-lang/odin/Manifest new file mode 100644 index 0000000..c7d11be --- /dev/null +++ b/dev-lang/odin/Manifest @@ -0,0 +1 @@ +DIST dev-2024-10.tar.gz 135410967 BLAKE2B d0983bb79988e3e468bc39fea8863d6d6bde52a46ef30f719fd57c052ba3f569c275474421e473794570845627c10e8bd9a279a307fbabb4451e33ca9f211591 SHA512 37f41b55575b68cf95b9378f3e333736d4e39c357102db6c6bcf43c74fef9e9eea1824c69f1e0c27e21abed70ce5d225a1f20fbe9e513612937fdaf1ceb45dfa diff --git a/dev-lang/odin/metadata.xml b/dev-lang/odin/metadata.xml new file mode 100644 index 0000000..e2d09c9 --- /dev/null +++ b/dev-lang/odin/metadata.xml @@ -0,0 +1,14 @@ + + + + + tetris123480@gmail.com + Bogdan Ivanyuk + + + https://github.com/odin-lang/Odin/issues + https://github.com/odin-lang/Odin/releases + https://odin-lang.org/docs/ + odin-lang/Odin + + diff --git a/dev-lang/odin/odin-2024.10.ebuild b/dev-lang/odin/odin-2024.10.ebuild new file mode 100644 index 0000000..7f1fc8e --- /dev/null +++ b/dev-lang/odin/odin-2024.10.ebuild @@ -0,0 +1,51 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +LLVM_COMPAT=(14 17 18) +inherit llvm-r1 + +DESCRIPTION="The Data-Oriented Language for Sane Software Development." + +HOMEPAGE="https://odin-lang.org/" + +MY_PV="${PV/./-}" +SRC_URI="https://github.com/odin-lang/Odin/archive/refs/tags/dev-${MY_PV}.tar.gz" + +# Source directory; the dir where the sources can be found (automatically +# unpacked) inside ${WORKDIR}. The default value for S is ${WORKDIR}/${P} +# If you don't need to change it, leave the S= line out of the ebuild +# to keep it tidy. +S="${WORKDIR}/Odin-dev-${MY_PV}" + +LICENSE="BSD" + +SLOT="0" + +KEYWORDS="~amd64" + +RDEPEND=" +$(llvm_gen_dep " +sys-devel/clang:${LLVM_SLOT}= +sys-devel/llvm:${LLVM_SLOT}= +") +" + +DEPEND="${RDEPEND}" + +# build_odin.sh sets its own flags. Some gcc flags cause build failures +CPPFLAGS="" +CXXFLAGS="" +src_compile() { + ./build_odin.sh release || die "failed to build odin" +} + +src_install() { + insinto usr/lib/odin + exeinto usr/lib/odin + + doexe odin + doins -r base core vendor + dosym -r /usr/lib/odin/odin /usr/bin/odin +} diff --git a/dev-libs/libqt5pas/Manifest b/dev-libs/libqt5pas/Manifest new file mode 100644 index 0000000..1fbc37b --- /dev/null +++ b/dev-libs/libqt5pas/Manifest @@ -0,0 +1 @@ +DIST libqt5pas-1.2.15.tar.gz 87513233 BLAKE2B 26e8492194541453230832591445b97827e65b61531078cb4bd1c9f549bcd0aa531fef036f701de885e96f9e56476b0dd1c9465e2388ea43080ba418acbd097e SHA512 85cb3548fab017f2fd97f5fb141d59a0d0ec1412a161f98fea726ad5d6ed32ee2eb6ef6573e058d4df7dfcc067256e842acf994b73c9a50ebfb064657db33881 diff --git a/dev-libs/libqt5pas/libqt5pas-1.2.15.ebuild b/dev-libs/libqt5pas/libqt5pas-1.2.15.ebuild new file mode 100644 index 0000000..79e0699 --- /dev/null +++ b/dev-libs/libqt5pas/libqt5pas-1.2.15.ebuild @@ -0,0 +1,35 @@ +# Copyright 2020-2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit qmake-utils + +MY_P="lazarus-3.0-0" + +DESCRIPTION="Free Pascal Qt5 bindings library updated by lazarus IDE." +HOMEPAGE="https://gitlab.com/freepascal.org/lazarus/lazarus" +SRC_URI="mirror://sourceforge/lazarus/${MY_P}.tar.gz -> ${P}.tar.gz" +KEYWORDS="~amd64 ~x86" + +LICENSE="LGPL-3" +SLOT="0/2.2" + +DEPEND=" + dev-qt/qtgui:5 + dev-qt/qtnetwork:5 + dev-qt/qtprintsupport:5 + dev-qt/qtx11extras:5 + dev-qt/qtcore:5 + dev-qt/qtwidgets:5 +" + +S="${WORKDIR}/lazarus/lcl/interfaces/qt5/cbindings" + +src_configure() { + eqmake5 "QT += x11extras" Qt5Pas.pro +} + +src_install() { + emake INSTALL_ROOT="${D}" install +} diff --git a/dev-libs/libqt5pas/metadata.xml b/dev-libs/libqt5pas/metadata.xml new file mode 100644 index 0000000..fe6d034 --- /dev/null +++ b/dev-libs/libqt5pas/metadata.xml @@ -0,0 +1,16 @@ + + + + + amynka@gentoo.org + Amy Liffey + + + voron1@gmail.com + Michael Corvinus + + + freepascal.org/lazarus + lazarus + + diff --git a/dev-libs/libqt6pas/Manifest b/dev-libs/libqt6pas/Manifest new file mode 100644 index 0000000..5449074 --- /dev/null +++ b/dev-libs/libqt6pas/Manifest @@ -0,0 +1 @@ +DIST libqt6pas-6.2.7.tar.gz 87513233 BLAKE2B 26e8492194541453230832591445b97827e65b61531078cb4bd1c9f549bcd0aa531fef036f701de885e96f9e56476b0dd1c9465e2388ea43080ba418acbd097e SHA512 85cb3548fab017f2fd97f5fb141d59a0d0ec1412a161f98fea726ad5d6ed32ee2eb6ef6573e058d4df7dfcc067256e842acf994b73c9a50ebfb064657db33881 diff --git a/dev-libs/libqt6pas/libqt6pas-6.2.7.ebuild b/dev-libs/libqt6pas/libqt6pas-6.2.7.ebuild new file mode 100644 index 0000000..6cb722c --- /dev/null +++ b/dev-libs/libqt6pas/libqt6pas-6.2.7.ebuild @@ -0,0 +1,30 @@ +# Copyright 2020-2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit qmake-utils + +MY_P="lazarus-3.0-0" + +DESCRIPTION="Free Pascal Qt6 bindings library updated by lazarus IDE." +HOMEPAGE="https://gitlab.com/freepascal.org/lazarus/lazarus" +SRC_URI="mirror://sourceforge/lazarus/${MY_P}.tar.gz -> ${P}.tar.gz" +KEYWORDS="~amd64 ~x86" + +LICENSE="LGPL-3" +SLOT="0/2.2" + +DEPEND=" + >=dev-qt/qtbase-6.2:6[X,gui,network,widgets,cups] + >=dev-qt/qtsvg-6.2:6" + +S="${WORKDIR}/lazarus/lcl/interfaces/qt6/cbindings" + +src_configure() { + eqmake6 Qt6Pas.pro +} + +src_install() { + emake INSTALL_ROOT="${D}" install +} diff --git a/games-emulation/dosbox-x/Manifest b/games-emulation/dosbox-x/Manifest new file mode 100644 index 0000000..2796185 --- /dev/null +++ b/games-emulation/dosbox-x/Manifest @@ -0,0 +1,2 @@ +DIST dosbox-x-v2024.03.01.tar.gz 119593920 BLAKE2B 42c994247e55c1b2d67ed9e1bf90e99ddf9a08476b18ab802757becc0ee6959231d3665e39cfaef02a6b1c234e3faff10597d396d8d30ce01d8123b5107327bc SHA512 0eb835da3fdfd7f1c6160aa1a32a7eff7c38f46184f7cee088e0fb8edf09327f058fd45e7995955a7f335c704ddd69c1627731899a01687563990bb06f4d9cd1 +DIST dosbox-x-v2024.07.01.tar.gz 119702042 BLAKE2B 1c046a54b5a94deef6413592c48be08542c6d9c6d5b437880a354eb9df137fafb5da57d5f99e4bdcd83eea99a7a3550117c8ed66adcbca38aea484b116321068 SHA512 e6a0478be160b115ab09ffe13d7574d604fc7778105171da3591bd4239903cb5766118e0b05d158a89344bbbd1383885aa4fd724dce4601595438634724b2f24 diff --git a/games-emulation/dosbox-x/dosbox-x-2024.03.01.ebuild b/games-emulation/dosbox-x/dosbox-x-2024.03.01.ebuild new file mode 100644 index 0000000..5407b6b --- /dev/null +++ b/games-emulation/dosbox-x/dosbox-x-2024.03.01.ebuild @@ -0,0 +1,85 @@ +# Copyright 2021-2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit autotools + +DESCRIPTION="Cross-platform DOS emulation package." +HOMEPAGE="https://dosbox-x.com/" +SRC_URI="https://github.com/joncampbell123/dosbox-x/archive/refs/tags/${PN}-v${PV}.tar.gz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~ppc64 ~x86" +IUSE="X +core-inline debug dynrec ffmpeg +fluidsynth +freetype +fpu hardened midi mt-32 opengl printer +screenshots slirp unaligned +xbrz" +REQUIRED_USE="hardened? ( !dynrec )" + +DEPEND="debug? ( sys-libs/ncurses:0= ) + ffmpeg? ( media-video/ffmpeg ) + freetype? ( media-libs/freetype ) + fluidsynth? ( + media-sound/fluid-soundfont + media-sound/fluidsynth + ) + mt-32? ( media-libs/munt-mt32emu ) + screenshots? ( media-libs/libpng:0= ) + X? ( + x11-libs/libX11 + x11-libs/libXext + x11-libs/libXrandr + x11-libs/libxkbfile + ) + media-libs/alsa-lib + opengl? ( media-libs/libglvnd[X?] ) + media-libs/libsdl2[X?] + media-libs/sdl2-net + net-libs/libpcap + sys-libs/zlib" +RDEPEND="${DEPEND}" +BDEPEND="dev-lang/nasm" + +PATCHES=( + "${FILESDIR}/${PN}-fix-rpath.patch" + "${FILESDIR}/${PN}-invert-1624f04.patch" +) + +S="${WORKDIR}/${PN}-${PN}-v${PV}" + +src_prepare() { + default + eautoreconf +} + +src_configure() { + local fpu_arg='--disable-fpu-x86 --disable-fpu-x64' + if use fpu; then + if use x86; then + fpu_arg=--enable-fpu-x86 + elif use amd64; then + fpu_arg=--enable-fpu-x64 + fi + fi + ac_cv_lib_X11_main=$(usex X yes no) \ + econf \ + "$(use_enable !hardened dynamic-core)" \ + "$(use_enable !hardened dynamic-x86)" \ + "$(use_enable X x11)" \ + "$(use_enable core-inline)" \ + "$(use_enable debug)" \ + "$(use_enable dynrec)" \ + "$(use_enable ffmpeg avcodec)" \ + "$(use_enable fluidsynth libfluidsynth)" \ + "$(use_enable fpu "${fpu_arg}")" \ + "$(use_enable freetype)" \ + "$(use_enable midi alsa-midi)" \ + "$(use_enable mt-32 mt32)" \ + "$(use_enable opengl)" \ + "$(use_enable printer)" \ + "$(use_enable screenshots)" \ + "$(use_enable slirp libslirp)" \ + "$(use_enable unaligned unaligned-memory)" \ + "$(use_enable xbrz)" \ + --disable-optimize \ + --enable-sdl2 +} diff --git a/games-emulation/dosbox-x/dosbox-x-2024.07.01.ebuild b/games-emulation/dosbox-x/dosbox-x-2024.07.01.ebuild new file mode 100644 index 0000000..5407b6b --- /dev/null +++ b/games-emulation/dosbox-x/dosbox-x-2024.07.01.ebuild @@ -0,0 +1,85 @@ +# Copyright 2021-2022 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit autotools + +DESCRIPTION="Cross-platform DOS emulation package." +HOMEPAGE="https://dosbox-x.com/" +SRC_URI="https://github.com/joncampbell123/dosbox-x/archive/refs/tags/${PN}-v${PV}.tar.gz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~ppc64 ~x86" +IUSE="X +core-inline debug dynrec ffmpeg +fluidsynth +freetype +fpu hardened midi mt-32 opengl printer +screenshots slirp unaligned +xbrz" +REQUIRED_USE="hardened? ( !dynrec )" + +DEPEND="debug? ( sys-libs/ncurses:0= ) + ffmpeg? ( media-video/ffmpeg ) + freetype? ( media-libs/freetype ) + fluidsynth? ( + media-sound/fluid-soundfont + media-sound/fluidsynth + ) + mt-32? ( media-libs/munt-mt32emu ) + screenshots? ( media-libs/libpng:0= ) + X? ( + x11-libs/libX11 + x11-libs/libXext + x11-libs/libXrandr + x11-libs/libxkbfile + ) + media-libs/alsa-lib + opengl? ( media-libs/libglvnd[X?] ) + media-libs/libsdl2[X?] + media-libs/sdl2-net + net-libs/libpcap + sys-libs/zlib" +RDEPEND="${DEPEND}" +BDEPEND="dev-lang/nasm" + +PATCHES=( + "${FILESDIR}/${PN}-fix-rpath.patch" + "${FILESDIR}/${PN}-invert-1624f04.patch" +) + +S="${WORKDIR}/${PN}-${PN}-v${PV}" + +src_prepare() { + default + eautoreconf +} + +src_configure() { + local fpu_arg='--disable-fpu-x86 --disable-fpu-x64' + if use fpu; then + if use x86; then + fpu_arg=--enable-fpu-x86 + elif use amd64; then + fpu_arg=--enable-fpu-x64 + fi + fi + ac_cv_lib_X11_main=$(usex X yes no) \ + econf \ + "$(use_enable !hardened dynamic-core)" \ + "$(use_enable !hardened dynamic-x86)" \ + "$(use_enable X x11)" \ + "$(use_enable core-inline)" \ + "$(use_enable debug)" \ + "$(use_enable dynrec)" \ + "$(use_enable ffmpeg avcodec)" \ + "$(use_enable fluidsynth libfluidsynth)" \ + "$(use_enable fpu "${fpu_arg}")" \ + "$(use_enable freetype)" \ + "$(use_enable midi alsa-midi)" \ + "$(use_enable mt-32 mt32)" \ + "$(use_enable opengl)" \ + "$(use_enable printer)" \ + "$(use_enable screenshots)" \ + "$(use_enable slirp libslirp)" \ + "$(use_enable unaligned unaligned-memory)" \ + "$(use_enable xbrz)" \ + --disable-optimize \ + --enable-sdl2 +} diff --git a/games-emulation/dosbox-x/files/dosbox-x-fix-rpath.patch b/games-emulation/dosbox-x/files/dosbox-x-fix-rpath.patch new file mode 100644 index 0000000..e2c4a3d --- /dev/null +++ b/games-emulation/dosbox-x/files/dosbox-x-fix-rpath.patch @@ -0,0 +1,12 @@ +diff --git a/configure.ac b/configure.ac +index 8e98dc4e9..a21cb36f4 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -422,6 +422,7 @@ if test -n "$SDL2_LIBS"; then + CPPFLAGS="$CPPFLAGS $SDL2_CFLAGS" + else + if test -n "$SDL_LIBS"; then ++ SDL_LIBS="$(echo "$SDL_LIBS" | sed -e 's/-Wl,-rpath,[[^ ]]\+ //')" + LIBS="$LIBS $SDL_LIBS" + CPPFLAGS="$CPPFLAGS $SDL_CFLAGS" + else diff --git a/games-emulation/dosbox-x/files/dosbox-x-invert-1624f04.patch b/games-emulation/dosbox-x/files/dosbox-x-invert-1624f04.patch new file mode 100644 index 0000000..3cf2299 --- /dev/null +++ b/games-emulation/dosbox-x/files/dosbox-x-invert-1624f04.patch @@ -0,0 +1,30 @@ +--- b/src/output/output_opengl.cpp ++++ a/src/output/output_opengl.cpp +@@ -199,11 +199,7 @@ + + #if DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW + /* scale the menu bar if the window is large enough */ ++ { +- /* SDL drawn menus cannot coexist with 3Dfx emulation. In fact, there is a serious +- * bug in SDL1 builds that rapidly expands the vertical size of the menu every frame. */ +- if (Voodoo_OGL_GetWidth() != 0 && Voodoo_OGL_GetHeight() != 0 && Voodoo_OGL_Active() && sdl.desktop.prevent_fullscreen) { +- } +- else { + int cw = fixedWidth, ch = fixedHeight; + int scale = 1; + +@@ -259,12 +255,8 @@ + #if DOSBOXMENU_TYPE == DOSBOXMENU_SDLDRAW + if (mainMenu.isVisible() && !sdl.desktop.fullscreen) + { ++ windowHeight += mainMenu.menuBox.h; ++ sdl.clip.y += mainMenu.menuBox.h; +- if (Voodoo_OGL_GetWidth() != 0 && Voodoo_OGL_GetHeight() != 0 && Voodoo_OGL_Active() && sdl.desktop.prevent_fullscreen) { +- } +- else { +- windowHeight += mainMenu.menuBox.h; +- sdl.clip.y += mainMenu.menuBox.h; +- } + } + #endif + diff --git a/games-emulation/dosbox-x/metadata.xml b/games-emulation/dosbox-x/metadata.xml new file mode 100644 index 0000000..5ae1d79 --- /dev/null +++ b/games-emulation/dosbox-x/metadata.xml @@ -0,0 +1,25 @@ + + + + + audvare@gmail.com + Andrew Udvare + + + joncampbell123/dosbox-x + + + Enable memory-increasing inlines for better performance but requiring more build time + Use recompiling cpu core instead of dynamic x86/x64 specific cpu core + Use media-sound/fluidsynth for MIDI emulation + Enable FPU emulation + Enable FreeType support + Enable MIDI support (with ALSA) + Use media-libs/munt-mt32emu for MT-32 emulation + Enable printer emulation + Screenshots and movie recording + Enable libslirp support + Enable unaligned memory access + Enable support for xBRZ pixel scaler + + diff --git a/games-fps/zandronum/Manifest b/games-fps/zandronum/Manifest new file mode 100644 index 0000000..ed564f8 --- /dev/null +++ b/games-fps/zandronum/Manifest @@ -0,0 +1 @@ +DIST zandronum-3.1.tar.gz 6872680 BLAKE2B 928cde28afba3d934fb75e1c596bac09e2fb6a8329f953be8e83c197fe2a10f2ffb6ff31647245219c303129a122b072cd9ce23b96148725a02c5d1c89e69840 SHA512 708781e09902a2f18a0193bda886758873c23a4974a7ab309c3a60d44f83842a40472a9c5cae03408e8dfdcccdea1b94027c80e9a3ba1c16a08cba8e76f096ed diff --git a/games-fps/zandronum/files/remove-revision-check.patch b/games-fps/zandronum/files/remove-revision-check.patch new file mode 100644 index 0000000..ebd703d --- /dev/null +++ b/games-fps/zandronum/files/remove-revision-check.patch @@ -0,0 +1,26 @@ +--- a/src/CMakeLists.txt 2019-10-13 21:38:53.000000000 +0200 ++++ b/src/CMakeLists.txt 2021-11-24 10:55:32.946070583 +0100 +@@ -636,15 +636,6 @@ + add_definitions( -DBACKPATCH ) + endif( BACKPATCH ) + +-# Update gitinfo.h +- +-get_target_property( UPDATEREVISION_EXE updaterevision LOCATION ) +- +-add_custom_target( revision_check ALL +- COMMAND ${UPDATEREVISION_EXE} src/gitinfo.h +- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} +- DEPENDS updaterevision ) +- + # Libraries ZDoom needs + + message( STATUS "Fluid synth libs: ${FLUIDSYNTH_LIBRARIES}" ) +@@ -1459,7 +1450,6 @@ + ${CMAKE_BINARY_DIR}/gdtoa + ${SYSTEM_SOURCES_DIR} ) + +-add_dependencies( zdoom revision_check ) + # [TP] + add_dependencies( zdoom protocolspec ) + diff --git a/games-fps/zandronum/metadata.xml b/games-fps/zandronum/metadata.xml new file mode 100644 index 0000000..a04f51b --- /dev/null +++ b/games-fps/zandronum/metadata.xml @@ -0,0 +1,12 @@ + + + + + Build zandronum-server + Build graphical IWAD picker + Build zandronum client + Use system-wide installed dev-db/sqlite instead of bundled one + Use system-wide installed media-libs/dumb instead of bundled one + Use system-wide installed dev-libs/geoip instead of bundled one + + diff --git a/games-fps/zandronum/zandronum-3.1.ebuild b/games-fps/zandronum/zandronum-3.1.ebuild new file mode 100644 index 0000000..31cee42 --- /dev/null +++ b/games-fps/zandronum/zandronum-3.1.ebuild @@ -0,0 +1,138 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit cmake desktop + +MY_TAG="ZA_3.1" +MY_TAG_COMMIT="zandronum-stable-ZA_3.1" +MY_COMMIT_UTC_TIMESTAMP="1639258555" + +DESCRIPTION="OpenGL ZDoom port with Client/Server multiplayer" +HOMEPAGE="https://zandronum.com/" +#SRC_URI="https://osdn.dl.osdn.net/scmarchive/g/${PN}/hg/${PN}-stable/${MY_COMMIT:0:2}/${MY_COMMIT:2:4}/${PN}-stable-${MY_COMMIT:0:6}.tar.gz -> ${P}.tar.gz" +SRC_URI="https://foss.heptapod.net/zandronum/zandronum-stable/-/archive/${MY_TAG}/${MY_TAG_COMMIT}.tar.gz -> ${P}.tar.gz" + +LICENSE="Sleepycat" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="cpu_flags_x86_mmx dedicated +gtk +opengl system-dumb system-geoip +system-sqlite timidity" + +REQUIRED_USE="|| ( dedicated opengl ) + gtk? ( opengl ) + timidity? ( opengl )" + +RDEPEND="gtk? ( x11-libs/gtk+:2 ) + timidity? ( media-sound/timidity++ ) + opengl? ( media-libs/fmod + media-libs/game-music-emu + media-libs/glew + media-libs/libsdl[opengl] + virtual/glu + virtual/jpeg + virtual/opengl + ) + system-dumb? ( >=media-libs/dumb-2 ) + system-geoip? ( dev-libs/geoip ) + system-sqlite? ( dev-db/sqlite ) + app-arch/bzip2 + dev-libs/openssl:0 + sys-libs/zlib" + +DEPEND="${RDEPEND} + cpu_flags_x86_mmx? ( || ( dev-lang/nasm dev-lang/yasm ) )" + +#S="${WORKDIR}/${PN}-stable-${MY_COMMIT:0:6}" +S="${WORKDIR}/${MY_TAG_COMMIT}" + +src_prepare() { + # Normally Mercurial would generate gitinfo.h for NETGAMEVERSION + # let's do it without Mercurial + eapply "${FILESDIR}/remove-revision-check.patch" + echo "#define HG_REVISION_NUMBER ${MY_COMMIT_UTC_TIMESTAMP}" > src/gitinfo.h + echo "#define HG_REVISION_HASH_STRING \"0\"" >> src/gitinfo.h + echo "#define HG_TIME \"\"" >> src/gitinfo.h + + # Use system libs + # (lzma can't be system-libbed as the Gentoo ebuild provides no sources) + for lib in dumb geoip sqlite; do + use system-$lib && sed -i -e "/add_subdirectory( $lib )/Id" CMakeLists.txt + done + + # Use default data path + sed -i -e "s:/usr/local/share/:/usr/share/doom/:" src/sdl/i_system.h || die + + # Fix building with gcc-5 + use system-dumb || sed -i -e 's/ restrict/ _restrict/g' dumb/include/dumb.h dumb/src/it/*.c || die + + cmake_src_prepare +} + +src_configure() { + mycmakeargs=( + -DFORCE_INTERNAL_GME="OFF" + -DNO_ASM="$(usex cpu_flags_x86_mmx OFF ON)" + -DNO_GTK="$(usex gtk OFF ON)" + -DBUILD_SHARED_LIBS=OFF + ) + + # Can't build both client and server at once... so separate them + if use opengl; then + BUILD_DIR="${WORKDIR}/${P}_client" + cmake_src_configure + fi + if use dedicated; then + BUILD_DIR="${WORKDIR}/${P}_server" + mycmakeargs+=(-DSERVERONLY=1) + cmake_src_configure + fi +} + +src_compile() { + if use opengl; then + BUILD_DIR="${WORKDIR}/${P}_client" + cmake_build + fi + if use dedicated; then + BUILD_DIR="${WORKDIR}/${P}_server" + cmake_build + fi +} + +src_install() { + dodoc docs/{commands,zandronum*}.txt docs/console.{css,html} + + cd "${BUILD_DIR}" + insinto "/usr/share/doom" + doins *.pk3 + + if use opengl; then + dobin "${WORKDIR}/${P}_client/${PN}" + doicon "${S}/src/win32/zandronum.ico" + make_desktop_entry "${PN}" "Zandronum" "${PN}.ico" "Game;ActionGame;" + fi + if use dedicated; then + dobin "${WORKDIR}/${P}_server/${PN}-server" + fi + + # don't install this now + rm "${D}/usr/share/doom/brightmaps.pk3" +} +pkg_postinst() { + # install here to avoid collisions with games-fps/gzdoom + # hacky, i know. should've listened to juippis :) please don't hit me. + # note: brightmaps.pk3 NEEDS TO KEEP ITS NAME to not break online play + # on servers that mistakenly add it as a required pwad. + #cp -n "${BUILD_DIR}/brightmaps.pk3" "${EPREFIX}/usr/share/doom/" + + ewarn "For parity with the gzdoom ebuild, the data path has been changed yet again!" + ewarn "It is ${EPREFIX}/usr/share/doom - copy/link wad files there or in \$HOME/.config/zandronum" + ewarn "If after an upgrade the game complains about not finding zandronum.pk3," + ewarn "edit the [*Search.Directories] sections in \$HOME/.config/zandronum/zandronum.ini." + + if use opengl; then + elog + elog "To play online, install games-util/doomseeker" + fi +} diff --git a/games-fps/zandronum/zandronum-3.2-alpha.ebuild b/games-fps/zandronum/zandronum-3.2-alpha.ebuild new file mode 100644 index 0000000..31cee42 --- /dev/null +++ b/games-fps/zandronum/zandronum-3.2-alpha.ebuild @@ -0,0 +1,138 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit cmake desktop + +MY_TAG="ZA_3.1" +MY_TAG_COMMIT="zandronum-stable-ZA_3.1" +MY_COMMIT_UTC_TIMESTAMP="1639258555" + +DESCRIPTION="OpenGL ZDoom port with Client/Server multiplayer" +HOMEPAGE="https://zandronum.com/" +#SRC_URI="https://osdn.dl.osdn.net/scmarchive/g/${PN}/hg/${PN}-stable/${MY_COMMIT:0:2}/${MY_COMMIT:2:4}/${PN}-stable-${MY_COMMIT:0:6}.tar.gz -> ${P}.tar.gz" +SRC_URI="https://foss.heptapod.net/zandronum/zandronum-stable/-/archive/${MY_TAG}/${MY_TAG_COMMIT}.tar.gz -> ${P}.tar.gz" + +LICENSE="Sleepycat" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="cpu_flags_x86_mmx dedicated +gtk +opengl system-dumb system-geoip +system-sqlite timidity" + +REQUIRED_USE="|| ( dedicated opengl ) + gtk? ( opengl ) + timidity? ( opengl )" + +RDEPEND="gtk? ( x11-libs/gtk+:2 ) + timidity? ( media-sound/timidity++ ) + opengl? ( media-libs/fmod + media-libs/game-music-emu + media-libs/glew + media-libs/libsdl[opengl] + virtual/glu + virtual/jpeg + virtual/opengl + ) + system-dumb? ( >=media-libs/dumb-2 ) + system-geoip? ( dev-libs/geoip ) + system-sqlite? ( dev-db/sqlite ) + app-arch/bzip2 + dev-libs/openssl:0 + sys-libs/zlib" + +DEPEND="${RDEPEND} + cpu_flags_x86_mmx? ( || ( dev-lang/nasm dev-lang/yasm ) )" + +#S="${WORKDIR}/${PN}-stable-${MY_COMMIT:0:6}" +S="${WORKDIR}/${MY_TAG_COMMIT}" + +src_prepare() { + # Normally Mercurial would generate gitinfo.h for NETGAMEVERSION + # let's do it without Mercurial + eapply "${FILESDIR}/remove-revision-check.patch" + echo "#define HG_REVISION_NUMBER ${MY_COMMIT_UTC_TIMESTAMP}" > src/gitinfo.h + echo "#define HG_REVISION_HASH_STRING \"0\"" >> src/gitinfo.h + echo "#define HG_TIME \"\"" >> src/gitinfo.h + + # Use system libs + # (lzma can't be system-libbed as the Gentoo ebuild provides no sources) + for lib in dumb geoip sqlite; do + use system-$lib && sed -i -e "/add_subdirectory( $lib )/Id" CMakeLists.txt + done + + # Use default data path + sed -i -e "s:/usr/local/share/:/usr/share/doom/:" src/sdl/i_system.h || die + + # Fix building with gcc-5 + use system-dumb || sed -i -e 's/ restrict/ _restrict/g' dumb/include/dumb.h dumb/src/it/*.c || die + + cmake_src_prepare +} + +src_configure() { + mycmakeargs=( + -DFORCE_INTERNAL_GME="OFF" + -DNO_ASM="$(usex cpu_flags_x86_mmx OFF ON)" + -DNO_GTK="$(usex gtk OFF ON)" + -DBUILD_SHARED_LIBS=OFF + ) + + # Can't build both client and server at once... so separate them + if use opengl; then + BUILD_DIR="${WORKDIR}/${P}_client" + cmake_src_configure + fi + if use dedicated; then + BUILD_DIR="${WORKDIR}/${P}_server" + mycmakeargs+=(-DSERVERONLY=1) + cmake_src_configure + fi +} + +src_compile() { + if use opengl; then + BUILD_DIR="${WORKDIR}/${P}_client" + cmake_build + fi + if use dedicated; then + BUILD_DIR="${WORKDIR}/${P}_server" + cmake_build + fi +} + +src_install() { + dodoc docs/{commands,zandronum*}.txt docs/console.{css,html} + + cd "${BUILD_DIR}" + insinto "/usr/share/doom" + doins *.pk3 + + if use opengl; then + dobin "${WORKDIR}/${P}_client/${PN}" + doicon "${S}/src/win32/zandronum.ico" + make_desktop_entry "${PN}" "Zandronum" "${PN}.ico" "Game;ActionGame;" + fi + if use dedicated; then + dobin "${WORKDIR}/${P}_server/${PN}-server" + fi + + # don't install this now + rm "${D}/usr/share/doom/brightmaps.pk3" +} +pkg_postinst() { + # install here to avoid collisions with games-fps/gzdoom + # hacky, i know. should've listened to juippis :) please don't hit me. + # note: brightmaps.pk3 NEEDS TO KEEP ITS NAME to not break online play + # on servers that mistakenly add it as a required pwad. + #cp -n "${BUILD_DIR}/brightmaps.pk3" "${EPREFIX}/usr/share/doom/" + + ewarn "For parity with the gzdoom ebuild, the data path has been changed yet again!" + ewarn "It is ${EPREFIX}/usr/share/doom - copy/link wad files there or in \$HOME/.config/zandronum" + ewarn "If after an upgrade the game complains about not finding zandronum.pk3," + ewarn "edit the [*Search.Directories] sections in \$HOME/.config/zandronum/zandronum.ini." + + if use opengl; then + elog + elog "To play online, install games-util/doomseeker" + fi +} diff --git a/games-util/slade/Manifest b/games-util/slade/Manifest new file mode 100644 index 0000000..ed29c35 --- /dev/null +++ b/games-util/slade/Manifest @@ -0,0 +1 @@ +DIST slade-3.2.6.tar.gz 7027328 BLAKE2B ba0db4926f5706166ec2439cbb539a9d5330e2d3ea3dbd8e29b586cf57a23b7b254823d84b7ba79b604a86ed0e5753b4e7c4fcf825ba7d3217c52824f36c5be4 SHA512 d09631b24c83769482480c24dfc1f6992ae293bdfe4c8661d967d6ac0fcbba6f0e1bf58c58afc84a82fb5f900d9e0e99413800a42edc353a4f7f1f52781db54f diff --git a/games-util/slade/files/slade-3.2.0_beta2-fluidsynth-driver.patch b/games-util/slade/files/slade-3.2.0_beta2-fluidsynth-driver.patch new file mode 100644 index 0000000..bd828d8 --- /dev/null +++ b/games-util/slade/files/slade-3.2.0_beta2-fluidsynth-driver.patch @@ -0,0 +1,27 @@ +From dc0057d1200f9bb6b67f1b1a2094b7e402d1d370 Mon Sep 17 00:00:00 2001 +From: James Le Cuirot +Date: Sat, 20 Feb 2021 12:28:48 +0000 +Subject: [PATCH] Don't force FluidSynth to use ALSA on Linux + +--- + src/Audio/MIDIPlayer.cpp | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/src/Audio/MIDIPlayer.cpp b/src/Audio/MIDIPlayer.cpp +index bb001339..f33ffe67 100644 +--- a/src/Audio/MIDIPlayer.cpp ++++ b/src/Audio/MIDIPlayer.cpp +@@ -344,10 +344,6 @@ public: + fs_initialised_ = false; + file_ = ""; + +- // Set fluidsynth driver to alsa in linux (no idea why it defaults to jack) +- if (app::platform() == app::Platform::Linux && fs_driver.value.empty()) +- fs_driver = "alsa"; +- + // Init soundfont path + if (fs_soundfont_path.value.empty()) + { +-- +2.30.0 + diff --git a/games-util/slade/files/slade-3.2.2-wayland.patch b/games-util/slade/files/slade-3.2.2-wayland.patch new file mode 100644 index 0000000..4207ceb --- /dev/null +++ b/games-util/slade/files/slade-3.2.2-wayland.patch @@ -0,0 +1,25 @@ +SFML's render window only supports X11 under Linux, so SLADE crashes if GDK +chooses the Wayland backend. This patch tells GDK to prefer the X11 backend. +SLADE 3.3.0 will apparently not use the render window. + +diff --git a/src/Application/SLADEWxApp.cpp b/src/Application/SLADEWxApp.cpp +index 3dadf241..de01e340 100644 +--- a/src/Application/SLADEWxApp.cpp ++++ b/src/Application/SLADEWxApp.cpp +@@ -52,6 +52,16 @@ + using namespace slade; + + ++#ifdef __WXGTK__ ++#include ++ ++struct PreferX11 { ++ PreferX11() { gdk_set_allowed_backends("x11,*"); } ++}; ++static PreferX11 preferx11; ++#endif ++ ++ + // ----------------------------------------------------------------------------- + // + // Variables diff --git a/games-util/slade/metadata.xml b/games-util/slade/metadata.xml new file mode 100644 index 0000000..106fdf8 --- /dev/null +++ b/games-util/slade/metadata.xml @@ -0,0 +1,14 @@ + + + + + games@gentoo.org + Gentoo Games Project + + + sirjuddington/SLADE + + + Enable MIDI software synthesis using media-sound/fluidsynth + + diff --git a/games-util/slade/slade-3.2.6.ebuild b/games-util/slade/slade-3.2.6.ebuild new file mode 100644 index 0000000..48395e6 --- /dev/null +++ b/games-util/slade/slade-3.2.6.ebuild @@ -0,0 +1,80 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +LUA_COMPAT=( lua5-{1..3} ) +WX_GTK_VER="3.2-gtk3" + +inherit cmake lua-single wxwidgets + +MY_PV="${PV/beta/b}" +DESCRIPTION="Modern editor for Doom-engine based games and source ports" +HOMEPAGE="https://slade.mancubus.net/" +SRC_URI="https://github.com/sirjuddington/${PN^^}/archive/${MY_PV}.tar.gz -> ${P}.tar.gz" +LICENSE="GPL-2 MIT" +SLOT="0" +KEYWORDS="~amd64" +IUSE="fluidsynth timidity webkit" +REQUIRED_USE="${LUA_REQUIRED_USE}" + +DEPEND=" + ${LUA_DEPS} + app-arch/bzip2:= + dev-libs/libfmt:= + >=media-libs/dumb-2:= + media-libs/freeimage[jpeg,png,tiff] + media-libs/glew:0= + media-libs/libsfml:= + media-sound/mpg123 + net-misc/curl + sys-libs/zlib + x11-libs/wxGTK:${WX_GTK_VER}[opengl,webkit?,X] + fluidsynth? ( media-sound/fluidsynth:= ) +" + +RDEPEND=" + ${DEPEND} + timidity? ( media-sound/timidity++ ) +" + +BDEPEND=" + app-arch/p7zip + virtual/pkgconfig +" + +S="${WORKDIR}/${PN^^}-${MY_PV}" + +PATCHES=( + "${FILESDIR}"/${PN}-3.2.0_beta2-fluidsynth-driver.patch + "${FILESDIR}"/${PN}-3.2.2-wayland.patch +) + +src_prepare() { + cmake_src_prepare + + # Delete bundled libraries just in case. + rm -r thirdparty/dumb/ thirdparty/fmt/ || die + +} + +src_configure() { + local luav=$(lua_get_version) + + local mycmakeargs=( + -DLua_FIND_VERSION_MAJOR=$(ver_cut 1 "${luav}") + -DLua_FIND_VERSION_MINOR=$(ver_cut 2 "${luav}") + -DLua_FIND_VERSION_COUNT=2 + -DLua_FIND_VERSION_EXACT=ON + -DNO_COTIRE=ON + -DNO_FLUIDSYNTH=$(usex fluidsynth OFF ON) + -DNO_WEBVIEW=$(usex webkit OFF ON) + -DUSE_SFML_RENDERWINDOW=ON + -DUSE_SYSTEM_DUMB=ON + -DUSE_SYSTEM_FMT=ON + -DWX_GTK3=ON + ) + + setup-wxwidgets + cmake_src_configure +} diff --git a/gui-apps/yambar/Manifest b/gui-apps/yambar/Manifest new file mode 100644 index 0000000..f30f7d2 --- /dev/null +++ b/gui-apps/yambar/Manifest @@ -0,0 +1 @@ +DIST yambar-1.10.0.tar.gz 190288 BLAKE2B 35bfd50b27241724fa29f0ea6b1031dad793d1ff2c8342f5ed40bdc1fb390a32813d17b6c3063184109769a54fb5c5bce876a83974cdbb17679fd80a88d9d797 SHA512 c8d1e807017f62886cba65dab9933913f473eeeae8cbf8d44ddd4953754a55c81def9a02506b28a7ea7264325748db0a0ca4cdff39ba74a06f531e6e55878b35 diff --git a/gui-apps/yambar/metadata.xml b/gui-apps/yambar/metadata.xml new file mode 100644 index 0000000..32dc3c8 --- /dev/null +++ b/gui-apps/yambar/metadata.xml @@ -0,0 +1,11 @@ + + + + + floss@bsd.ac + Aisha Tammy + + + Build plugins as dynamically loaded shared librarie + + diff --git a/gui-apps/yambar/yambar-1.10.0.ebuild b/gui-apps/yambar/yambar-1.10.0.ebuild new file mode 100644 index 0000000..3298be8 --- /dev/null +++ b/gui-apps/yambar/yambar-1.10.0.ebuild @@ -0,0 +1,62 @@ +# Copyright 2021 Aisha Tammy +# Distributed under the terms of the ISC License + +EAPI=8 + +inherit meson xdg + +DESCRIPTION="Modular status panel for X11 and Wayland" +HOMEPAGE="https://codeberg.org/dnkl/yambar" + +if [[ ${PV} == 9999 ]]; then + inherit git-r3 + EGIT_REPO_URI="https://codeberg.org/dnkl/yambar" +else + SRC_URI="https://codeberg.org/dnkl/yambar/archive/${PV}.tar.gz -> ${P}.tar.gz" + S="${WORKDIR}"/${PN} + KEYWORDS="~amd64" +fi + +LICENSE="MIT" +SLOT="0" +IUSE="modules" + +RDEPEND=" + dev-libs/libyaml + dev-libs/wayland + media-libs/fcft + media-libs/libmpdclient + x11-libs/cairo + x11-libs/gtk+:3 + x11-libs/libnotify + x11-libs/libxcb + x11-libs/pango + x11-libs/xcb-util + x11-libs/xcb-util-cursor + x11-libs/xcb-util-wm +" +DEPEND="${RDEPEND} + dev-libs/tllist +" +BDEPEND=" + app-text/scdoc + dev-libs/wayland-protocols + virtual/pkgconfig +" + +src_configure() { + local emesonargs=( + -Dwerror=false + -Dbackend-x11=enabled + -Dbackend-wayland=enabled + $(meson_use modules core-plugins-as-shared-libraries) + ) + meson_src_configure +} + +src_install() { + meson_src_install + rm -r "${ED}/usr/share/doc/${PN}" || die + local -x DOCS=( LICENSE README.md CHANGELOG.md ) + einstalldocs +} diff --git a/media-libs/fmod/Manifest b/media-libs/fmod/Manifest new file mode 100644 index 0000000..a78e9e7 --- /dev/null +++ b/media-libs/fmod/Manifest @@ -0,0 +1 @@ +DIST fmodapi44464linux.tar.gz 25520093 BLAKE2B 4a702aed24c1a42d35462341290a1c71717e208229c640931c06b9d80580f4e5f0b984ab2c7ee024defc1dc7b9d0e21bd13c1148a2814e1e3bb3aea0f8409f6a SHA512 af365f82eea8b7e38bb8c3910470b28626ac58d46ae8122bbdaf51b5339810504cd0f541334c5e989180b3a6b2ecdcf7bc82c00ce3ef1f6af5278df20a20d611 diff --git a/media-libs/fmod/fmod-4.44.64.ebuild b/media-libs/fmod/fmod-4.44.64.ebuild new file mode 100644 index 0000000..623a3d0 --- /dev/null +++ b/media-libs/fmod/fmod-4.44.64.ebuild @@ -0,0 +1,48 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +MY_PV=$(ver_rs 1- '') + +DESCRIPTION="Libraries of the fmodex audio engine" +HOMEPAGE="https://zdoom.org/files/fmod/ https://www.fmod.com/" +SRC_URI="https://zdoom.org/files/fmod/fmodapi${MY_PV}linux.tar.gz" +S="${WORKDIR}/fmodapi${MY_PV}linux" + +# Ogg Vorbis: BSD +# Android: BSD-2 +LICENSE="BSD BSD-2 fmod" +SLOT="0" +KEYWORDS="~amd64 ~x86" + +RESTRICT="strip test" + +QA_PREBUILT="*" + +src_compile() { :; } + +src_install() { + cd "${S}/api/lib/" || die + for lib in libfmodex libfmodexL + do + dolib.so ${lib}64-${PV}.so + dolib.so ${lib}64.so + dolib.so ${lib}-${PV}.so + dolib.so ${lib}.so + done + + cd "${S}/fmoddesignerapi/api/lib/" || die + for lib in libfmodevent libfmodeventL libfmodeventnet libfmodeventnetL + do + dolib.so ${lib}64-${PV}.so + dolib.so ${lib}64.so + dolib.so ${lib}-${PV}.so + dolib.so ${lib}.so + done + + cd "${S}/api/inc/" || die + doheader * + cd "${S}/fmoddesignerapi/api/inc/" || die + doheader * +} diff --git a/media-libs/libsdl3/Manifest b/media-libs/libsdl3/Manifest new file mode 100644 index 0000000..eb66b9c --- /dev/null +++ b/media-libs/libsdl3/Manifest @@ -0,0 +1 @@ +DIST libsdl3-3.1.6.tar.gz 7773892 BLAKE2B 6701e4d65816bc2845096f69479ca2759a24c365d1bb25be2e7588b96dbe9eeec1eb7e7031d1b72911fbe198d3358f67feb308a23cc8cc80e509731dddda8b1b SHA512 a0ca7263cd2f1b883829c39ae0ee2ea18d814f8dde768c8be9a49487193bc856bb45870764fd70169e75d2ec80457e5b45811c07a926479f1ac4f9d3157f40a4 diff --git a/media-libs/libsdl3/libsdl3-3.1.6.ebuild b/media-libs/libsdl3/libsdl3-3.1.6.ebuild new file mode 100644 index 0000000..55df6ff --- /dev/null +++ b/media-libs/libsdl3/libsdl3-3.1.6.ebuild @@ -0,0 +1,203 @@ +# Copyright 2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit cmake-multilib flag-o-matic + +DESCRIPTION="Simple Direct Media Layer" +HOMEPAGE="https://www.libsdl.org/" +SRC_URI="https://github.com/libsdl-org/SDL/archive/refs/tags/preview-${PV}.tar.gz -> ${P}.tar.gz" +S="${WORKDIR}/SDL-preview-${PV}" + +LICENSE="ZLIB" +SLOT="0" +KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~x86" + +IUSE="X alsa +sound cpu_flags_x86_avx cpu_flags_x86_avx2 cpu_flags_x86_avx512f cpu_flags_x86_mmx cpu_flags_x86_sse cpu_flags_x86_sse2 \ +cpu_flags_x86_sse3 cpu_flags_x86_sse4_1 cpu_flags_x86_sse4_2 camera custom-cflags dbus debug doc gles1 gles2 +haptic ibus \ +jack +joystick kms opengl pipewire pulseaudio sndio static-libs \ +test udev +video vulkan wayland xscreensaver" +RESTRICT="!test? ( test )" + +REQUIRED_USE=" + alsa? ( sound ) + haptic? ( joystick ) + ibus? ( dbus ) + jack? ( sound ) + gles1? ( video ) + gles2? ( video ) + opengl? ( video ) + pipewire? ( sound ) + pulseaudio? ( sound ) + sndio? ( sound ) + vulkan? ( video ) + wayland? ( gles2 ) + xscreensaver? ( X ) +" + +COMMON_DEPEND=" + X? ( + >=x11-libs/libX11-1.6.2[${MULTILIB_USEDEP}] + >=x11-libs/libXcursor-1.1.14[${MULTILIB_USEDEP}] + >=x11-libs/libXext-1.3.2[${MULTILIB_USEDEP}] + >=x11-libs/libXfixes-6.0.0[${MULTILIB_USEDEP}] + >=x11-libs/libXi-1.7.2[${MULTILIB_USEDEP}] + >=x11-libs/libXrandr-1.4.2[${MULTILIB_USEDEP}] + xscreensaver? ( >=x11-libs/libXScrnSaver-1.2.2-r1[${MULTILIB_USEDEP}] ) + ) + alsa? ( >=media-libs/alsa-lib-1.0.27.2[${MULTILIB_USEDEP}] ) + dbus? ( >=sys-apps/dbus-1.6.18-r1[${MULTILIB_USEDEP}] ) + ibus? ( app-i18n/ibus ) + jack? ( virtual/jack[${MULTILIB_USEDEP}] ) + kms? ( + >=x11-libs/libdrm-2.4.82[${MULTILIB_USEDEP}] + >=media-libs/mesa-9.0.0[${MULTILIB_USEDEP}] + ) + opengl? ( + >=virtual/opengl-7.0-r1[${MULTILIB_USEDEP}] + >=virtual/glu-9.0-r1[${MULTILIB_USEDEP}] + ) + pipewire? ( media-video/pipewire:=[${MULTILIB_USEDEP}] ) + pulseaudio? ( media-libs/libpulse[${MULTILIB_USEDEP}] ) + sndio? ( media-sound/sndio:=[${MULTILIB_USEDEP}] ) + udev? ( >=virtual/libudev-208:=[${MULTILIB_USEDEP}] ) + virtual/libiconv[${MULTILIB_USEDEP}] + wayland? ( + >=dev-libs/wayland-1.20[${MULTILIB_USEDEP}] + gui-libs/libdecor[${MULTILIB_USEDEP}] + >=media-libs/mesa-9.1.6[${MULTILIB_USEDEP},wayland] + >=x11-libs/libxkbcommon-0.2.0[${MULTILIB_USEDEP}] + ) +" +RDEPEND=" + ${COMMON_DEPEND} + opengl? ( media-libs/mesa[${MULTILIB_USEDEP},opengl(+)] ) + vulkan? ( + media-libs/mesa[${MULTILIB_USEDEP},vulkan(+)] + vulkan? ( media-libs/vulkan-loader[${MULTILIB_USEDEP}] ) + ) +" +DEPEND=" + ${COMMON_DEPEND} + gles1? ( media-libs/libglvnd ) + gles2? ( media-libs/libglvnd ) + ibus? ( dev-libs/glib:2 ) + test? ( x11-libs/libX11[${MULTILIB_USEDEP}] ) + vulkan? ( dev-util/vulkan-headers ) + X? ( x11-base/xorg-proto ) +" +BDEPEND=" + virtual/pkgconfig + doc? ( + app-text/doxygen + media-gfx/graphviz + ) + wayland? ( >=dev-util/wayland-scanner-1.20 ) +" + +src_prepare() { + cmake_src_prepare + + # Unbundle some headers. + rm -r src/video/khronos || die + ln -s "${ESYSROOT}/usr/include" src/video/khronos || die +} + +src_configure() { + use custom-cflags || strip-flags + + local mycmakeargs=( + -DSDL_ALSA=$(usex alsa) + -DSDL_ALSA_SHARED=OFF + -DSDL_ASAN=$(usex debug) + -DSDL_ASSEMBLY=ON + -DSDL_ASSERTIONS=$(usex debug enabled disabled) + -DSDL_AUDIO=$(usex sound) + -DSDL_AVX=$(usex cpu_flags_x86_avx) + -DSDL_AVX2=$(usex cpu_flags_x86_avx2) + -DSDL_AVX512F=$(usex cpu_flags_x86_avx512f) + -DSDL_CAMERA=$(usex camera) + -DSDL_CCACHE=OFF + -DSDL_DBUS=$(usex dbus) + -DSDL_DIALOG=ON + -DSDL_DISABLE_INSTALL=OFF + -DSDL_DISABLE_INSTALL_CPACK=OFF + -DSDL_DISABLE_INSTALL_DOCS=$(usex doc OFF ON) + -DSDL_DISKAUDIO=$(usex sound) + -DSDL_DUMMYAUDIO=$(use sound) + -DSDL_DUMMYCAMERA=$(use camera) + -DSDL_DUMMYVIDEO=$(use video) + -DSDL_EXAMPLES=$(usex doc) + -DSDL_EXAMPLES_LINK_SHARED=OFF + -DSDL_GCC_ATOMICS=ON + -DSDL_GPU=$(usex video) + -DSDL_HAPTIC=$(usex haptic) + -DSDL_IBUS=$(usex ibus) + -DSDL_JACK=$(usex jack) + -DSDL_JACK_SHARED=OFF + -DSDL_JOYSTICK=$(usex joystick) + -DSDL_HIDAPI=ON + -DSDL_KMSDRM=$(usex kms) + -DSDL_KMSDRM_SHARED=OFF + -DSDL_LIBC=ON + -DSDL_LIBICONV=ON + -DSDL_SYSTEM_ICONV=ON + -DSDL_LIBUDEV=$(usex udev) + -DSDL_MMX=$(usex cpu_flags_x86_mmx) + -DSDL_OPENGL=$(usex opengl) + -DSDL_OPENGLES=$(usex gles1 || usex gles2 && echo ON || echo OFF) + -DSDL_PIPEWIRE=$(usex pipewire) + -DSDL_PIPEWIRE_SHARED=OFF + -DSDL_PULSEAUDIO=$(usex pulseaudio) + -DSDL_PULSEAUDIO_SHARED=OFF + -DSDL_RENDER=$(use video) + -DSDL_RENDER_GPU=$(use video) + -DSDL_RENDER_VULKAN=$(usex vulkan) + -DSDL_RPATH=OFF + -DSDL_RPI=OFF + -DSDL_SNDIO=$(usex sndio) + -DSDL_SNDIO_SHARED=OFF + -DSDL_SSE=$(usex cpu_flags_x86_sse) + -DSDL_SSE2=$(usex cpu_flags_x86_sse2) + -DSDL_SSE3=$(usex cpu_flags_x86_sse3) + -DSDL_SSE4_1=$(usex cpu_flags_x86_sse4_1) + -DSDL_SSE4_2=$(usex cpu_flags_x86_sse4_2) + -DSDL_STATIC=$(usex static-libs) + -DSDL_TESTS=$(usex test) + -DSDL_TESTS_LINK_SHARED=OFF + -DSDL_TEST_LIBRARY=$(usex test) + -DSDL_VIDEO=$(usex video) + -DSDL_VIRTUAL_JOYSTICK=$(usex joystick) + -DSDL_VULKAN=$(usex vulkan) + -DSDL_WAYLAND=$(usex wayland) + -DSDL_WAYLAND_LIBDECOR=$(usex wayland) + -DSDL_WAYLAND_LIBDECOR_SHARED=OFF + -DSDL_WAYLAND_SHARED=OFF + -DSDL_WERROR=$(usex debug) + -DSDL_X11=$(usex X) + -DSDL_X11_SHARED=OFF + -DSDL_X11_XSCRNSAVER=$(usex xscreensaver) + ) + cmake-multilib_src_configure +} + +src_compile() { + cmake-multilib_src_compile + + if use doc; then + cd docs || die + doxygen || die + fi +} + +src_test() { + unset SDL_GAMECONTROLLERCONFIG SDL_GAMECONTROLLER_USE_BUTTON_LABELS + cmake-multilib_src_test +} + +multilib_src_install_all() { + rm -r "${ED}"/usr/share/licenses/ || die + dodoc {BUGS,README-SDL,WhatsNew}.txt CREDITS.md README.md docs/README*.md + use doc && dodoc -r docs/output/html/ +} diff --git a/media-libs/libsdl3/metadata.xml b/media-libs/libsdl3/metadata.xml new file mode 100644 index 0000000..eb663b6 --- /dev/null +++ b/media-libs/libsdl3/metadata.xml @@ -0,0 +1,37 @@ + + + + + noreply@local + nil + + + Simple DirectMedia Layer is a cross-platform multimedia library + designed to provide low level access to audio, keyboard, mouse, + joystick, 3D hardware via OpenGL, and 2D video framebuffer. It is + used by MPEG playback software, emulators, and many popular games, + including the award winning Linux port of "Civilization: Call To + Power." + + Simple DirectMedia Layer supports Linux, Windows, BeOS, MacOS + Classic, MacOS X, FreeBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX. + There is also code, but no official support, for Windows CE, + AmigaOS, Dreamcast, Atari, NetBSD, AIX, OSF/Tru64, RISC OS, and + SymbianOS. + + SDL is written in C, but works with C++ natively, and has bindings + to several other languages, including Ada, Eiffel, Java, Lua, ML, + Perl, PHP, Pike, Python, and Ruby. + + + Enable camera subsystem. + Control video support (disable at your own risk). + Control audio support (disable at your own risk). + Include OpenGL ES 1.0 support. + Enable the haptic (force feedback) subsystem + Enable support for the media-sound/sndio backend + Enable support for the media-video/pipewire audio backend + Enable support for app-i18n/ibus. + Build the KMSDRM video driver. + + diff --git a/media-libs/raylib/Manifest b/media-libs/raylib/Manifest new file mode 100644 index 0000000..e13b8a3 --- /dev/null +++ b/media-libs/raylib/Manifest @@ -0,0 +1 @@ +DIST raylib-5.0.tar.gz 32701105 BLAKE2B ee8ef069cd2a7b91efd1d97e8ed9076620c216fb0bf2eb7517624472d157c2d20919a6c54d7f8160e34c1d1a889f1766f5a94c6577bbb68f779e76a5160229dd SHA512 5956bc1646b99baac6eb1652c4d72e96af874337158672155ba144f131de8a4fd19291a58335a92fcaaa2fc818682f93ff4230af0f815efb8b49f7d2a162e9b0 diff --git a/media-libs/raylib/metadata.xml b/media-libs/raylib/metadata.xml new file mode 100644 index 0000000..904db1e --- /dev/null +++ b/media-libs/raylib/metadata.xml @@ -0,0 +1,19 @@ + + + + + noreply@local + nil + + + Add support for media-libs/alsa-lib (Advanced Linux Sound Architecture). + Build and install examples. + Build static version of dynamic libraries as well. + Use system glfw instead of build it. + Add support for X11. + Enable dev-libs/wayland backend. + + + raylib is a simple and easy-to-use library to enjoy videogames programming. + + diff --git a/media-libs/raylib/raylib-5.0.ebuild b/media-libs/raylib/raylib-5.0.ebuild new file mode 100644 index 0000000..cb0b01e --- /dev/null +++ b/media-libs/raylib/raylib-5.0.ebuild @@ -0,0 +1,65 @@ +# Copyright 2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit cmake + +DESCRIPTION="A simple and easy-to-use library to learn videogames programming" +HOMEPAGE="https://www.raylib.com/" + +LICENSE="ZLIB" +SLOT="0" + +IUSE="alsa examples static-libs +system-glfw +X wayland" +REQUIRED_USE="|| ( system-glfw || ( X wayland ) )" + +if [[ ${PV} == *9999 ]] ; then + EGIT_REPO_URI="https://github.com/raysan5/raylib.git" + inherit git-r3 +else + SRC_URI="https://github.com/raysan5/raylib/archive/${PV}.tar.gz -> ${P}.tar.gz" + KEYWORDS="~amd64" + S="${WORKDIR}/raylib-${PV}" +fi + +RDEPEND=" + alsa? ( media-libs/alsa-lib ) + X? ( + virtual/opengl + x11-libs/libX11 + x11-libs/libXcursor + x11-libs/libXi + x11-libs/libXinerama + x11-libs/libXrandr + x11-libs/libXxf86vm + ) + wayland? ( + dev-libs/wayland + media-libs/mesa[wayland] + ) + system-glfw? ( >=media-libs/glfw-3.2.1 ) +" +DEPEND="${RDEPEND}" + +src_configure() { + local mycmakeargs=( + -DBUILD_SHARED_LIBS=$(usex !static-libs ON OFF) + -DUSE_AUDIO=$(usex alsa ON OFF) + -DUSE_EXTERNAL_GLFW=$(usex system-glfw ON OFF) + -DBUILD_EXAMPLES=OFF + ) + if use !system-glfw; then + mycmakeargs+=(-DGLFW_BUILD_WAYLAND=$(usex wayland ON OFF)) + mycmakeargs+=(-DGLFW_BUILD_X11=$(usex X ON OFF)) + fi + cmake_src_configure +} + +src_install() { + cmake_src_install + + if use examples; then + dodoc -r "${S}"/examples/* + fi +} diff --git a/media-libs/raylib/raylib-9999.ebuild b/media-libs/raylib/raylib-9999.ebuild new file mode 100644 index 0000000..cb0b01e --- /dev/null +++ b/media-libs/raylib/raylib-9999.ebuild @@ -0,0 +1,65 @@ +# Copyright 2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit cmake + +DESCRIPTION="A simple and easy-to-use library to learn videogames programming" +HOMEPAGE="https://www.raylib.com/" + +LICENSE="ZLIB" +SLOT="0" + +IUSE="alsa examples static-libs +system-glfw +X wayland" +REQUIRED_USE="|| ( system-glfw || ( X wayland ) )" + +if [[ ${PV} == *9999 ]] ; then + EGIT_REPO_URI="https://github.com/raysan5/raylib.git" + inherit git-r3 +else + SRC_URI="https://github.com/raysan5/raylib/archive/${PV}.tar.gz -> ${P}.tar.gz" + KEYWORDS="~amd64" + S="${WORKDIR}/raylib-${PV}" +fi + +RDEPEND=" + alsa? ( media-libs/alsa-lib ) + X? ( + virtual/opengl + x11-libs/libX11 + x11-libs/libXcursor + x11-libs/libXi + x11-libs/libXinerama + x11-libs/libXrandr + x11-libs/libXxf86vm + ) + wayland? ( + dev-libs/wayland + media-libs/mesa[wayland] + ) + system-glfw? ( >=media-libs/glfw-3.2.1 ) +" +DEPEND="${RDEPEND}" + +src_configure() { + local mycmakeargs=( + -DBUILD_SHARED_LIBS=$(usex !static-libs ON OFF) + -DUSE_AUDIO=$(usex alsa ON OFF) + -DUSE_EXTERNAL_GLFW=$(usex system-glfw ON OFF) + -DBUILD_EXAMPLES=OFF + ) + if use !system-glfw; then + mycmakeargs+=(-DGLFW_BUILD_WAYLAND=$(usex wayland ON OFF)) + mycmakeargs+=(-DGLFW_BUILD_X11=$(usex X ON OFF)) + fi + cmake_src_configure +} + +src_install() { + cmake_src_install + + if use examples; then + dodoc -r "${S}"/examples/* + fi +} diff --git a/media-libs/shaderc/Manifest b/media-libs/shaderc/Manifest new file mode 100644 index 0000000..d1b2543 --- /dev/null +++ b/media-libs/shaderc/Manifest @@ -0,0 +1 @@ +DIST shaderc-2024.1.tar.gz 227211 BLAKE2B a4c9790cb117e4cf2d528ed294ef0599dc3c17ac367a4f658254ff9e161f82b3338a2d70a033fabcdb7a2925c2f4668ee89cfff0d4b88cd2b22fcfb3f2786ea9 SHA512 017d8625c66da7eb5b431f595b27a4ddf146aaa12ef56777cb8c3f7f0f15eb01c3286e5905c5268de55d07cc19d5ffae4d4c08987d105b0a6be74616a467b736 diff --git a/media-libs/shaderc/files/shaderc-2020.4-fix-build.patch b/media-libs/shaderc/files/shaderc-2020.4-fix-build.patch new file mode 100644 index 0000000..93f8252 --- /dev/null +++ b/media-libs/shaderc/files/shaderc-2020.4-fix-build.patch @@ -0,0 +1,13 @@ +diff --git a/libshaderc_util/src/compiler.cc b/libshaderc_util/src/compiler.cc +index c5ce37e..4703634 100644 +--- a/libshaderc_util/src/compiler.cc ++++ b/libshaderc_util/src/compiler.cc +@@ -20,7 +20,7 @@ + #include + #include + +-#include "SPIRV/GlslangToSpv.h" ++#include "glslang/SPIRV/GlslangToSpv.h" + #include "libshaderc_util/format.h" + #include "libshaderc_util/io.h" + #include "libshaderc_util/message.h" diff --git a/media-libs/shaderc/metadata.xml b/media-libs/shaderc/metadata.xml new file mode 100644 index 0000000..eaf3f12 --- /dev/null +++ b/media-libs/shaderc/metadata.xml @@ -0,0 +1,11 @@ + + + + + sarnex@gentoo.org + Nick Sarnie + + + google/shaderc + + diff --git a/media-libs/shaderc/shaderc-2024.1-r1.ebuild b/media-libs/shaderc/shaderc-2024.1-r1.ebuild new file mode 100644 index 0000000..0d318dc --- /dev/null +++ b/media-libs/shaderc/shaderc-2024.1-r1.ebuild @@ -0,0 +1,79 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +PYTHON_COMPAT=( python3_{10..13} ) +inherit cmake-multilib python-any-r1 + +DESCRIPTION="Collection of tools, libraries and tests for shader compilation" +HOMEPAGE="https://github.com/google/shaderc" +EGIT_COMMIT="${PV}" +SRC_URI="https://github.com/google/${PN}/archive/v${EGIT_COMMIT}.tar.gz -> ${P}.tar.gz" +S="${WORKDIR}/${PN}-${EGIT_COMMIT}" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="amd64 ~loong ppc64 ~riscv x86" +IUSE="doc" + +RDEPEND=" + ~dev-util/glslang-1.3.290.0:=[${MULTILIB_USEDEP}] + ~dev-util/spirv-tools-1.3.290.0[${MULTILIB_USEDEP}] +" +DEPEND="${RDEPEND} + ${PYTHON_DEPS} + ~dev-util/spirv-headers-1.3.290.0" + +BDEPEND="doc? ( dev-ruby/asciidoctor )" + +PATCHES=( + "${FILESDIR}"/${PN}-2020.4-fix-build.patch +) + +# https://github.com/google/shaderc/issues/470 +RESTRICT=test + +src_prepare() { + cmake_comment_add_subdirectory examples + + # Unbundle glslang, spirv-headers, spirv-tools + cmake_comment_add_subdirectory third_party + sed -i \ + -e "s|\$|${EPREFIX}/usr/bin/spirv-dis|" \ + glslc/test/CMakeLists.txt || die + + # Disable git versioning + sed -i -e '/build-version/d' glslc/CMakeLists.txt || die + + # Manually create build-version.inc as we disabled git versioning + cat <<- EOF > glslc/src/build-version.inc || die + "${P}\n" + "$(best_version dev-util/spirv-tools)\n" + "$(best_version dev-util/glslang)\n" + EOF + + cmake_src_prepare +} + +multilib_src_configure() { + local mycmakeargs=( + -DSHADERC_SKIP_TESTS="true" + -DSHADERC_ENABLE_WERROR_COMPILE="false" + ) + cmake_src_configure +} + +multilib_src_compile() { + if multilib_is_native_abi && use doc; then + cmake_src_compile glslc_doc_README + fi + cmake_src_compile +} + +multilib_src_install() { + if multilib_is_native_abi; then + use doc && local HTML_DOCS=( "${BUILD_DIR}/glslc/README.html" ) + fi + cmake_src_install +} diff --git a/metadata/layout.conf b/metadata/layout.conf new file mode 100644 index 0000000..20fcfea --- /dev/null +++ b/metadata/layout.conf @@ -0,0 +1,3 @@ +masters = gentoo +thin-manifests = true +sign-manifests = false diff --git a/metadata/md5-cache/dev-libs/libqt5pas-1.2.15 b/metadata/md5-cache/dev-libs/libqt5pas-1.2.15 new file mode 100644 index 0000000..6dabe40 --- /dev/null +++ b/metadata/md5-cache/dev-libs/libqt5pas-1.2.15 @@ -0,0 +1,12 @@ +DEFINED_PHASES=configure install +DEPEND=dev-qt/qtgui:5 dev-qt/qtnetwork:5 dev-qt/qtprintsupport:5 dev-qt/qtx11extras:5 dev-qt/qtcore:5 dev-qt/qtwidgets:5 +DESCRIPTION=Free Pascal Qt5 bindings library updated by lazarus IDE. +EAPI=8 +HOMEPAGE=https://gitlab.com/freepascal.org/lazarus/lazarus +INHERIT=qmake-utils +KEYWORDS=~amd64 ~x86 +LICENSE=LGPL-3 +SLOT=0/2.2 +SRC_URI=mirror://sourceforge/lazarus/lazarus-3.0-0.tar.gz -> libqt5pas-1.2.15.tar.gz +_eclasses_=toolchain-funcs e56c7649b804f051623c8bc1a1c44084 multilib c19072c3cd7ac5cb21de013f7e9832e0 qmake-utils a8dd17b1d94586164f5e3fc12b1c6b81 +_md5_=b2e7fefc30b158b65ce9d002200ec092 diff --git a/net-misc/megasync/Manifest b/net-misc/megasync/Manifest new file mode 100644 index 0000000..83dd07b --- /dev/null +++ b/net-misc/megasync/Manifest @@ -0,0 +1,2 @@ +DIST megasync-5.4.1.0.tar.gz 24718226 BLAKE2B ab89ed026efc0e28ef5c21554db259e74199d12d1194ecf358ad658b0ecee5a7c421ce374e3ba54a752e813c38b535034c04e9749b1f9d876a7df88951d2250a SHA512 d908308135cdd717555002d58c4faa1917bd049a0a2f99ae0b487f2ccfda6d7a00c9dee72aae52210079e656f3031bf3cf414020090e4a6b600e3cef5af11901 +DIST megasync-sdk-5.4.1.0.tar.gz 4248625 BLAKE2B 96e76e6e421b2f4b7423d5870f0cfcf89bbec6392191e84b2ee7daa0ac4a6a9c6c9599773bd124ce5189abf7a80db981c0f260eec18be8ef7825bba5422123f4 SHA512 740dad61901775ef2e93861c4a42e9e20a779c7189084ed8336cb06d64a3743638e7ca499279b71d2e8bf68d225a3a6397fdfff1a89c18d413ab44eec489c7ea diff --git a/net-misc/megasync/files/megasync-4.10.0.0_ffmpeg6.patch b/net-misc/megasync/files/megasync-4.10.0.0_ffmpeg6.patch new file mode 100644 index 0000000..4c47579 --- /dev/null +++ b/net-misc/megasync/files/megasync-4.10.0.0_ffmpeg6.patch @@ -0,0 +1,27 @@ +diff -Naur a/src/MEGASync/mega/src/gfx/freeimage.cpp b/src/MEGASync/mega/src/gfx/freeimage.cpp +--- a/src/MEGASync/mega/src/gfx/freeimage.cpp 2023-09-27 22:20:26.000000000 +0900 ++++ b/src/MEGASync/mega/src/gfx/freeimage.cpp 2023-11-03 11:01:24.526257561 +0900 +@@ -209,12 +209,6 @@ + + #ifdef HAVE_FFMPEG + +-#ifdef AV_CODEC_CAP_TRUNCATED +-#define CAP_TRUNCATED AV_CODEC_CAP_TRUNCATED +-#else +-#define CAP_TRUNCATED CODEC_CAP_TRUNCATED +-#endif +- + const char *GfxProviderFreeImage::supportedformatsFfmpeg() + { + return ".264.265.3g2.3gp.3gpa.3gpp.3gpp2.mp3" +@@ -330,10 +324,6 @@ + + // Force seeking to key frames + formatContext->seek2any = false; +- if (decoder->capabilities & CAP_TRUNCATED) +- { +- codecContext->flags |= CAP_TRUNCATED; +- } + + AVPixelFormat sourcePixelFormat = static_cast(codecParm->format); + AVPixelFormat targetPixelFormat = AV_PIX_FMT_BGR24; //raw data expected by freeimage is in this format diff --git a/net-misc/megasync/files/megasync-4.10.0.0_fix-build.patch b/net-misc/megasync/files/megasync-4.10.0.0_fix-build.patch new file mode 100644 index 0000000..2fa2e3a --- /dev/null +++ b/net-misc/megasync/files/megasync-4.10.0.0_fix-build.patch @@ -0,0 +1,45 @@ +diff --git a/src/MEGAShellExtNautilus/MEGAShellExtNautilus.pro b/src/MEGAShellExtNautilus/MEGAShellExtNautilus.pro +index 06cbb08cd..7ca767132 100644 +--- a/src/MEGAShellExtNautilus/MEGAShellExtNautilus.pro ++++ b/src/MEGAShellExtNautilus/MEGAShellExtNautilus.pro +@@ -52,5 +52,4 @@ INSTALLS += emblems32 emblems64 + !contains(DEFINES, no_desktop) { + update_cache.commands = gtk-update-icon-cache -f -t $${HICOLOR} || true + update_cache.path = $${HICOLOR} +- INSTALLS += update_cache + } +diff --git a/src/MEGAShellExtNemo/MEGAShellExtNemo.pro b/src/MEGAShellExtNemo/MEGAShellExtNemo.pro +index 33668b4ee..061e0d445 100644 +--- a/src/MEGAShellExtNemo/MEGAShellExtNemo.pro ++++ b/src/MEGAShellExtNemo/MEGAShellExtNemo.pro +@@ -43,5 +43,4 @@ INSTALLS += emblems32 emblems64 + !contains(DEFINES, no_desktop) { + update_cache.commands = gtk-update-icon-cache -f -t $${HICOLOR} || true + update_cache.path = $$PWD +- INSTALLS += update_cache + } +diff --git a/src/MEGASync/google_breakpad/google_breakpad.pri b/src/MEGASync/google_breakpad/google_breakpad.pri +index 122268aba..cd141a5f9 100644 +--- a/src/MEGASync/google_breakpad/google_breakpad.pri ++++ b/src/MEGASync/google_breakpad/google_breakpad.pri +@@ -43,8 +43,6 @@ unix:!macx { + SOURCES += $$PWD/common/linux/elfutils.cc + SOURCES += $$PWD/common/string_conversion.cc + SOURCES += $$PWD/common/convert_UTF.c +- +- QMAKE_CXXFLAGS+=-g + } + + win32 { +diff --git a/src/MEGASync/platform/platform.pri b/src/MEGASync/platform/platform.pri +index 99f4dbd4f..ef5553508 100644 +--- a/src/MEGASync/platform/platform.pri ++++ b/src/MEGASync/platform/platform.pri +@@ -89,7 +89,6 @@ unix:!macx { + # desktop + desktop.path = $$DESKTOP_DESTDIR/share/applications + desktop.files = $$PWD/linux/data/megasync.desktop +- desktop.commands = update-desktop-database &> /dev/null || true + INSTALLS += desktop + + HICOLOR = $$DESKTOP_DESTDIR/share/icons/hicolor diff --git a/net-misc/megasync/files/megasync-5.3.0.0-fix-install-dir.patch b/net-misc/megasync/files/megasync-5.3.0.0-fix-install-dir.patch new file mode 100644 index 0000000..a5f86e3 --- /dev/null +++ b/net-misc/megasync/files/megasync-5.3.0.0-fix-install-dir.patch @@ -0,0 +1,27 @@ +--- a/contrib/cmake/modules/desktopapp_configuration.cmake ++++ b/contrib/cmake/modules/desktopapp_configuration.cmake +@@ -29,8 +29,6 @@ if(UNIX AND NOT APPLE) + # Note: using cmake --install --prefix /some/prefix will keep the RPATH as configured above. + # Used for building packages: in which install dir is a path construction folder that will not be there in packages + +- set(CMAKE_INSTALL_LIBDIR "opt/megasync/lib") # override default "lib" from GNUInstallDirs +- set(CMAKE_INSTALL_BINDIR "usr/bin") # override default "bin" from GNUInstallDirs + + # Override CMAKE_INSTALL_PREFIX + if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) # In consecutive runs it will always be undef/false +--- a/src/MEGASync/CMakeLists.txt ++++ b/src/MEGASync/CMakeLists.txt +@@ -142,13 +142,6 @@ if (UNIX AND NOT APPLE) + + set(vcpkg_lib_folder "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/$<$:debug/>lib/") + +- install(DIRECTORY "${vcpkg_lib_folder}" +- TYPE LIB # In CMAKE_INSTALL_LIBDIR directory +- FILES_MATCHING +- PATTERN "*.so*" +- PATTERN "manual-link" EXCLUDE +- PATTERN "pkgconfig" EXCLUDE +- ) + + if(DEPLOY_QT_LIBRARIES) + include(desktopapp_deploy_qt) diff --git a/net-misc/megasync/files/megasync-5.3.0.0-link-zlib.patch b/net-misc/megasync/files/megasync-5.3.0.0-link-zlib.patch new file mode 100644 index 0000000..49db675 --- /dev/null +++ b/net-misc/megasync/files/megasync-5.3.0.0-link-zlib.patch @@ -0,0 +1,12 @@ +--- a/src/MEGASync/control/control.cmake ++++ b/src/MEGASync/control/control.cmake +@@ -71,6 +71,9 @@ set(DESKTOP_APP_CONTROL_SOURCES + control/StatsEventHandler.cpp + ) + ++find_package(ZLIB REQUIRED) ++target_link_libraries(MEGAsync PRIVATE ZLIB::ZLIB) ++ + target_sources(MEGAsync + PRIVATE + ${DESKTOP_APP_CONTROL_HEADERS} diff --git a/net-misc/megasync/files/megasync-5.3.0.0-rename-libcryptopp.patch b/net-misc/megasync/files/megasync-5.3.0.0-rename-libcryptopp.patch new file mode 100644 index 0000000..0688c44 --- /dev/null +++ b/net-misc/megasync/files/megasync-5.3.0.0-rename-libcryptopp.patch @@ -0,0 +1,11 @@ +--- a/src/MEGASync/mega/contrib/cmake/modules/sdklib_libraries.cmake ++++ b/src/MEGASync/mega/contrib/cmake/modules/sdklib_libraries.cmake +@@ -95,7 +95,7 @@ macro(load_sdklib_libraries) + + find_package(PkgConfig REQUIRED) # For libraries loaded using pkg-config + +- pkg_check_modules(cryptopp REQUIRED IMPORTED_TARGET libcrypto++) ++ pkg_check_modules(cryptopp REQUIRED IMPORTED_TARGET libcryptopp) + target_link_libraries(SDKlib PUBLIC PkgConfig::cryptopp) # TODO: Private for SDK core + + pkg_check_modules(sodium REQUIRED IMPORTED_TARGET libsodium) diff --git a/net-misc/megasync/megasync-5.4.1.0.ebuild b/net-misc/megasync/megasync-5.4.1.0.ebuild new file mode 100644 index 0000000..cacf608 --- /dev/null +++ b/net-misc/megasync/megasync-5.4.1.0.ebuild @@ -0,0 +1,176 @@ +# Copyright 2023-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit cmake flag-o-matic qmake-utils xdg + +DESCRIPTION="The official Qt-based program for syncing your MEGA account in your PC" +HOMEPAGE=" + https://mega.io + https://github.com/meganz/MEGAsync +" + +if [[ ${PV} == 9999 ]];then + inherit git-r3 + EGIT_REPO_URI="https://github.com/meganz/MEGAsync" + EGIT_BRANCH="master" + EGIT_SUBMODULES=( '*' ) +else + MEGA_SDK_REV="159dcc4a61d43dfdf5997cf8113755fbe2452bd7" # commit of src/MEGASync/mega submodule + MEGA_TAG_SUFFIX="Linux" + SRC_URI=" + https://github.com/meganz/MEGAsync/archive/v${PV}_${MEGA_TAG_SUFFIX}.tar.gz -> ${P}.tar.gz + https://github.com/meganz/sdk/archive/${MEGA_SDK_REV}.tar.gz -> ${PN}-sdk-${PV}.tar.gz + " + KEYWORDS="~amd64 ~x86" + S="${WORKDIR}"/MEGAsync-${PV}_${MEGA_TAG_SUFFIX} +fi + +LICENSE="MEGA" +SLOT="0" +IUSE="dolphin mediainfo nautilus nemo thumbnail thunar" + +DEPEND=" + dev-db/sqlite:3 + dev-libs/crypto++:= + dev-libs/icu:= + dev-libs/libsodium:= + dev-libs/libuv:= + dev-libs/openssl:0= + dev-qt/qtconcurrent:5 + dev-qt/qtcore:5 + dev-qt/qtdbus:5 + dev-qt/qtdeclarative:5 + dev-qt/qtgui:5 + dev-qt/qtnetwork:5 + dev-qt/qtimageformats:5 + dev-qt/qtsvg:5 + dev-qt/qtwidgets:5 + dev-qt/qtx11extras:5 + net-dns/c-ares:= + net-misc/curl[ssl] + sys-libs/zlib + x11-libs/libxcb:= + dolphin? ( + kde-apps/dolphin:5 + kde-frameworks/kcoreaddons:5 + kde-frameworks/kio:5 + kde-frameworks/kwidgetsaddons:5 + ) + mediainfo? ( + media-libs/libmediainfo + media-libs/libzen + ) + nautilus? ( + dev-libs/glib:2 + >=gnome-base/nautilus-43 + ) + nemo? ( + dev-libs/glib:2 + gnome-extra/nemo + ) + thumbnail? ( + media-libs/freeimage + media-video/ffmpeg:= + ) + thunar? ( xfce-base/thunar:= ) +" +RDEPEND=" + ${DEPEND} + dev-qt/qtquickcontrols:5 + dev-qt/qtquickcontrols2:5 +" +BDEPEND=" + dev-qt/linguist-tools:5 + dolphin? ( kde-frameworks/extra-cmake-modules ) +" + +PATCHES=( + "${FILESDIR}/${PN}-4.10.0.0_ffmpeg6.patch" + "${FILESDIR}/${PN}-4.10.0.0_fix-build.patch" + "${FILESDIR}/${PN}-5.3.0.0-link-zlib.patch" + "${FILESDIR}/${PN}-5.3.0.0-fix-install-dir.patch" + "${FILESDIR}/${PN}-5.3.0.0-rename-libcryptopp.patch" +) + +BUILD_DIR_DOLPHIN="${S}_dolphin" + +dolphin_run() { + if use dolphin; then + cd "${S}/src/MEGAShellExtDolphin" || die + BUILD_DIR="${BUILD_DIR_DOLPHIN}" CMAKE_USE_DIR="${S}/src/MEGAShellExtDolphin" "$@" + fi +} + +nautilus_run() { + if use nautilus; then + cd "${S}/src/MEGAShellExtNautilus" || die + "$@" + fi +} + +nemo_run() { + if use nemo; then + cd "${S}/src/MEGAShellExtNemo" || die + "$@" + fi +} + +thunar_run() { + if use thunar; then + cd "${S}/src/MEGAShellExtThunar" || die + "$@" + fi +} + +src_prepare() { + if [[ ${PV} != 9999 ]]; then + rmdir src/MEGASync/mega || die + mv "${WORKDIR}/sdk-${MEGA_SDK_REV}" src/MEGASync/mega || die + fi + + cmake_src_prepare +} + +src_configure() { + # https://github.com/meganz/sdk/issues/2679 + append-cppflags -DNDEBUG + + local mycmakeargs=( + # build internal libs as static + -DBUILD_SHARED_LIBS=OFF + -DCMAKE_MODULE_PATH="${S}/src/MEGASync/mega/contrib/cmake/modules/packages" + -DENABLE_DESKTOP_UPDATE_GEN=OFF + -DUSE_FFMPEG=$(usex thumbnail) + -DUSE_FREEIMAGE=$(usex thumbnail) + -DUSE_MEDIAINFO=$(usex mediainfo) + -DUSE_PDFIUM=OFF + -DUSE_READLINE=OFF + ) + cmake_src_configure + + unset mycmakeargs + dolphin_run cmake_src_configure + nautilus_run eqmake5 + nemo_run eqmake5 + thunar_run eqmake5 +} + +src_compile() { + cmake_src_compile + + dolphin_run cmake_src_compile + nautilus_run emake + nemo_run emake + thunar_run emake +} + +src_install() { + cmake_src_install + + dolphin_run cmake_src_install + nautilus_run emake INSTALL_ROOT="${D}" install + nemo_run emake INSTALL_ROOT="${D}" install + thunar_run emake INSTALL_ROOT="${D}" install +} diff --git a/net-misc/megasync/megasync-9999.ebuild b/net-misc/megasync/megasync-9999.ebuild new file mode 100644 index 0000000..8b25de3 --- /dev/null +++ b/net-misc/megasync/megasync-9999.ebuild @@ -0,0 +1,176 @@ +# Copyright 2023-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit cmake flag-o-matic qmake-utils xdg + +DESCRIPTION="The official Qt-based program for syncing your MEGA account in your PC" +HOMEPAGE=" + https://mega.io + https://github.com/meganz/MEGAsync +" + +if [[ ${PV} == 9999 ]];then + inherit git-r3 + EGIT_REPO_URI="https://github.com/meganz/MEGAsync" + EGIT_BRANCH="master" + EGIT_SUBMODULES=( '*' ) +else + MEGA_SDK_REV="eb8dba09149e1aad0210c3591f3ef6e50022f714" # commit of src/MEGASync/mega submodule + MEGA_TAG_SUFFIX="Linux" + SRC_URI=" + https://github.com/meganz/MEGAsync/archive/v${PV}_${MEGA_TAG_SUFFIX}.tar.gz -> ${P}.tar.gz + https://github.com/meganz/sdk/archive/${MEGA_SDK_REV}.tar.gz -> ${PN}-sdk-${PV}.tar.gz + " + KEYWORDS="~amd64 ~x86" + S="${WORKDIR}"/MEGAsync-${PV}_${MEGA_TAG_SUFFIX} +fi + +LICENSE="MEGA" +SLOT="0" +IUSE="dolphin mediainfo nautilus nemo thumbnail thunar" + +DEPEND=" + dev-db/sqlite:3 + dev-libs/crypto++:= + dev-libs/icu:= + dev-libs/libsodium:= + dev-libs/libuv:= + dev-libs/openssl:0= + dev-qt/qtconcurrent:5 + dev-qt/qtcore:5 + dev-qt/qtdbus:5 + dev-qt/qtdeclarative:5 + dev-qt/qtgui:5 + dev-qt/qtnetwork:5 + dev-qt/qtimageformats:5 + dev-qt/qtsvg:5 + dev-qt/qtwidgets:5 + dev-qt/qtx11extras:5 + net-dns/c-ares:= + net-misc/curl[ssl] + sys-libs/zlib + x11-libs/libxcb:= + dolphin? ( + kde-apps/dolphin:5 + kde-frameworks/kcoreaddons:5 + kde-frameworks/kio:5 + kde-frameworks/kwidgetsaddons:5 + ) + mediainfo? ( + media-libs/libmediainfo + media-libs/libzen + ) + nautilus? ( + dev-libs/glib:2 + >=gnome-base/nautilus-43 + ) + nemo? ( + dev-libs/glib:2 + gnome-extra/nemo + ) + thumbnail? ( + media-libs/freeimage + media-video/ffmpeg:= + ) + thunar? ( xfce-base/thunar:= ) +" +RDEPEND=" + ${DEPEND} + dev-qt/qtquickcontrols:5 + dev-qt/qtquickcontrols2:5 +" +BDEPEND=" + dev-qt/linguist-tools:5 + dolphin? ( kde-frameworks/extra-cmake-modules ) +" + +PATCHES=( + "${FILESDIR}/${PN}-4.10.0.0_ffmpeg6.patch" + "${FILESDIR}/${PN}-4.10.0.0_fix-build.patch" + "${FILESDIR}/${PN}-5.3.0.0-link-zlib.patch" + "${FILESDIR}/${PN}-5.3.0.0-fix-install-dir.patch" + "${FILESDIR}/${PN}-5.3.0.0-rename-libcryptopp.patch" +) + +BUILD_DIR_DOLPHIN="${S}_dolphin" + +dolphin_run() { + if use dolphin; then + cd "${S}/src/MEGAShellExtDolphin" || die + BUILD_DIR="${BUILD_DIR_DOLPHIN}" CMAKE_USE_DIR="${S}/src/MEGAShellExtDolphin" "$@" + fi +} + +nautilus_run() { + if use nautilus; then + cd "${S}/src/MEGAShellExtNautilus" || die + "$@" + fi +} + +nemo_run() { + if use nemo; then + cd "${S}/src/MEGAShellExtNemo" || die + "$@" + fi +} + +thunar_run() { + if use thunar; then + cd "${S}/src/MEGAShellExtThunar" || die + "$@" + fi +} + +src_prepare() { + if [[ ${PV} != 9999 ]]; then + rmdir src/MEGASync/mega || die + mv "${WORKDIR}/sdk-${MEGA_SDK_REV}" src/MEGASync/mega || die + fi + + cmake_src_prepare +} + +src_configure() { + # https://github.com/meganz/sdk/issues/2679 + append-cppflags -DNDEBUG + + local mycmakeargs=( + # build internal libs as static + -DBUILD_SHARED_LIBS=OFF + -DCMAKE_MODULE_PATH="${S}/src/MEGASync/mega/contrib/cmake/modules/packages" + -DENABLE_DESKTOP_UPDATE_GEN=OFF + -DUSE_FFMPEG=$(usex thumbnail) + -DUSE_FREEIMAGE=$(usex thumbnail) + -DUSE_MEDIAINFO=$(usex mediainfo) + -DUSE_PDFIUM=OFF + -DUSE_READLINE=OFF + ) + cmake_src_configure + + unset mycmakeargs + dolphin_run cmake_src_configure + nautilus_run eqmake5 + nemo_run eqmake5 + thunar_run eqmake5 +} + +src_compile() { + cmake_src_compile + + dolphin_run cmake_src_compile + nautilus_run emake + nemo_run emake + thunar_run emake +} + +src_install() { + cmake_src_install + + dolphin_run cmake_src_install + nautilus_run emake INSTALL_ROOT="${D}" install + nemo_run emake INSTALL_ROOT="${D}" install + thunar_run emake INSTALL_ROOT="${D}" install +} diff --git a/net-misc/megasync/metadata.xml b/net-misc/megasync/metadata.xml new file mode 100644 index 0000000..6c50000 --- /dev/null +++ b/net-misc/megasync/metadata.xml @@ -0,0 +1,16 @@ + + + + + noreply@local + nil + + + Add support for kde-apps/dolphin. + Add support for gnome-base/nautilus. + Add support for gnome-extra/nemo. + Add support for xfce-base/thunar. + Use media-libs/libmediainfo to determine media properties. + Enable support for thumbnail generation. + + diff --git a/profiles/eapi b/profiles/eapi new file mode 100644 index 0000000..45a4fb7 --- /dev/null +++ b/profiles/eapi @@ -0,0 +1 @@ +8 diff --git a/profiles/repo_name b/profiles/repo_name new file mode 100644 index 0000000..1821bfd --- /dev/null +++ b/profiles/repo_name @@ -0,0 +1 @@ +localrepo diff --git a/sys-devel/binutils/Manifest b/sys-devel/binutils/Manifest new file mode 100644 index 0000000..776e8cf --- /dev/null +++ b/sys-devel/binutils/Manifest @@ -0,0 +1,25 @@ +DIST binutils-2.32-patches-3.tar.xz 151372 BLAKE2B 70d5f78d9f3e3bf9ff096b6f24babcc35c63395a5e1155a981a5ceb4b7a5706ad2ee0c77c74e910fc0eefeaed19763113186deb9665eed538dc3b8e227bef12d SHA512 5e91eff63332c2aca86a82a287ca4959a6098065ed88078265a3d79a2c851abd113e9736b75d8102a208996ed1191b0e23569921217ece975f1d9005a55afd0d +DIST binutils-2.32.tar.xz 20774880 BLAKE2B d1bdbd9c8487c091665c197974ce4bdf520b7a67ed6997a81b87e6a0af9514a091458244f583acec5ae580ac2ee5e908f67f483b8e5263cd18ced794cb235da6 SHA512 d326408f12a03d9a61a9de56584c2af12f81c2e50d2d7e835d51565df8314df01575724afa1e43bd0db45cfc9916b41519b67dfce03232aa4978704492a6994a +DIST binutils-2.33.1-patches-2.tar.xz 18636 BLAKE2B 0e0757329b6a83aeff4f4c450c95e73fd48fcc89f83e63f294568632bee0972552cf2f57494352c5d9a7c16a51cdbc4108b38fa6028d4388c8e76046b3da9212 SHA512 d982f68d1f5fdb384309a2a1b7426bf840a90e7a85b37229b4223b62c36cab9dd9ec0c08382c85c68adf996dec21133df3180a2fc649363adae8645f8282f71d +DIST binutils-2.33.1.tar.xz 21490848 BLAKE2B c336a8412938dc8c224f40a763a8bea9937cca0462a8fb80e62f14aabe590107fc061a3f4b9327e1f4652cb026384d36a91b4766d4d469d2d0680932874b638c SHA512 b7a6767c6c7ca6b5cafa7080e6820b7bb3a53b7148348c438d99905defbdf0d30c9744a484ee01c9441a8153901808513366b15ba9533e20c9673c262ade36ac +DIST binutils-2.34-patches-6.tar.xz 103028 BLAKE2B d0e866d0941d2b550c7d7f23530c6ee393fa13b4f2f27832f07790989476f11d1beddb5ad5a9be5c65c1d4dff9d4598d21adcb00c1d0490f69a99127f4527447 SHA512 e05ed8886acb5cb95a3e97c5bc0564215f7d44b604610f5c4545997fd9625d6de909c37063127e819926cd1548a48d3529dd3e82e98ee6a5dbaced028c57355d +DIST binutils-2.34.tar.xz 21637796 BLAKE2B 07dd23916a7d27f71c3f160c8c16abe2bd4fce294c738c665a012a3be6a87dbe8160d0c38740524f9025e01d438e99b2a94bcf9f9f79ee214f5dd033de8aad3d SHA512 2c7976939dcf5e8c5b7374cccd39bfe803b1bec73c6abfa0eb17c24e1942574c6bdb874c66a092a82adc443182eacd8a5a8001c19a76101f0c7ba40c27de0bbd +DIST binutils-2.35.2-patches-1.tar.xz 11836 BLAKE2B 0141349c9618992d1ab1e0309f7ed8fbc43b60a58be1dfed05eae8a8fee857241d9e112ae673da6fc9778767675f536ece818cb85567367bb1c8f87a0693623f SHA512 35de5f227c745c5fb800784fe657b2a6216faf43e2498e8481e7b0dc79b0d2f86b3b6a10b896e060319a77a51c61d2e1b7a951ae962b3a6ef8c1a2a261d9bb6c +DIST binutils-2.35.2.tar.xz 22056908 BLAKE2B 9c392e0db2b482442f9476f30bd80cf2796321cbf7be79cf21af7bef167b6074c4ae009dcf9b438d2f2f4a23381c935176b2cfa85de1a526ab46e0fd844a7ca5 SHA512 9974ede5978d32e0d68fef23da48fa00bd06b0bff7ec45b00ca075c126d6bbe0cf2defc03ecc3f17bc6cc85b64271a13009c4049d7ba17de26e84e3a6e2c0348 +DIST binutils-2.36.1-patches-5.tar.xz 44388 BLAKE2B 1dadb012fe35ec5fb0c5a15d348ab535bc5e3765375c97a3768c6b9f7126e0fda15d35163c9f9c33a4be98662dd120d7c1b21930a20c18dbb5345f56ecd9ecc1 SHA512 a2ce3388f1f1a77ff865481ff4b625121fd55f5234fed0a885312744f2f9c504717de1499b68252c6de64fa45866db7692df91c5838b43fbeb178938811cbe84 +DIST binutils-2.36.1.tar.xz 22772248 BLAKE2B 03fbfbedd6dba2beaa836b1ed254eddd7a54a163d3061fd93edd2b9591cae24ba049b26658c524b5ccecc2f22d431dfa168218d2531aa356945c994fbbe896fa SHA512 cc24590bcead10b90763386b6f96bb027d7594c659c2d95174a6352e8b98465a50ec3e4088d0da038428abe059bbc4ae5f37b269f31a40fc048072c8a234f4e9 +DIST binutils-2.37_p1-patches-2.tar.xz 31956 BLAKE2B 39c48628d0e2d7f3a8cf11be391b51dc64c7a534a3e64950fd992907c34fa36bebdf95cc5a184dd5b35e134e0c20376b5883abbf96ae57403c55377e615a6790 SHA512 c927aafa8c87e3b68ad28da5a17edf5647591ec26feeb56c743bc6637ffb10832b50ec6fd8442e80e40628b624e31b2f0f0b5f1193e77dc7e5442df0cb8cc8f1 +DIST binutils-2.37_p1.tar.xz 22992196 BLAKE2B a8aa0f386d03a5b1466166ac7c40989c228351ccf0949a9b462b4d4615d70ab7e1a45351299140a42baf39c317b8007733c253eb547ee1dfadb612addde11621 SHA512 46c297ec2a7a5b81d1c6e3f16486a6dc2860a07520fe2dd8871d1eb5160065bbe2cc6b0415d5352bf12284133e5817a4e429e6077182d615e969bd1a8f52ed28 +DIST binutils-2.38-patches-4.tar.xz 193852 BLAKE2B 5a83e20008e58464ed563a6817a367e50684c59d08c47345cc546054269c42463d1651441720f865851e4e182e917df1a095c68e64226e0351b64e975d524096 SHA512 6657e547bb02898632cc45a8f1894be098aa7472b6725b65f95393e621abb127e468b4e50310720bf03f7e8d0a68bc2c47af76fc43aaa8f32b2e4a149c0c6290 +DIST binutils-2.38.tar.xz 23651408 BLAKE2B 19ede396ec97b88e632aded2f69f4684cc5053109e06c3c4a1934944e3f0ceaa9e4a2604528a440189771f778cb5d75edd510163970eeea31afba87fa256feba SHA512 8bf0b0d193c9c010e0518ee2b2e5a830898af206510992483b427477ed178396cd210235e85fd7bd99a96fc6d5eedbeccbd48317a10f752b7336ada8b2bb826d +DIST binutils-2.39-patches-6.tar.xz 92380 BLAKE2B 39f490f1134fb0e7dc80924a280d3113efe0ed094ee15de97c42ab751c83d2f5aa7448966d8cbbcde722b2af4999a36c1e5aa2f37ca6d2e3942b97b6d90ff152 SHA512 213cd7a86da83987966675f3195e843d898ca4ff412dfc29fd33ed80adb7bbf80a0b2919cd8e7dd49208c73a621ab7b720970f2259418bdc82ed2a568ff62064 +DIST binutils-2.39.tar.xz 25167756 BLAKE2B ac6a5296c6586d53eaadcbffc5c399a6d79edf72450b9bb8b3525ce525129cef3d2eb90c85ef3bb3270b5a03b0e1ffb8f0b705f028158726f9777ebb8685066f SHA512 68e038f339a8c21faa19a57bbc447a51c817f47c2e06d740847c6e9cc3396c025d35d5369fa8c3f8b70414757c89f0e577939ddc0d70f283182504920f53b0a3 +DIST binutils-2.40-patches-7.tar.xz 299188 BLAKE2B 170cd2432e0458889b240c3603461d0b4bfa62d5314634b101a629db455d87235ac14ad44c63920b713d5235fa8b73902960df1019153873ef06a33aa7050b4b SHA512 a60da163caee68fe1fa355385d404e8998ebed0e390d50e0713e95334733a8b4e37bc63d522817284c027953e43848dbc98042461a47131fb53bc69203b4ee87 +DIST binutils-2.40.tar.xz 25241484 BLAKE2B 8d799f7c595f878b9af5b17a490021dd8b8300ac2fe0ed8574c012929d22d2d0493e003a3e631a9436e8e712da801779b777c566167fe42b0bde119ffa5ad1c2 SHA512 a37e042523bc46494d99d5637c3f3d8f9956d9477b748b3b1f6d7dfbb8d968ed52c932e88a4e946c6f77b8f48f1e1b360ca54c3d298f17193f3b4963472f6925 +DIST binutils-2.41-patches-5.tar.xz 95176 BLAKE2B bbc94b3c7d70653a1056afe57a120b6eac9f0c8f51f05e95a1b5f80f2b7ef35e6355d740b49bc1ec2f3a13a838d5210ff4a205aa2bde5a72bc55c12100bce726 SHA512 ad293f97116f71322993f381c1af69fad1719a159f127ff16ddeca62f9b9b62aaf141abfa661985a61e9be7ae0639772148e69293a97364eebbf49182babb691 +DIST binutils-2.41.tar.xz 26765692 BLAKE2B 3bccec2b52f7e82a727121bf2a2e51a6249ba63dcd74c665fd834e858645c912ffd8245d848435288b938852830b482905606f55c40df4061215fd75c52ffc75 SHA512 5df45d0bd6ddabdce4f35878c041e46a92deef01e7dea5facc97fd65cc06b59abc6fba0eb454b68e571c7e14038dc823fe7f2263843e6e627b7444eaf0fe9374 +DIST binutils-2.42-patches-3.tar.xz 34768 BLAKE2B e4bfaf3b42147408a8a3dcb00f50378a6b49aef8e939731a92598680cfbf42dfdf842c3f5bf3458867f79c534eb92385bc64f34f7b1d6462ec4182b5f424fbe5 SHA512 3d75e0684bbfa2cc3fc6dfcb5488ac571db58f1a5833fcc754f231664137001ccb0f2ec750947b8021fa12daf614eb2cd21b598bd962d71a34bb8ea38805850d +DIST binutils-2.42-patches-6.tar.xz 50664 BLAKE2B f13b65a761cfba80caf2e4740c6383b40305558365b950fba22aca95a104e799e8bd476082f36fb9288de4f224b09f317792c1444e549c40d15a4b64cdf61989 SHA512 1203eca0a9e622411eac377509de8fd0db3ffcb282ac38ab7a0369b166cc1091197daad85b51b145b34a4832f1a1a4d573c8254e8d67aeb22f35adb1ab3ece1f +DIST binutils-2.42.tar.xz 27567160 BLAKE2B e67a5c028fba70e70088fd11b38ec8c9c4ed5a019badefda25abeb6275997b16f0891e7ff3424c4b82bbfae92e8992669826920dd53df61cd48469d8f7cd5bd1 SHA512 155f3ba14cd220102f4f29a4f1e5cfee3c48aa03b74603460d05afb73c70d6657a9d87eee6eb88bf13203fe6f31177a5c9addc04384e956e7da8069c8ecd20a6 +DIST binutils-2.43-patches-1.tar.xz 11644 BLAKE2B 578ee67c3c5e67f9191a31a5c83ffcc781f757f8aaee3eea14d052db427cdd2bc769977dba16e9a8c653dcc4a94f11c149898683945d5035d0beeac128045b1a SHA512 e6db4eaf4fbea366e607a7e9a56e20851fcc34664532fd6aa1f0818271c3e2687eada3daca482e211a2b3e36be85e7e0b23158caaa0fdf9785d13a9156e8c734 +DIST binutils-2.43.tar.xz 28175768 BLAKE2B 28b0a04a28273b76eab2d00e00160be889f155f77f5a9d8759ef8dce505c97e97641bf7ec70b92b731b520570a02b06e04e8215b068fcb1bb2573e9ef24732d9 SHA512 93e063163e54d6a6ee2bd48dc754270bf757a3635b49a702ed6b310e929e94063958512d191e66beaf44275f7ea60865dbde138b624626739679fcc306b133bb diff --git a/sys-devel/binutils/binutils-2.32-r2.ebuild b/sys-devel/binutils/binutils-2.32-r2.ebuild new file mode 100644 index 0000000..606d595 --- /dev/null +++ b/sys-devel/binutils/binutils-2.32-r2.ebuild @@ -0,0 +1,423 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit libtool flag-o-matic gnuconfig strip-linguas toolchain-funcs + +DESCRIPTION="Tools necessary to build programs" +HOMEPAGE="https://sourceware.org/binutils/" +LICENSE="GPL-3+" +IUSE="default-gold doc +gold multitarget +nls +plugins static-libs test" +REQUIRED_USE="default-gold? ( gold )" + +# Variables that can be set here: +# PATCH_VER - the patchset version +# Default: empty, no patching +# PATCH_BINUTILS_VER - the binutils version in the patchset name +# - Default: PV +# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/... +# for the patchsets + +PATCH_VER=3 +PATCH_DEV=slyfox + +case ${PV} in + 9999) + EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git" + inherit git-r3 + S=${WORKDIR}/binutils + EGIT_CHECKOUT_DIR=${S} + SLOT=${PV} + ;; + *) + SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz" + SLOT=$(ver_cut 1-2) + KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86" + ;; +esac + +# +# The Gentoo patchset +# +PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}} +PATCH_DEV=${PATCH_DEV:-slyfox} + +[[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI} + https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz" + +PATCHES=( + # Disable gold testsuite since it always fails. + "${FILESDIR}/${PN}-2.29.1-nogoldtest.patch" + + "${FILESDIR}"/${PN}-2.32-gcc-10.patch + "${FILESDIR}"/${PN}-2.33-gcc-10.patch +) + +# +# The cross-compile logic +# +export CTARGET=${CTARGET:-${CHOST}} +if [[ ${CTARGET} == ${CHOST} ]] ; then + if [[ ${CATEGORY} == cross-* ]] ; then + export CTARGET=${CATEGORY#cross-} + fi +fi +is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; } + +# +# The dependencies +# +RDEPEND=" + >=sys-devel/binutils-config-3 + sys-libs/zlib +" +DEPEND="${RDEPEND} + doc? ( sys-apps/texinfo ) + test? ( dev-util/dejagnu ) + nls? ( sys-devel/gettext ) + app-alternatives/lex + app-alternatives/yacc +" + +RESTRICT="!test? ( test )" + +MY_BUILDDIR=${WORKDIR}/build + +src_unpack() { + case ${PV} in + *9999) + git-r3_src_unpack + ;; + *) + ;; + esac + default + mkdir -p "${MY_BUILDDIR}" +} + +src_prepare() { + if [[ -n ${PATCH_VER} ]] ; then + # Use upstream patch to enable development mode + rm -v "${WORKDIR}/patch"/0000-Gentoo-Git-is-development.patch || die + + einfo "Applying binutils-${PATCH_BINUTILS_VER} patchset ${PATCH_VER}" + eapply "${WORKDIR}/patch"/*.patch + fi + + # Make sure our explicit libdir paths don't get clobbered. #562460 + sed -i \ + -e 's:@bfdlibdir@:@libdir@:g' \ + -e 's:@bfdincludedir@:@includedir@:g' \ + {bfd,opcodes}/Makefile.in || die + + # Fix conflicts with newer glibc #272594 + if [[ -e libiberty/testsuite/test-demangle.c ]] ; then + sed -i 's:\:get_line:g' libiberty/testsuite/test-demangle.c + fi + + # Apply things from PATCHES and user dirs + default + + # Run misc portage update scripts + gnuconfig_update + elibtoolize --portage --no-uclibc +} + +toolchain-binutils_bugurl() { + printf "https://bugs.gentoo.org/" +} +toolchain-binutils_pkgversion() { + printf "Gentoo ${PV}" + [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}" +} + +src_configure() { + # Setup some paths + LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV} + INCPATH=${LIBPATH}/include + DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV} + if is_cross ; then + TOOLPATH=/usr/${CHOST}/${CTARGET} + else + TOOLPATH=/usr/${CTARGET} + fi + BINPATH=${TOOLPATH}/binutils-bin/${PV} + + # Make sure we filter $LINGUAS so that only ones that + # actually work make it through #42033 + strip-linguas -u */po + + # Keep things sane + strip-flags + + append-ldflags $(test-flags-CCLD -Wl,--undefined-version) + + local x + echo + for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do + einfo "$(printf '%10s' ${x}:) ${!x}" + done + echo + + cd "${MY_BUILDDIR}" + local myconf=() + + if use plugins ; then + myconf+=( --enable-plugins ) + fi + # enable gold (installed as ld.gold) and ld's plugin architecture + if use gold ; then + myconf+=( --enable-gold ) + if use default-gold; then + myconf+=( --enable-gold=default ) + fi + fi + + if use nls ; then + myconf+=( --without-included-gettext ) + else + myconf+=( --disable-nls ) + fi + + myconf+=( --with-system-zlib ) + + # For bi-arch systems, enable a 64bit bfd. This matches + # the bi-arch logic in toolchain.eclass. #446946 + # We used to do it for everyone, but it's slow on 32bit arches. #438522 + case $(tc-arch) in + ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;; + esac + + use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd ) + + [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} ) + + is_cross && myconf+=( + --with-sysroot="${EPREFIX}"/usr/${CTARGET} + --enable-poison-system-directories + ) + + # glibc-2.3.6 lacks support for this ... so rather than force glibc-2.5+ + # on everyone in alpha (for now), we'll just enable it when possible + has_version ">=${CATEGORY}/glibc-2.5" && myconf+=( --enable-secureplt ) + has_version ">=sys-libs/glibc-2.5" && myconf+=( --enable-secureplt ) + + # mips can't do hash-style=gnu ... + if [[ $(tc-arch) != mips ]] ; then + myconf+=( --enable-default-hash-style=gnu ) + fi + + myconf+=( + --prefix="${EPREFIX}"/usr + --host=${CHOST} + --target=${CTARGET} + --datadir="${EPREFIX}"${DATAPATH} + --datarootdir="${EPREFIX}"${DATAPATH} + --infodir="${EPREFIX}"${DATAPATH}/info + --mandir="${EPREFIX}"${DATAPATH}/man + --bindir="${EPREFIX}"${BINPATH} + --libdir="${EPREFIX}"${LIBPATH} + --libexecdir="${EPREFIX}"${LIBPATH} + --includedir="${EPREFIX}"${INCPATH} + --enable-obsolete + --enable-shared + --enable-threads + # Newer versions (>=2.27) offer a configure flag now. + --enable-relro + # Newer versions (>=2.24) make this an explicit option. #497268 + --enable-install-libiberty + --disable-werror + --with-bugurl="$(toolchain-binutils_bugurl)" + --with-pkgversion="$(toolchain-binutils_pkgversion)" + $(use_enable static-libs static) + ${EXTRA_ECONF} + # Disable modules that are in a combined binutils/gdb tree. #490566 + --disable-{gdb,libdecnumber,readline,sim} + # Strip out broken static link flags. + # https://gcc.gnu.org/PR56750 + --without-stage1-ldflags + # Change SONAME to avoid conflict across + # {native,cross}/binutils, binutils-libs. #666100 + --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st) + ) + echo ./configure "${myconf[@]}" + "${S}"/configure "${myconf[@]}" || die + + # Prevent makeinfo from running if doc is unset. + if ! use doc ; then + sed -i \ + -e '/^MAKEINFO/s:=.*:= true:' \ + Makefile || die + fi +} + +src_compile() { + cd "${MY_BUILDDIR}" + # see Note [tooldir hack for ldscripts] + emake tooldir="${EPREFIX}${TOOLPATH}" all + + # only build info pages if the user wants them + if use doc ; then + emake info + fi + + # we nuke the manpages when we're left with junk + # (like when we bootstrap, no perl -> no manpages) + find . -name '*.1' -a -size 0 -delete +} + +src_test() { + cd "${MY_BUILDDIR}" + + # https://sourceware.org/PR31327 + local -x XZ_OPT="-T1" + local -x XZ_DEFAULTS="-T1" + + # bug 637066 + filter-flags -Wall -Wreturn-type + + emake -k check +} + +src_install() { + local x d + + cd "${MY_BUILDDIR}" + # see Note [tooldir hack for ldscripts] + emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install + rm -rf "${ED}"/${LIBPATH}/bin + use static-libs || find "${ED}" -name '*.la' -delete + + # Newer versions of binutils get fancy with ${LIBPATH} #171905 + cd "${ED}"/${LIBPATH} + for d in ../* ; do + [[ ${d} == ../${PV} ]] && continue + mv ${d}/* . || die + rmdir ${d} || die + done + + # Now we collect everything intp the proper SLOT-ed dirs + # When something is built to cross-compile, it installs into + # /usr/$CHOST/ by default ... we have to 'fix' that :) + if is_cross ; then + cd "${ED}"/${BINPATH} + for x in * ; do + mv ${x} ${x/${CTARGET}-} + done + + if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then + mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH} + mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/usr/${CHOST}/{include,lib} + fi + fi + insinto ${INCPATH} + local libiberty_headers=( + # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir. + demangle.h + dyn-string.h + fibheap.h + hashtab.h + libiberty.h + objalloc.h + splay-tree.h + ) + doins "${libiberty_headers[@]/#/${S}/include/}" + if [[ -d ${ED}/${LIBPATH}/lib ]] ; then + mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/${LIBPATH}/lib + fi + + # Generate an env.d entry for this binutils + insinto /etc/env.d/binutils + cat <<-EOF > "${T}"/env.d + TARGET="${CTARGET}" + VER="${PV}" + LIBPATH="${EPREFIX}${LIBPATH}" + EOF + newins "${T}"/env.d ${CTARGET}-${PV} + + # Handle documentation + if ! is_cross ; then + cd "${S}" + dodoc README + docinto bfd + dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO + docinto binutils + dodoc binutils/ChangeLog binutils/NEWS binutils/README + docinto gas + dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README* + docinto gprof + dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl + docinto ld + dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO + docinto libiberty + dodoc libiberty/ChangeLog* libiberty/README + docinto opcodes + dodoc opcodes/ChangeLog* + fi + + # Remove shared info pages + rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info} + + # Trim all empty dirs + find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null +} + +pkg_postinst() { + # Make sure this ${CTARGET} has a binutils version selected + [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0 + binutils-config ${CTARGET}-${PV} +} + +pkg_postrm() { + local current_profile=$(binutils-config -c ${CTARGET}) + + # If no other versions exist, then uninstall for this + # target ... otherwise, switch to the newest version + # Note: only do this if this version is unmerged. We + # rerun binutils-config if this is a remerge, as + # we want the mtimes on the symlinks updated (if + # it is the same as the current selected profile) + if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then + local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}') + choice=${choice//$'\n'/ } + choice=${choice/* } + if [[ -z ${choice} ]] ; then + binutils-config -u ${CTARGET} + else + binutils-config ${choice} + fi + elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then + binutils-config ${CTARGET}-${PV} + fi +} + +# Note [slotting support] +# ----------------------- +# Gentoo's layout for binutils files is non-standard as Gentoo +# supports slotted installation for binutils. Many tools +# still expect binutils to reside in known locations. +# binutils-config package restores symlinks into known locations, +# like: +# /usr/bin/${CTARGET}- +# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips +# /usr/include/ +# +# Note [tooldir hack for ldscripts] +# --------------------------------- +# Build system does not allow ./configure to tweak every location +# we need for slotting binutils hence all the shuffling in +# src_install(). This note is about SCRIPTDIR define handling. +# +# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value +# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib' +# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time. +# Thus we can't just move files around after compilation finished. +# +# Our goal is the following: +# - at build-time set scriptdir to point to symlinked location: +# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case) +# - at install-time set scriptdir to point to slotted location: +# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV} diff --git a/sys-devel/binutils/binutils-2.33.1-r1.ebuild b/sys-devel/binutils/binutils-2.33.1-r1.ebuild new file mode 100644 index 0000000..29def53 --- /dev/null +++ b/sys-devel/binutils/binutils-2.33.1-r1.ebuild @@ -0,0 +1,416 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit libtool flag-o-matic gnuconfig strip-linguas toolchain-funcs + +DESCRIPTION="Tools necessary to build programs" +HOMEPAGE="https://sourceware.org/binutils/" +LICENSE="GPL-3+" +IUSE="default-gold doc +gold multitarget +nls +plugins static-libs test" +REQUIRED_USE="default-gold? ( gold )" + +# Variables that can be set here: +# PATCH_VER - the patchset version +# Default: empty, no patching +# PATCH_BINUTILS_VER - the binutils version in the patchset name +# - Default: PV +# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/... +# for the patchsets + +PATCH_VER=2 +PATCH_DEV=slyfox + +case ${PV} in + 9999) + EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git" + inherit git-r3 + S=${WORKDIR}/binutils + EGIT_CHECKOUT_DIR=${S} + SLOT=${PV} + ;; + *) + SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz" + SLOT=$(ver_cut 1-2) + KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86" + ;; +esac + +# +# The Gentoo patchset +# +PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}} +PATCH_DEV=${PATCH_DEV:-slyfox} + +[[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI} + https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz" + +# +# The cross-compile logic +# +export CTARGET=${CTARGET:-${CHOST}} +if [[ ${CTARGET} == ${CHOST} ]] ; then + if [[ ${CATEGORY} == cross-* ]] ; then + export CTARGET=${CATEGORY#cross-} + fi +fi +is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; } + +# +# The dependencies +# +RDEPEND=" + >=sys-devel/binutils-config-3 + sys-libs/zlib +" +DEPEND="${RDEPEND} + doc? ( sys-apps/texinfo ) + test? ( dev-util/dejagnu ) + nls? ( sys-devel/gettext ) + app-alternatives/lex + app-alternatives/yacc +" + +RESTRICT="!test? ( test )" + +PATCHES=( + "${FILESDIR}"/${PN}-2.33-gcc-10.patch +) + +MY_BUILDDIR=${WORKDIR}/build + +src_unpack() { + case ${PV} in + *9999) + git-r3_src_unpack + ;; + *) + ;; + esac + default + mkdir -p "${MY_BUILDDIR}" +} + +src_prepare() { + if [[ -n ${PATCH_VER} ]] ; then + einfo "Applying binutils-${PATCH_BINUTILS_VER} patchset ${PATCH_VER}" + eapply "${WORKDIR}/patch"/*.patch + fi + + # Make sure our explicit libdir paths don't get clobbered. #562460 + sed -i \ + -e 's:@bfdlibdir@:@libdir@:g' \ + -e 's:@bfdincludedir@:@includedir@:g' \ + {bfd,opcodes}/Makefile.in || die + + # Fix conflicts with newer glibc #272594 + if [[ -e libiberty/testsuite/test-demangle.c ]] ; then + sed -i 's:\:get_line:g' libiberty/testsuite/test-demangle.c + fi + + # Apply things from PATCHES and user dirs + default + + # Run misc portage update scripts + gnuconfig_update + elibtoolize --portage --no-uclibc +} + +toolchain-binutils_bugurl() { + printf "https://bugs.gentoo.org/" +} +toolchain-binutils_pkgversion() { + printf "Gentoo ${PV}" + [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}" +} + +src_configure() { + # Setup some paths + LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV} + INCPATH=${LIBPATH}/include + DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV} + if is_cross ; then + TOOLPATH=/usr/${CHOST}/${CTARGET} + else + TOOLPATH=/usr/${CTARGET} + fi + BINPATH=${TOOLPATH}/binutils-bin/${PV} + + # Make sure we filter $LINGUAS so that only ones that + # actually work make it through #42033 + strip-linguas -u */po + + # Keep things sane + strip-flags + + append-ldflags $(test-flags-CCLD -Wl,--undefined-version) + + local x + echo + for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do + einfo "$(printf '%10s' ${x}:) ${!x}" + done + echo + + cd "${MY_BUILDDIR}" + local myconf=() + + if use plugins ; then + myconf+=( --enable-plugins ) + fi + # enable gold (installed as ld.gold) and ld's plugin architecture + if use gold ; then + myconf+=( --enable-gold ) + if use default-gold; then + myconf+=( --enable-gold=default ) + fi + fi + + if use nls ; then + myconf+=( --without-included-gettext ) + else + myconf+=( --disable-nls ) + fi + + myconf+=( --with-system-zlib ) + + # For bi-arch systems, enable a 64bit bfd. This matches + # the bi-arch logic in toolchain.eclass. #446946 + # We used to do it for everyone, but it's slow on 32bit arches. #438522 + case $(tc-arch) in + ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;; + esac + + use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd ) + + [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} ) + + is_cross && myconf+=( + --with-sysroot="${EPREFIX}"/usr/${CTARGET} + --enable-poison-system-directories + ) + + # glibc-2.3.6 lacks support for this ... so rather than force glibc-2.5+ + # on everyone in alpha (for now), we'll just enable it when possible + has_version ">=${CATEGORY}/glibc-2.5" && myconf+=( --enable-secureplt ) + has_version ">=sys-libs/glibc-2.5" && myconf+=( --enable-secureplt ) + + # mips can't do hash-style=gnu ... + if [[ $(tc-arch) != mips ]] ; then + myconf+=( --enable-default-hash-style=gnu ) + fi + + myconf+=( + --prefix="${EPREFIX}"/usr + --host=${CHOST} + --target=${CTARGET} + --datadir="${EPREFIX}"${DATAPATH} + --datarootdir="${EPREFIX}"${DATAPATH} + --infodir="${EPREFIX}"${DATAPATH}/info + --mandir="${EPREFIX}"${DATAPATH}/man + --bindir="${EPREFIX}"${BINPATH} + --libdir="${EPREFIX}"${LIBPATH} + --libexecdir="${EPREFIX}"${LIBPATH} + --includedir="${EPREFIX}"${INCPATH} + --enable-obsolete + --enable-shared + --enable-threads + # Newer versions (>=2.27) offer a configure flag now. + --enable-relro + # Newer versions (>=2.24) make this an explicit option. #497268 + --enable-install-libiberty + --disable-werror + --with-bugurl="$(toolchain-binutils_bugurl)" + --with-pkgversion="$(toolchain-binutils_pkgversion)" + $(use_enable static-libs static) + ${EXTRA_ECONF} + # Disable modules that are in a combined binutils/gdb tree. #490566 + --disable-{gdb,libdecnumber,readline,sim} + # Strip out broken static link flags. + # https://gcc.gnu.org/PR56750 + --without-stage1-ldflags + # Change SONAME to avoid conflict across + # {native,cross}/binutils, binutils-libs. #666100 + --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st) + ) + echo ./configure "${myconf[@]}" + "${S}"/configure "${myconf[@]}" || die + + # Prevent makeinfo from running if doc is unset. + if ! use doc ; then + sed -i \ + -e '/^MAKEINFO/s:=.*:= true:' \ + Makefile || die + fi +} + +src_compile() { + cd "${MY_BUILDDIR}" + # see Note [tooldir hack for ldscripts] + emake tooldir="${EPREFIX}${TOOLPATH}" all + + # only build info pages if the user wants them + if use doc ; then + emake info + fi + + # we nuke the manpages when we're left with junk + # (like when we bootstrap, no perl -> no manpages) + find . -name '*.1' -a -size 0 -delete +} + +src_test() { + cd "${MY_BUILDDIR}" + + # https://sourceware.org/PR31327 + local -x XZ_OPT="-T1" + local -x XZ_DEFAULTS="-T1" + + # bug 637066 + filter-flags -Wall -Wreturn-type + + emake -k check +} + +src_install() { + local x d + + cd "${MY_BUILDDIR}" + # see Note [tooldir hack for ldscripts] + emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install + rm -rf "${ED}"/${LIBPATH}/bin + use static-libs || find "${ED}" -name '*.la' -delete + + # Newer versions of binutils get fancy with ${LIBPATH} #171905 + cd "${ED}"/${LIBPATH} + for d in ../* ; do + [[ ${d} == ../${PV} ]] && continue + mv ${d}/* . || die + rmdir ${d} || die + done + + # Now we collect everything intp the proper SLOT-ed dirs + # When something is built to cross-compile, it installs into + # /usr/$CHOST/ by default ... we have to 'fix' that :) + if is_cross ; then + cd "${ED}"/${BINPATH} + for x in * ; do + mv ${x} ${x/${CTARGET}-} + done + + if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then + mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH} + mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/usr/${CHOST}/{include,lib} + fi + fi + insinto ${INCPATH} + local libiberty_headers=( + # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir. + demangle.h + dyn-string.h + fibheap.h + hashtab.h + libiberty.h + objalloc.h + splay-tree.h + ) + doins "${libiberty_headers[@]/#/${S}/include/}" + if [[ -d ${ED}/${LIBPATH}/lib ]] ; then + mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/${LIBPATH}/lib + fi + + # Generate an env.d entry for this binutils + insinto /etc/env.d/binutils + cat <<-EOF > "${T}"/env.d + TARGET="${CTARGET}" + VER="${PV}" + LIBPATH="${EPREFIX}${LIBPATH}" + EOF + newins "${T}"/env.d ${CTARGET}-${PV} + + # Handle documentation + if ! is_cross ; then + cd "${S}" + dodoc README + docinto bfd + dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO + docinto binutils + dodoc binutils/ChangeLog binutils/NEWS binutils/README + docinto gas + dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README* + docinto gprof + dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl + docinto ld + dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO + docinto libiberty + dodoc libiberty/ChangeLog* libiberty/README + docinto opcodes + dodoc opcodes/ChangeLog* + fi + + # Remove shared info pages + rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info} + + # Trim all empty dirs + find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null +} + +pkg_postinst() { + # Make sure this ${CTARGET} has a binutils version selected + [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0 + binutils-config ${CTARGET}-${PV} +} + +pkg_postrm() { + local current_profile=$(binutils-config -c ${CTARGET}) + + # If no other versions exist, then uninstall for this + # target ... otherwise, switch to the newest version + # Note: only do this if this version is unmerged. We + # rerun binutils-config if this is a remerge, as + # we want the mtimes on the symlinks updated (if + # it is the same as the current selected profile) + if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then + local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}') + choice=${choice//$'\n'/ } + choice=${choice/* } + if [[ -z ${choice} ]] ; then + binutils-config -u ${CTARGET} + else + binutils-config ${choice} + fi + elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then + binutils-config ${CTARGET}-${PV} + fi +} + +# Note [slotting support] +# ----------------------- +# Gentoo's layout for binutils files is non-standard as Gentoo +# supports slotted installation for binutils. Many tools +# still expect binutils to reside in known locations. +# binutils-config package restores symlinks into known locations, +# like: +# /usr/bin/${CTARGET}- +# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips +# /usr/include/ +# +# Note [tooldir hack for ldscripts] +# --------------------------------- +# Build system does not allow ./configure to tweak every location +# we need for slotting binutils hence all the shuffling in +# src_install(). This note is about SCRIPTDIR define handling. +# +# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value +# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib' +# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time. +# Thus we can't just move files around after compilation finished. +# +# Our goal is the following: +# - at build-time set scriptdir to point to symlinked location: +# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case) +# - at install-time set scriptdir to point to slotted location: +# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV} diff --git a/sys-devel/binutils/binutils-2.34-r2.ebuild b/sys-devel/binutils/binutils-2.34-r2.ebuild new file mode 100644 index 0000000..009154a --- /dev/null +++ b/sys-devel/binutils/binutils-2.34-r2.ebuild @@ -0,0 +1,417 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit libtool flag-o-matic gnuconfig strip-linguas toolchain-funcs + +DESCRIPTION="Tools necessary to build programs" +HOMEPAGE="https://sourceware.org/binutils/" +LICENSE="GPL-3+" +IUSE="default-gold doc +gold multitarget +nls +plugins static-libs test" +REQUIRED_USE="default-gold? ( gold )" + +# Variables that can be set here: +# PATCH_VER - the patchset version +# Default: empty, no patching +# PATCH_BINUTILS_VER - the binutils version in the patchset name +# - Default: PV +# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/... +# for the patchsets + +PATCH_VER=6 +PATCH_DEV=dilfridge + +case ${PV} in + 9999) + EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git" + inherit git-r3 + S=${WORKDIR}/binutils + EGIT_CHECKOUT_DIR=${S} + SLOT=${PV} + ;; + *) + SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz" + SLOT=$(ver_cut 1-2) + KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86" + ;; +esac + +# +# The Gentoo patchset +# +PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}} +PATCH_DEV=${PATCH_DEV:-slyfox} + +[[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI} + https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz" + +# +# The cross-compile logic +# +export CTARGET=${CTARGET:-${CHOST}} +if [[ ${CTARGET} == ${CHOST} ]] ; then + if [[ ${CATEGORY} == cross-* ]] ; then + export CTARGET=${CATEGORY#cross-} + fi +fi +is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; } + +# +# The dependencies +# +RDEPEND=" + >=sys-devel/binutils-config-3 + sys-libs/zlib +" +DEPEND="${RDEPEND}" +BDEPEND=" + doc? ( sys-apps/texinfo ) + test? ( dev-util/dejagnu ) + nls? ( sys-devel/gettext ) + app-alternatives/lex + app-alternatives/yacc +" + +RESTRICT="!test? ( test )" + +MY_BUILDDIR=${WORKDIR}/build + +src_unpack() { + case ${PV} in + *9999) + git-r3_src_unpack + ;; + *) + ;; + esac + default + mkdir -p "${MY_BUILDDIR}" +} + +src_prepare() { + if [[ -n ${PATCH_VER} ]] ; then + einfo "Applying binutils-${PATCH_BINUTILS_VER} patchset ${PATCH_VER}" + eapply "${WORKDIR}/patch"/*.patch + fi + + # Make sure our explicit libdir paths don't get clobbered. #562460 + sed -i \ + -e 's:@bfdlibdir@:@libdir@:g' \ + -e 's:@bfdincludedir@:@includedir@:g' \ + {bfd,opcodes}/Makefile.in || die + + # Fix conflicts with newer glibc #272594 + if [[ -e libiberty/testsuite/test-demangle.c ]] ; then + sed -i 's:\:get_line:g' libiberty/testsuite/test-demangle.c + fi + + # Apply things from PATCHES and user dirs + default + + # Run misc portage update scripts + gnuconfig_update + elibtoolize --portage --no-uclibc +} + +toolchain-binutils_bugurl() { + printf "https://bugs.gentoo.org/" +} +toolchain-binutils_pkgversion() { + printf "Gentoo ${PV}" + [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}" +} + +src_configure() { + # Setup some paths + LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV} + INCPATH=${LIBPATH}/include + DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV} + if is_cross ; then + TOOLPATH=/usr/${CHOST}/${CTARGET} + else + TOOLPATH=/usr/${CTARGET} + fi + BINPATH=${TOOLPATH}/binutils-bin/${PV} + + # Make sure we filter $LINGUAS so that only ones that + # actually work make it through #42033 + strip-linguas -u */po + + # Keep things sane + strip-flags + + append-ldflags $(test-flags-CCLD -Wl,--undefined-version) + + local x + echo + for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do + einfo "$(printf '%10s' ${x}:) ${!x}" + done + echo + + cd "${MY_BUILDDIR}" + local myconf=() + + if use plugins ; then + myconf+=( --enable-plugins ) + fi + # enable gold (installed as ld.gold) and ld's plugin architecture + if use gold ; then + myconf+=( --enable-gold ) + if use default-gold; then + myconf+=( --enable-gold=default ) + fi + fi + + if use nls ; then + myconf+=( --without-included-gettext ) + else + myconf+=( --disable-nls ) + fi + + myconf+=( --with-system-zlib ) + + # For bi-arch systems, enable a 64bit bfd. This matches + # the bi-arch logic in toolchain.eclass. #446946 + # We used to do it for everyone, but it's slow on 32bit arches. #438522 + case $(tc-arch) in + ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;; + esac + + use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd ) + + [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} ) + + is_cross && myconf+=( + --with-sysroot="${EPREFIX}"/usr/${CTARGET} + --enable-poison-system-directories + ) + + # glibc-2.3.6 lacks support for this ... so rather than force glibc-2.5+ + # on everyone in alpha (for now), we'll just enable it when possible + has_version ">=${CATEGORY}/glibc-2.5" && myconf+=( --enable-secureplt ) + has_version ">=sys-libs/glibc-2.5" && myconf+=( --enable-secureplt ) + + # mips can't do hash-style=gnu ... + if [[ $(tc-arch) != mips ]] ; then + myconf+=( --enable-default-hash-style=gnu ) + fi + + myconf+=( + --prefix="${EPREFIX}"/usr + --host=${CHOST} + --target=${CTARGET} + --datadir="${EPREFIX}"${DATAPATH} + --datarootdir="${EPREFIX}"${DATAPATH} + --infodir="${EPREFIX}"${DATAPATH}/info + --mandir="${EPREFIX}"${DATAPATH}/man + --bindir="${EPREFIX}"${BINPATH} + --libdir="${EPREFIX}"${LIBPATH} + --libexecdir="${EPREFIX}"${LIBPATH} + --includedir="${EPREFIX}"${INCPATH} + --enable-obsolete + --enable-shared + --enable-threads + # Newer versions (>=2.27) offer a configure flag now. + --enable-relro + # Newer versions (>=2.24) make this an explicit option. #497268 + --enable-install-libiberty + --disable-werror + --with-bugurl="$(toolchain-binutils_bugurl)" + --with-pkgversion="$(toolchain-binutils_pkgversion)" + $(use_enable static-libs static) + ${EXTRA_ECONF} + # Disable modules that are in a combined binutils/gdb tree. #490566 + --disable-{gdb,libdecnumber,readline,sim} + # Strip out broken static link flags. + # https://gcc.gnu.org/PR56750 + --without-stage1-ldflags + # Change SONAME to avoid conflict across + # {native,cross}/binutils, binutils-libs. #666100 + --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st) + + # avoid automagic dependency on (currently prefix) systems + # systems with debuginfod library, bug #754753 + --without-debuginfod + ) + echo ./configure "${myconf[@]}" + "${S}"/configure "${myconf[@]}" || die + + # Prevent makeinfo from running if doc is unset. + if ! use doc ; then + sed -i \ + -e '/^MAKEINFO/s:=.*:= true:' \ + Makefile || die + fi +} + +src_compile() { + cd "${MY_BUILDDIR}" + # see Note [tooldir hack for ldscripts] + emake tooldir="${EPREFIX}${TOOLPATH}" all + + # only build info pages if the user wants them + if use doc ; then + emake info + fi + + # we nuke the manpages when we're left with junk + # (like when we bootstrap, no perl -> no manpages) + find . -name '*.1' -a -size 0 -delete +} + +src_test() { + cd "${MY_BUILDDIR}" + + # https://sourceware.org/PR31327 + local -x XZ_OPT="-T1" + local -x XZ_DEFAULTS="-T1" + + # bug 637066 + filter-flags -Wall -Wreturn-type + + emake -k check +} + +src_install() { + local x d + + cd "${MY_BUILDDIR}" + # see Note [tooldir hack for ldscripts] + emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install + rm -rf "${ED}"/${LIBPATH}/bin + use static-libs || find "${ED}" -name '*.la' -delete + + # Newer versions of binutils get fancy with ${LIBPATH} #171905 + cd "${ED}"/${LIBPATH} + for d in ../* ; do + [[ ${d} == ../${PV} ]] && continue + mv ${d}/* . || die + rmdir ${d} || die + done + + # Now we collect everything intp the proper SLOT-ed dirs + # When something is built to cross-compile, it installs into + # /usr/$CHOST/ by default ... we have to 'fix' that :) + if is_cross ; then + cd "${ED}"/${BINPATH} + for x in * ; do + mv ${x} ${x/${CTARGET}-} + done + + if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then + mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH} + mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/usr/${CHOST}/{include,lib} + fi + fi + insinto ${INCPATH} + local libiberty_headers=( + # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir. + demangle.h + dyn-string.h + fibheap.h + hashtab.h + libiberty.h + objalloc.h + splay-tree.h + ) + doins "${libiberty_headers[@]/#/${S}/include/}" + if [[ -d ${ED}/${LIBPATH}/lib ]] ; then + mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/${LIBPATH}/lib + fi + + # Generate an env.d entry for this binutils + insinto /etc/env.d/binutils + cat <<-EOF > "${T}"/env.d + TARGET="${CTARGET}" + VER="${PV}" + LIBPATH="${EPREFIX}${LIBPATH}" + EOF + newins "${T}"/env.d ${CTARGET}-${PV} + + # Handle documentation + if ! is_cross ; then + cd "${S}" + dodoc README + docinto bfd + dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO + docinto binutils + dodoc binutils/ChangeLog binutils/NEWS binutils/README + docinto gas + dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README* + docinto gprof + dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl + docinto ld + dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO + docinto libiberty + dodoc libiberty/ChangeLog* libiberty/README + docinto opcodes + dodoc opcodes/ChangeLog* + fi + + # Remove shared info pages + rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info} + + # Trim all empty dirs + find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null +} + +pkg_postinst() { + # Make sure this ${CTARGET} has a binutils version selected + [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0 + binutils-config ${CTARGET}-${PV} +} + +pkg_postrm() { + local current_profile=$(binutils-config -c ${CTARGET}) + + # If no other versions exist, then uninstall for this + # target ... otherwise, switch to the newest version + # Note: only do this if this version is unmerged. We + # rerun binutils-config if this is a remerge, as + # we want the mtimes on the symlinks updated (if + # it is the same as the current selected profile) + if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then + local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}') + choice=${choice//$'\n'/ } + choice=${choice/* } + if [[ -z ${choice} ]] ; then + binutils-config -u ${CTARGET} + else + binutils-config ${choice} + fi + elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then + binutils-config ${CTARGET}-${PV} + fi +} + +# Note [slotting support] +# ----------------------- +# Gentoo's layout for binutils files is non-standard as Gentoo +# supports slotted installation for binutils. Many tools +# still expect binutils to reside in known locations. +# binutils-config package restores symlinks into known locations, +# like: +# /usr/bin/${CTARGET}- +# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips +# /usr/include/ +# +# Note [tooldir hack for ldscripts] +# --------------------------------- +# Build system does not allow ./configure to tweak every location +# we need for slotting binutils hence all the shuffling in +# src_install(). This note is about SCRIPTDIR define handling. +# +# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value +# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib' +# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time. +# Thus we can't just move files around after compilation finished. +# +# Our goal is the following: +# - at build-time set scriptdir to point to symlinked location: +# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case) +# - at install-time set scriptdir to point to slotted location: +# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV} diff --git a/sys-devel/binutils/binutils-2.35.2.ebuild b/sys-devel/binutils/binutils-2.35.2.ebuild new file mode 100644 index 0000000..2e7d17a --- /dev/null +++ b/sys-devel/binutils/binutils-2.35.2.ebuild @@ -0,0 +1,441 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit libtool flag-o-matic gnuconfig strip-linguas toolchain-funcs + +DESCRIPTION="Tools necessary to build programs" +HOMEPAGE="https://sourceware.org/binutils/" +LICENSE="GPL-3+" +IUSE="cet default-gold doc +gold multitarget +nls +plugins static-libs test vanilla" +REQUIRED_USE="default-gold? ( gold )" + +# Variables that can be set here (ignored for live ebuilds) +# PATCH_VER - the patchset version +# Default: empty, no patching +# PATCH_BINUTILS_VER - the binutils version in the patchset name +# - Default: PV +# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/... +# for the patchsets + +PATCH_VER=1 +PATCH_DEV=dilfridge + +if [[ ${PV} == 9999* ]]; then + inherit git-r3 + SLOT=${PV} +else + PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}} + PATCH_DEV=${PATCH_DEV:-slyfox} + SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz" + [[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI} + https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz" + SLOT=$(ver_cut 1-2) + KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86" +fi + +# +# The cross-compile logic +# +export CTARGET=${CTARGET:-${CHOST}} +if [[ ${CTARGET} == ${CHOST} ]] ; then + if [[ ${CATEGORY} == cross-* ]] ; then + export CTARGET=${CATEGORY#cross-} + fi +fi +is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; } + +# +# The dependencies +# +RDEPEND=" + >=sys-devel/binutils-config-3 + sys-libs/zlib +" +DEPEND="${RDEPEND}" +BDEPEND=" + doc? ( sys-apps/texinfo ) + test? ( + dev-util/dejagnu + app-alternatives/bc + ) + nls? ( sys-devel/gettext ) + app-alternatives/lex + app-alternatives/yacc +" + +RESTRICT="!test? ( test )" + +PATCHES=( + "${FILESDIR}"/${PN}-2.35.1-cet.patch + "${FILESDIR}"/${PN}-2.35.2-powerpc-tests.patch +) + +MY_BUILDDIR=${WORKDIR}/build + +src_unpack() { + if [[ ${PV} == 9999* ]] ; then + EGIT_REPO_URI="https://anongit.gentoo.org/git/proj/toolchain/binutils-patches.git" + EGIT_CHECKOUT_DIR=${WORKDIR}/patches-git + git-r3_src_unpack + mv patches-git/9999 patch || die + + EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git" + S=${WORKDIR}/binutils + EGIT_CHECKOUT_DIR=${S} + git-r3_src_unpack + else + unpack ${P}.tar.xz + + cd "${WORKDIR}" || die + unpack binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz + fi + + cd "${WORKDIR}" || die + mkdir -p "${MY_BUILDDIR}" || die +} + +src_prepare() { + local patchsetname + if [[ ${PV} == 9999* ]] ; then + patchsetname="from git master" + else + patchsetname="${PATCH_BINUTILS_VER}-${PATCH_VER}" + fi + + if [[ -n ${PATCH_VER} ]] || [[ ${PV} == 9999* ]] ; then + if ! use vanilla; then + einfo "Applying binutils patchset ${patchsetname}" + eapply "${WORKDIR}/patch" + einfo "Done." + fi + fi + + # Make sure our explicit libdir paths don't get clobbered. #562460 + sed -i \ + -e 's:@bfdlibdir@:@libdir@:g' \ + -e 's:@bfdincludedir@:@includedir@:g' \ + {bfd,opcodes}/Makefile.in || die + + # Fix conflicts with newer glibc #272594 + if [[ -e libiberty/testsuite/test-demangle.c ]] ; then + sed -i 's:\:get_line:g' libiberty/testsuite/test-demangle.c + fi + + # Apply things from PATCHES and user dirs + default + + # Run misc portage update scripts + gnuconfig_update + elibtoolize --portage --no-uclibc +} + +toolchain-binutils_bugurl() { + printf "https://bugs.gentoo.org/" +} +toolchain-binutils_pkgversion() { + printf "Gentoo ${PV}" + [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}" +} + +src_configure() { + # Setup some paths + LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV} + INCPATH=${LIBPATH}/include + DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV} + if is_cross ; then + TOOLPATH=/usr/${CHOST}/${CTARGET} + else + TOOLPATH=/usr/${CTARGET} + fi + BINPATH=${TOOLPATH}/binutils-bin/${PV} + + # Make sure we filter $LINGUAS so that only ones that + # actually work make it through #42033 + strip-linguas -u */po + + # Keep things sane + strip-flags + + append-ldflags $(test-flags-CCLD -Wl,--undefined-version) + + local x + echo + for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do + einfo "$(printf '%10s' ${x}:) ${!x}" + done + echo + + cd "${MY_BUILDDIR}" + local myconf=() + + if use plugins ; then + myconf+=( --enable-plugins ) + fi + # enable gold (installed as ld.gold) and ld's plugin architecture + if use gold ; then + myconf+=( --enable-gold ) + if use default-gold; then + myconf+=( --enable-gold=default ) + fi + fi + + if use nls ; then + myconf+=( --without-included-gettext ) + else + myconf+=( --disable-nls ) + fi + + myconf+=( --with-system-zlib ) + + # For bi-arch systems, enable a 64bit bfd. This matches + # the bi-arch logic in toolchain.eclass. #446946 + # We used to do it for everyone, but it's slow on 32bit arches. #438522 + case $(tc-arch) in + ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;; + esac + + use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd ) + + [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} ) + + is_cross && myconf+=( + --with-sysroot="${EPREFIX}"/usr/${CTARGET} + --enable-poison-system-directories + ) + + # glibc-2.3.6 lacks support for this ... so rather than force glibc-2.5+ + # on everyone in alpha (for now), we'll just enable it when possible + has_version ">=${CATEGORY}/glibc-2.5" && myconf+=( --enable-secureplt ) + has_version ">=sys-libs/glibc-2.5" && myconf+=( --enable-secureplt ) + + # mips can't do hash-style=gnu ... + if [[ $(tc-arch) != mips ]] ; then + myconf+=( --enable-default-hash-style=gnu ) + fi + + myconf+=( + --prefix="${EPREFIX}"/usr + --host=${CHOST} + --target=${CTARGET} + --datadir="${EPREFIX}"${DATAPATH} + --datarootdir="${EPREFIX}"${DATAPATH} + --infodir="${EPREFIX}"${DATAPATH}/info + --mandir="${EPREFIX}"${DATAPATH}/man + --bindir="${EPREFIX}"${BINPATH} + --libdir="${EPREFIX}"${LIBPATH} + --libexecdir="${EPREFIX}"${LIBPATH} + --includedir="${EPREFIX}"${INCPATH} + --enable-obsolete + --enable-shared + --enable-threads + # Newer versions (>=2.27) offer a configure flag now. + --enable-relro + # Newer versions (>=2.24) make this an explicit option. #497268 + --enable-install-libiberty + # Available from 2.35 on + --enable-textrel-check=warning + --disable-werror + --with-bugurl="$(toolchain-binutils_bugurl)" + --with-pkgversion="$(toolchain-binutils_pkgversion)" + $(use_enable static-libs static) + ${EXTRA_ECONF} + # Disable modules that are in a combined binutils/gdb tree. #490566 + --disable-{gdb,libdecnumber,readline,sim} + # Strip out broken static link flags. + # https://gcc.gnu.org/PR56750 + --without-stage1-ldflags + # Change SONAME to avoid conflict across + # {native,cross}/binutils, binutils-libs. #666100 + --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st) + + # avoid automagic dependency on (currently prefix) systems + # systems with debuginfod library, bug #754753 + --without-debuginfod + + # Allow user to opt into CET for host libraries. + # Ideally we would like automagic-or-disabled here. + # But the check does not quite work on i686: bug #760926. + $(use_enable cet) + ) + echo ./configure "${myconf[@]}" + "${S}"/configure "${myconf[@]}" || die + + # Prevent makeinfo from running if doc is unset. + if ! use doc ; then + sed -i \ + -e '/^MAKEINFO/s:=.*:= true:' \ + Makefile || die + fi +} + +src_compile() { + cd "${MY_BUILDDIR}" + # see Note [tooldir hack for ldscripts] + emake tooldir="${EPREFIX}${TOOLPATH}" all + + # only build info pages if the user wants them + if use doc ; then + emake info + fi + + # we nuke the manpages when we're left with junk + # (like when we bootstrap, no perl -> no manpages) + find . -name '*.1' -a -size 0 -delete +} + +src_test() { + cd "${MY_BUILDDIR}" + + # https://sourceware.org/PR31327 + local -x XZ_OPT="-T1" + local -x XZ_DEFAULTS="-T1" + + # bug 637066 + filter-flags -Wall -Wreturn-type + + emake -k check +} + +src_install() { + local x d + + cd "${MY_BUILDDIR}" + # see Note [tooldir hack for ldscripts] + emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install + rm -rf "${ED}"/${LIBPATH}/bin + use static-libs || find "${ED}" -name '*.la' -delete + + # Newer versions of binutils get fancy with ${LIBPATH} #171905 + cd "${ED}"/${LIBPATH} + for d in ../* ; do + [[ ${d} == ../${PV} ]] && continue + mv ${d}/* . || die + rmdir ${d} || die + done + + # Now we collect everything intp the proper SLOT-ed dirs + # When something is built to cross-compile, it installs into + # /usr/$CHOST/ by default ... we have to 'fix' that :) + if is_cross ; then + cd "${ED}"/${BINPATH} + for x in * ; do + mv ${x} ${x/${CTARGET}-} + done + + if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then + mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH} + mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/usr/${CHOST}/{include,lib} + fi + fi + insinto ${INCPATH} + local libiberty_headers=( + # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir. + demangle.h + dyn-string.h + fibheap.h + hashtab.h + libiberty.h + objalloc.h + splay-tree.h + ) + doins "${libiberty_headers[@]/#/${S}/include/}" + if [[ -d ${ED}/${LIBPATH}/lib ]] ; then + mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/${LIBPATH}/lib + fi + + # Generate an env.d entry for this binutils + insinto /etc/env.d/binutils + cat <<-EOF > "${T}"/env.d + TARGET="${CTARGET}" + VER="${PV}" + LIBPATH="${EPREFIX}${LIBPATH}" + EOF + newins "${T}"/env.d ${CTARGET}-${PV} + + # Handle documentation + if ! is_cross ; then + cd "${S}" + dodoc README + docinto bfd + dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO + docinto binutils + dodoc binutils/ChangeLog binutils/NEWS binutils/README + docinto gas + dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README* + docinto gprof + dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl + docinto ld + dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO + docinto libiberty + dodoc libiberty/ChangeLog* libiberty/README + docinto opcodes + dodoc opcodes/ChangeLog* + fi + + # Remove shared info pages + rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info} + + # Trim all empty dirs + find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null +} + +pkg_postinst() { + # Make sure this ${CTARGET} has a binutils version selected + [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0 + binutils-config ${CTARGET}-${PV} +} + +pkg_postrm() { + local current_profile=$(binutils-config -c ${CTARGET}) + + # If no other versions exist, then uninstall for this + # target ... otherwise, switch to the newest version + # Note: only do this if this version is unmerged. We + # rerun binutils-config if this is a remerge, as + # we want the mtimes on the symlinks updated (if + # it is the same as the current selected profile) + if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then + local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}') + choice=${choice//$'\n'/ } + choice=${choice/* } + if [[ -z ${choice} ]] ; then + binutils-config -u ${CTARGET} + else + binutils-config ${choice} + fi + elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then + binutils-config ${CTARGET}-${PV} + fi +} + +# Note [slotting support] +# ----------------------- +# Gentoo's layout for binutils files is non-standard as Gentoo +# supports slotted installation for binutils. Many tools +# still expect binutils to reside in known locations. +# binutils-config package restores symlinks into known locations, +# like: +# /usr/bin/${CTARGET}- +# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips +# /usr/include/ +# +# Note [tooldir hack for ldscripts] +# --------------------------------- +# Build system does not allow ./configure to tweak every location +# we need for slotting binutils hence all the shuffling in +# src_install(). This note is about SCRIPTDIR define handling. +# +# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value +# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib' +# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time. +# Thus we can't just move files around after compilation finished. +# +# Our goal is the following: +# - at build-time set scriptdir to point to symlinked location: +# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case) +# - at install-time set scriptdir to point to slotted location: +# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV} diff --git a/sys-devel/binutils/binutils-2.36.1-r2.ebuild b/sys-devel/binutils/binutils-2.36.1-r2.ebuild new file mode 100644 index 0000000..243182b --- /dev/null +++ b/sys-devel/binutils/binutils-2.36.1-r2.ebuild @@ -0,0 +1,436 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit libtool flag-o-matic gnuconfig strip-linguas toolchain-funcs + +DESCRIPTION="Tools necessary to build programs" +HOMEPAGE="https://sourceware.org/binutils/" +LICENSE="GPL-3+" +IUSE="cet default-gold doc +gold multitarget +nls +plugins static-libs test vanilla" +REQUIRED_USE="default-gold? ( gold )" + +# Variables that can be set here (ignored for live ebuilds) +# PATCH_VER - the patchset version +# Default: empty, no patching +# PATCH_BINUTILS_VER - the binutils version in the patchset name +# - Default: PV +# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/... +# for the patchsets + +PATCH_VER=5 +PATCH_DEV=dilfridge + +if [[ ${PV} == 9999* ]]; then + inherit git-r3 + SLOT=${PV} +else + PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}} + PATCH_DEV=${PATCH_DEV:-slyfox} + SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz" + [[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI} + https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz" + SLOT=$(ver_cut 1-2) + KEYWORDS="~alpha amd64 arm arm64 ~hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86" +fi + +# +# The cross-compile logic +# +export CTARGET=${CTARGET:-${CHOST}} +if [[ ${CTARGET} == ${CHOST} ]] ; then + if [[ ${CATEGORY} == cross-* ]] ; then + export CTARGET=${CATEGORY#cross-} + fi +fi +is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; } + +# +# The dependencies +# +RDEPEND=" + >=sys-devel/binutils-config-3 + sys-libs/zlib +" +DEPEND="${RDEPEND}" +BDEPEND=" + doc? ( sys-apps/texinfo ) + test? ( + dev-util/dejagnu + app-alternatives/bc + ) + nls? ( sys-devel/gettext ) + app-alternatives/lex + app-alternatives/yacc +" + +RESTRICT="!test? ( test )" + +MY_BUILDDIR=${WORKDIR}/build + +src_unpack() { + if [[ ${PV} == 9999* ]] ; then + EGIT_REPO_URI="https://anongit.gentoo.org/git/proj/toolchain/binutils-patches.git" + EGIT_CHECKOUT_DIR=${WORKDIR}/patches-git + git-r3_src_unpack + mv patches-git/9999 patch || die + + EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git" + S=${WORKDIR}/binutils + EGIT_CHECKOUT_DIR=${S} + git-r3_src_unpack + else + unpack ${P}.tar.xz + + cd "${WORKDIR}" || die + unpack binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz + fi + + cd "${WORKDIR}" || die + mkdir -p "${MY_BUILDDIR}" || die +} + +src_prepare() { + local patchsetname + if [[ ${PV} == 9999* ]] ; then + patchsetname="from git master" + else + patchsetname="${PATCH_BINUTILS_VER}-${PATCH_VER}" + fi + + if [[ -n ${PATCH_VER} ]] || [[ ${PV} == 9999* ]] ; then + if ! use vanilla; then + einfo "Applying binutils patchset ${patchsetname}" + eapply "${WORKDIR}/patch" + einfo "Done." + fi + fi + + # Make sure our explicit libdir paths don't get clobbered. #562460 + sed -i \ + -e 's:@bfdlibdir@:@libdir@:g' \ + -e 's:@bfdincludedir@:@includedir@:g' \ + {bfd,opcodes}/Makefile.in || die + + # Fix conflicts with newer glibc #272594 + if [[ -e libiberty/testsuite/test-demangle.c ]] ; then + sed -i 's:\:get_line:g' libiberty/testsuite/test-demangle.c + fi + + # Apply things from PATCHES and user dirs + default + + # Run misc portage update scripts + gnuconfig_update + elibtoolize --portage --no-uclibc +} + +toolchain-binutils_bugurl() { + printf "https://bugs.gentoo.org/" +} +toolchain-binutils_pkgversion() { + printf "Gentoo ${PV}" + [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}" +} + +src_configure() { + # Setup some paths + LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV} + INCPATH=${LIBPATH}/include + DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV} + if is_cross ; then + TOOLPATH=/usr/${CHOST}/${CTARGET} + else + TOOLPATH=/usr/${CTARGET} + fi + BINPATH=${TOOLPATH}/binutils-bin/${PV} + + # Make sure we filter $LINGUAS so that only ones that + # actually work make it through #42033 + strip-linguas -u */po + + # Keep things sane + strip-flags + + append-ldflags $(test-flags-CCLD -Wl,--undefined-version) + + local x + echo + for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do + einfo "$(printf '%10s' ${x}:) ${!x}" + done + echo + + cd "${MY_BUILDDIR}" + local myconf=() + + if use plugins ; then + myconf+=( --enable-plugins ) + fi + # enable gold (installed as ld.gold) and ld's plugin architecture + if use gold ; then + myconf+=( --enable-gold ) + if use default-gold; then + myconf+=( --enable-gold=default ) + fi + fi + + if use nls ; then + myconf+=( --without-included-gettext ) + else + myconf+=( --disable-nls ) + fi + + myconf+=( --with-system-zlib ) + + # For bi-arch systems, enable a 64bit bfd. This matches + # the bi-arch logic in toolchain.eclass. #446946 + # We used to do it for everyone, but it's slow on 32bit arches. #438522 + case $(tc-arch) in + ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;; + esac + + use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd ) + + [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} ) + + is_cross && myconf+=( + --with-sysroot="${EPREFIX}"/usr/${CTARGET} + --enable-poison-system-directories + ) + + # glibc-2.3.6 lacks support for this ... so rather than force glibc-2.5+ + # on everyone in alpha (for now), we'll just enable it when possible + has_version ">=${CATEGORY}/glibc-2.5" && myconf+=( --enable-secureplt ) + has_version ">=sys-libs/glibc-2.5" && myconf+=( --enable-secureplt ) + + # mips can't do hash-style=gnu ... + if [[ $(tc-arch) != mips ]] ; then + myconf+=( --enable-default-hash-style=gnu ) + fi + + myconf+=( + --prefix="${EPREFIX}"/usr + --host=${CHOST} + --target=${CTARGET} + --datadir="${EPREFIX}"${DATAPATH} + --datarootdir="${EPREFIX}"${DATAPATH} + --infodir="${EPREFIX}"${DATAPATH}/info + --mandir="${EPREFIX}"${DATAPATH}/man + --bindir="${EPREFIX}"${BINPATH} + --libdir="${EPREFIX}"${LIBPATH} + --libexecdir="${EPREFIX}"${LIBPATH} + --includedir="${EPREFIX}"${INCPATH} + --enable-obsolete + --enable-shared + --enable-threads + # Newer versions (>=2.27) offer a configure flag now. + --enable-relro + # Newer versions (>=2.24) make this an explicit option. #497268 + --enable-install-libiberty + # Available from 2.35 on + --enable-textrel-check=warning + --disable-werror + --with-bugurl="$(toolchain-binutils_bugurl)" + --with-pkgversion="$(toolchain-binutils_pkgversion)" + $(use_enable static-libs static) + ${EXTRA_ECONF} + # Disable modules that are in a combined binutils/gdb tree. #490566 + --disable-{gdb,libdecnumber,readline,sim} + # Strip out broken static link flags. + # https://gcc.gnu.org/PR56750 + --without-stage1-ldflags + # Change SONAME to avoid conflict across + # {native,cross}/binutils, binutils-libs. #666100 + --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st) + + # avoid automagic dependency on (currently prefix) systems + # systems with debuginfod library, bug #754753 + --without-debuginfod + + # Allow user to opt into CET for host libraries. + # Ideally we would like automagic-or-disabled here. + # But the check does not quite work on i686: bug #760926. + $(use_enable cet) + ) + echo ./configure "${myconf[@]}" + "${S}"/configure "${myconf[@]}" || die + + # Prevent makeinfo from running if doc is unset. + if ! use doc ; then + sed -i \ + -e '/^MAKEINFO/s:=.*:= true:' \ + Makefile || die + fi +} + +src_compile() { + cd "${MY_BUILDDIR}" + # see Note [tooldir hack for ldscripts] + emake tooldir="${EPREFIX}${TOOLPATH}" all + + # only build info pages if the user wants them + if use doc ; then + emake info + fi + + # we nuke the manpages when we're left with junk + # (like when we bootstrap, no perl -> no manpages) + find . -name '*.1' -a -size 0 -delete +} + +src_test() { + cd "${MY_BUILDDIR}" + + # https://sourceware.org/PR31327 + local -x XZ_OPT="-T1" + local -x XZ_DEFAULTS="-T1" + + # bug 637066 + filter-flags -Wall -Wreturn-type + + emake -k check +} + +src_install() { + local x d + + cd "${MY_BUILDDIR}" + # see Note [tooldir hack for ldscripts] + emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install + rm -rf "${ED}"/${LIBPATH}/bin + use static-libs || find "${ED}" -name '*.la' -delete + + # Newer versions of binutils get fancy with ${LIBPATH} #171905 + cd "${ED}"/${LIBPATH} + for d in ../* ; do + [[ ${d} == ../${PV} ]] && continue + mv ${d}/* . || die + rmdir ${d} || die + done + + # Now we collect everything intp the proper SLOT-ed dirs + # When something is built to cross-compile, it installs into + # /usr/$CHOST/ by default ... we have to 'fix' that :) + if is_cross ; then + cd "${ED}"/${BINPATH} + for x in * ; do + mv ${x} ${x/${CTARGET}-} + done + + if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then + mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH} + mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/usr/${CHOST}/{include,lib} + fi + fi + insinto ${INCPATH} + local libiberty_headers=( + # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir. + demangle.h + dyn-string.h + fibheap.h + hashtab.h + libiberty.h + objalloc.h + splay-tree.h + ) + doins "${libiberty_headers[@]/#/${S}/include/}" + if [[ -d ${ED}/${LIBPATH}/lib ]] ; then + mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/${LIBPATH}/lib + fi + + # Generate an env.d entry for this binutils + insinto /etc/env.d/binutils + cat <<-EOF > "${T}"/env.d + TARGET="${CTARGET}" + VER="${PV}" + LIBPATH="${EPREFIX}${LIBPATH}" + EOF + newins "${T}"/env.d ${CTARGET}-${PV} + + # Handle documentation + if ! is_cross ; then + cd "${S}" + dodoc README + docinto bfd + dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO + docinto binutils + dodoc binutils/ChangeLog binutils/NEWS binutils/README + docinto gas + dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README* + docinto gprof + dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl + docinto ld + dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO + docinto libiberty + dodoc libiberty/ChangeLog* libiberty/README + docinto opcodes + dodoc opcodes/ChangeLog* + fi + + # Remove shared info pages + rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info} + + # Trim all empty dirs + find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null +} + +pkg_postinst() { + # Make sure this ${CTARGET} has a binutils version selected + [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0 + binutils-config ${CTARGET}-${PV} +} + +pkg_postrm() { + local current_profile=$(binutils-config -c ${CTARGET}) + + # If no other versions exist, then uninstall for this + # target ... otherwise, switch to the newest version + # Note: only do this if this version is unmerged. We + # rerun binutils-config if this is a remerge, as + # we want the mtimes on the symlinks updated (if + # it is the same as the current selected profile) + if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then + local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}') + choice=${choice//$'\n'/ } + choice=${choice/* } + if [[ -z ${choice} ]] ; then + binutils-config -u ${CTARGET} + else + binutils-config ${choice} + fi + elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then + binutils-config ${CTARGET}-${PV} + fi +} + +# Note [slotting support] +# ----------------------- +# Gentoo's layout for binutils files is non-standard as Gentoo +# supports slotted installation for binutils. Many tools +# still expect binutils to reside in known locations. +# binutils-config package restores symlinks into known locations, +# like: +# /usr/bin/${CTARGET}- +# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips +# /usr/include/ +# +# Note [tooldir hack for ldscripts] +# --------------------------------- +# Build system does not allow ./configure to tweak every location +# we need for slotting binutils hence all the shuffling in +# src_install(). This note is about SCRIPTDIR define handling. +# +# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value +# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib' +# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time. +# Thus we can't just move files around after compilation finished. +# +# Our goal is the following: +# - at build-time set scriptdir to point to symlinked location: +# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case) +# - at install-time set scriptdir to point to slotted location: +# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV} diff --git a/sys-devel/binutils/binutils-2.37_p1-r2.ebuild b/sys-devel/binutils/binutils-2.37_p1-r2.ebuild new file mode 100644 index 0000000..c7faa17 --- /dev/null +++ b/sys-devel/binutils/binutils-2.37_p1-r2.ebuild @@ -0,0 +1,455 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit libtool flag-o-matic gnuconfig strip-linguas toolchain-funcs + +DESCRIPTION="Tools necessary to build programs" +HOMEPAGE="https://sourceware.org/binutils/" +LICENSE="GPL-3+" +IUSE="cet default-gold doc +gold multitarget +nls pgo +plugins static-libs test vanilla" +REQUIRED_USE="default-gold? ( gold )" + +# Variables that can be set here (ignored for live ebuilds) +# PATCH_VER - the patchset version +# Default: empty, no patching +# PATCH_BINUTILS_VER - the binutils version in the patchset name +# - Default: PV +# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/... +# for the patchsets + +PATCH_VER=2 +PATCH_DEV=dilfridge + +if [[ ${PV} == 9999* ]]; then + inherit git-r3 + SLOT=${PV} +else + PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}} + PATCH_DEV=${PATCH_DEV:-dilfridge} + SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PV}.tar.xz" + [[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI} + https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz" + SLOT=$(ver_cut 1-2) + KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86" +fi + +# +# The cross-compile logic +# +export CTARGET=${CTARGET:-${CHOST}} +if [[ ${CTARGET} == ${CHOST} ]] ; then + if [[ ${CATEGORY} == cross-* ]] ; then + export CTARGET=${CATEGORY#cross-} + fi +fi +is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; } + +# +# The dependencies +# +RDEPEND=" + >=sys-devel/binutils-config-3 + sys-libs/zlib +" +DEPEND="${RDEPEND}" +BDEPEND=" + doc? ( sys-apps/texinfo ) + test? ( + dev-util/dejagnu + app-alternatives/bc + ) + nls? ( sys-devel/gettext ) + app-alternatives/lex + app-alternatives/yacc +" + +RESTRICT="!test? ( test )" + +MY_BUILDDIR=${WORKDIR}/build + +src_unpack() { + if [[ ${PV} == 9999* ]] ; then + EGIT_REPO_URI="https://anongit.gentoo.org/git/proj/toolchain/binutils-patches.git" + EGIT_CHECKOUT_DIR=${WORKDIR}/patches-git + git-r3_src_unpack + mv patches-git/9999 patch || die + + EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git" + S=${WORKDIR}/binutils + EGIT_CHECKOUT_DIR=${S} + git-r3_src_unpack + else + unpack ${P/-hppa64/}.tar.xz + + cd "${WORKDIR}" || die + unpack binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz + + # _p patch versions are Gentoo specific tarballs ... + local dir=${P%_p?} + dir=${dir/-hppa64/} + + S=${WORKDIR}/${dir} + fi + + cd "${WORKDIR}" || die + mkdir -p "${MY_BUILDDIR}" || die +} + +src_prepare() { + local patchsetname + if [[ ${PV} == 9999* ]] ; then + patchsetname="from git master" + else + patchsetname="${PATCH_BINUTILS_VER}-${PATCH_VER}" + fi + + if [[ -n ${PATCH_VER} ]] || [[ ${PV} == 9999* ]] ; then + if ! use vanilla; then + einfo "Applying binutils patchset ${patchsetname}" + eapply "${WORKDIR}/patch" + einfo "Done." + fi + fi + + # Make sure our explicit libdir paths don't get clobbered. #562460 + sed -i \ + -e 's:@bfdlibdir@:@libdir@:g' \ + -e 's:@bfdincludedir@:@includedir@:g' \ + {bfd,opcodes}/Makefile.in || die + + # Fix conflicts with newer glibc #272594 + if [[ -e libiberty/testsuite/test-demangle.c ]] ; then + sed -i 's:\:get_line:g' libiberty/testsuite/test-demangle.c + fi + + # Apply things from PATCHES and user dirs + default + + # Run misc portage update scripts + gnuconfig_update + elibtoolize --portage --no-uclibc +} + +toolchain-binutils_bugurl() { + printf "https://bugs.gentoo.org/" +} +toolchain-binutils_pkgversion() { + printf "Gentoo ${PV}" + [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}" +} + +src_configure() { + # Setup some paths + LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV} + INCPATH=${LIBPATH}/include + DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV} + if is_cross ; then + TOOLPATH=/usr/${CHOST}/${CTARGET} + else + TOOLPATH=/usr/${CTARGET} + fi + BINPATH=${TOOLPATH}/binutils-bin/${PV} + + # Make sure we filter $LINGUAS so that only ones that + # actually work make it through #42033 + strip-linguas -u */po + + # Keep things sane + strip-flags + + append-ldflags $(test-flags-CCLD -Wl,--undefined-version) + + use elibc_musl && append-ldflags -Wl,-z,stack-size=2097152 + + local x + echo + for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do + einfo "$(printf '%10s' ${x}:) ${!x}" + done + echo + + cd "${MY_BUILDDIR}" + local myconf=() + + if use plugins ; then + myconf+=( --enable-plugins ) + fi + # enable gold (installed as ld.gold) and ld's plugin architecture + if use gold ; then + myconf+=( --enable-gold ) + if use default-gold; then + myconf+=( --enable-gold=default ) + fi + fi + + if use nls ; then + myconf+=( --without-included-gettext ) + else + myconf+=( --disable-nls ) + fi + + myconf+=( --with-system-zlib ) + + # For bi-arch systems, enable a 64bit bfd. This matches + # the bi-arch logic in toolchain.eclass. #446946 + # We used to do it for everyone, but it's slow on 32bit arches. #438522 + case $(tc-arch) in + ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;; + esac + + use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd ) + + [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} ) + + is_cross && myconf+=( + --with-sysroot="${EPREFIX}"/usr/${CTARGET} + --enable-poison-system-directories + ) + + # glibc-2.3.6 lacks support for this ... so rather than force glibc-2.5+ + # on everyone in alpha (for now), we'll just enable it when possible + has_version ">=${CATEGORY}/glibc-2.5" && myconf+=( --enable-secureplt ) + has_version ">=sys-libs/glibc-2.5" && myconf+=( --enable-secureplt ) + + # mips can't do hash-style=gnu ... + if [[ $(tc-arch) != mips ]] ; then + myconf+=( --enable-default-hash-style=gnu ) + fi + + myconf+=( + --prefix="${EPREFIX}"/usr + --host=${CHOST} + --target=${CTARGET} + --datadir="${EPREFIX}"${DATAPATH} + --datarootdir="${EPREFIX}"${DATAPATH} + --infodir="${EPREFIX}"${DATAPATH}/info + --mandir="${EPREFIX}"${DATAPATH}/man + --bindir="${EPREFIX}"${BINPATH} + --libdir="${EPREFIX}"${LIBPATH} + --libexecdir="${EPREFIX}"${LIBPATH} + --includedir="${EPREFIX}"${INCPATH} + --enable-obsolete + --enable-shared + --enable-threads + # Newer versions (>=2.27) offer a configure flag now. + --enable-relro + # Newer versions (>=2.24) make this an explicit option. #497268 + --enable-install-libiberty + # Available from 2.35 on + --enable-textrel-check=warning + # Works better than vapier's patch... #808787 + --enable-new-dtags + --disable-werror + --with-bugurl="$(toolchain-binutils_bugurl)" + --with-pkgversion="$(toolchain-binutils_pkgversion)" + $(use_enable static-libs static) + ${EXTRA_ECONF} + # Disable modules that are in a combined binutils/gdb tree. #490566 + --disable-{gdb,libdecnumber,readline,sim} + # Strip out broken static link flags. + # https://gcc.gnu.org/PR56750 + --without-stage1-ldflags + # Change SONAME to avoid conflict across + # {native,cross}/binutils, binutils-libs. #666100 + --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st) + + # avoid automagic dependency on (currently prefix) systems + # systems with debuginfod library, bug #754753 + --without-debuginfod + + # Allow user to opt into CET for host libraries. + # Ideally we would like automagic-or-disabled here. + # But the check does not quite work on i686: bug #760926. + $(use_enable cet) + ) + + if ! is_cross ; then + myconf+=( $(use_enable pgo pgo-build lto) ) + + if use pgo ; then + export BUILD_CFLAGS="${CFLAGS}" + fi + fi + + echo ./configure "${myconf[@]}" + "${S}"/configure "${myconf[@]}" || die + + # Prevent makeinfo from running if doc is unset. + if ! use doc ; then + sed -i \ + -e '/^MAKEINFO/s:=.*:= true:' \ + Makefile || die + fi +} + +src_compile() { + cd "${MY_BUILDDIR}" + # see Note [tooldir hack for ldscripts] + emake tooldir="${EPREFIX}${TOOLPATH}" all + + # only build info pages if the user wants them + if use doc ; then + emake info + fi + + # we nuke the manpages when we're left with junk + # (like when we bootstrap, no perl -> no manpages) + find . -name '*.1' -a -size 0 -delete +} + +src_test() { + cd "${MY_BUILDDIR}" + + # https://sourceware.org/PR31327 + local -x XZ_OPT="-T1" + local -x XZ_DEFAULTS="-T1" + + # bug 637066 + filter-flags -Wall -Wreturn-type + + emake -k check +} + +src_install() { + local x d + + cd "${MY_BUILDDIR}" + # see Note [tooldir hack for ldscripts] + emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install + rm -rf "${ED}"/${LIBPATH}/bin + use static-libs || find "${ED}" -name '*.la' -delete + + # Newer versions of binutils get fancy with ${LIBPATH} #171905 + cd "${ED}"/${LIBPATH} + for d in ../* ; do + [[ ${d} == ../${PV} ]] && continue + mv ${d}/* . || die + rmdir ${d} || die + done + + # Now we collect everything intp the proper SLOT-ed dirs + # When something is built to cross-compile, it installs into + # /usr/$CHOST/ by default ... we have to 'fix' that :) + if is_cross ; then + cd "${ED}"/${BINPATH} + for x in * ; do + mv ${x} ${x/${CTARGET}-} + done + + if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then + mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH} + mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/usr/${CHOST}/{include,lib} + fi + fi + insinto ${INCPATH} + local libiberty_headers=( + # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir. + demangle.h + dyn-string.h + fibheap.h + hashtab.h + libiberty.h + objalloc.h + splay-tree.h + ) + doins "${libiberty_headers[@]/#/${S}/include/}" + if [[ -d ${ED}/${LIBPATH}/lib ]] ; then + mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/${LIBPATH}/lib + fi + + # Generate an env.d entry for this binutils + insinto /etc/env.d/binutils + cat <<-EOF > "${T}"/env.d + TARGET="${CTARGET}" + VER="${PV}" + LIBPATH="${EPREFIX}${LIBPATH}" + EOF + newins "${T}"/env.d ${CTARGET}-${PV} + + # Handle documentation + if ! is_cross ; then + cd "${S}" + dodoc README + docinto bfd + dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO + docinto binutils + dodoc binutils/ChangeLog binutils/NEWS binutils/README + docinto gas + dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README* + docinto gprof + dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl + docinto ld + dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO + docinto libiberty + dodoc libiberty/ChangeLog* libiberty/README + docinto opcodes + dodoc opcodes/ChangeLog* + fi + + # Remove shared info pages + rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info} + + # Trim all empty dirs + find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null +} + +pkg_postinst() { + # Make sure this ${CTARGET} has a binutils version selected + [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0 + binutils-config ${CTARGET}-${PV} +} + +pkg_postrm() { + local current_profile=$(binutils-config -c ${CTARGET}) + + # If no other versions exist, then uninstall for this + # target ... otherwise, switch to the newest version + # Note: only do this if this version is unmerged. We + # rerun binutils-config if this is a remerge, as + # we want the mtimes on the symlinks updated (if + # it is the same as the current selected profile) + if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then + local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}') + choice=${choice//$'\n'/ } + choice=${choice/* } + if [[ -z ${choice} ]] ; then + binutils-config -u ${CTARGET} + else + binutils-config ${choice} + fi + elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then + binutils-config ${CTARGET}-${PV} + fi +} + +# Note [slotting support] +# ----------------------- +# Gentoo's layout for binutils files is non-standard as Gentoo +# supports slotted installation for binutils. Many tools +# still expect binutils to reside in known locations. +# binutils-config package restores symlinks into known locations, +# like: +# /usr/bin/${CTARGET}- +# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips +# /usr/include/ +# +# Note [tooldir hack for ldscripts] +# --------------------------------- +# Build system does not allow ./configure to tweak every location +# we need for slotting binutils hence all the shuffling in +# src_install(). This note is about SCRIPTDIR define handling. +# +# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value +# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib' +# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time. +# Thus we can't just move files around after compilation finished. +# +# Our goal is the following: +# - at build-time set scriptdir to point to symlinked location: +# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case) +# - at install-time set scriptdir to point to slotted location: +# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV} diff --git a/sys-devel/binutils/binutils-2.38-r2.ebuild b/sys-devel/binutils/binutils-2.38-r2.ebuild new file mode 100644 index 0000000..c384b5f --- /dev/null +++ b/sys-devel/binutils/binutils-2.38-r2.ebuild @@ -0,0 +1,463 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit libtool flag-o-matic gnuconfig strip-linguas toolchain-funcs + +DESCRIPTION="Tools necessary to build programs" +HOMEPAGE="https://sourceware.org/binutils/" +LICENSE="GPL-3+" +IUSE="cet default-gold doc +gold multitarget +nls pgo +plugins static-libs test vanilla" +REQUIRED_USE="default-gold? ( gold )" + +# Variables that can be set here (ignored for live ebuilds) +# PATCH_VER - the patchset version +# Default: empty, no patching +# PATCH_BINUTILS_VER - the binutils version in the patchset name +# - Default: PV +# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/... +# for the patchsets + +PATCH_VER=4 +PATCH_DEV=dilfridge + +if [[ ${PV} == 9999* ]]; then + inherit git-r3 + SLOT=${PV} +else + PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}} + PATCH_DEV=${PATCH_DEV:-dilfridge} + SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PV}.tar.xz" + [[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI} + https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz" + SLOT=$(ver_cut 1-2) + KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86" +fi + +# +# The cross-compile logic +# +export CTARGET=${CTARGET:-${CHOST}} +if [[ ${CTARGET} == ${CHOST} ]] ; then + if [[ ${CATEGORY} == cross-* ]] ; then + export CTARGET=${CATEGORY#cross-} + fi +fi +is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; } + +# +# The dependencies +# +RDEPEND=" + >=sys-devel/binutils-config-3 + sys-libs/zlib +" +DEPEND="${RDEPEND}" +BDEPEND=" + doc? ( sys-apps/texinfo ) + test? ( + dev-util/dejagnu + app-alternatives/bc + ) + nls? ( sys-devel/gettext ) + app-alternatives/lex + app-alternatives/yacc +" + +RESTRICT="!test? ( test )" + +MY_BUILDDIR=${WORKDIR}/build + +src_unpack() { + if [[ ${PV} == 9999* ]] ; then + EGIT_REPO_URI="https://anongit.gentoo.org/git/proj/toolchain/binutils-patches.git" + EGIT_CHECKOUT_DIR=${WORKDIR}/patches-git + git-r3_src_unpack + mv patches-git/9999 patch || die + + EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git" + S=${WORKDIR}/binutils + EGIT_CHECKOUT_DIR=${S} + git-r3_src_unpack + else + unpack ${P/-hppa64/}.tar.xz + + cd "${WORKDIR}" || die + unpack binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz + + # _p patch versions are Gentoo specific tarballs ... + local dir=${P%_p?} + dir=${dir/-hppa64/} + + S=${WORKDIR}/${dir} + fi + + cd "${WORKDIR}" || die + mkdir -p "${MY_BUILDDIR}" || die +} + +src_prepare() { + local patchsetname + if [[ ${PV} == 9999* ]] ; then + patchsetname="from git master" + else + patchsetname="${PATCH_BINUTILS_VER}-${PATCH_VER}" + fi + + if [[ -n ${PATCH_VER} ]] || [[ ${PV} == 9999* ]] ; then + if ! use vanilla; then + einfo "Applying binutils patchset ${patchsetname}" + eapply "${WORKDIR}/patch" + einfo "Done." + fi + fi + + # Make sure our explicit libdir paths don't get clobbered. #562460 + sed -i \ + -e 's:@bfdlibdir@:@libdir@:g' \ + -e 's:@bfdincludedir@:@includedir@:g' \ + {bfd,opcodes}/Makefile.in || die + + # Fix conflicts with newer glibc #272594 + if [[ -e libiberty/testsuite/test-demangle.c ]] ; then + sed -i 's:\:get_line:g' libiberty/testsuite/test-demangle.c + fi + + # Apply things from PATCHES and user dirs + default + + # Run misc portage update scripts + gnuconfig_update + elibtoolize --portage --no-uclibc +} + +toolchain-binutils_bugurl() { + printf "https://bugs.gentoo.org/" +} +toolchain-binutils_pkgversion() { + printf "Gentoo ${PV}" + [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}" +} + +src_configure() { + # See https://www.gnu.org/software/make/manual/html_node/Parallel-Output.html + # Avoid really confusing logs from subconfigure spam, makes logs far + # more legible. + MAKEOPTS="--output-sync=line ${MAKEOPTS}" + + # Setup some paths + LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV} + INCPATH=${LIBPATH}/include + DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV} + if is_cross ; then + TOOLPATH=/usr/${CHOST}/${CTARGET} + else + TOOLPATH=/usr/${CTARGET} + fi + BINPATH=${TOOLPATH}/binutils-bin/${PV} + + # Make sure we filter $LINGUAS so that only ones that + # actually work make it through #42033 + strip-linguas -u */po + + # Keep things sane + strip-flags + + append-ldflags $(test-flags-CCLD -Wl,--undefined-version) + + use elibc_musl && append-ldflags -Wl,-z,stack-size=2097152 + + local x + echo + for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do + einfo "$(printf '%10s' ${x}:) ${!x}" + done + echo + + cd "${MY_BUILDDIR}" + local myconf=() + + if use plugins ; then + myconf+=( --enable-plugins ) + fi + # enable gold (installed as ld.gold) and ld's plugin architecture + if use gold ; then + myconf+=( --enable-gold ) + if use default-gold; then + myconf+=( --enable-gold=default ) + fi + fi + + if use nls ; then + myconf+=( --without-included-gettext ) + else + myconf+=( --disable-nls ) + fi + + myconf+=( --with-system-zlib ) + + # For bi-arch systems, enable a 64bit bfd. This matches + # the bi-arch logic in toolchain.eclass. #446946 + # We used to do it for everyone, but it's slow on 32bit arches. #438522 + case $(tc-arch) in + ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;; + esac + + use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd ) + + [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} ) + + is_cross && myconf+=( + --with-sysroot="${EPREFIX}"/usr/${CTARGET} + --enable-poison-system-directories + ) + + # glibc-2.3.6 lacks support for this ... so rather than force glibc-2.5+ + # on everyone in alpha (for now), we'll just enable it when possible + has_version ">=${CATEGORY}/glibc-2.5" && myconf+=( --enable-secureplt ) + has_version ">=sys-libs/glibc-2.5" && myconf+=( --enable-secureplt ) + + # mips can't do hash-style=gnu ... + if [[ $(tc-arch) != mips ]] ; then + myconf+=( --enable-default-hash-style=gnu ) + fi + + myconf+=( + # (--disable-silent-rules should get passed automatically w/ econf which we use + # in >= 2.39, so can drop it then.) + --disable-silent-rules + --prefix="${EPREFIX}"/usr + --host=${CHOST} + --target=${CTARGET} + --datadir="${EPREFIX}"${DATAPATH} + --datarootdir="${EPREFIX}"${DATAPATH} + --infodir="${EPREFIX}"${DATAPATH}/info + --mandir="${EPREFIX}"${DATAPATH}/man + --bindir="${EPREFIX}"${BINPATH} + --libdir="${EPREFIX}"${LIBPATH} + --libexecdir="${EPREFIX}"${LIBPATH} + --includedir="${EPREFIX}"${INCPATH} + --enable-obsolete + --enable-shared + --enable-threads + # Newer versions (>=2.27) offer a configure flag now. + --enable-relro + # Newer versions (>=2.24) make this an explicit option. #497268 + --enable-install-libiberty + # Available from 2.35 on + --enable-textrel-check=warning + # Works better than vapier's patch... #808787 + --enable-new-dtags + --disable-werror + --with-bugurl="$(toolchain-binutils_bugurl)" + --with-pkgversion="$(toolchain-binutils_pkgversion)" + $(use_enable static-libs static) + ${EXTRA_ECONF} + # Disable modules that are in a combined binutils/gdb tree. #490566 + --disable-{gdb,libdecnumber,readline,sim} + # Strip out broken static link flags. + # https://gcc.gnu.org/PR56750 + --without-stage1-ldflags + # Change SONAME to avoid conflict across + # {native,cross}/binutils, binutils-libs. #666100 + --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st) + + # avoid automagic dependency on (currently prefix) systems + # systems with debuginfod library, bug #754753 + --without-debuginfod + + # Allow user to opt into CET for host libraries. + # Ideally we would like automagic-or-disabled here. + # But the check does not quite work on i686: bug #760926. + $(use_enable cet) + ) + + if ! is_cross ; then + myconf+=( $(use_enable pgo pgo-build lto) ) + + if use pgo ; then + export BUILD_CFLAGS="${CFLAGS}" + fi + fi + + echo ./configure "${myconf[@]}" + "${S}"/configure "${myconf[@]}" || die + + # Prevent makeinfo from running if doc is unset. + if ! use doc ; then + sed -i \ + -e '/^MAKEINFO/s:=.*:= true:' \ + Makefile || die + fi +} + +src_compile() { + cd "${MY_BUILDDIR}" + # see Note [tooldir hack for ldscripts] + emake V=1 tooldir="${EPREFIX}${TOOLPATH}" all + + # only build info pages if the user wants them + if use doc ; then + emake V=1 info + fi + + # we nuke the manpages when we're left with junk + # (like when we bootstrap, no perl -> no manpages) + find . -name '*.1' -a -size 0 -delete +} + +src_test() { + cd "${MY_BUILDDIR}" + + # https://sourceware.org/PR31327 + local -x XZ_OPT="-T1" + local -x XZ_DEFAULTS="-T1" + + # bug 637066 + filter-flags -Wall -Wreturn-type + + emake -k V=1 check +} + +src_install() { + local x d + + cd "${MY_BUILDDIR}" + # see Note [tooldir hack for ldscripts] + emake V=1 DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install + rm -rf "${ED}"/${LIBPATH}/bin + use static-libs || find "${ED}" -name '*.la' -delete + + # Newer versions of binutils get fancy with ${LIBPATH} #171905 + cd "${ED}"/${LIBPATH} + for d in ../* ; do + [[ ${d} == ../${PV} ]] && continue + mv ${d}/* . || die + rmdir ${d} || die + done + + # Now we collect everything intp the proper SLOT-ed dirs + # When something is built to cross-compile, it installs into + # /usr/$CHOST/ by default ... we have to 'fix' that :) + if is_cross ; then + cd "${ED}"/${BINPATH} + for x in * ; do + mv ${x} ${x/${CTARGET}-} + done + + if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then + mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH} + mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/usr/${CHOST}/{include,lib} + fi + fi + insinto ${INCPATH} + local libiberty_headers=( + # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir. + demangle.h + dyn-string.h + fibheap.h + hashtab.h + libiberty.h + objalloc.h + splay-tree.h + ) + doins "${libiberty_headers[@]/#/${S}/include/}" + if [[ -d ${ED}/${LIBPATH}/lib ]] ; then + mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/${LIBPATH}/lib + fi + + # Generate an env.d entry for this binutils + insinto /etc/env.d/binutils + cat <<-EOF > "${T}"/env.d + TARGET="${CTARGET}" + VER="${PV}" + LIBPATH="${EPREFIX}${LIBPATH}" + EOF + newins "${T}"/env.d ${CTARGET}-${PV} + + # Handle documentation + if ! is_cross ; then + cd "${S}" + dodoc README + docinto bfd + dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO + docinto binutils + dodoc binutils/ChangeLog binutils/NEWS binutils/README + docinto gas + dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README* + docinto gprof + dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl + docinto ld + dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO + docinto libiberty + dodoc libiberty/ChangeLog* libiberty/README + docinto opcodes + dodoc opcodes/ChangeLog* + fi + + # Remove shared info pages + rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info} + + # Trim all empty dirs + find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null +} + +pkg_postinst() { + # Make sure this ${CTARGET} has a binutils version selected + [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0 + binutils-config ${CTARGET}-${PV} +} + +pkg_postrm() { + local current_profile=$(binutils-config -c ${CTARGET}) + + # If no other versions exist, then uninstall for this + # target ... otherwise, switch to the newest version + # Note: only do this if this version is unmerged. We + # rerun binutils-config if this is a remerge, as + # we want the mtimes on the symlinks updated (if + # it is the same as the current selected profile) + if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then + local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}') + choice=${choice//$'\n'/ } + choice=${choice/* } + if [[ -z ${choice} ]] ; then + binutils-config -u ${CTARGET} + else + binutils-config ${choice} + fi + elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then + binutils-config ${CTARGET}-${PV} + fi +} + +# Note [slotting support] +# ----------------------- +# Gentoo's layout for binutils files is non-standard as Gentoo +# supports slotted installation for binutils. Many tools +# still expect binutils to reside in known locations. +# binutils-config package restores symlinks into known locations, +# like: +# /usr/bin/${CTARGET}- +# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips +# /usr/include/ +# +# Note [tooldir hack for ldscripts] +# --------------------------------- +# Build system does not allow ./configure to tweak every location +# we need for slotting binutils hence all the shuffling in +# src_install(). This note is about SCRIPTDIR define handling. +# +# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value +# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib' +# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time. +# Thus we can't just move files around after compilation finished. +# +# Our goal is the following: +# - at build-time set scriptdir to point to symlinked location: +# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case) +# - at install-time set scriptdir to point to slotted location: +# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV} diff --git a/sys-devel/binutils/binutils-2.39-r5.ebuild b/sys-devel/binutils/binutils-2.39-r5.ebuild new file mode 100644 index 0000000..efeadfc --- /dev/null +++ b/sys-devel/binutils/binutils-2.39-r5.ebuild @@ -0,0 +1,487 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit libtool flag-o-matic gnuconfig strip-linguas toolchain-funcs + +DESCRIPTION="Tools necessary to build programs" +HOMEPAGE="https://sourceware.org/binutils/" + +LICENSE="GPL-3+" +IUSE="cet default-gold doc gold gprofng multitarget +nls pgo +plugins static-libs test vanilla" +REQUIRED_USE="default-gold? ( gold )" + +# Variables that can be set here (ignored for live ebuilds) +# PATCH_VER - the patchset version +# Default: empty, no patching +# PATCH_BINUTILS_VER - the binutils version in the patchset name +# - Default: PV +# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/... +# for the patchsets + +PATCH_VER=6 +PATCH_DEV=dilfridge + +if [[ ${PV} == 9999* ]]; then + inherit git-r3 + SLOT=${PV} +else + PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}} + PATCH_DEV=${PATCH_DEV:-dilfridge} + SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PV}.tar.xz" + [[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI} + https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz" + SLOT=$(ver_cut 1-2) + KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86" +fi + +# +# The cross-compile logic +# +export CTARGET=${CTARGET:-${CHOST}} +if [[ ${CTARGET} == ${CHOST} ]] ; then + if [[ ${CATEGORY} == cross-* ]] ; then + export CTARGET=${CATEGORY#cross-} + fi +fi +is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; } + +# +# The dependencies +# +RDEPEND=" + >=sys-devel/binutils-config-3 + sys-libs/zlib +" +DEPEND="${RDEPEND}" +BDEPEND=" + doc? ( sys-apps/texinfo ) + test? ( + dev-util/dejagnu + app-alternatives/bc + ) + nls? ( sys-devel/gettext ) + app-alternatives/lex + app-alternatives/yacc +" + +RESTRICT="!test? ( test )" + +MY_BUILDDIR=${WORKDIR}/build + +src_unpack() { + if [[ ${PV} == 9999* ]] ; then + EGIT_REPO_URI="https://anongit.gentoo.org/git/proj/toolchain/binutils-patches.git" + EGIT_CHECKOUT_DIR=${WORKDIR}/patches-git + git-r3_src_unpack + mv patches-git/9999 patch || die + + EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git" + S=${WORKDIR}/binutils + EGIT_CHECKOUT_DIR=${S} + git-r3_src_unpack + else + unpack ${P/-hppa64/}.tar.xz + + cd "${WORKDIR}" || die + unpack binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz + + # _p patch versions are Gentoo specific tarballs ... + local dir=${P%_p?} + dir=${dir/-hppa64/} + + S=${WORKDIR}/${dir} + fi + + cd "${WORKDIR}" || die + mkdir -p "${MY_BUILDDIR}" || die +} + +src_prepare() { + local patchsetname + if [[ ${PV} == 9999* ]] ; then + patchsetname="from git master" + else + patchsetname="${PATCH_BINUTILS_VER}-${PATCH_VER}" + fi + + if [[ -n ${PATCH_VER} ]] || [[ ${PV} == 9999* ]] ; then + if ! use vanilla; then + einfo "Applying binutils patchset ${patchsetname}" + eapply "${WORKDIR}/patch" + einfo "Done." + fi + fi + + # Make sure our explicit libdir paths don't get clobbered, bug #562460 + sed -i \ + -e 's:@bfdlibdir@:@libdir@:g' \ + -e 's:@bfdincludedir@:@includedir@:g' \ + {bfd,opcodes}/Makefile.in || die + + # Apply things from PATCHES and user dirs + default + + # Run misc portage update scripts + gnuconfig_update + elibtoolize --portage --no-uclibc +} + +toolchain-binutils_bugurl() { + printf "https://bugs.gentoo.org/" +} +toolchain-binutils_pkgversion() { + printf "Gentoo ${PV}" + [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}" +} + +src_configure() { + # See https://www.gnu.org/software/make/manual/html_node/Parallel-Output.html + # Avoid really confusing logs from subconfigure spam, makes logs far + # more legible. + MAKEOPTS="--output-sync=line ${MAKEOPTS}" + + # Setup some paths + LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV} + INCPATH=${LIBPATH}/include + DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV} + if is_cross ; then + TOOLPATH=/usr/${CHOST}/${CTARGET} + else + TOOLPATH=/usr/${CTARGET} + fi + BINPATH=${TOOLPATH}/binutils-bin/${PV} + + # Make sure we filter $LINGUAS so that only ones that + # actually work make it through, bug #42033 + strip-linguas -u */po + + # Keep things sane + strip-flags + + append-ldflags $(test-flags-CCLD -Wl,--undefined-version) + + use elibc_musl && append-ldflags -Wl,-z,stack-size=2097152 + + local x + echo + for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do + einfo "$(printf '%10s' ${x}:) ${!x}" + done + echo + + cd "${MY_BUILDDIR}" || die + local myconf=() + + if use plugins ; then + myconf+=( --enable-plugins ) + fi + # enable gold (installed as ld.gold) and ld's plugin architecture + if use gold ; then + myconf+=( --enable-gold ) + if use default-gold; then + myconf+=( --enable-gold=default ) + fi + fi + + if use nls ; then + myconf+=( --without-included-gettext ) + else + myconf+=( --disable-nls ) + fi + + myconf+=( --with-system-zlib ) + + # For bi-arch systems, enable a 64bit bfd. This matches the bi-arch + # logic in toolchain.eclass. bug #446946 + # + # We used to do it for everyone, but it's slow on 32bit arches. bug #438522 + case $(tc-arch) in + ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;; + esac + + use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd ) + + [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} ) + + is_cross && myconf+=( + --with-sysroot="${EPREFIX}"/usr/${CTARGET} + --enable-poison-system-directories + ) + + myconf+=( --enable-secureplt ) + + # mips can't do hash-style=gnu ... + if [[ $(tc-arch) != mips ]] ; then + myconf+=( --enable-default-hash-style=gnu ) + fi + + myconf+=( + --prefix="${EPREFIX}"/usr + --host=${CHOST} + --target=${CTARGET} + --datadir="${EPREFIX}"${DATAPATH} + --datarootdir="${EPREFIX}"${DATAPATH} + --infodir="${EPREFIX}"${DATAPATH}/info + --mandir="${EPREFIX}"${DATAPATH}/man + --bindir="${EPREFIX}"${BINPATH} + --libdir="${EPREFIX}"${LIBPATH} + --libexecdir="${EPREFIX}"${LIBPATH} + --includedir="${EPREFIX}"${INCPATH} + --enable-obsolete + --enable-shared + --enable-threads + # Newer versions (>=2.27) offer a configure flag now. + --enable-relro + # Newer versions (>=2.24) make this an explicit option, bug #497268 + --enable-install-libiberty + # Available from 2.35 on + --enable-textrel-check=warning + + # These hardening options are available from 2.39+ but + # they unconditionally enable the behaviour even on arches + # where e.g. execstacks can't be avoided. + # See https://sourceware.org/bugzilla/show_bug.cgi?id=29592. + #--enable-warn-execstack + #--enable-warn-rwx-segments + #--disable-default-execstack (or is it --enable-default-execstack=no? docs are confusing) + + # Things to think about + #--enable-deterministic-archives + + # Works better than vapier's patch, bug #808787 + --enable-new-dtags + + --disable-jansson + --disable-werror + --with-bugurl="$(toolchain-binutils_bugurl)" + --with-pkgversion="$(toolchain-binutils_pkgversion)" + $(use_enable static-libs static) + # Disable modules that are in a combined binutils/gdb tree, bug #490566 + --disable-{gdb,libdecnumber,readline,sim} + # Strip out broken static link flags. + # https://gcc.gnu.org/PR56750 + --without-stage1-ldflags + # Change SONAME to avoid conflict across + # {native,cross}/binutils, binutils-libs. bug #666100 + --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st) + + # Avoid automagic dependency on (currently prefix) systems + # systems with debuginfod library, bug #754753 + --without-debuginfod + + # Avoid automagic dev-libs/msgpack dep, bug #865875 + --without-msgpack + + # Allow user to opt into CET for host libraries. + # Ideally we would like automagic-or-disabled here. + # But the check does not quite work on i686: bug #760926. + $(use_enable cet) + + # We can enable this by default in future, but it's brand new + # in 2.39 with several bugs: + # - Doesn't build on musl (https://sourceware.org/bugzilla/show_bug.cgi?id=29477) + # - No man pages (https://sourceware.org/bugzilla/show_bug.cgi?id=29521) + # - Broken at runtime without Java (https://sourceware.org/bugzilla/show_bug.cgi?id=29479) + # - binutils-config (and this ebuild?) needs adaptation first (https://bugs.gentoo.org/865113) + $(use_enable gprofng) + ) + + if ! is_cross ; then + myconf+=( $(use_enable pgo pgo-build lto) ) + + if use pgo ; then + export BUILD_CFLAGS="${CFLAGS}" + fi + fi + + ECONF_SOURCE="${S}" econf "${myconf[@]}" || die + + # Prevent makeinfo from running if doc is unset. + if ! use doc ; then + sed -i \ + -e '/^MAKEINFO/s:=.*:= true:' \ + Makefile || die + fi +} + +src_compile() { + cd "${MY_BUILDDIR}" || die + + # see Note [tooldir hack for ldscripts] + emake V=1 tooldir="${EPREFIX}${TOOLPATH}" all + + # only build info pages if the user wants them + if use doc ; then + emake V=1 info + fi + + # we nuke the manpages when we're left with junk + # (like when we bootstrap, no perl -> no manpages) + find . -name '*.1' -a -size 0 -delete +} + +src_test() { + cd "${MY_BUILDDIR}" || die + + # https://sourceware.org/PR31327 + local -x XZ_OPT="-T1" + local -x XZ_DEFAULTS="-T1" + + # bug #637066 + filter-flags -Wall -Wreturn-type + + emake -k V=1 check +} + +src_install() { + local x d + + cd "${MY_BUILDDIR}" || die + + # see Note [tooldir hack for ldscripts] + emake V=1 DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install + rm -rf "${ED}"/${LIBPATH}/bin || die + use static-libs || find "${ED}" -name '*.la' -delete + + # Newer versions of binutils get fancy with ${LIBPATH}, bug #171905 + cd "${ED}"/${LIBPATH} || die + for d in ../* ; do + [[ ${d} == ../${PV} ]] && continue + mv ${d}/* . || die + rmdir ${d} || die + done + + # Now we collect everything intp the proper SLOT-ed dirs + # When something is built to cross-compile, it installs into + # /usr/$CHOST/ by default ... we have to 'fix' that :) + if is_cross ; then + cd "${ED}"/${BINPATH} || die + for x in * ; do + mv ${x} ${x/${CTARGET}-} || die + done + + if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then + mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH} + mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/usr/${CHOST}/{include,lib} + fi + fi + + insinto ${INCPATH} + local libiberty_headers=( + # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir. + demangle.h + dyn-string.h + fibheap.h + hashtab.h + libiberty.h + objalloc.h + splay-tree.h + ) + doins "${libiberty_headers[@]/#/${S}/include/}" + if [[ -d ${ED}/${LIBPATH}/lib ]] ; then + mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/ || die + rm -r "${ED}"/${LIBPATH}/lib || die + fi + + # Generate an env.d entry for this binutils + insinto /etc/env.d/binutils + cat <<-EOF > "${T}"/env.d + TARGET="${CTARGET}" + VER="${PV}" + LIBPATH="${EPREFIX}${LIBPATH}" + EOF + newins "${T}"/env.d ${CTARGET}-${PV} + + # Handle documentation + if ! is_cross ; then + cd "${S}" || die + dodoc README + + docinto bfd + dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO + + docinto binutils + dodoc binutils/ChangeLog binutils/NEWS binutils/README + + docinto gas + dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README* + + docinto gprof + dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl + + docinto ld + dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO + + docinto libiberty + dodoc libiberty/ChangeLog* libiberty/README + + docinto opcodes + dodoc opcodes/ChangeLog* + fi + + # Remove shared info pages + rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info} + + # Trim all empty dirs + find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null +} + +pkg_postinst() { + # Make sure this ${CTARGET} has a binutils version selected + [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0 + binutils-config ${CTARGET}-${PV} +} + +pkg_postrm() { + local current_profile=$(binutils-config -c ${CTARGET}) + + # If no other versions exist, then uninstall for this + # target ... otherwise, switch to the newest version + # Note: only do this if this version is unmerged. We + # rerun binutils-config if this is a remerge, as + # we want the mtimes on the symlinks updated (if + # it is the same as the current selected profile) + if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then + local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}') + choice=${choice//$'\n'/ } + choice=${choice/* } + if [[ -z ${choice} ]] ; then + binutils-config -u ${CTARGET} + else + binutils-config ${choice} + fi + elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then + binutils-config ${CTARGET}-${PV} + fi +} + +# Note [slotting support] +# ----------------------- +# Gentoo's layout for binutils files is non-standard as Gentoo +# supports slotted installation for binutils. Many tools +# still expect binutils to reside in known locations. +# binutils-config package restores symlinks into known locations, +# like: +# /usr/bin/${CTARGET}- +# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips +# /usr/include/ +# +# Note [tooldir hack for ldscripts] +# --------------------------------- +# Build system does not allow ./configure to tweak every location +# we need for slotting binutils hence all the shuffling in +# src_install(). This note is about SCRIPTDIR define handling. +# +# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value +# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib' +# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time. +# Thus we can't just move files around after compilation finished. +# +# Our goal is the following: +# - at build-time set scriptdir to point to symlinked location: +# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case) +# - at install-time set scriptdir to point to slotted location: +# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV} diff --git a/sys-devel/binutils/binutils-2.40-r9.ebuild b/sys-devel/binutils/binutils-2.40-r9.ebuild new file mode 100644 index 0000000..a8b13b5 --- /dev/null +++ b/sys-devel/binutils/binutils-2.40-r9.ebuild @@ -0,0 +1,499 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit libtool flag-o-matic gnuconfig strip-linguas toolchain-funcs + +DESCRIPTION="Tools necessary to build programs" +HOMEPAGE="https://sourceware.org/binutils/" + +LICENSE="GPL-3+" +IUSE="cet debuginfod doc gold gprofng multitarget +nls pgo +plugins static-libs test vanilla zstd" + +# Variables that can be set here (ignored for live ebuilds) +# PATCH_VER - the patchset version +# Default: empty, no patching +# PATCH_BINUTILS_VER - the binutils version in the patchset name +# - Default: PV +# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/... +# for the patchsets + +PATCH_VER=7 +PATCH_DEV=dilfridge + +if [[ ${PV} == 9999* ]]; then + inherit git-r3 + SLOT=${PV} +else + PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}} + PATCH_DEV=${PATCH_DEV:-dilfridge} + SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz https://sourceware.org/pub/binutils/releases/binutils-${PV}.tar.xz https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PV}.tar.xz" + [[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI} + https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz" + SLOT=$(ver_cut 1-2) + KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86" +fi + +# +# The cross-compile logic +# +export CTARGET=${CTARGET:-${CHOST}} +if [[ ${CTARGET} == ${CHOST} ]] ; then + if [[ ${CATEGORY} == cross-* ]] ; then + export CTARGET=${CATEGORY#cross-} + fi +fi +is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; } + +# +# The dependencies +# +RDEPEND=" + >=sys-devel/binutils-config-3 + sys-libs/zlib + debuginfod? ( + dev-libs/elfutils[debuginfod(-)] + ) + zstd? ( app-arch/zstd:= ) +" +DEPEND="${RDEPEND}" +BDEPEND=" + doc? ( sys-apps/texinfo ) + test? ( + dev-util/dejagnu + app-alternatives/bc + ) + nls? ( sys-devel/gettext ) + zstd? ( virtual/pkgconfig ) + app-alternatives/lex + app-alternatives/yacc +" + +RESTRICT="!test? ( test )" + +MY_BUILDDIR=${WORKDIR}/build + +src_unpack() { + if [[ ${PV} == 9999* ]] ; then + EGIT_REPO_URI="https://anongit.gentoo.org/git/proj/toolchain/binutils-patches.git" + EGIT_CHECKOUT_DIR=${WORKDIR}/patches-git + git-r3_src_unpack + mv patches-git/9999 patch || die + + EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git" + S=${WORKDIR}/binutils + EGIT_CHECKOUT_DIR=${S} + git-r3_src_unpack + else + unpack ${P/-hppa64/}.tar.xz + + cd "${WORKDIR}" || die + unpack binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz + + # _p patch versions are Gentoo specific tarballs ... + local dir=${P%_p?} + dir=${dir/-hppa64/} + + S=${WORKDIR}/${dir} + fi + + cd "${WORKDIR}" || die + mkdir -p "${MY_BUILDDIR}" || die +} + +src_prepare() { + local patchsetname + if [[ ${PV} == 9999* ]] ; then + patchsetname="from git master" + else + patchsetname="${PATCH_BINUTILS_VER}-${PATCH_VER}" + fi + + if [[ -n ${PATCH_VER} ]] || [[ ${PV} == 9999* ]] ; then + if ! use vanilla; then + einfo "Applying binutils patchset ${patchsetname}" + eapply "${WORKDIR}/patch" + einfo "Done." + + # This is applied conditionally for now just out of caution. + # It should be okay on non-prefix systems though. See bug #892549. + if is_cross || use prefix; then + eapply "${FILESDIR}"/binutils-2.40-linker-search-path.patch + fi + fi + fi + + # Make sure our explicit libdir paths don't get clobbered, bug #562460 + sed -i \ + -e 's:@bfdlibdir@:@libdir@:g' \ + -e 's:@bfdincludedir@:@includedir@:g' \ + {bfd,opcodes}/Makefile.in || die + + # Apply things from PATCHES and user dirs + default + + # Run misc portage update scripts + gnuconfig_update + elibtoolize --portage --no-uclibc +} + +toolchain-binutils_bugurl() { + printf "https://bugs.gentoo.org/" +} +toolchain-binutils_pkgversion() { + printf "Gentoo ${PV}" + [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}" +} + +src_configure() { + # See https://www.gnu.org/software/make/manual/html_node/Parallel-Output.html + # Avoid really confusing logs from subconfigure spam, makes logs far + # more legible. + MAKEOPTS="--output-sync=line ${MAKEOPTS}" + + # Setup some paths + LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV} + INCPATH=${LIBPATH}/include + DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV} + if is_cross ; then + TOOLPATH=/usr/${CHOST}/${CTARGET} + else + TOOLPATH=/usr/${CTARGET} + fi + BINPATH=${TOOLPATH}/binutils-bin/${PV} + + # Make sure we filter $LINGUAS so that only ones that + # actually work make it through, bug #42033 + strip-linguas -u */po + + # Keep things sane + strip-flags + use cet && filter-flags -mindirect-branch -mindirect-branch=* + use elibc_musl && append-ldflags -Wl,-z,stack-size=2097152 + + append-ldflags $(test-flags-CCLD -Wl,--undefined-version) + + local x + echo + for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do + einfo "$(printf '%10s' ${x}:) ${!x}" + done + echo + + cd "${MY_BUILDDIR}" || die + local myconf=() + + if use plugins ; then + myconf+=( --enable-plugins ) + fi + # enable gold (installed as ld.gold) and ld's plugin architecture + if use gold ; then + myconf+=( --enable-gold ) + fi + + if use nls ; then + myconf+=( --without-included-gettext ) + else + myconf+=( --disable-nls ) + fi + + myconf+=( --with-system-zlib ) + + # For bi-arch systems, enable a 64bit bfd. This matches the bi-arch + # logic in toolchain.eclass. bug #446946 + # + # We used to do it for everyone, but it's slow on 32bit arches. bug #438522 + case $(tc-arch) in + ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;; + esac + + use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd ) + + [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} ) + + is_cross && myconf+=( + --with-sysroot="${EPREFIX}"/usr/${CTARGET} + --enable-poison-system-directories + ) + + myconf+=( --enable-secureplt ) + + # mips can't do hash-style=gnu ... + if [[ $(tc-arch) != mips ]] ; then + myconf+=( --enable-default-hash-style=gnu ) + fi + + myconf+=( + --prefix="${EPREFIX}"/usr + --host=${CHOST} + --target=${CTARGET} + --datadir="${EPREFIX}"${DATAPATH} + --datarootdir="${EPREFIX}"${DATAPATH} + --infodir="${EPREFIX}"${DATAPATH}/info + --mandir="${EPREFIX}"${DATAPATH}/man + --bindir="${EPREFIX}"${BINPATH} + --libdir="${EPREFIX}"${LIBPATH} + --libexecdir="${EPREFIX}"${LIBPATH} + --includedir="${EPREFIX}"${INCPATH} + # portage's econf() does not detect presence of --d-d-t + # because it greps only top-level ./configure. But not + # libiberty's or bfd's configure. + --disable-dependency-tracking + --disable-silent-rules + --enable-obsolete + --enable-shared + --enable-threads + # Newer versions (>=2.27) offer a configure flag now. + --enable-relro + # Newer versions (>=2.24) make this an explicit option, bug #497268 + --enable-install-libiberty + # Available from 2.35 on + --enable-textrel-check=warning + + # These hardening options are available from 2.39+ but + # they unconditionally enable the behaviour even on arches + # where e.g. execstacks can't be avoided. + # See https://sourceware.org/bugzilla/show_bug.cgi?id=29592. + #--enable-warn-execstack + #--enable-warn-rwx-segments + #--disable-default-execstack (or is it --enable-default-execstack=no? docs are confusing) + + # Things to think about + #--enable-deterministic-archives + + # Works better than vapier's patch, bug #808787 + --enable-new-dtags + + --disable-jansson + --disable-werror + --with-bugurl="$(toolchain-binutils_bugurl)" + --with-pkgversion="$(toolchain-binutils_pkgversion)" + $(use_enable static-libs static) + $(use_with zstd) + + # Disable modules that are in a combined binutils/gdb tree, bug #490566 + --disable-{gdb,libdecnumber,readline,sim} + # Strip out broken static link flags. + # https://gcc.gnu.org/PR56750 + --without-stage1-ldflags + # Change SONAME to avoid conflict across + # {native,cross}/binutils, binutils-libs. bug #666100 + --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st) + + $(use_with debuginfod) + + # Avoid automagic dev-libs/msgpack dep, bug #865875 + --without-msgpack + + # Allow user to opt into CET for host libraries. + # Ideally we would like automagic-or-disabled here. + # But the check does not quite work on i686: bug #760926. + $(use_enable cet) + + # We can enable this by default in future, but it's brand new + # in 2.39 with several bugs: + # - Doesn't build on musl (https://sourceware.org/bugzilla/show_bug.cgi?id=29477) + # - No man pages (https://sourceware.org/bugzilla/show_bug.cgi?id=29521) + # - Broken at runtime without Java (https://sourceware.org/bugzilla/show_bug.cgi?id=29479) + # - binutils-config (and this ebuild?) needs adaptation first (https://bugs.gentoo.org/865113) + $(use_enable gprofng) + ) + + if ! is_cross ; then + myconf+=( $(use_enable pgo pgo-build lto) ) + + if use pgo ; then + export BUILD_CFLAGS="${CFLAGS}" + fi + fi + + ECONF_SOURCE="${S}" econf "${myconf[@]}" || die + + # Prevent makeinfo from running if doc is unset. + if ! use doc ; then + sed -i \ + -e '/^MAKEINFO/s:=.*:= true:' \ + Makefile || die + fi +} + +src_compile() { + cd "${MY_BUILDDIR}" || die + + # see Note [tooldir hack for ldscripts] + emake tooldir="${EPREFIX}${TOOLPATH}" all + + # only build info pages if the user wants them + if use doc ; then + emake info + fi + + # we nuke the manpages when we're left with junk + # (like when we bootstrap, no perl -> no manpages) + find . -name '*.1' -a -size 0 -delete +} + +src_test() { + cd "${MY_BUILDDIR}" || die + + # https://sourceware.org/PR31327 + local -x XZ_OPT="-T1" + local -x XZ_DEFAULTS="-T1" + + # bug #637066 + filter-flags -Wall -Wreturn-type + + emake -k check +} + +src_install() { + local x d + + cd "${MY_BUILDDIR}" || die + + # see Note [tooldir hack for ldscripts] + emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install + rm -rf "${ED}"/${LIBPATH}/bin || die + use static-libs || find "${ED}" -name '*.la' -delete + + # Newer versions of binutils get fancy with ${LIBPATH}, bug #171905 + cd "${ED}"/${LIBPATH} || die + for d in ../* ; do + [[ ${d} == ../${PV} ]] && continue + mv ${d}/* . || die + rmdir ${d} || die + done + + # Now we collect everything intp the proper SLOT-ed dirs + # When something is built to cross-compile, it installs into + # /usr/$CHOST/ by default ... we have to 'fix' that :) + if is_cross ; then + cd "${ED}"/${BINPATH} || die + for x in * ; do + mv ${x} ${x/${CTARGET}-} || die + done + + if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then + mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH} + mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/usr/${CHOST}/{include,lib} + fi + fi + + insinto ${INCPATH} + local libiberty_headers=( + # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir. + demangle.h + dyn-string.h + fibheap.h + hashtab.h + libiberty.h + objalloc.h + splay-tree.h + ) + doins "${libiberty_headers[@]/#/${S}/include/}" + if [[ -d ${ED}/${LIBPATH}/lib ]] ; then + mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/ || die + rm -r "${ED}"/${LIBPATH}/lib || die + fi + + # Generate an env.d entry for this binutils + insinto /etc/env.d/binutils + cat <<-EOF > "${T}"/env.d + TARGET="${CTARGET}" + VER="${PV}" + LIBPATH="${EPREFIX}${LIBPATH}" + EOF + newins "${T}"/env.d ${CTARGET}-${PV} + + # Handle documentation + if ! is_cross ; then + cd "${S}" || die + dodoc README + + docinto bfd + dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO + + docinto binutils + dodoc binutils/ChangeLog binutils/NEWS binutils/README + + docinto gas + dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README* + + docinto gprof + dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl + + docinto ld + dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO + + docinto libiberty + dodoc libiberty/ChangeLog* libiberty/README + + docinto opcodes + dodoc opcodes/ChangeLog* + fi + + # Remove shared info pages + rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info} + + # Trim all empty dirs + find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null +} + +pkg_postinst() { + # Make sure this ${CTARGET} has a binutils version selected + [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0 + binutils-config ${CTARGET}-${PV} +} + +pkg_postrm() { + local current_profile=$(binutils-config -c ${CTARGET}) + + # If no other versions exist, then uninstall for this + # target ... otherwise, switch to the newest version + # Note: only do this if this version is unmerged. We + # rerun binutils-config if this is a remerge, as + # we want the mtimes on the symlinks updated (if + # it is the same as the current selected profile) + if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then + local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}') + choice=${choice//$'\n'/ } + choice=${choice/* } + if [[ -z ${choice} ]] ; then + binutils-config -u ${CTARGET} + else + binutils-config ${choice} + fi + elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then + binutils-config ${CTARGET}-${PV} + fi +} + +# Note [slotting support] +# ----------------------- +# Gentoo's layout for binutils files is non-standard as Gentoo +# supports slotted installation for binutils. Many tools +# still expect binutils to reside in known locations. +# binutils-config package restores symlinks into known locations, +# like: +# /usr/bin/${CTARGET}- +# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips +# /usr/include/ +# +# Note [tooldir hack for ldscripts] +# --------------------------------- +# Build system does not allow ./configure to tweak every location +# we need for slotting binutils hence all the shuffling in +# src_install(). This note is about SCRIPTDIR define handling. +# +# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value +# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib' +# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time. +# Thus we can't just move files around after compilation finished. +# +# Our goal is the following: +# - at build-time set scriptdir to point to symlinked location: +# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case) +# - at install-time set scriptdir to point to slotted location: +# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV} diff --git a/sys-devel/binutils/binutils-2.41-r5.ebuild b/sys-devel/binutils/binutils-2.41-r5.ebuild new file mode 100644 index 0000000..219a22b --- /dev/null +++ b/sys-devel/binutils/binutils-2.41-r5.ebuild @@ -0,0 +1,524 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit libtool flag-o-matic gnuconfig strip-linguas toolchain-funcs + +DESCRIPTION="Tools necessary to build programs" +HOMEPAGE="https://sourceware.org/binutils/" + +LICENSE="GPL-3+" +IUSE="cet debuginfod doc gold gprofng hardened multitarget +nls pgo +plugins static-libs test vanilla zstd" + +# Variables that can be set here (ignored for live ebuilds) +# PATCH_VER - the patchset version +# Default: empty, no patching +# PATCH_BINUTILS_VER - the binutils version in the patchset name +# - Default: PV +# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/... +# for the patchsets + +PATCH_VER=5 +PATCH_DEV=dilfridge + +if [[ ${PV} == 9999* ]]; then + inherit git-r3 + SLOT=${PV} +else + PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}} + PATCH_DEV=${PATCH_DEV:-dilfridge} + SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz https://sourceware.org/pub/binutils/releases/binutils-${PV}.tar.xz https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PV}.tar.xz" + [[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI} + https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz" + SLOT=$(ver_cut 1-2) + KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86" +fi + +# +# The cross-compile logic +# +export CTARGET=${CTARGET:-${CHOST}} +if [[ ${CTARGET} == ${CHOST} ]] ; then + if [[ ${CATEGORY} == cross-* ]] ; then + export CTARGET=${CATEGORY#cross-} + fi +fi +is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; } + +# +# The dependencies +# +RDEPEND=" + >=sys-devel/binutils-config-3 + sys-libs/zlib + debuginfod? ( + dev-libs/elfutils[debuginfod(-)] + ) + zstd? ( app-arch/zstd:= ) +" +DEPEND="${RDEPEND}" +BDEPEND=" + doc? ( sys-apps/texinfo ) + test? ( + dev-util/dejagnu + app-alternatives/bc + ) + nls? ( sys-devel/gettext ) + zstd? ( virtual/pkgconfig ) + app-alternatives/lex + app-alternatives/yacc +" + +RESTRICT="!test? ( test )" + +MY_BUILDDIR=${WORKDIR}/build + +src_unpack() { + if [[ ${PV} == 9999* ]] ; then + EGIT_REPO_URI="https://anongit.gentoo.org/git/proj/toolchain/binutils-patches.git" + EGIT_CHECKOUT_DIR=${WORKDIR}/patches-git + git-r3_src_unpack + mv patches-git/9999 patch || die + + EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git" + S=${WORKDIR}/binutils + EGIT_CHECKOUT_DIR=${S} + git-r3_src_unpack + else + unpack ${P/-hppa64/}.tar.xz + + cd "${WORKDIR}" || die + unpack binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz + + # _p patch versions are Gentoo specific tarballs ... + local dir=${P%_p?} + dir=${dir/-hppa64/} + + S=${WORKDIR}/${dir} + fi + + cd "${WORKDIR}" || die + mkdir -p "${MY_BUILDDIR}" || die +} + +src_prepare() { + local patchsetname + if [[ ${PV} == 9999* ]] ; then + patchsetname="from git master" + else + patchsetname="${PATCH_BINUTILS_VER}-${PATCH_VER}" + fi + + if [[ -n ${PATCH_VER} ]] || [[ ${PV} == 9999* ]] ; then + if ! use vanilla; then + einfo "Applying binutils patchset ${patchsetname}" + eapply "${WORKDIR}/patch" + einfo "Done." + + # This is applied conditionally for now just out of caution. + # It should be okay on non-prefix systems though. See bug #892549. + if is_cross || use prefix; then + eapply "${FILESDIR}"/binutils-2.40-linker-search-path.patch \ + "${FILESDIR}"/binutils-2.41-linker-prefix.patch + fi + fi + fi + + # Make sure our explicit libdir paths don't get clobbered, bug #562460 + sed -i \ + -e 's:@bfdlibdir@:@libdir@:g' \ + -e 's:@bfdincludedir@:@includedir@:g' \ + {bfd,opcodes}/Makefile.in || die + + # Apply things from PATCHES and user dirs + default + + # Run misc portage update scripts + gnuconfig_update + elibtoolize --portage --no-uclibc +} + +toolchain-binutils_bugurl() { + printf "https://bugs.gentoo.org/" +} +toolchain-binutils_pkgversion() { + printf "Gentoo ${PV}" + [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}" +} + +src_configure() { + # See https://www.gnu.org/software/make/manual/html_node/Parallel-Output.html + # Avoid really confusing logs from subconfigure spam, makes logs far + # more legible. + MAKEOPTS="--output-sync=line ${MAKEOPTS}" + + # Setup some paths + LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV} + INCPATH=${LIBPATH}/include + DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV} + if is_cross ; then + TOOLPATH=/usr/${CHOST}/${CTARGET} + else + TOOLPATH=/usr/${CTARGET} + fi + BINPATH=${TOOLPATH}/binutils-bin/${PV} + + # Make sure we filter $LINGUAS so that only ones that + # actually work make it through, bug #42033 + strip-linguas -u */po + + # Keep things sane + strip-flags + use cet && filter-flags -mindirect-branch -mindirect-branch=* + use elibc_musl && append-ldflags -Wl,-z,stack-size=2097152 + + append-ldflags $(test-flags-CCLD -Wl,--undefined-version) + + local x + echo + for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do + einfo "$(printf '%10s' ${x}:) ${!x}" + done + echo + + cd "${MY_BUILDDIR}" || die + local myconf=() + + if use plugins ; then + myconf+=( --enable-plugins ) + fi + # enable gold (installed as ld.gold) and ld's plugin architecture + if use gold ; then + myconf+=( --enable-gold ) + fi + + if use nls ; then + myconf+=( --without-included-gettext ) + else + myconf+=( --disable-nls ) + fi + + myconf+=( --with-system-zlib ) + + # For bi-arch systems, enable a 64bit bfd. This matches the bi-arch + # logic in toolchain.eclass. bug #446946 + # + # We used to do it for everyone, but it's slow on 32bit arches. bug #438522 + case $(tc-arch) in + ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;; + esac + + use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd ) + + [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} ) + + is_cross && myconf+=( + --with-sysroot="${EPREFIX}"/usr/${CTARGET} + --enable-poison-system-directories + ) + + myconf+=( --enable-secureplt ) + + # mips can't do hash-style=gnu ... + if [[ $(tc-arch) != mips ]] ; then + myconf+=( --enable-default-hash-style=gnu ) + fi + + myconf+=( + --prefix="${EPREFIX}"/usr + --host=${CHOST} + --target=${CTARGET} + --datadir="${EPREFIX}"${DATAPATH} + --datarootdir="${EPREFIX}"${DATAPATH} + --infodir="${EPREFIX}"${DATAPATH}/info + --mandir="${EPREFIX}"${DATAPATH}/man + --bindir="${EPREFIX}"${BINPATH} + --libdir="${EPREFIX}"${LIBPATH} + --libexecdir="${EPREFIX}"${LIBPATH} + --includedir="${EPREFIX}"${INCPATH} + # portage's econf() does not detect presence of --d-d-t + # because it greps only top-level ./configure. But not + # libiberty's or bfd's configure. + --disable-dependency-tracking + --disable-silent-rules + --enable-obsolete + --enable-shared + --enable-threads + --enable-relro + --enable-install-libiberty + --enable-textrel-check=$(usex hardened error warning) + # Things to think about + #--enable-deterministic-archives + --enable-new-dtags + --disable-jansson + --disable-werror + --with-bugurl="$(toolchain-binutils_bugurl)" + --with-pkgversion="$(toolchain-binutils_pkgversion)" + $(use_enable static-libs static) + $(use_with zstd) + + # Disable modules that are in a combined binutils/gdb tree, bug #490566 + --disable-{gdb,libdecnumber,readline,sim} + # Strip out broken static link flags: https://gcc.gnu.org/PR56750 + --without-stage1-ldflags + # Change SONAME to avoid conflict across {native,cross}/binutils, binutils-libs. bug #666100 + --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st) + + $(use_with debuginfod) + + # Avoid automagic dev-libs/msgpack dep, bug #865875 + --without-msgpack + + # Allow user to opt into CET for host libraries. + # Ideally we would like automagic-or-disabled here. + # But the check does not quite work on i686: bug #760926. + $(use_enable cet) + + # We can enable this by default in future, but it's brand new + # in 2.39 with several bugs: + # - Doesn't build on musl (https://sourceware.org/bugzilla/show_bug.cgi?id=29477) + # - No man pages (https://sourceware.org/bugzilla/show_bug.cgi?id=29521) + # - Broken at runtime without Java (https://sourceware.org/bugzilla/show_bug.cgi?id=29479) + # - binutils-config (and this ebuild?) needs adaptation first (https://bugs.gentoo.org/865113) + $(use_enable gprofng) + ) + + case ${CTARGET} in + x86_64-*|aarch64*|arm64*|i[3456]*) + # These hardening options are available from 2.39+ but + # they unconditionally enable the behaviour even on arches + # where e.g. execstacks can't be avoided. + # See https://sourceware.org/bugzilla/show_bug.cgi?id=29592. + # + # TODO: Get the logic for this fixed upstream so it doesn't + # create impossible broken combinations on some arches, like mips. + # + # TODO: Get the logic for this fixed upstream so --disable-* works + # as expected. + myconf+=( + --enable-warn-execstack=yes + --enable-warn-rwx-segments=yes + ) + + if use hardened ; then + myconf+=( + --enable-default-execstack=no + ) + fi + ;; + *) + ;; + esac + + if use elibc_musl ; then + # Override our earlier setting for musl, as textrels don't + # work there at all. See bug #707660. + myconf+=( + --enable-textrel-check=error + ) + fi + + if ! is_cross ; then + myconf+=( $(use_enable pgo pgo-build lto) ) + + if use pgo ; then + export BUILD_CFLAGS="${CFLAGS}" + fi + fi + + ECONF_SOURCE="${S}" econf "${myconf[@]}" + + # Prevent makeinfo from running if doc is unset. + if ! use doc ; then + sed -i \ + -e '/^MAKEINFO/s:=.*:= true:' \ + Makefile || die + fi +} + +src_compile() { + cd "${MY_BUILDDIR}" || die + + # see Note [tooldir hack for ldscripts] + # see linker prefix patch + emake \ + tooldir="${EPREFIX}${TOOLPATH}" \ + gentoo_prefix=$(usex prefix-guest "${EPREFIX}"/usr /usr) \ + all + + # only build info pages if the user wants them + if use doc ; then + emake info + fi + + # we nuke the manpages when we're left with junk + # (like when we bootstrap, no perl -> no manpages) + find . -name '*.1' -a -size 0 -delete +} + +src_test() { + cd "${MY_BUILDDIR}" || die + + # https://sourceware.org/PR31327 + local -x XZ_OPT="-T1" + local -x XZ_DEFAULTS="-T1" + + # bug #637066 + filter-flags -Wall -Wreturn-type + + emake -k check +} + +src_install() { + local x d + + cd "${MY_BUILDDIR}" || die + + # see Note [tooldir hack for ldscripts] + emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install + rm -rf "${ED}"/${LIBPATH}/bin || die + use static-libs || find "${ED}" -name '*.la' -delete + + # Newer versions of binutils get fancy with ${LIBPATH}, bug #171905 + cd "${ED}"/${LIBPATH} || die + for d in ../* ; do + [[ ${d} == ../${PV} ]] && continue + mv ${d}/* . || die + rmdir ${d} || die + done + + # Now we collect everything intp the proper SLOT-ed dirs + # When something is built to cross-compile, it installs into + # /usr/$CHOST/ by default ... we have to 'fix' that :) + if is_cross ; then + cd "${ED}"/${BINPATH} || die + for x in * ; do + mv ${x} ${x/${CTARGET}-} || die + done + + if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then + mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH} + mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/usr/${CHOST}/{include,lib} + fi + fi + + insinto ${INCPATH} + local libiberty_headers=( + # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir. + demangle.h + dyn-string.h + fibheap.h + hashtab.h + libiberty.h + objalloc.h + splay-tree.h + ) + doins "${libiberty_headers[@]/#/${S}/include/}" + if [[ -d ${ED}/${LIBPATH}/lib ]] ; then + mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/ || die + rm -r "${ED}"/${LIBPATH}/lib || die + fi + + # Generate an env.d entry for this binutils + insinto /etc/env.d/binutils + cat <<-EOF > "${T}"/env.d + TARGET="${CTARGET}" + VER="${PV}" + LIBPATH="${EPREFIX}${LIBPATH}" + EOF + newins "${T}"/env.d ${CTARGET}-${PV} + + # Handle documentation + if ! is_cross ; then + cd "${S}" || die + dodoc README + + docinto bfd + dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO + + docinto binutils + dodoc binutils/ChangeLog binutils/NEWS binutils/README + + docinto gas + dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README* + + docinto gprof + dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl + + docinto ld + dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO + + docinto libiberty + dodoc libiberty/ChangeLog* libiberty/README + + docinto opcodes + dodoc opcodes/ChangeLog* + fi + + # Remove shared info pages + rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info} + + docompress "${DATAPATH}"/{info,man} + + # Trim all empty dirs + find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null +} + +pkg_postinst() { + # Make sure this ${CTARGET} has a binutils version selected + [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0 + binutils-config ${CTARGET}-${PV} +} + +pkg_postrm() { + local current_profile=$(binutils-config -c ${CTARGET}) + + # If no other versions exist, then uninstall for this + # target ... otherwise, switch to the newest version + # Note: only do this if this version is unmerged. We + # rerun binutils-config if this is a remerge, as + # we want the mtimes on the symlinks updated (if + # it is the same as the current selected profile) + if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then + local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}') + choice=${choice//$'\n'/ } + choice=${choice/* } + if [[ -z ${choice} ]] ; then + binutils-config -u ${CTARGET} + else + binutils-config ${choice} + fi + elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then + binutils-config ${CTARGET}-${PV} + fi +} + +# Note [slotting support] +# ----------------------- +# Gentoo's layout for binutils files is non-standard as Gentoo +# supports slotted installation for binutils. Many tools +# still expect binutils to reside in known locations. +# binutils-config package restores symlinks into known locations, +# like: +# /usr/bin/${CTARGET}- +# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips +# /usr/include/ +# +# Note [tooldir hack for ldscripts] +# --------------------------------- +# Build system does not allow ./configure to tweak every location +# we need for slotting binutils hence all the shuffling in +# src_install(). This note is about SCRIPTDIR define handling. +# +# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value +# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib' +# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time. +# Thus we can't just move files around after compilation finished. +# +# Our goal is the following: +# - at build-time set scriptdir to point to symlinked location: +# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case) +# - at install-time set scriptdir to point to slotted location: +# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV} diff --git a/sys-devel/binutils/binutils-2.42-r1.ebuild b/sys-devel/binutils/binutils-2.42-r1.ebuild new file mode 100644 index 0000000..6035c39 --- /dev/null +++ b/sys-devel/binutils/binutils-2.42-r1.ebuild @@ -0,0 +1,555 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit libtool flag-o-matic gnuconfig strip-linguas toolchain-funcs + +DESCRIPTION="Tools necessary to build programs" +HOMEPAGE="https://sourceware.org/binutils/" + +LICENSE="GPL-3+" +IUSE="cet debuginfod doc gold gprofng hardened multitarget +nls pgo +plugins static-libs test vanilla zstd" + +# Variables that can be set here (ignored for live ebuilds) +# PATCH_VER - the patchset version +# Default: empty, no patching +# PATCH_BINUTILS_VER - the binutils version in the patchset name +# - Default: PV +# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/... +# for the patchsets + +PATCH_VER=3 +PATCH_DEV=dilfridge + +if [[ ${PV} == 9999* ]]; then + inherit git-r3 + SLOT=${PV} +else + PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}} + PATCH_DEV=${PATCH_DEV:-dilfridge} + SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz https://sourceware.org/pub/binutils/releases/binutils-${PV}.tar.xz https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PV}.tar.xz" + [[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI} + https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz" + SLOT=$(ver_cut 1-2) + KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86" +fi + +# +# The cross-compile logic +# +export CTARGET=${CTARGET:-${CHOST}} +if [[ ${CTARGET} == ${CHOST} ]] ; then + if [[ ${CATEGORY} == cross-* ]] ; then + export CTARGET=${CATEGORY#cross-} + fi +fi +is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; } + +# +# The dependencies +# +RDEPEND=" + >=sys-devel/binutils-config-3 + sys-libs/zlib + debuginfod? ( + dev-libs/elfutils[debuginfod(-)] + ) + zstd? ( app-arch/zstd:= ) +" +DEPEND="${RDEPEND}" +BDEPEND=" + doc? ( sys-apps/texinfo ) + pgo? ( + dev-util/dejagnu + app-alternatives/bc + ) + test? ( + dev-util/dejagnu + app-alternatives/bc + ) + nls? ( sys-devel/gettext ) + zstd? ( virtual/pkgconfig ) + app-alternatives/lex + app-alternatives/yacc +" + +RESTRICT="!test? ( test )" + +MY_BUILDDIR=${WORKDIR}/build + +src_unpack() { + if [[ ${PV} == 9999* ]] ; then + EGIT_REPO_URI="https://anongit.gentoo.org/git/proj/toolchain/binutils-patches.git" + EGIT_CHECKOUT_DIR=${WORKDIR}/patches-git + git-r3_src_unpack + mv patches-git/9999 patch || die + + EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git" + S=${WORKDIR}/binutils + EGIT_CHECKOUT_DIR=${S} + git-r3_src_unpack + else + unpack ${P/-hppa64/}.tar.xz + + cd "${WORKDIR}" || die + unpack binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz + + # _p patch versions are Gentoo specific tarballs ... + local dir=${P%_p?} + dir=${dir/-hppa64/} + + S=${WORKDIR}/${dir} + fi + + cd "${WORKDIR}" || die + mkdir -p "${MY_BUILDDIR}" || die +} + +src_prepare() { + local patchsetname + if [[ ${PV} == 9999* ]] ; then + patchsetname="from git master" + else + patchsetname="${PATCH_BINUTILS_VER}-${PATCH_VER}" + fi + + if [[ -n ${PATCH_VER} ]] || [[ ${PV} == 9999* ]] ; then + if ! use vanilla; then + einfo "Applying binutils patchset ${patchsetname}" + eapply "${WORKDIR}/patch" + einfo "Done." + + # This is applied conditionally for now just out of caution. + # It should be okay on non-prefix systems though. See bug #892549. + if is_cross || use prefix; then + eapply "${FILESDIR}"/binutils-2.40-linker-search-path.patch \ + "${FILESDIR}"/binutils-2.41-linker-prefix.patch + fi + fi + fi + + # Make sure our explicit libdir paths don't get clobbered, bug #562460 + sed -i \ + -e 's:@bfdlibdir@:@libdir@:g' \ + -e 's:@bfdincludedir@:@includedir@:g' \ + {bfd,opcodes}/Makefile.in || die + + # Apply things from PATCHES and user dirs + default + + # Run misc portage update scripts + gnuconfig_update + elibtoolize --portage --no-uclibc +} + +toolchain-binutils_bugurl() { + printf "https://bugs.gentoo.org/" +} +toolchain-binutils_pkgversion() { + printf "Gentoo ${PV}" + [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}" +} + +src_configure() { + # See https://www.gnu.org/software/make/manual/html_node/Parallel-Output.html + # Avoid really confusing logs from subconfigure spam, makes logs far + # more legible. + MAKEOPTS="--output-sync=line ${MAKEOPTS}" + + # Setup some paths + LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV} + INCPATH=${LIBPATH}/include + DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV} + if is_cross ; then + TOOLPATH=/usr/${CHOST}/${CTARGET} + else + TOOLPATH=/usr/${CTARGET} + fi + BINPATH=${TOOLPATH}/binutils-bin/${PV} + + # Make sure we filter $LINGUAS so that only ones that + # actually work make it through, bug #42033 + strip-linguas -u */po + + # Keep things sane + strip-flags + use cet && filter-flags -mindirect-branch -mindirect-branch=* + use elibc_musl && append-ldflags -Wl,-z,stack-size=2097152 + + append-ldflags $(test-flags-CCLD -Wl,--undefined-version) + + local x + echo + for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do + einfo "$(printf '%10s' ${x}:) ${!x}" + done + echo + + cd "${MY_BUILDDIR}" || die + local myconf=() + + if use plugins ; then + myconf+=( --enable-plugins ) + fi + # enable gold (installed as ld.gold) and ld's plugin architecture + if use gold ; then + myconf+=( --enable-gold ) + fi + + if use nls ; then + myconf+=( --without-included-gettext ) + else + myconf+=( --disable-nls ) + fi + + myconf+=( --with-system-zlib ) + + # For bi-arch systems, enable a 64bit bfd. This matches the bi-arch + # logic in toolchain.eclass. bug #446946 + # + # We used to do it for everyone, but it's slow on 32bit arches. bug #438522 + case $(tc-arch) in + ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;; + esac + + use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd ) + + [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} ) + + is_cross && myconf+=( + --with-sysroot="${EPREFIX}"/usr/${CTARGET} + --enable-poison-system-directories + ) + + myconf+=( --enable-secureplt ) + + # mips can't do hash-style=gnu ... + if [[ $(tc-arch) != mips ]] ; then + myconf+=( --enable-default-hash-style=gnu ) + fi + + myconf+=( + --prefix="${EPREFIX}"/usr + --host=${CHOST} + --target=${CTARGET} + --datadir="${EPREFIX}"${DATAPATH} + --datarootdir="${EPREFIX}"${DATAPATH} + --infodir="${EPREFIX}"${DATAPATH}/info + --mandir="${EPREFIX}"${DATAPATH}/man + --bindir="${EPREFIX}"${BINPATH} + --libdir="${EPREFIX}"${LIBPATH} + --libexecdir="${EPREFIX}"${LIBPATH} + --includedir="${EPREFIX}"${INCPATH} + # portage's econf() does not detect presence of --d-d-t + # because it greps only top-level ./configure. But not + # libiberty's or bfd's configure. + --disable-dependency-tracking + --disable-silent-rules + --enable-obsolete + --enable-shared + --enable-threads + --enable-relro + --enable-install-libiberty + --enable-textrel-check=$(usex hardened error warning) + # Things to think about + #--enable-deterministic-archives + --enable-new-dtags + --disable-jansson + --disable-werror + --with-bugurl="$(toolchain-binutils_bugurl)" + --with-pkgversion="$(toolchain-binutils_pkgversion)" + $(use_enable static-libs static) + $(use_with zstd) + + # Disable modules that are in a combined binutils/gdb tree, bug #490566 + --disable-{gdb,gdbserver,libbacktrace,libdecnumber,readline,sim} + # Strip out broken static link flags: https://gcc.gnu.org/PR56750 + --without-stage1-ldflags + # Change SONAME to avoid conflict across {native,cross}/binutils, binutils-libs. bug #666100 + --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st) + + $(use_with debuginfod) + + # Avoid automagic dev-libs/msgpack dep, bug #865875 + --without-msgpack + + # Allow user to opt into CET for host libraries. + # Ideally we would like automagic-or-disabled here. + # But the check does not quite work on i686: bug #760926. + $(use_enable cet) + + # We can enable this by default in future, but it's brand new + # in 2.39 with several bugs: + # - Doesn't build on musl (https://sourceware.org/bugzilla/show_bug.cgi?id=29477) + # - No man pages (https://sourceware.org/bugzilla/show_bug.cgi?id=29521) + # - Broken at runtime without Java (https://sourceware.org/bugzilla/show_bug.cgi?id=29479) + # - binutils-config (and this ebuild?) needs adaptation first (https://bugs.gentoo.org/865113) + $(use_enable gprofng) + ) + + case ${CTARGET} in + x86_64-*|aarch64*|arm64*|i[3456]*) + # These hardening options are available from 2.39+ but + # they unconditionally enable the behaviour even on arches + # where e.g. execstacks can't be avoided. + # See https://sourceware.org/bugzilla/show_bug.cgi?id=29592. + # + # TODO: Get the logic for this fixed upstream so it doesn't + # create impossible broken combinations on some arches, like mips. + # + # TODO: Get the logic for this fixed upstream so --disable-* works + # as expected. + myconf+=( + --enable-warn-execstack=yes + --enable-warn-rwx-segments=yes + ) + + if use hardened ; then + myconf+=( + # TOOD: breaks glibc test suite + #--enable-error-execstack=yes + #--enable-error-rwx-segments=yes + --enable-default-execstack=no + ) + fi + ;; + *) + ;; + esac + + if use elibc_musl ; then + # Override our earlier setting for musl, as textrels don't + # work there at all. See bug #707660. + myconf+=( + --enable-textrel-check=error + ) + fi + + if use test || { use pgo && tc-is-lto ; } ; then + # -Wa,* needs to be consistent everywhere or lto-wrapper will complain + filter-flags '-Wa,*' + fi + + if ! is_cross ; then + myconf+=( $(use_enable pgo pgo-build $(tc-is-lto && echo "lto" || echo "yes")) ) + + if use pgo ; then + # We let configure handle it for us because it has to run + # the testsuite later on for profiling, and LTO isn't compatible + # with the testsuite. + filter-lto + + export BUILD_CFLAGS="${CFLAGS}" + fi + fi + + ECONF_SOURCE="${S}" econf "${myconf[@]}" + + # Prevent makeinfo from running if doc is unset. + if ! use doc ; then + sed -i \ + -e '/^MAKEINFO/s:=.*:= true:' \ + Makefile || die + fi +} + +src_compile() { + cd "${MY_BUILDDIR}" || die + + # see Note [tooldir hack for ldscripts] + # see linker prefix patch + emake \ + tooldir="${EPREFIX}${TOOLPATH}" \ + gentoo_prefix=$(usex prefix-guest "${EPREFIX}"/usr /usr) \ + all + + # only build info pages if the user wants them + if use doc ; then + emake info + fi + + # we nuke the manpages when we're left with junk + # (like when we bootstrap, no perl -> no manpages) + find . -name '*.1' -a -size 0 -delete +} + +src_test() { + cd "${MY_BUILDDIR}" || die + + # https://sourceware.org/PR31327 + local -x XZ_OPT="-T1" + local -x XZ_DEFAULTS="-T1" + + ( + # Tests don't expect LTO + filter-lto + + # lto-wrapper warnings which confuse tests + filter-flags '-Wa,*' + + # bug #637066 + filter-flags -Wall -Wreturn-type + + emake -k check \ + CFLAGS_FOR_TARGET="${CFLAGS_FOR_TARGET:-${CFLAGS}}" \ + CXXFLAGS_FOR_TARGET="${CXXFLAGS_FOR_TARGET:-${CXXFLAGS}}" \ + LDFLAGS_FOR_TARGET="${LDFLAGS_FOR_TARGET:-${LDFLAGS}}" \ + CFLAGS="${CFLAGS}" \ + CXXFLAGS="${CXXFLAGS}" \ + LDFLAGS="${LDFLAGS}" + ) +} + +src_install() { + local x d + + cd "${MY_BUILDDIR}" || die + + # see Note [tooldir hack for ldscripts] + emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install + rm -rf "${ED}"/${LIBPATH}/bin || die + use static-libs || find "${ED}" -name '*.la' -delete + + # Newer versions of binutils get fancy with ${LIBPATH}, bug #171905 + cd "${ED}"/${LIBPATH} || die + for d in ../* ; do + [[ ${d} == ../${PV} ]] && continue + mv ${d}/* . || die + rmdir ${d} || die + done + + # Now we collect everything intp the proper SLOT-ed dirs + # When something is built to cross-compile, it installs into + # /usr/$CHOST/ by default ... we have to 'fix' that :) + if is_cross ; then + cd "${ED}"/${BINPATH} || die + for x in * ; do + mv ${x} ${x/${CTARGET}-} || die + done + + if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then + mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH} + mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/usr/${CHOST}/{include,lib} + fi + fi + + insinto ${INCPATH} + local libiberty_headers=( + # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir. + demangle.h + dyn-string.h + fibheap.h + hashtab.h + libiberty.h + objalloc.h + splay-tree.h + ) + doins "${libiberty_headers[@]/#/${S}/include/}" + if [[ -d ${ED}/${LIBPATH}/lib ]] ; then + mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/ || die + rm -r "${ED}"/${LIBPATH}/lib || die + fi + + # Generate an env.d entry for this binutils + insinto /etc/env.d/binutils + cat <<-EOF > "${T}"/env.d + TARGET="${CTARGET}" + VER="${PV}" + LIBPATH="${EPREFIX}${LIBPATH}" + EOF + newins "${T}"/env.d ${CTARGET}-${PV} + + # Handle documentation + if ! is_cross ; then + cd "${S}" || die + dodoc README + + docinto bfd + dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO + + docinto binutils + dodoc binutils/ChangeLog binutils/NEWS binutils/README + + docinto gas + dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README* + + docinto gprof + dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl + + docinto ld + dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO + + docinto libiberty + dodoc libiberty/ChangeLog* libiberty/README + + docinto opcodes + dodoc opcodes/ChangeLog* + fi + + # Remove shared info pages + rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info} + + docompress "${DATAPATH}"/{info,man} + + # Trim all empty dirs + find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null +} + +pkg_postinst() { + # Make sure this ${CTARGET} has a binutils version selected + [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0 + binutils-config ${CTARGET}-${PV} +} + +pkg_postrm() { + local current_profile=$(binutils-config -c ${CTARGET}) + + # If no other versions exist, then uninstall for this + # target ... otherwise, switch to the newest version + # Note: only do this if this version is unmerged. We + # rerun binutils-config if this is a remerge, as + # we want the mtimes on the symlinks updated (if + # it is the same as the current selected profile) + if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then + local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}') + choice=${choice//$'\n'/ } + choice=${choice/* } + if [[ -z ${choice} ]] ; then + binutils-config -u ${CTARGET} + else + binutils-config ${choice} + fi + elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then + binutils-config ${CTARGET}-${PV} + fi +} + +# Note [slotting support] +# ----------------------- +# Gentoo's layout for binutils files is non-standard as Gentoo +# supports slotted installation for binutils. Many tools +# still expect binutils to reside in known locations. +# binutils-config package restores symlinks into known locations, +# like: +# /usr/bin/${CTARGET}- +# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips +# /usr/include/ +# +# Note [tooldir hack for ldscripts] +# --------------------------------- +# Build system does not allow ./configure to tweak every location +# we need for slotting binutils hence all the shuffling in +# src_install(). This note is about SCRIPTDIR define handling. +# +# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value +# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib' +# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time. +# Thus we can't just move files around after compilation finished. +# +# Our goal is the following: +# - at build-time set scriptdir to point to symlinked location: +# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case) +# - at install-time set scriptdir to point to slotted location: +# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV} diff --git a/sys-devel/binutils/binutils-2.42-r2.ebuild b/sys-devel/binutils/binutils-2.42-r2.ebuild new file mode 100644 index 0000000..7b0f6ea --- /dev/null +++ b/sys-devel/binutils/binutils-2.42-r2.ebuild @@ -0,0 +1,555 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit libtool flag-o-matic gnuconfig strip-linguas toolchain-funcs + +DESCRIPTION="Tools necessary to build programs" +HOMEPAGE="https://sourceware.org/binutils/" + +LICENSE="GPL-3+" +IUSE="cet debuginfod doc gold gprofng hardened multitarget +nls pgo +plugins static-libs test vanilla zstd" + +# Variables that can be set here (ignored for live ebuilds) +# PATCH_VER - the patchset version +# Default: empty, no patching +# PATCH_BINUTILS_VER - the binutils version in the patchset name +# - Default: PV +# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/... +# for the patchsets + +PATCH_VER=6 +PATCH_DEV=dilfridge + +if [[ ${PV} == 9999* ]]; then + inherit git-r3 + SLOT=${PV} +else + PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}} + PATCH_DEV=${PATCH_DEV:-dilfridge} + SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz https://sourceware.org/pub/binutils/releases/binutils-${PV}.tar.xz https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PV}.tar.xz" + [[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI} + https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz" + SLOT=$(ver_cut 1-2) + KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86" +fi + +# +# The cross-compile logic +# +export CTARGET=${CTARGET:-${CHOST}} +if [[ ${CTARGET} == ${CHOST} ]] ; then + if [[ ${CATEGORY} == cross-* ]] ; then + export CTARGET=${CATEGORY#cross-} + fi +fi +is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; } + +# +# The dependencies +# +RDEPEND=" + >=sys-devel/binutils-config-3 + sys-libs/zlib + debuginfod? ( + dev-libs/elfutils[debuginfod(-)] + ) + zstd? ( app-arch/zstd:= ) +" +DEPEND="${RDEPEND}" +BDEPEND=" + doc? ( sys-apps/texinfo ) + pgo? ( + dev-util/dejagnu + app-alternatives/bc + ) + test? ( + dev-util/dejagnu + app-alternatives/bc + ) + nls? ( sys-devel/gettext ) + zstd? ( virtual/pkgconfig ) + app-alternatives/lex + app-alternatives/yacc +" + +RESTRICT="!test? ( test )" + +MY_BUILDDIR=${WORKDIR}/build + +src_unpack() { + if [[ ${PV} == 9999* ]] ; then + EGIT_REPO_URI="https://anongit.gentoo.org/git/proj/toolchain/binutils-patches.git" + EGIT_CHECKOUT_DIR=${WORKDIR}/patches-git + git-r3_src_unpack + mv patches-git/9999 patch || die + + EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git" + S=${WORKDIR}/binutils + EGIT_CHECKOUT_DIR=${S} + git-r3_src_unpack + else + unpack ${P/-hppa64/}.tar.xz + + cd "${WORKDIR}" || die + unpack binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz + + # _p patch versions are Gentoo specific tarballs ... + local dir=${P%_p?} + dir=${dir/-hppa64/} + + S=${WORKDIR}/${dir} + fi + + cd "${WORKDIR}" || die + mkdir -p "${MY_BUILDDIR}" || die +} + +src_prepare() { + local patchsetname + if [[ ${PV} == 9999* ]] ; then + patchsetname="from git master" + else + patchsetname="${PATCH_BINUTILS_VER}-${PATCH_VER}" + fi + + if [[ -n ${PATCH_VER} ]] || [[ ${PV} == 9999* ]] ; then + if ! use vanilla; then + einfo "Applying binutils patchset ${patchsetname}" + eapply "${WORKDIR}/patch" + einfo "Done." + + # This is applied conditionally for now just out of caution. + # It should be okay on non-prefix systems though. See bug #892549. + if is_cross || use prefix; then + eapply "${FILESDIR}"/binutils-2.40-linker-search-path.patch \ + "${FILESDIR}"/binutils-2.41-linker-prefix.patch + fi + fi + fi + + # Make sure our explicit libdir paths don't get clobbered, bug #562460 + sed -i \ + -e 's:@bfdlibdir@:@libdir@:g' \ + -e 's:@bfdincludedir@:@includedir@:g' \ + {bfd,opcodes}/Makefile.in || die + + # Apply things from PATCHES and user dirs + default + + # Run misc portage update scripts + gnuconfig_update + elibtoolize --portage --no-uclibc +} + +toolchain-binutils_bugurl() { + printf "https://bugs.gentoo.org/" +} +toolchain-binutils_pkgversion() { + printf "Gentoo ${PV}" + [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}" +} + +src_configure() { + # See https://www.gnu.org/software/make/manual/html_node/Parallel-Output.html + # Avoid really confusing logs from subconfigure spam, makes logs far + # more legible. + MAKEOPTS="--output-sync=line ${MAKEOPTS}" + + # Setup some paths + LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV} + INCPATH=${LIBPATH}/include + DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV} + if is_cross ; then + TOOLPATH=/usr/${CHOST}/${CTARGET} + else + TOOLPATH=/usr/${CTARGET} + fi + BINPATH=${TOOLPATH}/binutils-bin/${PV} + + # Make sure we filter $LINGUAS so that only ones that + # actually work make it through, bug #42033 + strip-linguas -u */po + + # Keep things sane + strip-flags + use cet && filter-flags -mindirect-branch -mindirect-branch=* + use elibc_musl && append-ldflags -Wl,-z,stack-size=2097152 + + append-ldflags $(test-flags-CCLD -Wl,--undefined-version) + + local x + echo + for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do + einfo "$(printf '%10s' ${x}:) ${!x}" + done + echo + + cd "${MY_BUILDDIR}" || die + local myconf=() + + if use plugins ; then + myconf+=( --enable-plugins ) + fi + # enable gold (installed as ld.gold) and ld's plugin architecture + if use gold ; then + myconf+=( --enable-gold ) + fi + + if use nls ; then + myconf+=( --without-included-gettext ) + else + myconf+=( --disable-nls ) + fi + + myconf+=( --with-system-zlib ) + + # For bi-arch systems, enable a 64bit bfd. This matches the bi-arch + # logic in toolchain.eclass. bug #446946 + # + # We used to do it for everyone, but it's slow on 32bit arches. bug #438522 + case $(tc-arch) in + ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;; + esac + + use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd ) + + [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} ) + + is_cross && myconf+=( + --with-sysroot="${EPREFIX}"/usr/${CTARGET} + --enable-poison-system-directories + ) + + myconf+=( --enable-secureplt ) + + # mips can't do hash-style=gnu ... + if [[ $(tc-arch) != mips ]] ; then + myconf+=( --enable-default-hash-style=gnu ) + fi + + myconf+=( + --prefix="${EPREFIX}"/usr + --host=${CHOST} + --target=${CTARGET} + --datadir="${EPREFIX}"${DATAPATH} + --datarootdir="${EPREFIX}"${DATAPATH} + --infodir="${EPREFIX}"${DATAPATH}/info + --mandir="${EPREFIX}"${DATAPATH}/man + --bindir="${EPREFIX}"${BINPATH} + --libdir="${EPREFIX}"${LIBPATH} + --libexecdir="${EPREFIX}"${LIBPATH} + --includedir="${EPREFIX}"${INCPATH} + # portage's econf() does not detect presence of --d-d-t + # because it greps only top-level ./configure. But not + # libiberty's or bfd's configure. + --disable-dependency-tracking + --disable-silent-rules + --enable-obsolete + --enable-shared + --enable-threads + --enable-relro + --enable-install-libiberty + --enable-textrel-check=$(usex hardened error warning) + # Things to think about + #--enable-deterministic-archives + --enable-new-dtags + --disable-jansson + --disable-werror + --with-bugurl="$(toolchain-binutils_bugurl)" + --with-pkgversion="$(toolchain-binutils_pkgversion)" + $(use_enable static-libs static) + $(use_with zstd) + + # Disable modules that are in a combined binutils/gdb tree, bug #490566 + --disable-{gdb,gdbserver,libbacktrace,libdecnumber,readline,sim} + # Strip out broken static link flags: https://gcc.gnu.org/PR56750 + --without-stage1-ldflags + # Change SONAME to avoid conflict across {native,cross}/binutils, binutils-libs. bug #666100 + --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st) + + $(use_with debuginfod) + + # Avoid automagic dev-libs/msgpack dep, bug #865875 + --without-msgpack + + # Allow user to opt into CET for host libraries. + # Ideally we would like automagic-or-disabled here. + # But the check does not quite work on i686: bug #760926. + $(use_enable cet) + + # We can enable this by default in future, but it's brand new + # in 2.39 with several bugs: + # - Doesn't build on musl (https://sourceware.org/bugzilla/show_bug.cgi?id=29477) + # - No man pages (https://sourceware.org/bugzilla/show_bug.cgi?id=29521) + # - Broken at runtime without Java (https://sourceware.org/bugzilla/show_bug.cgi?id=29479) + # - binutils-config (and this ebuild?) needs adaptation first (https://bugs.gentoo.org/865113) + $(use_enable gprofng) + ) + + case ${CTARGET} in + x86_64-*|aarch64*|arm64*|i[3456]*) + # These hardening options are available from 2.39+ but + # they unconditionally enable the behaviour even on arches + # where e.g. execstacks can't be avoided. + # See https://sourceware.org/bugzilla/show_bug.cgi?id=29592. + # + # TODO: Get the logic for this fixed upstream so it doesn't + # create impossible broken combinations on some arches, like mips. + # + # TODO: Get the logic for this fixed upstream so --disable-* works + # as expected. + myconf+=( + --enable-warn-execstack=yes + --enable-warn-rwx-segments=yes + ) + + if use hardened ; then + myconf+=( + # TOOD: breaks glibc test suite + #--enable-error-execstack=yes + #--enable-error-rwx-segments=yes + --enable-default-execstack=no + ) + fi + ;; + *) + ;; + esac + + if use elibc_musl ; then + # Override our earlier setting for musl, as textrels don't + # work there at all. See bug #707660. + myconf+=( + --enable-textrel-check=error + ) + fi + + if use test || { use pgo && tc-is-lto ; } ; then + # -Wa,* needs to be consistent everywhere or lto-wrapper will complain + filter-flags '-Wa,*' + fi + + if ! is_cross ; then + myconf+=( $(use_enable pgo pgo-build $(tc-is-lto && echo "lto" || echo "yes")) ) + + if use pgo ; then + # We let configure handle it for us because it has to run + # the testsuite later on for profiling, and LTO isn't compatible + # with the testsuite. + filter-lto + + export BUILD_CFLAGS="${CFLAGS}" + fi + fi + + ECONF_SOURCE="${S}" econf "${myconf[@]}" + + # Prevent makeinfo from running if doc is unset. + if ! use doc ; then + sed -i \ + -e '/^MAKEINFO/s:=.*:= true:' \ + Makefile || die + fi +} + +src_compile() { + cd "${MY_BUILDDIR}" || die + + # see Note [tooldir hack for ldscripts] + # see linker prefix patch + emake \ + tooldir="${EPREFIX}${TOOLPATH}" \ + gentoo_prefix=$(usex prefix-guest "${EPREFIX}"/usr /usr) \ + all + + # only build info pages if the user wants them + if use doc ; then + emake info + fi + + # we nuke the manpages when we're left with junk + # (like when we bootstrap, no perl -> no manpages) + find . -name '*.1' -a -size 0 -delete +} + +src_test() { + cd "${MY_BUILDDIR}" || die + + # https://sourceware.org/PR31327 + local -x XZ_OPT="-T1" + local -x XZ_DEFAULTS="-T1" + + ( + # Tests don't expect LTO + filter-lto + + # lto-wrapper warnings which confuse tests + filter-flags '-Wa,*' + + # bug #637066 + filter-flags -Wall -Wreturn-type + + emake -k check \ + CFLAGS_FOR_TARGET="${CFLAGS_FOR_TARGET:-${CFLAGS}}" \ + CXXFLAGS_FOR_TARGET="${CXXFLAGS_FOR_TARGET:-${CXXFLAGS}}" \ + LDFLAGS_FOR_TARGET="${LDFLAGS_FOR_TARGET:-${LDFLAGS}}" \ + CFLAGS="${CFLAGS}" \ + CXXFLAGS="${CXXFLAGS}" \ + LDFLAGS="${LDFLAGS}" + ) +} + +src_install() { + local x d + + cd "${MY_BUILDDIR}" || die + + # see Note [tooldir hack for ldscripts] + emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install + rm -rf "${ED}"/${LIBPATH}/bin || die + use static-libs || find "${ED}" -name '*.la' -delete + + # Newer versions of binutils get fancy with ${LIBPATH}, bug #171905 + cd "${ED}"/${LIBPATH} || die + for d in ../* ; do + [[ ${d} == ../${PV} ]] && continue + mv ${d}/* . || die + rmdir ${d} || die + done + + # Now we collect everything intp the proper SLOT-ed dirs + # When something is built to cross-compile, it installs into + # /usr/$CHOST/ by default ... we have to 'fix' that :) + if is_cross ; then + cd "${ED}"/${BINPATH} || die + for x in * ; do + mv ${x} ${x/${CTARGET}-} || die + done + + if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then + mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH} + mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/usr/${CHOST}/{include,lib} + fi + fi + + insinto ${INCPATH} + local libiberty_headers=( + # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir. + demangle.h + dyn-string.h + fibheap.h + hashtab.h + libiberty.h + objalloc.h + splay-tree.h + ) + doins "${libiberty_headers[@]/#/${S}/include/}" + if [[ -d ${ED}/${LIBPATH}/lib ]] ; then + mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/ || die + rm -r "${ED}"/${LIBPATH}/lib || die + fi + + # Generate an env.d entry for this binutils + insinto /etc/env.d/binutils + cat <<-EOF > "${T}"/env.d + TARGET="${CTARGET}" + VER="${PV}" + LIBPATH="${EPREFIX}${LIBPATH}" + EOF + newins "${T}"/env.d ${CTARGET}-${PV} + + # Handle documentation + if ! is_cross ; then + cd "${S}" || die + dodoc README + + docinto bfd + dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO + + docinto binutils + dodoc binutils/ChangeLog binutils/NEWS binutils/README + + docinto gas + dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README* + + docinto gprof + dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl + + docinto ld + dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO + + docinto libiberty + dodoc libiberty/ChangeLog* libiberty/README + + docinto opcodes + dodoc opcodes/ChangeLog* + fi + + # Remove shared info pages + rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info} + + docompress "${DATAPATH}"/{info,man} + + # Trim all empty dirs + find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null +} + +pkg_postinst() { + # Make sure this ${CTARGET} has a binutils version selected + [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0 + binutils-config ${CTARGET}-${PV} || eerror binutils-config returned an error +} + +pkg_postrm() { + local current_profile=$(binutils-config -c ${CTARGET}) + + # If no other versions exist, then uninstall for this + # target ... otherwise, switch to the newest version + # Note: only do this if this version is unmerged. We + # rerun binutils-config if this is a remerge, as + # we want the mtimes on the symlinks updated (if + # it is the same as the current selected profile) + if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then + local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}') + choice=${choice//$'\n'/ } + choice=${choice/* } + if [[ -z ${choice} ]] ; then + binutils-config -u ${CTARGET} || eerror binutils-config returned an error + else + binutils-config ${choice} || eerror binutils-config returned an error + fi + elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then + binutils-config ${CTARGET}-${PV} || eerror binutils-config returned an error + fi +} + +# Note [slotting support] +# ----------------------- +# Gentoo's layout for binutils files is non-standard as Gentoo +# supports slotted installation for binutils. Many tools +# still expect binutils to reside in known locations. +# binutils-config package restores symlinks into known locations, +# like: +# /usr/bin/${CTARGET}- +# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips +# /usr/include/ +# +# Note [tooldir hack for ldscripts] +# --------------------------------- +# Build system does not allow ./configure to tweak every location +# we need for slotting binutils hence all the shuffling in +# src_install(). This note is about SCRIPTDIR define handling. +# +# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value +# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib' +# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time. +# Thus we can't just move files around after compilation finished. +# +# Our goal is the following: +# - at build-time set scriptdir to point to symlinked location: +# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case) +# - at install-time set scriptdir to point to slotted location: +# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV} diff --git a/sys-devel/binutils/binutils-2.43.9999.ebuild b/sys-devel/binutils/binutils-2.43.9999.ebuild new file mode 100644 index 0000000..c05f152 --- /dev/null +++ b/sys-devel/binutils/binutils-2.43.9999.ebuild @@ -0,0 +1,557 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit libtool flag-o-matic gnuconfig strip-linguas toolchain-funcs + +DESCRIPTION="Tools necessary to build programs" +HOMEPAGE="https://sourceware.org/binutils/" + +LICENSE="GPL-3+" +IUSE="cet debuginfod doc gold gprofng hardened multitarget +nls pgo +plugins static-libs test vanilla zstd" + +# Variables that can be set here (ignored for live ebuilds) +# PATCH_VER - the patchset version +# Default: empty, no patching +# PATCH_BINUTILS_VER - the binutils version in the patchset name +# - Default: PV +# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/... +# for the patchsets + +PATCH_VER=1 +PATCH_DEV=dilfridge + +if [[ ${PV} == 9999 ]]; then + inherit git-r3 + SLOT=${PV} +elif [[ ${PV} == *9999 ]]; then + inherit git-r3 + SLOT=$(ver_cut 1-2) +else + PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}} + PATCH_DEV=${PATCH_DEV:-dilfridge} + SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz https://sourceware.org/pub/binutils/releases/binutils-${PV}.tar.xz https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PV}.tar.xz" + [[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI} + https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz" + SLOT=$(ver_cut 1-2) + #KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86" +fi + +# +# The cross-compile logic +# +export CTARGET=${CTARGET:-${CHOST}} +if [[ ${CTARGET} == ${CHOST} ]] ; then + if [[ ${CATEGORY} == cross-* ]] ; then + export CTARGET=${CATEGORY#cross-} + fi +fi +is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; } + +# +# The dependencies +# +RDEPEND=" + >=sys-devel/binutils-config-3 + sys-libs/zlib + debuginfod? ( + dev-libs/elfutils[debuginfod(-)] + ) + zstd? ( app-arch/zstd:= ) +" +DEPEND="${RDEPEND}" +BDEPEND=" + doc? ( sys-apps/texinfo ) + pgo? ( + dev-util/dejagnu + app-alternatives/bc + ) + test? ( + dev-util/dejagnu + app-alternatives/bc + ) + nls? ( sys-devel/gettext ) + zstd? ( virtual/pkgconfig ) + app-alternatives/lex + app-alternatives/yacc +" + +RESTRICT="!test? ( test )" + +MY_BUILDDIR=${WORKDIR}/build + +src_unpack() { + if [[ ${PV} == *9999 ]] ; then + EGIT_REPO_URI="https://anongit.gentoo.org/git/proj/toolchain/binutils-patches.git" + EGIT_CHECKOUT_DIR=${WORKDIR}/patches-git + git-r3_src_unpack + mv patches-git/9999 patch || die + + if [[ ${PV} != 9999 ]] ; then + EGIT_BRANCH=binutils-$(ver_cut 1)_$(ver_cut 2)-branch + fi + EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git" + S=${WORKDIR}/binutils + EGIT_CHECKOUT_DIR=${S} + git-r3_src_unpack + else + unpack ${P/-hppa64/}.tar.xz + + cd "${WORKDIR}" || die + unpack binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz + + # _p patch versions are Gentoo specific tarballs ... + local dir=${P%_p?} + dir=${dir/-hppa64/} + + S=${WORKDIR}/${dir} + fi + + cd "${WORKDIR}" || die + mkdir -p "${MY_BUILDDIR}" || die +} + +src_prepare() { + local patchsetname + if [[ ${PV} == 9999 ]] ; then + patchsetname="from git master" + elif [[ ${PV} == *9999 ]] ; then + patchsetname="from git branch ${EGIT_BRANCH}" + else + patchsetname="${PATCH_BINUTILS_VER}-${PATCH_VER}" + fi + + if [[ -n ${PATCH_VER} ]] || [[ ${PV} == *9999 ]] ; then + if ! use vanilla; then + einfo "Applying binutils patchset ${patchsetname}" + eapply "${WORKDIR}/patch" + einfo "Done." + + # This is applied conditionally for now just out of caution. + # It should be okay on non-prefix systems though. See bug #892549. + if is_cross || use prefix; then + eapply "${FILESDIR}"/binutils-2.40-linker-search-path.patch \ + "${FILESDIR}"/binutils-2.41-linker-prefix.patch + fi + fi + fi + + # Make sure our explicit libdir paths don't get clobbered, bug #562460 + sed -i \ + -e 's:@bfdlibdir@:@libdir@:g' \ + -e 's:@bfdincludedir@:@includedir@:g' \ + {bfd,opcodes}/Makefile.in || die + + # Apply things from PATCHES and user dirs + default + + # Run misc portage update scripts + gnuconfig_update + elibtoolize --portage --no-uclibc +} + +toolchain-binutils_bugurl() { + printf "https://bugs.gentoo.org/" +} +toolchain-binutils_pkgversion() { + printf "Gentoo ${PV}" + [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}" +} + +src_configure() { + # See https://www.gnu.org/software/make/manual/html_node/Parallel-Output.html + # Avoid really confusing logs from subconfigure spam, makes logs far + # more legible. + MAKEOPTS="--output-sync=line ${MAKEOPTS}" + + # Setup some paths + LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV} + INCPATH=${LIBPATH}/include + DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV} + if is_cross ; then + TOOLPATH=/usr/${CHOST}/${CTARGET} + else + TOOLPATH=/usr/${CTARGET} + fi + BINPATH=${TOOLPATH}/binutils-bin/${PV} + + # Make sure we filter $LINGUAS so that only ones that + # actually work make it through, bug #42033 + strip-linguas -u */po + + # Keep things sane + strip-flags + use cet && filter-flags -mindirect-branch -mindirect-branch=* + use elibc_musl && append-ldflags -Wl,-z,stack-size=2097152 + + local x + echo + for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do + einfo "$(printf '%10s' ${x}:) ${!x}" + done + echo + + cd "${MY_BUILDDIR}" || die + local myconf=() + + if use plugins ; then + myconf+=( --enable-plugins ) + fi + # enable gold (installed as ld.gold) and ld's plugin architecture + if use gold ; then + myconf+=( --enable-gold ) + fi + + if use nls ; then + myconf+=( --without-included-gettext ) + else + myconf+=( --disable-nls ) + fi + + myconf+=( --with-system-zlib ) + + # For bi-arch systems, enable a 64bit bfd. This matches the bi-arch + # logic in toolchain.eclass. bug #446946 + # + # We used to do it for everyone, but it's slow on 32bit arches. bug #438522 + case $(tc-arch) in + ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;; + esac + + use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd ) + + [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} ) + + is_cross && myconf+=( + --with-sysroot="${EPREFIX}"/usr/${CTARGET} + --enable-poison-system-directories + ) + + myconf+=( --enable-secureplt ) + + # mips can't do hash-style=gnu ... + if [[ $(tc-arch) != mips ]] ; then + myconf+=( --enable-default-hash-style=gnu ) + fi + + myconf+=( + --prefix="${EPREFIX}"/usr + --host=${CHOST} + --target=${CTARGET} + --datadir="${EPREFIX}"${DATAPATH} + --datarootdir="${EPREFIX}"${DATAPATH} + --infodir="${EPREFIX}"${DATAPATH}/info + --mandir="${EPREFIX}"${DATAPATH}/man + --bindir="${EPREFIX}"${BINPATH} + --libdir="${EPREFIX}"${LIBPATH} + --libexecdir="${EPREFIX}"${LIBPATH} + --includedir="${EPREFIX}"${INCPATH} + # portage's econf() does not detect presence of --d-d-t + # because it greps only top-level ./configure. But not + # libiberty's or bfd's configure. + --disable-dependency-tracking + --disable-silent-rules + --enable-obsolete + --enable-shared + --enable-threads + --enable-relro + --enable-install-libiberty + --enable-textrel-check=$(usex hardened error warning) + # Things to think about + #--enable-deterministic-archives + --enable-new-dtags + --disable-jansson + --disable-werror + --with-bugurl="$(toolchain-binutils_bugurl)" + --with-pkgversion="$(toolchain-binutils_pkgversion)" + $(use_enable static-libs static) + $(use_with zstd) + + # Disable modules that are in a combined binutils/gdb tree, bug #490566 + --disable-{gdb,gdbserver,libbacktrace,libdecnumber,readline,sim} + # Strip out broken static link flags: https://gcc.gnu.org/PR56750 + --without-stage1-ldflags + # Change SONAME to avoid conflict across {native,cross}/binutils, binutils-libs. bug #666100 + --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st) + + $(use_with debuginfod) + + # Avoid automagic dev-libs/msgpack dep, bug #865875 + --without-msgpack + + # Allow user to opt into CET for host libraries. + # Ideally we would like automagic-or-disabled here. + # But the check does not quite work on i686: bug #760926. + $(use_enable cet) + + # We can enable this by default in future, but it's brand new + # in 2.39 with several bugs: + # - Doesn't build on musl (https://sourceware.org/bugzilla/show_bug.cgi?id=29477) + # - No man pages (https://sourceware.org/bugzilla/show_bug.cgi?id=29521) + # - Broken at runtime without Java (https://sourceware.org/bugzilla/show_bug.cgi?id=29479) + # - binutils-config (and this ebuild?) needs adaptation first (https://bugs.gentoo.org/865113) + $(use_enable gprofng) + ) + + case ${CTARGET} in + x86_64-*|aarch64*|arm64*|i[3456]*) + # These hardening options are available from 2.39+ but + # they unconditionally enable the behaviour even on arches + # where e.g. execstacks can't be avoided. + # See https://sourceware.org/bugzilla/show_bug.cgi?id=29592. + # + # TODO: Get the logic for this fixed upstream so it doesn't + # create impossible broken combinations on some arches, like mips. + # + # TODO: Get the logic for this fixed upstream so --disable-* works + # as expected. + myconf+=( + --enable-warn-execstack=yes + --enable-warn-rwx-segments=yes + ) + + if use hardened ; then + myconf+=( + # TOOD: breaks glibc test suite + #--enable-error-execstack=yes + #--enable-error-rwx-segments=yes + --enable-default-execstack=no + ) + fi + ;; + *) + ;; + esac + + if use elibc_musl ; then + # Override our earlier setting for musl, as textrels don't + # work there at all. See bug #707660. + myconf+=( + --enable-textrel-check=error + ) + fi + + if use test || { use pgo && tc-is-lto ; } ; then + # -Wa,* needs to be consistent everywhere or lto-wrapper will complain + filter-flags '-Wa,*' + fi + + if ! is_cross ; then + myconf+=( $(use_enable pgo pgo-build $(tc-is-lto && echo "lto" || echo "yes")) ) + + if use pgo ; then + # We let configure handle it for us because it has to run + # the testsuite later on for profiling, and LTO isn't compatible + # with the testsuite. + filter-lto + + export BUILD_CFLAGS="${CFLAGS}" + fi + fi + + ECONF_SOURCE="${S}" econf "${myconf[@]}" + + # Prevent makeinfo from running if doc is unset. + if ! use doc ; then + sed -i \ + -e '/^MAKEINFO/s:=.*:= true:' \ + Makefile || die + fi +} + +src_compile() { + cd "${MY_BUILDDIR}" || die + + # see Note [tooldir hack for ldscripts] + # see linker prefix patch + emake \ + tooldir="${EPREFIX}${TOOLPATH}" \ + gentoo_prefix=$(usex prefix-guest "${EPREFIX}"/usr /usr) \ + all + + # only build info pages if the user wants them + if use doc ; then + emake info + fi + + # we nuke the manpages when we're left with junk + # (like when we bootstrap, no perl -> no manpages) + find . -name '*.1' -a -size 0 -delete +} + +src_test() { + cd "${MY_BUILDDIR}" || die + + ( + # Tests don't expect LTO + filter-lto + + # lto-wrapper warnings which confuse tests + filter-flags '-Wa,*' + + # bug #637066 + filter-flags -Wall -Wreturn-type + + emake -k check \ + CFLAGS_FOR_TARGET="${CFLAGS_FOR_TARGET:-${CFLAGS}}" \ + CXXFLAGS_FOR_TARGET="${CXXFLAGS_FOR_TARGET:-${CXXFLAGS}}" \ + LDFLAGS_FOR_TARGET="${LDFLAGS_FOR_TARGET:-${LDFLAGS}}" \ + CFLAGS="${CFLAGS}" \ + CXXFLAGS="${CXXFLAGS}" \ + LDFLAGS="${LDFLAGS}" + ) +} + +src_install() { + local x d + + cd "${MY_BUILDDIR}" || die + + # see Note [tooldir hack for ldscripts] + emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install + rm -rf "${ED}"/${LIBPATH}/bin || die + use static-libs || find "${ED}" -name '*.la' -delete + + # Newer versions of binutils get fancy with ${LIBPATH}, bug #171905 + cd "${ED}"/${LIBPATH} || die + for d in ../* ; do + [[ ${d} == ../${PV} ]] && continue + mv ${d}/* . || die + rmdir ${d} || die + done + + # Now we collect everything intp the proper SLOT-ed dirs + # When something is built to cross-compile, it installs into + # /usr/$CHOST/ by default ... we have to 'fix' that :) + if is_cross ; then + cd "${ED}"/${BINPATH} || die + for x in * ; do + mv ${x} ${x/${CTARGET}-} || die + done + + if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then + mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH} + mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/usr/${CHOST}/{include,lib} + fi + fi + + insinto ${INCPATH} + local libiberty_headers=( + # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir. + demangle.h + dyn-string.h + fibheap.h + hashtab.h + libiberty.h + objalloc.h + splay-tree.h + ) + doins "${libiberty_headers[@]/#/${S}/include/}" + if [[ -d ${ED}/${LIBPATH}/lib ]] ; then + mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/ || die + rm -r "${ED}"/${LIBPATH}/lib || die + fi + + # Generate an env.d entry for this binutils + insinto /etc/env.d/binutils + cat <<-EOF > "${T}"/env.d + TARGET="${CTARGET}" + VER="${PV}" + LIBPATH="${EPREFIX}${LIBPATH}" + EOF + newins "${T}"/env.d ${CTARGET}-${PV} + + # Handle documentation + if ! is_cross ; then + cd "${S}" || die + dodoc README + + docinto bfd + dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO + + docinto binutils + dodoc binutils/ChangeLog binutils/NEWS binutils/README + + docinto gas + dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README* + + docinto gprof + dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl + + docinto ld + dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO + + docinto libiberty + dodoc libiberty/ChangeLog* libiberty/README + + docinto opcodes + dodoc opcodes/ChangeLog* + fi + + # Remove shared info pages + rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info} + + docompress "${DATAPATH}"/{info,man} + + # Trim all empty dirs + find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null +} + +pkg_postinst() { + # Make sure this ${CTARGET} has a binutils version selected + [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0 + binutils-config ${CTARGET}-${PV} || eerror binutils-config returned an error +} + +pkg_postrm() { + local current_profile=$(binutils-config -c ${CTARGET}) + + # If no other versions exist, then uninstall for this + # target ... otherwise, switch to the newest version + # Note: only do this if this version is unmerged. We + # rerun binutils-config if this is a remerge, as + # we want the mtimes on the symlinks updated (if + # it is the same as the current selected profile) + if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then + local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}') + choice=${choice//$'\n'/ } + choice=${choice/* } + if [[ -z ${choice} ]] ; then + binutils-config -u ${CTARGET} || eerror binutils-config returned an error + else + binutils-config ${choice} || eerror binutils-config returned an error + fi + elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then + binutils-config ${CTARGET}-${PV} || eerror binutils-config returned an error + fi +} + +# Note [slotting support] +# ----------------------- +# Gentoo's layout for binutils files is non-standard as Gentoo +# supports slotted installation for binutils. Many tools +# still expect binutils to reside in known locations. +# binutils-config package restores symlinks into known locations, +# like: +# /usr/bin/${CTARGET}- +# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips +# /usr/include/ +# +# Note [tooldir hack for ldscripts] +# --------------------------------- +# Build system does not allow ./configure to tweak every location +# we need for slotting binutils hence all the shuffling in +# src_install(). This note is about SCRIPTDIR define handling. +# +# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value +# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib' +# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time. +# Thus we can't just move files around after compilation finished. +# +# Our goal is the following: +# - at build-time set scriptdir to point to symlinked location: +# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case) +# - at install-time set scriptdir to point to slotted location: +# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV} diff --git a/sys-devel/binutils/binutils-2.43.ebuild b/sys-devel/binutils/binutils-2.43.ebuild new file mode 100644 index 0000000..696a1ed --- /dev/null +++ b/sys-devel/binutils/binutils-2.43.ebuild @@ -0,0 +1,556 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit libtool flag-o-matic gnuconfig strip-linguas toolchain-funcs + +DESCRIPTION="Tools necessary to build programs" +HOMEPAGE="https://sourceware.org/binutils/" + +LICENSE="GPL-3+" +IUSE="cet debuginfod doc gold gprofng hardened multitarget +nls pgo +plugins static-libs test vanilla zstd" + +# Variables that can be set here (ignored for live ebuilds) +# PATCH_VER - the patchset version +# Default: empty, no patching +# PATCH_BINUTILS_VER - the binutils version in the patchset name +# - Default: PV +# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/... +# for the patchsets + +PATCH_VER=1 +PATCH_DEV=dilfridge + +if [[ ${PV} == 9999 ]]; then + inherit git-r3 + SLOT=${PV} +elif [[ ${PV} == *9999 ]]; then + inherit git-r3 + SLOT=$(ver_cut 1-2) +else + PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}} + PATCH_DEV=${PATCH_DEV:-dilfridge} + SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz https://sourceware.org/pub/binutils/releases/binutils-${PV}.tar.xz https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PV}.tar.xz" + [[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI} + https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz" + SLOT=$(ver_cut 1-2) + KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86" +fi + +# +# The cross-compile logic +# +export CTARGET=${CTARGET:-${CHOST}} +if [[ ${CTARGET} == ${CHOST} ]] ; then + if [[ ${CATEGORY} == cross-* ]] ; then + export CTARGET=${CATEGORY#cross-} + fi +fi +is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; } + +# +# The dependencies +# +RDEPEND=" + >=sys-devel/binutils-config-3 + sys-libs/zlib + debuginfod? ( + dev-libs/elfutils[debuginfod(-)] + ) + zstd? ( app-arch/zstd:= ) +" +DEPEND="${RDEPEND}" +BDEPEND=" + doc? ( sys-apps/texinfo ) + pgo? ( + dev-util/dejagnu + app-alternatives/bc + ) + test? ( + dev-util/dejagnu + app-alternatives/bc + ) + nls? ( sys-devel/gettext ) + zstd? ( virtual/pkgconfig ) + app-alternatives/lex + app-alternatives/yacc +" + +RESTRICT="!test? ( test )" + +MY_BUILDDIR=${WORKDIR}/build + +src_unpack() { + if [[ ${PV} == *9999 ]] ; then + EGIT_REPO_URI="https://anongit.gentoo.org/git/proj/toolchain/binutils-patches.git" + EGIT_CHECKOUT_DIR=${WORKDIR}/patches-git + git-r3_src_unpack + mv patches-git/9999 patch || die + + if [[ ${PV} != 9999 ]] ; then + EGIT_BRANCH=binutils-$(ver_cut 1)_$(ver_cut 2)-branch + fi + EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git" + S=${WORKDIR}/binutils + EGIT_CHECKOUT_DIR=${S} + git-r3_src_unpack + else + unpack ${P/-hppa64/}.tar.xz + + cd "${WORKDIR}" || die + unpack binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz + + # _p patch versions are Gentoo specific tarballs ... + local dir=${P%_p?} + dir=${dir/-hppa64/} + + S=${WORKDIR}/${dir} + fi + + cd "${WORKDIR}" || die + mkdir -p "${MY_BUILDDIR}" || die +} + +src_prepare() { + local patchsetname + if [[ ${PV} == 9999 ]] ; then + patchsetname="from git master" + elif [[ ${PV} == *9999 ]] ; then + patchsetname="from git branch ${EGIT_BRANCH}" + else + patchsetname="${PATCH_BINUTILS_VER}-${PATCH_VER}" + fi + + if [[ -n ${PATCH_VER} ]] || [[ ${PV} == *9999 ]] ; then + if ! use vanilla; then + einfo "Applying binutils patchset ${patchsetname}" + eapply "${WORKDIR}/patch" + einfo "Done." + + # This is applied conditionally for now just out of caution. + # It should be okay on non-prefix systems though. See bug #892549. + if is_cross || use prefix; then + eapply "${FILESDIR}"/binutils-2.41-linker-prefix.patch + fi + fi + fi + + # Make sure our explicit libdir paths don't get clobbered, bug #562460 + sed -i \ + -e 's:@bfdlibdir@:@libdir@:g' \ + -e 's:@bfdincludedir@:@includedir@:g' \ + {bfd,opcodes}/Makefile.in || die + + # Apply things from PATCHES and user dirs + default + + # Run misc portage update scripts + gnuconfig_update + elibtoolize --portage --no-uclibc +} + +toolchain-binutils_bugurl() { + printf "https://bugs.gentoo.org/" +} +toolchain-binutils_pkgversion() { + printf "Gentoo ${PV}" + [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}" +} + +src_configure() { + # See https://www.gnu.org/software/make/manual/html_node/Parallel-Output.html + # Avoid really confusing logs from subconfigure spam, makes logs far + # more legible. + MAKEOPTS="--output-sync=line ${MAKEOPTS}" + + # Setup some paths + LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV} + INCPATH=${LIBPATH}/include + DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV} + if is_cross ; then + TOOLPATH=/usr/${CHOST}/${CTARGET} + else + TOOLPATH=/usr/${CTARGET} + fi + BINPATH=${TOOLPATH}/binutils-bin/${PV} + + # Make sure we filter $LINGUAS so that only ones that + # actually work make it through, bug #42033 + strip-linguas -u */po + + # Keep things sane + strip-flags + use cet && filter-flags -mindirect-branch -mindirect-branch=* + use elibc_musl && append-ldflags -Wl,-z,stack-size=2097152 + + local x + echo + for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do + einfo "$(printf '%10s' ${x}:) ${!x}" + done + echo + + cd "${MY_BUILDDIR}" || die + local myconf=() + + if use plugins ; then + myconf+=( --enable-plugins ) + fi + # enable gold (installed as ld.gold) and ld's plugin architecture + if use gold ; then + myconf+=( --enable-gold ) + fi + + if use nls ; then + myconf+=( --without-included-gettext ) + else + myconf+=( --disable-nls ) + fi + + myconf+=( --with-system-zlib ) + + # For bi-arch systems, enable a 64bit bfd. This matches the bi-arch + # logic in toolchain.eclass. bug #446946 + # + # We used to do it for everyone, but it's slow on 32bit arches. bug #438522 + case $(tc-arch) in + ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;; + esac + + use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd ) + + [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} ) + + is_cross && myconf+=( + --with-sysroot="${EPREFIX}"/usr/${CTARGET} + --enable-poison-system-directories + ) + + myconf+=( --enable-secureplt ) + + # mips can't do hash-style=gnu ... + if [[ $(tc-arch) != mips ]] ; then + myconf+=( --enable-default-hash-style=gnu ) + fi + + myconf+=( + --prefix="${EPREFIX}"/usr + --host=${CHOST} + --target=${CTARGET} + --datadir="${EPREFIX}"${DATAPATH} + --datarootdir="${EPREFIX}"${DATAPATH} + --infodir="${EPREFIX}"${DATAPATH}/info + --mandir="${EPREFIX}"${DATAPATH}/man + --bindir="${EPREFIX}"${BINPATH} + --libdir="${EPREFIX}"${LIBPATH} + --libexecdir="${EPREFIX}"${LIBPATH} + --includedir="${EPREFIX}"${INCPATH} + # portage's econf() does not detect presence of --d-d-t + # because it greps only top-level ./configure. But not + # libiberty's or bfd's configure. + --disable-dependency-tracking + --disable-silent-rules + --enable-obsolete + --enable-shared + --enable-threads + --enable-relro + --enable-install-libiberty + --enable-textrel-check=$(usex hardened error warning) + # Things to think about + #--enable-deterministic-archives + --enable-new-dtags + --disable-jansson + --disable-werror + --with-bugurl="$(toolchain-binutils_bugurl)" + --with-pkgversion="$(toolchain-binutils_pkgversion)" + $(use_enable static-libs static) + $(use_with zstd) + + # Disable modules that are in a combined binutils/gdb tree, bug #490566 + --disable-{gdb,gdbserver,libbacktrace,libdecnumber,readline,sim} + # Strip out broken static link flags: https://gcc.gnu.org/PR56750 + --without-stage1-ldflags + # Change SONAME to avoid conflict across {native,cross}/binutils, binutils-libs. bug #666100 + --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st) + + $(use_with debuginfod) + + # Avoid automagic dev-libs/msgpack dep, bug #865875 + --without-msgpack + + # Allow user to opt into CET for host libraries. + # Ideally we would like automagic-or-disabled here. + # But the check does not quite work on i686: bug #760926. + $(use_enable cet) + + # We can enable this by default in future, but it's brand new + # in 2.39 with several bugs: + # - Doesn't build on musl (https://sourceware.org/bugzilla/show_bug.cgi?id=29477) + # - No man pages (https://sourceware.org/bugzilla/show_bug.cgi?id=29521) + # - Broken at runtime without Java (https://sourceware.org/bugzilla/show_bug.cgi?id=29479) + # - binutils-config (and this ebuild?) needs adaptation first (https://bugs.gentoo.org/865113) + $(use_enable gprofng) + ) + + case ${CTARGET} in + x86_64-*|aarch64*|arm64*|i[3456]*) + # These hardening options are available from 2.39+ but + # they unconditionally enable the behaviour even on arches + # where e.g. execstacks can't be avoided. + # See https://sourceware.org/bugzilla/show_bug.cgi?id=29592. + # + # TODO: Get the logic for this fixed upstream so it doesn't + # create impossible broken combinations on some arches, like mips. + # + # TODO: Get the logic for this fixed upstream so --disable-* works + # as expected. + myconf+=( + --enable-warn-execstack=yes + --enable-warn-rwx-segments=yes + ) + + if use hardened ; then + myconf+=( + # TOOD: breaks glibc test suite + #--enable-error-execstack=yes + #--enable-error-rwx-segments=yes + --enable-default-execstack=no + ) + fi + ;; + *) + ;; + esac + + if use elibc_musl ; then + # Override our earlier setting for musl, as textrels don't + # work there at all. See bug #707660. + myconf+=( + --enable-textrel-check=error + ) + fi + + if use test || { use pgo && tc-is-lto ; } ; then + # -Wa,* needs to be consistent everywhere or lto-wrapper will complain + filter-flags '-Wa,*' + fi + + if ! is_cross ; then + myconf+=( $(use_enable pgo pgo-build $(tc-is-lto && echo "lto" || echo "yes")) ) + + if use pgo ; then + # We let configure handle it for us because it has to run + # the testsuite later on for profiling, and LTO isn't compatible + # with the testsuite. + filter-lto + + export BUILD_CFLAGS="${CFLAGS}" + fi + fi + + ECONF_SOURCE="${S}" econf "${myconf[@]}" + + # Prevent makeinfo from running if doc is unset. + if ! use doc ; then + sed -i \ + -e '/^MAKEINFO/s:=.*:= true:' \ + Makefile || die + fi +} + +src_compile() { + cd "${MY_BUILDDIR}" || die + + # see Note [tooldir hack for ldscripts] + # see linker prefix patch + emake \ + tooldir="${EPREFIX}${TOOLPATH}" \ + gentoo_prefix=$(usex prefix-guest "${EPREFIX}"/usr /usr) \ + all + + # only build info pages if the user wants them + if use doc ; then + emake info + fi + + # we nuke the manpages when we're left with junk + # (like when we bootstrap, no perl -> no manpages) + find . -name '*.1' -a -size 0 -delete +} + +src_test() { + cd "${MY_BUILDDIR}" || die + + ( + # Tests don't expect LTO + filter-lto + + # lto-wrapper warnings which confuse tests + filter-flags '-Wa,*' + + # bug #637066 + filter-flags -Wall -Wreturn-type + + emake -k check \ + CFLAGS_FOR_TARGET="${CFLAGS_FOR_TARGET:-${CFLAGS}}" \ + CXXFLAGS_FOR_TARGET="${CXXFLAGS_FOR_TARGET:-${CXXFLAGS}}" \ + LDFLAGS_FOR_TARGET="${LDFLAGS_FOR_TARGET:-${LDFLAGS}}" \ + CFLAGS="${CFLAGS}" \ + CXXFLAGS="${CXXFLAGS}" \ + LDFLAGS="${LDFLAGS}" + ) +} + +src_install() { + local x d + + cd "${MY_BUILDDIR}" || die + + # see Note [tooldir hack for ldscripts] + emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install + rm -rf "${ED}"/${LIBPATH}/bin || die + use static-libs || find "${ED}" -name '*.la' -delete + + # Newer versions of binutils get fancy with ${LIBPATH}, bug #171905 + cd "${ED}"/${LIBPATH} || die + for d in ../* ; do + [[ ${d} == ../${PV} ]] && continue + mv ${d}/* . || die + rmdir ${d} || die + done + + # Now we collect everything intp the proper SLOT-ed dirs + # When something is built to cross-compile, it installs into + # /usr/$CHOST/ by default ... we have to 'fix' that :) + if is_cross ; then + cd "${ED}"/${BINPATH} || die + for x in * ; do + mv ${x} ${x/${CTARGET}-} || die + done + + if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then + mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH} + mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/usr/${CHOST}/{include,lib} + fi + fi + + insinto ${INCPATH} + local libiberty_headers=( + # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir. + demangle.h + dyn-string.h + fibheap.h + hashtab.h + libiberty.h + objalloc.h + splay-tree.h + ) + doins "${libiberty_headers[@]/#/${S}/include/}" + if [[ -d ${ED}/${LIBPATH}/lib ]] ; then + mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/ || die + rm -r "${ED}"/${LIBPATH}/lib || die + fi + + # Generate an env.d entry for this binutils + insinto /etc/env.d/binutils + cat <<-EOF > "${T}"/env.d + TARGET="${CTARGET}" + VER="${PV}" + LIBPATH="${EPREFIX}${LIBPATH}" + EOF + newins "${T}"/env.d ${CTARGET}-${PV} + + # Handle documentation + if ! is_cross ; then + cd "${S}" || die + dodoc README + + docinto bfd + dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO + + docinto binutils + dodoc binutils/ChangeLog binutils/NEWS binutils/README + + docinto gas + dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README* + + docinto gprof + dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl + + docinto ld + dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO + + docinto libiberty + dodoc libiberty/ChangeLog* libiberty/README + + docinto opcodes + dodoc opcodes/ChangeLog* + fi + + # Remove shared info pages + rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info} + + docompress "${DATAPATH}"/{info,man} + + # Trim all empty dirs + find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null +} + +pkg_postinst() { + # Make sure this ${CTARGET} has a binutils version selected + [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0 + binutils-config ${CTARGET}-${PV} || eerror binutils-config returned an error +} + +pkg_postrm() { + local current_profile=$(binutils-config -c ${CTARGET}) + + # If no other versions exist, then uninstall for this + # target ... otherwise, switch to the newest version + # Note: only do this if this version is unmerged. We + # rerun binutils-config if this is a remerge, as + # we want the mtimes on the symlinks updated (if + # it is the same as the current selected profile) + if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then + local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}') + choice=${choice//$'\n'/ } + choice=${choice/* } + if [[ -z ${choice} ]] ; then + binutils-config -u ${CTARGET} || eerror binutils-config returned an error + else + binutils-config ${choice} || eerror binutils-config returned an error + fi + elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then + binutils-config ${CTARGET}-${PV} || eerror binutils-config returned an error + fi +} + +# Note [slotting support] +# ----------------------- +# Gentoo's layout for binutils files is non-standard as Gentoo +# supports slotted installation for binutils. Many tools +# still expect binutils to reside in known locations. +# binutils-config package restores symlinks into known locations, +# like: +# /usr/bin/${CTARGET}- +# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips +# /usr/include/ +# +# Note [tooldir hack for ldscripts] +# --------------------------------- +# Build system does not allow ./configure to tweak every location +# we need for slotting binutils hence all the shuffling in +# src_install(). This note is about SCRIPTDIR define handling. +# +# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value +# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib' +# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time. +# Thus we can't just move files around after compilation finished. +# +# Our goal is the following: +# - at build-time set scriptdir to point to symlinked location: +# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case) +# - at install-time set scriptdir to point to slotted location: +# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV} diff --git a/sys-devel/binutils/binutils-9999.ebuild b/sys-devel/binutils/binutils-9999.ebuild new file mode 100644 index 0000000..c05f152 --- /dev/null +++ b/sys-devel/binutils/binutils-9999.ebuild @@ -0,0 +1,557 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 + +inherit libtool flag-o-matic gnuconfig strip-linguas toolchain-funcs + +DESCRIPTION="Tools necessary to build programs" +HOMEPAGE="https://sourceware.org/binutils/" + +LICENSE="GPL-3+" +IUSE="cet debuginfod doc gold gprofng hardened multitarget +nls pgo +plugins static-libs test vanilla zstd" + +# Variables that can be set here (ignored for live ebuilds) +# PATCH_VER - the patchset version +# Default: empty, no patching +# PATCH_BINUTILS_VER - the binutils version in the patchset name +# - Default: PV +# PATCH_DEV - Use download URI https://dev.gentoo.org/~{PATCH_DEV}/distfiles/... +# for the patchsets + +PATCH_VER=1 +PATCH_DEV=dilfridge + +if [[ ${PV} == 9999 ]]; then + inherit git-r3 + SLOT=${PV} +elif [[ ${PV} == *9999 ]]; then + inherit git-r3 + SLOT=$(ver_cut 1-2) +else + PATCH_BINUTILS_VER=${PATCH_BINUTILS_VER:-${PV}} + PATCH_DEV=${PATCH_DEV:-dilfridge} + SRC_URI="mirror://gnu/binutils/binutils-${PV}.tar.xz https://sourceware.org/pub/binutils/releases/binutils-${PV}.tar.xz https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PV}.tar.xz" + [[ -z ${PATCH_VER} ]] || SRC_URI="${SRC_URI} + https://dev.gentoo.org/~${PATCH_DEV}/distfiles/binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz" + SLOT=$(ver_cut 1-2) + #KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86" +fi + +# +# The cross-compile logic +# +export CTARGET=${CTARGET:-${CHOST}} +if [[ ${CTARGET} == ${CHOST} ]] ; then + if [[ ${CATEGORY} == cross-* ]] ; then + export CTARGET=${CATEGORY#cross-} + fi +fi +is_cross() { [[ ${CHOST} != ${CTARGET} ]] ; } + +# +# The dependencies +# +RDEPEND=" + >=sys-devel/binutils-config-3 + sys-libs/zlib + debuginfod? ( + dev-libs/elfutils[debuginfod(-)] + ) + zstd? ( app-arch/zstd:= ) +" +DEPEND="${RDEPEND}" +BDEPEND=" + doc? ( sys-apps/texinfo ) + pgo? ( + dev-util/dejagnu + app-alternatives/bc + ) + test? ( + dev-util/dejagnu + app-alternatives/bc + ) + nls? ( sys-devel/gettext ) + zstd? ( virtual/pkgconfig ) + app-alternatives/lex + app-alternatives/yacc +" + +RESTRICT="!test? ( test )" + +MY_BUILDDIR=${WORKDIR}/build + +src_unpack() { + if [[ ${PV} == *9999 ]] ; then + EGIT_REPO_URI="https://anongit.gentoo.org/git/proj/toolchain/binutils-patches.git" + EGIT_CHECKOUT_DIR=${WORKDIR}/patches-git + git-r3_src_unpack + mv patches-git/9999 patch || die + + if [[ ${PV} != 9999 ]] ; then + EGIT_BRANCH=binutils-$(ver_cut 1)_$(ver_cut 2)-branch + fi + EGIT_REPO_URI="https://sourceware.org/git/binutils-gdb.git" + S=${WORKDIR}/binutils + EGIT_CHECKOUT_DIR=${S} + git-r3_src_unpack + else + unpack ${P/-hppa64/}.tar.xz + + cd "${WORKDIR}" || die + unpack binutils-${PATCH_BINUTILS_VER}-patches-${PATCH_VER}.tar.xz + + # _p patch versions are Gentoo specific tarballs ... + local dir=${P%_p?} + dir=${dir/-hppa64/} + + S=${WORKDIR}/${dir} + fi + + cd "${WORKDIR}" || die + mkdir -p "${MY_BUILDDIR}" || die +} + +src_prepare() { + local patchsetname + if [[ ${PV} == 9999 ]] ; then + patchsetname="from git master" + elif [[ ${PV} == *9999 ]] ; then + patchsetname="from git branch ${EGIT_BRANCH}" + else + patchsetname="${PATCH_BINUTILS_VER}-${PATCH_VER}" + fi + + if [[ -n ${PATCH_VER} ]] || [[ ${PV} == *9999 ]] ; then + if ! use vanilla; then + einfo "Applying binutils patchset ${patchsetname}" + eapply "${WORKDIR}/patch" + einfo "Done." + + # This is applied conditionally for now just out of caution. + # It should be okay on non-prefix systems though. See bug #892549. + if is_cross || use prefix; then + eapply "${FILESDIR}"/binutils-2.40-linker-search-path.patch \ + "${FILESDIR}"/binutils-2.41-linker-prefix.patch + fi + fi + fi + + # Make sure our explicit libdir paths don't get clobbered, bug #562460 + sed -i \ + -e 's:@bfdlibdir@:@libdir@:g' \ + -e 's:@bfdincludedir@:@includedir@:g' \ + {bfd,opcodes}/Makefile.in || die + + # Apply things from PATCHES and user dirs + default + + # Run misc portage update scripts + gnuconfig_update + elibtoolize --portage --no-uclibc +} + +toolchain-binutils_bugurl() { + printf "https://bugs.gentoo.org/" +} +toolchain-binutils_pkgversion() { + printf "Gentoo ${PV}" + [[ -n ${PATCH_VER} ]] && printf " p${PATCH_VER}" +} + +src_configure() { + # See https://www.gnu.org/software/make/manual/html_node/Parallel-Output.html + # Avoid really confusing logs from subconfigure spam, makes logs far + # more legible. + MAKEOPTS="--output-sync=line ${MAKEOPTS}" + + # Setup some paths + LIBPATH=/usr/$(get_libdir)/binutils/${CTARGET}/${PV} + INCPATH=${LIBPATH}/include + DATAPATH=/usr/share/binutils-data/${CTARGET}/${PV} + if is_cross ; then + TOOLPATH=/usr/${CHOST}/${CTARGET} + else + TOOLPATH=/usr/${CTARGET} + fi + BINPATH=${TOOLPATH}/binutils-bin/${PV} + + # Make sure we filter $LINGUAS so that only ones that + # actually work make it through, bug #42033 + strip-linguas -u */po + + # Keep things sane + strip-flags + use cet && filter-flags -mindirect-branch -mindirect-branch=* + use elibc_musl && append-ldflags -Wl,-z,stack-size=2097152 + + local x + echo + for x in CATEGORY CBUILD CHOST CTARGET CFLAGS LDFLAGS ; do + einfo "$(printf '%10s' ${x}:) ${!x}" + done + echo + + cd "${MY_BUILDDIR}" || die + local myconf=() + + if use plugins ; then + myconf+=( --enable-plugins ) + fi + # enable gold (installed as ld.gold) and ld's plugin architecture + if use gold ; then + myconf+=( --enable-gold ) + fi + + if use nls ; then + myconf+=( --without-included-gettext ) + else + myconf+=( --disable-nls ) + fi + + myconf+=( --with-system-zlib ) + + # For bi-arch systems, enable a 64bit bfd. This matches the bi-arch + # logic in toolchain.eclass. bug #446946 + # + # We used to do it for everyone, but it's slow on 32bit arches. bug #438522 + case $(tc-arch) in + ppc|sparc|x86) myconf+=( --enable-64-bit-bfd ) ;; + esac + + use multitarget && myconf+=( --enable-targets=all --enable-64-bit-bfd ) + + [[ -n ${CBUILD} ]] && myconf+=( --build=${CBUILD} ) + + is_cross && myconf+=( + --with-sysroot="${EPREFIX}"/usr/${CTARGET} + --enable-poison-system-directories + ) + + myconf+=( --enable-secureplt ) + + # mips can't do hash-style=gnu ... + if [[ $(tc-arch) != mips ]] ; then + myconf+=( --enable-default-hash-style=gnu ) + fi + + myconf+=( + --prefix="${EPREFIX}"/usr + --host=${CHOST} + --target=${CTARGET} + --datadir="${EPREFIX}"${DATAPATH} + --datarootdir="${EPREFIX}"${DATAPATH} + --infodir="${EPREFIX}"${DATAPATH}/info + --mandir="${EPREFIX}"${DATAPATH}/man + --bindir="${EPREFIX}"${BINPATH} + --libdir="${EPREFIX}"${LIBPATH} + --libexecdir="${EPREFIX}"${LIBPATH} + --includedir="${EPREFIX}"${INCPATH} + # portage's econf() does not detect presence of --d-d-t + # because it greps only top-level ./configure. But not + # libiberty's or bfd's configure. + --disable-dependency-tracking + --disable-silent-rules + --enable-obsolete + --enable-shared + --enable-threads + --enable-relro + --enable-install-libiberty + --enable-textrel-check=$(usex hardened error warning) + # Things to think about + #--enable-deterministic-archives + --enable-new-dtags + --disable-jansson + --disable-werror + --with-bugurl="$(toolchain-binutils_bugurl)" + --with-pkgversion="$(toolchain-binutils_pkgversion)" + $(use_enable static-libs static) + $(use_with zstd) + + # Disable modules that are in a combined binutils/gdb tree, bug #490566 + --disable-{gdb,gdbserver,libbacktrace,libdecnumber,readline,sim} + # Strip out broken static link flags: https://gcc.gnu.org/PR56750 + --without-stage1-ldflags + # Change SONAME to avoid conflict across {native,cross}/binutils, binutils-libs. bug #666100 + --with-extra-soversion-suffix=gentoo-${CATEGORY}-${PN}-$(usex multitarget mt st) + + $(use_with debuginfod) + + # Avoid automagic dev-libs/msgpack dep, bug #865875 + --without-msgpack + + # Allow user to opt into CET for host libraries. + # Ideally we would like automagic-or-disabled here. + # But the check does not quite work on i686: bug #760926. + $(use_enable cet) + + # We can enable this by default in future, but it's brand new + # in 2.39 with several bugs: + # - Doesn't build on musl (https://sourceware.org/bugzilla/show_bug.cgi?id=29477) + # - No man pages (https://sourceware.org/bugzilla/show_bug.cgi?id=29521) + # - Broken at runtime without Java (https://sourceware.org/bugzilla/show_bug.cgi?id=29479) + # - binutils-config (and this ebuild?) needs adaptation first (https://bugs.gentoo.org/865113) + $(use_enable gprofng) + ) + + case ${CTARGET} in + x86_64-*|aarch64*|arm64*|i[3456]*) + # These hardening options are available from 2.39+ but + # they unconditionally enable the behaviour even on arches + # where e.g. execstacks can't be avoided. + # See https://sourceware.org/bugzilla/show_bug.cgi?id=29592. + # + # TODO: Get the logic for this fixed upstream so it doesn't + # create impossible broken combinations on some arches, like mips. + # + # TODO: Get the logic for this fixed upstream so --disable-* works + # as expected. + myconf+=( + --enable-warn-execstack=yes + --enable-warn-rwx-segments=yes + ) + + if use hardened ; then + myconf+=( + # TOOD: breaks glibc test suite + #--enable-error-execstack=yes + #--enable-error-rwx-segments=yes + --enable-default-execstack=no + ) + fi + ;; + *) + ;; + esac + + if use elibc_musl ; then + # Override our earlier setting for musl, as textrels don't + # work there at all. See bug #707660. + myconf+=( + --enable-textrel-check=error + ) + fi + + if use test || { use pgo && tc-is-lto ; } ; then + # -Wa,* needs to be consistent everywhere or lto-wrapper will complain + filter-flags '-Wa,*' + fi + + if ! is_cross ; then + myconf+=( $(use_enable pgo pgo-build $(tc-is-lto && echo "lto" || echo "yes")) ) + + if use pgo ; then + # We let configure handle it for us because it has to run + # the testsuite later on for profiling, and LTO isn't compatible + # with the testsuite. + filter-lto + + export BUILD_CFLAGS="${CFLAGS}" + fi + fi + + ECONF_SOURCE="${S}" econf "${myconf[@]}" + + # Prevent makeinfo from running if doc is unset. + if ! use doc ; then + sed -i \ + -e '/^MAKEINFO/s:=.*:= true:' \ + Makefile || die + fi +} + +src_compile() { + cd "${MY_BUILDDIR}" || die + + # see Note [tooldir hack for ldscripts] + # see linker prefix patch + emake \ + tooldir="${EPREFIX}${TOOLPATH}" \ + gentoo_prefix=$(usex prefix-guest "${EPREFIX}"/usr /usr) \ + all + + # only build info pages if the user wants them + if use doc ; then + emake info + fi + + # we nuke the manpages when we're left with junk + # (like when we bootstrap, no perl -> no manpages) + find . -name '*.1' -a -size 0 -delete +} + +src_test() { + cd "${MY_BUILDDIR}" || die + + ( + # Tests don't expect LTO + filter-lto + + # lto-wrapper warnings which confuse tests + filter-flags '-Wa,*' + + # bug #637066 + filter-flags -Wall -Wreturn-type + + emake -k check \ + CFLAGS_FOR_TARGET="${CFLAGS_FOR_TARGET:-${CFLAGS}}" \ + CXXFLAGS_FOR_TARGET="${CXXFLAGS_FOR_TARGET:-${CXXFLAGS}}" \ + LDFLAGS_FOR_TARGET="${LDFLAGS_FOR_TARGET:-${LDFLAGS}}" \ + CFLAGS="${CFLAGS}" \ + CXXFLAGS="${CXXFLAGS}" \ + LDFLAGS="${LDFLAGS}" + ) +} + +src_install() { + local x d + + cd "${MY_BUILDDIR}" || die + + # see Note [tooldir hack for ldscripts] + emake DESTDIR="${D}" tooldir="${EPREFIX}${LIBPATH}" install + rm -rf "${ED}"/${LIBPATH}/bin || die + use static-libs || find "${ED}" -name '*.la' -delete + + # Newer versions of binutils get fancy with ${LIBPATH}, bug #171905 + cd "${ED}"/${LIBPATH} || die + for d in ../* ; do + [[ ${d} == ../${PV} ]] && continue + mv ${d}/* . || die + rmdir ${d} || die + done + + # Now we collect everything intp the proper SLOT-ed dirs + # When something is built to cross-compile, it installs into + # /usr/$CHOST/ by default ... we have to 'fix' that :) + if is_cross ; then + cd "${ED}"/${BINPATH} || die + for x in * ; do + mv ${x} ${x/${CTARGET}-} || die + done + + if [[ -d ${ED}/usr/${CHOST}/${CTARGET} ]] ; then + mv "${ED}"/usr/${CHOST}/${CTARGET}/include "${ED}"/${INCPATH} + mv "${ED}"/usr/${CHOST}/${CTARGET}/lib/* "${ED}"/${LIBPATH}/ + rm -r "${ED}"/usr/${CHOST}/{include,lib} + fi + fi + + insinto ${INCPATH} + local libiberty_headers=( + # Not all the libiberty headers. See libiberty/Makefile.in:install_to_libdir. + demangle.h + dyn-string.h + fibheap.h + hashtab.h + libiberty.h + objalloc.h + splay-tree.h + ) + doins "${libiberty_headers[@]/#/${S}/include/}" + if [[ -d ${ED}/${LIBPATH}/lib ]] ; then + mv "${ED}"/${LIBPATH}/lib/* "${ED}"/${LIBPATH}/ || die + rm -r "${ED}"/${LIBPATH}/lib || die + fi + + # Generate an env.d entry for this binutils + insinto /etc/env.d/binutils + cat <<-EOF > "${T}"/env.d + TARGET="${CTARGET}" + VER="${PV}" + LIBPATH="${EPREFIX}${LIBPATH}" + EOF + newins "${T}"/env.d ${CTARGET}-${PV} + + # Handle documentation + if ! is_cross ; then + cd "${S}" || die + dodoc README + + docinto bfd + dodoc bfd/ChangeLog* bfd/README bfd/PORTING bfd/TODO + + docinto binutils + dodoc binutils/ChangeLog binutils/NEWS binutils/README + + docinto gas + dodoc gas/ChangeLog* gas/CONTRIBUTORS gas/NEWS gas/README* + + docinto gprof + dodoc gprof/ChangeLog* gprof/TEST gprof/TODO gprof/bbconv.pl + + docinto ld + dodoc ld/ChangeLog* ld/README ld/NEWS ld/TODO + + docinto libiberty + dodoc libiberty/ChangeLog* libiberty/README + + docinto opcodes + dodoc opcodes/ChangeLog* + fi + + # Remove shared info pages + rm -f "${ED}"/${DATAPATH}/info/{dir,configure.info,standards.info} + + docompress "${DATAPATH}"/{info,man} + + # Trim all empty dirs + find "${ED}" -depth -type d -exec rmdir {} + 2>/dev/null +} + +pkg_postinst() { + # Make sure this ${CTARGET} has a binutils version selected + [[ -e ${EROOT}/etc/env.d/binutils/config-${CTARGET} ]] && return 0 + binutils-config ${CTARGET}-${PV} || eerror binutils-config returned an error +} + +pkg_postrm() { + local current_profile=$(binutils-config -c ${CTARGET}) + + # If no other versions exist, then uninstall for this + # target ... otherwise, switch to the newest version + # Note: only do this if this version is unmerged. We + # rerun binutils-config if this is a remerge, as + # we want the mtimes on the symlinks updated (if + # it is the same as the current selected profile) + if [[ ! -e ${EPREFIX}${BINPATH}/ld ]] && [[ ${current_profile} == ${CTARGET}-${PV} ]] ; then + local choice=$(binutils-config -l | grep ${CTARGET} | awk '{print $2}') + choice=${choice//$'\n'/ } + choice=${choice/* } + if [[ -z ${choice} ]] ; then + binutils-config -u ${CTARGET} || eerror binutils-config returned an error + else + binutils-config ${choice} || eerror binutils-config returned an error + fi + elif [[ $(CHOST=${CTARGET} binutils-config -c) == ${CTARGET}-${PV} ]] ; then + binutils-config ${CTARGET}-${PV} || eerror binutils-config returned an error + fi +} + +# Note [slotting support] +# ----------------------- +# Gentoo's layout for binutils files is non-standard as Gentoo +# supports slotted installation for binutils. Many tools +# still expect binutils to reside in known locations. +# binutils-config package restores symlinks into known locations, +# like: +# /usr/bin/${CTARGET}- +# /usr/bin/${CHOST}/${CTARGET}/lib/ldscrips +# /usr/include/ +# +# Note [tooldir hack for ldscripts] +# --------------------------------- +# Build system does not allow ./configure to tweak every location +# we need for slotting binutils hence all the shuffling in +# src_install(). This note is about SCRIPTDIR define handling. +# +# SCRIPTDIR defines 'ldscripts/' directory location. SCRIPTDIR value +# is set at build-time in ld/Makefile.am as: 'scriptdir = $(tooldir)/lib' +# and hardcoded as -DSCRIPTDIR='"$(scriptdir)"' at compile time. +# Thus we can't just move files around after compilation finished. +# +# Our goal is the following: +# - at build-time set scriptdir to point to symlinked location: +# ${TOOLPATH}: /usr/${CHOST} (or /usr/${CHOST}/${CTARGET} for cross-case) +# - at install-time set scriptdir to point to slotted location: +# ${LIBPATH}: /usr/$(get_libdir)/binutils/${CTARGET}/${PV} diff --git a/sys-devel/binutils/files/binutils-2.29.1-nogoldtest.patch b/sys-devel/binutils/files/binutils-2.29.1-nogoldtest.patch new file mode 100644 index 0000000..8e06699 --- /dev/null +++ b/sys-devel/binutils/files/binutils-2.29.1-nogoldtest.patch @@ -0,0 +1,27 @@ +From 40f6e93e5078f16897f23856886566fe3b546206 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Andreas=20K=2E=20H=C3=BCttel?= +Date: Fri, 3 Nov 2017 21:51:35 +0100 +Subject: [PATCH] Gentoo: Disable gold testsuite for users since it fails + upstream + +https://bugs.gentoo.org/634348 +https://sourceware.org/bugzilla/show_bug.cgi?id=21090 +--- + Makefile.in | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/Makefile.in b/Makefile.in +index 3acb83b8de..49de829bfa 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -2340,7 +2340,6 @@ check-host: \ + maybe-check-mpc \ + maybe-check-isl \ + maybe-check-libelf \ +- maybe-check-gold \ + maybe-check-gprof \ + maybe-check-intl \ + maybe-check-tcl \ +-- +2.15.0 + diff --git a/sys-devel/binutils/files/binutils-2.32-gcc-10.patch b/sys-devel/binutils/files/binutils-2.32-gcc-10.patch new file mode 100644 index 0000000..fa70694 --- /dev/null +++ b/sys-devel/binutils/files/binutils-2.32-gcc-10.patch @@ -0,0 +1,16 @@ +commit a3972330f49f81b3bea64af0970d22f42ae56ec3 +Author: Martin Liska +Date: Fri Jun 7 07:36:52 2019 +0200 + + Fix a missing include of + +--- a/gold/errors.h ++++ b/gold/errors.h +@@ -24,6 +24,7 @@ + #define GOLD_ERRORS_H + + #include ++#include + + #include "gold-threads.h" + diff --git a/sys-devel/binutils/files/binutils-2.33-gcc-10.patch b/sys-devel/binutils/files/binutils-2.33-gcc-10.patch new file mode 100644 index 0000000..9e1a999 --- /dev/null +++ b/sys-devel/binutils/files/binutils-2.33-gcc-10.patch @@ -0,0 +1,39 @@ +binutils: drop redundant 'program_name' definition + +https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commitdiff;h=0b398d69acde3377dfbbeb8a4cfe87ae8c8562fa +--- a/binutils/coffdump.c ++++ b/binutils/coffdump.c +@@ -456,8 +456,6 @@ coff_dump (struct coff_ofile *ptr) + dump_coff_section (ptr->sections + i); + } + +-char * program_name; +- + static void + show_usage (FILE *file, int status) + { +--- a/binutils/srconv.c ++++ b/binutils/srconv.c +@@ -1687,8 +1687,6 @@ prescan (struct coff_ofile *otree) + } + } + +-char *program_name; +- + ATTRIBUTE_NORETURN static void + show_usage (FILE *ffile, int status) + { +--- a/binutils/sysdump.c ++++ b/binutils/sysdump.c +@@ -633,8 +633,6 @@ module (void) + } + } + +-char *program_name; +- + ATTRIBUTE_NORETURN static void + show_usage (FILE *ffile, int status) + { +-- +2.25.0 + diff --git a/sys-devel/binutils/files/binutils-2.35.1-cet.patch b/sys-devel/binutils/files/binutils-2.35.1-cet.patch new file mode 100644 index 0000000..7477ff9 --- /dev/null +++ b/sys-devel/binutils/files/binutils-2.35.1-cet.patch @@ -0,0 +1,103 @@ +https://bugs.gentoo.org/771765 +https://sourceware.org/PR27397 + +On i586-like CPUs endbr32 added by -Wl,-z,ibt,-z,shstk +generates crashing binaries and causes ./configure failure. + +From 847e4b3207f97762dc641db8d3b188081c3370c3 Mon Sep 17 00:00:00 2001 +From: "H.J. Lu" +Date: Fri, 12 Feb 2021 16:30:23 -0800 +Subject: [PATCH] GCC_CET_HOST_FLAGS: Check if host supports multi-byte NOPs + +--- + config/cet.m4 | 19 ++++++++++++++++--- + libiberty/configure | 29 +++++++++++++++++++++++++++++ + 2 files changed, 45 insertions(+), 3 deletions(-) + +diff --git a/config/cet.m4 b/config/cet.m4 +index c67fb4f35b6..7718be1afe8 100644 +--- a/config/cet.m4 ++++ b/config/cet.m4 +@@ -130,6 +130,18 @@ fi + if test x$may_have_cet = xyes; then + if test x$cross_compiling = xno; then + AC_TRY_RUN([ ++int ++main () ++{ ++ asm ("endbr32"); ++ return 0; ++} ++ ], ++ [have_multi_byte_nop=yes], ++ [have_multi_byte_nop=no]) ++ have_cet=no ++ if test x$have_multi_byte_nop = xyes; then ++ AC_TRY_RUN([ + static void + foo (void) + { +@@ -155,9 +167,10 @@ main () + bar (); + return 0; + } +- ], +- [have_cet=no], +- [have_cet=yes]) ++ ], ++ [have_cet=no], ++ [have_cet=yes]) ++ fi + if test x$enable_cet = xno -a x$have_cet = xyes; then + AC_MSG_ERROR([Intel CET must be enabled on Intel CET enabled host]) + fi +diff --git a/libiberty/configure b/libiberty/configure +index 160b8c9e8b1..29a690d44fc 100755 +--- a/libiberty/configure ++++ b/libiberty/configure +@@ -5539,6 +5539,34 @@ else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + ++int ++main () ++{ ++ asm ("endbr32"); ++ return 0; ++} ++ ++_ACEOF ++if ac_fn_c_try_run "$LINENO"; then : ++ have_multi_byte_nop=yes ++else ++ have_multi_byte_nop=no ++fi ++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ ++ conftest.$ac_objext conftest.beam conftest.$ac_ext ++fi ++ ++ have_cet=no ++ if test x$have_multi_byte_nop = xyes; then ++ if test "$cross_compiling" = yes; then : ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 ++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} ++as_fn_error $? "cannot run test program while cross compiling ++See \`config.log' for more details" "$LINENO" 5; } ++else ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ + static void + foo (void) + { +@@ -5575,6 +5603,7 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext + fi + ++ fi + if test x$enable_cet = xno -a x$have_cet = xyes; then + as_fn_error $? "Intel CET must be enabled on Intel CET enabled host" "$LINENO" 5 + fi +-- +2.29.2 + diff --git a/sys-devel/binutils/files/binutils-2.35.2-powerpc-tests.patch b/sys-devel/binutils/files/binutils-2.35.2-powerpc-tests.patch new file mode 100644 index 0000000..711194b --- /dev/null +++ b/sys-devel/binutils/files/binutils-2.35.2-powerpc-tests.patch @@ -0,0 +1,136 @@ +From: Alan Modra +Date: Mon, 16 Nov 2020 22:08:05 +0000 (+1030) +Subject: PR26882, --enable-textrel-check=warning test failures on powerpc +X-Git-Tag: binutils-2_36~578 +X-Git-Url: https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff_plain;h=7cc340055d3993a25ded914aef88f784f16d46bc;hp=6f2643dbd2192e6fff77a5e6fec5141d209fd7d0 + +PR26882, --enable-textrel-check=warning test failures on powerpc + + PR 26882 + * testsuite/ld-powerpc/dotsym3.d: Add "-z notext" to ld options. + * testsuite/ld-powerpc/dotsym4.d: Likewise. + * testsuite/ld-powerpc/ppc476-shared.d: Likewise. + * testsuite/ld-powerpc/ppc476-shared2.d: Likewise. + * testsuite/ld-powerpc/powerpc.exp: Likewise for various tests. + * testsuite/ld-undefined/weak-fundef.s: Add BLPLT variant. + * testsuite/ld-undefined/weak-undef.exp: Define BLPLT for ppc32. +--- + +diff --git a/ld/testsuite/ld-powerpc/dotsym3.d b/ld/testsuite/ld-powerpc/dotsym3.d +index fac2f8ec732..215a9c2a6c1 100644 +--- a/ld/testsuite/ld-powerpc/dotsym3.d ++++ b/ld/testsuite/ld-powerpc/dotsym3.d +@@ -1,7 +1,7 @@ + #source: nodotsym.s + #source: dotsymref.s + #as: -a64 +-#ld: -melf64ppc -Ttext=0x1000 -shared ++#ld: -melf64ppc -Ttext=0x1000 -shared -z notext + #objdump: -dR + + .*: file format .* +diff --git a/ld/testsuite/ld-powerpc/dotsym4.d b/ld/testsuite/ld-powerpc/dotsym4.d +index fdd92f3da76..d774e83bcf6 100644 +--- a/ld/testsuite/ld-powerpc/dotsym4.d ++++ b/ld/testsuite/ld-powerpc/dotsym4.d +@@ -1,7 +1,7 @@ + #source: dotsymref.s + #source: nodotsym.s + #as: -a64 +-#ld: -melf64ppc -Ttext=0x1000 -shared ++#ld: -melf64ppc -Ttext=0x1000 -shared -z notext + #objdump: -dR + + .*: file format .* +diff --git a/ld/testsuite/ld-powerpc/powerpc.exp b/ld/testsuite/ld-powerpc/powerpc.exp +index 74af28d7421..2cbefb841c2 100644 +--- a/ld/testsuite/ld-powerpc/powerpc.exp ++++ b/ld/testsuite/ld-powerpc/powerpc.exp +@@ -99,7 +99,7 @@ proc supports_ppc64 { } { + # readelf: Apply readelf options on result. Compare with regex (last arg). + + set ppcelftests { +- {"Reloc section order" "-melf32ppc -shared -z nocombreloc" "" "-a32" {reloc.s} ++ {"Reloc section order" "-melf32ppc -shared -z nocombreloc -z notext" "" "-a32" {reloc.s} + {{objdump -hw reloc.d}} "reloc.so"} + {"APUinfo section processing" "-melf32ppc" "" + "-a32 -me500" {apuinfo1.s apuinfo-nul.s apuinfo2.s} +@@ -134,7 +134,7 @@ set ppcelftests { + {{readelf -WSsrl tlsexe32no.r} {objdump -dr tlsexe32no.d} + {objdump -sj.got tlsexe32no.g} {objdump -sj.tdata tlsexe32.t}} + "tlsexe32no"} +- {"TLS32 shared" "-shared -melf32ppc --no-plt-align --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tls32.o" "" "" {} ++ {"TLS32 shared" "-shared -melf32ppc --no-plt-align --no-ld-generated-unwind-info --hash-style=sysv -z notext tmpdir/tls32.o" "" "" {} + {{readelf -WSsrl tlsso32.r} {objdump -dr tlsso32.d} + {objdump -sj.got tlsso32.g} {objdump -sj.tdata tlsso32.t}} + "tls32.so"} +@@ -202,7 +202,7 @@ set ppc64elftests { + {{readelf -WSsrl tlsexeno.r} {objdump -dr tlsexeno.d} + {objdump -sj.got tlsexeno.g} {objdump -sj.tdata tlsexe.t}} + "tlsexeno"} +- {"TLS shared" "-shared -melf64ppc --no-plt-align --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tls.o" "" "" {} ++ {"TLS shared" "-shared -melf64ppc --no-plt-align --no-ld-generated-unwind-info --hash-style=sysv -z notext tmpdir/tls.o" "" "" {} + {{readelf -WSsrl tlsso.r} {objdump -dr tlsso.d} + {objdump -sj.got tlsso.g} {objdump -sj.tdata tlsso.t}} + "tls.so"} +@@ -229,7 +229,7 @@ set ppc64elftests { + {{readelf -WSsrl tlsexetoc.r} {objdump -dr tlsexetocno.d} + {objdump -sj.got tlsexetocno.g} {objdump -sj.tdata tlsexetoc.t}} + "tlsexetocno"} +- {"TLSTOC shared" "-shared -melf64ppc --no-plt-align --no-ld-generated-unwind-info --hash-style=sysv tmpdir/tlstoc.o" "" "" {} ++ {"TLSTOC shared" "-shared -melf64ppc --no-plt-align --no-ld-generated-unwind-info --hash-style=sysv -z notext tmpdir/tlstoc.o" "" "" {} + {{readelf -WSsrl tlstocso.r} {objdump -dr tlstocso.d} + {objdump -sj.got tlstocso.g} {objdump -sj.tdata tlstocso.t}} + "tlstoc.so"} +diff --git a/ld/testsuite/ld-powerpc/ppc476-shared.d b/ld/testsuite/ld-powerpc/ppc476-shared.d +index 7953cb44e25..3b2cc8a155c 100644 +--- a/ld/testsuite/ld-powerpc/ppc476-shared.d ++++ b/ld/testsuite/ld-powerpc/ppc476-shared.d +@@ -1,6 +1,6 @@ + #source: ppc476-shared.s + #as: -a32 +-#ld: -melf32ppc -q -shared -z common-page-size=0x10000 --ppc476-workaround -T ppc476-shared.lnk ++#ld: -melf32ppc -q -shared -z common-page-size=0x10000 -z notext --ppc476-workaround -T ppc476-shared.lnk + #objdump: -dr + #target: powerpc*-*-* + +diff --git a/ld/testsuite/ld-powerpc/ppc476-shared2.d b/ld/testsuite/ld-powerpc/ppc476-shared2.d +index 26a5c41f988..48917fd4d92 100644 +--- a/ld/testsuite/ld-powerpc/ppc476-shared2.d ++++ b/ld/testsuite/ld-powerpc/ppc476-shared2.d +@@ -1,6 +1,6 @@ + #source: ppc476-shared.s + #as: -a32 +-#ld: -melf32ppc -shared -z common-page-size=0x10000 --ppc476-workaround -T ppc476-shared.lnk ++#ld: -melf32ppc -shared -z common-page-size=0x10000 -z notext --ppc476-workaround -T ppc476-shared.lnk + #objdump: -R + #target: powerpc*-*-* + +diff --git a/ld/testsuite/ld-undefined/weak-fundef.s b/ld/testsuite/ld-undefined/weak-fundef.s +index 2c20f799417..de8f641b6c2 100644 +--- a/ld/testsuite/ld-undefined/weak-fundef.s ++++ b/ld/testsuite/ld-undefined/weak-fundef.s +@@ -5,6 +5,9 @@ + bl undef_weak_fun + nop + .endif ++ .ifdef BLPLT ++ bl undef_weak_fun@plt ++ .endif + .ifdef CALLPLT + call undef_weak_fun@plt + .endif +diff --git a/ld/testsuite/ld-undefined/weak-undef.exp b/ld/testsuite/ld-undefined/weak-undef.exp +index 50c8e1483e3..14b6774c5bc 100644 +--- a/ld/testsuite/ld-undefined/weak-undef.exp ++++ b/ld/testsuite/ld-undefined/weak-undef.exp +@@ -105,7 +105,8 @@ set asflags "" + switch -glob $target_triplet { + aarch64* - + arm* - +- powerpc* { set asflags "--defsym BL=1" } ++ powerpc64* { set asflags "--defsym BL=1" } ++ powerpc* { set asflags "--defsym BLPLT=1" } + hppa* { set asflags "--defsym HPPA=1" } + i\[3-7\]86* - + x86_64* { set asflags "--defsym CALLPLT=1" } diff --git a/sys-devel/binutils/files/binutils-2.41-linker-prefix.patch b/sys-devel/binutils/files/binutils-2.41-linker-prefix.patch new file mode 100644 index 0000000..d97a155 --- /dev/null +++ b/sys-devel/binutils/files/binutils-2.41-linker-prefix.patch @@ -0,0 +1,56 @@ +https://bugs.gentoo.org/892549 +https://github.com/gentoo/binutils-gdb/pull/5 + +From 531bc1536dfc3070c1f7d03e98fa14bcb81fdcd0 Mon Sep 17 00:00:00 2001 +From: James Le Cuirot +Date: Sat, 23 Dec 2023 13:48:10 +0000 +Subject: [PATCH 2/2] ld: Allow a Gentoo-specific prefix to override the prefix + used by ld.bfd + +This prefix is only used to locate $prefix/etc/ld.so.conf, with $prefix +usually being /usr. This file is important on Gentoo Prefix systems, +where the /usr prefix is within another directory. The problem is that +Gentoo already passes the same directory as the sysroot, and ld.bfd +therefore looks for /myprefix/myprefix/usr/etc/ld.so.conf. + +The sysroot is dynamic, while the prefix is hardcoded. A hardcoded +prefix that isn't just /usr is unhelpful, not just because of the +doubled prefix issue above, but also because it prevents ld.bfd from +working effectively outside its native environment. We will therefore +hardcode it to just /usr. + +This change does not simply do that though and sets up a $gentoo_prefix +variable instead, with $prefix as a fallback. This is necessary because +Gentoo prefix-guest systems, which use the host's libc, do not apply a +sysroot like RAP prefix systems do. In that case, we must preserve the +existing behaviour. The binutils ebuild will be responsible for setting +this variable appropriately. +--- + ld/emultempl/elf.em | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/ld/emultempl/elf.em b/ld/emultempl/elf.em +index 3f67f8b09d9..78c8e909b6c 100644 +--- a/ld/emultempl/elf.em ++++ b/ld/emultempl/elf.em +@@ -138,7 +138,7 @@ gld${EMULATION_NAME}_before_plugin_all_symbols_read (void) + ldelf_before_plugin_all_symbols_read ($IS_LIBPATH, $IS_NATIVE, + $IS_LINUX_TARGET, + $IS_FREEBSD_TARGET, +- $ELFSIZE, "$prefix"); ++ $ELFSIZE, "${gentoo_prefix-${prefix}}"); + } + + /* This is called after all the input files have been opened. */ +@@ -147,7 +147,7 @@ static void + gld${EMULATION_NAME}_after_open (void) + { + ldelf_after_open ($IS_LIBPATH, $IS_NATIVE, +- $IS_LINUX_TARGET, $IS_FREEBSD_TARGET, $ELFSIZE, "$prefix"); ++ $IS_LINUX_TARGET, $IS_FREEBSD_TARGET, $ELFSIZE, "${gentoo_prefix-${prefix}}"); + } + + EOF +-- +2.43.0 + diff --git a/sys-devel/binutils/metadata.xml b/sys-devel/binutils/metadata.xml new file mode 100644 index 0000000..3cc1068 --- /dev/null +++ b/sys-devel/binutils/metadata.xml @@ -0,0 +1,21 @@ + + + + + toolchain@gentoo.org + Gentoo Toolchain Project + + + Enable Intel Control-flow Enforcement Technology. + Set ld to point to ld.gold instead of ld.bfd + Build ld.gold linker + Enable the next-generation gprofng profiler + Build binutils with Profile Guided Optimization (PGO) and LTO + Enable plugin support in tools + Adds support to binutils for cross compiling (does not work with gas) + Enable debuginfod support via dev-libs/elfutils libdebuginfod + + + cpe:/a:gnu:binutils + + diff --git a/www-client/firefox/Manifest b/www-client/firefox/Manifest new file mode 100644 index 0000000..086005b --- /dev/null +++ b/www-client/firefox/Manifest @@ -0,0 +1,201 @@ +DIST firefox-115.12.0esr-ach.xpi 458871 BLAKE2B 2248f7c3e97a1dbdd8faec8473763af575fc26a0a1ef6fc2f0d2d8994e2692dbb5eb6a304f58ec26ac856ff4d025e41542b0ef51652bb4bdb8b3c454f8e187cb SHA512 10006c2ac7120eebaa0070e067d48e5d841d17f66fa8dc6c7b1060888d9db324ffc46cb112c4924224b61812bff232fa852f75f5addc910b2240a83b30d7411e +DIST firefox-115.12.0esr-af.xpi 415033 BLAKE2B 9ed02f9444f6448f6d83c9dff2c2b3774742e3286230f2fbc5fabb01a3c754d0af61dd6d462e551bc546d73f2e94d78e591c199323545d1e8fb675d1ea7d1592 SHA512 caf804b635bccc5943c5884bdfa377a91b219e0b896fae6bbe1f087841e5959c9e3d452837f6461f24dc08f660105a0c950dbb639f55f6b6b1d18b6fbbe687ac +DIST firefox-115.12.0esr-an.xpi 499416 BLAKE2B 5d80997630dc31824a1a7d0ab948bb0bb7c986f84a5cd958dcc7a36d627899024d2e8b1fcdbb581a698b909aec8fae93c198c25808e37c63ef35911ccc31a831 SHA512 7128bba55aee22d753ce5b06395f920d5b389b4f0ae73c49458ba6ccfd20c79fb4a8cc4da670f4b7b50666b9d5dd8ee9983b28feef80d211cc74f83265a96d5d +DIST firefox-115.12.0esr-ar.xpi 605448 BLAKE2B 0ad4f9bc350d3045163958bc0436f2b1106def071c7cfb7f4fdff579310637ef490a9eb76d2718f1d02c5d354d2c3b707f687915308501427fa3ba52c2db5e3f SHA512 9267276fda3fcc8d189d3c5885b1b748401e634ec5e9c6a70461702058cbd85d385dc479a89168311783662eba94e3eca2bc82f5c2e76d6efd1e96ffa5a440d7 +DIST firefox-115.12.0esr-ast.xpi 491178 BLAKE2B b168585a78d30f93026d957c49aa56e62072bc1b13031d8c4b02c4da2b56e17aa2f0045978aef38a6ff4af4f7700c2301369e9c646ba50e5983844a9d4b77709 SHA512 f68b577e9118218c4a3afcdc9332efc1f6acb1522bcdf062f8ba5fba471305a26a817fa023af03e11c9df975771d23453ac63872fb113bd5dc04fbddf2eec28d +DIST firefox-115.12.0esr-az.xpi 485943 BLAKE2B 39433d83487517305966792cd6ab1da29578d192bea4e55dc8b0c347ccf68c060348da5d5e19f22a3371dce7773eff0c78127c8b551d76aee6ab4b061dc61e1d SHA512 6eee0312d977f6f7666a7b1da08ec1bc169f53d195b1b72e3022731f1f32b24b4965b96076d5dfa9522724931d7d4b92ceff94ac1e89e54fdec695ca735b6e2b +DIST firefox-115.12.0esr-be.xpi 708816 BLAKE2B 154af6e9a5796c97fbc1243fbd478126fc212f39337cc373392cce67eeb2074f0dd45b3c8bcc140a986863ed098cee2d3783aaf996994870e61a05106a408099 SHA512 39bdb8c0641c3a47df9191e6a87f24bcb79ce253d84493b97a1bf2ec96a07da8d21ce079e20d78a55a2652e10b53d55b0dd7d0641d6d11577ffe772eee03adec +DIST firefox-115.12.0esr-bg.xpi 597482 BLAKE2B bd00820d9ef5886c3f79d77102e14725c5c122d25e287438a374aacc04184ec559a4860ec4b0fff5a7ec6f9cb0da889a16101a8cd3318331971ac83c858ccb2e SHA512 70c96aa87b62cb5a62f398d8da8efcb2fbb48f3bfa1ca863edb1805830d09e0c91e2a219d0ef15ebb450376cb4f2255a96ef84014ddc5545797e41759b934fe8 +DIST firefox-115.12.0esr-bn.xpi 576198 BLAKE2B 629984fdd10b5b633cf1e6c580da7e7744ee16fbf9266b086d26c458c0cfbfa8a31ad51cba94b0691a6aeb11a80ba75ba6437e5c5c99257ee8174ca4d2fd7525 SHA512 a21d7cd4c695510707e669c7ee98dbf39fb6bcb36f396d51fa42913515f45f0fbabd011c5cb0a649a877580282426e1226c93b45995a6c5a6a399c2b64dc50e7 +DIST firefox-115.12.0esr-br.xpi 583261 BLAKE2B c1ff94f26b3ef4f6459d2d571994fa1465808b8d7555be1c833bb7424c6edc22b5beeff4bbf728457ecabbb954a5ec00a4657fb7782e9de86964a16c4d7ee1e4 SHA512 ffc2e8c1db04d1c60c797322a685b3dee07cbd0ac9a0baa177966191b4ce01990bffdec8e9f224fae41f22ac57b895018a4c1696695179c6b6a25addc5d762f8 +DIST firefox-115.12.0esr-bs.xpi 496138 BLAKE2B c24fde1d450b49534473c3f8a765d758d3e4e03d87aee04532a2e31181042d87ae0eb1e46e6ab9127ea990f63feced030c368998f146471397a04266588014de SHA512 d849e3b61ed2822a4250b874a386f9a348431318dd4ee60ccf3dc3c6c28be131a0f4504b8f2ce07a044216ccf310d94c4f359937319213d73324ed39ef562e64 +DIST firefox-115.12.0esr-ca-valencia.xpi 539116 BLAKE2B 7cda7f974051c78dc4ee0af93dda1be9e73f1c1eecc44097fbcd5d37a5e3f4fff92a859c99f7d41f3d826e38a89cbf022d5b500755128d7d805a32ccfedb29b6 SHA512 08ab75fcd349c4fc78baba779330c975908625cfb5c0dd6bdb70f35a1b261b6276b9898291bdc7fdc7153faf0d069f466c0302b0dc360d82c40e21b09a5ba1c2 +DIST firefox-115.12.0esr-ca.xpi 578636 BLAKE2B 7e4f0382c0b227098575f16a50b5d8e32fab616ec36cbea905292750a315094089466111aca6a92659d73fb447da2393d9a51d893a6d9194fe0f4808bb9ffabe SHA512 c73b56efb677281e2562cd6ee1101bdd2ba02480839463a759611f80cb32285904e9714163d9d646a2e0c13cd52c28c22952de70efa781d5d825b82afb49be86 +DIST firefox-115.12.0esr-cak.xpi 586196 BLAKE2B 79a19c17a8ee7153f37db50a1e628fed20c5b299fa62d62d7642afbee461f90997781ab2bf24ff5ca7c750a6ac32370026e9058f39d89876808c116dcac37596 SHA512 544b1e77224bfc69b4c26893d996f0a9ba85806d592f7abbe945f3ab970fe2c4e2201e3c24f6f939a408e96d44ea40744c01bc11df722ab1bdd1196340ee7340 +DIST firefox-115.12.0esr-cs.xpi 652720 BLAKE2B 5a66970d37b7127a4dff31d3d31d57761647615e7e19c0c12029d48c7c39590f5e9a5afbee138da6f02b06c8c158bef97b3cf506cd0e4c43dd90a60101691c32 SHA512 eff4635f9a3e96e143c171d6a8f120631c0244824e1fad9fe3cef3e2d2ffbe1e2573e9f4134622ad67d6de87cd9e9a429688024a8a3bea200c9779a7f7f5fb04 +DIST firefox-115.12.0esr-cy.xpi 618131 BLAKE2B 0516c1cebb90157040ff87e82804d0dfefb7cf117086b2ffa84abeadc74d2295073a868e49fa4541c61c97a9b03477e85f57faa29637f85ba96ea9634b05ab33 SHA512 77dcd57b4a8a4d630be5953f51d4804676eeeb49a3817756d6b967504d5cdf62f79481c1ed64930e860b5ed9cf5244bd90e1caf01e4ee3115920bb290135e4a4 +DIST firefox-115.12.0esr-da.xpi 607127 BLAKE2B 466503bf3dc57dad0254f5b4aa91772ceed8a768b2ed39b4057b9e92d66d19117a3f6f6ce87a77407a4421c3349e033fb98ef3c83b927b4dec91ce24c40accb7 SHA512 f223ba174cf06d04d64893fa5b11123f14c8c8d8de584a15a574842e5b7dc9a3478363b14260ff7f98427b5fbec67fdbdfa19b00d12058393befdaf734f97d70 +DIST firefox-115.12.0esr-de.xpi 625998 BLAKE2B 431174710428e888d43a15d7e27b328bb584098a5cbaf5ced8698e5ae21cc4d91b47537e026a889fd3aff0ac061453d2129bacdbd8c989a7980e102f3ef68794 SHA512 a5c7a3938962dd908bd30188064f878a307fa182c30bd38692c66e6076221afdbac917e365230ede4695d36354b83dcd7f68976221c63feba24b2a90e5f054ce +DIST firefox-115.12.0esr-dsb.xpi 645214 BLAKE2B c3fbb72b15f431e22512d44bf39c7d30a68e0394d2f5e33c26b758330027b87e8b15e5b15ab013fee2bdc68d905e8e826af21bd132d6d38728c10bfb8cb39839 SHA512 8e890f3e900ffad9bfa3052bc083350c67e7e389252df5e8acfea3bc2ad9e1977273f02a13aa3fc2f17e49f7f5760e17a13b588c4472598addec5f083b389fa9 +DIST firefox-115.12.0esr-el.xpi 726149 BLAKE2B 8365d9da2f2a2011f95a6397b4c938303a7bc38102a642bb256194567f2e09572f749193c9829952cab9e6bd01a9b136f9157cd2a4b9aab3e4a3ace099cd230e SHA512 de8653a03611bfbc257cd7050fcf5367fb69d17af2845a2ec59a94a7d708831cdba4020c377b3daba59e401985bf44d07fe3584c8c01f4254a05a78f589c28d8 +DIST firefox-115.12.0esr-en-CA.xpi 577358 BLAKE2B f365b4b9e25a412f465440031bf9e433c7942176957b6eca9060dc7da57199d090c4a506e3585abf6a718e3a4f6ae21dc8e365fae2d8e26613b3351b9bebd13e SHA512 f6a455a7f5ecf80b72d58c1b5f1931d6461e9ac186e304486cd16c993991f7f9e58cdb4105340ba7e824be3877af4a839d561ebbc2301cbc0f9b30a7d770b7ed +DIST firefox-115.12.0esr-en-GB.xpi 579687 BLAKE2B f88d078b8eb520728fd9fa518a6da077f9eae3d088ba8cb7aaad838090500093a9393a275999b50ad31171aac377da8f5897bfcf61504855fbd4b21e86a70208 SHA512 d165c1cc1a28862a469e96e9a292d3df5a7a2e55613686267c716c622ee17e0a51491ffc805064563b828bdaac34d689da03ac87f84786a468f12efdeb7cb4a3 +DIST firefox-115.12.0esr-eo.xpi 605209 BLAKE2B 6906d490d8c13bd423b238860399da80bee4aa5181fca598bccedd034b1a49f511c562d9850c4ba534cae3e9d8d7472eceea2298a949f69cea1b46067e244bc9 SHA512 10dcedbf2c40f7661d3165e48529e6559956c4b1ff8a146614d3297d11d9629ace243634612050c251fa05bc05a9e5ce5bb5bf7f25c41a0a7b9d383044e64c77 +DIST firefox-115.12.0esr-es-AR.xpi 622322 BLAKE2B 1fa446092a46c5195dec1139110f53b241355e9f7bb9c56c7c900dfd68275f6cf38c98d68f64e8ccf9a3cec53896bee1a34125293c104264916a91bd05c669c4 SHA512 61d3a34021e9e41674d8590dbc6577308461d1ab67a8835000d05f5d791479cdd0831a76bb114f2f9ecddf73bff5460e4d22ab59ea73b8f685d107813d113326 +DIST firefox-115.12.0esr-es-CL.xpi 621619 BLAKE2B 87ea92bbe5f2da0adc6696ddd8731d62a7d010b58c582e626b858140966f553ae8031933029b0be5ae19808f5fcf4865b57fc6786998ecc905165cbf26f939e4 SHA512 8353bc5ce2b62c76875cf85acfe4554392d976f6a682a3fa1e80dccdcd77b61276bb6b714d6a540950967a77a246dbd60002741232affa6d7b6781e04b0c3fc0 +DIST firefox-115.12.0esr-es-ES.xpi 616452 BLAKE2B 70c2bf47a57e7c0f44959f0d9b5468823d72a1ad7a05f5fc7085325ddb2c988feddc8087beb86f56397e4e5559ba4955a1f7f1a5209bb3b4cd489c7ba8d5d511 SHA512 3090a0c5a749c4c9a35c481d78cc326d740fa8362e9814128ed32ed1239d21a578165ae7c3049824178c66b390d1693a5e38af3482a231c96564392cbd9ef983 +DIST firefox-115.12.0esr-es-MX.xpi 584262 BLAKE2B 700c89d082e048252098759d7fc0b3fee4b2295f2aae7ecf36e9dc147a6f52040cab7224440579cf78e8216bdeb00caed7619b0d709800b29fae2517778e18f5 SHA512 55b11e012d4ef5703629c303b8e0fb54ffb1729a15051683641ec9f22abd73e6b84c608487a39ac264548f35fc6d2673e1d922ed67ac5166222ca17927fc3769 +DIST firefox-115.12.0esr-et.xpi 532914 BLAKE2B 9121f60a81f1937398a298947fa2adc163a8a667e6d779f5f15b3267f118bb759dc6361c9f2fd92d13aa0b1eab9cb694497225bbf61b924595d70e56e6c82962 SHA512 7297dc581a658a33dbdecaf5d070aabe45125104812a493d9516f3fea3ae83e134a7cd9e7afd80823bf23d5dcb614225ec53f56cf70eeba2a4e3ee86cc887ccb +DIST firefox-115.12.0esr-eu.xpi 589120 BLAKE2B a14bacaf147e8f3b8b06e963cad14e9b28d17c0368ab5178ef56e44959020c38e7543365d0ee2f11e69fe582bf1a39ed0540cef46bbec4db27ec65c45f0be458 SHA512 c7fcbcd436cb93e919fe6be78647746489981b8c6d61a3dd8902d37bea4d1f4ea44d31c9b1c5690d1d874d5bf1e9bfd4c7b572b5abb92afcf2bd87aed47821ab +DIST firefox-115.12.0esr-fa.xpi 584206 BLAKE2B 02c044de26628dd9765f9d4498f4b93e4b88d2545b291fd8292fecd4388d749adae837bf81970d79332e4c0eab2e6bc077af057db9a1b1e2fb5702b01a3f95f5 SHA512 5821002c5b37aaac5a33663ab4f19edc09190d78dad3794240f59b0ff7c971fc35a0ee057f7d8d1bc44a3196ded72a4891270d9e5ab316118bacd5407daab420 +DIST firefox-115.12.0esr-ff.xpi 471598 BLAKE2B fa6df59bf6d4ca71f0c033b63d7cfa125e221ca9e8b9af74c1895551ef5fe242baa71b4d2b3a82eeb3714494bbcc33242c1dc92f1d6a4866ccadf370b2196bb8 SHA512 c52b2b92982b6c7d98deaa825754061ee157b72a43d0aa9cfbf8a38e4d12c6ffafa8a61513eaeb0533fe4a86bb3f3b40eb28b1d7148e7c23d10a4a15703c600d +DIST firefox-115.12.0esr-fi.xpi 600787 BLAKE2B 4268db3a28ad83b6ee4e1b780575cdf92008e65ab49b59b64543c524d48319fb81622bb5e39c2da8c014d05cfbd115565c6dbb5785b2fd6ba712e56147447497 SHA512 18474b986f7e18581ad6a18024f95535ce373bf8b4cdcac71642350df035f0ade203c3ef9ab7fba2496f1090ce9a13253a9b64e88cc5a6296999350c827a320d +DIST firefox-115.12.0esr-fr.xpi 635427 BLAKE2B cd44bc5b076ae9e596c5db692d9d4e9d7471f37ca3043fa08d75eb3807fe8921663414bfcdf8ad65b19c100019eb3710483c411db651cd3b5666a7e7e4b91ed1 SHA512 c8f2419e3fb61402e2736cbe8cc3b9db7f1ce7e13247f7290e43609f7427620624d2828ebf9417641da6b44c1f883853f0fbec5499165204cd85a01ecba2a5d5 +DIST firefox-115.12.0esr-fur.xpi 626940 BLAKE2B 28b5ec2beaca0c3a6454536ce5cd302a63d5b0a15ee57caec09ac422b3d493ea7761c8e9ad6e473e753908857766d92ba9b2e56751d597a900b161fe50857414 SHA512 43367025eb82a7e1ccedce36858b19566fbec741904aca6a5eb21ab5432c489c8af98fb4a0959e3614e694f194cdc65c72bf263cace3ea86d11e11731725e5d3 +DIST firefox-115.12.0esr-fy-NL.xpi 617947 BLAKE2B 1ee6bff1636334f498297bbce1353eccd1b03fba5f2e64679061f2393b2fd31d59249c3f58d40660b383678003923ac442197c843a41133b8517200f2203b92c SHA512 d877309f75c8368f3dc2b3a890ad92b4961ad6212b9eb43675d4efd49425566b264854616f2ff98a7496ab783cdff91b8ca1ca324ff2ddf981c6255d840a5da3 +DIST firefox-115.12.0esr-ga-IE.xpi 467493 BLAKE2B d3c7aac9a3737811521d246e89055d2eb8aad1a5f4faf28306848cd841e59bbc958f72235e918817bcdf72e015ea75f3a326715b33a50bc91d184977d5b4732f SHA512 0b895ba289902d318d3da95d9319ed481cfca4720ed7bb13b7d3421e076c167cfb5da7af30d5af107f497f75d0e511fce9b4c3d8b38dbdb922a5e39c335ebc86 +DIST firefox-115.12.0esr-gd.xpi 589810 BLAKE2B 26c7446bc4f249e15a889a3db07ad02a09131e8a587d7db4530181e83842a82c530ddda26516e2a1c0d5f96a8a11d91dd194622dca447b136a79db4481321122 SHA512 6658d35b8029bf432fb843567e52ff6cc061f100ce25341b0ac7f3a4b566c9219b72c54053bf7a2c69ba2597dd72f868f27203fafb06ca5eba0029b8b361e37e +DIST firefox-115.12.0esr-gl.xpi 599816 BLAKE2B 39168be735116715fbb469a094d277a35692ea3494be28307cbedc5f8ccba7bcc403ca70b4c4022424e0e5bf3440a870b26dc47baed566139b5b27759a6cac3d SHA512 f0bc9c0ed2f9977a01895e61804d095a3e4ae99c355c3395b0ca289b274806c8bf008f40e43cb85d1dfc1c491f428fffd3e4aee24fdf955b3344a59b6d8faf7f +DIST firefox-115.12.0esr-gn.xpi 633581 BLAKE2B a27213cf8d4298592fb16e80e9e8c015313ec1a9616fabb1596917eaca54921fcdd43f092b4d945c05d00c427367bd19ca34261778846494fb6e9c5b18e788b7 SHA512 5bd8ab0cb3e1c723a7bad96f53abe0cf6aeaacb2b09a529fd6ca5182e66439b1e14a058d221ecd185dbdee12455fe87a9d583993b6b107264565e37325fb7075 +DIST firefox-115.12.0esr-gu-IN.xpi 523240 BLAKE2B 6eb526c39b660c1c1fbc9e1a1c103e76484720f705f148986ceccdee4e33488f9c37d3d611536214a97c5449afda62f92b65099b1e8305d826be87eb6acb4807 SHA512 e48eecc85c79b77e511981026dc30e6689c30157384b3e710eaad641b7f0f7201ee2f0c03b21e2794304846eb33398ecb3b714b1c54fbebf50bf8272bb7e50e3 +DIST firefox-115.12.0esr-he.xpi 623933 BLAKE2B a33953714107b57c0375da6cb06bde852033eae513c925b9d58ba0ff7fc9d6c902a5975076152a3a52978623507f80544a70afe4e4ec72073cf697738416aa41 SHA512 71986c5dbd1968f44637f0907cd26a4c260a23e6152dca6d73861f9567ffc400a2be8dc4c23bb7f37e57470314a600d4e00adee88b5c2ce8f29ad93c135e4d9c +DIST firefox-115.12.0esr-hi-IN.xpi 559922 BLAKE2B 80fd1df96fc7418169a5763cea79b4df9eb956aba35f9bbcf1dc1bee2d420f1dbdbcea329105a05a4cb65ee68b2568a57a5deb8255fa6330fc824031713b2216 SHA512 d9d1bf8fc878bf77fb5413be8cd579b520bca8ae22dd61a656bf2c85454ca240f2ec71b4f4a4fd269e79ce550c18738a4de10de537ffa6190d3f290d770a987e +DIST firefox-115.12.0esr-hr.xpi 550268 BLAKE2B d6c2f44b9a25b876dce5f96d09e6021e0670bf70b56bc47ea500bffc6f37478f9edc3714a5231e7de50fb70f571740b10baf58fb364cca25e5d8b2ca8695bc4f SHA512 da176d51f5b03958a6355361280533e0b6fff627028b5f559903965ba5813926155ef6fc8f58c940d8cc781c74dfd708a339c12fc019ca280e0746cbf73a5159 +DIST firefox-115.12.0esr-hsb.xpi 641205 BLAKE2B ae41673eb7d4c385c1ba8aeca6b084262da47c494f8671114e34a791b35b3c153928932ee69a95d68d59368317c3188c277f55988d80e6167d8c15cdbe3ef76a SHA512 2f956505757ee6de39d2b95c889736a5a4c1ad9a4dd742ae569c648e7528c3e5157f126326451755a8a6eed0a761182d540f0bb31cfaa29a14c91729f900a1a4 +DIST firefox-115.12.0esr-hu.xpi 644337 BLAKE2B 32fa1a01f76912f642b975bba0186fec6c5cd88c8530fdd9e1848214af3d54322fde37adcc80840869745b81dd7d83ffa6300aa3683d655688e8bf42a34808fe SHA512 12c9b1c9edd025261ceb4860b26a77895dcf0766dffbf41bd0a6a96673d9ea58990e2586682682cf64eb90080b009dce68a1ed4fdf64ec11f2d273a24d1ec554 +DIST firefox-115.12.0esr-hy-AM.xpi 645152 BLAKE2B cd04323e785593eae5c56f4aba0bfdbb28e4a94a9d4e611d42b01bdec9a87c5151e5cb67384839bd236ba5594e7291bea82312f298f85dffc982463219e56eb8 SHA512 dc12ec1a589ba093d1091eb29b2b0b48bdcf1155bc051592b9bbbd26cd2afdd57d358423f132cfe46f45ff44ba4b4ba7980a3355fd9545d718e69f7e0b5b5967 +DIST firefox-115.12.0esr-ia.xpi 605553 BLAKE2B 01b5097e5c81401094d4cb7bdb3c57f3e00cf0bd98c8b36ca90e79f19fa54ab1e34ffeeaa83e6ef64bdd6b64e1407fe65bc638dacd3c31488a77447f1a76d7c3 SHA512 284bc4e2251947bcd820cfce92b34c0c9c728d8b4f4221919229117bb8699650394e27da16b51655ab13b97652f05bcda8055646f227e570ecc10f8c2da42b67 +DIST firefox-115.12.0esr-id.xpi 567417 BLAKE2B 357ad9499048eb6f4b3da70dbc8ac2b8c1f64748ff8a6d4ef0c208ad5cd56e291e48b04405dd7dd8f75d88fb071bedd15685ef11402324f7b46115850211cd47 SHA512 5008d1379e40accbafc9db3c3ae3d1d45548f0013077f1e7ee5fc1c9b56df27d1989a77c916dba265e3ec5a331c77ae49f2752d35699fc5b7794503379619528 +DIST firefox-115.12.0esr-is.xpi 608078 BLAKE2B ee059a899f1a5c3e710f4fba0366d84b49e65fc0d77b5506217d91e3f5877198e155965a787ebb9dee9afb1ee231ad2895189dc4b9d90108ff14e46d6e6a8b0b SHA512 fa92ffe6001b56b3faca98625a1e7fe5a222a44de2b6e83a321b66bd7dd39e38e3a0f36d3815cbad462479ecfecdaf6f902d12321f3ad1b81d54958fe5d99f14 +DIST firefox-115.12.0esr-it.xpi 561851 BLAKE2B e3230dbd4fdaa1afb4694152e73f998643d1554419ccbf637aa47c85ff2e0bbea1c4f50eb8c1bf40673a9c6fae6a415bed2ca049f904dc52424b0d113dfaef8e SHA512 f3a90857b024bad26b5273abfff622c759aa68089b5d00794faa07aaed4c2f49082945051695a5004de2a9a8bfbf5b958aba5f73704461e76910e490ef7036fa +DIST firefox-115.12.0esr-ja.xpi 670993 BLAKE2B 8d1310914d31e402f9fbb3f3f3a1fd904f9b736bcad9341ce5d5bc3f27bcdffd5f434bfc1000d8c31e3b3d0ec8bc2cf4ce801e5901dccc37378f9f1c668e3e30 SHA512 26097d5a04755d60fd6f18bfa1cd27c8c2d351ab92d287b62e9180674b005bf39d7de5b850eff3e103a741a7109e588f2d94726c989abb4a82c2122ae06340b7 +DIST firefox-115.12.0esr-ka.xpi 657820 BLAKE2B 31f9752edfbb027b4c6b9f068ee0ebdda7c9d26b284fdf7c4cad8269841c61e9feffd4b9546f2a1dc3af71f705a7ec06f55e74d60f3a3eaefcb615800755a0f5 SHA512 a42cc532659b8f3e1372d4d98dca251ba47c64278d926e0cf8068946902ca51e323ef1bc06c53687eb4edc105af2caa56047635bb3908ff6ebcfc6ab3fa32e41 +DIST firefox-115.12.0esr-kab.xpi 598730 BLAKE2B d1f20ba4c5debfbcb76bb154eb41b33a64ff8ef954bb0789d25fe449acb7f124bae5c09f4efdbb23a4e64b8c07b6bedf1b5847bd360ae569f1c9d75261329ec9 SHA512 48760c6d052e6b8eefe3bda730f29d21a06c06702a150402278e41a9320482969554121b68f4fa420e8f061286b8d76522b7b35cc4931c02f1c02b7f6813cde9 +DIST firefox-115.12.0esr-kk.xpi 702225 BLAKE2B bed8add659eff79184dcc8523bf1e6b39baa9d3b3bb1ded3ae404ecbba8fb2d89a4b47c69afd2d40f126bd7583ae73efec31e1f10ae14e57819362cadc5935e6 SHA512 6ae8dd80ca2ba6905063062a70bf427f73ca60bab7bd9517da6e06ff2f9e524cb92dc29de0ff10fa47ce6e9b2826a3f543d468eaa64e1a500a05cfa3cd7a72d2 +DIST firefox-115.12.0esr-km.xpi 522181 BLAKE2B 3e853fc451b11b6f134b15322aaa9bbcc5ec152f024a5febc96ccc5cdfe30afc14d61025c1d2a3517011f15bd56649c596b8a87fcbe60c7dc57dc35f4a0c59e9 SHA512 bc548615441db4483f5637bda5085edf725d325e3697f083ddfe9155cba0c5c382e71359f0891267f16a2aefeb0b2c01db1380a05a7cd33bcb3f689e87f6a6e1 +DIST firefox-115.12.0esr-kn.xpi 488062 BLAKE2B 3547425eaadc0a3e5b95d3ec9e89e168c98055e0afe307ba87546ada2ce34f76df873c902b66998426d55e78d3aa2eaf5077fce1f59431116e654b134193b0b8 SHA512 3d43878e8a3c0d8260c55ac65d7b196ddec38702d822f8848b99bbb9cd3d525d7e1fffa16a434bffde69af1b7f08375df2b9d0ef7e0a1eb218a19bfdc46cfe98 +DIST firefox-115.12.0esr-ko.xpi 656094 BLAKE2B da7d15ac55a04e4e7a68c5b1b62f57868238ecfa13f555aba1fc58aa38378d06f8b423af66e3b2253d67398e769e5d97d9d5a896b26e3c8665ac4a6e41f13ca7 SHA512 6a5e1ceac7eabe9da1024b25f75ffb8e23cd4a367cd13924e7b24f4f171c2c1c86ebd52919f9ee4b769e4b08370ded8bfb6469ff2135cef80a65ca85d0132952 +DIST firefox-115.12.0esr-lij.xpi 478978 BLAKE2B 05aff4c58a8acd2d0703b6355e3a19d2035278b5d6a671f1d96bbe19235807d495b63e4c2613cbff99e6282c6bb8a4a9a0052b6d06dd3b3a710d198b47d7fb4a SHA512 d23f0ce15355b957aab07fa7da1fc2f4418880e294c8ff9bdaab722219f846cb16eac59966e3695f1d18652421815bc1c93c6c5560b9b0fc98dfde0f01b640eb +DIST firefox-115.12.0esr-lt.xpi 566073 BLAKE2B 00fbea5033fe10b3ffa3d454b066564c0cafb6f99187aaf9a5d0e04dbf228f039f4ad140be62a2191e0d489fdd9d45d04b0c680baf86c2c0d52f5fa9a86474a2 SHA512 dee4b2f5fb4d0c38bafd1178dc02d667408d78960a23a6d787d40f65b1f417019ebdb1f846ef1613c6aea169378295192db3c4f419ff6d4286069bd2313a49a0 +DIST firefox-115.12.0esr-lv.xpi 568042 BLAKE2B 6887011df026b5ec39556130e04079a63b0ca19d542561a4b8350897f1c804cad199ba9d592b7dda504e37eb71e6a9ad511781fa62d01986f056bb1f66ca6dbc SHA512 dc3e3551982561135a5738010e487673dec819558a058d01c03732697c41984a289c0e32c5af99ebe583ccedc0d1c7c2f125e9cab2474b7be7e0d1998352fea7 +DIST firefox-115.12.0esr-mk.xpi 489789 BLAKE2B c7155681ed8fc7ca7094ffef892d502159058fb45b455c61b55934f3223e1c9388688ef86d2ba33b235ce7b6fd1042713ee384e075c689cff961a98b510849b0 SHA512 c6fb94e1cd672f86ef5aa320b53e43af954b201ff9dad0829e0041f2cfa12f42b87b5a939d81aff2951731968b6bdb8420d2ca990c0a58c2bb0dda5c9cb4023c +DIST firefox-115.12.0esr-mr.xpi 526719 BLAKE2B f11d56c8ed3631dede36868d6d788facaabe9049df84d25f10d2b41c2106b7154b0c199a68a45e96bb52fd0c6924c19f70c4317a13d7fc14845c22dce5642a85 SHA512 58447231c8ca153eed5cd326595a71f96e3c0898ff176308dfa033174c8b00cd7314052905e606bcdb75e9037fb995e702cb5e67ecb680c763ce75cea580ba6b +DIST firefox-115.12.0esr-ms.xpi 445363 BLAKE2B e7743a8b57dc3a19f5e00e055ce1b099827369f46300474f7ee444f4a7e364b363efbb8661efc211505009881cdfb2473ccca2532c681150bb658338d4150c10 SHA512 67875307c653525c6b4b8152d9132ab58bd50f326b65fc292d8d93eb8a9dcabe9892e245ae2e064796260ccf0076c3bbbfea1a5352f9b8001abfeb537850c854 +DIST firefox-115.12.0esr-my.xpi 514775 BLAKE2B 0a7cb3535ee39260dcc2b71bdc1a27fcab12ed311bf314cf560a9f7cf98a9f48630c85258cf0ab4984ed55646ae29c0910fabf94cef1999b3069cb05d59efa6e SHA512 1a68926827a90051d9b8eba1127bab25602cb2cc918d0a6a45289829a86d9a5c9912c8908f04408430340f6837f73d99475529b531cc0ef232cfdc5ad235a32e +DIST firefox-115.12.0esr-nb-NO.xpi 600618 BLAKE2B feb61e57a7dcccb0a6f73a5e96a9dab2be3e2673068b73b3a0a24f19cc6b414bcee45675e969359e62da0d34a6f1b06bc9494832799a861df395dea42602c743 SHA512 f549f5b04bf5974968c4c84e695d7e77c9706050203e54dd33b68a6b018a759e4dff43bda5c3fb3f88181d3e5e81311ba4ec14bbe408c6f7cd25f578d0559c56 +DIST firefox-115.12.0esr-ne-NP.xpi 496372 BLAKE2B 1601a98ba8dcf6a88ae36fade10e9bbb5a3c033cb5088a0894f993412509e4d7bbf8fe2166d677d86084fe425fee2c4f199471b2bd63851aa9f3eeaf146b92e5 SHA512 f7ebe4ad55d10c5d8276dee7ffda939a714ece6e2cf298353b30eaf0da30736ff6907f4defc657b6f6cd4d7695d9a4597c5b83db6ea5992a23fbd4ba18e55c21 +DIST firefox-115.12.0esr-nl.xpi 611724 BLAKE2B 24b2f590d8fcef596ceb0609ee4559451f5ce26cd4547ae017d2988376114d211ad1049275678ea88459aeedb614ef57a350fb3fc10d6b234dc30a0bf178b29f SHA512 f7e151153abe0bcec2574e4e0893171d558313ebb6a8a14154fd715542a19de915fb9e1bd13f9a65437a78d48426b970d80660da7e7fdf68a7afbea2d8965a7b +DIST firefox-115.12.0esr-nn-NO.xpi 594059 BLAKE2B 4f066eadf909af50bc65c7f6a0be47a41361855500d2a1907278b2d64c3f4365fa4d56b9703cb5afe63f43d0956f75a0d4d0efc2ac39cc390042e7bae17d6050 SHA512 467bbb01f038d794a93d25c2bbe54fa3751103709c4c98c1d0f25ec95fc66423a92ed277c74246af4bbe19f22d3119c0a05fed9782cc415e8d198e0aee45f182 +DIST firefox-115.12.0esr-oc.xpi 605602 BLAKE2B 2da16eabb741cb0e143941a8c102ea41577836e741bbc0a4bb65a554f1ab3f883e89a332711ee4c305fd5e28810c93e7c0dbe520594964ffd0f61887ac556fe2 SHA512 3210afcbd762ce8195c8c414310ab57c40d3f0a714997bfc563a5ec74ef24230a813014b7f32a914ac0af18f3d9387ad62eeabd8fc6f193f6568aa1824d13351 +DIST firefox-115.12.0esr-pa-IN.xpi 681664 BLAKE2B 5954e85ff291393d96b937c62049df700721229a411f9b5e670ec7e91ab4ae04c73a4610faa56c0cc734ace7d2a6df9cca224b0ff2f9183a0fa087673d14f9bd SHA512 3e96a6cb5efba763b0cb5ccf8cbae0bd0631159652fcbf9773cc2a0461fa17153051773844c3706a2fdb048996343745d86f805b38ae61aece99a4197100a7f7 +DIST firefox-115.12.0esr-pl.xpi 629679 BLAKE2B d3037bfaa95161a023bbffdcf0ad82947d99c2e320bc752644b316ebbf96ff34abdd4921b0d355d5f71b6ad3520565f668d82bc2694459b80ec8eaede5f6e39d SHA512 efd22b8d52c1f62397587fdb0d5c1583e2b3401f2fc4fa22aab8f360c617e158a026c973523a358103da38eb32497f977922fdc9cda1fa359e9463df03639fa8 +DIST firefox-115.12.0esr-pt-BR.xpi 616408 BLAKE2B b2a6696c1a3d2a070a3cc51bd988e5de1870a093d9d04521fbd4f0d8cf6e5f0da3813efb351796dcb2fc4d9d10fd6580951f8f6ec6b3ca9f6c8c2954cdd254df SHA512 33da0f635add28d331d45e39657fdbcd19fbed34968153e611da549adaf4a050fce645f57e5b4afc19b8e37b7c5176e9a9b7eed7a5283353700b769fe1403e10 +DIST firefox-115.12.0esr-pt-PT.xpi 619994 BLAKE2B 1579c6410efa1364ef127e4e3671b8039ac6c73e36908573c17ef7d0bba09a1fe57ca4044ee06c35c75da15eaaf473928e076e99bbaded85f3465dbb07aac2db SHA512 b6db207cffe7d70ba2ede24e6abebe20fa2971200e4a6366ac345f855de49eaae50186dcc9ec4a5058868fe5df6a5f3040904c1cb83d10e5f8606e5180216360 +DIST firefox-115.12.0esr-rm.xpi 609314 BLAKE2B 700beddd7bdf72c15b2b1688386098181ec97d596d182f4ab3660a8d8263c474f081311de1eb236e17032e19942ac2ea65073328159e16699a41c6c0dcc975df SHA512 6c944003c979275afcc63026fc6cd7a9b2c7e6dbfc123a41a3bb3a9a0a3aa9ef28c693434d8acbccd148f258a855987ed23d0b70dcedc4ad63fb98da68763cc8 +DIST firefox-115.12.0esr-ro.xpi 543397 BLAKE2B cbe1f6a6b1a145033e24dbb0d06579d87b77f06c612a9afb3f07e9aa2fb9d8d2191ddb09ea62dd03b534ae12a874d915ef842eb94ffb7319aa1d31d24430bb01 SHA512 f960d840e658f94a7da8e93971ec6e848ec29ab8ee305033b8ac16d4b4f6531265e14ac6e26d494541ccee661b8ec34af2e18f65f05c5720a0fbaf2c0576e099 +DIST firefox-115.12.0esr-ru.xpi 714560 BLAKE2B 7ddea034c138222a51fa854bd4c4f96196b225a5de54de80572398abc032cd96cdf1a8c8183f9e0e3ab2120e5b4276efe5839544b63a33a92b670a72791b7d50 SHA512 d099f908c2d7fb5d1fedf128a8249990e06a4307f2d039cef7a330a871fca59b353c648ac2ee4e1e4fe33469a0184f67a1b41f1c3d45dc5f9684e16f99732590 +DIST firefox-115.12.0esr-sc.xpi 571850 BLAKE2B 5eb2876a1d79909b5d5325de6c4bbca52adc73e1d94f99e79c51d21ddfdcb88ad49207dc1316dc668fa8ace10bba05aa450a1fb7a3882d0bf5cd88aed5172d13 SHA512 1199d3c77a5daa53cbdd45f3f0b73bea9ea574dea1d075445bcf595bcb71c038fbcfd3ad039d4358935a1a15bf847edb0bd74d85fe3bca2ab1e878b15107da4f +DIST firefox-115.12.0esr-sco.xpi 505558 BLAKE2B 18f13511bbf39c308eeedc0050a5ec476b186488c1b55e5957531bf85fae2b4526f3e256aa259a14d6713b9897d0e8e11973a245cd81df49c520b910aef449bd SHA512 c664b37f91f3058ca6cf8e6ba239b5fa5cd2bb02c637bcac1babaf47bef804da13eb57c5bf7c2a9dbfe31653d10da80e86dfcda22f870cf9c39ee45ffd850492 +DIST firefox-115.12.0esr-si.xpi 600749 BLAKE2B d3bed487ae880a6d90ace0f97444e7a0daa00033b1554be20b37f85b56e27f5083fae90656f9d4dd2b109241b98f95fbb4c0555d3e068788960ae816c573197d SHA512 57a7e1b0e7a2925eb0923c23fce5118502ed5bf6c94bf936e2010ba67154f3d2d3b87fe4a27805677aa860eff520cd1aa24b37c372f6df68795218950ea0e1b2 +DIST firefox-115.12.0esr-sk.xpi 646006 BLAKE2B a97451b9cdf098ebef7ce6d3150248b3abb6c5359eea90ae182b5397d79b4a532ab6d0cec87be802bfba9e68fb79797ae995b4ad7e0bd4ec47db492f7222be46 SHA512 58453df0e6ec94de901d28ebca0f42dfcea4b7f5473ab24eba7665ee4b5e1d270a9b06f34916ee4ebc5c6a6cc7fc6cfadb7257c022355006041af0a00beb7d3f +DIST firefox-115.12.0esr-sl.xpi 608033 BLAKE2B 12e6fa7e47bb620fc35d7880278298d5ab0b76458d784147fc3e94dbb43c81e5854bab008cf75215d5e1fc016e58521ad9bcf98ccdbfbd68b721c544f88f39fa SHA512 e90b83a7b034ecd686a20e61bb13a75eac7eb1b1754d3f8fbb212b5c5ac56d8e3850726ade8783f718a9c12917d6eab8b3c0ab90b6c5935c7ddc70ea2c1090f1 +DIST firefox-115.12.0esr-son.xpi 413554 BLAKE2B d33d0599c7c539622192801ca520ab94994894f6e7e6aaf695c874d02b796332b99074dd88d34e7f9b9259f0bc7c7bed2a9ce125802ab4acb77acd33aaaa623e SHA512 0af418f711b55a30f23628e1e6a30a2d7085f9387d94a1846a058c0a65ec3e9fb5eb3538787e7dfcfbfb21b0a83f68db171af12fd86c12e389f54b68083da330 +DIST firefox-115.12.0esr-sq.xpi 632212 BLAKE2B d44c3533469b83e810b059762f7fb35a1fb167cf1d25481b9d25ad7b64778ed55f99a02c9c97bfd7e549d3b8991a7ae13cea383b62346b33b72f426ac67a06f0 SHA512 d820013522cea7a3f1d8ca0f01bb10ca54a60c47bcf0656f3b67ca92af20c16eab34de0b959549955893de7729af756141685143a201a4ff3b639ab75e5376b6 +DIST firefox-115.12.0esr-sr.xpi 633088 BLAKE2B cd4fcdcf629916544eb2b02e81f07dec839ef38c803274ec08c49bdde6e2b1a4b4ea996e4815910aed2c44ba9eca417d2826fcbf2419ceb01b3d31f876c9a90f SHA512 4bec34fd8a9ccd06e4879ff91f26d930d23b596bf687252ebd22041380785bea972f80b78d0c7e916279e83ad25ff6919b4d520036fd889a4c2c48b580a859a8 +DIST firefox-115.12.0esr-sv-SE.xpi 613558 BLAKE2B 8847633c1cb70d490876ef756e285635b66525255d06e2b5ef3910633398aae5fbb8e0c286716c5afdc2e6e1adcca33f1a3779cb4b14bbfb374b82dbc0c76fcf SHA512 959840826ce6045a04538ee2712f41ea412552b2eaf7575a9e740c577c617b0a654c56b2d3004e31cf82e6321e7df788a6136d084b3f8bf6a25b0a8a9001e766 +DIST firefox-115.12.0esr-szl.xpi 520870 BLAKE2B 84798ff084f5947de5a478173b8c9fa7381dac599ba2941ffda29ab93e9a06a034d29bd7d1c64687adeba6cc1dc0719bc57b8b4a2f6bab86c4c6abb71aa9f4eb SHA512 89f9cb39bf50b4e5f8d2625d6fc9fe27ed78374f418f998285e3e91e95bb97d87bfaf4d60acbdd10b5b819da9fbba2d651e4e8920adb00d9c683615a8237d0f8 +DIST firefox-115.12.0esr-ta.xpi 503485 BLAKE2B f9656c662d77ffdcd55d2a7574c102e4793719dc1209761115134c7f7220bc92d55e46647ea77feac6ea8e3a9faf5e33af41a0ebbb60a01a449791e386effea8 SHA512 be02cfcda94b55b1db43d26fcc509721c0874d9263d5c43c2bf7b4d9669db7a82857a411825903ec0888a4f12ef92c6bd64e6678d1b3e274b2411cff36a90a3c +DIST firefox-115.12.0esr-te.xpi 554471 BLAKE2B cc08663d339317fcc41ff09c095ff550b950ffd00605063fdb2a483272de41ba0a568e3a39e8d9e1dd0b14fbf4cb377030b20d2acba97f68f8b250deacd43a29 SHA512 6805b0b6121b3477f093bbfb397f3996b05a2f27cca82b8e1c9514db9505bec1447e9f6eff9985f47459bbab1c8e44c1dd1155a7dd1025dea8a3876619f7df9f +DIST firefox-115.12.0esr-th.xpi 689156 BLAKE2B 9d2f6ff9186efbb2755a291977d9a6ddb88278a077ab96ecd916761ab5805b3fa4053a792d792a0698b78ae48c4bad210a5bd07e83046bd54d0c24573914c7f8 SHA512 277a35fa8da2fd5c38a974c957113581c3a02b745fd42da0d9f363881a30c08b7f170d9407ca13d6320d145551dc1af1d15360f9f11b7931ce54dcd8cef92ba2 +DIST firefox-115.12.0esr-tl.xpi 527660 BLAKE2B f98d74c172ace927a7a374be58d4ecdbcbd344581f4f90a0210a14b7aaa34ad4328dc58c2a592fe922cde4f37ec78eb5de3ce6328ec2547c44ddb029aa239c0b SHA512 2d5f64549ee181fdd631f5c44a3a468f3a6e2c43ecaaf44143359dcd57564429403dbe96093ee4745241e9de175d9ead74815f843c88551a73f0454bf30d2fe3 +DIST firefox-115.12.0esr-tr.xpi 625253 BLAKE2B 9a44c7c5d1bbacd35e5ce22f6ddb42f6b833e88afa35a9095ba054d6c462703b55ce632d7f9ce2df3ec4de76b4eea0ebbbede17a1aacc1833cb012339566955a SHA512 f386ae6f20ed68bd1230cbac2234966a3f8143abaec13ab3e7f715140ad8eda0974f0605e533b9368a48423c6104954ee7699bf718e8cbff98d91ef52bb1c675 +DIST firefox-115.12.0esr-trs.xpi 498538 BLAKE2B 375100e00403acb0ee8bb731917cf65dbada51beed0addf34681070e12bce92e2f20b288e4902b841964ef0646217a99fbdd38afc432bd803b7ab3fc3628ea11 SHA512 f02b761eb806cb41ad0ec6b34b9b21f5247bde09233de9121f8ca8c65685a5cacf025f0c51ed1c771d8fa91623aa5dcebc8766caa72649dcdd52a2833695e207 +DIST firefox-115.12.0esr-uk.xpi 705540 BLAKE2B a4599de9bc68587f414b0a7286fbc2f7e4241cddbd040f1ec3a8aaa547a52b44b9e988317f7bc4f12156b040d20dda4f9f1fe47ffe68f9382e9161c6f6f8176e SHA512 f202a7a81b9d83429e81220447cf5c63aa421c27284129c058bae4caa4419e4fb776728e5205b4ffa5f42cea7ee8d9b927f6507c70b084ab77a95ba79bfc5455 +DIST firefox-115.12.0esr-ur.xpi 554720 BLAKE2B 6d61762afd12672d996487ecceba9704df02caf4214e7e82c6692efa47aa3e4d0c3fc6e8e8a5d0400c3ae51fd05b7b9aaad8bad81c8d65378de13f645133810b SHA512 6ce12a4b000306c13fd580e44d166f7436ad8fa6e7dd1276e415e7282d9d883cb72a1cc909cd40f43c8300c620c27a89ee3225be191f2bfab6a6299fe8f327cf +DIST firefox-115.12.0esr-uz.xpi 474522 BLAKE2B 7e8ee0b6449b9de464c3eb91a5b36e45d2b017551e476602881d2fb39380bdb924f8aaff930d206a0827ba1175afc23f8001b21c7572cbf1156cf492113fd43f SHA512 4b309b2da6c579ed58d5d15fb2983286eda8289e286157d95db9d18d735d19462a5fd25371cca64dc93c8d8fff4f60a25a1d8a38fd71851c819d265d0e60df31 +DIST firefox-115.12.0esr-vi.xpi 649117 BLAKE2B db2fd349e6002cf67c8e2967421c8179cbac733af9119f1ad84c63723c8b39f53d0485fcd0b013189fb77aa15a5f68a661160971510c84a4689b3ebf819c44f6 SHA512 e44259032dd9a1c49369a74746dacec494d111316593ff70cffa1904787c7c973b23e66ff92c0abc496a0fb3d100ae2e74ef7377ff0675c39e62e9250ff4cbbd +DIST firefox-115.12.0esr-xh.xpi 414802 BLAKE2B 35b5cabfb1830b21a34e7c57357fab5375fdae9cb655c7985b6b468008f2e8e8f5e40efb8ade25e92f64da9d6201827685831098887e976ddbc61531ed7da954 SHA512 468c745bcc6ee0e72c057484ad6dcfb84d715432765b1aa7071d8a08d4c7bb15f8a86cafc32b3d60de32f5c61b8372dd3aa0fdfafb4b5c2384e463419bc23979 +DIST firefox-115.12.0esr-zh-CN.xpi 650834 BLAKE2B e5b6e072a8609aa65c988dcff5824010276c372f12938e860aa50c5d0cb75de649a1cf2e035c275419435ca69bdd95550130c6de4e3fab80231d40b5ada995ab SHA512 bfa4cd5b8ca8419a0ccb19ffbb7fc7156283bbb784944bbdf1102b631cea372ceddb362cf8181a57bf8587bbaaa28deed78c0ce288b4d8a09145e047ef82ed95 +DIST firefox-115.12.0esr-zh-TW.xpi 653669 BLAKE2B e5b95c1f07618ea7ccc285e77eb92ed92ae3573af29ec29aec33e1f7e516fbb7df060de47b0f521df816faba193575f619cf937ef378f594f347dd7235b393ad SHA512 030d7a603010447d82d9670babda138f44f39b7c1370c0447124dcdcf4bc90086b973ee8664406b4d97fa292cfc692ec31732e9fead685a4fe1696c324431045 +DIST firefox-115.12.0esr.source.tar.xz 505219784 BLAKE2B 6d2cc80daca9977f73ea0c0fe7e7cac999f2d7a99c324332d69d9438a6d954fe72ffb35e4df4c2a86abcdc94231c4847bb3e64dd612240f8a6d86e63abdb1be2 SHA512 d98475061d870e0f3aa920b7c0b9b0c1cbdb3f4102f760f1d1c5ea3e45e216c673c8d3662501e7e78af4950a003a519e94b57e9b1eda8d615c159cdf62130e89 +DIST firefox-115.13.0esr-ach.xpi 458869 BLAKE2B 766ff00e9e84e3b51fb84ca98219b606bf0cf5c5b7a3217a19653db39dabd16d8f8819d1492b216b18b2a9fdab7207f79f2b56c71b27cf51b1ab8959f5855aca SHA512 629bc6c9cbc00448467a1590588c04e6264713669e38f3b3162586c2bafec5908780b76d794b20dd8b511e6b0d652ab81b6a9d015b0637d2f63937d071797ccb +DIST firefox-115.13.0esr-af.xpi 415050 BLAKE2B 2ff8b6ee58285be981cfe3406a6dd7d7f3f5f4a5fec849916c1c0cb415962de5f81c020a26b9965fd8492db4cc46f5120b3185c7d62dda0e1cbb94a7f68a4d1a SHA512 c29eb1c6f2baab48a6a1908071ba42281662709f717b0cdd9fd54d5fdaf4f4e34c23a0c7a69daed957957f9b651b554a17c7573cc5a12d4676c7f97b0bf9d68a +DIST firefox-115.13.0esr-an.xpi 499423 BLAKE2B f72367ee01c38c4958c4416c1a3f54b2dcca90c93fe17311065e47e9c465a3cf2c3e363baf8720f7a261c3f92be5e4622ecf17ea4dc0cbeda40695a3d61bbf62 SHA512 2a6f4da626d74cd2dc05e3ec42fc063c631bdb6b70413fbc66ce7b890118219501e6e237b53f51393d9b12fef81f39afac7cc4a3d4f4dcae927874f10e006701 +DIST firefox-115.13.0esr-ar.xpi 605444 BLAKE2B dc393bf862d39c7e72dc1edc31ae1675b0f907ce5a37c8eb8278b448c63215745a3533177a8e6b71b774b829a5947ad55549eb71c90b6a9e98d3d46d6c50b06a SHA512 ec5da67bc4e210a9887eb503b1e27933e3cf63489f0c31290a7c949ec6299b2135e1e8ddacffd7220c2e16da4c3d001a2eec1d4cf80a8693d94eb71001fc8823 +DIST firefox-115.13.0esr-ast.xpi 491184 BLAKE2B 5dcfcc1dcb664c78d71e22e8f38d13ad80cf6602071b601445477dc33887ae1883761e6c536341a59d195422884cf5d481e9a9692c9945672debdf654e78292a SHA512 3fc92b689f80672c0b5a97eaaabcc242aa42cf3e33aaf9c93e444c45a7e0dfd97baf139c937e11a50d35ee960bea91bbe53125942209bc1f9face75288beec3d +DIST firefox-115.13.0esr-az.xpi 485937 BLAKE2B f65761f146ae48b0704a3ab4dc34f45ac4c7374313fcfeb838c1f23b577200bc243f2f7c2fd6ce477aa0a85ef0425f26bb30a28c84904385885b32bb41736050 SHA512 380d055cb9b3919061a8e23f804d39ce24fbc135a0d963911b256ccebee57a2bf6af99f24b4acd7c70c44b7e3f9ca3718701968cd72b16c39f3afc225bd0b395 +DIST firefox-115.13.0esr-be.xpi 711827 BLAKE2B 16dfcfe555f23037b2d5360c7f3109fc69d10003e6de4a087f8aabe48639039396bddb06ae7da2082b45cf188897cffefa6bea4366816db3a1bc8f3dd3d3863b SHA512 fff6b8c7ea887208ec541822a1ab073f0303df6aaace84c6c0cfa682a538906d9a67ba103690adbda920dd0394d5ecc249765781f1304e6fc2ae266a9ea86ae3 +DIST firefox-115.13.0esr-bg.xpi 597471 BLAKE2B d475045b3abac2492f4316e21bd1892eb06656162ea6bfe93bf34a1f3b052373f72c85ca33a20a7c7afb35543ea4e1c9a520c622c11f287b0b1ce049ca34a203 SHA512 82b83fc0891fc3c4101fdcf046516f466c9d36227e54783e30252bc0f8d1647394f4c667d1c473c4f7568a0094a84c1216acaa32b9604704e7a0d4bcebab2d1e +DIST firefox-115.13.0esr-bn.xpi 576186 BLAKE2B 68de38e08f980f61f9d228df018c9af388622807f032e98ac453a2cc0fb0dc22ba5cfa0421c850da2dac70d30f2bdf37ce20e8f08fc42c1a35b73e0ac23669c5 SHA512 21110dada66d3dc26bfe92f771b487fc39374af0b17e6cb66dd68c0613471dacf1e04aa59fa0c3c6d870114b85d0232ac339143de561ddf346255182e83183ef +DIST firefox-115.13.0esr-br.xpi 584021 BLAKE2B aea8cf321ac9625979f6d77643b9a5cc83dd965d7124a18e447ed182fe5fda37ecf5654bcfa5368df9cd63574a9376fe9c802c5dcf3a72a5d1c3cbeecf0405eb SHA512 0e58cfdfb3154caef8dfd3e4d826e58eac33cb8d296cd362c715bea383dcb74bd4c37363d23752a29614abd5542f76c3f78a6c5f31d0567393073f0d8f806532 +DIST firefox-115.13.0esr-bs.xpi 496142 BLAKE2B 59f4515d37ebc787b2d612d9aa556ddac4c5f8122b2e7d0e783add521215d882bcad4162ef9faed133d47d3e60bba6cc5d6c9c9ff7360811396d620ad63c9fa0 SHA512 a85ddc738c814514615b9d9ec4c3671ffbdb6bc8885131305aa55ab592b1041fa5c22790204c1f79c788f8af5f1fa9235cf211c3df863e2217bc409b179443ad +DIST firefox-115.13.0esr-ca-valencia.xpi 539103 BLAKE2B 349e7c4054fd3e87a4a0e60424a9cb9d3c0187c3dab5fc4a4b6cf858eb302c66d170783260a8b6533a67666e5c525925851e6adcd28c561eb73ffe5e99e70f1e SHA512 2c604454dde3d95c2b37aff51d80011d10bd6dd26b0055751239878d740596167ba48536289289e34a0384a7344c042b863aba4e204f631a995a9d39e4c99d47 +DIST firefox-115.13.0esr-ca.xpi 578624 BLAKE2B 57daedb34bcea839d5000b18087627b05a03c4d7151dfa62ab1b36a430d1381ce4219bf5a54d231ce8ff5721d29006ee4e2d0186c897f7b2db80f2b48283b5bc SHA512 489a62c1a98e5729bfb5e76f5ca235c7afec3c20d3b973f3ef2d8760508f866e5ef377f3e5f7ce2fe2b573e4cff979bac7728968ea8c1765ab68fa2953ad29bc +DIST firefox-115.13.0esr-cak.xpi 586161 BLAKE2B cc408805fcf450a1318edf8863e2050afaf5b91fe74213bed8fd37357cec4bfe98580ffd7c9a712aed0b548b04938f10890272c8a75918a5058671c8aee1fc99 SHA512 9861c6e7fb57b2bd3e24dbe56769de03c2ff0d41ddeb39ac81158b0942b11749faab41312c92688722ea58f054bd2d4a7d7a79199f7c3418ecb8c2ee1e786352 +DIST firefox-115.13.0esr-cs.xpi 655607 BLAKE2B 2cf82a0a42f53b6c5568a83cf983eb1f62071cd97dcc8eddcbe003c316de66584210183ce52e1c9cbc1338f4f0e39c269ee36a909548d43335ec432f13f22dd0 SHA512 65cd2a8c6ec128385c04e831bcfd91f4802838b164992dfdb568e2792c9308f49258f4ef8b8a13dafb1e313d369ac872628c04cad7ee69d9ae7820642c370627 +DIST firefox-115.13.0esr-cy.xpi 619969 BLAKE2B 9f82972e92e4b3847ec1bb50ebdb414f61b9753765c7d0825c0eb2086de41d08772dc66e26afbb609edcd276e8af74b6742332351d35397de18862df212d0959 SHA512 8b0ac22d9499f211f7cfd4e4ab4e6073ac6fe3f566cb9f500f036cfb66d40770b42bca8f71a1e491eab4a91674bbd1bda75c34a8c538de51c40d27456c207cc6 +DIST firefox-115.13.0esr-da.xpi 608727 BLAKE2B 19ddc06716926eb8eff49801ad7592d77e7609ef693dde5003329014549a1dfccee25e8320c7b685b519f60ec5a4527b5e8c109f561fcfe98db0ec06438119d5 SHA512 8adf6d2a81712a5928eed7f2cc06e1fba86e7f69e10c7dafb337f5fd5fb29c7444b5db98f3585079015b98bc4ce6a3fd41d5233c2280375a77c934ed1d5f2481 +DIST firefox-115.13.0esr-de.xpi 629623 BLAKE2B 189f478aef796fb348cca80d4d03c1f8315996de52bf08583b92b80daeb1e7c64acdee3964d1ea4359928e13f7d4d8624d49b95185895174b34ba95bef1a022f SHA512 f21a1ec2622adabf3ecb3b8d0ae8b5744e1d17ff2b903293121f0454b28d18cbd90ee2d6b960805545141e2914daae1f6b17fce50c4a536a3cd56de234e2d8c5 +DIST firefox-115.13.0esr-dsb.xpi 648138 BLAKE2B e733cca2cc036b568258f48ba62b2fd6d152762eaf2a05456a9b7596265692df095638e067466252f8777cba5c52a7d17bdc7e743bb819139e7f90eaea0f1480 SHA512 bb76262dd5265674f79b8a61064f056cb62259ebed55ea2e2e2e026ca9fc0f80dd0bdee9fa5884cf0650df26e625de448e3605366b374229b441a2cfa1b14293 +DIST firefox-115.13.0esr-el.xpi 729621 BLAKE2B 73f1609e92aec59fc5e2d0d3f977f76840ed19781142e67f5d4c3e5e81ede8744b3316f74b97e052895775170b638986b9f264d7ffdce7e0bfe3fb3d4f2709c1 SHA512 0ec261dbcd0ddfcc4bae0d404410f51684cbee3e80d1846b6c15e35e9accf56377b1263b120a0cf7fdfb23f1459731dd8e62ea90798169d1a767aca4dde6576e +DIST firefox-115.13.0esr-en-CA.xpi 580169 BLAKE2B ddd65e8df09c0abe16d55480fde4d7f84377103236118137936cc1e5b8337c65c00119fb2b55bebbf7aa63d8b77dd8f633545f095528f949aad1207608f0dca9 SHA512 8ea328ff031092ed1c28f76d521fea12b665ef3fd31d7589b4aa0b2b3e92ab36998621ed5f9ebf1e64bcb8216cfd5659e45aeaf7234ea03ad7476268e93ccb7e +DIST firefox-115.13.0esr-en-GB.xpi 582349 BLAKE2B cde45b48a2c85831f8cb00f36d15816bf4b9f1970d4930d1d4bacdc0d13fba4d1b38a02143d96b252a8569e0ef9c49782697840b01d068cec085297b18f7b259 SHA512 5586a5e366b9e550c9e83a9916e7abe03d0dbbf78c48a95aa305d43371e7015bf35c14d7d14e2c5648f00b20f81050a86259ee55bf341136cfa0c6f4a5e4f2f6 +DIST firefox-115.13.0esr-eo.xpi 609842 BLAKE2B b847fdd018c4811f9d5dbdebfc75b9960fd7546ee2286cd4898af157de24c40ca3daa2bf2ea2a613bb2ed892c0eb6b2c38dc59f844fad2d3604a23793ba53cda SHA512 b039bab4f62624b5c8a8b3766e0f3fddeaa19391dca1af6d14385e496fae41b2d61785ecd84ece3ca97c8c8de290dca4a9b45763b45230c0e558ee9386ec5cf6 +DIST firefox-115.13.0esr-es-AR.xpi 625238 BLAKE2B a805fe6bfee5855d79ac6de0b6320f08f4d559525de8a16efbfe9c9e3603edad1a49c67a62c9de7c3c6b13b1a68070ad07d7b133667270a1e0461aef51fc03fe SHA512 6b1a16a93c2dad80391afa9f8fb469ccbc79312a6394f9dd4c00bf32a85dd2e41065a44b4344d7d501d73bfffbdaf8188e8d7345aa926e6e86e5c59ce99c6d4c +DIST firefox-115.13.0esr-es-CL.xpi 623465 BLAKE2B 4606593ab9cd4e8c92915d0dbe91c237f0c5b00c5271255fefa8cac639f235d97937bf98fef26bac6eec089f6a1168d970caedd219496f179f260c35a707a198 SHA512 fef906e8323b2c3a62010df983d3db4dab9fa7556ebc51a5109c11f040b11ba336c025c3b32d26f07d52b69f88195cc83141fc9965590d61ee70ba2f8447400f +DIST firefox-115.13.0esr-es-ES.xpi 618304 BLAKE2B dd001755d1457bf4187591922914fb426e2ec7ef6a1a86e4c0323f3563795a130ad29fb1c2ae4946458ee0282b4784e0ad63cb9e1c38c6b9cab2fac4e748f306 SHA512 ff637b66e777e2df0c9fe0561dd464733960d38584081eaa07f74e3d46a0f040f670ef507f2180ab9b25a710e950f8f93cb3436a855b957ca092ecbd42f0f805 +DIST firefox-115.13.0esr-es-MX.xpi 584255 BLAKE2B 4bc95b99500a5c729ec3ce4ad2d4bd170222d9e3fb9734b743280ba99aba5503596d68caff19f0580384bb6c51c04464ef1501bd46654fed155b28e7b5505e98 SHA512 bad7d867372f98c82edf61427116cfb9c09b121bbf43bb93c61fd60788c68cef7c97793f94c01f92f2db443bdf3d9d5edaeb3c47734c7d47ec4bd22e6a363a67 +DIST firefox-115.13.0esr-et.xpi 532879 BLAKE2B e65d4a7675ff2971e2dc550ca296b45a62107d732a81f1070b4bd2266961f342bc9b5dcd309c4baffb3279be8bf61734aec14aa5ce209b2d82b773148632dc42 SHA512 50f0b61145127f511743371332311ba3a2b18e473226f45f193be46146a0c0af276914c59c3612236b6989a6699bcaa901437d3cfe5563f8cc579d4e36ddbd48 +DIST firefox-115.13.0esr-eu.xpi 591804 BLAKE2B 1e5ed62b53f3b7d6bf465968bcec781447b8d39049368672d86b7eb43bf7b019c1d19bb34c991e9022f856b348ff00e7f2d7c5fae71388231b7e2c44fb1b6dca SHA512 4def2322424a4d61d44ab87e6076868b33a390006ee3a47233888de5e67d184c103b990eefce790628161a6585a63c023f702d7fefff41e06a0d4ed4647e9dd3 +DIST firefox-115.13.0esr-fa.xpi 584193 BLAKE2B c1de53fac8982856a128c7825aaedb77267903f4ca3cfbe8ca9ce88f0a418d02e144c0b6a2d70606c39fa9dc758131f01af949e5072809da1c704830c60f5c95 SHA512 d3931ecdc5bac7c3bef39420d5d9a3b81fafdc4cfd3eb7b798d78a7bc5dc3214bdb18bffd5f947cec858e1457c369f445e9336ea28f6d22b28bedf56e4bce6f6 +DIST firefox-115.13.0esr-ff.xpi 471600 BLAKE2B d651f9b6b3b24f948084ed2379b741c57a7d7c1706efefe952959b70df96f65a1d74aff0972e5bcf70aead42f286e3ae5dca4b73abf7f7132f9580292008596a SHA512 b0e323bda0bfee0925a150196b961d0030216882af68d9d66a8ffaeae56b679e79dde27fe4be8cab7ad60a48000847042f8b1274966f47d0a5035ec02e6584ad +DIST firefox-115.13.0esr-fi.xpi 601957 BLAKE2B 464af892e7acf5fe7e1dde0f5b35b380b302008237f2fdb23acd4db26c55724f5d327688bbd58f410c6c9585672b9e3f7404e246ad1a4009191959c3b1dfc16e SHA512 2beb3e0b7730bf3df85bfd9e62457b85119688a68b704f5e430264bc317eb7b0580b895a792d21057e799928a2a3d2f5f7aa0bc0dfe9ff8b6dc1933e82a6407a +DIST firefox-115.13.0esr-fr.xpi 638171 BLAKE2B efd3d5882516db38a35d998ed61fd11fa73758f38d1aa8768a6ff1fcef390346cd3a54359076da60be0e1cdbf8a4683edcc66bf427843d26c533d089f90cdd18 SHA512 6ae30c58ad81b408188d5ac938f4d3c5fded4940eb3c2a02313670daa5992c029ad9cdd3b831cff4d06f51b73f06083e4765bcf329ba10ec596d2d18e25a58ab +DIST firefox-115.13.0esr-fur.xpi 630143 BLAKE2B b1d55fa9cfc3386f2a4adc35215375f647b20619581831eeefdaf32acc540ddfda2a71ac04ccf85d6cc152a8dcbe7c08654bb4e66d264ca4748f330ada0f34cb SHA512 16dab1bf6573fbbb3159930298a855fc8699ef5233f34e3cc877125aa8e0ff8eacdcd58dde7257face95bb19f7493449e85f8bb3ce685dc48768a484b63b40eb +DIST firefox-115.13.0esr-fy-NL.xpi 620747 BLAKE2B 86bd94876344234d7f47610de7f530d6c0c4b45cca233334838acc62d917016f6954b283f8fc28b1567bd1c1ada3577e41a334d23733fe91ca98a9c926c3db68 SHA512 8bbc05ec34f5716aea3d10c370fe0bccf3e9d8fa64935ada974f5166edb393957be02ce0ac89bdf544fb1aa24c96152d6b06ca34c07c5369f8e7dfdc052044a3 +DIST firefox-115.13.0esr-ga-IE.xpi 467487 BLAKE2B eaf02d92932eab627fbb4b9dc4777adad0a4de79e87a8a7e0a6adb7615dad928c479060702a164bc82a9d98f540470ac9a45137f5d6209e20886edc3c7497ca4 SHA512 8f6b0e68c57d866315226783599422c6baf494b2dc7203132d95d5017ae84de925671361ff72db85d6b3aad42df832d35c5c30008db0956bda93a68b32062312 +DIST firefox-115.13.0esr-gd.xpi 589810 BLAKE2B f1cfeb41696849dbcc44773194519930b3cdbe8676e960124f8ffea1dae9bd6c530bb6f5859a086d9e16244ae49a89c0d895a96a879a8f9d361e466f5b117e7a SHA512 fd5066007811fce84f800fb76acf5f02f6386e8fcc351a4b9ea153fba8811c1292e14ec778268255d818813309ee81e46151081c466aa0b85db6aafb8dd9571a +DIST firefox-115.13.0esr-gl.xpi 599812 BLAKE2B 5ca1db00fad370d8577f3744c9b12156a05f7dca5a9fb0a91c854ab4452024e86b7aa7fe3bdc98aa1f671f45930fe6f0b7779342f20687eb0783e6a71a29c595 SHA512 8d89f1114e81cc216886cad85accf19fa6163cd9fdaba122f354785417982ab53046605728dc311f3091852407e9b687defbfca3cf4fec3fea30da643555e7a8 +DIST firefox-115.13.0esr-gn.xpi 635256 BLAKE2B db1f84038d0f7a5e0443b478df3d42e1ec36241bc458bdbc7918438e94af01cd83ab94df22338b63009705895c564e2c33738332fd7acd0e6c988636f4da8c05 SHA512 60c8d66c1dabe613355d4277f163f5e35f5d9a89b5a2c9527d7eb0d0735fb3690b1b874c4920a6b165f29862736002038b9674a604f152ee0961bf5882185af7 +DIST firefox-115.13.0esr-gu-IN.xpi 523232 BLAKE2B cc45a0a05c169381a32492ca175cd7b054ca4d2990fc781bb0fbfb8c56768dbbc4db56e45950cf735355a57af6ecad4b2f06046c05409388e93de08437078b81 SHA512 73862171a464a5a480308b614bb264ccfb51b96c4a3a02f145f76836c0cb8b0c0cfbc8f0b7d536f639ddbf43a0f56437cbd366319b64b3b7fbcf69e01ab58ce0 +DIST firefox-115.13.0esr-he.xpi 626729 BLAKE2B 58faeb11b0403cd420a7c67edbdf177eac59a7bfcc3bd722ff07da99f5e5dc6aa6d2ec10631de857e8818ce7899a3b4fadbc0e857a604374c148332684672b67 SHA512 b6fe3216adea48fa1fff8a5a564916f47b6e4c557f3df090064f3378b65ea8bfd99dc3c12db5e2a40cd868a7ca7b2e72fec77549b43696de4afcd7f644a161c8 +DIST firefox-115.13.0esr-hi-IN.xpi 559902 BLAKE2B a826402bc9ac502c12926f05345979e5380b10d4817f9bb865815ee9ae1cce84622577a465987766a6f96068eb0b6944709b848b84c0ff21291dd817128e3a37 SHA512 f461f8cd826967ec83556a2c2fe60c5f45ce194aaf632b85fd241c3442f6d16528256e6e3a6f9f7c8297daaea5b216fbb52d237012229c7cbac7dbf07f3f96e7 +DIST firefox-115.13.0esr-hr.xpi 550267 BLAKE2B 19b332c4e6941a95b09090d27fa9c0b4f95b9dfc8da512d1ca7eb65bb76a70053384331e9ac171b336ae15aa55c5c50445af86ef8b26aebb0e5e8423eff570b3 SHA512 e380014b905b1fcb92d6c4715eadc7777b011c7832144d27e6f462dd63c72d5bb3072b1ecf13fc9917c7f73602bccfa32133cb747b130307bbebffdee27a9948 +DIST firefox-115.13.0esr-hsb.xpi 644212 BLAKE2B 61e3f7a19bb5fa12ccbb525f260defbbf1b96fa63f01356e69069a01b47755595be471453bf429b9d5a04b8793d266c6a153a8e81eec427f0637ad895ae5c057 SHA512 d91861b2880f3ddc1a76dc42d3d7813ec325aa6ccc6c6d725a93f71269aee0c8f6e7586380b1683c3741f29d8d5acf2ed119b7e0561d2679e92668a6442c0634 +DIST firefox-115.13.0esr-hu.xpi 648263 BLAKE2B 157fe516db5a356be123001ba81e21ad8af7aef42848d6f009b49dc23cbcc84538bd4397bc5d0c2dc1e3bb3c5f84ab8e09fcad2cd4ed04a81e108173b3ebdbf6 SHA512 fa3cac33a4bbda77a7f2e987f5b41c9746196b5165d83ac9072ef83ab54bba2768dd06d0d4fdb39ee8f5ae89644b67153a1f062c7c9ed0585e512646a6e56363 +DIST firefox-115.13.0esr-hy-AM.xpi 647113 BLAKE2B 0b07bec9f4810d9ee9283c70fc927262c53fbd7caf8f90209e0778e449414918a959fb86db27338ccb0129b10cc93a052ad7aa83a17f9f5f8eaf2e7a6da68b33 SHA512 fa6d691f57842d5c5de51bf6c5e3b30f979c048022ad352465bb324cc2fdd03afeeacd611d500f118bca6d516171f7476da8eab270f17eaa49a856f4fb73ae6f +DIST firefox-115.13.0esr-ia.xpi 607449 BLAKE2B e5cbc8dd0b6e8d23261cf07814909c8b4c98c74f395c4cfe4dcf8c0019ad9327fecf90f6e41a2af17a1de8ee28572ee384925ed82736f935228d7e9513fde2b3 SHA512 bff9484a9d06d1bc716ff4a78955cfc5c46449332be4ecda2ade02217b8a0c61ef46226999a60ef78fd9b796277cce7312476408ecee0a0ee30c8eb738f684ed +DIST firefox-115.13.0esr-id.xpi 567403 BLAKE2B 59a0ddb6c863e76cce51913a088631243a381422871d483e44162718d1a300ef96aced587fd196c38db555549126ace8a03a1fef598708cbb747f2be2ff8b608 SHA512 88ac0af91f33f40f6290538c0735c1dd0ff02214c6a5d4ade78dee4f571838c7191f91e5da7f69c5da831856f13654290fb1d735cfa257769c812ad7165a3cf4 +DIST firefox-115.13.0esr-is.xpi 610523 BLAKE2B 6e8292d2342d6133da1fac45e2b39314aaae6a14a037d00c8bf3ef4f7ba37a495a37903d04821034b5425b372f0b7d51e2891de43bd2892dc793099c51809fd8 SHA512 a6ee6eb5cc54cf2cb86bcaf872bbef7932056a19e7089d6ddcfad4b9364f26960446463039108aee18677b12a0d55e5829146f1a9c877a279daf61bf63c12cdb +DIST firefox-115.13.0esr-it.xpi 564030 BLAKE2B 3792406c14c3e71b017cdc44616b8409f7961e0321344cb88d004713c67f25e12e45b79793a9b33bccf1c59eb4e8b2c4365f9dd8f3887a3deba5e148d7ec8cba SHA512 5c013eb2a09b2f52157e99d64c4799cf075690b1081be432b77c438c10a462571b609410edb97c67b7bb584659c2c043124a3012a1643946da98c28956b662d6 +DIST firefox-115.13.0esr-ja.xpi 675128 BLAKE2B 4885bf5364f743e5022859747150f57706df2d61aa197c4a31209a4b849e0876d925fe263224eab795c91e1a71016a663ad106630a12b97579650cd48910b76e SHA512 37b85ac5cac28a6ca144f5bc7bc49c8bb40fa03393d2eafcf690edd0c80251a85201bc2b673cc06a6f88c4caa5d05508e9935cdb8eb4953d31820e95765c88bf +DIST firefox-115.13.0esr-ka.xpi 657820 BLAKE2B 4ba19d5a966c63519bcaf9f0e8f8ddef940c4ff1fb53875c0601ba5a9a629435111a6a39c9588a163802291367985e6470e7085c18989040f05fe250d749c189 SHA512 58bc1b2eabcd890a575dfa0c73b603e66b1a9bb66ce627aff73bf29998a65fcb098fba09ef02312fe9529d8028440e2c16dec0592c870254fff3cda9a22167d8 +DIST firefox-115.13.0esr-kab.xpi 602472 BLAKE2B 99e709e4520810fa190ffae5ceeb1aad7e8599bd5581594ddbf801a6a4d3c8758cac0a58acf80880b29754c23ad498cd912b889f8837e3eb9addd172111b36a6 SHA512 fdbeb125f941748d05963059823d3f307fc019cf81cddbe686b4fb4533b8a68404cba557e2477be5d677f33aae5b461d48ffba6651111baa22c5f00fbf42cc2b +DIST firefox-115.13.0esr-kk.xpi 704884 BLAKE2B 6fb7a75dfe0ad53cd62a72657c506c934a286896ce65a419595a3b3be02b8274a70d30a3514f76ec377446917793e1521fe8dafd743842e6f7dac17e6c95c330 SHA512 f9de2a014b9b68a2bd6dd5c54e9cc44060330b2db60e24b071987cbaeb4b0d2a35cb828261362d7ea6a6f1f36e38a8491de3c59c42d5be9fcd93a636a85806e4 +DIST firefox-115.13.0esr-km.xpi 522176 BLAKE2B 180f5100d856c994fe994ec18fe39e839c769940bc59563d9cb51d2ba3afe85cf5caea31e7b823ce74592a6bf3917e967ff4a2c6d8f5ae90354611e25e222a5b SHA512 8df61f23a7662f0f0714445088a6a2fe6b3a14d685300dcfc9c6f124e985c63a214cdb37863a35fa0689a7dfd63ce0b9823e318daeb1e7f5929582c06c7125f9 +DIST firefox-115.13.0esr-kn.xpi 488053 BLAKE2B 8d3095db3b6bda67ecc5a43a1f24cc87f4ca6e68fe7e7e4744d79792a31b1178f51f478c8abe91fad54aa6d0b80401433fddf0b76f6ed3902bb9c71a43b5936e SHA512 27fb76a454bb6337b77361024db3b99a754af35caf33ee33556df422bf968da4422dc727450f4d3d93814a1c5a112edda6f6d1d289d3673e81c0ed5d7c04cc99 +DIST firefox-115.13.0esr-ko.xpi 659151 BLAKE2B 02a3dfc31a7cfd3ad2b2162c4f94b0cfe8fd4d3d4be505f450fa0d8a63a0922f8c7e19be319bc8cc0a14061f5f19cac8bf6e9ba4f0963d2060fd25e7a13e9553 SHA512 3728938278006a3d77cfebc46643f0cc1e6d68a2deeb8fe68ed999daf2f9e3c0d343599c1292a8a5f35d97bdbbd88865f8f49937792bd84782770325f18f473a +DIST firefox-115.13.0esr-lij.xpi 478954 BLAKE2B 0f32cd0e790ce6fba97a3e69cfca15c90ac0542d31b19e67ef9fee351847edb791a0c9268cbf091beb4766d28370c841417ea73431b7aa319d5974c8ad49cc29 SHA512 eddd6415b91d1e8f8683a8cca72dccca5dba7dab395eee279fb7950653f69e1f4776373b26d9221586b966e26b3ee7bca3de10785f6d2966cf2d85700a04f235 +DIST firefox-115.13.0esr-lt.xpi 566055 BLAKE2B 5e61089ab95df6d8e4e3d28e1d628ff3d77fff138738c842af050bd1ac133f9fa44bea2d1dac594a7a3dd15e4faa0fced07380556a8bf4f94ad1111f9e448103 SHA512 946d6d680f02b68eed5c18019737c6913f5ac95ca10741da30c6d31658b4a0eeafb6789627d1aeff88ba49d9c6ecbcdd4ef6000553ae7571272b35bca98e35aa +DIST firefox-115.13.0esr-lv.xpi 568096 BLAKE2B 602d9cbd60bda98a73e9461b1566f09aa849c0ae632bdc6d720a18e53b8ed4126c64aa5769491ed9ce31bee21ddeb4a0e2573323d67249e2669d6786dc0b4776 SHA512 d4bf23bdb67c1dd26c3714e58386a63900c9d5e7457cb2d7828adc6563883fe621cce299e26825f71164258604e88d06711cb008c60d80d974c56e04eb54ac70 +DIST firefox-115.13.0esr-mk.xpi 490305 BLAKE2B 02f7343fe8b6f809a97e18669cb9954d4440fcbec49cfbb936d989fa308e8c93b430028fa1f4f091478df89fc3893c620d332c18c2ab3c86aba41566b6da5cb3 SHA512 849e505174770b9c778ed088b353149ca5506df2baa070ba940e57a62d0df0c9af4e7d6854148c979e7cbcaad0394f3a3b80bc0641f2ecedc1020adbdd9b6ef8 +DIST firefox-115.13.0esr-mr.xpi 526721 BLAKE2B d7b1bb8b185a759d9bfc4e1bab37d734f62ee1aed59edeb9829fc63eabf541e4e15532dc8f03d152fb9f61e97ae4f17d3f695ee5188873551e45fa8d7bb72fb0 SHA512 a3e482b320a01684b5391fbbdad2a2e06fb30b023cd46dc449919b23a8f425070b7e58a91535e2b973d63f0d5af8e240dd13c12d52a6fa0342829ad5e328f703 +DIST firefox-115.13.0esr-ms.xpi 445347 BLAKE2B 04d1927c6e63253b6e90a61a61dadc424cb22c6e82c0e0fa52ea75152927c39d30c82f0bf71e4f856cacaaecb72607ea69dec15eee97f97fd3a092baee184c93 SHA512 de14dbcfc4d7d7c8e23f08a45807c7ad7c3120e2bfaa0372b7bde17d4e25b27959946cbff0b855357de1756bddc5e70b35a003aca4883353b3be4a6ab5fd8b73 +DIST firefox-115.13.0esr-my.xpi 514775 BLAKE2B 2b63b9e3e434218c2e1e6a25d37bfc0791c118d7259881dd55293fe65746e869c4acd384912ea05c6c03e2dcd2d18a10a7074ae4a2e57de80089d33bc8e6e666 SHA512 c124401eda391d90eddef3bdc56d24ebe730292a1c14f3d8e9d3b61f72cc1485c9141ea2c21fbfc1b3b1aa295abe634c4191c436da24180f21ee0cdfbd5ccab0 +DIST firefox-115.13.0esr-nb-NO.xpi 605932 BLAKE2B 265de1bd0688894c4d37da31ed7902375e916c697878bcea9dd7b717a496c0c265de77d5584f8299587ad391e94a95c510b5f7765fd3393eda088c7c132d3e4f SHA512 90f34d609a5d010fbfd0c02de3aac179f017c7233020a5d16235b9545404b4887e9efb4f61b570de1e22855a3312125aefb6bcdf8f6e118ddb31f004ac3bd83a +DIST firefox-115.13.0esr-ne-NP.xpi 506844 BLAKE2B 2570f7be21faad1868092897d6f7f5bb0df4f6bb7c04b1650f147c683f033d4740f0d68cbb4fe54236ac6264196ed5de783b2465f51e09b32ac782ec9089e711 SHA512 f64c0ee5b11d2bd0926708fc45103c2fa6699d0563f2e37ec882e9f84fd4c2e5a2d01f1fd10e2bf9e3cfbe4f6ff00c4a3b0fe4ae4caf3dd3f50428ad03e91f7e +DIST firefox-115.13.0esr-nl.xpi 614615 BLAKE2B ecc15b9423b69f01487b79f451190079d82bd4ad9bc98c0a907f4ff9ce2ade07c843dde8435b1046ee84e3dae4949628625a7c0fe3aa9b7f446ab0756e96caf4 SHA512 ba72ddaf6d6cb2224f4bf0dfe56155a714b1a8eb496ff28a233425c9f8676391ef134364ed588a08e469d1de92a7c0321cf1be9aae7782df0ef15eca6afd87dd +DIST firefox-115.13.0esr-nn-NO.xpi 606790 BLAKE2B 2519c4a7074600335f699633e5c5bac1b6c762ec60bf547c49f9092ef1f5d42a074f94f2d855693e245a7d21c31611837a4e1858c6d6f5c590d95f678e07a59b SHA512 2c4f34b1426a64307d01553b726a5c55a1c1e087caec3536802864054d32d61eb5691b78e8a5f0bfe63f8f4539647e51a000ac549d9b23385ec7eabcf19ebaea +DIST firefox-115.13.0esr-oc.xpi 606292 BLAKE2B 1f8fa30994be906dbb2a1bcb79b8dfbcc10876c8b83dcd55a733c6f230885fcc654e1889c91ed41bf9880e5e20a2f94841c552b4f9784ab7a77fc775418aaa7d SHA512 f5ca41eca0ddf6d560bc07da87ca7c0da1624a3c4e2d527a604186138e55a5c0a30b7eb44f00f05998f07ba2278a31988cc528cf1d4b7f1a2f164c4fdc109ec9 +DIST firefox-115.13.0esr-pa-IN.xpi 684777 BLAKE2B 35ee56d12532e977017e07fc1bdcdda40061f0e88c0ad2c056399d4ef1f7ea2ed6184370d038f4e6a1f8c698242e5d59fccf1abaad9988ae237e330b3d99bbec SHA512 abda142513b7af1a9d5e156fd4598887435b0313b345e5786ca647465de31c553494cd7ac714fdae8b7b3ae40221fde749e03c83fbeee3534ccbc24860485fdf +DIST firefox-115.13.0esr-pl.xpi 634143 BLAKE2B badd7fe2a8310cfefee95d68119f56e66357d5bfec75ce2f6a1ed9469ca239779e0804377a06fea7fa0fd1959f75ce06542cebff1b45ff899d6cba71bf28c967 SHA512 0f9d5423dc00e93b900b6f90997419d70975d6a07a39a6f2b1012ff7a0c4c2459c41214f05171fce61ffe4fbdd393f0bb906bbf8dbf71343895e463ff9517127 +DIST firefox-115.13.0esr-pt-BR.xpi 619344 BLAKE2B c27758608781d90e9392e55196e2a8cd4f0e124cfee08b07c4d37319099b3a0b5eff98985215ba769a13fb1ed877224a370eb6abf221bef8369d0c7f908a746e SHA512 e061106433be87e7b2d47bce894241f261f87a5cfce49415c2430417418e978876b45157eb3a3786e338a7b1ad359c672818274dc7e71465023eb10924a9d765 +DIST firefox-115.13.0esr-pt-PT.xpi 624305 BLAKE2B 4985553c3c20285d14577e5dbd671582822336a59b469156ab7ac8170ed153dd331554ac6ffbe2e8258a3cb31aff5f9d47103d6ad88547e9117d78f6a7f27d5e SHA512 7b51efa9217440b5938d4f484625d13562e65de57b6d4c9ac53441031977c6de52cb36fec5d98f0ff2d541b3e2fe2bc854968747bb09e4c5d17ae94b11bf5e5b +DIST firefox-115.13.0esr-rm.xpi 614076 BLAKE2B 1cb280402450164c54ece4914f2f74c1c91dd8d0cb4280d6a3310f21245e95cae455f64e67bc8c26842d3e63a75400287545b8031304742f9afa7389de6e297c SHA512 3fd88deb77f0b85c92bc42b4641699a39fe63c73d89c4febdf0237da1c91f7d13b4646415df48e5c448b49fdd1400fbd817af068518055591d09d1ca39a7829e +DIST firefox-115.13.0esr-ro.xpi 543381 BLAKE2B a5510154e4bea4a52bb8a7c777d1fe121ea8df1b4ac5225ac80d4c31614ed208f9cf51045c51eced7f03e693ba8710c31b60dc9442f95afbe85df8ab51735ef5 SHA512 f64b2a7a0413b006244216d33d5d1ea68762af265417633898f1757aa62749581af103c9aaea6be807d3804c5c42cb44e2bf853d8cc8332a5dec4f46a6cff074 +DIST firefox-115.13.0esr-ru.xpi 717996 BLAKE2B 7d77b494bd1a6c1454987641a2ef53fa2e5c57c614e5c7d16b6381e4d4b8a22a39936ff71bcb1c1746802e1239b1de5b52da12e104f613806f9d2c622394802b SHA512 8fc13b6b19545a512404c9c653c2515bd57f85a39305fcbc97dbabd20bcb61681ad74a8a0c3f1253333264c868746e45ef6de4d68ae5e921d824da8c790615a9 +DIST firefox-115.13.0esr-sc.xpi 577968 BLAKE2B 8a68b16991112b6d7d5207b93f810894260ef622e8c36900428a3091628943a551dbd293e02588819d58f3982bbef53dff5b3f3bb6c11b25ad9d92f44531374c SHA512 becc012cb67cba7b443d149e910ac8dd72f4a6b1817b0df013659317caed07d251f66b67d63ee2af3eaaa6961d0acb1732886c04ca0b32e6f70df3c39acab0d2 +DIST firefox-115.13.0esr-sco.xpi 505561 BLAKE2B 734e467d5c4fbc367986517704b7be49cc62ee686fbd940ad0ad8ad8c54a7bb6a9662f9481b162aa0a237b5ae237d63486c4da015a90e3ab373bc8a1c5ad0bd5 SHA512 3e99a48f4e9ca2f9838ae795a8cd07010ae77534b58d783e3d61c4453ec195d796fc7e9bafb84b6c88a130d5fe1544ea4e49359678dd67e7d11d10e646424847 +DIST firefox-115.13.0esr-si.xpi 600739 BLAKE2B f5ab27d31b4b359aefa3e1d7c90cb2e7e7540fb1ccbb1b0a01029aa26b9caf98ba69da1976a9dd4baa33b302b75a159f3cf9cdf9f3156aaea10e3b20cd3531c7 SHA512 6deb90c6b4404e54e53d08680b83d32ff2c0fc30621a927f195ca326731cc5a6588c68f73a3b4a7c2f9b6c56f6b11bc20b3484094a09246eab9429e7515e1d96 +DIST firefox-115.13.0esr-sk.xpi 647869 BLAKE2B 4fde5492f430e5411a4e3d30606895d92991971b762c27fcf02a857465fe2b0505452c422e4e70b0183ddc7d3b4d99852f336dc7827aac2e8b75c212e4769e56 SHA512 66d359c11e4b03a7d948704e110b9a104e0ddd20269660d2222df759044419d797feaad6b5c2142e223d8f743411528cbd01aab1dd869b34aa5ef9fa19759b0c +DIST firefox-115.13.0esr-sl.xpi 612807 BLAKE2B 8e6e8c9854650a07c89f2c42ef3b144301db48bb51a6485ba934ffe0a03a97636829559e490f16df98da61a52313779b2ba83ee4abd6d254731e47fdc24fd6c7 SHA512 14b0475e8cba4c852d7437819cfe3157c5a0e2454b804c86fb95bf5d6f46fd2a853060d7247dd825d547d0d148277166130964934d600740c6ddeca23ffa0a74 +DIST firefox-115.13.0esr-son.xpi 413545 BLAKE2B d211c0defa803d5ad574811e1b2e50d89de5fd216dde000a0032e3117dcc5a31211d30483a89b1f9005073015946b41beed2b39173321e62eba90cef4679c28f SHA512 5df04e32c22f70be9ec9a7c417e56da210314a8aff0d4aad43d3670bc516d074e629a04ffde567f4fc12d8cdf3179a69099612263c8f8b5a84eddfa510213026 +DIST firefox-115.13.0esr-sq.xpi 633666 BLAKE2B 393b74e8e2aabf71ce6aff3e34732f0cccebbf1426ae8af3803cb8d74d4ce9bdefa250f978f8b3c2e0cb2dfe8861be7f766e741d40c2054ea0e7ca210f8b7804 SHA512 fab2db1403e60595d8a6003d10cc564d618e8d08fffa613617150cea940a4ad3e28947ade5eb06a831d8830944ac8415185be6f7a40dace940347b533f9026a8 +DIST firefox-115.13.0esr-sr.xpi 633079 BLAKE2B c664db59d9260155281397ce14e45fd9c1ac680a0f231f170ea59ee6444ea753a4da7f7c0e3f290b07d2d31c1f3a823d6d87dec4f8268a9838e38f27b030a3ea SHA512 5afd139113a720d45dd35621d57b77c12cb47f277a264b1b78cde6b24e8a596b44b7de77e6ffec197d68bc1eefebdfca101a3892e736d60abbdd21c8317acf09 +DIST firefox-115.13.0esr-sv-SE.xpi 616310 BLAKE2B 3675c4619b261c8fb39ba86b1b0e98dd92cc099d0f1c80b28fb6f329f46d8eb4e21a4e7d54d71973aae4da752eea10387ac7154d567b28ed91917a4e99f02ede SHA512 df200d8b132cd29ef433db0a4cbcd39af2e9426462272fac0435a407cf236531b2b589a6edfddfdf12fb4d446ba02ace0b43bc1c3844f93aaada1f131a0f294a +DIST firefox-115.13.0esr-szl.xpi 520874 BLAKE2B a75babb4e8f358a68b3314ea93bb7b1b35b8af2888c3c45b51f31947937512a40c12ebf5de60f34854c5660c6af6de032b0729ae14a34643516d6e59462eb30a SHA512 6f15aa350fa2c43f78a7d86ad324cb9f1580a9f98933eea8b3a6f5340a5479041d6a427f0bc986fd5ed0b2f89dc2ccdced3de4348663471a7ca5a43ce7e1e161 +DIST firefox-115.13.0esr-ta.xpi 503475 BLAKE2B 820f1168e8212254e3371d89e5186f45ce5af03b4e4362dcaf800e5bed203e1b1234a53cc81edad150ff5d63f555d32e44d07c0a92e469dacdf4d03d022b18e8 SHA512 458660b1267ae3077fea493cb04f8eaebd92ccbc07ed59ef18205b63eccc1598497d61d36a3de62d68fa6188eaf4251cbf54e3335cfd1cbb3a1aa320e937b92f +DIST firefox-115.13.0esr-te.xpi 556610 BLAKE2B 880f7e079db8f982d2f802b8f085423e52b211b5edd0985b0fdbe06059c28c56fac67c813c586d3f066a427a3be2b1d74054a7fe462ff36eeca8306cbc7d5289 SHA512 2f5c455a7e02ba35761720481d261fa45f53bc87c9ad136014295088ef69e14e6d9048b1865c30183250d5c58cec5825e2705933edb4e85f84ea9c8f72739fe0 +DIST firefox-115.13.0esr-th.xpi 693258 BLAKE2B dd7b5361e45aef24da696e102b924c8bb285ad44348354b4f6563f30db0aa7d25e43e1a6ea56cd87d115be4bee3086dd2c6754cb0e5be421b9ca68f6186f7e88 SHA512 25e6be57c7404f6d3c3597b2b42bebf86092b7a4884b7538eaba8859a883467894c4712ace0140ad02709a725f82ec24cd131fbee07fc95c553373cd417901ba +DIST firefox-115.13.0esr-tl.xpi 527635 BLAKE2B b060f9268d4cd0b34e847e36c531fdb50c319664fa970709a1d25d7ae37f3be1bfbbaadbfdc7fd77dabc03e79b234d575934bdde1bf4d5e6acd96b25b3d82c6f SHA512 39aead037b172ab8c7ce5a0a0d145c88a0ae527afb86486161418fbf66bfc69f91d7518cc9609139c1352eef35a6b91225bec4c1037cbd4c0d28161cc1e19d63 +DIST firefox-115.13.0esr-tr.xpi 628068 BLAKE2B b87145bc56034116cbec9f205916710cd7b17548aa5659e23706cee1275cece01f293976d172ce883e3da679de0af9170b3e6d1051b964ae34c655fc37ce93f0 SHA512 f804f7ab4b75c478a1728bbd817c33440e4689a85b0c711a8c4406757830d8db951a33ca97808f53d46f58e51a565d3fb9a2619ab09d5daae098e90c1b7a3bd3 +DIST firefox-115.13.0esr-trs.xpi 498534 BLAKE2B e3ac9ec8b32f2018715915a77d6920f025c8aed1ebe763fa09d7983872b7612427b7b8d525927f492ca2bf2861241ecd7e1140e433601e0eb3a429a13f0e92db SHA512 99781758ca40e62f30a377395eb39f66bc555c87e930f5a971a26c54941a4117d1470aa95a11fa60dd81df293f94eda81221a40c5359320e5c8437bb5e410673 +DIST firefox-115.13.0esr-uk.xpi 707201 BLAKE2B 6d3569869d1c7cda327999dfc2a26276db656cefc6099e3055e17434541c36db3ca1e6e19e72d2c1ba96382e6c0879ff7a991a2cf5abfd49ec341de0d5163f37 SHA512 d98b524d66ca6b79c15138e9005f3720fa12fa46411ec92d39e8f2a382257c491f0d2b3f2cad32e81e4f7ba12c4c14bc5039b90065261fd386019e652db3ba09 +DIST firefox-115.13.0esr-ur.xpi 554692 BLAKE2B 207b1ccbe283503df572ddd269a76238d7f7e8823be88d883e8ad91fce110e1d7100740056deac346a84d1d33a2a30782ebd8ae2a93aaf43d28fcdf2a7149988 SHA512 24e59b1f18cbe9189578585889cdc01c707877ed0657e4c5b1cfcd06abdd0b3a0f51c1e919056685e5c3d69d899482cf2e5616fd8cfab2a83fdf74e994ce9096 +DIST firefox-115.13.0esr-uz.xpi 474520 BLAKE2B 98963dd2b408996a31274b1093b1e8da1c079f831cae08079d1efa9ea368e6f13df6cc7b2659ac20ec8dfeb2e632ef48a54c5be421787871526811bc6ac17b81 SHA512 c610d5e417fc17d2e23a5f5ca5cb0c2dc0474d8eb6a9ed058fdd6b2c465998d6ad0488fa379b2d0ad8bd77aeca3c94f9c9f950a52f9cee9394e9a6437fd3c1cd +DIST firefox-115.13.0esr-vi.xpi 651765 BLAKE2B 93e864245191507874b83fc34886e79739da74867a2d5cafd28e60e34765b1be0a04eb50a0336af1df70c97a84ab040c21a06898660b457e8b557ced29533d6b SHA512 268af1fb6863dfb280440a44ebabe3926871a85febf4f45a2bb1fdc126508a361d5cecdf326cfaead3257b962d559e0c47583d91355e966ac37ec9092ac9e71e +DIST firefox-115.13.0esr-xh.xpi 414787 BLAKE2B b1f1d584ebcb91b1819ddab80c6933f9335d88441abb0ce539fcafb5fb5d505caa15c14a3cf5c3c9dc2cfe97fc3df2747ad1abfc99a97d2c7c03a75726c5aa6a SHA512 3b95f8f7b0b5cda517f826bad938cb88457efe249a0e5225068493f2fe0d644a5802e8ff85c06ccf9660135de0330452474833e2a297bc97e48238152883d328 +DIST firefox-115.13.0esr-zh-CN.xpi 652628 BLAKE2B 482eb1d85b53ccebb3bdc4a1c04d4eb12f8760cd1851a7cec986786db626f8f545f46ba545d6e3e4be383f1b751fee1a0df836b485e2f0841c659c8a035dbb64 SHA512 6ca1d36a0faea8710c0dcf802391be1888ff6fdeb2d20af2970e63d982f551b64cd5ffbb2ebd187d0b2f4add2f5ab1f3ef9d82f149beaaf6d309da6425ef4b34 +DIST firefox-115.13.0esr-zh-TW.xpi 656755 BLAKE2B ef8244f8c0d65d2c604a5a11caf4f493992dcf2d32aac8bca36a8a17ef21ca4050c3406b565822300c0333df2950ff6342f7ed05b02da1243aaa3fdedbd396ef SHA512 c62f4dddc59f71d944d70250dd0337680c789000f4df188d71f3fae1cb272c34b85711218a53727324adf190e26e1667a192b612d9f1d3a437f24e1b27eb9ed0 +DIST firefox-115.13.0esr.source.tar.xz 510571488 BLAKE2B e2b00965a92cd11da6c81daa8b6c652dfccc9f0f7d066bc17ae5fa3ac3aaaa021c4489a9f653127f5516e3d77cd7174de328343e22c4edab438e3fcb9a859178 SHA512 799cdf2d0494003a5addd0da703f53deb9c9d6bb6f6c95d40026363382803e2d086039c7798940a1f35f4cba111f2e8e21bde8ac2eac29fd9bd6876dd8d3a85f +DIST firefox-115esr-patches-09.tar.xz 16660 BLAKE2B 1dcdf62f35013b82dd70bf00c0505394b9277affcd1b1cbde92421778f4fcc146f536a546c2db8d6a70f92d40e4b1c96927fedec54383e6bb80bd9806d9b4461 SHA512 e003d0a2a5304dcdd0851b57ceb11993333326c8221d5d99555cd0c64090d5eda1bdb2a2a52e605f6094a3214ffa2238e43d57ff64eb7d424ff54b8125c16f5c diff --git a/www-client/firefox/files/README.gentoo b/www-client/firefox/files/README.gentoo new file mode 100644 index 0000000..a9d724c --- /dev/null +++ b/www-client/firefox/files/README.gentoo @@ -0,0 +1,28 @@ + +## DoH +Note regarding Trusted Recursive Resolver aka DNS-over-HTTPS (DoH): +Due to privacy concerns (encrypting DNS might be a good thing, sending all DNS +traffic to Cloudflare by default is not a good idea and applications should +respect OS configured settings), "network.trr.mode" was set to 5 ("Off by +choice") by default. +You can enable DNS-over-HTTPS in Firefox's preferences. + + +## Normandy +Upstream operates a service named Normandy which allows Mozilla to push changes +for default settings or even install new add-ons remotely. While this can be +useful to address problems like 'Armagadd-on 2.0' or revert previous decisions +to disable TLS 1.0/1.1, privacy and security concerns prevail, which is why we +have switched off the use of this service by default. + +To re-enable this service set the following in "about:config": + app.normandy.enabled=true + + +## Firefox >100 compatibility +Unfortunately Firefox-100.0 breaks compatibility with some sites using +useragent checks. To temporarily fix this, enter about:config and modify +network.http.useragent.forceVersion preference to "99" Or install an addon to +change your useragent. +See: https://support.mozilla.org/en-US/kb/difficulties-opening-or-using-website-firefox-100 + diff --git a/www-client/firefox/files/disable-auto-update.policy.json b/www-client/firefox/files/disable-auto-update.policy.json new file mode 100644 index 0000000..f366220 --- /dev/null +++ b/www-client/firefox/files/disable-auto-update.policy.json @@ -0,0 +1,5 @@ +{ + "policies": { + "DisableAppUpdate": true + } +} diff --git a/www-client/firefox/files/distribution.ini b/www-client/firefox/files/distribution.ini new file mode 100644 index 0000000..680512e --- /dev/null +++ b/www-client/firefox/files/distribution.ini @@ -0,0 +1,42 @@ +[Global] +id=gentoo +version=1.0 +about=Mozilla Firefox for Gentoo +about.de=Mozilla Firefox für Gentoo + +[Preferences] +app.distributor="gentoo" +app.distributor.channel="gentoo" +startup.homepage_welcome_url="https://www.gentoo.org/" + +[BookmarksToolbar] +item.1.type=default +item.2.title=Gentoo's Bugzilla +item.2.link=https://bugs.gentoo.org/ +item.3.title=Gentoo Forums +item.3.link=https://forums.gentoo.org/ +item.4.title=Gentoo Packages +item.4.link=https://packages.gentoo.org/ +item.5.title=Planet Gentoo +item.5.link=https://planet.gentoo.org/ +item.6.title=Gentoo Wiki +item.6.link=https://wiki.gentoo.org/ + +[BookmarksMenu] +item.1.title=Gentoo +item.1.type=folder +item.1.folderId=1 + +[BookmarksFolder-1] +item.1.title=Gentoo Linux +item.1.link=https://www.gentoo.org/ +item.2.title=Gentoo's Bugzilla +item.2.link=https://bugs.gentoo.org/ +item.3.title=Gentoo Forums +item.3.link=https://forums.gentoo.org/ +item.4.title=Gentoo Packages +item.4.link=https://packages.gentoo.org/ +item.5.title=Planet Gentoo +item.5.link=https://planet.gentoo.org/ +item.6.title=Gentoo Wiki +item.6.link=https://wiki.gentoo.org/ diff --git a/www-client/firefox/files/firefox-r1.sh b/www-client/firefox/files/firefox-r1.sh new file mode 100644 index 0000000..853a4ef --- /dev/null +++ b/www-client/firefox/files/firefox-r1.sh @@ -0,0 +1,116 @@ +#!/bin/bash + +## +## Usage: +## +## $ firefox +## +## This script is meant to run Mozilla Firefox in Gentoo. + +cmdname=$(basename "$0") + +## +## Variables +## +MOZ_ARCH=$(uname -m) +case ${MOZ_ARCH} in + x86_64|s390x|sparc64) + MOZ_LIB_DIR="@PREFIX@/lib64" + SECONDARY_LIB_DIR="@PREFIX@/lib" + ;; + *) + MOZ_LIB_DIR="@PREFIX@/lib" + SECONDARY_LIB_DIR="@PREFIX@/lib64" + ;; +esac + +MOZ_FIREFOX_FILE="firefox" + +if [[ ! -r ${MOZ_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} ]]; then + if [[ ! -r ${SECONDARY_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} ]]; then + echo "Error: ${MOZ_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} not found" >&2 + if [[ -d ${SECONDARY_LIB_DIR} ]]; then + echo " ${SECONDARY_LIB_DIR}/firefox/${MOZ_FIREFOX_FILE} not found" >&2 + fi + exit 1 + fi + MOZ_LIB_DIR="${SECONDARY_LIB_DIR}" +fi +MOZILLA_FIVE_HOME="${MOZ_LIB_DIR}/firefox" +MOZ_EXTENSIONS_PROFILE_DIR="${HOME}/.mozilla/extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}" +MOZ_PROGRAM="${MOZILLA_FIVE_HOME}/${MOZ_FIREFOX_FILE}" + +## +## Enable Wayland backend? +## +if @DEFAULT_WAYLAND@ && [[ -z ${MOZ_DISABLE_WAYLAND} ]]; then + if [[ -n "${WAYLAND_DISPLAY}" ]]; then + export MOZ_ENABLE_WAYLAND=1 + fi +fi + +## +## Use D-Bus remote exclusively when there's Wayland display. +## +if [[ -n "${WAYLAND_DISPLAY}" ]]; then + export MOZ_DBUS_REMOTE=1 +fi + +## +## Make sure that we set the plugin path +## +MOZ_PLUGIN_DIR="plugins" + +if [[ -n "${MOZ_PLUGIN_PATH}" ]]; then + MOZ_PLUGIN_PATH=${MOZ_PLUGIN_PATH}:${MOZ_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR} +else + MOZ_PLUGIN_PATH=${MOZ_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR} +fi + +if [[ -d "${SECONDARY_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR}" ]]; then + MOZ_PLUGIN_PATH=${MOZ_PLUGIN_PATH}:${SECONDARY_LIB_DIR}/mozilla/${MOZ_PLUGIN_DIR} +fi + +export MOZ_PLUGIN_PATH + +## +## Set MOZ_APP_LAUNCHER for gnome-session +## +export MOZ_APP_LAUNCHER="@PREFIX@/bin/${cmdname}" + +## +## Disable the GNOME crash dialog, Mozilla has its own +## +if [[ "${XDG_CURRENT_DESKTOP}" == "GNOME" ]]; then + GNOME_DISABLE_CRASH_DIALOG=1 + export GNOME_DISABLE_CRASH_DIALOG +fi + +## +## Enable Xinput2 (#617344) +## + +# respect user settings +MOZ_USE_XINPUT2=${MOZ_USE_XINPUT2:-auto} + +if [[ ${MOZ_USE_XINPUT2} == auto && -n ${WAYLAND_DISPLAY} ]]; then + # enabling XINPUT2 should be safe for all wayland users + MOZ_USE_XINPUT2=1 +elif [[ ${MOZ_USE_XINPUT2} == auto && ${XDG_CURRENT_DESKTOP^^} == KDE ]]; then + # XINPUT2 is known to cause problems for KWin users + MOZ_USE_XINPUT2=0 +elif [[ ${MOZ_USE_XINPUT2} == auto && ${XDG_CURRENT_DESKTOP^^} == LXQT ]]; then + # LXQt uses KWin + MOZ_USE_XINPUT2=0 +elif [[ ${MOZ_USE_XINPUT2} == auto ]]; then + # should work on Mate, Xfce, FluxBox, OpenBox and all the others ... + MOZ_USE_XINPUT2=1 +fi + +[[ ${MOZ_USE_XINPUT2} != 0 ]] && export MOZ_USE_XINPUT2=${MOZ_USE_XINPUT2} + +# Don't throw "old profile" dialog box. +export MOZ_ALLOW_DOWNGRADE=1 + +# Run the browser +exec ${MOZ_PROGRAM} "${@}" diff --git a/www-client/firefox/files/gentoo-default-prefs.js b/www-client/firefox/files/gentoo-default-prefs.js new file mode 100644 index 0000000..e0389ed --- /dev/null +++ b/www-client/firefox/files/gentoo-default-prefs.js @@ -0,0 +1,11 @@ +pref("general.smoothScroll", true); +pref("general.autoScroll", false); +pref("browser.urlbar.hideGoButton", true); +pref("browser.shell.checkDefaultBrowser", false); +pref("browser.EULA.override", true); +pref("general.useragent.locale", "chrome://global/locale/intl.properties"); +pref("intl.locale.requested", ""); +/* Disable DoH by default */ +pref("network.trr.mode", 5); +/* Disable use of Mozilla Normandy service by default */ +pref("app.normandy.enabled", false); diff --git a/www-client/firefox/files/gentoo-hwaccel-prefs.js b/www-client/firefox/files/gentoo-hwaccel-prefs.js new file mode 100644 index 0000000..a00144a --- /dev/null +++ b/www-client/firefox/files/gentoo-hwaccel-prefs.js @@ -0,0 +1,3 @@ +/* Force hardware accelerated rendering due to USE=hwaccel */ +pref("layers.acceleration.force-enabled", true); +pref("webgl.force-enabled", true); diff --git a/www-client/firefox/files/gentoo-hwaccel-prefs.js-r2 b/www-client/firefox/files/gentoo-hwaccel-prefs.js-r2 new file mode 100644 index 0000000..fc561d0 --- /dev/null +++ b/www-client/firefox/files/gentoo-hwaccel-prefs.js-r2 @@ -0,0 +1,6 @@ +/* Force hardware accelerated rendering due to USE=hwaccel */ +pref("gfx.webrender.all", true); +pref("layers.acceleration.force-enabled", true); +pref("layers.gpu-process.enabled", true); +pref("media.hardware-video-decoding.enabled", true); +pref("webgl.force-enabled", true); diff --git a/www-client/firefox/files/icon/firefox-r2.desktop b/www-client/firefox/files/icon/firefox-r2.desktop new file mode 100644 index 0000000..45d5f11 --- /dev/null +++ b/www-client/firefox/files/icon/firefox-r2.desktop @@ -0,0 +1,236 @@ +[Desktop Entry] +Version=1.0 +Name=@NAME@ +GenericName=Web Browser +Comment=Browse the Web +Exec=@EXEC@ %u +Icon=@ICON@ +Terminal=false +Type=Application +MimeType=application/pdf;application/vnd.mozilla.xul+xml;application/xhtml+xml;text/html;text/mml;text/xml;x-scheme-handler/ftp;x-scheme-handler/http;x-scheme-handler/https; +StartupNotify=true +Categories=Network;WebBrowser; +Keywords=web;browser;internet; +Actions=new-window;new-private-window;profile-manager-window; + +[Desktop Action new-window] +Name=Open a New Window +Name[ach]=Dirica manyen +Name[af]=Nuwe venster +Name[an]=Nueva finestra +Name[ar]=نافذة جديدة +Name[as]=নতুন উইন্ডো +Name[ast]=Ventana nueva +Name[az]=Yeni Pəncərə +Name[be]=Новае акно +Name[bg]=Нов прозорец +Name[bn_BD]=নতুন উইন্ডো (N) +Name[bn_IN]=নতুন উইন্ডো +Name[br]=Prenestr nevez +Name[brx]=गोदान उइन्ड'(N) +Name[bs]=Novi prozor +Name[ca]=Finestra nova +Name[cak]=K'ak'a' tzuwäch +Name[cs]=Nové okno +Name[cy]=Ffenestr Newydd +Name[da]=Nyt vindue +Name[de]=Neues Fenster +Name[dsb]=Nowe wokno +Name[el]=Νέο παράθυρο +Name[en_GB]=New Window +Name[en_US]=New Window +Name[en_ZA]=New Window +Name[eo]=Nova fenestro +Name[es_AR]=Nueva ventana +Name[es_CL]=Nueva ventana +Name[es_ES]=Nueva ventana +Name[es_MX]=Nueva ventana +Name[et]=Uus aken +Name[eu]=Leiho berria +Name[fa]=پنجره جدید‌ +Name[ff]=Henorde Hesere +Name[fi]=Uusi ikkuna +Name[fr]=Nouvelle fenêtre +Name[fy_NL]=Nij finster +Name[ga_IE]=Fuinneog Nua +Name[gd]=Uinneag ùr +Name[gl]=Nova xanela +Name[gn]=Ovetã pyahu +Name[gu_IN]=નવી વિન્ડો +Name[he]=חלון חדש +Name[hi_IN]=नया विंडो +Name[hr]=Novi prozor +Name[hsb]=Nowe wokno +Name[hu]=Új ablak +Name[hy_AM]=Նոր Պատուհան +Name[id]=Jendela Baru +Name[is]=Nýr gluggi +Name[it]=Nuova finestra +Name[ja]=新しいウィンドウ +Name[ja_JP-mac]=新規ウインドウ +Name[ka]=ახალი ფანჯარა +Name[kk]=Жаңа терезе +Name[km]=បង្អួច​​​ថ្មី +Name[kn]=ಹೊಸ ಕಿಟಕಿ +Name[ko]=새 창 +Name[kok]=नवें जनेल +Name[ks]=نئئ وِنڈو +Name[lij]=Neuvo barcon +Name[lo]=ຫນ້າຕ່າງໃຫມ່ +Name[lt]=Naujas langas +Name[ltg]=Jauns lūgs +Name[lv]=Jauns logs +Name[mai]=नव विंडो +Name[mk]=Нов прозорец +Name[ml]=പുതിയ ജാലകം +Name[mr]=नवीन पटल +Name[ms]=Tetingkap Baru +Name[my]=ဝင်းဒိုးအသစ် +Name[nb_NO]=Nytt vindu +Name[ne_NP]=नयाँ सञ्झ्याल +Name[nl]=Nieuw venster +Name[nn_NO]=Nytt vindauge +Name[or]=ନୂତନ ୱିଣ୍ଡୋ +Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ +Name[pl]=Nowe okno +Name[pt_BR]=Nova janela +Name[pt_PT]=Nova janela +Name[rm]=Nova fanestra +Name[ro]=Fereastră nouă +Name[ru]=Новое окно +Name[sat]=नावा विंडो (N) +Name[si]=නව කවුළුවක් +Name[sk]=Nové okno +Name[sl]=Novo okno +Name[son]=Zanfun taaga +Name[sq]=Dritare e Re +Name[sr]=Нови прозор +Name[sv_SE]=Nytt fönster +Name[ta]=புதிய சாளரம் +Name[te]=కొత్త విండో +Name[th]=หน้าต่างใหม่ +Name[tr]=Yeni pencere +Name[tsz]=Eraatarakua jimpani +Name[uk]=Нове вікно +Name[ur]=نیا دریچہ +Name[uz]=Yangi oyna +Name[vi]=Cửa sổ mới +Name[wo]=Palanteer bu bees +Name[xh]=Ifestile entsha +Name[zh_CN]=新建窗口 +Name[zh_TW]=開新視窗 +Exec=@EXEC@ --new-window %u + +[Desktop Action new-private-window] +Name=Open a New Private Window +Name[ach]=Dirica manyen me mung +Name[af]=Nuwe privaatvenster +Name[an]=Nueva finestra privada +Name[ar]=نافذة خاصة جديدة +Name[as]=নতুন ব্যক্তিগত উইন্ডো +Name[ast]=Ventana privada nueva +Name[az]=Yeni Məxfi Pəncərə +Name[be]=Новае акно адасаблення +Name[bg]=Нов прозорец за поверително сърфиране +Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো +Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো +Name[br]=Prenestr merdeiñ prevez nevez +Name[brx]=गोदान प्राइभेट उइन्ड' +Name[bs]=Novi privatni prozor +Name[ca]=Finestra privada nova +Name[cak]=K'ak'a' ichinan tzuwäch +Name[cs]=Nové anonymní okno +Name[cy]=Ffenestr Breifat Newydd +Name[da]=Nyt privat vindue +Name[de]=Neues privates Fenster +Name[dsb]=Nowe priwatne wokno +Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης +Name[en_GB]=New Private Window +Name[en_US]=New Private Window +Name[en_ZA]=New Private Window +Name[eo]=Nova privata fenestro +Name[es_AR]=Nueva ventana privada +Name[es_CL]=Nueva ventana privada +Name[es_ES]=Nueva ventana privada +Name[es_MX]=Nueva ventana privada +Name[et]=Uus privaatne aken +Name[eu]=Leiho pribatu berria +Name[fa]=پنجره ناشناس جدید +Name[ff]=Henorde Suturo Hesere +Name[fi]=Uusi yksityinen ikkuna +Name[fr]=Nouvelle fenêtre de navigation privée +Name[fy_NL]=Nij priveefinster +Name[ga_IE]=Fuinneog Nua Phríobháideach +Name[gd]=Uinneag phrìobhaideach ùr +Name[gl]=Nova xanela privada +Name[gn]=Ovetã ñemi pyahu +Name[gu_IN]=નવી ખાનગી વિન્ડો +Name[he]=חלון פרטי חדש +Name[hi_IN]=नयी निजी विंडो +Name[hr]=Novi privatni prozor +Name[hsb]=Nowe priwatne wokno +Name[hu]=Új privát ablak +Name[hy_AM]=Սկսել Գաղտնի դիտարկում +Name[id]=Jendela Mode Pribadi Baru +Name[is]=Nýr huliðsgluggi +Name[it]=Nuova finestra anonima +Name[ja]=新しいプライベートウィンドウ +Name[ja_JP-mac]=新規プライベートウインドウ +Name[ka]=ახალი პირადი ფანჯარა +Name[kk]=Жаңа жекелік терезе +Name[km]=បង្អួច​ឯកជន​ថ្មី +Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ +Name[ko]=새 사생활 보호 모드 +Name[kok]=नवो खाजगी विंडो +Name[ks]=نْو پرایوٹ وینڈو& +Name[lij]=Neuvo barcon privou +Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່ +Name[lt]=Naujas privataus naršymo langas +Name[ltg]=Jauns privatais lūgs +Name[lv]=Jauns privātais logs +Name[mai]=नया निज विंडो (W) +Name[mk]=Нов приватен прозорец +Name[ml]=പുതിയ സ്വകാര്യ ജാലകം +Name[mr]=नवीन वैयक्तिक पटल +Name[ms]=Tetingkap Persendirian Baharu +Name[my]=New Private Window +Name[nb_NO]=Nytt privat vindu +Name[ne_NP]=नयाँ निजी सञ्झ्याल +Name[nl]=Nieuw privévenster +Name[nn_NO]=Nytt privat vindauge +Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ +Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ +Name[pl]=Nowe okno prywatne +Name[pt_BR]=Nova janela privativa +Name[pt_PT]=Nova janela privada +Name[rm]=Nova fanestra privata +Name[ro]=Fereastră privată nouă +Name[ru]=Новое приватное окно +Name[sat]=नावा निजेराक् विंडो (W ) +Name[si]=නව පුද්ගලික කවුළුව (W) +Name[sk]=Nové okno v režime Súkromné prehliadanie +Name[sl]=Novo zasebno okno +Name[son]=Sutura zanfun taaga +Name[sq]=Dritare e Re Private +Name[sr]=Нови приватан прозор +Name[sv_SE]=Nytt privat fönster +Name[ta]=புதிய தனிப்பட்ட சாளரம் +Name[te]=కొత్త ఆంతరంగిక విండో +Name[th]=หน้าต่างส่วนตัวใหม่ +Name[tr]=Yeni gizli pencere +Name[tsz]=Juchiiti eraatarakua jimpani +Name[uk]=Приватне вікно +Name[ur]=نیا نجی دریچہ +Name[uz]=Yangi maxfiy oyna +Name[vi]=Cửa sổ riêng tư mới +Name[wo]=Panlanteeru biir bu bees +Name[xh]=Ifestile yangasese entsha +Name[zh_CN]=新建隐私浏览窗口 +Name[zh_TW]=新增隱私視窗 +Exec=@EXEC@ --private-window %u + +[Desktop Action profile-manager-window] +Name=Open the Profile Manager +Name[de]=Profilverwaltung öffnen +Name[cs]=Správa profilů +Exec=@EXEC@ --ProfileManager diff --git a/www-client/firefox/files/icon/firefox-r3.desktop b/www-client/firefox/files/icon/firefox-r3.desktop new file mode 100644 index 0000000..8219e93 --- /dev/null +++ b/www-client/firefox/files/icon/firefox-r3.desktop @@ -0,0 +1,236 @@ +[Desktop Entry] +Version=1.0 +Name=@NAME@ +GenericName=Web Browser +Comment=Browse the Web +Exec=@EXEC@ %u +Icon=@ICON@ +Terminal=false +Type=Application +MimeType=application/pdf;application/vnd.mozilla.xul+xml;application/xhtml+xml;text/html;text/mml;text/xml;x-scheme-handler/http;x-scheme-handler/https; +StartupNotify=true +Categories=Network;WebBrowser; +Keywords=web;browser;internet; +Actions=new-window;new-private-window;profile-manager-window; + +[Desktop Action new-window] +Name=Open a New Window +Name[ach]=Dirica manyen +Name[af]=Nuwe venster +Name[an]=Nueva finestra +Name[ar]=نافذة جديدة +Name[as]=নতুন উইন্ডো +Name[ast]=Ventana nueva +Name[az]=Yeni Pəncərə +Name[be]=Новае акно +Name[bg]=Нов прозорец +Name[bn_BD]=নতুন উইন্ডো (N) +Name[bn_IN]=নতুন উইন্ডো +Name[br]=Prenestr nevez +Name[brx]=गोदान उइन्ड'(N) +Name[bs]=Novi prozor +Name[ca]=Finestra nova +Name[cak]=K'ak'a' tzuwäch +Name[cs]=Nové okno +Name[cy]=Ffenestr Newydd +Name[da]=Nyt vindue +Name[de]=Neues Fenster +Name[dsb]=Nowe wokno +Name[el]=Νέο παράθυρο +Name[en_GB]=New Window +Name[en_US]=New Window +Name[en_ZA]=New Window +Name[eo]=Nova fenestro +Name[es_AR]=Nueva ventana +Name[es_CL]=Nueva ventana +Name[es_ES]=Nueva ventana +Name[es_MX]=Nueva ventana +Name[et]=Uus aken +Name[eu]=Leiho berria +Name[fa]=پنجره جدید‌ +Name[ff]=Henorde Hesere +Name[fi]=Uusi ikkuna +Name[fr]=Nouvelle fenêtre +Name[fy_NL]=Nij finster +Name[ga_IE]=Fuinneog Nua +Name[gd]=Uinneag ùr +Name[gl]=Nova xanela +Name[gn]=Ovetã pyahu +Name[gu_IN]=નવી વિન્ડો +Name[he]=חלון חדש +Name[hi_IN]=नया विंडो +Name[hr]=Novi prozor +Name[hsb]=Nowe wokno +Name[hu]=Új ablak +Name[hy_AM]=Նոր Պատուհան +Name[id]=Jendela Baru +Name[is]=Nýr gluggi +Name[it]=Nuova finestra +Name[ja]=新しいウィンドウ +Name[ja_JP-mac]=新規ウインドウ +Name[ka]=ახალი ფანჯარა +Name[kk]=Жаңа терезе +Name[km]=បង្អួច​​​ថ្មី +Name[kn]=ಹೊಸ ಕಿಟಕಿ +Name[ko]=새 창 +Name[kok]=नवें जनेल +Name[ks]=نئئ وِنڈو +Name[lij]=Neuvo barcon +Name[lo]=ຫນ້າຕ່າງໃຫມ່ +Name[lt]=Naujas langas +Name[ltg]=Jauns lūgs +Name[lv]=Jauns logs +Name[mai]=नव विंडो +Name[mk]=Нов прозорец +Name[ml]=പുതിയ ജാലകം +Name[mr]=नवीन पटल +Name[ms]=Tetingkap Baru +Name[my]=ဝင်းဒိုးအသစ် +Name[nb_NO]=Nytt vindu +Name[ne_NP]=नयाँ सञ्झ्याल +Name[nl]=Nieuw venster +Name[nn_NO]=Nytt vindauge +Name[or]=ନୂତନ ୱିଣ୍ଡୋ +Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ +Name[pl]=Nowe okno +Name[pt_BR]=Nova janela +Name[pt_PT]=Nova janela +Name[rm]=Nova fanestra +Name[ro]=Fereastră nouă +Name[ru]=Новое окно +Name[sat]=नावा विंडो (N) +Name[si]=නව කවුළුවක් +Name[sk]=Nové okno +Name[sl]=Novo okno +Name[son]=Zanfun taaga +Name[sq]=Dritare e Re +Name[sr]=Нови прозор +Name[sv_SE]=Nytt fönster +Name[ta]=புதிய சாளரம் +Name[te]=కొత్త విండో +Name[th]=หน้าต่างใหม่ +Name[tr]=Yeni pencere +Name[tsz]=Eraatarakua jimpani +Name[uk]=Нове вікно +Name[ur]=نیا دریچہ +Name[uz]=Yangi oyna +Name[vi]=Cửa sổ mới +Name[wo]=Palanteer bu bees +Name[xh]=Ifestile entsha +Name[zh_CN]=新建窗口 +Name[zh_TW]=開新視窗 +Exec=@EXEC@ --new-window %u + +[Desktop Action new-private-window] +Name=Open a New Private Window +Name[ach]=Dirica manyen me mung +Name[af]=Nuwe privaatvenster +Name[an]=Nueva finestra privada +Name[ar]=نافذة خاصة جديدة +Name[as]=নতুন ব্যক্তিগত উইন্ডো +Name[ast]=Ventana privada nueva +Name[az]=Yeni Məxfi Pəncərə +Name[be]=Новае акно адасаблення +Name[bg]=Нов прозорец за поверително сърфиране +Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো +Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো +Name[br]=Prenestr merdeiñ prevez nevez +Name[brx]=गोदान प्राइभेट उइन्ड' +Name[bs]=Novi privatni prozor +Name[ca]=Finestra privada nova +Name[cak]=K'ak'a' ichinan tzuwäch +Name[cs]=Nové anonymní okno +Name[cy]=Ffenestr Breifat Newydd +Name[da]=Nyt privat vindue +Name[de]=Neues privates Fenster +Name[dsb]=Nowe priwatne wokno +Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης +Name[en_GB]=New Private Window +Name[en_US]=New Private Window +Name[en_ZA]=New Private Window +Name[eo]=Nova privata fenestro +Name[es_AR]=Nueva ventana privada +Name[es_CL]=Nueva ventana privada +Name[es_ES]=Nueva ventana privada +Name[es_MX]=Nueva ventana privada +Name[et]=Uus privaatne aken +Name[eu]=Leiho pribatu berria +Name[fa]=پنجره ناشناس جدید +Name[ff]=Henorde Suturo Hesere +Name[fi]=Uusi yksityinen ikkuna +Name[fr]=Nouvelle fenêtre de navigation privée +Name[fy_NL]=Nij priveefinster +Name[ga_IE]=Fuinneog Nua Phríobháideach +Name[gd]=Uinneag phrìobhaideach ùr +Name[gl]=Nova xanela privada +Name[gn]=Ovetã ñemi pyahu +Name[gu_IN]=નવી ખાનગી વિન્ડો +Name[he]=חלון פרטי חדש +Name[hi_IN]=नयी निजी विंडो +Name[hr]=Novi privatni prozor +Name[hsb]=Nowe priwatne wokno +Name[hu]=Új privát ablak +Name[hy_AM]=Սկսել Գաղտնի դիտարկում +Name[id]=Jendela Mode Pribadi Baru +Name[is]=Nýr huliðsgluggi +Name[it]=Nuova finestra anonima +Name[ja]=新しいプライベートウィンドウ +Name[ja_JP-mac]=新規プライベートウインドウ +Name[ka]=ახალი პირადი ფანჯარა +Name[kk]=Жаңа жекелік терезе +Name[km]=បង្អួច​ឯកជន​ថ្មី +Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ +Name[ko]=새 사생활 보호 모드 +Name[kok]=नवो खाजगी विंडो +Name[ks]=نْو پرایوٹ وینڈو& +Name[lij]=Neuvo barcon privou +Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່ +Name[lt]=Naujas privataus naršymo langas +Name[ltg]=Jauns privatais lūgs +Name[lv]=Jauns privātais logs +Name[mai]=नया निज विंडो (W) +Name[mk]=Нов приватен прозорец +Name[ml]=പുതിയ സ്വകാര്യ ജാലകം +Name[mr]=नवीन वैयक्तिक पटल +Name[ms]=Tetingkap Persendirian Baharu +Name[my]=New Private Window +Name[nb_NO]=Nytt privat vindu +Name[ne_NP]=नयाँ निजी सञ्झ्याल +Name[nl]=Nieuw privévenster +Name[nn_NO]=Nytt privat vindauge +Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ +Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ +Name[pl]=Nowe okno prywatne +Name[pt_BR]=Nova janela privativa +Name[pt_PT]=Nova janela privada +Name[rm]=Nova fanestra privata +Name[ro]=Fereastră privată nouă +Name[ru]=Новое приватное окно +Name[sat]=नावा निजेराक् विंडो (W ) +Name[si]=නව පුද්ගලික කවුළුව (W) +Name[sk]=Nové okno v režime Súkromné prehliadanie +Name[sl]=Novo zasebno okno +Name[son]=Sutura zanfun taaga +Name[sq]=Dritare e Re Private +Name[sr]=Нови приватан прозор +Name[sv_SE]=Nytt privat fönster +Name[ta]=புதிய தனிப்பட்ட சாளரம் +Name[te]=కొత్త ఆంతరంగిక విండో +Name[th]=หน้าต่างส่วนตัวใหม่ +Name[tr]=Yeni gizli pencere +Name[tsz]=Juchiiti eraatarakua jimpani +Name[uk]=Приватне вікно +Name[ur]=نیا نجی دریچہ +Name[uz]=Yangi maxfiy oyna +Name[vi]=Cửa sổ riêng tư mới +Name[wo]=Panlanteeru biir bu bees +Name[xh]=Ifestile yangasese entsha +Name[zh_CN]=新建隐私浏览窗口 +Name[zh_TW]=新增隱私視窗 +Exec=@EXEC@ --private-window %u + +[Desktop Action profile-manager-window] +Name=Open the Profile Manager +Name[de]=Profilverwaltung öffnen +Name[cs]=Správa profilů +Exec=@EXEC@ --ProfileManager diff --git a/www-client/firefox/files/icon/firefox-symbolic.svg b/www-client/firefox/files/icon/firefox-symbolic.svg new file mode 100644 index 0000000..2078eea --- /dev/null +++ b/www-client/firefox/files/icon/firefox-symbolic.svg @@ -0,0 +1,64 @@ + + + + + + image/svg+xml + + Gnome Symbolic Icon Theme + + + + + + + + Gnome Symbolic Icon Theme + + diff --git a/www-client/firefox/firefox-115.12.0.ebuild b/www-client/firefox/firefox-115.12.0.ebuild new file mode 100644 index 0000000..a3c2827 --- /dev/null +++ b/www-client/firefox/firefox-115.12.0.ebuild @@ -0,0 +1,1417 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +FIREFOX_PATCHSET="firefox-115esr-patches-09.tar.xz" + +LLVM_MAX_SLOT=17 + +PYTHON_COMPAT=( python3_{10..11} ) +PYTHON_REQ_USE="ncurses,sqlite,ssl" + +WANT_AUTOCONF="2.1" + +VIRTUALX_REQUIRED="manual" + +MOZ_ESR=yes + +MOZ_PV=${PV} +MOZ_PV_SUFFIX= +if [[ ${PV} =~ (_(alpha|beta|rc).*)$ ]] ; then + MOZ_PV_SUFFIX=${BASH_REMATCH[1]} + + # Convert the ebuild version to the upstream Mozilla version + MOZ_PV="${MOZ_PV/_alpha/a}" # Handle alpha for SRC_URI + MOZ_PV="${MOZ_PV/_beta/b}" # Handle beta for SRC_URI + MOZ_PV="${MOZ_PV%%_rc*}" # Handle rc for SRC_URI +fi + +if [[ -n ${MOZ_ESR} ]] ; then + # ESR releases have slightly different version numbers + MOZ_PV="${MOZ_PV}esr" +fi + +MOZ_PN="${PN%-bin}" +MOZ_P="${MOZ_PN}-${MOZ_PV}" +MOZ_PV_DISTFILES="${MOZ_PV}${MOZ_PV_SUFFIX}" +MOZ_P_DISTFILES="${MOZ_PN}-${MOZ_PV_DISTFILES}" + +inherit autotools check-reqs desktop flag-o-matic gnome2-utils linux-info llvm multiprocessing \ + optfeature pax-utils python-any-r1 readme.gentoo-r1 toolchain-funcs virtualx xdg + +MOZ_SRC_BASE_URI="https://archive.mozilla.org/pub/${MOZ_PN}/releases/${MOZ_PV}" + +if [[ ${PV} == *_rc* ]] ; then + MOZ_SRC_BASE_URI="https://archive.mozilla.org/pub/${MOZ_PN}/candidates/${MOZ_PV}-candidates/build${PV##*_rc}" +fi + +PATCH_URIS=( + https://dev.gentoo.org/~juippis/mozilla/patchsets/${FIREFOX_PATCHSET} +) + +SRC_URI="${MOZ_SRC_BASE_URI}/source/${MOZ_P}.source.tar.xz -> ${MOZ_P_DISTFILES}.source.tar.xz + ${PATCH_URIS[@]}" + +DESCRIPTION="Firefox Web Browser" +HOMEPAGE="https://www.mozilla.com/firefox" + +KEYWORDS="amd64 arm64 ~ppc64 ~riscv x86" + +SLOT="esr" +LICENSE="MPL-2.0 GPL-2 LGPL-2.1" + +IUSE="+clang cpu_flags_arm_neon dbus debug eme-free hardened hwaccel" +IUSE+=" jack libproxy lto openh264 pgo pulseaudio sndio selinux" +IUSE+=" +system-av1 +system-harfbuzz +system-icu +system-jpeg +system-libevent +system-libvpx system-png system-python-libs +system-webp" +IUSE+=" wayland wifi +X" + +# Firefox-only IUSE +IUSE+=" geckodriver +gmp-autoupdate screencast" + +REQUIRED_USE="|| ( X wayland ) + debug? ( !system-av1 ) + pgo? ( lto ) + wifi? ( dbus )" + +FF_ONLY_DEPEND="!www-client/firefox:0 + !www-client/firefox:rapid + screencast? ( media-video/pipewire:= ) + selinux? ( sec-policy/selinux-mozilla )" +BDEPEND="${PYTHON_DEPS} + || ( + ( + sys-devel/clang:17 + sys-devel/llvm:17 + clang? ( + sys-devel/lld:17 + virtual/rust:0/llvm-17 + pgo? ( =sys-libs/compiler-rt-sanitizers-17*[profile] ) + ) + ) + ( + sys-devel/clang:16 + sys-devel/llvm:16 + clang? ( + sys-devel/lld:16 + virtual/rust:0/llvm-16 + pgo? ( =sys-libs/compiler-rt-sanitizers-16*[profile] ) + ) + ) + ( + sys-devel/clang:15 + sys-devel/llvm:15 + clang? ( + sys-devel/lld:15 + virtual/rust:0/llvm-15 + pgo? ( =sys-libs/compiler-rt-sanitizers-15*[profile] ) + ) + ) + ) + app-alternatives/awk + app-arch/unzip + app-arch/zip + >=dev-util/cbindgen-0.24.3 + net-libs/nodejs + virtual/pkgconfig + !clang? ( + >=virtual/rust-1.65 + =dev-lang/nasm-2.14 ) + x86? ( >=dev-lang/nasm-2.14 ) + pgo? ( + X? ( + sys-devel/gettext + x11-base/xorg-server[xvfb] + x11-apps/xhost + ) + !X? ( + || ( + gui-wm/tinywl + &2 + return 1 + fi + + if use clang && ! tc-ld-is-mold ; then + if ! has_version -b "sys-devel/lld:${LLVM_SLOT}" ; then + einfo "sys-devel/lld:${LLVM_SLOT} is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2 + return 1 + fi + + if ! has_version -b "virtual/rust:0/llvm-${LLVM_SLOT}" ; then + einfo "virtual/rust:0/llvm-${LLVM_SLOT} is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2 + return 1 + fi + + if use pgo ; then + if ! has_version -b "=sys-libs/compiler-rt-sanitizers-${LLVM_SLOT}*[profile]" ; then + einfo "=sys-libs/compiler-rt-sanitizers-${LLVM_SLOT}*[profile] is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2 + return 1 + fi + fi + fi + + einfo "Using LLVM slot ${LLVM_SLOT} to build" >&2 +} + +MOZ_LANGS=( + af ar ast be bg br ca cak cs cy da de dsb + el en-CA en-GB en-US es-AR es-ES et eu + fi fr fy-NL ga-IE gd gl he hr hsb hu + id is it ja ka kab kk ko lt lv ms nb-NO nl nn-NO + pa-IN pl pt-BR pt-PT rm ro ru + sk sl sq sr sv-SE th tr uk uz vi zh-CN zh-TW +) + +# Firefox-only LANGS +MOZ_LANGS+=( ach ) +MOZ_LANGS+=( an ) +MOZ_LANGS+=( az ) +MOZ_LANGS+=( bn ) +MOZ_LANGS+=( bs ) +MOZ_LANGS+=( ca-valencia ) +MOZ_LANGS+=( eo ) +MOZ_LANGS+=( es-CL ) +MOZ_LANGS+=( es-MX ) +MOZ_LANGS+=( fa ) +MOZ_LANGS+=( ff ) +MOZ_LANGS+=( fur ) +MOZ_LANGS+=( gn ) +MOZ_LANGS+=( gu-IN ) +MOZ_LANGS+=( hi-IN ) +MOZ_LANGS+=( hy-AM ) +MOZ_LANGS+=( ia ) +MOZ_LANGS+=( km ) +MOZ_LANGS+=( kn ) +MOZ_LANGS+=( lij ) +MOZ_LANGS+=( mk ) +MOZ_LANGS+=( mr ) +MOZ_LANGS+=( my ) +MOZ_LANGS+=( ne-NP ) +MOZ_LANGS+=( oc ) +MOZ_LANGS+=( sc ) +MOZ_LANGS+=( sco ) +MOZ_LANGS+=( si ) +MOZ_LANGS+=( son ) +MOZ_LANGS+=( szl ) +MOZ_LANGS+=( ta ) +MOZ_LANGS+=( te ) +MOZ_LANGS+=( tl ) +MOZ_LANGS+=( trs ) +MOZ_LANGS+=( ur ) +MOZ_LANGS+=( xh ) + +mozilla_set_globals() { + # https://bugs.gentoo.org/587334 + local MOZ_TOO_REGIONALIZED_FOR_L10N=( + fy-NL ga-IE gu-IN hi-IN hy-AM nb-NO ne-NP nn-NO pa-IN sv-SE + ) + + local lang xflag + for lang in "${MOZ_LANGS[@]}" ; do + # en and en_US are handled internally + if [[ ${lang} == en ]] || [[ ${lang} == en-US ]] ; then + continue + fi + + # strip region subtag if $lang is in the list + if has ${lang} "${MOZ_TOO_REGIONALIZED_FOR_L10N[@]}" ; then + xflag=${lang%%-*} + else + xflag=${lang} + fi + + SRC_URI+=" l10n_${xflag/[_@]/-}? (" + SRC_URI+=" ${MOZ_SRC_BASE_URI}/linux-x86_64/xpi/${lang}.xpi -> ${MOZ_P_DISTFILES}-${lang}.xpi" + SRC_URI+=" )" + IUSE+=" l10n_${xflag/[_@]/-}" + done +} +mozilla_set_globals + +moz_clear_vendor_checksums() { + debug-print-function ${FUNCNAME} "$@" + + if [[ ${#} -ne 1 ]] ; then + die "${FUNCNAME} requires exact one argument" + fi + + einfo "Clearing cargo checksums for ${1} ..." + + sed -i \ + -e 's/\("files":{\)[^}]*/\1/' \ + "${S}"/third_party/rust/${1}/.cargo-checksum.json \ + || die +} + +moz_install_xpi() { + debug-print-function ${FUNCNAME} "$@" + + if [[ ${#} -lt 2 ]] ; then + die "${FUNCNAME} requires at least two arguments" + fi + + local DESTDIR=${1} + shift + + insinto "${DESTDIR}" + + local emid xpi_file xpi_tmp_dir + for xpi_file in "${@}" ; do + emid= + xpi_tmp_dir=$(mktemp -d --tmpdir="${T}") + + # Unpack XPI + unzip -qq "${xpi_file}" -d "${xpi_tmp_dir}" || die + + # Determine extension ID + if [[ -f "${xpi_tmp_dir}/install.rdf" ]] ; then + emid=$(sed -n -e '/install-manifest/,$ { /em:id/!d; s/.*[\">]\([^\"<>]*\)[\"<].*/\1/; p; q }' "${xpi_tmp_dir}/install.rdf") + [[ -z "${emid}" ]] && die "failed to determine extension id from install.rdf" + elif [[ -f "${xpi_tmp_dir}/manifest.json" ]] ; then + emid=$(sed -n -e 's/.*"id": "\([^"]*\)".*/\1/p' "${xpi_tmp_dir}/manifest.json") + [[ -z "${emid}" ]] && die "failed to determine extension id from manifest.json" + else + die "failed to determine extension id" + fi + + einfo "Installing ${emid}.xpi into ${ED}${DESTDIR} ..." + newins "${xpi_file}" "${emid}.xpi" + done +} + +mozconfig_add_options_ac() { + debug-print-function ${FUNCNAME} "$@" + + if [[ ${#} -lt 2 ]] ; then + die "${FUNCNAME} requires at least two arguments" + fi + + local reason=${1} + shift + + local option + for option in ${@} ; do + echo "ac_add_options ${option} # ${reason}" >>${MOZCONFIG} + done +} + +mozconfig_add_options_mk() { + debug-print-function ${FUNCNAME} "$@" + + if [[ ${#} -lt 2 ]] ; then + die "${FUNCNAME} requires at least two arguments" + fi + + local reason=${1} + shift + + local option + for option in ${@} ; do + echo "mk_add_options ${option} # ${reason}" >>${MOZCONFIG} + done +} + +mozconfig_use_enable() { + debug-print-function ${FUNCNAME} "$@" + + if [[ ${#} -lt 1 ]] ; then + die "${FUNCNAME} requires at least one arguments" + fi + + local flag=$(use_enable "${@}") + mozconfig_add_options_ac "$(use ${1} && echo +${1} || echo -${1})" "${flag}" +} + +mozconfig_use_with() { + debug-print-function ${FUNCNAME} "$@" + + if [[ ${#} -lt 1 ]] ; then + die "${FUNCNAME} requires at least one arguments" + fi + + local flag=$(use_with "${@}") + mozconfig_add_options_ac "$(use ${1} && echo +${1} || echo -${1})" "${flag}" +} + +# This is a straight copypaste from toolchain-funcs.eclass's 'tc-ld-is-lld', and is temporarily +# placed here until toolchain-funcs.eclass gets an official support for mold linker. +# Please see: +# https://github.com/gentoo/gentoo/pull/28366 || +# https://github.com/gentoo/gentoo/pull/28355 +tc-ld-is-mold() { + local out + + # Ensure ld output is in English. + local -x LC_ALL=C + + # First check the linker directly. + out=$($(tc-getLD "$@") --version 2>&1) + if [[ ${out} == *"mold"* ]] ; then + return 0 + fi + + # Then see if they're selecting mold via compiler flags. + # Note: We're assuming they're using LDFLAGS to hold the + # options and not CFLAGS/CXXFLAGS. + local base="${T}/test-tc-linker" + cat <<-EOF > "${base}.c" + int main() { return 0; } + EOF + out=$($(tc-getCC "$@") ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -Wl,--version "${base}.c" -o "${base}" 2>&1) + rm -f "${base}"* + if [[ ${out} == *"mold"* ]] ; then + return 0 + fi + + # No mold here! + return 1 +} + +virtwl() { + debug-print-function ${FUNCNAME} "$@" + + [[ $# -lt 1 ]] && die "${FUNCNAME} needs at least one argument" + [[ -n $XDG_RUNTIME_DIR ]] || die "${FUNCNAME} needs XDG_RUNTIME_DIR to be set; try xdg_environment_reset" + tinywl -h >/dev/null || die 'tinywl -h failed' + + # TODO: don't run addpredict in utility function. WLR_RENDERER=pixman doesn't work + addpredict /dev/dri + local VIRTWL VIRTWL_PID + coproc VIRTWL { WLR_BACKENDS=headless exec tinywl -s 'echo $WAYLAND_DISPLAY; read _; kill $PPID'; } + local -x WAYLAND_DISPLAY + read WAYLAND_DISPLAY <&${VIRTWL[0]} + + debug-print "${FUNCNAME}: $@" + "$@" + local r=$? + + [[ -n $VIRTWL_PID ]] || die "tinywl exited unexpectedly" + exec {VIRTWL[0]}<&- {VIRTWL[1]}>&- + return $r +} + +pkg_pretend() { + if [[ ${MERGE_TYPE} != binary ]] ; then + if use pgo ; then + if ! has usersandbox $FEATURES ; then + die "You must enable usersandbox as X server can not run as root!" + fi + fi + + # Ensure we have enough disk space to compile + if use pgo || use lto || use debug ; then + CHECKREQS_DISK_BUILD="13500M" + else + CHECKREQS_DISK_BUILD="6600M" + fi + + check-reqs_pkg_pretend + fi +} + +pkg_setup() { + if [[ ${MERGE_TYPE} != binary ]] ; then + if use pgo ; then + if ! has userpriv ${FEATURES} ; then + eerror "Building ${PN} with USE=pgo and FEATURES=-userpriv is not supported!" + fi + fi + + # Ensure we have enough disk space to compile + if use pgo || use lto || use debug ; then + CHECKREQS_DISK_BUILD="13500M" + else + CHECKREQS_DISK_BUILD="6400M" + fi + + check-reqs_pkg_setup + + llvm_pkg_setup + + if use clang && use lto && tc-ld-is-lld ; then + local version_lld=$(ld.lld --version 2>/dev/null | awk '{ print $2 }') + [[ -n ${version_lld} ]] && version_lld=$(ver_cut 1 "${version_lld}") + [[ -z ${version_lld} ]] && die "Failed to read ld.lld version!" + + local version_llvm_rust=$(rustc -Vv 2>/dev/null | grep -F -- 'LLVM version:' | awk '{ print $3 }') + [[ -n ${version_llvm_rust} ]] && version_llvm_rust=$(ver_cut 1 "${version_llvm_rust}") + [[ -z ${version_llvm_rust} ]] && die "Failed to read used LLVM version from rustc!" + + if ver_test "${version_lld}" -ne "${version_llvm_rust}" ; then + eerror "Rust is using LLVM version ${version_llvm_rust} but ld.lld version belongs to LLVM version ${version_lld}." + eerror "You will be unable to link ${CATEGORY}/${PN}. To proceed you have the following options:" + eerror " - Manually switch rust version using 'eselect rust' to match used LLVM version" + eerror " - Switch to dev-lang/rust[system-llvm] which will guarantee matching version" + eerror " - Build ${CATEGORY}/${PN} without USE=lto" + eerror " - Rebuild lld with llvm that was used to build rust (may need to rebuild the whole " + eerror " llvm/clang/lld/rust chain depending on your @world updates)" + die "LLVM version used by Rust (${version_llvm_rust}) does not match with ld.lld version (${version_lld})!" + fi + fi + + python-any-r1_pkg_setup + + # Avoid PGO profiling problems due to enviroment leakage + # These should *always* be cleaned up anyway + unset \ + DBUS_SESSION_BUS_ADDRESS \ + DISPLAY \ + ORBIT_SOCKETDIR \ + SESSION_MANAGER \ + XAUTHORITY \ + XDG_CACHE_HOME \ + XDG_SESSION_COOKIE + + # Build system is using /proc/self/oom_score_adj, bug #604394 + addpredict /proc/self/oom_score_adj + + # Build for Wayland + pgo + addpredict /dev/udmabuf + + if use pgo ; then + # Update 105.0: "/proc/self/oom_score_adj" isn't enough anymore with pgo, but not sure + # whether that's due to better OOM handling by Firefox (bmo#1771712), or portage + # (PORTAGE_SCHEDULING_POLICY) update... + addpredict /proc + + # May need a wider addpredict when using wayland+pgo. + addpredict /dev/dri + + # Allow access to GPU during PGO run + local ati_cards mesa_cards nvidia_cards render_cards + shopt -s nullglob + + ati_cards=$(echo -n /dev/ati/card* | sed 's/ /:/g') + if [[ -n "${ati_cards}" ]] ; then + addpredict "${ati_cards}" + fi + + mesa_cards=$(echo -n /dev/dri/card* | sed 's/ /:/g') + if [[ -n "${mesa_cards}" ]] ; then + addpredict "${mesa_cards}" + fi + + nvidia_cards=$(echo -n /dev/nvidia* | sed 's/ /:/g') + if [[ -n "${nvidia_cards}" ]] ; then + addpredict "${nvidia_cards}" + fi + + render_cards=$(echo -n /dev/dri/renderD128* | sed 's/ /:/g') + if [[ -n "${render_cards}" ]] ; then + addpredict "${render_cards}" + fi + + shopt -u nullglob + fi + + if ! mountpoint -q /dev/shm ; then + # If /dev/shm is not available, configure is known to fail with + # a traceback report referencing /usr/lib/pythonN.N/multiprocessing/synchronize.py + ewarn "/dev/shm is not mounted -- expect build failures!" + fi + + # Google API keys (see http://www.chromium.org/developers/how-tos/api-keys) + # Note: These are for Gentoo Linux use ONLY. For your own distribution, please + # get your own set of keys. + if [[ -z "${MOZ_API_KEY_GOOGLE+set}" ]] ; then + MOZ_API_KEY_GOOGLE="AIzaSyDEAOvatFogGaPi0eTgsV_ZlEzx0ObmepsMzfAc" + fi + + if [[ -z "${MOZ_API_KEY_LOCATION+set}" ]] ; then + MOZ_API_KEY_LOCATION="AIzaSyB2h2OuRgGaPicUgy5N-5hsZqiPW6sH3n_rptiQ" + fi + + # Mozilla API keys (see https://location.services.mozilla.com/api) + # Note: These are for Gentoo Linux use ONLY. For your own distribution, please + # get your own set of keys. + if [[ -z "${MOZ_API_KEY_MOZILLA+set}" ]] ; then + MOZ_API_KEY_MOZILLA="edb3d487-3a84-46m0ap1e3-9dfd-92b5efaaa005" + fi + + # Ensure we use C locale when building, bug #746215 + export LC_ALL=C + fi + + CONFIG_CHECK="~SECCOMP" + WARNING_SECCOMP="CONFIG_SECCOMP not set! This system will be unable to play DRM-protected content." + linux-info_pkg_setup +} + +src_unpack() { + local _lp_dir="${WORKDIR}/language_packs" + local _src_file + + if [[ ! -d "${_lp_dir}" ]] ; then + mkdir "${_lp_dir}" || die + fi + + for _src_file in ${A} ; do + if [[ ${_src_file} == *.xpi ]]; then + cp "${DISTDIR}/${_src_file}" "${_lp_dir}" || die "Failed to copy '${_src_file}' to '${_lp_dir}'!" + else + unpack ${_src_file} + fi + done +} + +src_prepare() { + if use lto; then + rm -v "${WORKDIR}"/firefox-patches/*-LTO-Only-enable-LTO-*.patch || die + fi + + if ! use ppc64; then + rm -v "${WORKDIR}"/firefox-patches/*ppc64*.patch || die + fi + + if use x86 && use elibc_glibc ; then + rm -v "${WORKDIR}"/firefox-patches/*-musl-non-lfs64-api-on-audio_thread_priority-crate.patch || die + fi + + # Workaround for bgo#917599 + if has_version ">=dev-libs/icu-74.1" && use system-icu ; then + eapply "${WORKDIR}"/firefox-patches/0029-bmo-1862601-system-icu-74.patch + fi + rm -v "${WORKDIR}"/firefox-patches/0029-bmo-1862601-system-icu-74.patch || die + + # Workaround for bgo#915651 on musl + if use elibc_glibc ; then + rm -v "${WORKDIR}"/firefox-patches/*bgo-748849-RUST_TARGET_override.patch || die + fi + + eapply "${WORKDIR}/firefox-patches" + + # Allow user to apply any additional patches without modifing ebuild + eapply_user + + # Make cargo respect MAKEOPTS + export CARGO_BUILD_JOBS="$(makeopts_jobs)" + + # Workaround for bgo#915651 + if ! use elibc_glibc ; then + if use amd64 ; then + export RUST_TARGET="x86_64-unknown-linux-musl" + elif use x86 ; then + export RUST_TARGET="i686-unknown-linux-musl" + elif use arm64 ; then + export RUST_TARGET="aarch64-unknown-linux-musl" + else + die "Unknown musl chost, please post your rustc -vV along with emerge --info on Gentoo's bug #915651" + fi + fi + + # Make LTO respect MAKEOPTS + sed -i \ + -e "s/multiprocessing.cpu_count()/$(makeopts_jobs)/" \ + "${S}"/build/moz.configure/lto-pgo.configure \ + || die "sed failed to set num_cores" + + # Make ICU respect MAKEOPTS + sed -i \ + -e "s/multiprocessing.cpu_count()/$(makeopts_jobs)/" \ + "${S}"/intl/icu_sources_data.py \ + || die "sed failed to set num_cores" + + # sed-in toolchain prefix + sed -i \ + -e "s/objdump/${CHOST}-objdump/" \ + "${S}"/python/mozbuild/mozbuild/configure/check_debug_ranges.py \ + || die "sed failed to set toolchain prefix" + + sed -i \ + -e 's/ccache_stats = None/return None/' \ + "${S}"/python/mozbuild/mozbuild/controller/building.py \ + || die "sed failed to disable ccache stats call" + + einfo "Removing pre-built binaries ..." + + find "${S}"/third_party -type f \( -name '*.so' -o -name '*.o' \) -print -delete || die + + # Clear cargo checksums from crates we have patched + # moz_clear_vendor_checksums crate + moz_clear_vendor_checksums audio_thread_priority + + # Create build dir + BUILD_DIR="${WORKDIR}/${PN}_build" + mkdir -p "${BUILD_DIR}" || die + + # Write API keys to disk + echo -n "${MOZ_API_KEY_GOOGLE//gGaPi/}" > "${S}"/api-google.key || die + echo -n "${MOZ_API_KEY_LOCATION//gGaPi/}" > "${S}"/api-location.key || die + echo -n "${MOZ_API_KEY_MOZILLA//m0ap1/}" > "${S}"/api-mozilla.key || die + + xdg_environment_reset +} + +src_configure() { + # Show flags set at the beginning + einfo "Current BINDGEN_CFLAGS:\t${BINDGEN_CFLAGS:-no value set}" + einfo "Current CFLAGS:\t\t${CFLAGS:-no value set}" + einfo "Current CXXFLAGS:\t\t${CXXFLAGS:-no value set}" + einfo "Current LDFLAGS:\t\t${LDFLAGS:-no value set}" + einfo "Current RUSTFLAGS:\t\t${RUSTFLAGS:-no value set}" + + local have_switched_compiler= + if use clang; then + # Force clang + einfo "Enforcing the use of clang due to USE=clang ..." + + local version_clang=$(clang --version 2>/dev/null | grep -F -- 'clang version' | awk '{ print $3 }') + [[ -n ${version_clang} ]] && version_clang=$(ver_cut 1 "${version_clang}") + [[ -z ${version_clang} ]] && die "Failed to read clang version!" + + if tc-is-gcc; then + have_switched_compiler=yes + fi + + AR=llvm-ar + CC=${CHOST}-clang-${version_clang} + CXX=${CHOST}-clang++-${version_clang} + NM=llvm-nm + RANLIB=llvm-ranlib + + elif ! use clang && ! tc-is-gcc ; then + # Force gcc + have_switched_compiler=yes + einfo "Enforcing the use of gcc due to USE=-clang ..." + AR=gcc-ar + CC=${CHOST}-gcc + CXX=${CHOST}-g++ + NM=gcc-nm + RANLIB=gcc-ranlib + fi + + if [[ -n "${have_switched_compiler}" ]] ; then + # Because we switched active compiler we have to ensure + # that no unsupported flags are set + strip-unsupported-flags + fi + + # Ensure we use correct toolchain, + # AS is used in a non-standard way by upstream, #bmo1654031 + export HOST_CC="$(tc-getBUILD_CC)" + export HOST_CXX="$(tc-getBUILD_CXX)" + export AS="$(tc-getCC) -c" + tc-export CC CXX LD AR AS NM OBJDUMP RANLIB PKG_CONFIG + + # Pass the correct toolchain paths through cbindgen + if tc-is-cross-compiler ; then + export BINDGEN_CFLAGS="${SYSROOT:+--sysroot=${ESYSROOT}} --target=${CHOST} ${BINDGEN_CFLAGS-}" + fi + + # Set MOZILLA_FIVE_HOME + export MOZILLA_FIVE_HOME="/usr/$(get_libdir)/${PN}" + + # python/mach/mach/mixin/process.py fails to detect SHELL + export SHELL="${EPREFIX}/bin/bash" + + # Set state path + export MOZBUILD_STATE_PATH="${BUILD_DIR}" + + # Set MOZCONFIG + export MOZCONFIG="${S}/.mozconfig" + + # Initialize MOZCONFIG + mozconfig_add_options_ac '' --enable-application=browser + mozconfig_add_options_ac '' --enable-project=browser + + # Set Gentoo defaults + mozconfig_add_options_ac 'Gentoo default' \ + --allow-addon-sideload \ + --disable-cargo-incremental \ + --disable-crashreporter \ + --disable-gpsd \ + --disable-install-strip \ + --disable-parental-controls \ + --disable-strip \ + --disable-tests \ + --disable-updater \ + --disable-wmf \ + --enable-legacy-profile-creation \ + --enable-negotiateauth \ + --enable-new-pass-manager \ + --enable-official-branding \ + --enable-release \ + --enable-system-ffi \ + --enable-system-pixman \ + --enable-system-policies \ + --host="${CBUILD:-${CHOST}}" \ + --libdir="${EPREFIX}/usr/$(get_libdir)" \ + --prefix="${EPREFIX}/usr" \ + --target="${CHOST}" \ + --without-ccache \ + --without-wasm-sandboxed-libraries \ + --with-intl-api \ + --with-libclang-path="$(llvm-config --libdir)" \ + --with-system-nspr \ + --with-system-nss \ + --with-system-zlib \ + --with-toolchain-prefix="${CHOST}-" \ + --with-unsigned-addon-scopes=app,system \ + --x-includes="${ESYSROOT}/usr/include" \ + --x-libraries="${ESYSROOT}/usr/$(get_libdir)" + + # Set update channel + local update_channel=release + [[ -n ${MOZ_ESR} ]] && update_channel=esr + mozconfig_add_options_ac '' --update-channel=${update_channel} + + if ! use x86 && [[ ${CHOST} != armv*h* ]] ; then + mozconfig_add_options_ac '' --enable-rust-simd + fi + + # For future keywording: This is currently (97.0) only supported on: + # amd64, arm, arm64 & x86. + # Might want to flip the logic around if Firefox is to support more arches. + # bug 833001, bug 903411#c8 + if use ppc64 || use riscv; then + mozconfig_add_options_ac '' --disable-sandbox + else + mozconfig_add_options_ac '' --enable-sandbox + fi + + # Enable JIT on riscv64 explicitly + # Can be removed once upstream enable it by default in the future. + use riscv && mozconfig_add_options_ac 'Enable JIT for RISC-V 64' --enable-jit + + if [[ -s "${S}/api-google.key" ]] ; then + local key_origin="Gentoo default" + if [[ $(cat "${S}/api-google.key" | md5sum | awk '{ print $1 }') != 709560c02f94b41f9ad2c49207be6c54 ]] ; then + key_origin="User value" + fi + + mozconfig_add_options_ac "${key_origin}" \ + --with-google-safebrowsing-api-keyfile="${S}/api-google.key" + else + einfo "Building without Google API key ..." + fi + + if [[ -s "${S}/api-location.key" ]] ; then + local key_origin="Gentoo default" + if [[ $(cat "${S}/api-location.key" | md5sum | awk '{ print $1 }') != ffb7895e35dedf832eb1c5d420ac7420 ]] ; then + key_origin="User value" + fi + + mozconfig_add_options_ac "${key_origin}" \ + --with-google-location-service-api-keyfile="${S}/api-location.key" + else + einfo "Building without Location API key ..." + fi + + if [[ -s "${S}/api-mozilla.key" ]] ; then + local key_origin="Gentoo default" + if [[ $(cat "${S}/api-mozilla.key" | md5sum | awk '{ print $1 }') != 3927726e9442a8e8fa0e46ccc39caa27 ]] ; then + key_origin="User value" + fi + + mozconfig_add_options_ac "${key_origin}" \ + --with-mozilla-api-keyfile="${S}/api-mozilla.key" + else + einfo "Building without Mozilla API key ..." + fi + + mozconfig_use_with system-av1 + mozconfig_use_with system-harfbuzz + mozconfig_use_with system-harfbuzz system-graphite2 + mozconfig_use_with system-icu + mozconfig_use_with system-jpeg + mozconfig_use_with system-libevent + mozconfig_use_with system-libvpx + mozconfig_use_with system-png + mozconfig_use_with system-webp + + mozconfig_use_enable dbus + mozconfig_use_enable libproxy + + use eme-free && mozconfig_add_options_ac '+eme-free' --disable-eme + + mozconfig_use_enable geckodriver + + if use hardened ; then + mozconfig_add_options_ac "+hardened" --enable-hardening + append-ldflags "-Wl,-z,relro -Wl,-z,now" + fi + + local myaudiobackends="" + use jack && myaudiobackends+="jack," + use sndio && myaudiobackends+="sndio," + use pulseaudio && myaudiobackends+="pulseaudio," + ! use pulseaudio && myaudiobackends+="alsa," + + mozconfig_add_options_ac '--enable-audio-backends' --enable-audio-backends="${myaudiobackends::-1}" + + mozconfig_use_enable wifi necko-wifi + + if use X && use wayland ; then + mozconfig_add_options_ac '+x11+wayland' --enable-default-toolkit=cairo-gtk3-x11-wayland + elif ! use X && use wayland ; then + mozconfig_add_options_ac '+wayland' --enable-default-toolkit=cairo-gtk3-wayland-only + else + mozconfig_add_options_ac '+x11' --enable-default-toolkit=cairo-gtk3 + fi + + if use lto ; then + if use clang ; then + # Upstream only supports lld or mold when using clang. + if tc-ld-is-mold ; then + mozconfig_add_options_ac "using ld=mold due to system selection" --enable-linker=mold + else + mozconfig_add_options_ac "forcing ld=lld due to USE=clang and USE=lto" --enable-linker=lld + fi + + mozconfig_add_options_ac '+lto' --enable-lto=cross + + else + # ThinLTO is currently broken, see bmo#1644409. + # mold does not support gcc+lto combination. + mozconfig_add_options_ac '+lto' --enable-lto=full + mozconfig_add_options_ac "linker is set to bfd" --enable-linker=bfd + fi + + if use pgo ; then + mozconfig_add_options_ac '+pgo' MOZ_PGO=1 + + if use clang ; then + # Used in build/pgo/profileserver.py + export LLVM_PROFDATA="llvm-profdata" + fi + fi + else + # Avoid auto-magic on linker + if use clang ; then + # lld is upstream's default + if tc-ld-is-mold ; then + mozconfig_add_options_ac "using ld=mold due to system selection" --enable-linker=mold + else + mozconfig_add_options_ac "forcing ld=lld due to USE=clang" --enable-linker=lld + fi + + else + if tc-ld-is-mold ; then + mozconfig_add_options_ac "using ld=mold due to system selection" --enable-linker=mold + else + mozconfig_add_options_ac "linker is set to bfd due to USE=-clang" --enable-linker=bfd + fi + fi + fi + + # LTO flag was handled via configure + filter-lto + + mozconfig_use_enable debug + if use debug ; then + mozconfig_add_options_ac '+debug' --disable-optimize + mozconfig_add_options_ac '+debug' --enable-real-time-tracing + else + mozconfig_add_options_ac 'Gentoo defaults' --disable-real-time-tracing + + if is-flag '-g*' ; then + if use clang ; then + mozconfig_add_options_ac 'from CFLAGS' --enable-debug-symbols=$(get-flag '-g*') + else + mozconfig_add_options_ac 'from CFLAGS' --enable-debug-symbols + fi + else + mozconfig_add_options_ac 'Gentoo default' --disable-debug-symbols + fi + + if is-flag '-O0' ; then + mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O0 + elif is-flag '-O4' ; then + mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O4 + elif is-flag '-O3' ; then + mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O3 + elif is-flag '-O1' ; then + mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O1 + elif is-flag '-Os' ; then + mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-Os + else + mozconfig_add_options_ac "Gentoo default" --enable-optimize=-O2 + fi + fi + + # Debug flag was handled via configure + filter-flags '-g*' + + # Optimization flag was handled via configure + filter-flags '-O*' + + # Modifications to better support ARM, bug #553364 + if use cpu_flags_arm_neon ; then + mozconfig_add_options_ac '+cpu_flags_arm_neon' --with-fpu=neon + + if ! tc-is-clang ; then + # thumb options aren't supported when using clang, bug 666966 + mozconfig_add_options_ac '+cpu_flags_arm_neon' \ + --with-thumb=yes \ + --with-thumb-interwork=no + fi + fi + + if [[ ${CHOST} == armv*h* ]] ; then + mozconfig_add_options_ac 'CHOST=armv*h*' --with-float-abi=hard + + if ! use system-libvpx ; then + sed -i \ + -e "s|softfp|hard|" \ + "${S}"/media/libvpx/moz.build \ + || die + fi + fi + + # With profile 23.0 elf-hack=legacy is broken with gcc. + # With Firefox-115esr elf-hack=relr isn't available (only in rapid). + # Solution: Disable build system's elf-hack completely, and add "-z,pack-relative-relocs" + # manually with gcc. + # + # elf-hack configure option isn't available on ppc64/riscv, #916259, #929244, #930046. + if use ppc64 || use riscv ; then + :; + else + mozconfig_add_options_ac 'elf-hack disabled' --disable-elf-hack + fi + + if use amd64 || use x86 ; then + ! use clang && append-ldflags "-z,pack-relative-relocs" + fi + + # Additional ARCH support + case "${ARCH}" in + arm) + # Reduce the memory requirements for linking + if use clang ; then + # Nothing to do + :; + elif use lto ; then + append-ldflags -Wl,--no-keep-memory + else + append-ldflags -Wl,--no-keep-memory -Wl,--reduce-memory-overheads + fi + ;; + esac + + if ! use elibc_glibc; then + mozconfig_add_options_ac '!elibc_glibc' --disable-jemalloc + fi + + # Allow elfhack to work in combination with unstripped binaries + # when they would normally be larger than 2GiB. + append-ldflags "-Wl,--compress-debug-sections=zlib" + + # Make revdep-rebuild.sh happy; Also required for musl + append-ldflags -Wl,-rpath="${MOZILLA_FIVE_HOME}",--enable-new-dtags + + # Pass $MAKEOPTS to build system + export MOZ_MAKE_FLAGS="${MAKEOPTS}" + + # Use system's Python environment + export PIP_NETWORK_INSTALL_RESTRICTED_VIRTUALENVS=mach + + if use system-python-libs; then + export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE="system" + else + export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE="none" + fi + + # Disable notification when build system has finished + export MOZ_NOSPAM=1 + + # Portage sets XARGS environment variable to "xargs -r" by default which + # breaks build system's check_prog() function which doesn't support arguments + mozconfig_add_options_ac 'Gentoo default' "XARGS=${EPREFIX}/usr/bin/xargs" + + # Set build dir + mozconfig_add_options_mk 'Gentoo default' "MOZ_OBJDIR=${BUILD_DIR}" + + # Show flags we will use + einfo "Build BINDGEN_CFLAGS:\t${BINDGEN_CFLAGS:-no value set}" + einfo "Build CFLAGS:\t\t${CFLAGS:-no value set}" + einfo "Build CXXFLAGS:\t\t${CXXFLAGS:-no value set}" + einfo "Build LDFLAGS:\t\t${LDFLAGS:-no value set}" + einfo "Build RUSTFLAGS:\t\t${RUSTFLAGS:-no value set}" + + # Handle EXTRA_CONF and show summary + local ac opt hash reason + + # Apply EXTRA_ECONF entries to $MOZCONFIG + if [[ -n ${EXTRA_ECONF} ]] ; then + IFS=\! read -a ac <<<${EXTRA_ECONF// --/\!} + for opt in "${ac[@]}"; do + mozconfig_add_options_ac "EXTRA_ECONF" --${opt#--} + done + fi + + echo + echo "==========================================================" + echo "Building ${PF} with the following configuration" + grep ^ac_add_options "${MOZCONFIG}" | while read ac opt hash reason; do + [[ -z ${hash} || ${hash} == \# ]] \ + || die "error reading mozconfig: ${ac} ${opt} ${hash} ${reason}" + printf " %-30s %s\n" "${opt}" "${reason:-mozilla.org default}" + done + echo "==========================================================" + echo + + ./mach configure || die +} + +src_compile() { + local virtx_cmd= + + if tc-ld-is-mold && use lto; then + # increase ulimit with mold+lto, bugs #892641, #907485 + if ! ulimit -n 16384 1>/dev/null 2>&1 ; then + ewarn "Unable to modify ulimits - building with mold+lto might fail due to low ulimit -n resources." + ewarn "Please see bugs #892641 & #907485." + else + ulimit -n 16384 + fi + fi + + if use pgo; then + # Reset and cleanup environment variables used by GNOME/XDG + gnome2_environment_reset + + addpredict /root + + if ! use X; then + virtx_cmd=virtwl + else + virtx_cmd=virtx + fi + fi + + if ! use X; then + local -x GDK_BACKEND=wayland + else + local -x GDK_BACKEND=x11 + fi + + ${virtx_cmd} ./mach build --verbose || die +} + +src_install() { + # xpcshell is getting called during install + pax-mark m \ + "${BUILD_DIR}"/dist/bin/xpcshell \ + "${BUILD_DIR}"/dist/bin/${PN} \ + "${BUILD_DIR}"/dist/bin/plugin-container + + DESTDIR="${D}" ./mach install || die + + # Upstream cannot ship symlink but we can (bmo#658850) + rm "${ED}${MOZILLA_FIVE_HOME}/${PN}-bin" || die + dosym ${PN} ${MOZILLA_FIVE_HOME}/${PN}-bin + + # Don't install llvm-symbolizer from sys-devel/llvm package + if [[ -f "${ED}${MOZILLA_FIVE_HOME}/llvm-symbolizer" ]] ; then + rm -v "${ED}${MOZILLA_FIVE_HOME}/llvm-symbolizer" || die + fi + + # Install policy (currently only used to disable application updates) + insinto "${MOZILLA_FIVE_HOME}/distribution" + newins "${FILESDIR}"/distribution.ini distribution.ini + newins "${FILESDIR}"/disable-auto-update.policy.json policies.json + + # Install system-wide preferences + local PREFS_DIR="${MOZILLA_FIVE_HOME}/browser/defaults/preferences" + insinto "${PREFS_DIR}" + newins "${FILESDIR}"/gentoo-default-prefs.js gentoo-prefs.js + + local GENTOO_PREFS="${ED}${PREFS_DIR}/gentoo-prefs.js" + + # Set dictionary path to use system hunspell + cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set spellchecker.dictionary_path pref" + pref("spellchecker.dictionary_path", "${EPREFIX}/usr/share/myspell"); + EOF + + # Force hwaccel prefs if USE=hwaccel is enabled + if use hwaccel ; then + cat "${FILESDIR}"/gentoo-hwaccel-prefs.js-r2 \ + >>"${GENTOO_PREFS}" \ + || die "failed to add prefs to force hardware-accelerated rendering to all-gentoo.js" + + if use wayland; then + cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set hwaccel wayland prefs" + pref("gfx.x11-egl.force-enabled", false); + EOF + else + cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set hwaccel x11 prefs" + pref("gfx.x11-egl.force-enabled", true); + EOF + fi + fi + + if ! use gmp-autoupdate ; then + local plugin + for plugin in "${MOZ_GMP_PLUGIN_LIST[@]}" ; do + einfo "Disabling auto-update for ${plugin} plugin ..." + cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to disable autoupdate for ${plugin} media plugin" + pref("media.${plugin}.autoupdate", false); + EOF + done + fi + + # Force the graphite pref if USE=system-harfbuzz is enabled, since the pref cannot disable it + if use system-harfbuzz ; then + cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set gfx.font_rendering.graphite.enabled pref" + sticky_pref("gfx.font_rendering.graphite.enabled", true); + EOF + fi + + # Install language packs + local langpacks=( $(find "${WORKDIR}/language_packs" -type f -name '*.xpi') ) + if [[ -n "${langpacks}" ]] ; then + moz_install_xpi "${MOZILLA_FIVE_HOME}/distribution/extensions" "${langpacks[@]}" + fi + + # Install geckodriver + if use geckodriver ; then + einfo "Installing geckodriver into ${ED}${MOZILLA_FIVE_HOME} ..." + pax-mark m "${BUILD_DIR}"/dist/bin/geckodriver + exeinto "${MOZILLA_FIVE_HOME}" + doexe "${BUILD_DIR}"/dist/bin/geckodriver + + dosym ${MOZILLA_FIVE_HOME}/geckodriver /usr/bin/geckodriver + fi + + # Install icons + local icon_srcdir="${S}/browser/branding/official" + local icon_symbolic_file="${FILESDIR}/icon/firefox-symbolic.svg" + + insinto /usr/share/icons/hicolor/symbolic/apps + newins "${icon_symbolic_file}" ${PN}-symbolic.svg + + local icon size + for icon in "${icon_srcdir}"/default*.png ; do + size=${icon%.png} + size=${size##*/default} + + if [[ ${size} -eq 48 ]] ; then + newicon "${icon}" ${PN}.png + fi + + newicon -s ${size} "${icon}" ${PN}.png + done + + # Install menu + local app_name="Mozilla ${MOZ_PN^}" + local desktop_file="${FILESDIR}/icon/${PN}-r3.desktop" + local desktop_filename="${PN}-esr.desktop" + local exec_command="${PN}" + local icon="${PN}" + local use_wayland="false" + + if use wayland ; then + use_wayland="true" + fi + + cp "${desktop_file}" "${WORKDIR}/${PN}.desktop-template" || die + + sed -i \ + -e "s:@NAME@:${app_name}:" \ + -e "s:@EXEC@:${exec_command}:" \ + -e "s:@ICON@:${icon}:" \ + "${WORKDIR}/${PN}.desktop-template" \ + || die + + newmenu "${WORKDIR}/${PN}.desktop-template" "${desktop_filename}" + + rm "${WORKDIR}/${PN}.desktop-template" || die + + # Install wrapper script + [[ -f "${ED}/usr/bin/${PN}" ]] && rm "${ED}/usr/bin/${PN}" + newbin "${FILESDIR}/${PN}-r1.sh" ${PN} + + # Update wrapper + sed -i \ + -e "s:@PREFIX@:${EPREFIX}/usr:" \ + -e "s:@MOZ_FIVE_HOME@:${MOZILLA_FIVE_HOME}:" \ + -e "s:@APULSELIB_DIR@:${apulselib}:" \ + -e "s:@DEFAULT_WAYLAND@:${use_wayland}:" \ + "${ED}/usr/bin/${PN}" \ + || die + + readme.gentoo_create_doc +} + +pkg_preinst() { + xdg_pkg_preinst + + # If the apulse libs are available in MOZILLA_FIVE_HOME then apulse + # does not need to be forced into the LD_LIBRARY_PATH + if use pulseaudio && has_version ">=media-sound/apulse-0.1.12-r4" ; then + einfo "APULSE found; Generating library symlinks for sound support ..." + local lib + pushd "${ED}${MOZILLA_FIVE_HOME}" &>/dev/null || die + for lib in ../apulse/libpulse{.so{,.0},-simple.so{,.0}} ; do + # A quickpkg rolled by hand will grab symlinks as part of the package, + # so we need to avoid creating them if they already exist. + if [[ ! -L ${lib##*/} ]] ; then + ln -s "${lib}" ${lib##*/} || die + fi + done + popd &>/dev/null || die + fi +} + +pkg_postinst() { + xdg_pkg_postinst + + if ! use gmp-autoupdate ; then + elog "USE='-gmp-autoupdate' has disabled the following plugins from updating or" + elog "installing into new profiles:" + local plugin + for plugin in "${MOZ_GMP_PLUGIN_LIST[@]}" ; do + elog "\t ${plugin}" + done + elog + fi + + if use pulseaudio && has_version ">=media-sound/apulse-0.1.12-r4" ; then + elog "Apulse was detected at merge time on this system and so it will always be" + elog "used for sound. If you wish to use pulseaudio instead please unmerge" + elog "media-sound/apulse." + elog + fi + + # bug 835078 + if use hwaccel && has_version "x11-drivers/xf86-video-nouveau"; then + ewarn "You have nouveau drivers installed in your system and 'hwaccel' " + ewarn "enabled for Firefox. Nouveau / your GPU might not support the " + ewarn "required EGL, so either disable 'hwaccel' or try the workaround " + ewarn "explained in https://bugs.gentoo.org/835078#c5 if Firefox crashes." + fi + + readme.gentoo_print_elog + + optfeature_header "Optional programs for extra features:" + optfeature "desktop notifications" x11-libs/libnotify + optfeature "fallback mouse cursor theme e.g. on WMs" gnome-base/gsettings-desktop-schemas + + if use hwaccel && has_version "x11-drivers/nvidia-drivers"; then + optfeature "hardware acceleration with NVIDIA cards" media-libs/nvidia-vaapi-driver + fi + + if ! has_version "sys-libs/glibc"; then + elog + elog "glibc not found! You won't be able to play DRM content." + elog "See Gentoo bug #910309 or upstream bug #1843683." + elog + fi + + if use geckodriver ; then + ewarn "You have enabled the 'geckodriver' USE flag. Geckodriver is now" + ewarn "packaged separately as net-misc/geckodriver and the use flag will be" + ewarn "dropped from main Firefox package by Firefox 128.0 release." + fi +} diff --git a/www-client/firefox/firefox-115.13.0.ebuild b/www-client/firefox/firefox-115.13.0.ebuild new file mode 100644 index 0000000..fe7d5f6 --- /dev/null +++ b/www-client/firefox/firefox-115.13.0.ebuild @@ -0,0 +1,1417 @@ +# Copyright 1999-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +FIREFOX_PATCHSET="firefox-115esr-patches-09.tar.xz" + +LLVM_MAX_SLOT=17 + +PYTHON_COMPAT=( python3_{10..11} ) +PYTHON_REQ_USE="ncurses,sqlite,ssl" + +WANT_AUTOCONF="2.1" + +VIRTUALX_REQUIRED="manual" + +MOZ_ESR=yes + +MOZ_PV=${PV} +MOZ_PV_SUFFIX= +if [[ ${PV} =~ (_(alpha|beta|rc).*)$ ]] ; then + MOZ_PV_SUFFIX=${BASH_REMATCH[1]} + + # Convert the ebuild version to the upstream Mozilla version + MOZ_PV="${MOZ_PV/_alpha/a}" # Handle alpha for SRC_URI + MOZ_PV="${MOZ_PV/_beta/b}" # Handle beta for SRC_URI + MOZ_PV="${MOZ_PV%%_rc*}" # Handle rc for SRC_URI +fi + +if [[ -n ${MOZ_ESR} ]] ; then + # ESR releases have slightly different version numbers + MOZ_PV="${MOZ_PV}esr" +fi + +MOZ_PN="${PN%-bin}" +MOZ_P="${MOZ_PN}-${MOZ_PV}" +MOZ_PV_DISTFILES="${MOZ_PV}${MOZ_PV_SUFFIX}" +MOZ_P_DISTFILES="${MOZ_PN}-${MOZ_PV_DISTFILES}" + +inherit autotools check-reqs desktop flag-o-matic gnome2-utils linux-info llvm multiprocessing \ + optfeature pax-utils python-any-r1 readme.gentoo-r1 toolchain-funcs virtualx xdg + +MOZ_SRC_BASE_URI="https://archive.mozilla.org/pub/${MOZ_PN}/releases/${MOZ_PV}" + +if [[ ${PV} == *_rc* ]] ; then + MOZ_SRC_BASE_URI="https://archive.mozilla.org/pub/${MOZ_PN}/candidates/${MOZ_PV}-candidates/build${PV##*_rc}" +fi + +PATCH_URIS=( + https://dev.gentoo.org/~juippis/mozilla/patchsets/${FIREFOX_PATCHSET} +) + +SRC_URI="${MOZ_SRC_BASE_URI}/source/${MOZ_P}.source.tar.xz -> ${MOZ_P_DISTFILES}.source.tar.xz + ${PATCH_URIS[@]}" + +DESCRIPTION="Firefox Web Browser" +HOMEPAGE="https://www.mozilla.com/firefox" + +KEYWORDS="amd64 arm64 ppc64 ~riscv x86" + +SLOT="esr" +LICENSE="MPL-2.0 GPL-2 LGPL-2.1" + +IUSE="+clang cpu_flags_arm_neon dbus debug eme-free hardened hwaccel" +IUSE+=" jack libproxy lto openh264 pgo pulseaudio sndio selinux" +IUSE+=" +system-av1 +system-harfbuzz +system-icu +system-jpeg +system-libevent +system-libvpx system-png system-python-libs +system-webp" +IUSE+=" wayland wifi +X" + +# Firefox-only IUSE +IUSE+=" geckodriver +gmp-autoupdate screencast" + +REQUIRED_USE="|| ( X wayland ) + debug? ( !system-av1 ) + pgo? ( lto ) + wifi? ( dbus )" + +FF_ONLY_DEPEND="!www-client/firefox:0 + !www-client/firefox:rapid + screencast? ( media-video/pipewire:= ) + selinux? ( sec-policy/selinux-mozilla )" +BDEPEND="${PYTHON_DEPS} + || ( + ( + sys-devel/clang:17 + sys-devel/llvm:17 + clang? ( + sys-devel/lld:17 + virtual/rust:0/llvm-17 + pgo? ( =sys-libs/compiler-rt-sanitizers-17*[profile] ) + ) + ) + ( + sys-devel/clang:16 + sys-devel/llvm:16 + clang? ( + sys-devel/lld:16 + virtual/rust:0/llvm-16 + pgo? ( =sys-libs/compiler-rt-sanitizers-16*[profile] ) + ) + ) + ( + sys-devel/clang:15 + sys-devel/llvm:15 + clang? ( + sys-devel/lld:15 + virtual/rust:0/llvm-15 + pgo? ( =sys-libs/compiler-rt-sanitizers-15*[profile] ) + ) + ) + ) + app-alternatives/awk + app-arch/unzip + app-arch/zip + >=dev-util/cbindgen-0.24.3 + net-libs/nodejs + virtual/pkgconfig + !clang? ( + >=virtual/rust-1.65 + =dev-lang/nasm-2.14 ) + x86? ( >=dev-lang/nasm-2.14 ) + pgo? ( + X? ( + sys-devel/gettext + x11-base/xorg-server[xvfb] + x11-apps/xhost + ) + !X? ( + || ( + gui-wm/tinywl + &2 + return 1 + fi + + if use clang && ! tc-ld-is-mold ; then + if ! has_version -b "sys-devel/lld:${LLVM_SLOT}" ; then + einfo "sys-devel/lld:${LLVM_SLOT} is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2 + return 1 + fi + + if ! has_version -b "virtual/rust:0/llvm-${LLVM_SLOT}" ; then + einfo "virtual/rust:0/llvm-${LLVM_SLOT} is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2 + return 1 + fi + + if use pgo ; then + if ! has_version -b "=sys-libs/compiler-rt-sanitizers-${LLVM_SLOT}*[profile]" ; then + einfo "=sys-libs/compiler-rt-sanitizers-${LLVM_SLOT}*[profile] is missing! Cannot use LLVM slot ${LLVM_SLOT} ..." >&2 + return 1 + fi + fi + fi + + einfo "Using LLVM slot ${LLVM_SLOT} to build" >&2 +} + +MOZ_LANGS=( + af ar ast be bg br ca cak cs cy da de dsb + el en-CA en-GB en-US es-AR es-ES et eu + fi fr fy-NL ga-IE gd gl he hr hsb hu + id is it ja ka kab kk ko lt lv ms nb-NO nl nn-NO + pa-IN pl pt-BR pt-PT rm ro ru + sk sl sq sr sv-SE th tr uk uz vi zh-CN zh-TW +) + +# Firefox-only LANGS +MOZ_LANGS+=( ach ) +MOZ_LANGS+=( an ) +MOZ_LANGS+=( az ) +MOZ_LANGS+=( bn ) +MOZ_LANGS+=( bs ) +MOZ_LANGS+=( ca-valencia ) +MOZ_LANGS+=( eo ) +MOZ_LANGS+=( es-CL ) +MOZ_LANGS+=( es-MX ) +MOZ_LANGS+=( fa ) +MOZ_LANGS+=( ff ) +MOZ_LANGS+=( fur ) +MOZ_LANGS+=( gn ) +MOZ_LANGS+=( gu-IN ) +MOZ_LANGS+=( hi-IN ) +MOZ_LANGS+=( hy-AM ) +MOZ_LANGS+=( ia ) +MOZ_LANGS+=( km ) +MOZ_LANGS+=( kn ) +MOZ_LANGS+=( lij ) +MOZ_LANGS+=( mk ) +MOZ_LANGS+=( mr ) +MOZ_LANGS+=( my ) +MOZ_LANGS+=( ne-NP ) +MOZ_LANGS+=( oc ) +MOZ_LANGS+=( sc ) +MOZ_LANGS+=( sco ) +MOZ_LANGS+=( si ) +MOZ_LANGS+=( son ) +MOZ_LANGS+=( szl ) +MOZ_LANGS+=( ta ) +MOZ_LANGS+=( te ) +MOZ_LANGS+=( tl ) +MOZ_LANGS+=( trs ) +MOZ_LANGS+=( ur ) +MOZ_LANGS+=( xh ) + +mozilla_set_globals() { + # https://bugs.gentoo.org/587334 + local MOZ_TOO_REGIONALIZED_FOR_L10N=( + fy-NL ga-IE gu-IN hi-IN hy-AM nb-NO ne-NP nn-NO pa-IN sv-SE + ) + + local lang xflag + for lang in "${MOZ_LANGS[@]}" ; do + # en and en_US are handled internally + if [[ ${lang} == en ]] || [[ ${lang} == en-US ]] ; then + continue + fi + + # strip region subtag if $lang is in the list + if has ${lang} "${MOZ_TOO_REGIONALIZED_FOR_L10N[@]}" ; then + xflag=${lang%%-*} + else + xflag=${lang} + fi + + SRC_URI+=" l10n_${xflag/[_@]/-}? (" + SRC_URI+=" ${MOZ_SRC_BASE_URI}/linux-x86_64/xpi/${lang}.xpi -> ${MOZ_P_DISTFILES}-${lang}.xpi" + SRC_URI+=" )" + IUSE+=" l10n_${xflag/[_@]/-}" + done +} +mozilla_set_globals + +moz_clear_vendor_checksums() { + debug-print-function ${FUNCNAME} "$@" + + if [[ ${#} -ne 1 ]] ; then + die "${FUNCNAME} requires exact one argument" + fi + + einfo "Clearing cargo checksums for ${1} ..." + + sed -i \ + -e 's/\("files":{\)[^}]*/\1/' \ + "${S}"/third_party/rust/${1}/.cargo-checksum.json \ + || die +} + +moz_install_xpi() { + debug-print-function ${FUNCNAME} "$@" + + if [[ ${#} -lt 2 ]] ; then + die "${FUNCNAME} requires at least two arguments" + fi + + local DESTDIR=${1} + shift + + insinto "${DESTDIR}" + + local emid xpi_file xpi_tmp_dir + for xpi_file in "${@}" ; do + emid= + xpi_tmp_dir=$(mktemp -d --tmpdir="${T}") + + # Unpack XPI + unzip -qq "${xpi_file}" -d "${xpi_tmp_dir}" || die + + # Determine extension ID + if [[ -f "${xpi_tmp_dir}/install.rdf" ]] ; then + emid=$(sed -n -e '/install-manifest/,$ { /em:id/!d; s/.*[\">]\([^\"<>]*\)[\"<].*/\1/; p; q }' "${xpi_tmp_dir}/install.rdf") + [[ -z "${emid}" ]] && die "failed to determine extension id from install.rdf" + elif [[ -f "${xpi_tmp_dir}/manifest.json" ]] ; then + emid=$(sed -n -e 's/.*"id": "\([^"]*\)".*/\1/p' "${xpi_tmp_dir}/manifest.json") + [[ -z "${emid}" ]] && die "failed to determine extension id from manifest.json" + else + die "failed to determine extension id" + fi + + einfo "Installing ${emid}.xpi into ${ED}${DESTDIR} ..." + newins "${xpi_file}" "${emid}.xpi" + done +} + +mozconfig_add_options_ac() { + debug-print-function ${FUNCNAME} "$@" + + if [[ ${#} -lt 2 ]] ; then + die "${FUNCNAME} requires at least two arguments" + fi + + local reason=${1} + shift + + local option + for option in ${@} ; do + echo "ac_add_options ${option} # ${reason}" >>${MOZCONFIG} + done +} + +mozconfig_add_options_mk() { + debug-print-function ${FUNCNAME} "$@" + + if [[ ${#} -lt 2 ]] ; then + die "${FUNCNAME} requires at least two arguments" + fi + + local reason=${1} + shift + + local option + for option in ${@} ; do + echo "mk_add_options ${option} # ${reason}" >>${MOZCONFIG} + done +} + +mozconfig_use_enable() { + debug-print-function ${FUNCNAME} "$@" + + if [[ ${#} -lt 1 ]] ; then + die "${FUNCNAME} requires at least one arguments" + fi + + local flag=$(use_enable "${@}") + mozconfig_add_options_ac "$(use ${1} && echo +${1} || echo -${1})" "${flag}" +} + +mozconfig_use_with() { + debug-print-function ${FUNCNAME} "$@" + + if [[ ${#} -lt 1 ]] ; then + die "${FUNCNAME} requires at least one arguments" + fi + + local flag=$(use_with "${@}") + mozconfig_add_options_ac "$(use ${1} && echo +${1} || echo -${1})" "${flag}" +} + +# This is a straight copypaste from toolchain-funcs.eclass's 'tc-ld-is-lld', and is temporarily +# placed here until toolchain-funcs.eclass gets an official support for mold linker. +# Please see: +# https://github.com/gentoo/gentoo/pull/28366 || +# https://github.com/gentoo/gentoo/pull/28355 +tc-ld-is-mold() { + local out + + # Ensure ld output is in English. + local -x LC_ALL=C + + # First check the linker directly. + out=$($(tc-getLD "$@") --version 2>&1) + if [[ ${out} == *"mold"* ]] ; then + return 0 + fi + + # Then see if they're selecting mold via compiler flags. + # Note: We're assuming they're using LDFLAGS to hold the + # options and not CFLAGS/CXXFLAGS. + local base="${T}/test-tc-linker" + cat <<-EOF > "${base}.c" + int main() { return 0; } + EOF + out=$($(tc-getCC "$@") ${CFLAGS} ${CPPFLAGS} ${LDFLAGS} -Wl,--version "${base}.c" -o "${base}" 2>&1) + rm -f "${base}"* + if [[ ${out} == *"mold"* ]] ; then + return 0 + fi + + # No mold here! + return 1 +} + +virtwl() { + debug-print-function ${FUNCNAME} "$@" + + [[ $# -lt 1 ]] && die "${FUNCNAME} needs at least one argument" + [[ -n $XDG_RUNTIME_DIR ]] || die "${FUNCNAME} needs XDG_RUNTIME_DIR to be set; try xdg_environment_reset" + tinywl -h >/dev/null || die 'tinywl -h failed' + + # TODO: don't run addpredict in utility function. WLR_RENDERER=pixman doesn't work + addpredict /dev/dri + local VIRTWL VIRTWL_PID + coproc VIRTWL { WLR_BACKENDS=headless exec tinywl -s 'echo $WAYLAND_DISPLAY; read _; kill $PPID'; } + local -x WAYLAND_DISPLAY + read WAYLAND_DISPLAY <&${VIRTWL[0]} + + debug-print "${FUNCNAME}: $@" + "$@" + local r=$? + + [[ -n $VIRTWL_PID ]] || die "tinywl exited unexpectedly" + exec {VIRTWL[0]}<&- {VIRTWL[1]}>&- + return $r +} + +pkg_pretend() { + if [[ ${MERGE_TYPE} != binary ]] ; then + if use pgo ; then + if ! has usersandbox $FEATURES ; then + die "You must enable usersandbox as X server can not run as root!" + fi + fi + + # Ensure we have enough disk space to compile + if use pgo || use lto || use debug ; then + CHECKREQS_DISK_BUILD="13500M" + else + CHECKREQS_DISK_BUILD="6600M" + fi + + check-reqs_pkg_pretend + fi +} + +pkg_setup() { + if [[ ${MERGE_TYPE} != binary ]] ; then + if use pgo ; then + if ! has userpriv ${FEATURES} ; then + eerror "Building ${PN} with USE=pgo and FEATURES=-userpriv is not supported!" + fi + fi + + # Ensure we have enough disk space to compile + if use pgo || use lto || use debug ; then + CHECKREQS_DISK_BUILD="13500M" + else + CHECKREQS_DISK_BUILD="6400M" + fi + + check-reqs_pkg_setup + + llvm_pkg_setup + + if use clang && use lto && tc-ld-is-lld ; then + local version_lld=$(ld.lld --version 2>/dev/null | awk '{ print $2 }') + [[ -n ${version_lld} ]] && version_lld=$(ver_cut 1 "${version_lld}") + [[ -z ${version_lld} ]] && die "Failed to read ld.lld version!" + + local version_llvm_rust=$(rustc -Vv 2>/dev/null | grep -F -- 'LLVM version:' | awk '{ print $3 }') + [[ -n ${version_llvm_rust} ]] && version_llvm_rust=$(ver_cut 1 "${version_llvm_rust}") + [[ -z ${version_llvm_rust} ]] && die "Failed to read used LLVM version from rustc!" + + if ver_test "${version_lld}" -ne "${version_llvm_rust}" ; then + eerror "Rust is using LLVM version ${version_llvm_rust} but ld.lld version belongs to LLVM version ${version_lld}." + eerror "You will be unable to link ${CATEGORY}/${PN}. To proceed you have the following options:" + eerror " - Manually switch rust version using 'eselect rust' to match used LLVM version" + eerror " - Switch to dev-lang/rust[system-llvm] which will guarantee matching version" + eerror " - Build ${CATEGORY}/${PN} without USE=lto" + eerror " - Rebuild lld with llvm that was used to build rust (may need to rebuild the whole " + eerror " llvm/clang/lld/rust chain depending on your @world updates)" + die "LLVM version used by Rust (${version_llvm_rust}) does not match with ld.lld version (${version_lld})!" + fi + fi + + python-any-r1_pkg_setup + + # Avoid PGO profiling problems due to enviroment leakage + # These should *always* be cleaned up anyway + unset \ + DBUS_SESSION_BUS_ADDRESS \ + DISPLAY \ + ORBIT_SOCKETDIR \ + SESSION_MANAGER \ + XAUTHORITY \ + XDG_CACHE_HOME \ + XDG_SESSION_COOKIE + + # Build system is using /proc/self/oom_score_adj, bug #604394 + addpredict /proc/self/oom_score_adj + + # Build for Wayland + pgo + addpredict /dev/udmabuf + + if use pgo ; then + # Update 105.0: "/proc/self/oom_score_adj" isn't enough anymore with pgo, but not sure + # whether that's due to better OOM handling by Firefox (bmo#1771712), or portage + # (PORTAGE_SCHEDULING_POLICY) update... + addpredict /proc + + # May need a wider addpredict when using wayland+pgo. + addpredict /dev/dri + + # Allow access to GPU during PGO run + local ati_cards mesa_cards nvidia_cards render_cards + shopt -s nullglob + + ati_cards=$(echo -n /dev/ati/card* | sed 's/ /:/g') + if [[ -n "${ati_cards}" ]] ; then + addpredict "${ati_cards}" + fi + + mesa_cards=$(echo -n /dev/dri/card* | sed 's/ /:/g') + if [[ -n "${mesa_cards}" ]] ; then + addpredict "${mesa_cards}" + fi + + nvidia_cards=$(echo -n /dev/nvidia* | sed 's/ /:/g') + if [[ -n "${nvidia_cards}" ]] ; then + addpredict "${nvidia_cards}" + fi + + render_cards=$(echo -n /dev/dri/renderD128* | sed 's/ /:/g') + if [[ -n "${render_cards}" ]] ; then + addpredict "${render_cards}" + fi + + shopt -u nullglob + fi + + if ! mountpoint -q /dev/shm ; then + # If /dev/shm is not available, configure is known to fail with + # a traceback report referencing /usr/lib/pythonN.N/multiprocessing/synchronize.py + ewarn "/dev/shm is not mounted -- expect build failures!" + fi + + # Google API keys (see http://www.chromium.org/developers/how-tos/api-keys) + # Note: These are for Gentoo Linux use ONLY. For your own distribution, please + # get your own set of keys. + if [[ -z "${MOZ_API_KEY_GOOGLE+set}" ]] ; then + MOZ_API_KEY_GOOGLE="AIzaSyDEAOvatFogGaPi0eTgsV_ZlEzx0ObmepsMzfAc" + fi + + if [[ -z "${MOZ_API_KEY_LOCATION+set}" ]] ; then + MOZ_API_KEY_LOCATION="AIzaSyB2h2OuRgGaPicUgy5N-5hsZqiPW6sH3n_rptiQ" + fi + + # Mozilla API keys (see https://location.services.mozilla.com/api) + # Note: These are for Gentoo Linux use ONLY. For your own distribution, please + # get your own set of keys. + if [[ -z "${MOZ_API_KEY_MOZILLA+set}" ]] ; then + MOZ_API_KEY_MOZILLA="edb3d487-3a84-46m0ap1e3-9dfd-92b5efaaa005" + fi + + # Ensure we use C locale when building, bug #746215 + export LC_ALL=C + fi + + CONFIG_CHECK="~SECCOMP" + WARNING_SECCOMP="CONFIG_SECCOMP not set! This system will be unable to play DRM-protected content." + linux-info_pkg_setup +} + +src_unpack() { + local _lp_dir="${WORKDIR}/language_packs" + local _src_file + + if [[ ! -d "${_lp_dir}" ]] ; then + mkdir "${_lp_dir}" || die + fi + + for _src_file in ${A} ; do + if [[ ${_src_file} == *.xpi ]]; then + cp "${DISTDIR}/${_src_file}" "${_lp_dir}" || die "Failed to copy '${_src_file}' to '${_lp_dir}'!" + else + unpack ${_src_file} + fi + done +} + +src_prepare() { + if use lto; then + rm -v "${WORKDIR}"/firefox-patches/*-LTO-Only-enable-LTO-*.patch || die + fi + + if ! use ppc64; then + rm -v "${WORKDIR}"/firefox-patches/*ppc64*.patch || die + fi + + if use x86 && use elibc_glibc ; then + rm -v "${WORKDIR}"/firefox-patches/*-musl-non-lfs64-api-on-audio_thread_priority-crate.patch || die + fi + + # Workaround for bgo#917599 + if has_version ">=dev-libs/icu-74.1" && use system-icu ; then + eapply "${WORKDIR}"/firefox-patches/0029-bmo-1862601-system-icu-74.patch + fi + rm -v "${WORKDIR}"/firefox-patches/0029-bmo-1862601-system-icu-74.patch || die + + # Workaround for bgo#915651 on musl + if use elibc_glibc ; then + rm -v "${WORKDIR}"/firefox-patches/*bgo-748849-RUST_TARGET_override.patch || die + fi + + eapply "${WORKDIR}/firefox-patches" + + # Allow user to apply any additional patches without modifing ebuild + eapply_user + + # Make cargo respect MAKEOPTS + export CARGO_BUILD_JOBS="$(makeopts_jobs)" + + # Workaround for bgo#915651 + if ! use elibc_glibc ; then + if use amd64 ; then + export RUST_TARGET="x86_64-unknown-linux-musl" + elif use x86 ; then + export RUST_TARGET="i686-unknown-linux-musl" + elif use arm64 ; then + export RUST_TARGET="aarch64-unknown-linux-musl" + else + die "Unknown musl chost, please post your rustc -vV along with emerge --info on Gentoo's bug #915651" + fi + fi + + # Make LTO respect MAKEOPTS + sed -i \ + -e "s/multiprocessing.cpu_count()/$(makeopts_jobs)/" \ + "${S}"/build/moz.configure/lto-pgo.configure \ + || die "sed failed to set num_cores" + + # Make ICU respect MAKEOPTS + sed -i \ + -e "s/multiprocessing.cpu_count()/$(makeopts_jobs)/" \ + "${S}"/intl/icu_sources_data.py \ + || die "sed failed to set num_cores" + + # sed-in toolchain prefix + sed -i \ + -e "s/objdump/${CHOST}-objdump/" \ + "${S}"/python/mozbuild/mozbuild/configure/check_debug_ranges.py \ + || die "sed failed to set toolchain prefix" + + sed -i \ + -e 's/ccache_stats = None/return None/' \ + "${S}"/python/mozbuild/mozbuild/controller/building.py \ + || die "sed failed to disable ccache stats call" + + einfo "Removing pre-built binaries ..." + + find "${S}"/third_party -type f \( -name '*.so' -o -name '*.o' \) -print -delete || die + + # Clear cargo checksums from crates we have patched + # moz_clear_vendor_checksums crate + moz_clear_vendor_checksums audio_thread_priority + + # Create build dir + BUILD_DIR="${WORKDIR}/${PN}_build" + mkdir -p "${BUILD_DIR}" || die + + # Write API keys to disk + echo -n "${MOZ_API_KEY_GOOGLE//gGaPi/}" > "${S}"/api-google.key || die + echo -n "${MOZ_API_KEY_LOCATION//gGaPi/}" > "${S}"/api-location.key || die + echo -n "${MOZ_API_KEY_MOZILLA//m0ap1/}" > "${S}"/api-mozilla.key || die + + xdg_environment_reset +} + +src_configure() { + # Show flags set at the beginning + einfo "Current BINDGEN_CFLAGS:\t${BINDGEN_CFLAGS:-no value set}" + einfo "Current CFLAGS:\t\t${CFLAGS:-no value set}" + einfo "Current CXXFLAGS:\t\t${CXXFLAGS:-no value set}" + einfo "Current LDFLAGS:\t\t${LDFLAGS:-no value set}" + einfo "Current RUSTFLAGS:\t\t${RUSTFLAGS:-no value set}" + + local have_switched_compiler= + if use clang; then + # Force clang + einfo "Enforcing the use of clang due to USE=clang ..." + + local version_clang=$(clang --version 2>/dev/null | grep -F -- 'clang version' | awk '{ print $3 }') + [[ -n ${version_clang} ]] && version_clang=$(ver_cut 1 "${version_clang}") + [[ -z ${version_clang} ]] && die "Failed to read clang version!" + + if tc-is-gcc; then + have_switched_compiler=yes + fi + + AR=llvm-ar + CC=${CHOST}-clang-${version_clang} + CXX=${CHOST}-clang++-${version_clang} + NM=llvm-nm + RANLIB=llvm-ranlib + + elif ! use clang && ! tc-is-gcc ; then + # Force gcc + have_switched_compiler=yes + einfo "Enforcing the use of gcc due to USE=-clang ..." + AR=gcc-ar + CC=${CHOST}-gcc + CXX=${CHOST}-g++ + NM=gcc-nm + RANLIB=gcc-ranlib + fi + + if [[ -n "${have_switched_compiler}" ]] ; then + # Because we switched active compiler we have to ensure + # that no unsupported flags are set + strip-unsupported-flags + fi + + # Ensure we use correct toolchain, + # AS is used in a non-standard way by upstream, #bmo1654031 + export HOST_CC="$(tc-getBUILD_CC)" + export HOST_CXX="$(tc-getBUILD_CXX)" + export AS="$(tc-getCC) -c" + tc-export CC CXX LD AR AS NM OBJDUMP RANLIB PKG_CONFIG + + # Pass the correct toolchain paths through cbindgen + if tc-is-cross-compiler ; then + export BINDGEN_CFLAGS="${SYSROOT:+--sysroot=${ESYSROOT}} --target=${CHOST} ${BINDGEN_CFLAGS-}" + fi + + # Set MOZILLA_FIVE_HOME + export MOZILLA_FIVE_HOME="/usr/$(get_libdir)/${PN}" + + # python/mach/mach/mixin/process.py fails to detect SHELL + export SHELL="${EPREFIX}/bin/bash" + + # Set state path + export MOZBUILD_STATE_PATH="${BUILD_DIR}" + + # Set MOZCONFIG + export MOZCONFIG="${S}/.mozconfig" + + # Initialize MOZCONFIG + mozconfig_add_options_ac '' --enable-application=browser + mozconfig_add_options_ac '' --enable-project=browser + + # Set Gentoo defaults + mozconfig_add_options_ac 'Gentoo default' \ + --allow-addon-sideload \ + --disable-cargo-incremental \ + --disable-crashreporter \ + --disable-gpsd \ + --disable-install-strip \ + --disable-parental-controls \ + --disable-strip \ + --disable-tests \ + --disable-updater \ + --disable-wmf \ + --enable-legacy-profile-creation \ + --enable-negotiateauth \ + --enable-new-pass-manager \ + --enable-official-branding \ + --enable-release \ + --enable-system-ffi \ + --enable-system-pixman \ + --enable-system-policies \ + --host="${CBUILD:-${CHOST}}" \ + --libdir="${EPREFIX}/usr/$(get_libdir)" \ + --prefix="${EPREFIX}/usr" \ + --target="${CHOST}" \ + --without-ccache \ + --without-wasm-sandboxed-libraries \ + --with-intl-api \ + --with-libclang-path="$(llvm-config --libdir)" \ + --with-system-nspr \ + --with-system-nss \ + --with-system-zlib \ + --with-toolchain-prefix="${CHOST}-" \ + --with-unsigned-addon-scopes=app,system \ + --x-includes="${ESYSROOT}/usr/include" \ + --x-libraries="${ESYSROOT}/usr/$(get_libdir)" + + # Set update channel + local update_channel=release + [[ -n ${MOZ_ESR} ]] && update_channel=esr + mozconfig_add_options_ac '' --update-channel=${update_channel} + + if ! use x86 && [[ ${CHOST} != armv*h* ]] ; then + mozconfig_add_options_ac '' --enable-rust-simd + fi + + # For future keywording: This is currently (97.0) only supported on: + # amd64, arm, arm64 & x86. + # Might want to flip the logic around if Firefox is to support more arches. + # bug 833001, bug 903411#c8 + if use ppc64 || use riscv; then + mozconfig_add_options_ac '' --disable-sandbox + else + mozconfig_add_options_ac '' --enable-sandbox + fi + + # Enable JIT on riscv64 explicitly + # Can be removed once upstream enable it by default in the future. + use riscv && mozconfig_add_options_ac 'Enable JIT for RISC-V 64' --enable-jit + + if [[ -s "${S}/api-google.key" ]] ; then + local key_origin="Gentoo default" + if [[ $(cat "${S}/api-google.key" | md5sum | awk '{ print $1 }') != 709560c02f94b41f9ad2c49207be6c54 ]] ; then + key_origin="User value" + fi + + mozconfig_add_options_ac "${key_origin}" \ + --with-google-safebrowsing-api-keyfile="${S}/api-google.key" + else + einfo "Building without Google API key ..." + fi + + if [[ -s "${S}/api-location.key" ]] ; then + local key_origin="Gentoo default" + if [[ $(cat "${S}/api-location.key" | md5sum | awk '{ print $1 }') != ffb7895e35dedf832eb1c5d420ac7420 ]] ; then + key_origin="User value" + fi + + mozconfig_add_options_ac "${key_origin}" \ + --with-google-location-service-api-keyfile="${S}/api-location.key" + else + einfo "Building without Location API key ..." + fi + + if [[ -s "${S}/api-mozilla.key" ]] ; then + local key_origin="Gentoo default" + if [[ $(cat "${S}/api-mozilla.key" | md5sum | awk '{ print $1 }') != 3927726e9442a8e8fa0e46ccc39caa27 ]] ; then + key_origin="User value" + fi + + mozconfig_add_options_ac "${key_origin}" \ + --with-mozilla-api-keyfile="${S}/api-mozilla.key" + else + einfo "Building without Mozilla API key ..." + fi + + mozconfig_use_with system-av1 + mozconfig_use_with system-harfbuzz + mozconfig_use_with system-harfbuzz system-graphite2 + mozconfig_use_with system-icu + mozconfig_use_with system-jpeg + mozconfig_use_with system-libevent + mozconfig_use_with system-libvpx + mozconfig_use_with system-png + mozconfig_use_with system-webp + + mozconfig_use_enable dbus + mozconfig_use_enable libproxy + + use eme-free && mozconfig_add_options_ac '+eme-free' --disable-eme + + mozconfig_use_enable geckodriver + + if use hardened ; then + mozconfig_add_options_ac "+hardened" --enable-hardening + append-ldflags "-Wl,-z,relro -Wl,-z,now" + fi + + local myaudiobackends="" + use jack && myaudiobackends+="jack," + use sndio && myaudiobackends+="sndio," + use pulseaudio && myaudiobackends+="pulseaudio," + ! use pulseaudio && myaudiobackends+="alsa," + + mozconfig_add_options_ac '--enable-audio-backends' --enable-audio-backends="${myaudiobackends::-1}" + + mozconfig_use_enable wifi necko-wifi + + if use X && use wayland ; then + mozconfig_add_options_ac '+x11+wayland' --enable-default-toolkit=cairo-gtk3-x11-wayland + elif ! use X && use wayland ; then + mozconfig_add_options_ac '+wayland' --enable-default-toolkit=cairo-gtk3-wayland-only + else + mozconfig_add_options_ac '+x11' --enable-default-toolkit=cairo-gtk3 + fi + + if use lto ; then + if use clang ; then + # Upstream only supports lld or mold when using clang. + if tc-ld-is-mold ; then + mozconfig_add_options_ac "using ld=mold due to system selection" --enable-linker=mold + else + mozconfig_add_options_ac "forcing ld=lld due to USE=clang and USE=lto" --enable-linker=lld + fi + + mozconfig_add_options_ac '+lto' --enable-lto=cross + + else + # ThinLTO is currently broken, see bmo#1644409. + # mold does not support gcc+lto combination. + mozconfig_add_options_ac '+lto' --enable-lto=full + mozconfig_add_options_ac "linker is set to bfd" --enable-linker=bfd + fi + + if use pgo ; then + mozconfig_add_options_ac '+pgo' MOZ_PGO=1 + + if use clang ; then + # Used in build/pgo/profileserver.py + export LLVM_PROFDATA="llvm-profdata" + fi + fi + else + # Avoid auto-magic on linker + if use clang ; then + # lld is upstream's default + if tc-ld-is-mold ; then + mozconfig_add_options_ac "using ld=mold due to system selection" --enable-linker=mold + else + mozconfig_add_options_ac "forcing ld=lld due to USE=clang" --enable-linker=lld + fi + + else + if tc-ld-is-mold ; then + mozconfig_add_options_ac "using ld=mold due to system selection" --enable-linker=mold + else + mozconfig_add_options_ac "linker is set to bfd due to USE=-clang" --enable-linker=bfd + fi + fi + fi + + # LTO flag was handled via configure + filter-lto + + mozconfig_use_enable debug + if use debug ; then + mozconfig_add_options_ac '+debug' --disable-optimize + mozconfig_add_options_ac '+debug' --enable-real-time-tracing + else + mozconfig_add_options_ac 'Gentoo defaults' --disable-real-time-tracing + + if is-flag '-g*' ; then + if use clang ; then + mozconfig_add_options_ac 'from CFLAGS' --enable-debug-symbols=$(get-flag '-g*') + else + mozconfig_add_options_ac 'from CFLAGS' --enable-debug-symbols + fi + else + mozconfig_add_options_ac 'Gentoo default' --disable-debug-symbols + fi + + if is-flag '-O0' ; then + mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O0 + elif is-flag '-O4' ; then + mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O4 + elif is-flag '-O3' ; then + mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O3 + elif is-flag '-O1' ; then + mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-O1 + elif is-flag '-Os' ; then + mozconfig_add_options_ac "from CFLAGS" --enable-optimize=-Os + else + mozconfig_add_options_ac "Gentoo default" --enable-optimize=-O2 + fi + fi + + # Debug flag was handled via configure + filter-flags '-g*' + + # Optimization flag was handled via configure + filter-flags '-O*' + + # Modifications to better support ARM, bug #553364 + if use cpu_flags_arm_neon ; then + mozconfig_add_options_ac '+cpu_flags_arm_neon' --with-fpu=neon + + if ! tc-is-clang ; then + # thumb options aren't supported when using clang, bug 666966 + mozconfig_add_options_ac '+cpu_flags_arm_neon' \ + --with-thumb=yes \ + --with-thumb-interwork=no + fi + fi + + if [[ ${CHOST} == armv*h* ]] ; then + mozconfig_add_options_ac 'CHOST=armv*h*' --with-float-abi=hard + + if ! use system-libvpx ; then + sed -i \ + -e "s|softfp|hard|" \ + "${S}"/media/libvpx/moz.build \ + || die + fi + fi + + # With profile 23.0 elf-hack=legacy is broken with gcc. + # With Firefox-115esr elf-hack=relr isn't available (only in rapid). + # Solution: Disable build system's elf-hack completely, and add "-z,pack-relative-relocs" + # manually with gcc. + # + # elf-hack configure option isn't available on ppc64/riscv, #916259, #929244, #930046. + if use ppc64 || use riscv ; then + :; + else + mozconfig_add_options_ac 'elf-hack disabled' --disable-elf-hack + fi + + if use amd64 || use x86 ; then + ! use clang && append-ldflags "-z,pack-relative-relocs" + fi + + # Additional ARCH support + case "${ARCH}" in + arm) + # Reduce the memory requirements for linking + if use clang ; then + # Nothing to do + :; + elif use lto ; then + append-ldflags -Wl,--no-keep-memory + else + append-ldflags -Wl,--no-keep-memory -Wl,--reduce-memory-overheads + fi + ;; + esac + + if ! use elibc_glibc; then + mozconfig_add_options_ac '!elibc_glibc' --disable-jemalloc + fi + + # Allow elfhack to work in combination with unstripped binaries + # when they would normally be larger than 2GiB. + append-ldflags "-Wl,--compress-debug-sections=zlib" + + # Make revdep-rebuild.sh happy; Also required for musl + append-ldflags -Wl,-rpath="${MOZILLA_FIVE_HOME}",--enable-new-dtags + + # Pass $MAKEOPTS to build system + export MOZ_MAKE_FLAGS="${MAKEOPTS}" + + # Use system's Python environment + export PIP_NETWORK_INSTALL_RESTRICTED_VIRTUALENVS=mach + + if use system-python-libs; then + export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE="system" + else + export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE="none" + fi + + # Disable notification when build system has finished + export MOZ_NOSPAM=1 + + # Portage sets XARGS environment variable to "xargs -r" by default which + # breaks build system's check_prog() function which doesn't support arguments + mozconfig_add_options_ac 'Gentoo default' "XARGS=${EPREFIX}/usr/bin/xargs" + + # Set build dir + mozconfig_add_options_mk 'Gentoo default' "MOZ_OBJDIR=${BUILD_DIR}" + + # Show flags we will use + einfo "Build BINDGEN_CFLAGS:\t${BINDGEN_CFLAGS:-no value set}" + einfo "Build CFLAGS:\t\t${CFLAGS:-no value set}" + einfo "Build CXXFLAGS:\t\t${CXXFLAGS:-no value set}" + einfo "Build LDFLAGS:\t\t${LDFLAGS:-no value set}" + einfo "Build RUSTFLAGS:\t\t${RUSTFLAGS:-no value set}" + + # Handle EXTRA_CONF and show summary + local ac opt hash reason + + # Apply EXTRA_ECONF entries to $MOZCONFIG + if [[ -n ${EXTRA_ECONF} ]] ; then + IFS=\! read -a ac <<<${EXTRA_ECONF// --/\!} + for opt in "${ac[@]}"; do + mozconfig_add_options_ac "EXTRA_ECONF" --${opt#--} + done + fi + + echo + echo "==========================================================" + echo "Building ${PF} with the following configuration" + grep ^ac_add_options "${MOZCONFIG}" | while read ac opt hash reason; do + [[ -z ${hash} || ${hash} == \# ]] \ + || die "error reading mozconfig: ${ac} ${opt} ${hash} ${reason}" + printf " %-30s %s\n" "${opt}" "${reason:-mozilla.org default}" + done + echo "==========================================================" + echo + + ./mach configure || die +} + +src_compile() { + local virtx_cmd= + + if tc-ld-is-mold && use lto; then + # increase ulimit with mold+lto, bugs #892641, #907485 + if ! ulimit -n 16384 1>/dev/null 2>&1 ; then + ewarn "Unable to modify ulimits - building with mold+lto might fail due to low ulimit -n resources." + ewarn "Please see bugs #892641 & #907485." + else + ulimit -n 16384 + fi + fi + + if use pgo; then + # Reset and cleanup environment variables used by GNOME/XDG + gnome2_environment_reset + + addpredict /root + + if ! use X; then + virtx_cmd=virtwl + else + virtx_cmd=virtx + fi + fi + + if ! use X; then + local -x GDK_BACKEND=wayland + else + local -x GDK_BACKEND=x11 + fi + + ${virtx_cmd} ./mach build --verbose || die +} + +src_install() { + # xpcshell is getting called during install + pax-mark m \ + "${BUILD_DIR}"/dist/bin/xpcshell \ + "${BUILD_DIR}"/dist/bin/${PN} \ + "${BUILD_DIR}"/dist/bin/plugin-container + + DESTDIR="${D}" ./mach install || die + + # Upstream cannot ship symlink but we can (bmo#658850) + rm "${ED}${MOZILLA_FIVE_HOME}/${PN}-bin" || die + dosym ${PN} ${MOZILLA_FIVE_HOME}/${PN}-bin + + # Don't install llvm-symbolizer from sys-devel/llvm package + if [[ -f "${ED}${MOZILLA_FIVE_HOME}/llvm-symbolizer" ]] ; then + rm -v "${ED}${MOZILLA_FIVE_HOME}/llvm-symbolizer" || die + fi + + # Install policy (currently only used to disable application updates) + insinto "${MOZILLA_FIVE_HOME}/distribution" + newins "${FILESDIR}"/distribution.ini distribution.ini + newins "${FILESDIR}"/disable-auto-update.policy.json policies.json + + # Install system-wide preferences + local PREFS_DIR="${MOZILLA_FIVE_HOME}/browser/defaults/preferences" + insinto "${PREFS_DIR}" + newins "${FILESDIR}"/gentoo-default-prefs.js gentoo-prefs.js + + local GENTOO_PREFS="${ED}${PREFS_DIR}/gentoo-prefs.js" + + # Set dictionary path to use system hunspell + cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set spellchecker.dictionary_path pref" + pref("spellchecker.dictionary_path", "${EPREFIX}/usr/share/myspell"); + EOF + + # Force hwaccel prefs if USE=hwaccel is enabled + if use hwaccel ; then + cat "${FILESDIR}"/gentoo-hwaccel-prefs.js-r2 \ + >>"${GENTOO_PREFS}" \ + || die "failed to add prefs to force hardware-accelerated rendering to all-gentoo.js" + + if use wayland; then + cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set hwaccel wayland prefs" + pref("gfx.x11-egl.force-enabled", false); + EOF + else + cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set hwaccel x11 prefs" + pref("gfx.x11-egl.force-enabled", true); + EOF + fi + fi + + if ! use gmp-autoupdate ; then + local plugin + for plugin in "${MOZ_GMP_PLUGIN_LIST[@]}" ; do + einfo "Disabling auto-update for ${plugin} plugin ..." + cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to disable autoupdate for ${plugin} media plugin" + pref("media.${plugin}.autoupdate", false); + EOF + done + fi + + # Force the graphite pref if USE=system-harfbuzz is enabled, since the pref cannot disable it + if use system-harfbuzz ; then + cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set gfx.font_rendering.graphite.enabled pref" + sticky_pref("gfx.font_rendering.graphite.enabled", true); + EOF + fi + + # Install language packs + local langpacks=( $(find "${WORKDIR}/language_packs" -type f -name '*.xpi') ) + if [[ -n "${langpacks}" ]] ; then + moz_install_xpi "${MOZILLA_FIVE_HOME}/distribution/extensions" "${langpacks[@]}" + fi + + # Install geckodriver + if use geckodriver ; then + einfo "Installing geckodriver into ${ED}${MOZILLA_FIVE_HOME} ..." + pax-mark m "${BUILD_DIR}"/dist/bin/geckodriver + exeinto "${MOZILLA_FIVE_HOME}" + doexe "${BUILD_DIR}"/dist/bin/geckodriver + + dosym ${MOZILLA_FIVE_HOME}/geckodriver /usr/bin/geckodriver + fi + + # Install icons + local icon_srcdir="${S}/browser/branding/official" + local icon_symbolic_file="${FILESDIR}/icon/firefox-symbolic.svg" + + insinto /usr/share/icons/hicolor/symbolic/apps + newins "${icon_symbolic_file}" ${PN}-symbolic.svg + + local icon size + for icon in "${icon_srcdir}"/default*.png ; do + size=${icon%.png} + size=${size##*/default} + + if [[ ${size} -eq 48 ]] ; then + newicon "${icon}" ${PN}.png + fi + + newicon -s ${size} "${icon}" ${PN}.png + done + + # Install menu + local app_name="Mozilla ${MOZ_PN^}" + local desktop_file="${FILESDIR}/icon/${PN}-r3.desktop" + local desktop_filename="${PN}-esr.desktop" + local exec_command="${PN}" + local icon="${PN}" + local use_wayland="false" + + if use wayland ; then + use_wayland="true" + fi + + cp "${desktop_file}" "${WORKDIR}/${PN}.desktop-template" || die + + sed -i \ + -e "s:@NAME@:${app_name}:" \ + -e "s:@EXEC@:${exec_command}:" \ + -e "s:@ICON@:${icon}:" \ + "${WORKDIR}/${PN}.desktop-template" \ + || die + + newmenu "${WORKDIR}/${PN}.desktop-template" "${desktop_filename}" + + rm "${WORKDIR}/${PN}.desktop-template" || die + + # Install wrapper script + [[ -f "${ED}/usr/bin/${PN}" ]] && rm "${ED}/usr/bin/${PN}" + newbin "${FILESDIR}/${PN}-r1.sh" ${PN} + + # Update wrapper + sed -i \ + -e "s:@PREFIX@:${EPREFIX}/usr:" \ + -e "s:@MOZ_FIVE_HOME@:${MOZILLA_FIVE_HOME}:" \ + -e "s:@APULSELIB_DIR@:${apulselib}:" \ + -e "s:@DEFAULT_WAYLAND@:${use_wayland}:" \ + "${ED}/usr/bin/${PN}" \ + || die + + readme.gentoo_create_doc +} + +pkg_preinst() { + xdg_pkg_preinst + + # If the apulse libs are available in MOZILLA_FIVE_HOME then apulse + # does not need to be forced into the LD_LIBRARY_PATH + if use pulseaudio && has_version ">=media-sound/apulse-0.1.12-r4" ; then + einfo "APULSE found; Generating library symlinks for sound support ..." + local lib + pushd "${ED}${MOZILLA_FIVE_HOME}" &>/dev/null || die + for lib in ../apulse/libpulse{.so{,.0},-simple.so{,.0}} ; do + # A quickpkg rolled by hand will grab symlinks as part of the package, + # so we need to avoid creating them if they already exist. + if [[ ! -L ${lib##*/} ]] ; then + ln -s "${lib}" ${lib##*/} || die + fi + done + popd &>/dev/null || die + fi +} + +pkg_postinst() { + xdg_pkg_postinst + + if ! use gmp-autoupdate ; then + elog "USE='-gmp-autoupdate' has disabled the following plugins from updating or" + elog "installing into new profiles:" + local plugin + for plugin in "${MOZ_GMP_PLUGIN_LIST[@]}" ; do + elog "\t ${plugin}" + done + elog + fi + + if use pulseaudio && has_version ">=media-sound/apulse-0.1.12-r4" ; then + elog "Apulse was detected at merge time on this system and so it will always be" + elog "used for sound. If you wish to use pulseaudio instead please unmerge" + elog "media-sound/apulse." + elog + fi + + # bug 835078 + if use hwaccel && has_version "x11-drivers/xf86-video-nouveau"; then + ewarn "You have nouveau drivers installed in your system and 'hwaccel' " + ewarn "enabled for Firefox. Nouveau / your GPU might not support the " + ewarn "required EGL, so either disable 'hwaccel' or try the workaround " + ewarn "explained in https://bugs.gentoo.org/835078#c5 if Firefox crashes." + fi + + readme.gentoo_print_elog + + optfeature_header "Optional programs for extra features:" + optfeature "desktop notifications" x11-libs/libnotify + optfeature "fallback mouse cursor theme e.g. on WMs" gnome-base/gsettings-desktop-schemas + + if use hwaccel && has_version "x11-drivers/nvidia-drivers"; then + optfeature "hardware acceleration with NVIDIA cards" media-libs/nvidia-vaapi-driver + fi + + if ! has_version "sys-libs/glibc"; then + elog + elog "glibc not found! You won't be able to play DRM content." + elog "See Gentoo bug #910309 or upstream bug #1843683." + elog + fi + + if use geckodriver ; then + ewarn "You have enabled the 'geckodriver' USE flag. Geckodriver is now" + ewarn "packaged separately as net-misc/geckodriver and the use flag will be" + ewarn "dropped from main Firefox package by Firefox 128.0 release." + fi +} diff --git a/www-client/firefox/metadata.xml b/www-client/firefox/metadata.xml new file mode 100644 index 0000000..b0a1758 --- /dev/null +++ b/www-client/firefox/metadata.xml @@ -0,0 +1,44 @@ + + + + + mozilla@gentoo.org + Gentoo Mozilla Team + + + Use Clang compiler instead of GCC + Disable EME (DRM plugin) capability at build time + Enable WebDriver support + Allow Gecko Media Plugins (binary blobs) to be automatically + downloaded and kept up-to-date in user profiles + Force-enable hardware-accelerated rendering (Mozilla bug 594876) + Enable unified build - combines source files to speed up build process, but requires more memory + Enable libproxy support + Use media-libs/openh264 for H264 support + instead of downloading binary blob from Mozilla at runtime + Add support for profile-guided optimization for faster binaries - this + option will double the compile time + Add sound server support via media-libs/libpulse (may be PulseAudio or + Pipewire, or apulse if installed) + Enable support for the media-sound/sndio backend + Use the system-wide media-libs/dav1d + and media-libs/libaom library instead of bundled + Use the system-wide media-libs/harfbuzz + and media-gfx/graphite2 instead of bundled + Use the system-wide dev-libs/icu + instead of bundled + Use the system-wide media-libs/libjpeg-turbo + instead of bundled + Use the system-wide dev-libs/libevent + instead of bundled + Use the system-wide media-libs/libvpx + instead of bundled + Use the system-wide media-libs/libpng + instead of bundled (requires APNG patches) + Use system's python site instead of bundled python libraries + Use the system-wide media-libs/libwebp + instead of bundled + Enable necko-wifi for NetworkManager integration, and access point MAC + address scanning for better precision with opt-in geolocation services + +