From bd550809cdcc8002624ac8e88cfca8703c81d32e Mon Sep 17 00:00:00 2001 From: Crucible Date: Wed, 21 Oct 2026 19:46:08 -0500 Subject: Publish srcux candidate 0000000784-20261021-194231 --- dev-debug/gdb/gdb-17.2-r1.ebuild | 5 +- dev-debug/gdb/gdb-18.1.ebuild | 5 +- dev-debug/gdb/gdb-9999.ebuild | 5 +- dev-python/uv-build/uv-build-0.13.4.ebuild | 2 +- dev-python/uv/uv-0.13.4-r1.ebuild | 2 +- .../worldofpadman/worldofpadman-1.7.0-r3.ebuild | 13 +- gui-libs/pixdecor/files/pixdecor-shade-input.patch | 93 ++++++ gui-libs/pixdecor/pixdecor-9999-r3.ebuild | 59 ++++ ...ra-0.11.2-force-fullscreen-physical-scope.patch | 285 +++++++++++++++++ .../wayfire-plugins-extra-0.11.2-r3.ebuild | 64 ++++ net-libs/nodejs/Manifest | 2 + net-libs/nodejs/nodejs-24.22.1.ebuild | 308 ++++++++++++++++++ net-libs/nodejs/nodejs-26.12.1.ebuild | 347 +++++++++++++++++++++ net-misc/yt-dlp/Manifest | 2 +- net-misc/yt-dlp/yt-dlp-2026.07.04.ebuild | 123 -------- net-misc/yt-dlp/yt-dlp-2026.10.21.ebuild | 123 ++++++++ net-misc/yt-dlp/yt-dlp-9999.ebuild | 2 +- 17 files changed, 1308 insertions(+), 132 deletions(-) create mode 100644 gui-libs/pixdecor/files/pixdecor-shade-input.patch create mode 100644 gui-libs/pixdecor/pixdecor-9999-r3.ebuild create mode 100644 gui-libs/wayfire-plugins-extra/files/wayfire-plugins-extra-0.11.2-force-fullscreen-physical-scope.patch create mode 100644 gui-libs/wayfire-plugins-extra/wayfire-plugins-extra-0.11.2-r3.ebuild create mode 100644 net-libs/nodejs/nodejs-24.22.1.ebuild create mode 100644 net-libs/nodejs/nodejs-26.12.1.ebuild delete mode 100644 net-misc/yt-dlp/yt-dlp-2026.07.04.ebuild create mode 100644 net-misc/yt-dlp/yt-dlp-2026.10.21.ebuild diff --git a/dev-debug/gdb/gdb-17.2-r1.ebuild b/dev-debug/gdb/gdb-17.2-r1.ebuild index ec85fd9c9dbe..843a3b9de29d 100644 --- a/dev-debug/gdb/gdb-17.2-r1.ebuild +++ b/dev-debug/gdb/gdb-17.2-r1.ebuild @@ -8,7 +8,7 @@ EAPI=8 GUILE_COMPAT=( 2-2 3-0 ) PYTHON_COMPAT=( python3_{13..14} ) -inherit flag-o-matic guile-single linux-info python-single-r1 strip-linguas toolchain-funcs +inherit dot-a flag-o-matic guile-single linux-info python-single-r1 strip-linguas toolchain-funcs export CTARGET=${CTARGET:-${CHOST}} @@ -181,6 +181,7 @@ gdb_branding() { src_configure() { strip-unsupported-flags + use sim && use multitarget && lto-guarantee-fat # See https://www.gnu.org/software/make/manual/html_node/Parallel-Output.html # Avoid really confusing logs from subconfigure spam, makes logs far @@ -291,6 +292,8 @@ src_install() { find "${ED}"/usr -name libiberty.a -delete || die + use sim && use multitarget && strip-lto-bytecode + # Delete translations that conflict with binutils-libs. bug #528088 # Note: Should figure out how to store these in an internal gdb dir. if use nls ; then diff --git a/dev-debug/gdb/gdb-18.1.ebuild b/dev-debug/gdb/gdb-18.1.ebuild index 21cf7a40bbbf..dbec51c4293e 100644 --- a/dev-debug/gdb/gdb-18.1.ebuild +++ b/dev-debug/gdb/gdb-18.1.ebuild @@ -9,7 +9,7 @@ EAPI=8 GUILE_COMPAT=( 2-2 3-0 ) GUILE_REQ_USE="deprecated" PYTHON_COMPAT=( python3_{13..14} ) -inherit flag-o-matic guile-single linux-info python-single-r1 strip-linguas toolchain-funcs +inherit dot-a flag-o-matic guile-single linux-info python-single-r1 strip-linguas toolchain-funcs export CTARGET=${CTARGET:-${CHOST}} @@ -178,6 +178,7 @@ gdb_branding() { src_configure() { strip-unsupported-flags + use sim && use multitarget && lto-guarantee-fat # See https://www.gnu.org/software/make/manual/html_node/Parallel-Output.html # Avoid really confusing logs from subconfigure spam, makes logs far @@ -287,6 +288,8 @@ src_install() { find "${ED}"/usr -name libiberty.a -delete || die + use sim && use multitarget && strip-lto-bytecode + # Delete translations that conflict with binutils-libs. bug #528088 # Note: Should figure out how to store these in an internal gdb dir. if use nls ; then diff --git a/dev-debug/gdb/gdb-9999.ebuild b/dev-debug/gdb/gdb-9999.ebuild index 21cf7a40bbbf..dbec51c4293e 100644 --- a/dev-debug/gdb/gdb-9999.ebuild +++ b/dev-debug/gdb/gdb-9999.ebuild @@ -9,7 +9,7 @@ EAPI=8 GUILE_COMPAT=( 2-2 3-0 ) GUILE_REQ_USE="deprecated" PYTHON_COMPAT=( python3_{13..14} ) -inherit flag-o-matic guile-single linux-info python-single-r1 strip-linguas toolchain-funcs +inherit dot-a flag-o-matic guile-single linux-info python-single-r1 strip-linguas toolchain-funcs export CTARGET=${CTARGET:-${CHOST}} @@ -178,6 +178,7 @@ gdb_branding() { src_configure() { strip-unsupported-flags + use sim && use multitarget && lto-guarantee-fat # See https://www.gnu.org/software/make/manual/html_node/Parallel-Output.html # Avoid really confusing logs from subconfigure spam, makes logs far @@ -287,6 +288,8 @@ src_install() { find "${ED}"/usr -name libiberty.a -delete || die + use sim && use multitarget && strip-lto-bytecode + # Delete translations that conflict with binutils-libs. bug #528088 # Note: Should figure out how to store these in an internal gdb dir. if use nls ; then diff --git a/dev-python/uv-build/uv-build-0.13.4.ebuild b/dev-python/uv-build/uv-build-0.13.4.ebuild index dd466669a80f..6c1b820ad15b 100644 --- a/dev-python/uv-build/uv-build-0.13.4.ebuild +++ b/dev-python/uv-build/uv-build-0.13.4.ebuild @@ -19,7 +19,7 @@ HOMEPAGE=" LICENSE="|| ( Apache-2.0 MIT )" SLOT="0" -KEYWORDS="amd64 arm arm64 ~loong ~ppc ppc64 ~riscv ~s390 x86" +KEYWORDS="amd64 arm arm64 ~loong ppc64 ~riscv ~s390 x86" IUSE="test" RESTRICT="!test? ( test )" diff --git a/dev-python/uv/uv-0.13.4-r1.ebuild b/dev-python/uv/uv-0.13.4-r1.ebuild index 92843ccbe947..dcf7667bf5e3 100644 --- a/dev-python/uv/uv-0.13.4-r1.ebuild +++ b/dev-python/uv/uv-0.13.4-r1.ebuild @@ -39,7 +39,7 @@ LICENSE+=" # ring crate LICENSE+=" openssl" SLOT="0" -KEYWORDS="amd64 arm arm64 ~loong ~ppc ppc64 ~riscv ~s390 x86" +KEYWORDS="amd64 arm arm64 ~loong ppc64 ~riscv ~s390 x86" IUSE="test" RESTRICT="test" PROPERTIES="test_network" diff --git a/games-fps/worldofpadman/worldofpadman-1.7.0-r3.ebuild b/games-fps/worldofpadman/worldofpadman-1.7.0-r3.ebuild index 7e4073a41614..4abddc92ef92 100644 --- a/games-fps/worldofpadman/worldofpadman-1.7.0-r3.ebuild +++ b/games-fps/worldofpadman/worldofpadman-1.7.0-r3.ebuild @@ -1,9 +1,9 @@ -# Copyright 1999-2025 Gentoo Authors +# Copyright 1999-2026 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=8 -inherit cmake desktop +inherit cmake flag-o-matic desktop DESCRIPTION="Cartoon style multiplayer first-person shooter" HOMEPAGE="https://worldofpadman.net/" @@ -43,6 +43,15 @@ src_prepare() { } src_configure() { + # -Werror=strict-aliasing + # https://bugs.gentoo.org/963754 + # https://github.com/PadWorld-Entertainment/worldofpadman/issues/416 + # + # Many issues, most but not all are warning level =2 ("might") set by CMake. + # There are still some "will" issues as well. + append-flags -fno-strict-aliasing + filter-lto + local arch if use amd64 ; then diff --git a/gui-libs/pixdecor/files/pixdecor-shade-input.patch b/gui-libs/pixdecor/files/pixdecor-shade-input.patch new file mode 100644 index 000000000000..cc5d842331ef --- /dev/null +++ b/gui-libs/pixdecor/files/pixdecor-shade-input.patch @@ -0,0 +1,93 @@ +--- a/src/shade.hpp ++++ b/src/shade.hpp +@@ -1,5 +1,8 @@ + #pragma once + ++#include ++#include ++ + #include + #include + #include +@@ -36,8 +39,17 @@ + wf::option_wrapper_t shade_duration{"pixdecor/shade_duration"}; + + public: +- bool last_direction; ++ bool last_direction = false; + shade_animation_t progression{shade_duration}; ++ ++ wf::geometry_t visible_box() ++ { ++ auto box = get_children_bounding_box(); ++ const auto retained = std::clamp(titlebar_height, 0, box.height); ++ box.height = std::clamp(std::ceil(box.height - ++ double(progression.shade) * (box.height - retained)), retained, box.height); ++ return box; ++ } + class simple_node_render_instance_t : public wf::scene::transformer_render_instance_t + { + wf::signal::connection_t on_node_damaged = +@@ -84,36 +96,34 @@ + float(src_box.x + src_box.width), float(src_box.y + src_box.height)}; + auto src_tex = wf::scene::transformer_render_instance_t::get_texture( + 1.0); +- auto shade_region = data.damage; +- int height = src_box.height; +- auto titlebar = self->titlebar_height + self->get_shadow_margin(); +- src_box.y += self->titlebar_height; +- src_box.height *= 1.0 - +- (self->progression.shade * +- ((src_box.height - titlebar) / float(src_box.height))); +- auto progress_height = src_box.height; +- shade_region &= src_box; ++ const auto visible = self->visible_box(); ++ const auto titlebar = std::clamp(self->titlebar_height, 0, visible.height); ++ const auto offset = src_box.height - visible.height; ++ auto body = visible; ++ body.y += titlebar; ++ body.height -= titlebar; ++ auto shade_region = data.damage & body; + wf::gles::run_in_context([&] + { + wf::gles::bind_render_buffer(data.target); + data.pass->custom_gles_subpass(data.target, [&] + { +- wf::gles::for_each_scissor_rect(data.target, data.damage, [=] () ++ wf::gles::for_each_scissor_rect(data.target, shade_region, [=] () + { + OpenGL::render_transformed_texture(wf::gles_texture_t{src_tex}, +- {src_geometry.x1, src_geometry.y1 - float(height - progress_height), src_geometry.x2, +- src_geometry.y2 - float(height - progress_height)}, {}, ++ {src_geometry.x1, src_geometry.y1 - float(offset), src_geometry.x2, ++ src_geometry.y2 - float(offset)}, {}, + wf::gles::render_target_orthographic_projection(data.target), glm::vec4(1.0), 0); + }); + }); + + shade_region = data.damage; + src_box = self->get_children_bounding_box(); +- src_box.height = self->titlebar_height; ++ src_box.height = titlebar; + shade_region &= src_box; + data.pass->custom_gles_subpass(data.target, [&] + { +- wf::gles::for_each_scissor_rect(data.target, data.damage, [=] () ++ wf::gles::for_each_scissor_rect(data.target, shade_region, [=] () + { + OpenGL::render_transformed_texture(wf::gles_texture_t{src_tex}, src_geometry, {}, + wf::gles::render_target_orthographic_projection(data.target), glm::vec4(1.0), 0); +@@ -207,12 +217,7 @@ + + std::optional find_node_at(const wf::pointf_t& at) override + { +- auto bbox = this->get_children_bounding_box(); +- if (((at.y - bbox.y) < +- ((1.0 - +- (this->progression.shade * ((bbox.height - this->titlebar_height) / float(bbox.height)))) * +- bbox.height)) && +- ((at.y - bbox.y) > 0.0)) ++ if (visible_box() & at) + { + return floating_inner_node_t::find_node_at(at); + } diff --git a/gui-libs/pixdecor/pixdecor-9999-r3.ebuild b/gui-libs/pixdecor/pixdecor-9999-r3.ebuild new file mode 100644 index 000000000000..661ab61dca01 --- /dev/null +++ b/gui-libs/pixdecor/pixdecor-9999-r3.ebuild @@ -0,0 +1,59 @@ +# Copyright 2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit git-r3 meson + +DESCRIPTION="Wayfire decorator with rounded corners, shadows, and animated effects" +HOMEPAGE="https://github.com/soreau/pixdecor" +EGIT_REPO_URI="https://github.com/soreau/pixdecor.git" +EGIT_BRANCH="master" +# Keep the downstream patch reproducible until it is promoted to srcux. +EGIT_COMMIT="222e61d971b045a821cf212a6e221367c05d966b" + +PATCHES=( + "${FILESDIR}/${PN}-sculpted-frames.patch" + "${FILESDIR}/${PN}-shell-theme.patch" + "${FILESDIR}/${PN}-shade-input.patch" +) + +LICENSE="MIT" +SLOT="0" +# Upstream has no test suite. +RESTRICT="test" + +RDEPEND=" + dev-libs/glib:2 + dev-libs/wayland + gui-libs/wf-config:= + gui-libs/wlroots:0.20= + >=gui-wm/wayfire-0.11.0:=[gles3] + media-libs/libglvnd + x11-libs/cairo + x11-libs/pango + x11-libs/pixman +" +DEPEND=" + ${RDEPEND} + media-libs/glm + sys-kernel/linux-headers +" +BDEPEND=" + sys-devel/gettext + virtual/pkgconfig +" + +src_install() { + meson_src_install + exeinto "/usr/$(get_libdir)/wayfire/pixdecor-shell-r3" + doexe "${BUILD_DIR}/src/libpixdecor.so" + dodoc README.md +} + +pkg_postinst() { + elog "Add pixdecor to the plugins list in the [core] section of wayfire.ini." + elog "Disable other decoration plugins; Pixdecor owns window frames." + elog "Frame settings are in WCM -> Pix Decoration -> Window frames." + elog "Sculpted adds border depth and pinstripe color/opacity." +} diff --git a/gui-libs/wayfire-plugins-extra/files/wayfire-plugins-extra-0.11.2-force-fullscreen-physical-scope.patch b/gui-libs/wayfire-plugins-extra/files/wayfire-plugins-extra-0.11.2-force-fullscreen-physical-scope.patch new file mode 100644 index 000000000000..be86387fad03 --- /dev/null +++ b/gui-libs/wayfire-plugins-extra/files/wayfire-plugins-extra-0.11.2-force-fullscreen-physical-scope.patch @@ -0,0 +1,285 @@ +--- a/src/force-fullscreen.cpp ++++ b/src/force-fullscreen.cpp +@@ -33,6 +33,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -44,6 +45,9 @@ + namespace scene + { + namespace force_fullscreen ++{ ++// Keep reloads independent of older libraries retained by the plugin loader. ++namespace + { + class simple_node_render_instance_t : public render_instance_t + { +@@ -102,7 +106,9 @@ + bbox.y += 1; + bbox.width -= 2; + bbox.height -= 2; +- scissor_region ^= wf::regionf_t{bbox}; ++ // Subtract only the damaged intersection; XOR with the entire ++ // hole would introduce damage outside the scoped backdrop. ++ scissor_region ^= (scissor_region & bbox); + } + + data.pass->clear(scissor_region, {0, 0, 0, 1}); +@@ -149,7 +155,6 @@ + class fullscreen_background + { + public: +- wf::geometry_t saved_geometry; + wf::geometry_t undecorated_geometry; + std::shared_ptr transformer; + std::shared_ptr black_border_node; +@@ -199,31 +204,25 @@ + output->connect(&viewport_changed); + } + +- wf::signal::connection_t viewport_changed{[this] (wf:: +- workspace_changed_signal* +- ev) +- { +- auto og = output->get_relative_geometry(); +- auto nvp = ev->new_viewport; +- +- for (auto& b : backgrounds) +- { +- int w = (og.width - b.second->transformed_view_box.width) / 2.0f; +- auto ws = output->wset()->get_view_main_workspace(b.first); +- auto offset = ws - nvp; +- int x = offset.x * og.width; +- int y = offset.y * og.height; +- b.second->transformed_view_box.x = x + w; +- b.second->black_border_node->geometry.x = x; +- b.second->black_border_node->geometry.y = y; +- b.second->black_border_node->geometry.width = og.width; +- b.second->black_border_node->geometry.height = og.height; +- b.second->transformed_view_box.y = b.second->black_border_node->geometry.y = +- y; +- } +- +- output->render->damage_whole(); +- } ++ // Window geometry and these regions are output-local. Preserve the view's ++ // real position so monitor selection and restoration do not depend on an ++ // artificial move to the logical output's origin. ++ wf::geometry_t scope_geometry(wayfire_toplevel_view view) ++ { ++ auto box = wf::window_scope_fullscreen(view); ++ auto size = output->get_relative_geometry(); ++ auto offset = output->wset()->get_view_main_workspace(view) - ++ output->wset()->get_current_workspace(); ++ box.x += offset.x * size.width; ++ box.y += offset.y * size.height; ++ return box; ++ } ++ ++ wf::signal::connection_t viewport_changed = ++ [this] (wf::workspace_changed_signal*) ++ { ++ update_backgrounds(); ++ output->render->damage_whole(); + }; + + void ensure_subsurface(wayfire_toplevel_view view, wf::geometry_t transformed_view_box) +@@ -245,9 +244,9 @@ + return; + } + +- auto og = output->get_relative_geometry(); ++ auto og = scope_geometry(view); + background->black_border_node = std::make_shared( +- view, 0, 0, og.width, og.height, transformed_view_box); ++ view, og.x, og.y, og.width, og.height, transformed_view_box); + wf::scene::add_back(view->get_root_node(), + background->black_border_node); + background->black_border = true; +@@ -274,13 +273,17 @@ + + void setup_transform(wayfire_toplevel_view view) + { +- auto og = output->get_relative_geometry(); ++ auto og = scope_geometry(view); + auto vg = view->get_geometry(); ++ if (vg.width <= 0 || vg.height <= 0 || og.width <= 0 || og.height <= 0) ++ { ++ return; ++ } + + double scale_x = (double)og.width / vg.width; + double scale_y = (double)og.height / vg.height; +- double translation_x = (og.width - vg.width) / 2.0; +- double translation_y = (og.height - vg.height) / 2.0; ++ double translation_x = og.x + (og.width - vg.width) / 2.0 - vg.x; ++ double translation_y = og.y + (og.height - vg.height) / 2.0 - vg.y; + + if (preserve_aspect) + { +@@ -288,21 +291,15 @@ + } + + wf::geometry_t box; +- box.width = std::floor(vg.width * scale_x); +- box.height = std::floor(vg.height * scale_y); +- box.x = std::ceil((og.width - box.width) / 2.0); +- box.y = std::ceil((og.height - box.height) / 2.0); ++ box.width = vg.width * scale_x; ++ box.height = vg.height * scale_y; ++ box.x = og.x + (og.width - box.width) / 2.0; ++ box.y = og.y + (og.height - box.height) / 2.0; + + destroy_subsurface(view); + if (!transparent_behind_views || preserve_aspect) + { + ensure_subsurface(view, box); +- } +- +- if (preserve_aspect) +- { +- scale_x += 1.0 / vg.width; +- translation_x -= 1.0; + } + + backgrounds[view]->transformed_view_box = box; +@@ -318,7 +315,6 @@ + { + for (auto& b : backgrounds) + { +- destroy_subsurface(b.first); + setup_transform(b.first); + } + } +@@ -329,8 +325,6 @@ + { + return false; + } +- +- wf::geometry_t saved_geometry = view->get_geometry(); + + auto background = backgrounds.find(view); + bool fullscreen = background == backgrounds.end() ? true : false; +@@ -359,7 +353,6 @@ + } + + background->second->undecorated_geometry = undecorated_geometry; +- background->second->saved_geometry = saved_geometry; + + setup_transform(view); + +@@ -380,7 +373,6 @@ + + void activate(wayfire_toplevel_view view) + { +- view->move(0, 0); + backgrounds[view] = std::make_unique(view); + backgrounds[view]->transformer = + std::make_shared(view); +@@ -419,10 +411,6 @@ + view_focused.disconnect(); + } + +- view->move( +- background->second->saved_geometry.x, +- background->second->saved_geometry.y); +- + if (view->get_transformed_node()->get_transformer(background_name)) + { + view->get_transformed_node()->rem_transformer( +@@ -511,7 +499,9 @@ + + if (std::string(constraint_area) == "output") + { +- box = og; ++ box = scope_geometry(b.first); ++ box.x += og.x; ++ box.y += og.y; + } + + if ((b.first == view) && +@@ -548,8 +538,8 @@ + } + }; + +- wf::signal::connection_t view_output_changed{[this] (wf:: +- view_pre_moved_to_wset_signal ++ wf::signal::connection_t view_output_changed{[this] (wf:: ++ view_moved_to_wset_signal + *ev) + { + auto view = ev->view; +@@ -560,15 +550,18 @@ + return; + } + +- if (!ev->new_wset->get_attached_output()) +- { +- return; +- } +- +- toggle_fullscreen(view); +- +- auto instance = wayfire_force_fullscreen_instances[ev->new_wset->get_attached_output()]; +- instance->toggle_fullscreen(view); ++ auto target = ev->new_wset ? ev->new_wset->get_attached_output() : nullptr; ++ ++ // The move has completed, so scope resolution sees the new output. ++ view->toplevel()->pending().fullscreen = false; ++ wf::get_core().tx_manager->schedule_object(view->toplevel()); ++ deactivate(view); ++ ++ auto instance = wayfire_force_fullscreen_instances.find(target); ++ if (instance != wayfire_force_fullscreen_instances.end()) ++ { ++ instance->second->toggle_fullscreen(view); ++ } + } + }; + +@@ -590,7 +583,11 @@ + return; + } + +- toggle_fullscreen(view); ++ // A disappearing client must be cleaned up even while actions ++ // are inhibited by a lock screen or another plugin. ++ view->toplevel()->pending().fullscreen = false; ++ wf::get_core().tx_manager->schedule_object(view->toplevel()); ++ deactivate(view); + } + }; + +@@ -606,8 +603,17 @@ + return; + } + +- if (ev->state || ev->carried_out) +- { ++ if (ev->carried_out) ++ { ++ return; ++ } ++ ++ if (ev->state) ++ { ++ // Scope/configuration reflow must not turn this transformed ++ // window into native fullscreen and overwrite its real size. ++ setup_transform(view); ++ ev->carried_out = true; + return; + } + +@@ -661,6 +667,8 @@ + } + }; + ++} ++ + DECLARE_WAYFIRE_PLUGIN(wf::per_output_plugin_t); + } + } diff --git a/gui-libs/wayfire-plugins-extra/wayfire-plugins-extra-0.11.2-r3.ebuild b/gui-libs/wayfire-plugins-extra/wayfire-plugins-extra-0.11.2-r3.ebuild new file mode 100644 index 000000000000..fedfa86bf077 --- /dev/null +++ b/gui-libs/wayfire-plugins-extra/wayfire-plugins-extra-0.11.2-r3.ebuild @@ -0,0 +1,64 @@ +# Copyright 2019-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit meson + +DESCRIPTION="extra plugins for wayfire" +HOMEPAGE="https://github.com/WayfireWM/wayfire-plugins-extra" + +if [[ ${PV} == 9999 ]]; then + inherit git-r3 + EGIT_REPO_URI="https://github.com/WayfireWM/wayfire-plugins-extra.git" + SLOT="0/0.12" +else + SRC_URI="https://github.com/WayfireWM/wayfire-plugins-extra/releases/download/v${PV}/${P}.tar.xz" + KEYWORDS="~amd64 ~arm64" + SLOT="0/$(ver_cut 1-2)" +fi + +LICENSE="MIT" + +# No upstream suite; private integration fixtures are in tests/force-fullscreen-hotplug. +RESTRICT="test" + +WAYFIRE_REVDEP=" + dev-libs/glib:2 + dev-libs/libsigc++:2 + gui-libs/wf-config:= + gui-libs/wlroots:0.20 + x11-libs/cairo +" + +DEPEND=" + ${WAYFIRE_REVDEP} + dev-cpp/glibmm:2 + dev-libs/boost + dev-libs/libevdev + dev-libs/wayland + >=gui-wm/wayfire-0.11:= + media-libs/glm + media-libs/libglvnd +" +RDEPEND="${DEPEND}" +BDEPEND=" + >=dev-libs/wayland-protocols-1.12 + dev-util/wayland-scanner + sys-devel/gettext + virtual/pkgconfig +" + +PATCHES=( + "${FILESDIR}/wayfire-plugins-extra-0.11.0-workspace-focus.patch" + "${FILESDIR}/wayfire-plugins-extra-0.11.0-force-fullscreen-teardown.patch" + "${FILESDIR}/wayfire-plugins-extra-0.11.2-force-fullscreen-physical-scope.patch" +) + +src_install() { + meson_src_install + + # A distinct library path permits replacement while the old plugin is cached. + exeinto "/usr/$(get_libdir)/wayfire/force-fullscreen-physical-r3" + doexe "${BUILD_DIR}/src/libforce-fullscreen.so" +} diff --git a/net-libs/nodejs/Manifest b/net-libs/nodejs/Manifest index 073ed49dfc8a..f7b2612163b0 100644 --- a/net-libs/nodejs/Manifest +++ b/net-libs/nodejs/Manifest @@ -4,7 +4,9 @@ DIST node-v22.13.1.tar.xz 48041964 BLAKE2B 9695cc6a9b9606a615cdcff42e9b8d5f15c2d DIST node-v22.23.2.tar.xz 51362684 BLAKE2B ddf19407ada0f94f4cc08814f633099f38044eb9709143d06509eff76b481736a26712c55fe3abc67e2ee18cfd524841b976ba40074699fe13c05d55a265d771 SHA512 92b959098fb7fcfe80776a983d2ae52479692a63c49087c97a0ee2423147a5222b1e1994e98ff650483322cf3a1f1cca8a51f3389993c0ff5fc13b6d1f4ef4ef DIST node-v24.21.0.tar.xz 57357488 BLAKE2B a907f5f23668d4a2839aebb9520417c0c4ee155881546ad8bbd8df7249decd070e4826a2d2465467c4295d8b9e9c5032df5ce337275df562cf02593419030401 SHA512 bb25a4fb9e5d9bc7ce05d2dfe48d9cb3524ce2e61f61105e0a769c56ac18f051825251a72fa5abe8ab5c596b0f2706bafec4d55d0a8a1bfef019f77e46520f03 DIST node-v24.22.0.tar.xz 57606320 BLAKE2B dcf9469d3ea9c6afc56a70b055d4a9a05a2323e6b7b1efd706e3fd85d67061bcaea8ffa0e0bef5a370eda0ec68d4774c522d858da0ac5f338eb1733c5218d07e SHA512 407c6fa7790fa589f3871343aec97c1413cf4fda8006a28d09f4a4c3172c86796ca2bef7efe05010a03e581a5edbf90bdbb6425ef6f8b3a5f3ad4e0190c6bdd0 +DIST node-v24.22.1.tar.xz 57669336 BLAKE2B b9397cc1fc7dd349e25a4db0b05d237ff7b5f59d2d4684ac4c16a035c56e744455d11c81f0a7e9f905c1e395270650f33be77ff362c22bd0ff93b71c63257283 SHA512 f60c250adafbddfc45d867bf644150bfbc3350483e788d1b3cff19aa05df7cd88642ae89205ba16ca14b0bb76df7c860aa2b07e61e2ee4de79f2a1b42949988e DIST node-v26.10.0.tar.xz 62055788 BLAKE2B 8018d789113d5d9594532a607f6e3daa292799a9dfb8b0c659bbb6163d0b9198ddb9e40197b30f7e1b62c073aca80ee3411d1701670384155b3330c7e6077fd0 SHA512 03b8d85bc2ec964db3e738be4682782935221b9c0fdd9a48f39a0241acc7b92bc3c6ef4f89707e451406e9f0a350b821d905b777bcbd5ed9a2d46ecb0d7328e2 DIST node-v26.11.1.tar.xz 63107044 BLAKE2B 3c15e4cbc08c1223a2617154a429c1e478d52f40e41a2429ac4e1f05de2ce0f8236cd50c6a10207e2e556f5fce686f534d5cc525bed806d230af29fedefba485 SHA512 a98c245732fef21dc6c0bafaa032ab1331a5efaed8d7758310dd65bf9d2bd16d5305ab06e1149b7fffe0ad0f0d945b874e30e1b9a72069a0ab064f357a225294 DIST node-v26.12.0.tar.xz 62434260 BLAKE2B 07cdf5c515fee3e6c312a4b4bcb3b7b2aca66df66a709eed4c48695e04e5413970cee04ce1f8ad43fd2053baf7d1fad4f7cbbeb0920fed2fcecc76333b978f56 SHA512 c3c41462198c6bedc1f2136a7f421a7cc757996ae49486c4c82b7ee75b2294b298c14f7e838b83da04a789f50722247ab448dd3bac8a07ac0d49047ee33c1c05 +DIST node-v26.12.1.tar.xz 62570464 BLAKE2B 6f1dc8f87256c45c3194bab785fe1d6ae5727a30776f37583a14738d97ed62d9d1d2970cef394fb768349b23cebe3c21c78648180a555c81c49f487b78cda607 SHA512 f6f76e258af33f7f877c65a2141d281ea307aae017a90bb8a75a7d4df271ad9d17c7d0edfd5751a977edd6bdb03c704d727628c4c7215c878d421787a35240f2 DIST node-v26.3.0.tar.xz 59811728 BLAKE2B a69f067e63883239a38397484b3f92ff4ca8a1ae651cb4f3328e6f994f16260751f3f64ff6c914aeef837d1f6deade8649979f091a044c86c8467058bb0065d2 SHA512 464a24d2536f3ead35325cfb268355fcc66a95260519174cba847efa4037ae2529c24781595b11aae45810570f41c0d2f2d7db2ed365baccda1017a7131a7efe diff --git a/net-libs/nodejs/nodejs-24.22.1.ebuild b/net-libs/nodejs/nodejs-24.22.1.ebuild new file mode 100644 index 000000000000..ff7249d40424 --- /dev/null +++ b/net-libs/nodejs/nodejs-24.22.1.ebuild @@ -0,0 +1,308 @@ +# Copyright 1999-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +CONFIG_CHECK="~ADVISE_SYSCALLS" +PYTHON_COMPAT=( python3_{13..14} ) +PYTHON_REQ_USE="threads(+)" + +inherit check-reqs flag-o-matic linux-info ninja-utils +inherit pax-utils python-any-r1 shell-completion toolchain-funcs xdg-utils + +DESCRIPTION="A JavaScript runtime built on Chrome's V8 JavaScript engine" +HOMEPAGE="https://nodejs.org/" +LICENSE="Apache-1.1 Apache-2.0 BlueOak-1.0.0 BSD BSD-2 MIT npm? ( Artistic-2 )" + +if [[ ${PV} == *9999 ]]; then + inherit git-r3 + EGIT_REPO_URI="https://github.com/nodejs/node" + SLOT="0" +else + SRC_URI=" + https://nodejs.org/dist/v${PV}/node-v${PV}.tar.xz + " + SLOT="0/$(ver_cut 1)" + KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc64 ~riscv ~x86 ~x64-macos" + S="${WORKDIR}/node-v${PV}" +fi + +IUSE="corepack cpu_flags_x86_sse2 debug doc +icu +inspector lto +npm pax-kernel +snapshot +ssl +system-icu +system-ssl test" +REQUIRED_USE="inspector? ( icu ssl ) + npm? ( ssl ) + system-icu? ( icu ) + system-ssl? ( ssl ) + x86? ( cpu_flags_x86_sse2 )" + +RESTRICT="!test? ( test )" + +COMMON_DEPEND=">=app-arch/brotli-1.2.1:= + dev-db/sqlite:3 + >=dev-cpp/ada-3.3.0:= + >=dev-cpp/simdutf-7.3.4:= + >=dev-libs/libuv-1.52.1:= + >=dev-libs/simdjson-4.6.1:= + >=net-dns/c-ares-1.34.5:= + >=net-libs/nghttp2-1.69.0:= + >=net-libs/nghttp3-1.14.0:= + virtual/zlib:= + corepack? ( !sys-apps/yarn ) + system-icu? ( >=dev-libs/icu-73:= ) + system-ssl? ( + >=net-libs/ngtcp2-1.14.0:= + >=dev-libs/openssl-3.5.6:0= + ) + !system-ssl? ( >=net-libs/ngtcp2-1.14.0:=[-gnutls] ) + || ( + sys-devel/gcc:* + llvm-runtimes/libatomic-stub + )" +BDEPEND="${PYTHON_DEPS} + app-alternatives/ninja + sys-apps/coreutils + virtual/pkgconfig + test? ( net-misc/curl ) + pax-kernel? ( sys-apps/elfix )" +DEPEND="${COMMON_DEPEND}" +RDEPEND="${COMMON_DEPEND}" + +# These are measured on a loong machine with -ggdb on, and only checked +# if debugging flags are present in CFLAGS. +# +# The final link consumed a little more than 7GiB alone, so 8GiB is the lower +# limit for memory usage. Disk usage was 19.1GiB for the build directory and +# 1.2GiB for the installed image, so we leave some room for architectures with +# fatter binaries and set the disk requirement to 22GiB. +CHECKREQS_MEMORY="8G" +CHECKREQS_DISK_BUILD="22G" + +PATCHES=( + "${FILESDIR}"/${PN}-24.21.0-32-bit.patch +) + +pkg_pretend() { + if [[ ${MERGE_TYPE} != "binary" ]]; then + if is-flagq "-g*" && ! is-flagq "-g*0" ; then + einfo "Checking for sufficient disk space and memory to build ${PN} with debugging CFLAGS" + check-reqs_pkg_pretend + fi + fi +} + +pkg_setup() { + python-any-r1_pkg_setup + linux-info_pkg_setup +} + +src_prepare() { + tc-export AR CC CXX PKG_CONFIG + export V=1 + export BUILDTYPE=Release + + # fix compilation on Darwin + # https://code.google.com/p/gyp/issues/detail?id=260 + sed -i -e "/append('-arch/d" tools/gyp/pylib/gyp/xcode_emulation.py || die + + # proper libdir, hat tip @ryanpcmcquen https://github.com/iojs/io.js/issues/504 + local LIBDIR=$(get_libdir) + sed -i -e "s|lib/|${LIBDIR}/|g" tools/install.py || die + sed -i -e "s/'lib'/'${LIBDIR}'/" deps/npm/lib/npm.js || die + + # Avoid writing a depfile, not useful + sed -i -e "/DEPFLAGS =/d" tools/gyp/pylib/gyp/generator/make.py || die + + sed -i -e "/'-O3'/d" common.gypi node.gypi || die + + # debug builds. change install path, remove optimisations and override buildtype + if use debug; then + sed -i -e "s|out/Release/|out/Debug/|g" tools/install.py || die + BUILDTYPE=Debug + fi + + # We need to disable mprotect on two files when it builds Bug 694100. + use pax-kernel && + PATCHES+=( "${FILESDIR}"/${PN}-24.1.0-paxmarking.patch ) + + use ppc64 && + PATCHES+=( "${FILESDIR}/${PN}-24.11.1-restore-ppc64be.patch" ) + + # Apply 32-bit only fix + # Remove AVX2 code path that uses a 64-bit-only intrinsic. + if [[ ${ARCH} == x86 ]] || { use amd64 && [[ ${ABI} == x86 ]]; }; then + PATCHES+=( "${FILESDIR}"/${PN}-24.21.0-rm-64bit-only-intrinsic-for-32bit.patch ) + fi + + default +} + +src_configure() { + xdg_environment_reset + + # LTO compiler flags are handled by configure.py itself + filter-lto + # The warnings are *so* noisy and make build.logs massive + append-cxxflags $(test-flags-CXX -Wno-template-id-cdtor) + # https://bugs.gentoo.org/931514 + use arm64 && append-flags $(test-flags-CXX -mbranch-protection=none) + + local myconf=( + --ninja + --shared-ada + --shared-brotli + --shared-cares + --shared-libuv + --shared-nghttp2 + --shared-nghttp3 + --shared-ngtcp2 + --shared-simdjson + --shared-simdutf + --shared-sqlite + --shared-zlib + ) + use debug && myconf+=( --debug ) + use lto && myconf+=( --enable-lto ) + if use system-icu; then + myconf+=( --with-intl=system-icu ) + elif use icu; then + myconf+=( --with-intl=full-icu ) + else + myconf+=( --with-intl=none ) + fi + use corepack || myconf+=( --without-corepack ) + use inspector || myconf+=( --without-inspector ) + use npm || myconf+=( --without-npm ) + use snapshot || myconf+=( --without-node-snapshot ) + if use ssl; then + use system-ssl && myconf+=( --shared-openssl --openssl-use-def-ca-store ) + else + myconf+=( --without-ssl ) + fi + + local myarch="" + case "${ARCH}:${ABI}" in + *:amd64) myarch="x64";; + *:arm) myarch="arm";; + *:arm64) myarch="arm64";; + loong:lp64*) myarch="loong64";; + riscv:lp64*) myarch="riscv64";; + *:ppc64) myarch="ppc64";; + *:x32) myarch="x32";; + *:x86) myarch="ia32";; + *) myarch="${ABI}";; + esac + + GYP_DEFINES="linux_use_gold_flags=0 + linux_use_bundled_binutils=0 + linux_use_bundled_gold=0" \ + "${EPYTHON}" configure.py \ + --prefix="${EPREFIX}"/usr \ + --dest-cpu=${myarch} \ + "${myconf[@]}" || die +} + +src_compile() { + eninja -C out/Release +} + +src_install() { + local LIBDIR="${ED}/usr/$(get_libdir)" + default + + pax-mark -m "${ED}"/usr/bin/node + + if use doc; then + docinto html + dodoc -r "${S}"/doc/* + fi + + if use npm; then + keepdir /etc/npm + echo "NPM_CONFIG_GLOBALCONFIG=${EPREFIX}/etc/npm/npmrc" > "${T}"/50npm + doenvd "${T}"/50npm + + # Install bash completion for `npm` + local tmp_npm_completion_file="$(TMPDIR="${T}" mktemp -t npm.XXXXXXXXXX)" + "${ED}/usr/bin/npm" completion > "${tmp_npm_completion_file}" + newbashcomp "${tmp_npm_completion_file}" npm + + # Move man pages + doman "${LIBDIR}"/node_modules/npm/man/man{1,5,7}/* + + # Clean up + rm -f "${LIBDIR}"/node_modules/npm/{.mailmap,.npmignore,Makefile} + + local find_exp="-or -name" + local find_name=() + for match in "AUTHORS*" "CHANGELOG*" "CONTRIBUT*" "README*" \ + ".travis.yml" ".eslint*" ".wercker.yml" ".npmignore" \ + "*.bat" "*.cmd"; do + find_name+=( ${find_exp} "${match}" ) + done + + # Remove various development and/or inappropriate files and + # useless docs of dependend packages. + find "${LIBDIR}"/node_modules \ + \( -type d -name examples \) -or \( -type f \( \ + -iname "LICEN?E*" \ + "${find_name[@]}" \ + \) \) -exec rm -rf "{}" \; + fi + + use corepack && + "${D}"/usr/bin/corepack enable --install-directory "${D}"/usr/bin + + mv "${ED}"/usr/share/doc/node "${ED}"/usr/share/doc/${PF} || die +} + +src_test() { + local drop_tests=( + test/parallel/test-dns.js + test/parallel/test-dns-resolveany-bad-ancount.js + test/parallel/test-dns-setserver-when-querying.js + test/parallel/test-dotenv.js + test/parallel/test-fs-mkdir.js + test/parallel/test-fs-read-stream.js + test/parallel/test-fs-utimes-y2K38.js + test/parallel/test-fs-watch-recursive-add-file.js + test/parallel/test-http2-client-set-priority.js + test/parallel/test-http2-priority-event.js + test/parallel/test-process-euid-egid.js + test/parallel/test-process-get-builtin.mjs + test/parallel/test-process-initgroups.js + test/parallel/test-process-setgroups.js + test/parallel/test-process-uid-gid.js + test/parallel/test-release-npm.js + test/parallel/test-socket-write-after-fin-error.js + test/parallel/test-strace-openat-openssl.js + test/sequential/test-tls-session-timeout.js + test/sequential/test-util-debug.js + ) + + if has_version "sys-libs/zlib-ng" ; then + elog "Some tests will be skipped due to being known to fail with sys-libs/zlib-ng" + elog + drop_tests+=( test/parallel/test-process-versions.js ) + elog + fi + + use inspector || + drop_tests+=( + test/parallel/test-inspector-emit-protocol-event.js + test/parallel/test-inspector-network-arbitrary-data.js + test/parallel/test-inspector-network-domain.js + test/parallel/test-inspector-network-fetch.js + test/parallel/test-inspector-network-http.js + test/sequential/test-watch-mode.mjs + ) + rm -f "${drop_tests[@]}" || die "disabling tests failed" + + out/${BUILDTYPE}/cctest || die + "${EPYTHON}" tools/test.py --mode=${BUILDTYPE,,} --flaky-tests=dontcare -J message parallel sequential || die +} + +pkg_postinst() { + if use npm; then + ewarn "remember to run: source /etc/profile if you plan to use nodejs" + ewarn " in your current shell" + fi +} diff --git a/net-libs/nodejs/nodejs-26.12.1.ebuild b/net-libs/nodejs/nodejs-26.12.1.ebuild new file mode 100644 index 000000000000..b34e21c7e615 --- /dev/null +++ b/net-libs/nodejs/nodejs-26.12.1.ebuild @@ -0,0 +1,347 @@ +# Copyright 1999-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +CONFIG_CHECK="~ADVISE_SYSCALLS" +PYTHON_COMPAT=( python3_{13..14} ) +PYTHON_REQ_USE="threads(+)" +RUST_OPTIONAL=1 +RUST_MIN_VER="1.86.0" + +inherit check-reqs flag-o-matic linux-info ninja-utils pax-utils +inherit python-any-r1 rust shell-completion toolchain-funcs xdg-utils + +DESCRIPTION="A JavaScript runtime built on Chrome's V8 JavaScript engine" +HOMEPAGE="https://nodejs.org/" +LICENSE="Apache-1.1 Apache-2.0 BlueOak-1.0.0 BSD BSD-2 MIT npm? ( Artistic-2 )" + +if [[ ${PV} == *9999 ]]; then + inherit git-r3 + EGIT_REPO_URI="https://github.com/nodejs/node" + SLOT="0" +else + SRC_URI="https://nodejs.org/dist/v${PV}/node-v${PV}.tar.xz" + SLOT="0/$(ver_cut 1)" + KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc64 ~riscv ~x86 ~x64-macos" + S="${WORKDIR}/node-v${PV}" +fi + +IUSE="cpu_flags_x86_sse2 debug doc +icu +inspector lto +npm pax-kernel +snapshot +ssl system-icu +system-ssl test temporal" +REQUIRED_USE="inspector? ( icu ssl ) + npm? ( ssl ) + system-icu? ( icu ) + system-ssl? ( ssl ) + temporal? ( icu !system-icu ) + x86? ( cpu_flags_x86_sse2 )" + +RESTRICT="!test? ( test )" + +COMMON_DEPEND=">=app-arch/brotli-1.2.1:= + dev-db/sqlite:3 + >=dev-cpp/ada-4.0.0:= + >=dev-cpp/simdutf-9.2.1:=[atomic-base64] + >=dev-libs/libuv-1.52.1:= + >=dev-libs/simdjson-5.0.3:= + >=net-dns/c-ares-1.34.8:= + >=net-libs/nghttp2-1.70.0:= + >=net-libs/nghttp3-1.18.0:= + virtual/zlib:= + system-icu? ( >=dev-libs/icu-78:= ) + system-ssl? ( + >=net-libs/ngtcp2-1.25.0:= + >=dev-libs/openssl-3.5.9:0= + ) + !system-ssl? ( >=net-libs/ngtcp2-1.25.0:=[-gnutls] ) + || ( + sys-devel/gcc:* + llvm-runtimes/libatomic-stub + )" +BDEPEND="${PYTHON_DEPS} + app-alternatives/ninja + pax-kernel? ( sys-apps/elfix ) + sys-apps/coreutils + temporal? ( ${RUST_DEPEND} ) + test? ( net-misc/curl ) + virtual/pkgconfig" +DEPEND="${COMMON_DEPEND}" +RDEPEND="${COMMON_DEPEND}" + +# These are measured on a loong machine with -ggdb on, and only checked +# if debugging flags are present in CFLAGS. +# +# The final link consumed a little more than 7GiB alone, so 8GiB is the lower +# limit for memory usage. Disk usage was 19.1GiB for the build directory and +# 1.2GiB for the installed image, so we leave some room for architectures with +# fatter binaries and set the disk requirement to 22GiB. +CHECKREQS_MEMORY="8G" +CHECKREQS_DISK_BUILD="22G" + +PATCHES=( + "${FILESDIR}"/${PN}-26.12.0-v8-climits.patch + "${FILESDIR}"/${PN}-26.11.1-add-missing-funcational-inc.patch + "${FILESDIR}"/${PN}-26.10.0-x86-SSE2-fix.patch + "${FILESDIR}"/${PN}-26.10.0-simdutf-use-system-header.patch + "${FILESDIR}"/${PN}-26.11.1-include-EACCES-in-mkdir-test.patch +) + +pkg_pretend() { + if [[ ${MERGE_TYPE} != "binary" ]]; then + if is-flagq "-g*" && ! is-flagq "-g*0" ; then + einfo "Checking for sufficient disk space and memory to build ${PN} with debugging CFLAGS" + check-reqs_pkg_pretend + fi + fi +} + +pkg_setup() { + python-any-r1_pkg_setup + linux-info_pkg_setup + # https://github.com/nodejs/node/issues/62676 - Can't build Temporal with system ICU. + if use system-icu; then + ewarn "The ES2026 'Temporal' datetime feature/object is not available when using system-icu." + ewarn "Please consider whether this is desirable for your use case." + ewarn "https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal" + fi + + use temporal && rust_pkg_setup +} + +src_prepare() { + tc-export AR CC CXX PKG_CONFIG + export V=1 + export BUILDTYPE=Release + + # fix compilation on Darwin + # https://code.google.com/p/gyp/issues/detail?id=260 + sed -i -e '/append("-arch")/{N;d;}' tools/gyp/pylib/gyp/xcode_emulation.py || die + + # proper libdir, hat tip @ryanpcmcquen https://github.com/iojs/io.js/issues/504 + local LIBDIR=$(get_libdir) + sed -i -e "s|lib/|${LIBDIR}/|g" tools/install.py || die + sed -i -e "s/'lib'/'${LIBDIR}'/" deps/npm/lib/npm.js || die + + # Avoid writing a depfile, not useful + sed -i -e "/DEPFLAGS =/d" tools/gyp/pylib/gyp/generator/make.py || die + + sed -i -e "/'-O3'/d" common.gypi node.gypi || die + + # debug builds. change install path, remove optimisations and override buildtype + if use debug; then + sed -i -e "s|out/Release/|out/Debug/|g" tools/install.py || die + BUILDTYPE=Debug + fi + + # We need to disable mprotect on two files when it builds Bug 694100. + use pax-kernel && + PATCHES+=( "${FILESDIR}"/${PN}-24.1.0-paxmarking.patch ) + + use ppc64 && + PATCHES+=( "${FILESDIR}/${PN}-24.11.1-restore-ppc64be.patch" ) + + default +} + +src_configure() { + xdg_environment_reset + + # LTO compiler flags are handled by configure.py itself + filter-lto + # The warnings are *so* noisy and make build.logs massive + append-cxxflags $(test-flags-CXX -Wno-template-id-cdtor) + # https://bugs.gentoo.org/931514 + use arm64 && append-flags $(test-flags-CXX -mbranch-protection=none) + + # Highway compilation error on riscv + # See: https://bugs.gentoo.org/983938 + # + # Upstream Highway fixed the issue, but V8 has not picked up a Highway + # version that includes it, so Node still hits the old headers. + # this workaround will stop Highway from compiling RVV, and stop the host + # compiler from emitting RVV in non-V8 code. V8 can still emit RVV at runtime + # on machines that have it. + # + # Additionally, force the EMU128 (128-bit scalar emulation) for boards + # without RVV (VisionFive V2 / JH7110). + # This will ensure V8's FixedTag<..., 16> in the JSON stringifier is legal. + use riscv && append-cxxflags -DHWY_DISABLED_TARGETS=HWY_RVV -DHWY_BROKEN_EMU128=0 + + local myconf=( + --ninja + --shared-ada + --shared-brotli + --shared-cares + --shared-libuv + --shared-nghttp2 + --shared-nghttp3 + --shared-ngtcp2 + --shared-simdjson + --shared-simdutf + --shared-sqlite + --shared-zlib + ) + use debug && myconf+=( --debug ) + use lto && myconf+=( --enable-lto ) + if use system-icu; then + # No Temporal support: https://github.com/nodejs/node/issues/62676 + myconf+=( --with-intl=system-icu ) + elif use icu; then + # Full embedded ICU (Temporal works) + myconf+=( --with-intl=full-icu ) + else + # Default embedded subset (Temporal works, saves space over full-icu) + myconf+=( --with-intl=small-icu ) + fi + use inspector || myconf+=( --without-inspector ) + use npm || myconf+=( --without-npm ) + use snapshot || myconf+=( --without-node-snapshot ) + if use ssl; then + use system-ssl && myconf+=( --shared-openssl --openssl-use-def-ca-store ) + else + myconf+=( --without-ssl ) + fi + ! use temporal && myconf+=( --v8-disable-temporal-support ) + + local myarch="" + case "${ARCH}:${ABI}" in + *:amd64) myarch="x64";; + *:arm) myarch="arm";; + *:arm64) myarch="arm64";; + loong:lp64*) myarch="loong64";; + riscv:lp64*) myarch="riscv64";; + *:ppc64) myarch="ppc64";; + *:x32) myarch="x32";; + *:x86) myarch="ia32";; + *) myarch="${ABI}";; + esac + + GYP_DEFINES="linux_use_gold_flags=0 + linux_use_bundled_binutils=0 + linux_use_bundled_gold=0" \ + "${EPYTHON}" configure.py \ + --prefix="${EPREFIX}"/usr \ + --dest-cpu=${myarch} \ + "${myconf[@]}" || die +} + +src_compile() { + eninja -C out/Release + # There's just a plain make target for the FFI tests, and it doesn't support ninja. + use test && emake build-ffi-tests +} + +src_install() { + local LIBDIR="${ED}/usr/$(get_libdir)" + default + + pax-mark -m "${ED}"/usr/bin/node + + if use doc; then + docinto html + dodoc -r "${S}"/doc/* + fi + + if use npm; then + keepdir /etc/npm + echo "NPM_CONFIG_GLOBALCONFIG=${EPREFIX}/etc/npm/npmrc" > "${T}"/50npm + doenvd "${T}"/50npm + + # Install bash completion for `npm` + local tmp_npm_completion_file="$(TMPDIR="${T}" mktemp -t npm.XXXXXXXXXX)" + "${ED}/usr/bin/npm" completion > "${tmp_npm_completion_file}" + newbashcomp "${tmp_npm_completion_file}" npm + + # Move man pages + doman "${LIBDIR}"/node_modules/npm/man/man{1,5,7}/* + + # Clean up + rm -f "${LIBDIR}"/node_modules/npm/{.mailmap,.npmignore,Makefile} + + local find_exp="-or -name" + local find_name=() + for match in "AUTHORS*" "CHANGELOG*" "CONTRIBUT*" "README*" \ + ".travis.yml" ".eslint*" ".wercker.yml" ".npmignore" \ + "*.bat" "*.cmd"; do + find_name+=( ${find_exp} "${match}" ) + done + + # Remove various development and/or inappropriate files and + # useless docs of dependend packages. + # Strict match for LICENSE files to avoid purging actual logic (e.g. license.js) + # which breaks npm. + find "${LIBDIR}"/node_modules \ + \( -type d -name examples \) -or \( -type f \( \ + \( -iname "LICEN?E*" -not -name "*.js" -not -name "*.json" \) \ + "${find_name[@]}" \ + \) \) -exec rm -rf "{}" \; + fi + + mv "${ED}"/usr/share/doc/node "${ED}"/usr/share/doc/${PF} || die +} + +src_test() { + local drop_tests=( + test/parallel/test-dns.js + test/parallel/test-dns-resolveany-bad-ancount.js + test/parallel/test-dns-setserver-when-querying.js + test/parallel/test-dotenv.js + test/parallel/test-fs-mkdir.js + test/parallel/test-fs-read-stream.js + test/parallel/test-fs-utimes-y2K38.js + test/parallel/test-fs-watch-recursive-add-file.js + test/parallel/test-http2-client-set-priority.js + test/parallel/test-http2-priority-event.js + test/parallel/test-process-euid-egid.js + test/parallel/test-process-get-builtin.mjs + test/parallel/test-process-initgroups.js + test/parallel/test-process-setgroups.js + test/parallel/test-process-uid-gid.js + test/parallel/test-release-npm.js + # Unreliable when using system libraries and ASLR. + # The variations between snapshot generation passes appear limited to memory + # allocation pointers leaking into the serialised V8 blob array; the actual + # bytecode and engine structures remain consistently... consistent. + test/parallel/test-snapshot-reproducible.js + test/parallel/test-socket-write-after-fin-error.js + test/parallel/test-strace-openat-openssl.js + test/sequential/test-tls-session-timeout.js + test/sequential/test-util-debug.js + ) + + if has_version "sys-libs/zlib-ng" ; then + elog "Some tests will be skipped due to being known to fail with sys-libs/zlib-ng" + elog + drop_tests+=( test/parallel/test-process-versions.js ) + drop_tests+=( test/parallel/test-zlib-zip-interop.js ) + elog + fi + + use inspector || + drop_tests+=( + test/parallel/test-inspector-emit-protocol-event.js + test/parallel/test-inspector-network-arbitrary-data.js + test/parallel/test-inspector-network-domain.js + test/parallel/test-inspector-network-fetch.js + test/parallel/test-inspector-network-http.js + test/sequential/test-watch-mode.mjs + ) + rm -f "${drop_tests[@]}" || die "disabling tests failed" + + out/${BUILDTYPE}/cctest || die + "${EPYTHON}" tools/test.py --mode=${BUILDTYPE,,} --flaky-tests=dontcare -J message parallel sequential || die +} + +pkg_postinst() { + if use npm; then + ewarn "remember to run: source /etc/profile if you plan to use nodejs" + ewarn " in your current shell" + fi + + if use system-icu; then + ewarn "" + ewarn "Node.js was built with USE='system-icu'." + ewarn "The JavaScript 'Temporal' API has been disabled." + ewarn "If you need full ES2026+ compliance, rebuild with USE='-system-icu'." + ewarn "" + fi +} diff --git a/net-misc/yt-dlp/Manifest b/net-misc/yt-dlp/Manifest index ee011610c11c..3e9dc311427c 100644 --- a/net-misc/yt-dlp/Manifest +++ b/net-misc/yt-dlp/Manifest @@ -1,2 +1,2 @@ -DIST yt-dlp-2026.07.04.tar.gz 6015962 BLAKE2B f073a56a3ed463f7e84416dae2d76d119f22d5c444ecce892b45dd486709eb93ca7ba6baf00a548417f78a14200c3f5acec34085733b2fcd7d0fd967139eb938 SHA512 48eb466715166f76aed4c64d41f76997766c27714cad7bc787f86d874aae05fa73d45153f4603b409683a3a752f90108758ea576785dcc05320e3789a7af610f DIST yt-dlp-2026.08.19.tar.gz 6020567 BLAKE2B 72b949e257d8b5f273247cd7c2cc704efe628b943f63276039f2cf0e1ac1b97aa84acf550ed382e3780e36990c023f4025bb0896dd875b3930791a4e9bc24448 SHA512 a61c308d8cb34e37030a95d6bf9924d43f349674e73bc3ff16306a8a89cc4d154da18c146a1675c32bbdb35a3dd12dde337b2f8e461786b2067f69dd7d600bb0 +DIST yt-dlp-2026.10.21.tar.gz 6028705 BLAKE2B 5b20903c6c69fca97d27e238addf8cfbf810eb7fa511141b4928d40679d55e107ded870f02ceed6b00cec70db4eb0eaecf37a64b4ddb2a0b614a340b57cab5ec SHA512 339f0af016fe4169a8d7133dd12809b7bb7a56cb954b77cf31c452958d104318b94a3fdc47b4c6c2d793b06b4ba41e4809a2805612ebf1b84a0e0197c8e5b4fa diff --git a/net-misc/yt-dlp/yt-dlp-2026.07.04.ebuild b/net-misc/yt-dlp/yt-dlp-2026.07.04.ebuild deleted file mode 100644 index 82aeb5f829f6..000000000000 --- a/net-misc/yt-dlp/yt-dlp-2026.07.04.ebuild +++ /dev/null @@ -1,123 +0,0 @@ -# Copyright 1999-2026 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=8 - -DISTUTILS_USE_PEP517=hatchling -PYTHON_COMPAT=( python3_{13..14} ) -inherit distutils-r1 optfeature shell-completion wrapper - -if [[ ${PV} == 9999 ]]; then - inherit git-r3 - EGIT_REPO_URI="https://github.com/yt-dlp/yt-dlp.git" -else - SRC_URI=" - https://github.com/yt-dlp/yt-dlp/releases/download/${PV}/${PN}.tar.gz - -> ${P}.tar.gz - " - S=${WORKDIR}/${PN} - KEYWORDS="amd64 arm arm64 ~hppa ppc ppc64 ~riscv x86 ~arm64-macos ~x64-macos" -fi - -DESCRIPTION="youtube-dl fork with additional features and fixes" -HOMEPAGE="https://github.com/yt-dlp/yt-dlp/" - -LICENSE="Unlicense" -SLOT="0" -IUSE="+deno" - -# deno is technically a optfeature, but it is needed for proper YouTube -# support and most users would expect that to work out-of-the-box -# (there are alternatives like nodejs but upstream disables support by -# default due to security concerns, users are on their own for these) -# -# yt-dlp-ejs requires pinning due to yt-dlp checking sha512sum of .js, -# live ebuild users may need to use the self-updater method if out of -# sync as there are no plans for a yt-dlp-ejs live ebuild at the moment -# (should "typically" be updated in Gentoo within 24h if willing to wait) -RDEPEND=" - dev-python/pycryptodome[${PYTHON_USEDEP}] - =dev-python/yt-dlp-ejs-0.8*[${PYTHON_USEDEP}] - deno? ( >=dev-lang/deno-bin-2.6.6 ) -" -BDEPEND=" - test? ( media-video/ffmpeg[webp] ) -" - -if [[ ${PV} == 9999 ]]; then - # ignoring PG0305 only in live, properly pre-generated in releases - # -- manpage tarballs in live would become outdated and pandoc has - # limited arch availability to be unconditional - IUSE+=" man" - BDEPEND+=" man? ( virtual/pandoc )" -fi - -EPYTEST_PLUGINS=() -distutils_enable_tests pytest - -python_compile() { - if [[ ${PV} == 9999 ]]; then - # generate missing files in live, not in compile_all nor prepare - # given need lazy before compile and it needs a usable ${PYTHON} - emake completions lazy-extractors $(usev man yt-dlp.1) - - "${EPYTHON}" devscripts/update-version.py || die - fi - - distutils-r1_python_compile -} - -python_test() { - local EPYTEST_DESELECT=( - # fails with FEATURES=network-sandbox - test/test_networking.py::TestHTTPRequestHandler::test_connect_timeout - # fails with FEATURES=distcc, bug #915614 - test/test_networking.py::TestYoutubeDLNetworking::test_proxy\[None-expected2\] - # websockets tests break easily depending on dev-python/websockets - # version and, as far as I know, most users do not use/need it -- - # thus being neither in RDEPEND nor optfeature (bug #940630,#950030) - test/test_websockets.py - ) - - epytest -m 'not download' -} - -python_install_all() { - dodoc README.md Changelog.md supportedsites.md - - if [[ ${PV} == 9999 ]]; then - use man && doman yt-dlp.1 - else - doman yt-dlp.1 - rm -r -- "${ED}"/usr/share/doc/yt_dlp || die - fi - - dobashcomp completions/bash/yt-dlp - dofishcomp completions/fish/yt-dlp.fish - dozshcomp completions/zsh/_yt-dlp - - make_wrapper youtube-dl "yt-dlp --compat-options youtube-dl" -} - -pkg_postinst() { - optfeature "various features (merging tracks, streamed content)" media-video/ffmpeg - has_version media-video/atomicparsley || # allow fallback but don't advertise - optfeature "embedding metadata thumbnails in MP4/M4A files" media-libs/mutagen - optfeature "decrypting cookies from Chromium-based browsers" dev-python/secretstorage - - if [[ ! ${REPLACING_VERSIONS} ]]; then - elog - elog 'A wrapper using "yt-dlp --compat-options youtube-dl" was installed' - elog 'as "youtube-dl". This is strictly for compatibility and it is' - elog 'recommended to use "yt-dlp" directly, it may be removed in the future.' - fi - - if use !deno; then - ewarn - ewarn "USE=deno is disabled, using ${PN} with some websites like YouTube may" - ewarn "not function properly. If your profile does not allow enabling this USE," - ewarn "can use net-libs/nodejs instead but it is disabled by default due to" - ewarn "security(!) concerns and requires manually passing '--js-runtimes node'" - ewarn "(to be permanent: echo '--js-runtimes node' >> ~/.config/yt-dlp/config)" - fi -} diff --git a/net-misc/yt-dlp/yt-dlp-2026.10.21.ebuild b/net-misc/yt-dlp/yt-dlp-2026.10.21.ebuild new file mode 100644 index 000000000000..38f5297dc93b --- /dev/null +++ b/net-misc/yt-dlp/yt-dlp-2026.10.21.ebuild @@ -0,0 +1,123 @@ +# Copyright 1999-2026 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +DISTUTILS_USE_PEP517=hatchling +PYTHON_COMPAT=( python3_{13..14} ) +inherit distutils-r1 optfeature shell-completion wrapper + +if [[ ${PV} == 9999 ]]; then + inherit git-r3 + EGIT_REPO_URI="https://github.com/yt-dlp/yt-dlp.git" +else + SRC_URI=" + https://github.com/yt-dlp/yt-dlp/releases/download/${PV}/${PN}.tar.gz + -> ${P}.tar.gz + " + S=${WORKDIR}/${PN} + KEYWORDS="amd64 arm arm64 ~hppa ppc ppc64 ~riscv x86 ~arm64-macos ~x64-macos" +fi + +DESCRIPTION="youtube-dl fork with additional features and fixes" +HOMEPAGE="https://github.com/yt-dlp/yt-dlp/" + +LICENSE="Unlicense" +SLOT="0" +IUSE="+deno" + +# deno is technically a optfeature, but it is needed for proper YouTube +# support and most users would expect that to work out-of-the-box +# (there are alternatives like nodejs but upstream disables support by +# default due to security concerns, users are on their own for these) +# +# yt-dlp-ejs requires pinning due to yt-dlp checking sha512sum of .js, +# live ebuild users may need to use the self-updater method if out of +# sync as there are no plans for a yt-dlp-ejs live ebuild at the moment +# (should "typically" be updated in Gentoo within 24h if willing to wait) +RDEPEND=" + dev-python/pycryptodome[${PYTHON_USEDEP}] + =dev-python/yt-dlp-ejs-0.8*[${PYTHON_USEDEP}] + deno? ( >=dev-lang/deno-bin-2.9.8 ) +" +BDEPEND=" + test? ( media-video/ffmpeg[webp] ) +" + +if [[ ${PV} == 9999 ]]; then + # ignoring PG0305 only in live, properly pre-generated in releases + # -- manpage tarballs in live would become outdated and pandoc has + # limited arch availability to be unconditional + IUSE+=" man" + BDEPEND+=" man? ( virtual/pandoc )" +fi + +EPYTEST_PLUGINS=() +distutils_enable_tests pytest + +python_compile() { + if [[ ${PV} == 9999 ]]; then + # generate missing files in live, not in compile_all nor prepare + # given need lazy before compile and it needs a usable ${PYTHON} + emake completions lazy-extractors $(usev man yt-dlp.1) + + "${EPYTHON}" devscripts/update-version.py || die + fi + + distutils-r1_python_compile +} + +python_test() { + local EPYTEST_DESELECT=( + # fails with FEATURES=network-sandbox + test/test_networking.py::TestHTTPRequestHandler::test_connect_timeout + # fails with FEATURES=distcc, bug #915614 + test/test_networking.py::TestYoutubeDLNetworking::test_proxy\[None-expected2\] + # websockets tests break easily depending on dev-python/websockets + # version and, as far as I know, most users do not use/need it -- + # thus being neither in RDEPEND nor optfeature (bug #940630,#950030) + test/test_websockets.py + ) + + epytest -m 'not download' +} + +python_install_all() { + dodoc README.md Changelog.md supportedsites.md + + if [[ ${PV} == 9999 ]]; then + use man && doman yt-dlp.1 + else + doman yt-dlp.1 + rm -r -- "${ED}"/usr/share/doc/yt_dlp || die + fi + + dobashcomp completions/bash/yt-dlp + dofishcomp completions/fish/yt-dlp.fish + dozshcomp completions/zsh/_yt-dlp + + make_wrapper youtube-dl "yt-dlp --compat-options youtube-dl" +} + +pkg_postinst() { + optfeature "various features (merging tracks, streamed content)" media-video/ffmpeg + has_version media-video/atomicparsley || # allow fallback but don't advertise + optfeature "embedding metadata thumbnails in MP4/M4A files" media-libs/mutagen + optfeature "decrypting cookies from Chromium-based browsers" dev-python/secretstorage + + if [[ ! ${REPLACING_VERSIONS} ]]; then + elog + elog 'A wrapper using "yt-dlp --compat-options youtube-dl" was installed' + elog 'as "youtube-dl". This is strictly for compatibility and it is' + elog 'recommended to use "yt-dlp" directly, it may be removed in the future.' + fi + + if use !deno; then + ewarn + ewarn "USE=deno is disabled, using ${PN} with some websites like YouTube may" + ewarn "not function properly. If your profile does not allow enabling this USE," + ewarn "can use net-libs/nodejs instead but it is disabled by default due to" + ewarn "security(!) concerns and requires manually passing '--js-runtimes node'" + ewarn "(to be permanent: echo '--js-runtimes node' >> ~/.config/yt-dlp/config)" + fi +} diff --git a/net-misc/yt-dlp/yt-dlp-9999.ebuild b/net-misc/yt-dlp/yt-dlp-9999.ebuild index 82aeb5f829f6..38f5297dc93b 100644 --- a/net-misc/yt-dlp/yt-dlp-9999.ebuild +++ b/net-misc/yt-dlp/yt-dlp-9999.ebuild @@ -38,7 +38,7 @@ IUSE="+deno" RDEPEND=" dev-python/pycryptodome[${PYTHON_USEDEP}] =dev-python/yt-dlp-ejs-0.8*[${PYTHON_USEDEP}] - deno? ( >=dev-lang/deno-bin-2.6.6 ) + deno? ( >=dev-lang/deno-bin-2.9.8 ) " BDEPEND=" test? ( media-video/ffmpeg[webp] ) -- cgit v1.3