commit:     94a647a8f8cfd669c5272e1cfd00a48253412b32
Author:     Alexander Golubev <fatzer2 <AT> gmail <DOT> com>
AuthorDate: Wed Aug 13 10:49:05 2025 +0000
Commit:     Florian Schmaus <flow <AT> gentoo <DOT> org>
CommitDate: Thu Sep 25 18:10:55 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=94a647a8

x11-misc/xscreensaver: make deps on gdk-pixbuf, png and gtk optional

* add previously dropped USE="gdk-pixbuf png gtk". It was verified that
  package builds fine and usable without those (individually or all
  together) and none of the dependencies are getting enabled
  automagically. All possible functionality loss is documented via
  greadme. Note that RESTRICTED_USE for gtk were not transfered from the
  old versions because it was verified that package builds and runs fine
  without them.
* document with greadme issue with USE=-jpeg reported by ./configure
* add a couple more perl dependencies found in scripts
* move media-gfx/fbida to optfeatures and elaborate on alternatives and
  other dependencies:
  - it's only one screensaver (vidwhacker) that depends on
    media-gfx/fbida and now it orderly fails to start rather than
    unexpectedly segfault as it was in #790599 times
  - as an alternative to media-gfx/fbida it is possible to use
    imagemagick's convert, which is much more common
  - besides media-gfx/fbida it requires media-libs/netpbm (which is not
    a very common package either) and a tool from libjpeg.
* minor cleanup

Closes: https://bugs.gentoo.org/961204
Signed-off-by: Alexander Golubev <fatzer2 <AT> gmail.com>
Part-of: https://github.com/gentoo/gentoo/pull/43429
Closes: https://github.com/gentoo/gentoo/pull/43429
Signed-off-by: Florian Schmaus <flow <AT> gentoo.org>

 x11-misc/xscreensaver/metadata.xml                |   1 +
 x11-misc/xscreensaver/xscreensaver-6.12-r2.ebuild | 366 ++++++++++++++++++++++
 2 files changed, 367 insertions(+)

diff --git a/x11-misc/xscreensaver/metadata.xml 
b/x11-misc/xscreensaver/metadata.xml
index 68803a1d6b15..cd4663b50a0b 100644
--- a/x11-misc/xscreensaver/metadata.xml
+++ b/x11-misc/xscreensaver/metadata.xml
@@ -17,6 +17,7 @@
        </upstream>
        <use>
                <flag name="fonts">Install the fonts shipped with XScreenSaver 
that have clear licensing</flag>
+               <flag name="gdk-pixbuf">Add ability for screensavers to read 
images in formats supported by <pkg>x11-libs/gdk-pixbuf</pkg></flag>
                <flag name="gdm">Use gdmflexiserver from 
<pkg>gnome-base/gdm</pkg> instead of <pkg>x11-misc/lightdm</pkg></flag>
                <flag name="gles" 
restrict="&gt;=x11-misc/xscreensaver-6.0.2">Emulate OpenGL 1.3 in terms of 
OpenGL ES 1.x</flag>
                <flag name="glx" 
restrict="&gt;=x11-misc/xscreensaver-6.0.2">Use GLX to interface OpenGL and X11 
instead of EGL</flag>

