The src points to the obsidiansystems repo as it has the ghcjs ported from 8.10.5 to 8.10.7, and a bunch of other fixes (#812, #811, #809)main
parent
feac31b1f0
commit
ba25b274f4
@ -0,0 +1,8 @@ |
||||
{ haskellLib }: |
||||
|
||||
let inherit (haskellLib) addBuildTools appendConfigureFlag dontHaddock doJailbreak; |
||||
in self: super: { |
||||
ghcjs = doJailbreak (super.ghcjs.overrideScope (self: super: { |
||||
optparse-applicative = self.optparse-applicative_0_15_1_0; |
||||
})); |
||||
} |
@ -0,0 +1,60 @@ |
||||
{ perl |
||||
, autoconf |
||||
, automake |
||||
, python3 |
||||
, gcc |
||||
, cabal-install |
||||
, runCommand |
||||
, lib |
||||
, stdenv |
||||
|
||||
, ghc |
||||
, happy |
||||
, alex |
||||
|
||||
, ghcjsSrc |
||||
, version |
||||
}: |
||||
|
||||
runCommand "configured-ghcjs-src" { |
||||
nativeBuildInputs = [ |
||||
perl |
||||
autoconf |
||||
automake |
||||
python3 |
||||
ghc |
||||
happy |
||||
alex |
||||
cabal-install |
||||
] ++ lib.optionals stdenv.isDarwin [ |
||||
gcc # https://github.com/ghcjs/ghcjs/issues/663 |
||||
]; |
||||
inherit ghcjsSrc; |
||||
} '' |
||||
export HOME=$(pwd) |
||||
mkdir $HOME/.cabal |
||||
touch $HOME/.cabal/config |
||||
cp -r "$ghcjsSrc" "$out" |
||||
chmod -R +w "$out" |
||||
cd "$out" |
||||
|
||||
# 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 |
||||
'' |
@ -0,0 +1,114 @@ |
||||
{ stdenv |
||||
, pkgsHostHost |
||||
, callPackage |
||||
, fetchgit |
||||
, ghcjsSrcJson ? null |
||||
, ghcjsSrc ? fetchgit (builtins.fromJSON (builtins.readFile ghcjsSrcJson)) |
||||
, bootPkgs |
||||
, stage0 |
||||
, haskellLib |
||||
, cabal-install |
||||
, nodejs |
||||
, makeWrapper |
||||
, xorg |
||||
, gmp |
||||
, pkg-config |
||||
, gcc |
||||
, lib |
||||
, ghcjsDepOverrides ? (_:_:{}) |
||||
, haskell |
||||
, 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; |
||||
}) |
||||
ghcjsDepOverrides |
||||
]); |
||||
|
||||
targetPrefix = ""; |
||||
inherit bootGhcjs; |
||||
inherit (bootGhcjs) version; |
||||
isGhcjs = true; |
||||
|
||||
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.isDarwin [ |
||||
gcc # https://github.com/ghcjs/ghcjs/issues/663 |
||||
]; |
||||
dontConfigure = true; |
||||
dontInstall = true; |
||||
buildPhase = '' |
||||
export HOME=$TMP |
||||
mkdir $HOME/.cabal |
||||
touch $HOME/.cabal/config |
||||
cd lib/boot |
||||
|
||||
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; |
||||
|
||||
# The emscripten is broken on darwin |
||||
meta.platforms = lib.platforms.linux; |
||||
meta.maintainers = with lib.maintainers; [ obsidian-systems-maintenance ]; |
||||
} |
@ -0,0 +1,54 @@ |
||||
-- 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" |
||||
, " }" |
||||
] |
@ -0,0 +1,6 @@ |
||||
{ |
||||
"url": "https://github.com/obsidiansystems/ghcjs", |
||||
"rev": "9fc935f2c3ba6c33ec62eb83afc9f52a893eb68c", |
||||
"sha256": "sha256:063dmir39c4i1z8ypnmq86g1x2vhqndmdpzc4hyzsy5jjqcbx6i3", |
||||
"fetchSubmodules": true |
||||
} |
@ -0,0 +1,77 @@ |
||||
{ 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 = "http://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 = "http://github.com/ghcjs"; |
||||
license = lib.licenses.mit; |
||||
}) {}; |
||||
} |
@ -0,0 +1,14 @@ |
||||
diff --git a/Data/Vector/Storable/Mutable.hs b/Data/Vector/Storable/Mutable.hs
|
||||
index 8b538bc..2b74fce 100644
|
||||
--- a/Data/Vector/Storable/Mutable.hs
|
||||
+++ b/Data/Vector/Storable/Mutable.hs
|
||||
@@ -197,7 +197,9 @@ storableSet (MVector n fp) x
|
||||
1 -> storableSetAsPrim n fp x (undefined :: Word8)
|
||||
2 -> storableSetAsPrim n fp x (undefined :: Word16)
|
||||
4 -> storableSetAsPrim n fp x (undefined :: Word32)
|
||||
+#if !defined(ghcjs_HOST_OS)
|
||||
8 -> storableSetAsPrim n fp x (undefined :: Word64)
|
||||
+#endif
|
||||
_ -> unsafeWithForeignPtr fp $ \p -> do
|
||||
poke p x
|
||||
|
@ -0,0 +1,109 @@ |
||||
# 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; |
||||
|
||||
ghcjs-base = dontCheck (self.callPackage ../compilers/ghcjs/ghcjs-base.nix { |
||||
fetchgit = pkgs.buildPackages.fetchgit; |
||||
}); |
||||
|
||||
# GHCJS does not ship with the same core packages as GHC. |
||||
# https://github.com/ghcjs/ghcjs/issues/676 |
||||
stm = doJailbreak self.stm_2_5_0_1; |
||||
exceptions = dontCheck self.exceptions_0_10_4; |
||||
|
||||
## 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; |
||||
|
||||
# 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 super.ghcjs-dom (drv: { |
||||
libraryHaskellDepends = with self; [ |
||||
ghcjs-base ghcjs-dom-jsffi text transformers |
||||
]; |
||||
configureFlags = [ "-fjsffi" "-f-webkit" ]; |
||||
}); |
||||
|
||||
ghcjs-dom-jsffi = overrideCabal super.ghcjs-dom-jsffi (drv: { |
||||
libraryHaskellDepends = (drv.libraryHaskellDepends or []) ++ [ self.ghcjs-base self.text ]; |
||||
broken = false; |
||||
}); |
||||
|
||||
# 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 super.jsaddle (drv: { |
||||
libraryHaskellDepends = (drv.libraryHaskellDepends or []) ++ [ self.ghcjs-base ]; |
||||
}); |
||||
|
||||
# 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 super.reflex (drv: { |
||||
libraryHaskellDepends = (drv.libraryHaskellDepends or []) ++ [ self.ghcjs-base ]; |
||||
}); |
||||
|
||||
reflex-dom = overrideCabal super.reflex-dom (drv: { |
||||
libraryHaskellDepends = removeLibraryHaskellDepends ["jsaddle-webkit2gtk"] (drv.libraryHaskellDepends or []); |
||||
}); |
||||
|
||||
# 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; |
||||
|
||||
# 2 tests fail, related to time precision |
||||
time-compat = dontCheck super.time-compat; |
||||
|
||||
# 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; |
||||
|
||||
# https://github.com/haskell/vector/issues/410 |
||||
vector = appendPatch super.vector (../compilers/ghcjs/patches/vector-ghcjs-storable-set.patch) ; |
||||
|
||||
# Need hedgehog for tests, which fails to compile due to dep on concurrent-output |
||||
zenc = dontCheck super.zenc; |
||||
} |
Loading…
Reference in new issue