From 1d96fe4f4108985e0d37e4d5a6c6749403a56d58 Mon Sep 17 00:00:00 2001 From: Wolfgang Walther Date: Mon, 20 Oct 2025 16:07:43 +0200 Subject: [PATCH 1/2] by-name/various: move overrides to package.nix --- pkgs/by-name/fr/freedv/package.nix | 5 ++- pkgs/by-name/go/gopro-tool/package.nix | 9 +++- pkgs/by-name/my/mysql-workbench/package.nix | 8 ++-- pkgs/by-name/ne/neovim-unwrapped/package.nix | 8 +++- pkgs/by-name/pl/plausible/package.nix | 5 ++- pkgs/by-name/ra/rabbitmq-server/package.nix | 5 ++- pkgs/by-name/x2/x2t/package.nix | 12 ++++-- pkgs/top-level/all-packages.nix | 44 +------------------- 8 files changed, 40 insertions(+), 56 deletions(-) diff --git a/pkgs/by-name/fr/freedv/package.nix b/pkgs/by-name/fr/freedv/package.nix index 67c0ea5413d74..f1c3cfb78e427 100644 --- a/pkgs/by-name/fr/freedv/package.nix +++ b/pkgs/by-name/fr/freedv/package.nix @@ -27,6 +27,7 @@ }: let + codec2' = codec2.override { freedvSupport = true; }; ebur128Src = fetchFromGitHub { owner = "jiixyj"; repo = "libebur128"; @@ -125,7 +126,7 @@ stdenv.mkDerivation (finalAttrs: { ]; buildInputs = [ - codec2 + codec2' libsamplerate libsndfile lpcnet @@ -157,7 +158,7 @@ stdenv.mkDerivation (finalAttrs: { (lib.cmakeBool "USE_NATIVE_AUDIO" (with stdenv.hostPlatform; isLinux || isDarwin)) ]; - env.NIX_CFLAGS_COMPILE = "-I${codec2.src}/src"; + env.NIX_CFLAGS_COMPILE = "-I${codec2'.src}/src"; doCheck = false; diff --git a/pkgs/by-name/go/gopro-tool/package.nix b/pkgs/by-name/go/gopro-tool/package.nix index a5b848d28b5d2..60a56dec8fcb5 100644 --- a/pkgs/by-name/go/gopro-tool/package.nix +++ b/pkgs/by-name/go/gopro-tool/package.nix @@ -5,9 +5,16 @@ makeWrapper, ffmpeg, vlc, + x264, jq, }: +let + vlc' = vlc.overrideAttrs (old: { + buildInputs = old.buildInputs ++ [ x264 ]; + }); +in + stdenv.mkDerivation { pname = "gopro-tool"; version = "0-unstable-2024-04-18"; @@ -30,7 +37,7 @@ stdenv.mkDerivation { --prefix PATH : ${ lib.makeBinPath [ ffmpeg - vlc + vlc' jq ] } diff --git a/pkgs/by-name/my/mysql-workbench/package.nix b/pkgs/by-name/my/mysql-workbench/package.nix index 5f9a3c7ca033a..9722b4d66fa02 100644 --- a/pkgs/by-name/my/mysql-workbench/package.nix +++ b/pkgs/by-name/my/mysql-workbench/package.nix @@ -20,7 +20,7 @@ python3Packages, cairo, - mysql, + mysql80, libiodbc, proj, @@ -41,6 +41,8 @@ }: let + gdal' = gdal.override { libmysqlclient = mysql80; }; + # for some reason the package doesn't build with swig 4.3.0 swig_4_2 = swig.overrideAttrs (prevAttrs: { version = "4.2.1"; @@ -106,7 +108,7 @@ stdenv.mkDerivation (finalAttrs: { buildInputs = [ antlr4_13.runtime.cpp boost - gdal + gdal' gtkmm3 libiodbc libmysqlconnectorcpp @@ -145,7 +147,7 @@ stdenv.mkDerivation (finalAttrs: { ); cmakeFlags = [ - (lib.cmakeFeature "MySQL_CONFIG_PATH" (lib.getExe' mysql "mysql_config")) + (lib.cmakeFeature "MySQL_CONFIG_PATH" (lib.getExe' mysql80 "mysql_config")) (lib.cmakeFeature "IODBC_CONFIG_PATH" (lib.getExe' libiodbc "iodbc-config")) (lib.cmakeFeature "ANTLR_JAR_PATH" "${antlr4_13.jarLocation}") # mysql-workbench 8.0.21 depends on libmysqlconnectorcpp 1.1.8. diff --git a/pkgs/by-name/ne/neovim-unwrapped/package.nix b/pkgs/by-name/ne/neovim-unwrapped/package.nix index 85c231626b100..b480f18a38273 100644 --- a/pkgs/by-name/ne/neovim-unwrapped/package.nix +++ b/pkgs/by-name/ne/neovim-unwrapped/package.nix @@ -5,7 +5,8 @@ cmake, gettext, libuv, - lua, + lua5_1, + luajit, pkg-config, unibilium, utf8proc, @@ -25,6 +26,11 @@ fish ? null, python3 ? null, }: + +let + lua = if lib.meta.availableOn stdenv.hostPlatform luajit then luajit else lua5_1; +in + stdenv.mkDerivation ( finalAttrs: let diff --git a/pkgs/by-name/pl/plausible/package.nix b/pkgs/by-name/pl/plausible/package.nix index 75fdf91ad317b..ed170e31d665d 100644 --- a/pkgs/by-name/pl/plausible/package.nix +++ b/pkgs/by-name/pl/plausible/package.nix @@ -1,6 +1,7 @@ { lib, - beamPackages, + beam27Packages, + elixir_1_18, buildNpmPackage, rustPlatform, fetchFromGitHub, @@ -111,6 +112,8 @@ let done ''; + beamPackages = beam27Packages.extend (self: super: { elixir = elixir_1_18; }); + in beamPackages.mixRelease rec { inherit diff --git a/pkgs/by-name/ra/rabbitmq-server/package.nix b/pkgs/by-name/ra/rabbitmq-server/package.nix index bebbcfa61ec6b..3873771025cea 100644 --- a/pkgs/by-name/ra/rabbitmq-server/package.nix +++ b/pkgs/by-name/ra/rabbitmq-server/package.nix @@ -1,6 +1,7 @@ { lib, - beamPackages, + beam27Packages, + elixir_1_18, stdenv, fetchurl, python3, @@ -39,6 +40,8 @@ let systemd # for systemd unit activation check ] ); + + beamPackages = beam27Packages.extend (self: super: { elixir = elixir_1_18; }); in stdenv.mkDerivation (finalAttrs: { diff --git a/pkgs/by-name/x2/x2t/package.nix b/pkgs/by-name/x2/x2t/package.nix index 9d619cdfd18e4..482c00705f1dd 100644 --- a/pkgs/by-name/x2/x2t/package.nix +++ b/pkgs/by-name/x2/x2t/package.nix @@ -16,7 +16,6 @@ jdk, lib, nodejs_22, - # needs to be static and built with MD2 support! openssl, pkg-config, python3, @@ -30,6 +29,11 @@ }: let + openssl' = openssl.override { + enableMD2 = true; + static = true; + }; + qmake = qt5.qmake; fixIcu = writeScript "fix-icu.sh" '' substituteInPlace \ @@ -722,9 +726,9 @@ let echo "== openssl ==" mkdir -p Common/3dParty/openssl/build/linux_64/lib - echo "Including openssl from ${openssl.dev}" - ln -s ${openssl.dev}/include Common/3dParty/openssl/build/linux_64/include - for i in ${openssl.out}/lib/*; do + echo "Including openssl from ${openssl'.dev}" + ln -s ${openssl'.dev}/include Common/3dParty/openssl/build/linux_64/include + for i in ${openssl'.out}/lib/*; do ln -s $i Common/3dParty/openssl/build/linux_64/lib/$(basename $i) done diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index fa357ead5f9bc..b08d2095566c1 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1078,13 +1078,6 @@ with pkgs; wine = wineWowPackages.stable; }; - x2t = callPackage ../by-name/x2/x2t/package.nix { - openssl = openssl.override { - enableMD2 = true; - static = true; - }; - }; - yabridge = callPackage ../tools/audio/yabridge { wine = wineWowPackages.yabridge; }; @@ -1559,10 +1552,6 @@ with pkgs; stdenv = clangStdenv; }; - plausible = callPackage ../by-name/pl/plausible/package.nix { - beamPackages = beam27Packages.extend (self: super: { elixir = elixir_1_18; }); - }; - reattach-to-user-namespace = callPackage ../os-specific/darwin/reattach-to-user-namespace { }; xcodeenv = callPackage ../development/mobile/xcodeenv { }; @@ -4528,12 +4517,6 @@ with pkgs; dotnetPackages = recurseIntoAttrs (callPackage ./dotnet-packages.nix { }); - gopro-tool = callPackage ../by-name/go/gopro-tool/package.nix { - vlc = vlc.overrideAttrs (old: { - buildInputs = old.buildInputs ++ [ x264 ]; - }); - }; - gwe = callPackage ../tools/misc/gwe { nvidia_x11 = linuxPackages.nvidia_x11; }; @@ -8936,10 +8919,6 @@ with pkgs; qremotecontrol-server = libsForQt5.callPackage ../servers/misc/qremotecontrol-server { }; - rabbitmq-server = callPackage ../by-name/ra/rabbitmq-server/package.nix { - beamPackages = beam27Packages.extend (self: super: { elixir = elixir_1_18; }); - }; - rethinkdb = callPackage ../servers/nosql/rethinkdb { stdenv = clangStdenv; libtool = cctools; @@ -10285,12 +10264,6 @@ with pkgs; inherit buildPythonApplication; }; - freedv = callPackage ../by-name/fr/freedv/package.nix { - codec2 = codec2.override { - freedvSupport = true; - }; - }; - inherit ({ freeoffice = callPackage ../applications/office/softmaker/freeoffice.nix { }; @@ -11612,10 +11585,7 @@ with pkgs; # more usecases when wrapping neovim. The interface is being actively worked on # so expect breakage. use wrapNeovim instead if you want a stable alternative wrapNeovimUnstable = callPackage ../applications/editors/neovim/wrapper.nix { }; - wrapNeovim = neovim-unwrapped: makeOverridable (neovimUtils.legacyWrapper neovim-unwrapped); - neovim-unwrapped = callPackage ../by-name/ne/neovim-unwrapped/package.nix { - lua = if lib.meta.availableOn stdenv.hostPlatform luajit then luajit else lua5_1; - }; + wrapNeovim = neovim-unwrapped: lib.makeOverridable (neovimUtils.legacyWrapper neovim-unwrapped); neovimUtils = callPackage ../applications/editors/neovim/utils.nix { lua = lua5_1; @@ -13120,18 +13090,6 @@ with pkgs; } ); - mysql-workbench = callPackage ../by-name/my/mysql-workbench/package.nix ( - let - mysql = mysql80; - in - { - gdal = gdal.override { - libmysqlclient = mysql; - }; - mysql = mysql; - } - ); - pgadmin4-desktopmode = pgadmin4.override { server-mode = false; }; philipstv = with python3Packages; toPythonApplication philipstv; From 4eb2f4eb39313c07255e0bd312cbc518d074410e Mon Sep 17 00:00:00 2001 From: Aliaksandr Date: Sun, 11 Jan 2026 19:34:04 +0200 Subject: [PATCH 2/2] glib: move glib-untested overrides into package.nix This has the additional benefit, that the tests will run with `finalPackage`, i.e. taking overrides into account. --- pkgs/by-name/gl/glib/package.nix | 607 ++++++++++++++++--------------- pkgs/top-level/all-packages.nix | 13 - 2 files changed, 309 insertions(+), 311 deletions(-) diff --git a/pkgs/by-name/gl/glib/package.nix b/pkgs/by-name/gl/glib/package.nix index 887d6617d8ef8..3bc97d32833fa 100644 --- a/pkgs/by-name/gl/glib/package.nix +++ b/pkgs/by-name/gl/glib/package.nix @@ -45,6 +45,7 @@ assert stdenv.hostPlatform.isLinux -> util-linuxMinimal != null; let + dbus' = dbus.override { enableSystemd = false; }; gobject-introspection' = buildPackages.gobject-introspection.override { propagateFullGlib = false; # Avoid introducing cairo, which enables gobjectSupport by default. @@ -72,317 +73,327 @@ let lib.meta.availableOn stdenv.hostPlatform libsystemtap; in -stdenv.mkDerivation (finalAttrs: { - pname = "glib"; - version = "2.86.3"; - - outputs = [ - "bin" - "out" - "dev" - "devdoc" - ]; +stdenv.mkDerivation ( + finalAttrs: + let + glib-untested = finalAttrs.finalPackage.overrideAttrs { doCheck = false; }; + # break dependency cycles + # these things are only used for tests, they don't get into the closure + shared-mime-info' = shared-mime-info.override { glib = glib-untested; }; + desktop-file-utils' = desktop-file-utils.override { glib = glib-untested; }; + in + { + pname = "glib"; + version = "2.86.3"; + + outputs = [ + "bin" + "out" + "dev" + "devdoc" + ]; - setupHook = ./setup-hook.sh; + setupHook = ./setup-hook.sh; - src = fetchurl { - url = "mirror://gnome/sources/glib/${lib.versions.majorMinor finalAttrs.version}/glib-${finalAttrs.version}.tar.xz"; - hash = "sha256-syEdjTS5313KBXh+8K1dfKdd7JmLlw4aqwAB0imXfGU="; - }; + src = fetchurl { + url = "mirror://gnome/sources/glib/${lib.versions.majorMinor finalAttrs.version}/glib-${finalAttrs.version}.tar.xz"; + hash = "sha256-syEdjTS5313KBXh+8K1dfKdd7JmLlw4aqwAB0imXfGU="; + }; - patches = - lib.optionals stdenv.hostPlatform.isDarwin [ - ./darwin-compilation.patch + patches = + lib.optionals stdenv.hostPlatform.isDarwin [ + ./darwin-compilation.patch + ] + ++ lib.optionals stdenv.hostPlatform.isMusl [ + ./quark_init_on_demand.patch + ./gobject_init_on_demand.patch + ] + ++ [ + # This patch lets GLib's GDesktopAppInfo API watch and notice changes + # to the Nix user and system profiles. That way, the list of available + # applications shown by the desktop environment is immediately updated + # when the user installs or removes any + # (see ). + + # It does so by monitoring /nix/var/nix/profiles (for changes to the system + # profile) and /nix/var/nix/profiles/per-user/USER (for changes to the user + # profile) as well as /etc/profiles/per-user (for chanes to the user + # environment profile) and crawling their share/applications sub-directory when + # changes happen. + ./glib-appinfo-watch.patch + + ./schema-override-variable.patch + + # Add support for Pantheon’s terminal emulator. + ./elementary-terminal-support.patch + + # GLib contains many binaries used for different purposes; + # we will install them to different outputs: + # 1. Tools for desktop environment and introspection ($bin) + # * gapplication (non-darwin) + # * gdbus + # * gi-compile-repository + # * gi-decompile-typelib + # * gi-inspect-typelib + # * gio + # * gio-launch-desktop (symlink to $out) + # * gsettings + # 2. Development/build tools ($dev) + # * gdbus-codegen + # * gio-querymodules + # * glib-compile-resources + # * glib-compile-schemas + # * glib-genmarshal + # * glib-gettextize + # * glib-mkenums + # * gobject-query + # * gresource + # * gtester + # * gtester-report + # 3. Tools for desktop environment that cannot go to $bin due to $out depending on them ($out) + # * gio-launch-desktop + ./split-dev-programs.patch + + # Tell Meson to install gdb scripts next to the lib + # GDB only looks there and in ${gdb}/share/gdb/auto-load, + # and by default meson installs in to $out/share/gdb/auto-load + # which does not help + ./gdb_script.patch + ]; + + strictDeps = true; + + buildInputs = [ + finalAttrs.setupHook ] - ++ lib.optionals stdenv.hostPlatform.isMusl [ - ./quark_init_on_demand.patch - ./gobject_init_on_demand.patch + ++ lib.optionals (!stdenv.hostPlatform.isFreeBSD) [ + libsysprof-capture ] ++ [ - # This patch lets GLib's GDesktopAppInfo API watch and notice changes - # to the Nix user and system profiles. That way, the list of available - # applications shown by the desktop environment is immediately updated - # when the user installs or removes any - # (see ). - - # It does so by monitoring /nix/var/nix/profiles (for changes to the system - # profile) and /nix/var/nix/profiles/per-user/USER (for changes to the user - # profile) as well as /etc/profiles/per-user (for chanes to the user - # environment profile) and crawling their share/applications sub-directory when - # changes happen. - ./glib-appinfo-watch.patch - - ./schema-override-variable.patch - - # Add support for Pantheon’s terminal emulator. - ./elementary-terminal-support.patch - - # GLib contains many binaries used for different purposes; - # we will install them to different outputs: - # 1. Tools for desktop environment and introspection ($bin) - # * gapplication (non-darwin) - # * gdbus - # * gi-compile-repository - # * gi-decompile-typelib - # * gi-inspect-typelib - # * gio - # * gio-launch-desktop (symlink to $out) - # * gsettings - # 2. Development/build tools ($dev) - # * gdbus-codegen - # * gio-querymodules - # * glib-compile-resources - # * glib-compile-schemas - # * glib-genmarshal - # * glib-gettextize - # * glib-mkenums - # * gobject-query - # * gresource - # * gtester - # * gtester-report - # 3. Tools for desktop environment that cannot go to $bin due to $out depending on them ($out) - # * gio-launch-desktop - ./split-dev-programs.patch - - # Tell Meson to install gdb scripts next to the lib - # GDB only looks there and in ${gdb}/share/gdb/auto-load, - # and by default meson installs in to $out/share/gdb/auto-load - # which does not help - ./gdb_script.patch + pcre2 + ] + ++ lib.optionals (!stdenv.hostPlatform.isWindows) [ + bash + gnum4 # install glib-gettextize and m4 macros for other apps to use + ] + ++ lib.optionals (lib.meta.availableOn stdenv.hostPlatform elfutils) [ + elfutils + ] + ++ lib.optionals withDtrace [ + libsystemtap + ] + ++ lib.optionals stdenv.hostPlatform.isLinux [ + libselinux + util-linuxMinimal # for libmount ]; - strictDeps = true; - - buildInputs = [ - finalAttrs.setupHook - ] - ++ lib.optionals (!stdenv.hostPlatform.isFreeBSD) [ - libsysprof-capture - ] - ++ [ - pcre2 - ] - ++ lib.optionals (!stdenv.hostPlatform.isWindows) [ - bash - gnum4 # install glib-gettextize and m4 macros for other apps to use - ] - ++ lib.optionals (lib.meta.availableOn stdenv.hostPlatform elfutils) [ - elfutils - ] - ++ lib.optionals withDtrace [ - libsystemtap - ] - ++ lib.optionals stdenv.hostPlatform.isLinux [ - libselinux - util-linuxMinimal # for libmount - ]; - - depsBuildBuild = [ - pkg-config # required to find native gi-docgen - ]; - - nativeBuildInputs = [ - docutils # for rst2man, rst2html5 - meson - ninja - pkg-config - perl - python3 - python3Packages.packaging # mostly used to make meson happy - python3Packages.wrapPython # for patchPythonScript - gettext - libxslt - ] - ++ lib.optionals withIntrospection [ - gi-docgen - gobject-introspection' - ] - ++ lib.optionals (withIntrospection && !stdenv.buildPlatform.canExecute stdenv.hostPlatform) [ - mesonEmulatorHook - ] - ++ lib.optionals withDtrace [ - systemtap' # for dtrace - ]; - - propagatedBuildInputs = [ - zlib - libffi - gettext - libiconv - ]; - - nativeCheckInputs = [ - tzdata - desktop-file-utils - shared-mime-info - ]; - - mesonFlags = [ - "-Dglib_debug=disabled" # https://gitlab.gnome.org/GNOME/glib/-/issues/3421#note_2206315 - "-Ddocumentation=true" # gvariant specification can be built without gi-docgen - (lib.mesonEnable "dtrace" withDtrace) - (lib.mesonEnable "systemtap" withDtrace) # requires dtrace option to be enabled - "-Dnls=enabled" - "-Ddevbindir=${placeholder "dev"}/bin" - (lib.mesonEnable "introspection" withIntrospection) - # FIXME: Fails when linking target glib/tests/libconstructor-helper.so - # relocation R_X86_64_32 against hidden symbol `__TMC_END__' can not be used when making a shared object - "-Dtests=${lib.boolToString (!stdenv.hostPlatform.isStatic)}" - ] - ++ lib.optionals (!lib.meta.availableOn stdenv.hostPlatform elfutils) [ - "-Dlibelf=disabled" - ] - ++ lib.optionals stdenv.hostPlatform.isFreeBSD [ - "-Dxattr=false" - "-Dsysprof=disabled" # sysprof-capture does not build on FreeBSD - ]; - - env = { - NIX_CFLAGS_COMPILE = toString [ - "-Wno-error=nonnull" - # Default for release buildtype but passed manually because - # we're using plain - "-DG_DISABLE_CAST_CHECKS" + depsBuildBuild = [ + pkg-config # required to find native gi-docgen ]; - }; - postPatch = '' - patchShebangs glib/gen-unicode-tables.pl - patchShebangs glib/tests/gen-casefold-txt.py - patchShebangs glib/tests/gen-casemap-txt.py - patchShebangs tools/gen-visibility-macros.py - patchShebangs tests - - # Needs machine-id, comment the test - sed -e '/\/gdbus\/codegen-peer-to-peer/ s/^\/*/\/\//' -i gio/tests/gdbus-peer.c - sed -e '/g_test_add_func/ s/^\/*/\/\//' -i gio/tests/gdbus-address-get-session.c - # All gschemas fail to pass the test, upstream bug? - sed -e '/g_test_add_data_func/ s/^\/*/\/\//' -i gio/tests/gschema-compile.c - # Cannot reproduce the failing test_associations on hydra - sed -e '/\/appinfo\/associations/d' -i gio/tests/appinfo.c - # Needed because of libtool wrappers - sed -e '/g_subprocess_launcher_set_environ (launcher, envp);/a g_subprocess_launcher_setenv (launcher, "PATH", g_getenv("PATH"), TRUE);' -i gio/tests/gsubprocess.c - '' - + lib.optionalString stdenv.hostPlatform.isWindows '' - substituteInPlace gio/win32/meson.build \ - --replace "libintl, " "" - ''; - - postConfigure = '' - patchShebangs gio/gdbus-2.0/codegen/gdbus-codegen gobject/glib-{genmarshal,mkenums} - ''; - - DETERMINISTIC_BUILD = 1; - - postInstall = '' - moveToOutput "share/glib-2.0" "$dev" - moveToOutput "share/glib-2.0/gdb" "$out" - substituteInPlace "$dev/bin/gdbus-codegen" --replace "$out" "$dev" - sed -i "$dev/bin/glib-gettextize" -e "s|^gettext_dir=.*|gettext_dir=$dev/share/glib-2.0/gettext|" - - # This file is *included* in gtk3 and would introduce runtime reference via __FILE__. - sed '1i#line 1 "glib-${finalAttrs.version}/include/glib-2.0/gobject/gobjectnotifyqueue.c"' \ - -i "$dev"/include/glib-2.0/gobject/gobjectnotifyqueue.c - for i in $bin/bin/*; do - moveToOutput "share/bash-completion/completions/''${i##*/}" "$bin" - done - for i in $dev/bin/*; do - moveToOutput "share/bash-completion/completions/''${i##*/}" "$dev" - done - ''; - - preFixup = lib.optionalString (!stdenv.hostPlatform.isStatic) '' - buildPythonPath ${python3Packages.packaging} - patchPythonScript "$dev/share/glib-2.0/codegen/utils.py" - ''; - - # Move man pages to the same output as their binaries (needs to be - # done after preFixupHooks which moves man pages too - in - # _multioutDocs) - postFixup = '' - for i in $dev/bin/*; do - moveToOutput "share/man/man1/''${i##*/}.1.*" "$dev" - done - - # Cannot be in postInstall, otherwise _multioutDocs hook in preFixup will move right back. - moveToOutput "share/doc" "$devdoc" - ''; - - # Conditional necessary to break infinite recursion with passthru.tests - preCheck = lib.optionalString finalAttrs.finalPackage.doCheck or config.doCheckByDefault or false '' - export LD_LIBRARY_PATH="$NIX_BUILD_TOP/glib-${finalAttrs.version}/glib/.libs''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH" - export TZDIR="${tzdata}/share/zoneinfo" - export XDG_CACHE_HOME="$TMP" - export XDG_RUNTIME_HOME="$TMP" - export HOME="$TMP" - export XDG_DATA_DIRS="${desktop-file-utils}/share:${shared-mime-info}/share" - export G_TEST_DBUS_DAEMON="${dbus}/bin/dbus-daemon" - - # pkg_config_tests expects a PKG_CONFIG_PATH that points to meson-private, wrapped pkg-config - # tries to be clever and picks up the wrong glib at the end. - export PATH="${buildPackages.pkg-config-unwrapped}/bin:$PATH:$(pwd)/gobject" - echo "PATH=$PATH" - - # Our gobject-introspection patches make the shared library paths absolute - # in the GIR files. When running tests, the library is not yet installed, - # though, so we need to replace the absolute path with a local one during build. - # We are using a symlink that we will delete before installation. - mkdir -p $out/lib - ln -s $PWD/gobject/libgobject-${librarySuffix} $out/lib/libgobject-${librarySuffix} - ln -s $PWD/gio/libgio-${librarySuffix} $out/lib/libgio-${librarySuffix} - ln -s $PWD/glib/libglib-${librarySuffix} $out/lib/libglib-${librarySuffix} - ''; - - postCheck = '' - rm $out/lib/libgobject-${librarySuffix} - rm $out/lib/libgio-${librarySuffix} - rm $out/lib/libglib-${librarySuffix} - ''; - - separateDebugInfo = stdenv.hostPlatform.isLinux; - - passthru = rec { - gioModuleDir = "lib/gio/modules"; - - makeSchemaDataDirPath = dir: name: "${dir}/share/gsettings-schemas/${name}"; - makeSchemaPath = dir: name: "${makeSchemaDataDirPath dir name}/glib-2.0/schemas"; - getSchemaPath = pkg: makeSchemaPath pkg pkg.name; - getSchemaDataDirPath = pkg: makeSchemaDataDirPath pkg pkg.name; - - tests = { - withChecks = finalAttrs.finalPackage.overrideAttrs (_: { - doCheck = true; - }); - pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage; - }; + nativeBuildInputs = [ + docutils # for rst2man, rst2html5 + meson + ninja + pkg-config + perl + python3 + python3Packages.packaging # mostly used to make meson happy + python3Packages.wrapPython # for patchPythonScript + gettext + libxslt + ] + ++ lib.optionals withIntrospection [ + gi-docgen + gobject-introspection' + ] + ++ lib.optionals (withIntrospection && !stdenv.buildPlatform.canExecute stdenv.hostPlatform) [ + mesonEmulatorHook + ] + ++ lib.optionals withDtrace [ + systemtap' # for dtrace + ]; - updateScript = gnome.updateScript { - packageName = "glib"; - versionPolicy = "odd-unstable"; - }; - }; + propagatedBuildInputs = [ + zlib + libffi + gettext + libiconv + ]; - meta = { - description = "C library of programming buildings blocks"; - homepage = "https://gitlab.gnome.org/GNOME/glib"; - license = lib.licenses.lgpl21Plus; - maintainers = with lib.maintainers; [ - lovek323 - raskin + nativeCheckInputs = [ + tzdata + desktop-file-utils' + shared-mime-info' ]; - teams = [ lib.teams.gnome ]; - pkgConfigModules = [ - "gio-2.0" - "gobject-2.0" - "gthread-2.0" + + mesonFlags = [ + "-Dglib_debug=disabled" # https://gitlab.gnome.org/GNOME/glib/-/issues/3421#note_2206315 + "-Ddocumentation=true" # gvariant specification can be built without gi-docgen + (lib.mesonEnable "dtrace" withDtrace) + (lib.mesonEnable "systemtap" withDtrace) # requires dtrace option to be enabled + "-Dnls=enabled" + "-Ddevbindir=${placeholder "dev"}/bin" + (lib.mesonEnable "introspection" withIntrospection) + # FIXME: Fails when linking target glib/tests/libconstructor-helper.so + # relocation R_X86_64_32 against hidden symbol `__TMC_END__' can not be used when making a shared object + "-Dtests=${lib.boolToString (!stdenv.hostPlatform.isStatic)}" + ] + ++ lib.optionals (!lib.meta.availableOn stdenv.hostPlatform elfutils) [ + "-Dlibelf=disabled" + ] + ++ lib.optionals stdenv.hostPlatform.isFreeBSD [ + "-Dxattr=false" + "-Dsysprof=disabled" # sysprof-capture does not build on FreeBSD ]; - platforms = lib.platforms.unix ++ lib.platforms.windows; - longDescription = '' - GLib provides the core application building blocks for libraries - and applications written in C. It provides the core object - system used in GNOME, the main loop implementation, and a large - set of utility functions for strings and common data structures. + env = { + NIX_CFLAGS_COMPILE = toString [ + "-Wno-error=nonnull" + # Default for release buildtype but passed manually because + # we're using plain + "-DG_DISABLE_CAST_CHECKS" + ]; + }; + + postPatch = '' + patchShebangs glib/gen-unicode-tables.pl + patchShebangs glib/tests/gen-casefold-txt.py + patchShebangs glib/tests/gen-casemap-txt.py + patchShebangs tools/gen-visibility-macros.py + patchShebangs tests + + # Needs machine-id, comment the test + sed -e '/\/gdbus\/codegen-peer-to-peer/ s/^\/*/\/\//' -i gio/tests/gdbus-peer.c + sed -e '/g_test_add_func/ s/^\/*/\/\//' -i gio/tests/gdbus-address-get-session.c + # All gschemas fail to pass the test, upstream bug? + sed -e '/g_test_add_data_func/ s/^\/*/\/\//' -i gio/tests/gschema-compile.c + # Cannot reproduce the failing test_associations on hydra + sed -e '/\/appinfo\/associations/d' -i gio/tests/appinfo.c + # Needed because of libtool wrappers + sed -e '/g_subprocess_launcher_set_environ (launcher, envp);/a g_subprocess_launcher_setenv (launcher, "PATH", g_getenv("PATH"), TRUE);' -i gio/tests/gsubprocess.c + '' + + lib.optionalString stdenv.hostPlatform.isWindows '' + substituteInPlace gio/win32/meson.build \ + --replace "libintl, " "" ''; - }; -}) + + postConfigure = '' + patchShebangs gio/gdbus-2.0/codegen/gdbus-codegen gobject/glib-{genmarshal,mkenums} + ''; + + DETERMINISTIC_BUILD = 1; + + postInstall = '' + moveToOutput "share/glib-2.0" "$dev" + moveToOutput "share/glib-2.0/gdb" "$out" + substituteInPlace "$dev/bin/gdbus-codegen" --replace "$out" "$dev" + sed -i "$dev/bin/glib-gettextize" -e "s|^gettext_dir=.*|gettext_dir=$dev/share/glib-2.0/gettext|" + + # This file is *included* in gtk3 and would introduce runtime reference via __FILE__. + sed '1i#line 1 "glib-${finalAttrs.version}/include/glib-2.0/gobject/gobjectnotifyqueue.c"' \ + -i "$dev"/include/glib-2.0/gobject/gobjectnotifyqueue.c + for i in $bin/bin/*; do + moveToOutput "share/bash-completion/completions/''${i##*/}" "$bin" + done + for i in $dev/bin/*; do + moveToOutput "share/bash-completion/completions/''${i##*/}" "$dev" + done + ''; + + preFixup = lib.optionalString (!stdenv.hostPlatform.isStatic) '' + buildPythonPath ${python3Packages.packaging} + patchPythonScript "$dev/share/glib-2.0/codegen/utils.py" + ''; + + # Move man pages to the same output as their binaries (needs to be + # done after preFixupHooks which moves man pages too - in + # _multioutDocs) + postFixup = '' + for i in $dev/bin/*; do + moveToOutput "share/man/man1/''${i##*/}.1.*" "$dev" + done + + # Cannot be in postInstall, otherwise _multioutDocs hook in preFixup will move right back. + moveToOutput "share/doc" "$devdoc" + ''; + + # Conditional necessary to break infinite recursion with passthru.tests + preCheck = lib.optionalString finalAttrs.finalPackage.doCheck or config.doCheckByDefault or false '' + export LD_LIBRARY_PATH="$NIX_BUILD_TOP/glib-${finalAttrs.version}/glib/.libs''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH" + export TZDIR="${tzdata}/share/zoneinfo" + export XDG_CACHE_HOME="$TMP" + export XDG_RUNTIME_HOME="$TMP" + export HOME="$TMP" + export XDG_DATA_DIRS="${desktop-file-utils'}/share:${shared-mime-info'}/share" + export G_TEST_DBUS_DAEMON="${dbus'}/bin/dbus-daemon" + + # pkg_config_tests expects a PKG_CONFIG_PATH that points to meson-private, wrapped pkg-config + # tries to be clever and picks up the wrong glib at the end. + export PATH="${buildPackages.pkg-config-unwrapped}/bin:$PATH:$(pwd)/gobject" + echo "PATH=$PATH" + + # Our gobject-introspection patches make the shared library paths absolute + # in the GIR files. When running tests, the library is not yet installed, + # though, so we need to replace the absolute path with a local one during build. + # We are using a symlink that we will delete before installation. + mkdir -p $out/lib + ln -s $PWD/gobject/libgobject-${librarySuffix} $out/lib/libgobject-${librarySuffix} + ln -s $PWD/gio/libgio-${librarySuffix} $out/lib/libgio-${librarySuffix} + ln -s $PWD/glib/libglib-${librarySuffix} $out/lib/libglib-${librarySuffix} + ''; + + postCheck = '' + rm $out/lib/libgobject-${librarySuffix} + rm $out/lib/libgio-${librarySuffix} + rm $out/lib/libglib-${librarySuffix} + ''; + + separateDebugInfo = stdenv.hostPlatform.isLinux; + + passthru = rec { + gioModuleDir = "lib/gio/modules"; + + makeSchemaDataDirPath = dir: name: "${dir}/share/gsettings-schemas/${name}"; + makeSchemaPath = dir: name: "${makeSchemaDataDirPath dir name}/glib-2.0/schemas"; + getSchemaPath = pkg: makeSchemaPath pkg pkg.name; + getSchemaDataDirPath = pkg: makeSchemaDataDirPath pkg pkg.name; + + tests = { + withChecks = finalAttrs.finalPackage.overrideAttrs (_: { + doCheck = true; + }); + pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage; + }; + + updateScript = gnome.updateScript { + packageName = "glib"; + versionPolicy = "odd-unstable"; + }; + }; + + meta = { + description = "C library of programming buildings blocks"; + homepage = "https://gitlab.gnome.org/GNOME/glib"; + license = lib.licenses.lgpl21Plus; + maintainers = with lib.maintainers; [ + lovek323 + raskin + ]; + teams = [ lib.teams.gnome ]; + pkgConfigModules = [ + "gio-2.0" + "gobject-2.0" + "gthread-2.0" + ]; + platforms = lib.platforms.unix ++ lib.platforms.windows; + + longDescription = '' + GLib provides the core application building blocks for libraries + and applications written in C. It provides the core object + system used in GNOME, the main loop implementation, and a large + set of utility functions for strings and common data structures. + ''; + }; + } +) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b08d2095566c1..00222d95d798b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6807,19 +6807,6 @@ with pkgs; grantlee = libsForQt5.callPackage ../development/libraries/grantlee { }; - glib = callPackage ../by-name/gl/glib/package.nix ( - let - glib-untested = glib.overrideAttrs { doCheck = false; }; - in - { - # break dependency cycles - # these things are only used for tests, they don't get into the closure - shared-mime-info = shared-mime-info.override { glib = glib-untested; }; - desktop-file-utils = desktop-file-utils.override { glib = glib-untested; }; - dbus = dbus.override { enableSystemd = false; }; - } - ); - glirc = haskell.lib.compose.justStaticExecutables haskellPackages.glirc; # Not moved to aliases while we decide if we should split the package again.