{ lib, stdenv, fetchurl, coreutils, gdk-pixbuf, gdk-pixbuf-xlib, gettext, gle, gtk3, intltool, libGL, libGLU, libX11, libXext, libXft, libXi, libXinerama, libXrandr, libXt, libXxf86vm, libxml2, makeWrapper, pam, perlPackages, xorg, pkg-config, systemd, forceInstallAllHacks ? true, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd, nixosTests, substituteAll, wrapperPrefix ? "/run/wrappers/bin", }: stdenv.mkDerivation (finalAttrs: { pname = "xscreensaver"; version = "6.09"; src = fetchurl { url = "https://www.jwz.org/xscreensaver/xscreensaver-${finalAttrs.version}.tar.gz"; hash = "sha256-9GZ3Ba24zEP9LzlzqIobVLFvIBkK/pOyHiIfL1cyCwU="; }; outputs = [ "out" "man" ]; nativeBuildInputs = [ intltool makeWrapper pkg-config ]; buildInputs = [ gdk-pixbuf gdk-pixbuf-xlib gettext gle gtk3 libGL libGLU libX11 libXext libXft libXi libXinerama libXrandr libXt libXxf86vm libxml2 pam perlPackages.LWPProtocolHttps perlPackages.MozillaCA perlPackages.perl ] ++ lib.optionals withSystemd [ systemd ]; postPatch = '' pushd hacks patchShebangs check-configs.pl munge-ad.pl xml2man.pl popd ''; patches = [ (substituteAll { src = ./xscreensaver-wrapper-prefix.patch; inherit wrapperPrefix; }) ]; preConfigure = '' # Fix installation paths for GTK resources. sed -e 's%@GTK_DATADIR@%@datadir@% ; s%@PO_DATADIR@%@datadir@%' \ -i driver/Makefile.in po/Makefile.in.in ''; configureFlags = [ "--with-app-defaults=${placeholder "out"}/share/xscreensaver/app-defaults" ]; # "marbling" has NEON code that mixes signed and unsigned vector types env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isAarch "-flax-vector-conversions"; postInstall = '' for bin in $out/bin/*; do wrapProgram "$bin" \ --prefix PATH : "$out/libexec/xscreensaver" \ --prefix PATH : "${ lib.makeBinPath [ coreutils perlPackages.perl xorg.appres ] }" \ --prefix PERL5LIB ':' $PERL5LIB done '' + lib.optionalString forceInstallAllHacks '' make -j$NIX_BUILD_CORES -C hacks/glx dnalogo cat hacks/Makefile.in \ | grep -E '([a-z0-9]+):[[:space:]]*\1[.]o' | cut -d : -f 1 | xargs make -j$NIX_BUILD_CORES -C hacks cat hacks/glx/Makefile.in \ | grep -E '([a-z0-9]+):[[:space:]]*\1[.]o' | cut -d : -f 1 | xargs make -j$NIX_BUILD_CORES -C hacks/glx cp -f $(find hacks -type f -perm -111 "!" -name "*.*" ) "$out/libexec/xscreensaver" ''; passthru.tests = { xscreensaver = nixosTests.xscreensaver; }; meta = { homepage = "https://www.jwz.org/xscreensaver/"; description = "Set of screensavers"; downloadPage = "https://www.jwz.org/xscreensaver/download.html"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ raskin AndersonTorres ]; platforms = lib.platforms.unix; }; })