From 4df232e986319dd8ea13d89da135a4c8da5fa932 Mon Sep 17 00:00:00 2001 From: Summer Tea Date: Sun, 26 Jul 2026 00:11:49 -0400 Subject: [PATCH] freecad: add `versionCheckHook` (cherry picked from commit 8e41b2756684e628bc2192cb48e8003602b3b5de) --- pkgs/by-name/fr/freecad/package.nix | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/pkgs/by-name/fr/freecad/package.nix b/pkgs/by-name/fr/freecad/package.nix index a6c61d1c4bd2..db050e4daf3a 100644 --- a/pkgs/by-name/fr/freecad/package.nix +++ b/pkgs/by-name/fr/freecad/package.nix @@ -32,6 +32,8 @@ which, gtk3, gsettings-desktop-schemas, + versionCheckHook, + writeShellScript, }: let pythonDeps = with python3Packages; [ @@ -150,6 +152,28 @@ freecad-utils.makeCustomizable ( }; }; + nativeInstallCheckInputs = [ versionCheckHook ]; + doInstallCheck = true; + + versionCheckProgram = writeShellScript "version-check.sh" '' + # As of 2026-07-26, the way FreeCAD handles `--version` is awful. + # - The main program, `freecad`, opens a GUI prompt for `--version`, + # unless `--console` is also given. + # - Even with `--version --console`, `freecad` crashes if there is no + # display server, so we need to use `freecadcmd` instead, which is a + # separate binary, for unknown reasons. + # - `freecadcmd --version` crashes if it cannot create a directory under + # `$HOME/.local/share/FreeCAD/` + # Adding `--safe-mode` appears to fix this, but `versionCheckProgramArg` + # only allows for a single argument (as a list gets concaternated), + # so we need this script. + + # The path to `freecadcmd` gets passed in via $1, to allow the `out` + # placeholder to function properly + exec "$1" --version --safe-mode + ''; + versionCheckProgramArg = "${placeholder "out"}/bin/freecadcmd"; + # 6.9k object files, cuts down build time from 2-3 hours to 15 minutes requiredSystemFeatures = [ "big-parallel" ];