diff --git a/x11-misc/xscreensaver/xscreensaver-6.12-r2.ebuild 
b/x11-misc/xscreensaver/xscreensaver-6.12-r2.ebuild
new file mode 100644
index 000000000000..37e2fb8cdfb5
--- /dev/null
+++ b/x11-misc/xscreensaver/xscreensaver-6.12-r2.ebuild
@@ -0,0 +1,366 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit autotools flag-o-matic font greadme optfeature pam strip-linguas 
systemd xdg-utils
+
+DESCRIPTION="Modular screen saver and locker for the X Window System"
+HOMEPAGE="https://www.jwz.org/xscreensaver/";
+SRC_URI="
+       https://www.jwz.org/xscreensaver/${P}.tar.gz
+       logind-idle-hint? (
+               
https://github.com/Flowdalic/xscreensaver/commit/e79e2f41be3367c196899ef2f38ab97436fa1a65.patch
 ->
+                       ${PN}-6.12-logind-idle-hint.patch
+       )
+       systemd? (
+               
https://github.com/Flowdalic/xscreensaver/commit/376b07ec76cfe1070f498773aaec8fd7030593af.patch
 ->
+                       
${PN}-6.07-xscreensaver.service-start-with-no-splash.patch
+       )
+"
+
+S="${WORKDIR}/${PN}-$(ver_cut 1-2)"
+# Font license mapping for folder ./hacks/fonts/ as following:
+#   clacon.ttf       -- MIT
+#   gallant12x22.ttf -- unclear, hence dropped
+#   luximr.ttf       -- bh-luxi (package media-fonts/font-bh-ttf)
+#   OCRAStd.otf      -- unclear, hence dropped
+#   SpecialElite.ttf -- Apache-2.0
+LICENSE="BSD fonts? ( MIT Apache-2.0 ) systemd? ( ISC )"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~mips ~ppc ~ppc64 ~riscv 
~sparc ~x86 ~amd64-linux ~x86-linux"
+IUSE="elogind ffmpeg fonts +gdk-pixbuf gdm gles glx +gtk jpeg +locking 
logind-idle-hint new-login offensive pam +perl +png selinux suid systemd 
xinerama wayland"
+REQUIRED_USE="
+       gles? ( !glx )
+       ?? ( elogind systemd )
+       pam? ( locking )
+       logind-idle-hint? ( || ( elogind systemd ) )
+"
+
+COMMON_DEPEND="
+       >=dev-libs/libxml2-2.4.6:=
+       x11-apps/appres
+       x11-apps/xwininfo
+       x11-libs/libX11
+       x11-libs/libXext
+       x11-libs/libXi
+       x11-libs/libXrandr
+       x11-libs/libXt
+       x11-libs/libXxf86vm
+       elogind? ( sys-auth/elogind )
+       gdk-pixbuf? ( >=x11-libs/gdk-pixbuf-2.42.0:2[jpeg?] )
+       gtk? ( >=x11-libs/gtk+-3.0.0:3 )
+       ffmpeg? ( media-video/ffmpeg:= )
+       jpeg? ( media-libs/libjpeg-turbo:= )
+       locking? ( virtual/libcrypt:= )
+       new-login? (
+               gdm? ( gnome-base/gdm )
+               !gdm? ( || ( x11-misc/lightdm lxde-base/lxdm ) )
+       )
+       virtual/glu
+       virtual/opengl
+       pam? ( sys-libs/pam )
+       png? ( media-libs/libpng:= )
+       systemd? ( >=sys-apps/systemd-221:= )
+       >=x11-libs/libXft-2.1.0
+       xinerama? ( x11-libs/libXinerama )
+       wayland? ( >=dev-libs/wayland-1.8 )
+"
+# For USE="perl" see output of `qlist xscreensaver | grep '\(bin\|misc\)' | 
xargs grep '::'`
+RDEPEND="
+       ${COMMON_DEPEND}
+       perl? (
+               dev-lang/perl
+               dev-perl/HTML-Parser
+               dev-perl/LWP-Protocol-https
+               dev-perl/libwww-perl
+       )
+       selinux? ( sec-policy/selinux-xscreensaver )
+       wayland? ( gui-apps/grim )
+"
+DEPEND="
+       ${COMMON_DEPEND}
+       x11-base/xorg-proto
+"
+BDEPEND="
+       dev-util/intltool
+       app-alternatives/bc
+       sys-devel/gettext
+       virtual/pkgconfig
+"
+PATCHES=(
+       "${FILESDIR}"/${PN}-5.31-pragma.patch
+       "${FILESDIR}"/${PN}-6.01-gentoo.patch
+       "${FILESDIR}"/${PN}-6.07-gcc.patch
+       "${FILESDIR}"/${PN}-6.01-configure.ac-sandbox.patch
+       "${FILESDIR}"/${PN}-6.01-without-gl-makefile.patch
+       "${FILESDIR}"/${PN}-6.01-non-gtk-install.patch
+       "${FILESDIR}"/${PN}-6.01-configure-install_sh.patch
+       "${FILESDIR}"/${PN}-6.03-without-gl-configure.patch
+       "${FILESDIR}"/${PN}-6.05-remove-update-icon-cache.patch
+       "${FILESDIR}"/${PN}-6.05-r2-configure-exit-codes.patch
+       "${FILESDIR}"/${PN}-6.07-allow-no-pam.patch
+       "${FILESDIR}"/${PN}-6.07-fix-desktop-files.patch
+       "${FILESDIR}"/${PN}-6.09-ffmpeg.patch
+)
+
+DOCS=( README{,.hacking} )
+
+# see https://bugs.gentoo.org/898328
+QA_CONFIG_IMPL_DECL_SKIP=( getspnam_shadow )
+
+src_prepare() {
+       default
+
+       # bug #896440
+       mv po/ca.po po/ca.po.old || die
+       iconv -f ISO-8859-15 -t UTF-8 po/ca.po.old >po/ca.po || die
+
+       sed -i configure.ac -e '/^ALL_LINGUAS=/d' || die
+
+       if use systemd; then
+               # Causes "Failed to enable unit: Cannot alias 
xscreensaver.service as org.jwz.xscreensaver."
+               # after "systemctl --user enable xscreensaver".
+               sed -i -e '/^Alias=org.jwz.xscreensaver.service/d' \
+                       driver/xscreensaver.service.in || die
+
+               eapply 
"${DISTDIR}/${PN}-6.07-xscreensaver.service-start-with-no-splash.patch"
+       fi
+
+       strip-linguas -i po/
+       export ALL_LINGUAS="${LINGUAS}"
+
+       if use new-login && ! use gdm; then #392967
+               sed -i \
+                       -e "/default_l.*1/s:gdmflexiserver 
-ls:${EPREFIX}/usr/libexec/lightdm/&:" \
+                       configure{,.ac} || die
+       fi
+
+       # We are patching driver/XScreenSaver.ad.in, so let's delete the
+       # header generated from it so that it gets back in sync during build:
+       rm driver/XScreenSaver_ad.h || die
+
+       if ! use offensive; then
+               sed -i \
+                       -e 
'/boobies/d;/boobs/d;/cock/d;/pussy/d;/viagra/d;/vibrator/d' \
+                       hacks/barcode.c || die
+               sed -i \
+                       -e 's|erect penis|shuffle board|g' \
+                       -e 's|flaccid penis|flaccid anchor|g' \
+                       -e 's|vagina|engagement ring|g' \
+                       -e 's|Penis|Shuttle|g' \
+                       hacks/glx/glsnake.c || die
+               sed -i \
+                       's| Stay.*fucking mask\.$||' \
+                       hacks/glx/covid19.man \
+                       hacks/config/covid19.xml || die
+               sed -i \
+                       -e 's|Ass |Dumb |g' \
+                       -e 's|Buttcorn|Blue Corn|g' \
+                       -e 's| dick||gi' \
+                       -e 's| shit||g' \
+                       hacks/bsod.c || die
+               eapply 
"${FILESDIR}/xscreensaver-6.05-teach-handsy-some-manners.patch"
+       fi
+
+       if use logind-idle-hint; then
+               eapply "${DISTDIR}/${PN}-6.12-logind-idle-hint.patch"
+       fi
+
+       if use glx; then
+               sed -i -e 's;OpenGL/gl.h;GL/gl.h;' driver/subprocs.c || die
+       fi
+
+       config_rpath_update "${S}"/config.rpath
+
+       # Must be eauto*re*conf, to force the rebuild
+       eautoreconf
+}
+
+src_configure() {
+       if use ppc || use ppc64; then
+               filter-flags -maltivec -mabi=altivec
+               append-flags -U__VEC__
+       fi
+
+       unset BC_ENV_ARGS #24568
+
+       # /proc/interrupts won't always have the keyboard bits needed
+       # Not clear this does anything in 6.03+(?) but let's keep it for now in 
case.
+       # (See also: configure argument)
+       export ac_cv_have_proc_interrupts=yes
+
+       # WARNING: This is NOT a normal autoconf script
+       # Some of the --with options are NOT standard, and expect "--with-X=no" 
rather than "--without-X"
+       ECONF_OPTS=(
+               $(use_enable locking)
+               $(use_with elogind)
+               $(use_with gdk-pixbuf pixbuf)
+               $(use_with gles)
+               $(use_with glx)
+               $(use_with gtk)
+               $(use_with new-login login-manager)
+               $(use_with pam)
+               $(use_with suid setuid-hacks)
+               $(use_with systemd)
+               $(use_with xinerama xinerama-ext)
+               $(use_with wayland)
+               --with-jpeg=$(usex jpeg yes no)
+               --with-record-animation=$(usex ffmpeg yes no)
+               --with-png=$(usex png yes no)
+               --with-xft=yes
+               --with-app-defaults="${EPREFIX}"/usr/share/X11/app-defaults
+               --with-configdir="${EPREFIX}"/usr/share/${PN}/config
+               --with-dpms-ext
+               --with-hackdir="${EPREFIX}"/usr/$(get_libdir)/misc/${PN}
+               --with-proc-interrupts
+               --with-randr-ext
+               --with-text-file="${EPREFIX}"/etc/gentoo-release
+               --with-xdbe-ext
+               --with-xf86gamma-ext
+               --with-xf86vmode-ext
+               --with-xinput-ext
+               --with-xkb-ext
+               --with-xshm-ext
+               --without-gle
+               --without-kerberos
+               --without-motif
+               --with-proc-oom
+               --x-includes="${EPREFIX}"/usr/include
+               --x-libraries="${EPREFIX}"/usr/$(get_libdir)
+       )
+       # WARNING: This is NOT a normal autoconf script
+       econf "${ECONF_OPTS[@]}"
+}
+
+src_compile() {
+       # stock target is "default", which is broken in some releases.
+       emake all
+}
+
+src_install() {
+       use pam && dodir /etc/pam.d/
+       emake install_prefix="${D}" DESTDIR="${D}" 
GTK_SHAREDIR="${installprefix}"/usr/share/xscreensaver install
+
+       if use fonts; then
+               # Do not install fonts with unclear licensing
+               rm -v "${ED}${FONTDIR}"/gallant12x22.ttf || die
+
+               # Do not duplicate font Luxi Mono (of package 
media-fonts/font-bh-ttf)
+               rm -v "${ED}${FONTDIR}"/luximr.ttf || die
+
+               font_xfont_config
+       else
+               rm -rfv "${ED}${FONTDIR}" || die #812473
+       fi
+
+       einstalldocs
+
+       if use pam; then
+               fperms 755 /usr/bin/${PN}
+               pamd_mimic_system ${PN} auth
+       fi
+
+       # bugs #809599, #828869
+       if ! use gtk; then
+               rm "${ED}/usr/bin/xscreensaver-demo" || die
+       fi
+
+       if use systemd; then
+               systemd_douserunit "${ED}/usr/share/${PN}/xscreensaver.service"
+       fi
+       # Makefile installs xscreensaver.service regardless of
+       # --without-systemd, and if USE=systemd, we will have installed the
+       # unit file already.
+       rm "${ED}/usr/share/${PN}/xscreensaver.service" || die
+
+       # bug #885989
+       fperms 4755 /usr/$(get_libdir)/misc/xscreensaver/xscreensaver-auth
+
+       if ! { use png || use gdk-pixbuf; }; then
+               greadme_stdin --append <<-EOF
+               Xscreensaver was built without any means to support image 
manipulation
+               (i.e. with neither USE=gtk-pixbuf or USE=png. Several 
screensavers
+               will likely just fail to work without it and several others will
+               have diminished appearance like displaying a checkerboard 
pattern
+               instead of an image. It is strongly recommended to enable at 
least one
+               of those flags.
+
+               EOF
+       elif ! use gdk-pixbuf; then
+               greadme_stdin --append <<-EOF
+               Xscreensaver was built with png support only. This means that 
most of
+               screensavers won't be able to use images in any other formats. 
It is
+               recommended to enable USE=gtk-pixbuf.
+
+               EOF
+       fi
+
+       if ! use jpeg; then
+               greadme_stdin --append <<-EOF
+               Xscreensaver was built without jpeg support. This mean that
+               'webcollage' screensaver will be considerably slower. Enable
+               USE=jpeg if that will become an issue.
+
+               EOF
+       fi
+
+       if use gtk; then
+               greadme_stdin --append <<-EOF
+               You can configure xscreensaver via 'xscreensaver-settings'.
+
+               EOF
+       else
+               greadme_stdin --append <<-EOF
+               Since xscreensaver had been built without USE=gtk
+               'xscreensaver-settings' was not installed. Hence the only
+               way to configure it is via some third-party utilities or
+               directly via configuration file '~/.xscreensaver'.
+
+               EOF
+       fi
+
+       # bug #811885
+       if ! use glx; then
+               greadme_stdin --append <<-EOF
+               Enable USE='glx' if OpenGL screensavers are crashing.
+
+               EOF
+       fi
+
+       if use wayland; then
+               greadme_stdin --append <<-EOF
+               WARNING: Wayland support is preliminary. It does not lock and 
you need
+               a supported compositor, like:
+
+                *  kde-plasma/kwin
+                *  gui-wm/sway
+                *  gui-wm/hyprland
+                *  gui-wm/wayfire
+                *  gui-wm/labwc
+               EOF
+       fi
+}
+
+pkg_postinst() {
+       use fonts && font_pkg_postinst
+
+       greadme_pkg_postinst
+
+       optfeature_header 'Additional dependencies for specific screensavers'
+       optfeature 'vidwhacker' 'media-libs/netpbm[jpeg,png] 
virtual/imagemagick-tools' \
+                       'media-libs/netpbm[jpeg,png] media-libs/libjpeg-turbo  
media-gfx/fbida'
+       optfeature 'webcollage' 'virtual/imagemagick-tools[jpeg,png] 
x11-apps/xdpyinfo'
+
+       optfeature_header 'Fonts'
+       optfeature 'Bitmap fonts 75dpi' media-fonts/font-adobe-75dpi
+       optfeature 'Bitmap fonts 100dpi' media-fonts/font-adobe-100dpi
+       optfeature 'Truetype font Luxi Mono' media-fonts/font-bh-ttf
+
+       xdg_icon_cache_update
+}
+
+pkg_postrm() {
+       use fonts && font_pkg_postrm
+       xdg_icon_cache_update
+}

Reply via email to