haskell.compiler.ghcjs: remove at 8.10.7 (#422342)

This commit is contained in:
sternenseemann
2025-09-06 15:08:39 +02:00
committed by GitHub
23 changed files with 62 additions and 1549 deletions
+10
View File
@@ -46,6 +46,16 @@
- `conduwuit` was removed due to upstream ceasing development and deleting their repository. For existing data, a migration to `matrix-conduit`, `matrix-continuwuity` or `matrix-tuwunel` may be possible.
- The GHCJS 8.10.7, exposed via `haskell.compiler.ghcjs` and `haskell.compiler.ghcjs810`, has been removed. Downstream users should migrate their projects to the new JavaScript backend of GHC proper which can be used via `pkgsCross.ghcjs` from Nixpkgs. Haskell packaging code, like `haskellPackages.mkDerivation`, `ghcWithPackages` and `hoogleWithPackages`, also no longer supports GHCJS.
- The `ghcInfo` and `controlPhases` functions have been removed from `haskell.lib.compose` and `haskell.lib`. They were unused and would return incorrect results.
- Instead of using `controlPhases`, the `doCheck` attribute of derivations can be accessed which is more accurate. `doBenchmark` can't be introspected at the moment.
- To detect cross compilation, the relevant platforms exposed by `stdenv` should be compared instead of using `ghcInfo`.
- Nixpkgs no longer packages any `ghcjs` compiler.
- To find a suitable `nativeGhc`, `buildHaskellPackages` should be used. `ghcInfo` would use `ghc.bootPkgs.ghc` if cross compiling,
and the given `ghc` otherwise. This approach is not recommended since it results in mismatched GHC versions.
- `gnome-keyring` no longer ships with an SSH agent anymore because it has been deprecated upstream. You should use `gcr_4` instead, which provides the same features. More information on why this was done can be found on [the relevant GCR upstream PR](https://gitlab.gnome.org/GNOME/gcr/-/merge_requests/67).
- `stdenv.mkDerivation` and other derivation builders that use it no longer allow the value of `env` to be anything but an attribute set, for the purpose of setting environment variables that are available to the [builder](https://nix.dev/manual/nix/latest/store/derivation/#builder) process. An environment variable called `env` can still be provided by means of `mkDerivation { env.env = ...; }`, though we recommend to use a more specific name than "env".
@@ -1,42 +0,0 @@
{
haskellLib,
fetchpatch,
buildPackages,
}:
let
inherit (haskellLib)
addBuildTools
appendConfigureFlag
dontHaddock
doJailbreak
markUnbroken
overrideCabal
;
in
self: super: {
ghcjs =
overrideCabal
(drv: {
# Jailbreak and patch can be dropped after https://github.com/ghcjs/ghcjs/pull/833
jailbreak = true;
patches = drv.patches or [ ] ++ [
(fetchpatch {
name = "ghcjs-aeson-2.0.patch";
url = "https://github.com/ghcjs/ghcjs/commit/9ef1f92d740e8503d15d91699f57db147f0474cc.patch";
sha256 = "0cgxcy6b5870bv4kj54n3bzcqinh4gl4w4r78dg43h2mblhkzbnj";
})
];
})
(
super.ghcjs.overrideScope (
self: super: {
# Allow transformers-compat >= 0.7
optparse-applicative = doJailbreak self.optparse-applicative_0_15_1_0;
ansi-wl-pprint = self.ansi-wl-pprint_0_6_9;
ansi-terminal = self.ansi-terminal_1_0_2;
ansi-terminal-types = self.ansi-terminal-types_0_11_5;
}
)
);
}
@@ -1,70 +0,0 @@
{
perl,
autoconf,
automake,
python3,
gcc,
cabal-install,
runCommand,
fetchpatch,
ghc,
happy,
alex,
ghcjsSrc,
version,
}:
runCommand "configured-ghcjs-src"
{
nativeBuildInputs = [
perl
autoconf
automake
python3
ghc
happy
alex
cabal-install
gcc
];
inherit ghcjsSrc;
ctimePatch = fetchpatch {
name = "ghcjs-base-ctime-64-bit.patch";
url = "https://github.com/ghcjs/ghcjs/commit/b7711fbca7c3f43a61f1dba526e6f2a2656ef44c.patch";
hash = "sha256-zZ3l8/5gbIGtvu0s2Xl92fEDhkhJ2c2w+5Ql5qkvr3s=";
};
}
''
export HOME=$(pwd)
mkdir $HOME/.cabal
touch $HOME/.cabal/config
cp -r "$ghcjsSrc" "$out"
chmod -R +w "$out"
cd "$out"
patch -p1 -i "$ctimePatch"
# TODO: Find a better way to avoid impure version numbers
sed -i 's/RELEASE=NO/RELEASE=YES/' ghc/configure.ac
# These files are needed by ghc-boot package, and these are generated by the
# make/hadrian build system when compiling ghc. Since we dont have access to
# the generated code of the ghc while it got built, here is a little hack to
# generate these again.
runhaskell ${./generate_host_version.hs}
mkdir -p utils/pkg-cache/ghc/libraries/ghc-boot/dist-install/build/GHC/Platform
mv Host.hs utils/pkg-cache/ghc/libraries/ghc-boot/dist-install/build/GHC/Platform/Host.hs
mv Version.hs utils/pkg-cache/ghc/libraries/ghc-boot/dist-install/build/GHC/Version.hs
# The ghcjs has the following hardcoded paths of lib dir in its code. Patching
# these to match the path expected by the nixpkgs's generic-builder, etc.
sed -i 's/libSubDir = "lib"/libSubDir = "lib\/ghcjs-${version}"/' src-bin/Boot.hs
sed -i 's@let libDir = takeDirectory haddockPath </> ".." </> "lib"@let libDir = takeDirectory haddockPath </> ".." </> "lib/ghcjs-${version}"@' src-bin/HaddockDriver.hs
patchShebangs .
./utils/makePackages.sh copy
''
@@ -1,144 +0,0 @@
{
stdenv,
pkgsHostHost,
callPackage,
fetchgit,
fetchpatch,
ghcjsSrcJson ? null,
ghcjsSrc ? fetchgit (lib.importJSON ghcjsSrcJson),
bootPkgs,
stage0,
haskellLib,
cabal-install,
nodejs,
makeWrapper,
xorg,
gmp,
pkg-config,
gcc,
lib,
ghcjsDepOverrides ? (_: _: { }),
linkFarm,
buildPackages,
}:
let
passthru = {
configuredSrc = callPackage ./configured-ghcjs-src.nix {
inherit ghcjsSrc;
inherit (bootPkgs) ghc alex;
inherit (bootGhcjs) version;
happy = bootPkgs.happy_1_19_12;
};
bootPkgs = bootPkgs.extend (
lib.foldr lib.composeExtensions (_: _: { }) [
(
self: _:
import stage0 {
inherit (passthru) configuredSrc;
inherit (self) callPackage;
}
)
(callPackage ./common-overrides.nix {
inherit haskellLib fetchpatch buildPackages;
})
ghcjsDepOverrides
]
);
targetPrefix = "";
inherit bootGhcjs;
inherit (bootGhcjs) version;
isGhcjs = true;
llvmPackages = null;
enableShared = true;
socket-io = pkgsHostHost.nodePackages."socket.io";
haskellCompilerName = "ghcjs-${bootGhcjs.version}";
};
bootGhcjs = haskellLib.justStaticExecutables passthru.bootPkgs.ghcjs;
# This provides the stuff we need from the emsdk
emsdk = linkFarm "emsdk" [
{
name = "upstream/bin";
path = buildPackages.clang + "/bin";
}
{
name = "upstream/emscripten";
path = buildPackages.emscripten + "/bin";
}
];
in
stdenv.mkDerivation {
name = bootGhcjs.name;
src = passthru.configuredSrc;
nativeBuildInputs = [
bootGhcjs
passthru.bootPkgs.ghc
cabal-install
nodejs
makeWrapper
xorg.lndir
gmp
pkg-config
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
gcc # https://github.com/ghcjs/ghcjs/issues/663
];
dontConfigure = true;
dontInstall = true;
# Newer versions of `config.sub` reject the `js-ghcjs` host string, but the
# older `config.sub` filed vendored within `ghc` still works
dontUpdateAutotoolsGnuConfigScripts = true;
buildPhase = ''
export HOME=$TMP
mkdir $HOME/.cabal
touch $HOME/.cabal/config
cd lib/boot
export EM_CACHE="$HOME/.emscriptencache"
mkdir -p "$EM_CACHE"
mkdir -p $out/bin
mkdir -p $out/lib/${bootGhcjs.name}
lndir ${bootGhcjs}/bin $out/bin
chmod -R +w $out/bin
rm $out/bin/ghcjs-boot
cp ${bootGhcjs}/bin/ghcjs-boot $out/bin
rm $out/bin/haddock
cp ${bootGhcjs}/bin/haddock $out/bin
cp ${bootGhcjs}/bin/private-ghcjs-hsc2hs $out/bin/ghcjs-hsc2hs
wrapProgram $out/bin/ghcjs-boot --set ghcjs_libexecdir $out/bin
wrapProgram $out/bin/ghcjs --add-flags "-B$out/lib/${bootGhcjs.name}"
wrapProgram $out/bin/haddock --add-flags "-B$out/lib/${bootGhcjs.name}"
wrapProgram $out/bin/ghcjs-pkg --add-flags "--global-package-db=$out/lib/${bootGhcjs.name}/package.conf.d"
wrapProgram $out/bin/ghcjs-hsc2hs --add-flags "-I$out/lib/${bootGhcjs.name}/include --template=$out/lib/${bootGhcjs.name}/include/template-hsc.h"
env PATH=$out/bin:$PATH $out/bin/ghcjs-boot --with-emsdk=${emsdk} --no-haddock
'';
enableParallelBuilding = true;
inherit passthru;
meta = {
platforms = with lib.platforms; linux ++ darwin;
# Hydra limits jobs to only outputting 1 gigabyte worth of files.
# GHCJS outputs over 3 gigabytes.
# https://github.com/NixOS/nixpkgs/pull/137066#issuecomment-922335563
hydraPlatforms = lib.platforms.none;
maintainers = with lib.maintainers; [ obsidian-systems-maintenance ];
};
}
@@ -1,54 +0,0 @@
-- Generate the Host.hs and Version.hs as done by hadrian/src/Rules/Generate.hs
import GHC.Platform.Host
import GHC.Version
main = do
writeFile "Version.hs" versionHs
writeFile "Host.hs" platformHostHs
-- | Generate @Version.hs@ files.
versionHs :: String
versionHs = unlines
[ "module GHC.Version where"
, ""
, "import Prelude -- See Note [Why do we import Prelude here?]"
, ""
, "cProjectGitCommitId :: String"
, "cProjectGitCommitId = " ++ show cProjectGitCommitId
, ""
, "cProjectVersion :: String"
, "cProjectVersion = " ++ show cProjectVersion
, ""
, "cProjectVersionInt :: String"
, "cProjectVersionInt = " ++ show cProjectVersionInt
, ""
, "cProjectPatchLevel :: String"
, "cProjectPatchLevel = " ++ show cProjectPatchLevel
, ""
, "cProjectPatchLevel1 :: String"
, "cProjectPatchLevel1 = " ++ show cProjectPatchLevel1
, ""
, "cProjectPatchLevel2 :: String"
, "cProjectPatchLevel2 = " ++ show cProjectPatchLevel2
]
-- | Generate @Platform/Host.hs@ files.
platformHostHs :: String
platformHostHs = unlines
[ "module GHC.Platform.Host where"
, ""
, "import GHC.Platform"
, ""
, "cHostPlatformArch :: Arch"
, "cHostPlatformArch = " ++ show cHostPlatformArch
, ""
, "cHostPlatformOS :: OS"
, "cHostPlatformOS = " ++ show cHostPlatformOS
, ""
, "cHostPlatformMini :: PlatformMini"
, "cHostPlatformMini = PlatformMini"
, " { platformMini_arch = cHostPlatformArch"
, " , platformMini_os = cHostPlatformOS"
, " }"
]
@@ -1,6 +0,0 @@
{
"url": "https://github.com/obsidiansystems/ghcjs",
"rev": "9fc935f2c3ba6c33ec62eb83afc9f52a893eb68c",
"sha256": "sha256:063dmir39c4i1z8ypnmq86g1x2vhqndmdpzc4hyzsy5jjqcbx6i3",
"fetchSubmodules": true
}
@@ -1,245 +0,0 @@
{ callPackage, configuredSrc }:
{
ghcjs = callPackage (
{
mkDerivation,
aeson,
alex,
array,
attoparsec,
base,
base16-bytestring,
base64-bytestring,
binary,
bytestring,
Cabal,
containers,
cryptohash,
data-default,
deepseq,
directory,
executable-path,
filepath,
ghc-boot,
ghc-boot-th,
ghc-compact,
ghc-heap,
ghc-paths,
ghci,
happy,
hashable,
hpc,
http-types,
HUnit,
lens,
lib,
lifted-base,
mtl,
network,
optparse-applicative,
parallel,
parsec,
process,
random,
safe,
shelly,
split,
stringsearch,
syb,
tar,
template-haskell,
terminfo,
test-framework,
test-framework-hunit,
text,
time,
transformers,
unix,
unix-compat,
unordered-containers,
vector,
wai,
wai-app-static,
wai-extra,
wai-websockets,
warp,
webdriver,
websockets,
wl-pprint-text,
xhtml,
yaml,
}:
mkDerivation {
pname = "ghcjs";
version = "8.10.7";
src = configuredSrc + /.;
isLibrary = true;
isExecutable = true;
libraryHaskellDepends = [
aeson
array
attoparsec
base
base16-bytestring
base64-bytestring
binary
bytestring
Cabal
containers
cryptohash
data-default
deepseq
directory
filepath
ghc-boot
ghc-boot-th
ghc-compact
ghc-heap
ghc-paths
ghci
hashable
hpc
lens
mtl
optparse-applicative
parallel
parsec
process
safe
split
stringsearch
syb
template-haskell
terminfo
text
time
transformers
unix
unordered-containers
vector
wl-pprint-text
yaml
];
libraryToolDepends = [
alex
happy
];
executableHaskellDepends = [
aeson
array
base
binary
bytestring
Cabal
containers
deepseq
directory
executable-path
filepath
ghc-boot
lens
mtl
optparse-applicative
parsec
process
tar
terminfo
text
time
transformers
unix
unix-compat
unordered-containers
vector
xhtml
yaml
];
testHaskellDepends = [
aeson
base
bytestring
data-default
deepseq
directory
filepath
http-types
HUnit
lens
lifted-base
network
optparse-applicative
process
random
shelly
test-framework
test-framework-hunit
text
time
transformers
unordered-containers
wai
wai-app-static
wai-extra
wai-websockets
warp
webdriver
websockets
yaml
];
description = "Haskell to JavaScript compiler";
license = lib.licenses.mit;
}
) { };
ghcjs-th = callPackage (
{
mkDerivation,
base,
binary,
bytestring,
containers,
ghc-prim,
ghci,
lib,
template-haskell,
}:
mkDerivation {
pname = "ghcjs-th";
version = "0.1.0.0";
src = configuredSrc + /lib/ghcjs-th;
libraryHaskellDepends = [
base
binary
bytestring
containers
ghc-prim
ghci
template-haskell
];
homepage = "https://github.com/ghcjs";
license = lib.licenses.mit;
}
) { };
ghcjs-prim = callPackage (
{
mkDerivation,
base,
ghc-prim,
lib,
}:
mkDerivation {
pname = "ghcjs-prim";
version = "0.1.1.0";
src = ./.;
libraryHaskellDepends = [
base
ghc-prim
];
homepage = "https://github.com/ghcjs";
license = lib.licenses.mit;
}
) { };
}
@@ -1,87 +0,0 @@
{
mkDerivation,
aeson,
array,
attoparsec,
base,
binary,
bytestring,
containers,
deepseq,
directory,
dlist,
fetchFromGitHub,
ghc-prim,
ghcjs-prim,
hashable,
HUnit,
integer-gmp,
primitive,
QuickCheck,
quickcheck-unicode,
random,
scientific,
test-framework,
test-framework-hunit,
test-framework-quickcheck2,
text,
time,
transformers,
unordered-containers,
vector,
lib,
}:
mkDerivation {
pname = "ghcjs-base";
version = "0.2.1.0";
# This is the release 0.2.1.0, but the hackage release misses test source files,
# so lets use github https://github.com/ghcjs/ghcjs-base/issues/132
src = fetchFromGitHub {
owner = "ghcjs";
repo = "ghcjs-base";
rev = "fbaae59b05b020e91783df122249095e168df53f";
sha256 = "sha256-x6eCAK1Hne0QkV3Loi9YpxbleNHU593E4AO8cbk2vUc=";
};
libraryHaskellDepends = [
aeson
attoparsec
base
binary
bytestring
containers
deepseq
dlist
ghc-prim
ghcjs-prim
hashable
integer-gmp
primitive
scientific
text
time
transformers
unordered-containers
vector
];
testHaskellDepends = [
array
base
bytestring
deepseq
directory
ghc-prim
ghcjs-prim
HUnit
primitive
QuickCheck
quickcheck-unicode
random
test-framework
test-framework-hunit
test-framework-quickcheck2
text
];
homepage = "https://github.com/ghcjs/ghcjs-base";
description = "base library for GHCJS";
license = lib.licenses.mit;
}
@@ -37,7 +37,6 @@ self: super:
# Similar to https://ghc.haskell.org/trac/ghc/ticket/13062
happy = dontCheck super.happy;
happy_1_19_12 = doDistribute (dontCheck super.happy_1_19_12);
# add arm specific library
wiringPi = overrideCabal (
@@ -1831,16 +1831,6 @@ with haskellLib;
# https://github.com/biocad/servant-openapi3/issues/30
servant-openapi3 = dontCheck super.servant-openapi3;
# Point hspec 2.7.10 to correct dependencies
hspec_2_7_10 = super.hspec_2_7_10.override {
hspec-discover = self.hspec-discover_2_7_10;
hspec-core = self.hspec-core_2_7_10;
};
hspec-discover_2_7_10 = super.hspec-discover_2_7_10.override {
hspec-meta = self.hspec-meta_2_7_8;
};
hspec-core_2_7_10 = doJailbreak (dontCheck super.hspec-core_2_7_10);
# Disable test cases that were broken by insignificant changes in icu 76
# https://github.com/haskell/text-icu/issues/108
text-icu = overrideCabal (drv: {
@@ -8,10 +8,7 @@ let
in
self: super: {
# ghcjs does not use `llvmPackages` and exposes `null` attribute.
llvmPackages =
if self.ghc.llvmPackages != null then pkgs.lib.dontRecurseIntoAttrs self.ghc.llvmPackages else null;
llvmPackages = pkgs.lib.dontRecurseIntoAttrs self.ghc.llvmPackages;
# Disable GHC 8.10.x core libraries.
array = null;
@@ -1,154 +0,0 @@
# GHCJS package fixes
#
# Please insert new packages *alphabetically*
# in the OTHER PACKAGES section.
{ pkgs, haskellLib }:
let
removeLibraryHaskellDepends =
pnames: depends: builtins.filter (e: !(builtins.elem (e.pname or "") pnames)) depends;
in
with haskellLib;
self: super:
## GENERAL SETUP BASE PACKAGES
{
inherit (self.ghc.bootPkgs)
jailbreak-cabal
alex
happy
gtk2hs-buildtools
rehoo
hoogle
;
# Test suite fails; https://github.com/ghcjs/ghcjs-base/issues/133
ghcjs-base = dontCheck (
self.callPackage ../compilers/ghcjs/ghcjs-base.nix {
fetchFromGitHub = pkgs.buildPackages.fetchFromGitHub;
aeson = self.aeson_1_5_6_0;
}
);
# Included in ghcjs itself
ghcjs-prim = null;
ghcjs-websockets = markUnbroken super.ghcjs-websockets;
# GHCJS does not ship with the same core packages as GHC.
# https://github.com/ghcjs/ghcjs/issues/676
stm = doJailbreak self.stm_2_5_3_1;
exceptions = dontCheck self.exceptions_0_10_10;
## OTHER PACKAGES
# Runtime exception in tests, missing C API h$realloc
base-compat-batteries = dontCheck super.base-compat-batteries;
# nodejs crashes during test
ChasingBottoms = dontCheck super.ChasingBottoms;
# runs forever
text-short = dontCheck super.text-short;
# doctest doesn't work on ghcjs, but sometimes dontCheck doesn't seem to get rid of the dependency
doctest = pkgs.lib.warn "ignoring dependency on doctest" null;
ghcjs-dom = overrideCabal (drv: {
libraryHaskellDepends = with self; [
ghcjs-base
ghcjs-dom-jsffi
text
transformers
];
configureFlags = [
"-fjsffi"
"-f-webkit"
];
}) super.ghcjs-dom;
ghcjs-dom-jsffi = overrideCabal (drv: {
libraryHaskellDepends = (drv.libraryHaskellDepends or [ ]) ++ [
self.ghcjs-base
self.text
];
broken = false;
}) super.ghcjs-dom-jsffi;
# https://github.com/Deewiant/glob/issues/39
Glob = dontCheck super.Glob;
# Test fails to compile during the hsc2hs stage
hashable = dontCheck super.hashable;
# uses doctest
http-types = dontCheck super.http-types;
jsaddle = overrideCabal (drv: {
libraryHaskellDepends = (drv.libraryHaskellDepends or [ ]) ++ [ self.ghcjs-base ];
}) super.jsaddle;
# Tests hang, possibly some issue with tasty and race(async) usage in the nonTerminating tests
logict = dontCheck super.logict;
patch = dontCheck super.patch;
# TODO: tests hang
pcre-light = dontCheck super.pcre-light;
# Terminal test not supported on ghcjs
QuickCheck = dontCheck super.QuickCheck;
reflex = overrideCabal (drv: {
libraryHaskellDepends = (drv.libraryHaskellDepends or [ ]) ++ [ self.ghcjs-base ];
}) super.reflex;
reflex-dom = overrideCabal (drv: {
libraryHaskellDepends = removeLibraryHaskellDepends [ "jsaddle-webkit2gtk" ] (
drv.libraryHaskellDepends or [ ]
);
}) super.reflex-dom;
# https://github.com/dreixel/syb/issues/21
syb = dontCheck super.syb;
# nodejs crashes during test
scientific = dontCheck super.scientific;
# Tests use TH which gives error
tasty-quickcheck = dontCheck super.tasty-quickcheck;
temporary = dontCheck super.temporary;
# TODO: The tests have a TH error, which has been fixed in ghc
# https://gitlab.haskell.org/ghc/ghc/-/issues/15481 but somehow the issue is
# still present here https://github.com/glguy/th-abstraction/issues/53
th-abstraction = dontCheck super.th-abstraction;
# Need hedgehog for tests, which fails to compile due to dep on concurrent-output
zenc = dontCheck super.zenc;
hspec = self.hspec_2_7_10;
hspec-core = self.hspec-core_2_7_10;
hspec-meta = self.hspec-meta_2_7_8;
hspec-discover = self.hspec-discover_2_7_10;
# ReferenceError: h$primop_ShrinkSmallMutableArrayOp_Char is not defined
unordered-containers = dontCheck super.unordered-containers;
# Without this revert, test suites using tasty fail with:
# ReferenceError: h$getMonotonicNSec is not defined
# https://github.com/UnkindPartition/tasty/pull/345#issuecomment-1538216407
tasty = appendPatch (pkgs.fetchpatch {
name = "tasty-ghcjs.patch";
url = "https://github.com/UnkindPartition/tasty/commit/e692065642fd09b82acccea610ad8f49edd207df.patch";
revert = true;
relative = "core";
hash = "sha256-ryABU2ywkVOEPC/jWv8humT3HaRpCwMYEk+Ux3hhi/M=";
}) super.tasty;
# Tests take unacceptably long.
vector = dontCheck super.vector;
}
@@ -45,12 +45,8 @@ default-package-overrides:
# keep-sorted start skip_lines=1 case=no numeric=yes
extra-packages:
- aeson < 2 # required by pantry-0.5.2
- algebraic-graphs < 0.7 # 2023-08-14: Needed for building weeder < 2.6.0
- ansi-terminal < 1.1 # 2025-02-27: required for ghcjs
- ansi-terminal-types == 0.11.5 # 2025-02-27: required for ghcjs
- ansi-wl-pprint >= 0.6 && < 0.7 # 2024-03-23: required for ghcjs
- apply-refact == 0.9.* # 2022-12-12: needed for GHC < 9.2
- ansi-wl-pprint >= 0.6 && < 0.7 # 2025-07-07: used by gren <= 0.5.4
- attoparsec == 0.13.* # 2022-02-23: Needed to compile elm for now
- Cabal == 3.2.* # Used for packages needing newer Cabal on ghc 8.6 and 8.8
- Cabal == 3.10.*
@@ -85,7 +81,6 @@ extra-packages:
- ghc-tags == 1.5.* # 2023-02-18: preserve for ghc-lib == 9.2.*
- ghc-tags == 1.7.* # 2023-02-18: preserve for ghc-lib == 9.6.*
- ghc-tags == 1.8.* # 2023-02-18: preserve for ghc-lib == 9.8.*
- happy == 1.19.12 # for ghcjs
- happy == 1.20.* # for ghc-lib-parser == 9.6.*
- hasql < 1.7 # 2025-01-19: Needed for building postgrest
- hasql-dynamic-statements < 0.3.1.6 # 2025-01-19: Needed for building postgrest
@@ -96,17 +91,12 @@ extra-packages:
- hlint == 3.4.1 # 2022-09-21: preserve for ghc 8.10
- hlint == 3.6.* # 2025-04-14: needed for hls with ghc-lib-parser 9.6
- hnix-store-core < 0.7 # 2023-12-11: required by hnix-store-remote 0.6
- hspec < 2.8 # 2022-04-07: Needed for tasty-hspec 1.1.6
- hspec-core < 2.8 # 2022-04-07: Needed for tasty-hspec 1.1.6
- hspec-discover < 2.8 # 2022-04-07: Needed for tasty-hspec 1.1.6
- hspec-megaparsec == 2.2.0 # 2023-11-18: Latest version compatible with ghc 9.0
- hspec-meta < 2.8 # 2022-12-07: Needed for elmPackages.elm / hspec-discover
- language-javascript == 0.7.0.0 # required by purescript
- lsp < 2.5 # 2024-07-08: need for koka
- lsp == 2.1.* # 2024-02-28: need for dhall-lsp-server
- lsp-types == 2.1.* # 2024-02-28: need for dhall-lsp-server and koka
- network-run == 0.4.0 # 2024-10-20: for GHC 9.10/network == 3.1.*
- optparse-applicative < 0.16 # needed for niv-0.2.19
- ormolu == 0.5.2.0 # 2023-08-08: preserve for ghc 9.0
- ormolu == 0.7.2.0 # 2023-11-13: for ghc-lib-parser 9.6 compat
- ormolu == 0.7.7.0 # 2025-01-27: for ghc 9.10 compat
@@ -635,15 +635,9 @@ builtins.intersectAttrs super {
tasty = overrideCabal (drv: {
libraryHaskellDepends =
(drv.libraryHaskellDepends or [ ])
++
lib.optionals
(
!(pkgs.stdenv.hostPlatform.isAarch64 || pkgs.stdenv.hostPlatform.isx86_64)
|| (self.ghc.isGhcjs or false)
)
[
self.unbounded-delays
];
++ lib.optionals (!(pkgs.stdenv.hostPlatform.isAarch64 || pkgs.stdenv.hostPlatform.isx86_64)) [
self.unbounded-delays
];
}) super.tasty;
tasty-discover = overrideCabal (drv: {
@@ -16,13 +16,6 @@
let
isCross = stdenv.buildPlatform != stdenv.hostPlatform;
# Note that ghc.isGhcjs != stdenv.hostPlatform.isGhcjs.
# ghc.isGhcjs implies that we are using ghcjs, a project separate from GHC.
# (mere) stdenv.hostPlatform.isGhcjs means that we are using GHC's JavaScript
# backend. The latter is a normal cross compilation backend and needs little
# special accommodation.
outputsJS = ghc.isGhcjs or false || stdenv.hostPlatform.isGhcjs;
# Pass the "wrong" C compiler rather than none at all so packages that just
# use the C preproccessor still work, see
# https://github.com/haskell/cabal/issues/6466 for details.
@@ -47,7 +40,7 @@ in
{
pname,
dontStrip ? outputsJS,
dontStrip ? stdenv.hostPlatform.isGhcjs,
version,
revision ? null,
sha256 ? null,
@@ -80,7 +73,7 @@ in
doHaddockQuickjump ? doHoogle,
doInstallIntermediates ? false,
editedCabalFile ? null,
enableLibraryProfiling ? !outputsJS,
enableLibraryProfiling ? !stdenv.hostPlatform.isGhcjs,
enableExecutableProfiling ? false,
profilingDetail ? "exported-functions",
# TODO enable shared libs for cross-compiling
@@ -90,7 +83,7 @@ in
&& (ghc.enableShared or false)
&& !stdenv.hostPlatform.useAndroidPrebuilt, # TODO: figure out why /build leaks into RPATH
enableDeadCodeElimination ? (!stdenv.hostPlatform.isDarwin), # TODO: use -dead_strip for darwin
# Disabling this for ghcjs prevents this crash: https://gitlab.haskell.org/ghc/ghc/-/issues/23235
# Disabling this for JS prevents this crash: https://gitlab.haskell.org/ghc/ghc/-/issues/23235
enableStaticLibraries ?
!(stdenv.hostPlatform.isWindows || stdenv.hostPlatform.isWasm || stdenv.hostPlatform.isGhcjs),
enableHsc2hsViaAsm ? stdenv.hostPlatform.isWindows,
@@ -228,13 +221,12 @@ let
optionalAttrs
;
isGhcjs = ghc.isGhcjs or false;
isHaLVM = ghc.isHaLVM or false;
# GHC used for building Setup.hs
#
# Same as our GHC, unless we're cross, in which case it is native GHC with the
# same version, or ghcjs, in which case its the ghc used to build ghcjs.
# same version.
nativeGhc = buildHaskellPackages.ghc;
# the target dir for haddock documentation
@@ -358,9 +350,6 @@ let
(enableFeature (!dontStrip) "library-stripping")
(enableFeature (!dontStrip) "executable-stripping")
]
++ optionals isGhcjs [
"--ghcjs"
]
++ optionals isCross (
[
"--configure-option=--host=${stdenv.hostPlatform.config}"
@@ -490,7 +479,7 @@ let
setupCommand = "./Setup";
ghcCommand' = if isGhcjs then "ghcjs" else "ghc";
ghcCommand' = "ghc";
ghcCommand = "${ghc.targetPrefix}${ghcCommand'}";
ghcNameWithPrefix = "${ghc.targetPrefix}${ghc.haskellCompilerName}";
@@ -519,9 +508,7 @@ let
intermediatesDir = "share/haskell/${ghc.version}/${pname}-${version}/dist";
# On old ghcjs, the jsexe directories are the output but on the js backend they seem to be treated as intermediates
jsexe = rec {
shouldUseNode = isGhcjs;
shouldAdd = stdenv.hostPlatform.isGhcjs && isExecutable;
shouldCopy = shouldAdd && !doInstallIntermediates;
shouldSymlink = shouldAdd && doInstallIntermediates;
@@ -849,15 +836,7 @@ lib.fix (
''
}
${optionalString jsexe.shouldUseNode ''
for exeDir in "${binDir}/"*.jsexe; do
exe="''${exeDir%.jsexe}"
printWords '#!${nodejs}/bin/node' > "$exe"
echo >> "$exe"
cat "$exeDir/all.js" >> "$exe"
chmod +x "$exe"
done
''}
${optionalString doCoverage "mkdir -p $out/share && cp -r dist/hpc $out/share"}
${optionalString jsexe.shouldCopy ''
-543
View File
@@ -53573,121 +53573,6 @@ self: {
}
) { };
"aeson_1_5_6_0" = callPackage (
{
mkDerivation,
attoparsec,
base,
base-compat,
base-compat-batteries,
base-orphans,
base16-bytestring,
bytestring,
containers,
data-fix,
deepseq,
Diff,
directory,
dlist,
filepath,
generic-deriving,
ghc-prim,
hashable,
hashable-time,
integer-logarithms,
primitive,
QuickCheck,
quickcheck-instances,
scientific,
strict,
tagged,
tasty,
tasty-golden,
tasty-hunit,
tasty-quickcheck,
template-haskell,
text,
th-abstraction,
these,
time,
time-compat,
unordered-containers,
uuid-types,
vector,
}:
mkDerivation {
pname = "aeson";
version = "1.5.6.0";
sha256 = "1s5z4bgb5150h6a4cjf5vh8dmyrn6ilh29gh05999v6jwd5w6q83";
revision = "7";
editedCabalFile = "1qbsyy605hlfh7wfj3q33yx0xmb4n81z6h0y99x7khyxmy0plqbf";
libraryHaskellDepends = [
attoparsec
base
base-compat-batteries
bytestring
containers
data-fix
deepseq
dlist
ghc-prim
hashable
primitive
scientific
strict
tagged
template-haskell
text
th-abstraction
these
time
time-compat
unordered-containers
uuid-types
vector
];
testHaskellDepends = [
attoparsec
base
base-compat
base-orphans
base16-bytestring
bytestring
containers
data-fix
Diff
directory
dlist
filepath
generic-deriving
ghc-prim
hashable
hashable-time
integer-logarithms
QuickCheck
quickcheck-instances
scientific
strict
tagged
tasty
tasty-golden
tasty-hunit
tasty-quickcheck
template-haskell
text
these
time
time-compat
unordered-containers
uuid-types
vector
];
description = "Fast JSON parsing and encoding";
license = lib.licenses.bsd3;
hydraPlatforms = lib.platforms.none;
}
) { };
"aeson" = callPackage (
{
mkDerivation,
@@ -76649,30 +76534,6 @@ self: {
}
) { };
"ansi-terminal_1_0_2" = callPackage (
{
mkDerivation,
ansi-terminal-types,
base,
colour,
}:
mkDerivation {
pname = "ansi-terminal";
version = "1.0.2";
sha256 = "0d6qm3ph6drim7g81yx46nmgspxsf4nnr2d91fa0fy3cyv5idra6";
isLibrary = true;
isExecutable = true;
libraryHaskellDepends = [
ansi-terminal-types
base
colour
];
description = "Simple ANSI terminal support";
license = lib.licenses.bsd3;
hydraPlatforms = lib.platforms.none;
}
) { };
"ansi-terminal" = callPackage (
{
mkDerivation,
@@ -76778,28 +76639,6 @@ self: {
}
) { };
"ansi-terminal-types_0_11_5" = callPackage (
{
mkDerivation,
base,
colour,
}:
mkDerivation {
pname = "ansi-terminal-types";
version = "0.11.5";
sha256 = "1lgxnhnzgk4mwlnh8zdgx8w8pa4q4n140mvd1880acgli41j6yxz";
revision = "1";
editedCabalFile = "02mhl78kmjfa0h22khcjdaaxyvanv717rb2mi3l0jiawv7gl117p";
libraryHaskellDepends = [
base
colour
];
description = "Types and functions used to represent SGR aspects";
license = lib.licenses.bsd3;
hydraPlatforms = lib.platforms.none;
}
) { };
"ansi-terminal-types" = callPackage (
{
mkDerivation,
@@ -80800,101 +80639,6 @@ self: {
}
) { };
"apply-refact_0_9_3_0" = callPackage (
{
mkDerivation,
base,
containers,
directory,
extra,
filemanip,
filepath,
ghc,
ghc-boot-th,
ghc-exactprint,
optparse-applicative,
process,
refact,
silently,
syb,
tasty,
tasty-expected-failure,
tasty-golden,
transformers,
uniplate,
unix-compat,
}:
mkDerivation {
pname = "apply-refact";
version = "0.9.3.0";
sha256 = "1sn5g71sx8xa4ggyk49m661iip6zrzl65vb87l16l31kf79bbm7w";
revision = "1";
editedCabalFile = "0hgdjm6ydfc29d922h1cpwrch61r5qchzrw21dz80kdry53qxl5q";
isLibrary = true;
isExecutable = true;
libraryHaskellDepends = [
base
containers
directory
extra
filemanip
ghc
ghc-boot-th
ghc-exactprint
process
refact
syb
transformers
uniplate
unix-compat
];
executableHaskellDepends = [
base
containers
directory
extra
filemanip
filepath
ghc
ghc-boot-th
ghc-exactprint
optparse-applicative
process
refact
syb
transformers
uniplate
unix-compat
];
testHaskellDepends = [
base
containers
directory
extra
filemanip
filepath
ghc
ghc-boot-th
ghc-exactprint
optparse-applicative
process
refact
silently
syb
tasty
tasty-expected-failure
tasty-golden
transformers
uniplate
unix-compat
];
description = "Perform refactorings specified by the refact library";
license = lib.licenses.bsd3;
hydraPlatforms = lib.platforms.none;
mainProgram = "refactor";
}
) { };
"apply-refact" = callPackage (
{
mkDerivation,
@@ -297969,41 +297713,6 @@ self: {
}
) { };
"happy_1_19_12" = callPackage (
{
mkDerivation,
array,
base,
containers,
mtl,
process,
}:
mkDerivation {
pname = "happy";
version = "1.19.12";
sha256 = "03xlmq6qmdx4zvzw8bp33kd9g7yvcq5cz4wg50xilw812kj276pv";
revision = "1";
editedCabalFile = "13wydw1mmdry4l9r63vxjk4h55ci9hgwzn1a842qqk1m2rb4xiln";
isLibrary = false;
isExecutable = true;
enableSeparateDataOutput = true;
executableHaskellDepends = [
array
base
containers
mtl
];
testHaskellDepends = [
base
process
];
description = "Happy is a parser generator for Haskell";
license = lib.licenses.bsd2;
hydraPlatforms = lib.platforms.none;
mainProgram = "happy";
}
) { };
"happy_1_20_1_1" = callPackage (
{
mkDerivation,
@@ -355226,32 +354935,6 @@ self: {
}
) { };
"hspec_2_7_10" = callPackage (
{
mkDerivation,
base,
hspec-core,
hspec-discover,
hspec-expectations,
QuickCheck,
}:
mkDerivation {
pname = "hspec";
version = "2.7.10";
sha256 = "0z0lwrmrqkglr78n6k2c36n4h68142bh785ys0x4jaibjshvs6rw";
libraryHaskellDepends = [
base
hspec-core
hspec-discover
hspec-expectations
QuickCheck
];
description = "A Testing Framework for Haskell";
license = lib.licenses.mit;
hydraPlatforms = lib.platforms.none;
}
) { };
"hspec" = callPackage (
{
mkDerivation,
@@ -355448,90 +355131,6 @@ self: {
}
) { };
"hspec-core_2_7_10" = callPackage (
{
mkDerivation,
ansi-terminal,
array,
base,
call-stack,
clock,
deepseq,
directory,
filepath,
hspec-expectations,
hspec-meta,
HUnit,
process,
QuickCheck,
quickcheck-io,
random,
setenv,
silently,
stm,
temporary,
tf-random,
transformers,
}:
mkDerivation {
pname = "hspec-core";
version = "2.7.10";
sha256 = "12k9yp5gznrda449ir60d5wv3xl7nnyffkb5mhfc0svw9f8lxlv1";
revision = "2";
editedCabalFile = "0l16mgxgapnihrvbwvhbz9i60v5fx68mhpv6zww9b68bdj6cpbsk";
libraryHaskellDepends = [
ansi-terminal
array
base
call-stack
clock
deepseq
directory
filepath
hspec-expectations
HUnit
QuickCheck
quickcheck-io
random
setenv
stm
tf-random
transformers
];
testHaskellDepends = [
ansi-terminal
array
base
call-stack
clock
deepseq
directory
filepath
hspec-expectations
hspec-meta
HUnit
process
QuickCheck
quickcheck-io
random
setenv
silently
stm
temporary
tf-random
transformers
];
testToolDepends = [ hspec-meta ];
testFlags = [
"--skip"
"'Test.Hspec.Core.Runner.hspecResult runs specs in parallel'"
];
description = "A Testing Framework for Haskell";
license = lib.licenses.mit;
hydraPlatforms = lib.platforms.none;
}
) { };
"hspec-core" = callPackage (
{
mkDerivation,
@@ -355662,47 +355261,6 @@ self: {
}
) { };
"hspec-discover_2_7_10" = callPackage (
{
mkDerivation,
base,
directory,
filepath,
hspec-meta,
QuickCheck,
}:
mkDerivation {
pname = "hspec-discover";
version = "2.7.10";
sha256 = "13yzvd3b679skvs1insk4s0wc4zvmz6hs38kc8q0j6vzqq06smqa";
isLibrary = true;
isExecutable = true;
libraryHaskellDepends = [
base
directory
filepath
];
executableHaskellDepends = [
base
directory
filepath
];
testHaskellDepends = [
base
directory
filepath
hspec-meta
QuickCheck
];
testToolDepends = [ hspec-meta ];
description = "Automatically discover and run Hspec tests";
license = lib.licenses.mit;
hydraPlatforms = lib.platforms.none;
mainProgram = "hspec-discover";
maintainers = [ lib.maintainers.maralorn ];
}
) { };
"hspec-discover" = callPackage (
{
mkDerivation,
@@ -356400,72 +355958,6 @@ self: {
}
) { };
"hspec-meta_2_7_8" = callPackage (
{
mkDerivation,
ansi-terminal,
array,
base,
call-stack,
clock,
deepseq,
directory,
filepath,
QuickCheck,
quickcheck-io,
random,
setenv,
stm,
time,
transformers,
}:
mkDerivation {
pname = "hspec-meta";
version = "2.7.8";
sha256 = "0sfj0n2hy1r8ifysgbcmfdygcd7vyzr13ldkcp0l2ml337f8j0si";
isLibrary = true;
isExecutable = true;
libraryHaskellDepends = [
ansi-terminal
array
base
call-stack
clock
deepseq
directory
filepath
QuickCheck
quickcheck-io
random
setenv
stm
time
transformers
];
executableHaskellDepends = [
ansi-terminal
array
base
call-stack
clock
deepseq
directory
filepath
QuickCheck
quickcheck-io
random
setenv
stm
time
transformers
];
description = "A version of Hspec which is used to test Hspec itself";
license = lib.licenses.mit;
hydraPlatforms = lib.platforms.none;
mainProgram = "hspec-meta-discover";
}
) { };
"hspec-meta" = callPackage (
{
mkDerivation,
@@ -495263,41 +494755,6 @@ self: {
}
) { };
"optparse-applicative_0_15_1_0" = callPackage (
{
mkDerivation,
ansi-wl-pprint,
base,
bytestring,
process,
QuickCheck,
transformers,
transformers-compat,
}:
mkDerivation {
pname = "optparse-applicative";
version = "0.15.1.0";
sha256 = "1ws6y3b3f6hsgv0ff0yp6lw4hba1rps4dnvry3yllng0s5gngcsd";
revision = "1";
editedCabalFile = "0zmhqkd96v2z1ilhqdkd9z4jgsnsxb8yi2479ind8m5zm9363zr9";
libraryHaskellDepends = [
ansi-wl-pprint
base
process
transformers
transformers-compat
];
testHaskellDepends = [
base
bytestring
QuickCheck
];
description = "Utilities and combinators for parsing command line options";
license = lib.licenses.bsd3;
hydraPlatforms = lib.platforms.none;
}
) { };
"optparse-applicative" = callPackage (
{
mkDerivation,
+3 -13
View File
@@ -23,18 +23,9 @@ let
packages = selectPackages haskellPackages;
wrapper = ./hoogle-local-wrapper.sh;
isGhcjs = ghc.isGhcjs or false;
opts = lib.optionalString;
haddockExe = if !isGhcjs then "haddock" else "haddock-ghcjs";
ghcDocLibDir = if !isGhcjs then ghc.doc + "/share/doc/ghc*/html/libraries" else ghc + "/doc/lib";
# On GHCJS, use a stripped down version of GHC's prologue.txt
prologue =
if !isGhcjs then
"${ghcDocLibDir}/prologue.txt"
else
writeText "ghcjs-prologue.txt" ''
This index includes documentation for many Haskell modules.
'';
haddockExe = "haddock";
ghcDocLibDir = ghc.doc + "/share/doc/ghc*/html/libraries";
prologue = "${ghcDocLibDir}/prologue.txt";
docPackages =
lib.closePropagation
@@ -84,7 +75,6 @@ buildPackages.stdenv.mkDerivation (finalAttrs: {
echo importing builtin packages
for docdir in ${ghcDocLibDir}"/"*; do
name="$(basename $docdir)"
${opts isGhcjs ''docdir="$docdir/html"''}
if [[ -d $docdir ]]; then
ln -sfn $docdir $out/share/doc/hoogle/$name
fi
@@ -572,36 +572,6 @@ rec {
# nix-shell evaluation, return a nix-shell optimized environment.
shellAware = p: if lib.inNixShell then p.env else p;
ghcInfo = ghc: rec {
isCross = (ghc.cross or null) != null;
isGhcjs = ghc.isGhcjs or false;
nativeGhc = if isCross || isGhcjs then ghc.bootPkgs.ghc else ghc;
};
### mkDerivation helpers
# These allow external users of a haskell package to extract
# information about how it is built in the same way that the
# generic haskell builder does, by reusing the same functions.
# Each function here has the same interface as mkDerivation and thus
# can be called for a given package simply by overriding the
# mkDerivation argument it used. See getHaskellBuildInputs above for
# an example of this.
# Some information about which phases should be run.
controlPhases =
ghc:
let
inherit (ghcInfo ghc) isCross;
in
{
doCheck ? !isCross,
doBenchmark ? false,
...
}:
{
inherit doCheck doBenchmark;
};
# Utility to convert a directory full of `cabal2nix`-generated files into a
# package override set
#
@@ -333,20 +333,6 @@ rec {
# nix-shell evaluation, return a nix-shell optimized environment.
shellAware = compose.shellAware;
ghcInfo = compose.ghcInfo;
### mkDerivation helpers
# These allow external users of a haskell package to extract
# information about how it is built in the same way that the
# generic haskell builder does, by reusing the same functions.
# Each function here has the same interface as mkDerivation and thus
# can be called for a given package simply by overriding the
# mkDerivation argument it used. See getHaskellBuildInputs above for
# an example of this.
# Some information about which phases should be run.
controlPhases = compose.controlPhases;
# Utility to convert a directory full of `cabal2nix`-generated files into a
# package override set
#
@@ -13,7 +13,6 @@
installDocumentation ? true,
hoogleWithPackages,
postBuild ? "",
ghcLibdir ? null, # only used by ghcjs, when resolving plugins
}:
# This argument is a function which selects a list of Haskell packages from any
@@ -51,9 +50,8 @@ let
packages = selectPackages haskellPackages ++ [ hoogleWithPackages' ];
isGhcjs = ghc.isGhcjs or false;
isHaLVM = ghc.isHaLVM or false;
ghcCommand' = if isGhcjs then "ghcjs" else "ghc";
ghcCommand' = "ghc";
ghcCommand = "${ghc.targetPrefix}${ghcCommand'}";
ghcCommandCaps = lib.toUpper ghcCommand';
libDir =
@@ -77,8 +75,6 @@ let
);
in
assert ghcLibdir != null -> (ghc.isGhcjs or false);
if paths == [ ] && !useLLVM then
ghc
else
@@ -101,9 +97,6 @@ else
--set "NIX_${ghcCommandCaps}PKG" "$out/bin/${ghcCommand}-pkg" \
--set "NIX_${ghcCommandCaps}_DOCDIR" "${docDir}" \
--set "NIX_${ghcCommandCaps}_LIBDIR" "${libDir}" \
${
lib.optionalString (ghc.isGhcjs or false) ''--set NODE_PATH "${ghc.socket-io}/lib/node_modules"''
} \
${lib.optionalString useLLVM ''--prefix "PATH" ":" "${llvm}"''}
fi
done
@@ -136,39 +129,37 @@ else
fi
''
+ (lib.optionalString (stdenv.targetPlatform.isDarwin && !isGhcjs && !stdenv.targetPlatform.isiOS)
''
# Work around a linker limit in macOS Sierra (see generic-builder.nix):
local packageConfDir="${packageCfgDir}";
local dynamicLinksDir="$out/lib/links";
mkdir -p $dynamicLinksDir
# Clean up the old links that may have been (transitively) included by
# symlinkJoin:
rm -f $dynamicLinksDir/*
+ (lib.optionalString (stdenv.targetPlatform.isDarwin && !stdenv.targetPlatform.isiOS) ''
# Work around a linker limit in macOS Sierra (see generic-builder.nix):
local packageConfDir="${packageCfgDir}";
local dynamicLinksDir="$out/lib/links";
mkdir -p $dynamicLinksDir
# Clean up the old links that may have been (transitively) included by
# symlinkJoin:
rm -f $dynamicLinksDir/*
dynamicLibraryDirs=()
dynamicLibraryDirs=()
for pkg in $($out/bin/ghc-pkg list --simple-output); do
dynamicLibraryDirs+=($($out/bin/ghc-pkg --simple-output field "$pkg" dynamic-library-dirs))
done
for pkg in $($out/bin/ghc-pkg list --simple-output); do
dynamicLibraryDirs+=($($out/bin/ghc-pkg --simple-output field "$pkg" dynamic-library-dirs))
done
for dynamicLibraryDir in $(echo "''${dynamicLibraryDirs[@]}" | tr ' ' '\n' | sort -u); do
echo "Linking $dynamicLibraryDir/*.dylib from $dynamicLinksDir"
find "$dynamicLibraryDir" -name '*.dylib' -exec ln -s {} "$dynamicLinksDir" \;
done
for dynamicLibraryDir in $(echo "''${dynamicLibraryDirs[@]}" | tr ' ' '\n' | sort -u); do
echo "Linking $dynamicLibraryDir/*.dylib from $dynamicLinksDir"
find "$dynamicLibraryDir" -name '*.dylib' -exec ln -s {} "$dynamicLinksDir" \;
done
for f in $packageConfDir/*.conf; do
# Initially, $f is a symlink to a read-only file in one of the inputs
# (as a result of this symlinkJoin derivation).
# Replace it with a copy whose dynamic-library-dirs points to
# $dynamicLinksDir
cp $f $f-tmp
rm $f
sed "N;s,dynamic-library-dirs:\s*.*\n,dynamic-library-dirs: $dynamicLinksDir\n," $f-tmp > $f
rm $f-tmp
done
''
)
for f in $packageConfDir/*.conf; do
# Initially, $f is a symlink to a read-only file in one of the inputs
# (as a result of this symlinkJoin derivation).
# Replace it with a copy whose dynamic-library-dirs points to
# $dynamicLinksDir
cp $f $f-tmp
rm $f
sed "N;s,dynamic-library-dirs:\s*.*\n,dynamic-library-dirs: $dynamicLinksDir\n," $f-tmp > $f
rm $f-tmp
done
'')
+ ''
${lib.optionalString hasLibraries ''
# GHC 8.10 changes.
@@ -182,14 +173,6 @@ else
$out/bin/${ghcCommand}-pkg recache
''}
${
# ghcjs will read the ghc_libdir file when resolving plugins.
lib.optionalString (isGhcjs && ghcLibdir != null) ''
mkdir -p "${libDir}"
rm -f "${libDir}/ghc_libdir"
printf '%s' '${ghcLibdir}' > "${libDir}/ghc_libdir"
''
}
$out/bin/${ghcCommand}-pkg check
''
+ postBuild;
+9 -18
View File
@@ -5,6 +5,7 @@
pkgs,
newScope,
stdenv,
config,
}:
let
@@ -25,9 +26,6 @@ let
"ghc924Binary"
"ghc963Binary"
"ghc984Binary"
# ghcjs
"ghcjs"
"ghcjs810"
];
haskellLibUncomposable = import ../development/haskell-modules/lib {
@@ -333,13 +331,6 @@ in
llvmPackages = pkgs.llvmPackages_18;
};
ghcjs = compiler.ghcjs810;
ghcjs810 = callPackage ../development/compilers/ghcjs/8.10 {
bootPkgs = bb.packages.ghc810;
ghcjsSrcJson = ../development/compilers/ghcjs/8.10/git.json;
stage0 = ../development/compilers/ghcjs/8.10/stage0.nix;
};
# The integer-simple attribute set contains all the GHC compilers
# build with integer-simple instead of integer-gmp.
integer-simple =
@@ -368,6 +359,10 @@ in
)
);
}
// pkgs.lib.optionalAttrs config.allowAliases {
ghcjs = throw "'haskell.compiler.ghcjs' has been removed. Please use 'pkgsCross.ghcjs' instead."; # Added 2025-09-06
ghcjs810 = throw "'haskell.compiler.ghcjs810' has been removed. Please use 'pkgsCross.ghcjs' instead."; # Added 2025-09-06
}
);
# Default overrides that are applied to all package sets.
@@ -485,14 +480,6 @@ in
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-9.14.x.nix { };
};
ghcjs = packages.ghcjs810;
ghcjs810 = callPackage ../development/haskell-modules rec {
buildHaskellPackages = ghc.bootPkgs;
ghc = bh.compiler.ghcjs810;
compilerConfig = callPackage ../development/haskell-modules/configuration-ghc-8.10.x.nix { };
packageSetConfig = callPackage ../development/haskell-modules/configuration-ghcjs-8.x.nix { };
};
# The integer-simple attribute set contains package sets for all the GHC compilers
# using integer-simple instead of integer-gmp.
integer-simple =
@@ -525,5 +512,9 @@ in
buildHaskellPackages = bh.packages.native-bignum.${name};
}
);
}
// pkgs.lib.optionalAttrs config.allowAliases {
ghcjs = throw "'haskell.packages.ghcjs' has been removed. Please use 'pkgsCross.ghcjs' instead."; # Added 2025-09-06
ghcjs810 = throw "'haskell.packages.ghcjs810' has been removed. Please use 'pkgsCross.ghcjs' instead."; # Added 2025-09-06
};
}
-1
View File
@@ -212,7 +212,6 @@ in
# Javascript
ghcjs = mapTestOnCross systems.examples.ghcjs {
haskell.packages.ghcjs.hello = nativePlatforms;
haskell.packages.native-bignum.ghcHEAD.hello = nativePlatforms;
haskellPackages.hello = nativePlatforms;
};
+1 -21
View File
@@ -231,24 +231,7 @@ let
jobs = recursiveUpdateMany [
(mapTestOn {
haskellPackages = packagePlatforms pkgs.haskellPackages;
haskell.compiler =
packagePlatforms pkgs.haskell.compiler
// (lib.genAttrs
[
"ghcjs"
"ghcjs810"
]
(ghcjsName: {
# We can't build ghcjs itself, since it exceeds 3GB (Hydra's output limit) due
# to the size of its bundled libs. We can however save users a bit of compile
# time by building the bootstrap ghcjs on Hydra. For this reason, we overwrite
# the ghcjs attributes in haskell.compiler with a reference to the bootstrap
# ghcjs attribute in their bootstrap package set (exposed via passthru) which
# would otherwise be ignored by Hydra.
bootGhcjs = (packagePlatforms pkgs.haskell.compiler.${ghcjsName}.passthru).bootGhcjs;
})
);
haskell.compiler = packagePlatforms pkgs.haskell.compiler;
tests.haskell = packagePlatforms pkgs.tests.haskell;
nixosTests = {
@@ -406,9 +389,6 @@ let
# remove musl ghc865Binary since it is known to be broken and
# causes an evaluation error on darwin.
ghc865Binary = { };
ghcjs = { };
ghcjs810 = { };
};
# Get some cache going for MUSL-enabled GHC.