From 10f86d4505d85a2ad6edf30b9204103526849069 Mon Sep 17 00:00:00 2001 From: Emily Date: Mon, 8 Sep 2025 17:56:48 +0100 Subject: [PATCH 1/5] =?UTF-8?q?FromCabal.PostProcess:=20don=E2=80=99t=20ad?= =?UTF-8?q?d=20LLVM=20tools=20to=20`GlomeVec`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We’re patching out the `-fllvm` in Nixpkgs instead. This was incorrect, anyway, as the LLVM build tools should not be added to `libraryPkgconfigDepends`. --- .../src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs | 1 - 1 file changed, 1 deletion(-) diff --git a/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs b/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs index e9587348..06551ae8 100644 --- a/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs +++ b/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal/PostProcess.hs @@ -112,7 +112,6 @@ hooks = , ("git-annex >= 6.20170925 && < 6.20171214", set doCheck False) -- some versions of git-annex require their test suite to be run inside of a git checkout , ("github-backup", set (executableDepends . tool . contains (pkg "git")) True) , ("GLFW", over (libraryDepends . system) (Set.union (Set.fromList [bind "pkgs.xorg.libXext", bind "pkgs.xorg.libXfixes"]))) - , ("GlomeVec", set (libraryDepends . pkgconfig . contains (bind "self.llvmPackages.llvm")) True) , ("graphviz", set (testDepends . system . contains (pkg "graphviz")) True) , ("gtk3", gtk3Hook) , ("gtkglext", gtkglextHook) From 01f822924e533ec30af58a95b4bf3637341b42e6 Mon Sep 17 00:00:00 2001 From: Emily Date: Mon, 8 Sep 2025 03:02:06 +0100 Subject: [PATCH 2/5] FromCabal: remove LLVM evil MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Usually, there is no reason to tie use of LLVM libraries to the LLVM version used by GHC’s LLVM backend as packages should not declare this as a library dependency. Also, `libclang` is the correct dependency for Clang used as a library, rather than the wrapped `clang` tool. (In practice, though, this doesn’t really help: the packages this changes in Nixpkgs are already broken because they depend on ancient LLVMs, want the `llvm-config(1)` tool that is in the `llvm` package, and in one of the two cases the `Setup.hs` doesn’t even build with modern Cabal.) To get a consistent result in hackage-packages.nix, we unfortunately have to add an extra alias for clang-3.8 (which has long been removed) until LibClang is removed from the package set. --- cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal.hs | 1 - cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal.hs b/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal.hs index 634e1ae5..5a3823c2 100644 --- a/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal.hs +++ b/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal.hs @@ -172,7 +172,6 @@ fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags Package resolveInNixpkgs :: Identifier -> Binding resolveInNixpkgs i - | i `elem` ["clang","lldb","llvm"] = binding # (i, path # ["self","llvmPackages",i]) -- TODO: evil! | i == "gtk2" = binding # (i, path # ["pkgs","gtk2"]) -- TODO: these cases should not be necessary | i == "gtk3" = binding # (i, path # ["pkgs","gtk3"]) | i == "gtksourceview3" = binding # (i, path # ["pkgs","gtksourceview3"]) diff --git a/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs b/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs index 6ea79b0b..2e82d098 100644 --- a/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs +++ b/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs @@ -37,6 +37,8 @@ libNixName "cairo-gobject" = return "cairo" libNixName "cairo-pdf" = return "cairo" libNixName "cairo-ps" = return "cairo" libNixName "cairo-svg" = return "cairo" +libNixName "clang" = return "libclang" +libNixName "clang-3.8" = return "libclang" -- TODO: guessNixIdentifier before libNixName… libNixName "crypt" = return "libxcrypt" -- starting with NixOS 22.11, glibc's libcrypt will no longer be built libNixName "crypto" = return "openssl" libNixName "curses" = return "ncurses" From b0e7dafd0907051537ff882d0dc6b0031a75cbbf Mon Sep 17 00:00:00 2001 From: Emily Date: Mon, 8 Sep 2025 03:02:06 +0100 Subject: [PATCH 3/5] doc: update for `haskellPackages.llvmPackages` removal --- doc/frequently-asked-questions.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/frequently-asked-questions.rst b/doc/frequently-asked-questions.rst index 67ef25c0..47b7b96b 100644 --- a/doc/frequently-asked-questions.rst +++ b/doc/frequently-asked-questions.rst @@ -484,11 +484,11 @@ However LLVM will still not be available in the environment: [nix-shell:~]$ llvm-ar llvm-ar: command not found -The solution is to add it as another package to the environment: +The solution is to add it the relevant LLVM packages to the environment: .. code:: shell - $ nix-shell -p '(haskellPackages.ghcWithPackages.override { useLLVM = true; }) (ps: with ps; [mtl])' 'haskellPackages.llvmPackages.llvm' + $ nix-shell -p '(haskellPackages.ghcWithPackages.override { useLLVM = true; }) (ps: with ps; [mtl])' 'haskellPackages.ghc.llvmPackages.llvm' 'haskellPackages.ghc.llvmPackages.clang' [nix-shell:~]$ llvm-ar --help OVERVIEW: LLVM Archiver From 1b1fb11e2ce3f726b47aac4346ed99a12cea97c4 Mon Sep 17 00:00:00 2001 From: sternenseemann Date: Tue, 9 Sep 2025 00:54:25 +0200 Subject: [PATCH 4/5] Haskell.FromCabal: reduce indirection for vte-2.91 Previously, vte-2.91 was mapped to a pseudo attribute vte_291 which was special cased in resolveInNixpkgs. This seems not much better than encoding this knowledge via libNixName directly, so let's simplify the logic. --- cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal.hs | 1 - cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal.hs b/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal.hs index 5a3823c2..70a98eed 100644 --- a/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal.hs +++ b/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal.hs @@ -175,7 +175,6 @@ fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags Package | i == "gtk2" = binding # (i, path # ["pkgs","gtk2"]) -- TODO: these cases should not be necessary | i == "gtk3" = binding # (i, path # ["pkgs","gtk3"]) | i == "gtksourceview3" = binding # (i, path # ["pkgs","gtksourceview3"]) - | i == "vte_291" = binding # (i, path # ["pkgs","vte"]) | Just p <- nixpkgsResolver i, init (view (reference . path) p) `Set.member` goodScopes = p | otherwise = bindNull i diff --git a/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs b/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs index 2e82d098..7473fca6 100644 --- a/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs +++ b/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal/Name.hs @@ -211,7 +211,7 @@ libNixName "tdjson" = return "tdlib" libNixName "tensorflow" = return "libtensorflow" libNixName "udev" = return "systemd"; libNixName "uuid" = return "libossp_uuid"; -libNixName "vte-2.91" = return "vte_291" +libNixName "vte-2.91" = return "vte" libNixName "vulkan" = return "vulkan-loader" libNixName "wayland-client" = return "wayland" libNixName "wayland-cursor" = return "wayland" From 23ceb3ced35ac01c09399cba35a2feb686971a4d Mon Sep 17 00:00:00 2001 From: sternenseemann Date: Tue, 9 Sep 2025 01:02:39 +0200 Subject: [PATCH 5/5] Haskell.FromCabal: remove obsolete special cases in resolveInNixpkgs These do not appear to have an effect on hackage-packages.nix at all (anymore?). --- cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal.hs | 3 --- 1 file changed, 3 deletions(-) diff --git a/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal.hs b/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal.hs index 70a98eed..0dc96d8b 100644 --- a/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal.hs +++ b/cabal2nix/src/Distribution/Nixpkgs/Haskell/FromCabal.hs @@ -172,9 +172,6 @@ fromPackageDescription haskellResolver nixpkgsResolver missingDeps flags Package resolveInNixpkgs :: Identifier -> Binding resolveInNixpkgs i - | i == "gtk2" = binding # (i, path # ["pkgs","gtk2"]) -- TODO: these cases should not be necessary - | i == "gtk3" = binding # (i, path # ["pkgs","gtk3"]) - | i == "gtksourceview3" = binding # (i, path # ["pkgs","gtksourceview3"]) | Just p <- nixpkgsResolver i, init (view (reference . path) p) `Set.member` goodScopes = p | otherwise = bindNull i