build ghcjs (#382)

Adds `ghcjs` to haskell.nix

Co-authored-by: Hamish Mackenzie <Hamish.K.Mackenzie@googlemail.com>
Co-authored-by: Michael Bishop <cleverca22@gmail.com>
This commit is contained in:
Moritz Angermann 2020-02-09 20:03:22 +08:00 committed by GitHub
parent e346ccbef8
commit f5b150c98a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 2376 additions and 165 deletions

View File

@ -103,6 +103,7 @@ let
map (arg: "--hsc2hs-option=" + arg) (["--cross-compile"] ++ lib.optionals (stdenv.hostPlatform.isWindows) ["--via-asm"])
++ lib.optional (package.buildType == "Configure") "--configure-option=--host=${stdenv.hostPlatform.config}" )
++ component.configureFlags
++ (ghc.extraConfigureFlags or [])
);
setupGhcOptions = lib.optional (package.ghcOptions != null) '' --ghc-options="${package.ghcOptions}"'';
@ -139,7 +140,7 @@ let
in stdenv.lib.fix (drv:
stdenv.mkDerivation ({
name = fullName;
name = "${ghc.targetPrefix}${fullName}";
src = cleanSrc;
@ -272,10 +273,10 @@ stdenv.mkDerivation ({
${ghc.targetPrefix}ghc-pkg -v0 init $out/package.conf.d
if [ -d "${name}.conf" ]; then
for pkg in ${name}.conf/*; do
${ghc.targetPrefix}ghc-pkg -v0 --package-db ${configFiles}/package.conf.d -f $out/package.conf.d register "$pkg"
${ghc.targetPrefix}ghc-pkg -v0 --package-db ${configFiles}/${configFiles.packageCfgDir} -f $out/package.conf.d register "$pkg"
done
elif [ -e "${name}.conf" ]; then
${ghc.targetPrefix}ghc-pkg -v0 --package-db ${configFiles}/package.conf.d -f $out/package.conf.d register ${name}.conf
${ghc.targetPrefix}ghc-pkg -v0 --package-db ${configFiles}/${configFiles.packageCfgDir} -f $out/package.conf.d register ${name}.conf
fi
mkdir -p $out/exactDep

View File

@ -15,15 +15,11 @@
}:
let
isGhcjs = ghc.isGhcjs or false;
ghcCommand' = if isGhcjs then "ghcjs" else "ghc";
ghcCommand = "${ghc.targetPrefix}${ghcCommand'}";
ghcCommandCaps = lib.toUpper ghcCommand';
libDir = "$out/lib/${ghcCommand}-${ghc.version}";
inherit (configFiles) ghcCommand ghcCommandCaps packageCfgDir;
libDir = "$out/${configFiles.libDir}";
docDir = "$out/share/doc/ghc/html";
packageCfgDir = "${libDir}/package.conf.d";
in runCommand "${componentName}-${ghc.name}" {
in runCommand "${componentName}-${ghc.name}-env" {
preferLocalBuild = true;
passthru = {
inherit (ghc) version meta;
@ -40,12 +36,16 @@ in runCommand "${componentName}-${ghc.name}" {
rm -rf ${libDir}/*/
# ... but retain the lib/ghc/bin directory. This contains `unlit' and friends.
ln -s ${ghc}/lib/${ghcCommand}-${ghc.version}/bin ${libDir}
# ... and the ghcjs shim's if they are available
# ... and the ghcjs shim's if they are available ...
if [ -d ${ghc}/lib/${ghcCommand}-${ghc.version}/shims ]; then
ln -s ${ghc}/lib/${ghcCommand}-${ghc.version}/shims ${libDir}
fi
# ... and node modules ...
if [ -d ${ghc}/lib/${ghcCommand}-${ghc.version}/ghcjs-node ]; then
ln -s ${ghc}/lib/${ghcCommand}-${ghc.version}/ghcjs-node ${libDir}
fi
# Replace the package database with the one from target package config.
ln -s ${configFiles}/package.conf.d ${packageCfgDir}
ln -s ${configFiles}/${packageCfgDir} $out/${packageCfgDir}
# Wrap compiler executables with correct env variables.
# The NIX_ variables are used by the patched Paths_ghc module.
@ -88,7 +88,7 @@ in runCommand "${componentName}-${ghc.name}" {
for prg in ${ghcCommand}-pkg ${ghcCommand}-pkg-${ghc.version}; do
if [[ -x "${ghc}/bin/$prg" ]]; then
rm -f $out/bin/$prg
makeWrapper ${ghc}/bin/$prg $out/bin/$prg --add-flags "--global-package-db=${packageCfgDir}"
makeWrapper ${ghc}/bin/$prg $out/bin/$prg --add-flags "--global-package-db=$out/${packageCfgDir}"
fi
done

View File

@ -1,6 +1,6 @@
{ pkgs, buildPackages, stdenv, lib, haskellLib, ghc, fetchurl, runCommand, comp-builder, setup-builder }:
config:
{ flags
, package
, components
@ -16,7 +16,7 @@
, shellHook
, ...
}@config:
}@pkg:
assert (if ghc.isHaskellNixCompiler or false then true
else throw ("It is likely you used `haskell.compiler.X` instead of `haskell-nix.compiler.X`"
@ -34,21 +34,59 @@ let
import Distribution.Simple
main = defaultMain
'';
defaultSetup = buildPackages.runCommand "default-Setup" { nativeBuildInputs = [(ghc.passthru.buildGHC or ghc)]; } ''
cat ${defaultSetupSrc} > Setup.hs
mkdir -p $out/bin
${(ghc.passthru.buildGHC or ghc).targetPrefix}ghc Setup.hs --make -o $out/bin/Setup
'';
defaultSetup = setup-builder {
name = "${ghc.targetPrefix}default-Setup";
component = {
depends = config.setup-depends;
libs = [];
frameworks = [];
doExactConfig = false;
includeDirs = [];
asmSources = [];
cSources = [];
cmmSources = [];
cxxSources = [];
jsSources = [];
extraSrcFiles = [ "Setup.hs" "Setup.lhs" ];
pkgconfig = [];
build-tools = [];
setup = if package.buildType == "Simple" && package.setup-depends == []
platforms = null;
preBuild = null; postBuild = null;
preInstall = null; postInstall = null;
preUnpack = null; postUnpack = null;
};
package = {
identifier = {
name = "default-Setup";
version = "1.0";
};
homepage = null;
synopsis = null;
license = "MIT";
};
src = null; cleanSrc = buildPackages.runCommand "default-Setup-src" {} ''
mkdir $out
cat ${defaultSetupSrc} > $out/Setup.hs
'';
inherit defaultSetupSrc;
};
# buildPackages.runCommand "default-Setup" { nativeBuildInputs = [(ghc.passthru.buildGHC or ghc)]; } ''
# cat ${defaultSetupSrc} > Setup.hs
# mkdir -p $out/bin
# ${(ghc.passthru.buildGHC or ghc).targetPrefix}ghc Setup.hs --make -o $out/bin/Setup
# '';
setup = if package.buildType == "Simple"
then defaultSetup
else setup-builder {
component = components.setup // {
depends = components.setup.depends ++ package.setup-depends;
depends = config.setup-depends ++ components.setup.depends ++ package.setup-depends;
extraSrcFiles = components.setup.extraSrcFiles ++ [ "Setup.hs" "Setup.lhs" ];
};
inherit package name src flags revision patches defaultSetupSrc;
inherit (config) preUnpack postUnpack;
inherit (pkg) preUnpack postUnpack;
};
buildComp = componentId: component: comp-builder {
@ -58,7 +96,7 @@ let
};
in rec {
components = haskellLib.applyComponents buildComp config;
components = haskellLib.applyComponents buildComp pkg;
checks = pkgs.recurseIntoAttrs (builtins.mapAttrs
(_: d: haskellLib.check d)
(lib.filterAttrs (_: d: d.config.doCheck) components.tests));

View File

@ -17,9 +17,10 @@ let
# exactDep will pass --exact-configuration to the `SETUP_HS confiugre` command.
# This requires us to pass --dependency={dep name}={pkg id}. The dependency
# name will usually be the name of the package `p`, that will have been located
# in the suitable package db when the dependency (along with `exactDep` and `envDep`)
# was built. Sublibs need a bit of special handling:
# name will usually be the name of the package `p`, which we can locate in the
# package-db, passed in via `pdbArg`. Thus querying the package-db for the
# id field for package `p`, will unsually provide is with the right value. Sublibs
# need a bit of special handling:
#
# - Sublibs: if the dependency is a sublibrary of a package, we need to use
# the sublibrary's name for the dep name, and lookup the sublibraries
@ -30,11 +31,11 @@ let
getLibComponent = dep:
dep.components.library # Regular package dependency
or dep; # or a sublib
or dep; # or a sublib
catPkgExactDep = p: ''
cat ${getLibComponent p}/exactDep/configure-flags >> $out/configure-flags
cat ${getLibComponent p}/exactDep/cabal.config >> $out/cabal.config
cat ${p}/exactDep/configure-flags >> $out/configure-flags
cat ${p}/exactDep/cabal.config >> $out/cabal.config
'';
catGhcPkgExactDep = p: ''
@ -45,7 +46,7 @@ let
'';
catPkgEnvDep = p: ''
cat ${getLibComponent p}/envDep >> $out/ghc-environment
cat ${p}/envDep >> $out/ghc-environment
'';
catGhcPkgEnvDep = p: ''
@ -54,11 +55,36 @@ let
fi
'';
# Work our suitable packageCfgDir subdirectory
isGhcjs = ghc.isGhcjs or false;
ghcCommand' = if isGhcjs then "ghcjs" else "ghc";
ghcCommand = "${ghc.targetPrefix}${ghcCommand'}";
ghcCommandCaps = lib.toUpper ghcCommand';
libDir = "lib/${ghcCommand}-${ghc.version}";
packageCfgDir = "${libDir}/package.conf.d";
in { identifier, component, fullName, flags ? {} }:
runCommand "${fullName}-config" { nativeBuildInputs = [ghc]; } (''
# Filters out only library packages that for this GHC target
# TODO investigate why this is needed
let libDeps = lib.filter (p: p.configFiles.targetPrefix == ghc.targetPrefix)
(map getLibComponent component.depends);
cfgFiles =
let xs = map
(p: "${p.configFiles}")
libDeps;
in lib.concatStringsSep "\" \"" xs;
libs = lib.concatMapStringsSep "\" \"" (p: "${p}") libDeps;
in
runCommand "${ghc.targetPrefix}${fullName}-config" {
nativeBuildInputs = [ghc];
passthru = {
inherit (ghc) targetPrefix;
inherit ghcCommand ghcCommandCaps libDir packageCfgDir;
};
} (''
mkdir -p $out
${target-pkg} init $out/package.conf.d
${target-pkg} init $out/${packageCfgDir}
${lib.concatStringsSep "\n" (lib.mapAttrsToList flagsAndConfig {
"extra-lib-dirs" = map (p: "${lib.getLib p}/lib") component.libs;
@ -68,16 +94,22 @@ in { identifier, component, fullName, flags ? {} }:
# Copy over the nonReinstallablePkgs from the global package db.
${lib.concatMapStringsSep "\n" (p: ''
find ${ghc}/lib/${ghc.name}/package.conf.d -name '${p}*.conf' -exec cp -f {} $out/package.conf.d \;
find ${ghc}/lib/${ghc.name}/package.conf.d -name '${p}*.conf' -exec cp -f {} $out/${packageCfgDir} \;
'') nonReinstallablePkgs}
${lib.concatMapStringsSep "\n" (p: ''
cp -f "${(getLibComponent p).configFiles}/package.conf.d/"*.conf $out/package.conf.d
cp -f "${getLibComponent p}/package.conf.d/"*.conf $out/package.conf.d
'') component.depends}
for l in "${cfgFiles}"; do
if [ -n "$l" ]; then
cp -f "$l/${packageCfgDir}/"*.conf $out/${packageCfgDir}
fi
done
for l in "${libs}"; do
if [ -n "$l" ]; then
cp -f "$l/package.conf.d/"*.conf $out/${packageCfgDir}
fi
done
# Note: we pass `clear` first to ensure that we never consult the implicit global package db.
${flagsAndConfig "package-db" ["clear" "$out/package.conf.d"]}
${flagsAndConfig "package-db" ["clear" "$out/${packageCfgDir}"]}
echo ${lib.concatStringsSep " " (lib.mapAttrsToList (fname: val: "--flags=${lib.optionalString (!val) "-" + fname}") flags)} >> $out/configure-flags
@ -86,17 +118,17 @@ in { identifier, component, fullName, flags ? {} }:
# Provide a GHC environment file
cat > $out/ghc-environment <<EOF
package-db $out/package.conf.d
package-db $out/${packageCfgDir}
EOF
${lib.concatMapStringsSep "\n" catPkgEnvDep component.depends}
${lib.concatMapStringsSep "\n" catPkgEnvDep libDeps}
${lib.concatMapStringsSep "\n" catGhcPkgEnvDep (lib.remove "ghc" nonReinstallablePkgs)}
'' + lib.optionalString component.doExactConfig ''
echo "--exact-configuration" >> $out/configure-flags
echo "allow-newer: ${identifier.name}:*" >> $out/cabal.config
echo "allow-older: ${identifier.name}:*" >> $out/cabal.config
${lib.concatMapStringsSep "\n" catPkgExactDep component.depends}
${lib.concatMapStringsSep "\n" catPkgExactDep libDeps}
${lib.concatMapStringsSep "\n" catGhcPkgExactDep nonReinstallablePkgs}
''
@ -116,10 +148,12 @@ in { identifier, component, fullName, flags ? {} }:
# (e.g. libiconv), and thus we don't want to fail, but just link it again.
#
# Confusing sed stuff:
# '/^ ./{H;$!d} ; x' Groups lines that start with a space with the initial
# line of a block. Needs a blank line added to the file
# to terminate the last block.
# 's/ /\n/g ; s/\n\n*/\n/g; s/^\n//;' Puts each field on its own line.
# '/^ ./{H;$!d} ; x' Groups lines that start with a space with the initial
# line of a block. Needs a blank line added to the file
# to terminate the last block.
# 's/ /\n/g ; s/\n\n*/\n/g; s/^\n//;' Puts each field on its own line.
# 's|/nix/store/|''${pkgroot}/../../../|' Convert store path to pkgroot relative path
# 's|''${pkgroot}/../../../|/nix/store/|' Convert pkgroot relative path to store path
+ lib.optionalString stdenv.isDarwin ''
# Work around a limit in the macOS Sierra linker on the number of paths
# referenced by any one dynamic library:
@ -128,20 +162,25 @@ in { identifier, component, fullName, flags ? {} }:
# libraries) from all the dependencies.
local dynamicLinksDir="$out/lib/links"
mkdir -p $dynamicLinksDir
# Enumerate dynamic-library-dirs with ''${pkgroot} expanded.
local dirsToLink=$(
for f in "$out/package.conf.d/"*.conf; do
for f in "$out/${packageCfgDir}/"*.conf; do
(cat $f; echo) | sed -En '/^ ./{H;$!d} ; x ; /^dynamic-library-dirs:/ {s/^dynamic-library-dirs:// ; s/ /\n/g ; s/\n\n*/\n/g; s/^\n//; p}'
done | sort -u
done | sed 's|''${pkgroot}/../../../|/nix/store/|' | sort -u
)
for d in $dirsToLink; do
ln -f -s "$d/"*.dylib $dynamicLinksDir
done
# Edit the local package DB to reference the links directory.
for f in "$out/package.conf.d/"*.conf; do
for f in "$out/${packageCfgDir}/"*.conf; do
chmod +w $f
echo >> $f
sed -i -E "/^ ./{H;$!d} ; x ; s,^dynamic-library-dirs:.*,dynamic-library-dirs: $dynamicLinksDir," $f
done
'' + ''
${target-pkg} -v0 --package-db $out/package.conf.d recache
# Use ''${pkgroot} relative paths so that we can relocate the package database
# along with referenced packages and still have it work on systems with
# or without nix installed.
sed -i 's|/nix/store/|''${pkgroot}/../../../|' $out/${packageCfgDir}/*.conf
${target-pkg} -v0 --package-db $out/${packageCfgDir} recache
'')

View File

@ -1,15 +1,14 @@
{ stdenv, lib, buildPackages, haskellLib, ghc, nonReinstallablePkgs, hsPkgs, makeSetupConfigFiles, pkgconfig }:
{ component, package, name, src, flags, revision, patches, defaultSetupSrc
{ component, package, name, src, flags ? {}, revision ? null, patches ? [], defaultSetupSrc
, preUnpack ? component.preUnpack, postUnpack ? component.postUnpack
, prePatch ? null, postPatch ? null
, preBuild ? component.preBuild , postBuild ? component.postBuild
, preInstall ? component.preInstall , postInstall ? component.postInstall
, cleanSrc ? haskellLib.cleanCabalComponent package component src
}:
let
cleanSrc = haskellLib.cleanCabalComponent package component src;
fullName = "${name}-setup";
includeGhcPackage = lib.any (p: p.identifier.name == "ghc") component.depends;
@ -36,7 +35,7 @@ let
in
stdenv.lib.fix (drv:
stdenv.mkDerivation ({
name = "${fullName}";
name = "${ghc.targetPrefix}${fullName}";
src = cleanSrc;
buildInputs = component.libs
++ component.frameworks
@ -70,7 +69,7 @@ in
if [ -f $f ]; then
echo Compiling package $f
ghc $f -threaded '' + (if includeGhcPackage then "-package ghc " else "")
+ ''-package-db ${configFiles}/package.conf.d --make -o ./Setup
+ ''-package-db ${configFiles}/${configFiles.packageCfgDir} --make -o ./Setup
setup=$(pwd)/Setup
fi
done

View File

@ -90,6 +90,7 @@ in
passthru = (mkDrvArgs.passthru or {}) // {
ghc = ghcEnv;
inherit configFiles;
};
} // lib.optionalAttrs exactDeps {
CABAL_CONFIG = "${configFiles}/cabal.config";

View File

@ -1,6 +1,6 @@
{
"url": "https://github.com/ghcjs/ghcjs",
"rev": "d97caeb07757e09f7402429532c14d20eab79bd2",
"sha256": "0025pjgbmr34f2wadrnm9crnx966scc7ja8n9gy93jcqzzmvgj6x",
"rev": "e87195eaa2bc7e320e18cf10386802bc90b7c874",
"sha256": "02mwkf7aagxqi142gcmq048244apslrr72p568akcab9s0fn2gvy",
"fetchSubmodules": true
}
}

View File

@ -9,66 +9,15 @@
, cabal-install ? pkgs.buildPackages.cabal-install
}:
let
configured-src = pkgs.buildPackages.runCommand "configured-ghcjs-src" {
buildInputs = with pkgs.buildPackages; [
perl
autoconf
automake
python3
] ++ [
ghc
happy
alex
cabal-install
];
inherit ghcjsSrc;
} ''
export HOME=$(pwd)
mkdir $HOME/.cabal
touch $HOME/.cabal/config
cp -r "$ghcjsSrc" "$out"
chmod -R +w "$out"
cd "$out"
project = pkgs.buildPackages.haskell-nix.ghcjsProject {
src = ghcjsSrc;
inherit ghc ghcjsVersion ghcVersion happy alex cabal-install;
index-state = "2019-12-10T00:00:00Z";
# plan-sha256 = "1wy2lr08maxyi7r8jiwf2gj6pdayk5vxxwh42bj4s2gg4035z0yc";
# materialized = ../../materialized/ghcjs;
};
# TODO: Find a better way to avoid impure version numbers
sed -i 's/RELEASE=NO/RELEASE=YES/' ghc/configure.ac
sed -i 's/${ghcjsVersion}/${ghcVersion}/' ghcjs.cabal
# TODO: How to actually fix this?
# Seems to work fine and produce the right files.
touch ghc/includes/ghcautoconf.h
mkdir -p ghc/compiler/vectorise
mkdir -p ghc/utils/haddock/haddock-library/vendor
patchShebangs .
sed -i 's/gcc /cc /g' utils/makePackages.sh
cat utils/makePackages.sh
./utils/makePackages.sh copy
echo " build-tool-depends: alex:alex, happy:happy <= 1.19.9" >> lib/ghc-api-ghcjs/ghc-api-ghcjs.cabal
'';
# see https://github.com/ghcjs/ghcjs/issues/751 for the happy upper bound.
ghcjs = (pkgs.buildPackages.haskell-nix.cabalProject {
src = configured-src;
inherit ghc;
modules = [
{
# we need ghc-boot in here for ghcjs.
nonReinstallablePkgs = [ "rts" "ghc-heap" "ghc-prim" "integer-gmp" "integer-simple" "base"
"deepseq" "array" "ghc-boot-th" "pretty" "template-haskell"
"ghc-boot" "binary" "bytestring" "filepath" "directory" "containers"
"time" "unix" "Win32" ];
}
{
packages.Cabal.patches = [ ./../../overlays/patches/Cabal/fix-data-dir.patch ];
packages.ghcjs.doHaddock = false;
packages.haddock-ghcjs.doHaddock = false;
packages.haddock-api-ghcjs.doHaddock = false;
packages.ghcjs.flags = { no-wrapper-install = true; };
# packages.ghcjs.components.library.configureFlags = [ "-fno-wrapper-install" ];
}
];
}).ghcjs; # <- we are only interested in the `ghcjs` package.
inherit (project.hsPkgs) ghcjs;
all-ghcjs = pkgs.buildPackages.symlinkJoin {
name = "ghcjs-${ghcjsVersion}-symlinked";
@ -79,46 +28,41 @@ let
ghcjs.components.exes.hsc2hs-ghcjs
ghcjs.components.exes.ghcjs-boot
ghcjs.components.exes.ghcjs-run
ghcjs.components.exes.ghcjs-dumparchive
];
};
libexec = "${all-ghcjs}/libexec/${builtins.replaceStrings ["darwin" "i686"] ["osx" "i386"] pkgs.stdenv.buildPlatform.system}-${ghc.name}/ghcjs-${ghcVersion}";
in pkgs.stdenv.mkDerivation {
name = "ghcjs-${ghcVersion}";
src = configured-src;
libexec = "libexec/${builtins.replaceStrings ["darwin" "i686"] ["osx" "i386"] pkgs.stdenv.buildPlatform.system}-${ghc.name}/ghcjs-${ghcVersion}";
booted-ghcjs = pkgs.stdenv.mkDerivation {
name = "ghcjs-${ghcVersion}";
src = project.configured-src;
nativeBuildInputs = with pkgs.buildPackages; [
nodejs
makeWrapper
xorg.lndir
gmp
pkgconfig
]
++ [ ghc cabal-install ]
++ lib.optionals stdenv.isDarwin [
pkgs.buildPackages.gcc # https://github.com/ghcjs/ghcjs/issues/663
];
passthru = {
nativeBuildInputs = project.bootInputs;
passthru = {
inherit all-ghcjs;
} // ghcjs.components.exes;
dontConfigure = true;
dontInstall = true;
buildPhase = ''
export HOME=$TMP
mkdir $HOME/.cabal
touch $HOME/.cabal/config
cd lib/boot
inherit (project) configured-src;
# Used to detect non haskell-nix compilers (accedental use of nixpkgs compilers can lead to unexpected errors)
isHaskellNixCompiler = true;
} // ghcjs.components.exes;
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/ghcjs-${ghcVersion}
lndir ${libexec} $out/bin
mkdir -p $out/bin
mkdir -p $out/lib/ghcjs-${ghcVersion}
lndir ${all-ghcjs}/${libexec} $out/bin
wrapProgram $out/bin/ghcjs --add-flags "-B$out/lib/ghcjs-${ghcVersion}"
wrapProgram $out/bin/haddock-ghcjs --add-flags "-B$out/lib/ghcjs-${ghcVersion}"
wrapProgram $out/bin/ghcjs-pkg --add-flags "--global-package-db=$out/lib/ghcjs-${ghcVersion}/package.conf.d"
wrapProgram $out/bin/ghcjs --add-flags "-B$out/lib/ghcjs-${ghcVersion}"
wrapProgram $out/bin/haddock-ghcjs --add-flags "-B$out/lib/ghcjs-${ghcVersion}"
wrapProgram $out/bin/ghcjs-pkg --add-flags "--global-package-db=$out/lib/ghcjs-${ghcVersion}/package.conf.d"
env PATH=$out/bin:$PATH $out/bin/ghcjs-boot -j1 --with-ghcjs-bin $out/bin
'';
# We hard code -j1 as a temporary workaround for
# https://github.com/ghcjs/ghcjs/issues/654
# enableParallelBuilding = true;
}
env PATH=$out/bin:$PATH $out/bin/ghcjs-boot -j1 --with-ghcjs-bin $out/bin
'';
# We hard code -j1 as a temporary workaround for
# https://github.com/ghcjs/ghcjs/issues/654
# enableParallelBuilding = true;
};
in booted-ghcjs

View File

@ -173,7 +173,7 @@ let
else null;
} // pkgs.lib.optionalAttrs (checkMaterialization != null) {
inherit checkMaterialization;
}) (runCommand (if name == null then "plan-to-nix-pkgs" else name + "-plan-to-nix-pkgs") {
}) (builtins.trace "[${if name == null then "plan-to-nix-pkgs" else name + "-plan-to-nix-pkgs"}] cabal new-configure --with-ghc=${ghc.targetPrefix}ghc --with-ghc-pkg=${ghc.targetPrefix}ghc-pkg" (runCommand (if name == null then "plan-to-nix-pkgs" else name + "-plan-to-nix-pkgs") {
nativeBuildInputs = [ nix-tools ghc hpack cabal-install pkgs.rsync pkgs.git ];
# Needed or stack-to-nix will die on unicode inputs
LOCALE_ARCHIVE = pkgs.lib.optionalString (pkgs.stdenv.hostPlatform.libc == "glibc") "${pkgs.glibcLocales}/lib/locale/locale-archive";
@ -247,5 +247,5 @@ let
# move pkgs.nix to default.nix ensure we can just nix `import` the result.
mv $out/pkgs.nix $out/default.nix
'');
''));
in { projectNix = plan-nix; inherit src; inherit (fixedProject) sourceRepos; }

131
lib/ghcjs-project.nix Normal file
View File

@ -0,0 +1,131 @@
# For the time being we can't really treat ghcjs like a
# regular ghc (with different target). We need this as a
# stop-gap measure until ghcjs can be treated like a regular
# ghc.
#
# `haskell-nix.ghcjsProject` wraps `haskell-nix.cabalProject'`
# for use with the ghcjs source. It is exposed to allow GHCJS
# developers to work on the GHCJS code in a nix-shell with
# `shellFor`. It takes thes the clean src (from fetched
# source or local source that has been cleaned with cleanGit.
# It configures the source and passes it onto `cabalProject`
# along with the necessary modules.
#
# It also adds `configureInputs` and `bootInputs` that a
# needed for configuring the source and booting the compiler
# once it is built. These are added to the `hsPkgs.shellFor`
# of the project.
{ pkgs }:
{ src
, ghc ? pkgs.ghc
, ghcjsVersion ? "8.6.0.1" # TODO get this from the source?
, ghcVersion ? "8.6.5" # TODO get this from the ghc arg?
, happy ? pkgs.haskellPackages.happy
, alex ? pkgs.haskellPackages.alex
, cabal-install ? pkgs.cabal-install
, ...
}@args:
let
# Inputs needed to configure the GHCJS source tree
configureInputs = with pkgs; [
perl
autoconf
automake
python3
] ++ [
ghc
happy
alex
cabal-install
];
# Inputs needed to boot the GHCJS compiler
bootInputs = with pkgs; [
nodejs
makeWrapper
xorg.lndir
gmp
pkgconfig
]
++ [ ghc cabal-install ]
++ lib.optionals stdenv.isDarwin [
pkgs.buildPackages.gcc # https://github.com/ghcjs/ghcjs/issues/663
];
# Configured the GHCJS source
configured-src = pkgs.runCommand "configured-ghcjs-src" {
buildInputs = configureInputs;
inherit src;
} ''
export HOME=$(pwd)
mkdir $HOME/.cabal
touch $HOME/.cabal/config
cp -r "$src" "$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
sed -i 's/${ghcjsVersion}/${ghcVersion}/' ghcjs.cabal
# TODO: How to actually fix this?
# Seems to work fine and produce the right files.
touch ghc/includes/ghcautoconf.h
mkdir -p ghc/compiler/vectorise
mkdir -p ghc/utils/haddock/haddock-library/vendor
patchShebangs .
sed -i 's/gcc /cc /g' utils/makePackages.sh
cat utils/makePackages.sh
./utils/makePackages.sh copy
echo " build-tool-depends: alex:alex, happy:happy <= 1.19.9" >> lib/ghc-api-ghcjs/ghc-api-ghcjs.cabal
# nuke the HsBaseConfig.h from base.buildinfo.in; this will
# prevent it from being installed and provide incorrect values.
sed -i 's/HsBaseConfig.h//g' lib/boot/pkg/base/base.buildinfo.in
cat lib/boot/pkg/base/base.buildinfo.in
'';
# see https://github.com/ghcjs/ghcjs/issues/751 for the happy upper bound.
ghcjsProject = pkgs.haskell-nix.cabalProject' (
(pkgs.lib.filterAttrs
(n: _: builtins.any (x: x == n)
["src" "ghcjsVersion" "ghcVersion" "happy" "alex" "cabal-install"]) args) // {
src = configured-src;
modules = [
{
# we need ghc-boot in here for ghcjs.
nonReinstallablePkgs = [ "rts" "ghc-heap" "ghc-prim" "integer-gmp" "integer-simple" "base"
"deepseq" "array" "ghc-boot-th" "pretty" "template-haskell"
"ghc-boot" "binary" "bytestring" "filepath" "directory" "containers"
"time" "unix" "Win32" ];
}
{
packages.Cabal.patches = [ ./../overlays/patches/Cabal/fix-data-dir.patch ];
packages.ghcjs.doHaddock = false;
packages.haddock-ghcjs.doHaddock = false;
packages.haddock-api-ghcjs.doHaddock = false;
packages.ghcjs.flags.no-wrapper-install = true;
# set use-host-template-haskell. This *does*
# work as we use a patched ghc to boot anyway.
# (we apply https://github.com/ghcjs/ghc/commit/2918d88d4ef786b5f2801f6f77ac333cc56dde75 already)
packages.ghcjs.flags.use-host-template-haskell = true;
packages.ghc-api-ghcjs.flags.use-host-template-haskell = true;
packages.ghcjs-th.flags.use-host-template-haskell = true;
packages.ghc.flags.ghci = true;
packages.ghci.flags.ghci = true;
# packages.ghcjs.components.library.configureFlags = [ "-fno-wrapper-install" ];
}
];
});
in ghcjsProject // {
# Add `configureInputs` and `bootInputs` to the shell
hsPkgs = ghcjsProject.hsPkgs // {
# Shell suitable for configuring and building a local copy of GHCJS
shellFor = args: (ghcjsProject.hsPkgs.shellFor args).overrideAttrs (drv: {
buildInputs = (drv.buildInputs or []) ++ configureInputs;
nativeBuildInputs = (drv.nativeBuildInputs or []) ++ bootInputs;
});
};
inherit configureInputs bootInputs configured-src;
}

View File

@ -0,0 +1,620 @@
let
buildDepError = pkg:
builtins.throw ''
The Haskell package set does not contain the package: ${pkg} (build dependency).
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
sysDepError = pkg:
builtins.throw ''
The Nixpkgs package set does not contain the package: ${pkg} (system dependency).
You may need to augment the system package mapping in haskell.nix so that it can be found.
'';
pkgConfDepError = pkg:
builtins.throw ''
The pkg-conf packages does not contain the package: ${pkg} (pkg-conf dependency).
You may need to augment the pkg-conf package mapping in haskell.nix so that it can be found.
'';
exeDepError = pkg:
builtins.throw ''
The local executable components do not include the component: ${pkg} (executable dependency).
'';
legacyExeDepError = pkg:
builtins.throw ''
The Haskell package set does not contain the package: ${pkg} (executable dependency).
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
buildToolDepError = pkg:
builtins.throw ''
Neither the Haskell package set or the Nixpkgs package set contain the package: ${pkg} (build tool dependency).
If this is a system dependency:
You may need to augment the system package mapping in haskell.nix so that it can be found.
If this is a Haskell dependency:
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
in { system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
{
flags = {
debug = false;
ghci = true;
stage1 = false;
stage2 = true;
stage3 = false;
terminfo = true;
use-host-template-haskell = false;
};
package = {
specVersion = "2.0";
identifier = { name = "ghc-api-ghcjs"; version = "8.6.5"; };
license = "BSD-3-Clause";
copyright = "";
maintainer = "glasgow-haskell-users@haskell.org";
author = "The GHC Team";
homepage = "http://www.haskell.org/ghc/";
url = "";
synopsis = "The GHC API (customized for GHCJS)";
description = "GHC's functionality can be useful for more things than just\ncompiling Haskell programs. Important use cases are programs\nthat analyse (and perhaps transform) Haskell code. Others\ninclude loading Haskell code dynamically in a GHCi-like manner.\nFor this reason, a lot of GHC's functionality is made available\nthrough this package.";
buildType = "Simple";
isLocal = true;
detailLevel = "FullDetails";
licenseFiles = [ "LICENSE" ];
dataDir = "";
dataFiles = [];
extraSrcFiles = [
"compiler/utils/md5.h"
"compiler/Unique.h"
"compiler/HsVersions.h"
"compiler/nativeGen/NCG.h"
"compiler/parser/cutils.h"
"compiler/utils/md5.h"
"includes/CodeGen.Platform.hs"
"autogen/Config.hs"
"autogen/864/Config.hs"
"autogen/863/Config.hs"
"includes/GHCConstantsHaskellExports.hs"
"includes/GHCConstantsHaskellType.hs"
"includes/GHCConstantsHaskellWrappers.hs"
"includes/*.h"
"includes/*.hs-incl"
"includes/rts/*.h"
"includes/rts/storage/*.h"
"includes/stg/*.h"
];
extraTmpFiles = [];
extraDocFiles = [];
};
components = {
"library" = {
depends = ([
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."deepseq" or (buildDepError "deepseq"))
(hsPkgs."directory" or (buildDepError "directory"))
(hsPkgs."process" or (buildDepError "process"))
(hsPkgs."bytestring" or (buildDepError "bytestring"))
(hsPkgs."binary" or (buildDepError "binary"))
(hsPkgs."time" or (buildDepError "time"))
(hsPkgs."containers" or (buildDepError "containers"))
(hsPkgs."array" or (buildDepError "array"))
(hsPkgs."filepath" or (buildDepError "filepath"))
(hsPkgs."hpc" or (buildDepError "hpc"))
(hsPkgs."transformers" or (buildDepError "transformers"))
(hsPkgs."ghc-boot" or (buildDepError "ghc-boot"))
(hsPkgs."ghc-boot-th" or (buildDepError "ghc-boot-th"))
(hsPkgs."ghc-heap" or (buildDepError "ghc-heap"))
] ++ (if flags.use-host-template-haskell || compiler.isGhcjs && true
then [
(hsPkgs."template-haskell" or (buildDepError "template-haskell"))
(hsPkgs."ghci" or (buildDepError "ghci"))
]
else [
(hsPkgs."template-haskell-ghcjs" or (buildDepError "template-haskell-ghcjs"))
(hsPkgs."ghci-ghcjs" or (buildDepError "ghci-ghcjs"))
])) ++ (if system.isWindows
then [ (hsPkgs."Win32" or (buildDepError "Win32")) ]
else [
(hsPkgs."unix" or (buildDepError "unix"))
] ++ (pkgs.lib).optional (flags.terminfo) (hsPkgs."terminfo" or (buildDepError "terminfo")));
build-tools = [
(hsPkgs.buildPackages.happy or (pkgs.buildPackages.happy or (buildToolDepError "happy")))
(hsPkgs.buildPackages.alex or (pkgs.buildPackages.alex or (buildToolDepError "alex")))
(hsPkgs.buildPackages.alex or (pkgs.buildPackages.alex or (buildToolDepError "alex")))
(hsPkgs.buildPackages.happy or (pkgs.buildPackages.happy or (buildToolDepError "happy")))
];
buildable = true;
modules = [
"GhcPrelude"
"Ar"
"FileCleanup"
"DriverBkp"
"BkpSyn"
"NameShape"
"RnModIface"
"Avail"
"AsmUtils"
"BasicTypes"
"ConLike"
"DataCon"
"PatSyn"
"Demand"
"Debug"
"Exception"
"FieldLabel"
"GhcMonad"
"Hooks"
"Id"
"IdInfo"
"Lexeme"
"Literal"
"Llvm"
"Llvm/AbsSyn"
"Llvm/MetaData"
"Llvm/PpLlvm"
"Llvm/Types"
"LlvmCodeGen"
"LlvmCodeGen/Base"
"LlvmCodeGen/CodeGen"
"LlvmCodeGen/Data"
"LlvmCodeGen/Ppr"
"LlvmCodeGen/Regs"
"LlvmMangler"
"MkId"
"Module"
"Name"
"NameEnv"
"NameSet"
"OccName"
"RdrName"
"NameCache"
"SrcLoc"
"UniqSupply"
"Unique"
"Var"
"VarEnv"
"VarSet"
"UnVarGraph"
"BlockId"
"CLabel"
"Cmm"
"CmmBuildInfoTables"
"CmmPipeline"
"CmmCallConv"
"CmmCommonBlockElim"
"CmmImplementSwitchPlans"
"CmmContFlowOpt"
"CmmExpr"
"CmmInfo"
"CmmLex"
"CmmLint"
"CmmLive"
"CmmMachOp"
"CmmMonad"
"CmmSwitch"
"CmmNode"
"CmmOpt"
"CmmParse"
"CmmProcPoint"
"CmmSink"
"CmmType"
"CmmUtils"
"CmmLayoutStack"
"EnumSet"
"MkGraph"
"PprBase"
"PprC"
"PprCmm"
"PprCmmDecl"
"PprCmmExpr"
"Bitmap"
"CodeGen/Platform"
"CodeGen/Platform/ARM"
"CodeGen/Platform/ARM64"
"CodeGen/Platform/NoRegs"
"CodeGen/Platform/PPC"
"CodeGen/Platform/PPC_Darwin"
"CodeGen/Platform/SPARC"
"CodeGen/Platform/X86"
"CodeGen/Platform/X86_64"
"CgUtils"
"StgCmm"
"StgCmmBind"
"StgCmmClosure"
"StgCmmCon"
"StgCmmEnv"
"StgCmmExpr"
"StgCmmForeign"
"StgCmmHeap"
"StgCmmHpc"
"StgCmmArgRep"
"StgCmmLayout"
"StgCmmMonad"
"StgCmmPrim"
"StgCmmProf"
"StgCmmTicky"
"StgCmmUtils"
"StgCmmExtCode"
"SMRep"
"CoreArity"
"CoreFVs"
"CoreLint"
"CorePrep"
"CoreSubst"
"CoreOpt"
"CoreSyn"
"TrieMap"
"CoreTidy"
"CoreUnfold"
"CoreUtils"
"CoreMap"
"CoreSeq"
"CoreStats"
"MkCore"
"PprCore"
"PmExpr"
"TmOracle"
"Check"
"Coverage"
"Desugar"
"DsArrows"
"DsBinds"
"DsCCall"
"DsExpr"
"DsForeign"
"DsGRHSs"
"DsListComp"
"DsMonad"
"DsUsage"
"DsUtils"
"ExtractDocs"
"Match"
"MatchCon"
"MatchLit"
"HsBinds"
"HsDecls"
"HsDoc"
"HsExpr"
"HsImpExp"
"HsLit"
"PlaceHolder"
"HsExtension"
"HsInstances"
"HsPat"
"HsSyn"
"HsTypes"
"HsUtils"
"HsDumpAst"
"BinIface"
"BinFingerprint"
"BuildTyCl"
"IfaceEnv"
"IfaceSyn"
"IfaceType"
"ToIface"
"LoadIface"
"MkIface"
"TcIface"
"FlagChecker"
"Annotations"
"CmdLineParser"
"CodeOutput"
"Config"
"Constants"
"DriverMkDepend"
"DriverPhases"
"PipelineMonad"
"DriverPipeline"
"DynFlags"
"ErrUtils"
"Finder"
"GHC"
"GhcMake"
"GhcPlugins"
"DynamicLoading"
"HeaderInfo"
"HscMain"
"HscStats"
"HscTypes"
"InteractiveEval"
"InteractiveEvalTypes"
"PackageConfig"
"Packages"
"PlatformConstants"
"Plugins"
"TcPluginM"
"PprTyThing"
"StaticPtrTable"
"SysTools"
"SysTools/BaseDir"
"SysTools/Terminal"
"SysTools/ExtraObj"
"SysTools/Info"
"SysTools/Process"
"SysTools/Tasks"
"Elf"
"TidyPgm"
"Ctype"
"HaddockUtils"
"Lexer"
"OptCoercion"
"Parser"
"RdrHsSyn"
"ApiAnnotation"
"ForeignCall"
"KnownUniques"
"PrelInfo"
"PrelNames"
"PrelRules"
"PrimOp"
"TysPrim"
"TysWiredIn"
"CostCentre"
"CostCentreState"
"ProfInit"
"RnBinds"
"RnEnv"
"RnExpr"
"RnHsDoc"
"RnNames"
"RnPat"
"RnSource"
"RnSplice"
"RnTypes"
"RnFixity"
"RnUtils"
"RnUnbound"
"CoreMonad"
"CSE"
"FloatIn"
"FloatOut"
"LiberateCase"
"OccurAnal"
"SAT"
"SetLevels"
"SimplCore"
"SimplEnv"
"SimplMonad"
"SimplUtils"
"Simplify"
"SimplStg"
"StgStats"
"StgCse"
"UnariseStg"
"RepType"
"Rules"
"SpecConstr"
"Specialise"
"CoreToStg"
"StgLint"
"StgSyn"
"CallArity"
"DmdAnal"
"Exitify"
"WorkWrap"
"WwLib"
"FamInst"
"Inst"
"TcAnnotations"
"TcArrows"
"TcBinds"
"TcSigs"
"TcClassDcl"
"TcDefaults"
"TcDeriv"
"TcDerivInfer"
"TcDerivUtils"
"TcEnv"
"TcExpr"
"TcForeign"
"TcGenDeriv"
"TcGenFunctor"
"TcGenGenerics"
"TcHsSyn"
"TcHsType"
"TcInstDcls"
"TcMType"
"TcValidity"
"TcMatches"
"TcPat"
"TcPatSyn"
"TcRnDriver"
"TcBackpack"
"TcRnExports"
"TcRnMonad"
"TcRnTypes"
"TcRules"
"TcSimplify"
"TcHoleErrors"
"TcErrors"
"TcTyClsDecls"
"TcTyDecls"
"TcTypeable"
"TcType"
"TcEvidence"
"TcEvTerm"
"TcUnify"
"TcInteract"
"TcCanonical"
"TcFlatten"
"TcSMonad"
"TcTypeNats"
"TcSplice"
"Class"
"Coercion"
"DsMeta"
"THNames"
"FamInstEnv"
"FunDeps"
"InstEnv"
"TyCon"
"CoAxiom"
"Kind"
"Type"
"TyCoRep"
"Unify"
"Bag"
"Binary"
"BooleanFormula"
"BufWrite"
"Digraph"
"Encoding"
"FastFunctions"
"FastMutInt"
"FastString"
"FastStringEnv"
"Fingerprint"
"FiniteMap"
"FV"
"GraphBase"
"GraphColor"
"GraphOps"
"GraphPpr"
"IOEnv"
"Json"
"ListSetOps"
"ListT"
"Maybes"
"MonadUtils"
"OrdList"
"Outputable"
"Pair"
"Panic"
"PprColour"
"Pretty"
"State"
"Stream"
"StringBuffer"
"UniqDFM"
"UniqDSet"
"UniqFM"
"UniqMap"
"UniqSet"
"Util"
"Hoopl/Block"
"Hoopl/Collections"
"Hoopl/Dataflow"
"Hoopl/Graph"
"Hoopl/Label"
"AsmCodeGen"
"TargetReg"
"NCGMonad"
"Instruction"
"Format"
"Reg"
"RegClass"
"PIC"
"Platform"
"CPrim"
"X86/Regs"
"X86/RegInfo"
"X86/Instr"
"X86/Cond"
"X86/Ppr"
"X86/CodeGen"
"PPC/Regs"
"PPC/RegInfo"
"PPC/Instr"
"PPC/Cond"
"PPC/Ppr"
"PPC/CodeGen"
"SPARC/Base"
"SPARC/Regs"
"SPARC/Imm"
"SPARC/AddrMode"
"SPARC/Cond"
"SPARC/Instr"
"SPARC/Stack"
"SPARC/ShortcutJump"
"SPARC/Ppr"
"SPARC/CodeGen"
"SPARC/CodeGen/Amode"
"SPARC/CodeGen/Base"
"SPARC/CodeGen/CondCode"
"SPARC/CodeGen/Gen32"
"SPARC/CodeGen/Gen64"
"SPARC/CodeGen/Sanity"
"SPARC/CodeGen/Expand"
"RegAlloc/Liveness"
"RegAlloc/Graph/Main"
"RegAlloc/Graph/Stats"
"RegAlloc/Graph/ArchBase"
"RegAlloc/Graph/ArchX86"
"RegAlloc/Graph/Coalesce"
"RegAlloc/Graph/Spill"
"RegAlloc/Graph/SpillClean"
"RegAlloc/Graph/SpillCost"
"RegAlloc/Graph/TrivColorable"
"RegAlloc/Linear/Main"
"RegAlloc/Linear/JoinToTargets"
"RegAlloc/Linear/State"
"RegAlloc/Linear/Stats"
"RegAlloc/Linear/FreeRegs"
"RegAlloc/Linear/StackMap"
"RegAlloc/Linear/Base"
"RegAlloc/Linear/X86/FreeRegs"
"RegAlloc/Linear/X86_64/FreeRegs"
"RegAlloc/Linear/PPC/FreeRegs"
"RegAlloc/Linear/SPARC/FreeRegs"
"Dwarf"
"Dwarf/Types"
"Dwarf/Constants"
"Convert"
"ByteCodeTypes"
"ByteCodeAsm"
"ByteCodeGen"
"ByteCodeInstr"
"ByteCodeItbls"
"ByteCodeLink"
"Debugger"
"Linker"
"RtClosureInspect"
"GHCi"
];
cSources = [
"compiler/parser/cutils.c"
"compiler/ghci/keepCAFsForGHCi.c"
"compiler/cbits/genSym.c"
];
hsSourceDirs = [
"compiler/backpack"
"compiler/basicTypes"
"compiler/cmm"
"compiler/codeGen"
"compiler/coreSyn"
"compiler/deSugar"
"compiler/ghci"
"compiler/hsSyn"
"compiler/iface"
"compiler/llvmGen"
"compiler/main"
"compiler/nativeGen"
"compiler/parser"
"compiler/prelude"
"compiler/profiling"
"compiler/rename"
"compiler/simplCore"
"compiler/simplStg"
"compiler/specialise"
"compiler/stgSyn"
"compiler/stranal"
"compiler/typecheck"
"compiler/types"
"compiler/utils"
] ++ (if compiler.isGhc && (compiler.version).eq "8.6.3"
then [ "autogen/863" ]
else if compiler.isGhc && (compiler.version).eq "8.6.4"
then [ "autogen/864" ]
else [ "autogen" ]);
includeDirs = [
"compiler"
"compiler/parser"
"compiler/utils"
"includes"
"autogen"
];
};
};
} // rec { src = (pkgs.lib).mkDefault ../lib/ghc-api-ghcjs; }

View File

@ -0,0 +1,101 @@
let
buildDepError = pkg:
builtins.throw ''
The Haskell package set does not contain the package: ${pkg} (build dependency).
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
sysDepError = pkg:
builtins.throw ''
The Nixpkgs package set does not contain the package: ${pkg} (system dependency).
You may need to augment the system package mapping in haskell.nix so that it can be found.
'';
pkgConfDepError = pkg:
builtins.throw ''
The pkg-conf packages does not contain the package: ${pkg} (pkg-conf dependency).
You may need to augment the pkg-conf package mapping in haskell.nix so that it can be found.
'';
exeDepError = pkg:
builtins.throw ''
The local executable components do not include the component: ${pkg} (executable dependency).
'';
legacyExeDepError = pkg:
builtins.throw ''
The Haskell package set does not contain the package: ${pkg} (executable dependency).
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
buildToolDepError = pkg:
builtins.throw ''
Neither the Haskell package set or the Nixpkgs package set contain the package: ${pkg} (build tool dependency).
If this is a system dependency:
You may need to augment the system package mapping in haskell.nix so that it can be found.
If this is a Haskell dependency:
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
in { system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
{
flags = { ghci = true; };
package = {
specVersion = "1.10";
identifier = { name = "ghci-ghcjs"; version = "8.6.1"; };
license = "BSD-3-Clause";
copyright = "";
maintainer = "ghc-devs@haskell.org";
author = "";
homepage = "";
url = "";
synopsis = "The library supporting GHC's interactive interpreter (customized for GHCJS)";
description = "This library offers interfaces which mediate interactions between the\n@ghci@ interactive shell and @iserv@, GHC's out-of-process interpreter\nbackend.";
buildType = "Simple";
isLocal = true;
detailLevel = "FullDetails";
licenseFiles = [ "LICENSE" ];
dataDir = "";
dataFiles = [];
extraSrcFiles = [ "changelog.md" ];
extraTmpFiles = [];
extraDocFiles = [];
};
components = {
"library" = {
depends = [
(hsPkgs."array" or (buildDepError "array"))
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."binary" or (buildDepError "binary"))
(hsPkgs."bytestring" or (buildDepError "bytestring"))
(hsPkgs."containers" or (buildDepError "containers"))
(hsPkgs."deepseq" or (buildDepError "deepseq"))
(hsPkgs."filepath" or (buildDepError "filepath"))
(hsPkgs."ghc-boot" or (buildDepError "ghc-boot"))
(hsPkgs."ghc-boot-th" or (buildDepError "ghc-boot-th"))
(hsPkgs."ghc-heap" or (buildDepError "ghc-heap"))
(hsPkgs."template-haskell-ghcjs" or (buildDepError "template-haskell-ghcjs"))
(hsPkgs."transformers" or (buildDepError "transformers"))
] ++ (pkgs.lib).optional (!system.isWindows) (hsPkgs."unix" or (buildDepError "unix"));
buildable = true;
modules = [
"GHCi/BreakArray"
"GHCi/BinaryArray"
"GHCi/Message"
"GHCi/ResolvedBCO"
"GHCi/RemoteTypes"
"GHCi/FFI"
"GHCi/InfoTable"
"GHCi/StaticPtrTable"
"GHCi/TH/Binary"
"SizedSeq"
] ++ (pkgs.lib).optionals (flags.ghci) [
"GHCi/Run"
"GHCi/CreateBCO"
"GHCi/ObjLink"
"GHCi/Signals"
"GHCi/TH"
];
};
};
} // rec { src = (pkgs.lib).mkDefault ../lib/ghci-ghcjs; }

View File

@ -0,0 +1,89 @@
let
buildDepError = pkg:
builtins.throw ''
The Haskell package set does not contain the package: ${pkg} (build dependency).
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
sysDepError = pkg:
builtins.throw ''
The Nixpkgs package set does not contain the package: ${pkg} (system dependency).
You may need to augment the system package mapping in haskell.nix so that it can be found.
'';
pkgConfDepError = pkg:
builtins.throw ''
The pkg-conf packages does not contain the package: ${pkg} (pkg-conf dependency).
You may need to augment the pkg-conf package mapping in haskell.nix so that it can be found.
'';
exeDepError = pkg:
builtins.throw ''
The local executable components do not include the component: ${pkg} (executable dependency).
'';
legacyExeDepError = pkg:
builtins.throw ''
The Haskell package set does not contain the package: ${pkg} (executable dependency).
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
buildToolDepError = pkg:
builtins.throw ''
Neither the Haskell package set or the Nixpkgs package set contain the package: ${pkg} (build tool dependency).
If this is a system dependency:
You may need to augment the system package mapping in haskell.nix so that it can be found.
If this is a Haskell dependency:
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
in { system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
{
flags = { use-host-template-haskell = false; };
package = {
specVersion = "1.10";
identifier = { name = "ghcjs-th"; version = "0.1.0.0"; };
license = "MIT";
copyright = "";
maintainer = "stegeman@gmail.com";
author = "Luite Stegeman";
homepage = "http://github.com/ghcjs";
url = "";
synopsis = "";
description = "";
buildType = "Simple";
isLocal = true;
detailLevel = "FullDetails";
licenseFiles = [ "LICENSE" ];
dataDir = "";
dataFiles = [];
extraSrcFiles = [];
extraTmpFiles = [];
extraDocFiles = [];
};
components = {
"library" = {
depends = [
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."ghc-prim" or (buildDepError "ghc-prim"))
(hsPkgs."binary" or (buildDepError "binary"))
(hsPkgs."bytestring" or (buildDepError "bytestring"))
(hsPkgs."containers" or (buildDepError "containers"))
] ++ (if compiler.isGhcjs && true || flags.use-host-template-haskell
then [
(hsPkgs."template-haskell" or (buildDepError "template-haskell"))
(hsPkgs."ghci" or (buildDepError "ghci"))
]
else [
(hsPkgs."template-haskell-ghcjs" or (buildDepError "template-haskell-ghcjs"))
(hsPkgs."ghci-ghcjs" or (buildDepError "ghci-ghcjs"))
]);
buildable = true;
modules = [
"GHCJS/Prim/TH/Eval"
"GHCJS/Prim/TH/Serialized"
"GHCJS/Prim/TH/Types"
];
};
};
} // rec { src = (pkgs.lib).mkDefault ../lib/ghcjs-th; }

View File

@ -0,0 +1,362 @@
let
buildDepError = pkg:
builtins.throw ''
The Haskell package set does not contain the package: ${pkg} (build dependency).
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
sysDepError = pkg:
builtins.throw ''
The Nixpkgs package set does not contain the package: ${pkg} (system dependency).
You may need to augment the system package mapping in haskell.nix so that it can be found.
'';
pkgConfDepError = pkg:
builtins.throw ''
The pkg-conf packages does not contain the package: ${pkg} (pkg-conf dependency).
You may need to augment the pkg-conf package mapping in haskell.nix so that it can be found.
'';
exeDepError = pkg:
builtins.throw ''
The local executable components do not include the component: ${pkg} (executable dependency).
'';
legacyExeDepError = pkg:
builtins.throw ''
The Haskell package set does not contain the package: ${pkg} (executable dependency).
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
buildToolDepError = pkg:
builtins.throw ''
Neither the Haskell package set or the Nixpkgs package set contain the package: ${pkg} (build tool dependency).
If this is a system dependency:
You may need to augment the system package mapping in haskell.nix so that it can be found.
If this is a Haskell dependency:
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
in { system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
{
flags = {
compiler-only = false;
no-wrapper-install = false;
disable-optimizer = false;
runtime-assertions = false;
use-host-template-haskell = false;
};
package = {
specVersion = "2.0";
identifier = { name = "ghcjs"; version = "8.6.5"; };
license = "MIT";
copyright = "Victor Nazarov, Hamish Mackenzie, Luite Stegeman";
maintainer = "Luite Stegeman <stegeman@gmail.com>";
author = "Victor Nazarov, Hamish Mackenzie, Luite Stegeman";
homepage = "";
url = "";
synopsis = "Haskell to JavaScript compiler";
description = "Haskell to JavaScript compiler based on GHC";
buildType = "Custom";
isLocal = true;
setup-depends = [
(hsPkgs.buildPackages.base or (pkgs.buildPackages.base or (buildToolDepError "base")))
(hsPkgs.buildPackages.Cabal or (pkgs.buildPackages.Cabal or (buildToolDepError "Cabal")))
(hsPkgs.buildPackages.containers or (pkgs.buildPackages.containers or (buildToolDepError "containers")))
(hsPkgs.buildPackages.filepath or (pkgs.buildPackages.filepath or (buildToolDepError "filepath")))
(hsPkgs.buildPackages.directory or (pkgs.buildPackages.directory or (buildToolDepError "directory")))
(hsPkgs.buildPackages.process or (pkgs.buildPackages.process or (buildToolDepError "process")))
(hsPkgs.buildPackages.template-haskell or (pkgs.buildPackages.template-haskell or (buildToolDepError "template-haskell")))
(hsPkgs.buildPackages.transformers or (pkgs.buildPackages.transformers or (buildToolDepError "transformers")))
];
detailLevel = "FullDetails";
licenseFiles = [ "LICENSE" ];
dataDir = "data";
dataFiles = [ "*.tar" "bin/*.sh" "bin/*.exe.options" ];
extraSrcFiles = [
"utils/*.hs"
"utils/*.sh"
"include/prim/*.hs-incl"
"include/prim/*.txt"
"include/*.h"
"src-bin/haddock/*.hs"
"HACKING.markdown"
"README.markdown"
"test/LICENSE"
"test/ghcjs-testsuite.cabal"
"stack.yaml"
];
extraTmpFiles = [];
extraDocFiles = [];
};
components = {
"library" = {
depends = [
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."Cabal" or (buildDepError "Cabal"))
(hsPkgs."ghc-api-ghcjs" or (buildDepError "ghc-api-ghcjs"))
(hsPkgs."ghcjs-th" or (buildDepError "ghcjs-th"))
(hsPkgs."ghc-boot" or (buildDepError "ghc-boot"))
(hsPkgs."directory" or (buildDepError "directory"))
(hsPkgs."filepath" or (buildDepError "filepath"))
(hsPkgs."containers" or (buildDepError "containers"))
(hsPkgs."process" or (buildDepError "process"))
(hsPkgs."mtl" or (buildDepError "mtl"))
(hsPkgs."ghc-paths" or (buildDepError "ghc-paths"))
(hsPkgs."template-haskell" or (buildDepError "template-haskell"))
(hsPkgs."syb" or (buildDepError "syb"))
(hsPkgs."bytestring" or (buildDepError "bytestring"))
(hsPkgs."attoparsec" or (buildDepError "attoparsec"))
(hsPkgs."aeson" or (buildDepError "aeson"))
(hsPkgs."text" or (buildDepError "text"))
(hsPkgs."wl-pprint-text" or (buildDepError "wl-pprint-text"))
(hsPkgs."lens" or (buildDepError "lens"))
(hsPkgs."yaml" or (buildDepError "yaml"))
(hsPkgs."time" or (buildDepError "time"))
(hsPkgs."transformers" or (buildDepError "transformers"))
(hsPkgs."split" or (buildDepError "split"))
(hsPkgs."deepseq" or (buildDepError "deepseq"))
(hsPkgs."vector" or (buildDepError "vector"))
(hsPkgs."data-default" or (buildDepError "data-default"))
(hsPkgs."array" or (buildDepError "array"))
(hsPkgs."binary" or (buildDepError "binary"))
(hsPkgs."unordered-containers" or (buildDepError "unordered-containers"))
(hsPkgs."parallel" or (buildDepError "parallel"))
(hsPkgs."cryptohash" or (buildDepError "cryptohash"))
(hsPkgs."hashable" or (buildDepError "hashable"))
(hsPkgs."optparse-applicative" or (buildDepError "optparse-applicative"))
(hsPkgs."stringsearch" or (buildDepError "stringsearch"))
(hsPkgs."base16-bytestring" or (buildDepError "base16-bytestring"))
(hsPkgs."base64-bytestring" or (buildDepError "base64-bytestring"))
(hsPkgs."regex-posix" or (buildDepError "regex-posix"))
(hsPkgs."safe" or (buildDepError "safe"))
(hsPkgs."parsec" or (buildDepError "parsec"))
(hsPkgs."haskell-src-exts" or (buildDepError "haskell-src-exts"))
(hsPkgs."haskell-src-meta" or (buildDepError "haskell-src-meta"))
] ++ (if flags.use-host-template-haskell
then [ (hsPkgs."ghci" or (buildDepError "ghci")) ]
else [
(hsPkgs."template-haskell-ghcjs" or (buildDepError "template-haskell-ghcjs"))
(hsPkgs."ghci-ghcjs" or (buildDepError "ghci-ghcjs"))
]);
buildable = true;
modules = [
"Paths_ghcjs"
"Gen2/Generator"
"Gen2/Profiling"
"Gen2/Floater"
"Gen2/Prim"
"Gen2/Rts"
"Gen2/RtsApply"
"Gen2/RtsTypes"
"Gen2/RtsAlloc"
"Gen2/Utils"
"Gen2/StgAst"
"Gen2/Optimizer"
"Gen2/Dataflow"
"Gen2/Deps"
"Gen2/Printer"
"Gen2/Linker"
"Gen2/Shim"
"Gen2/Compactor"
"Gen2/Object"
"Gen2/Archive"
"Gen2/ClosureInfo"
"Gen2/Foreign"
"Gen2/Sinker"
"Gen2/TH"
"Gen2/Base"
"Gen2/Cache"
"Gen2/DynamicLinking"
"Gen2/GHC/Digraph"
"Gen2/GHC/DsForeign"
"Compiler/Compat"
"Compiler/GhcjsHooks"
"Compiler/GhcjsPlatform"
"Compiler/Info"
"Compiler/Plugins"
"Compiler/Program"
"Compiler/GhcjsProgram"
"Compiler/Settings"
"Compiler/Utils"
"Compiler/Variants"
"Compiler/JMacro"
"Compiler/JMacro/Base"
"Compiler/JMacro/Lens"
"Compiler/JMacro/QQ"
"Compiler/JMacro/ParseTH"
"Compiler/JMacro/Util"
"GHCJS"
];
hsSourceDirs = [ "src" ];
includeDirs = [ "include" ];
};
exes = {
"ghcjs" = {
depends = [
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."ghcjs" or (buildDepError "ghcjs"))
];
buildable = true;
hsSourceDirs = [ "src-bin" ];
mainPath = [ "Main.hs" ];
};
"haddock-ghcjs" = {
depends = [
(hsPkgs."ghc-api-ghcjs" or (buildDepError "ghc-api-ghcjs"))
(hsPkgs."haddock-api-ghcjs" or (buildDepError "haddock-api-ghcjs"))
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."process" or (buildDepError "process"))
(hsPkgs."transformers" or (buildDepError "transformers"))
(hsPkgs."transformers-compat" or (buildDepError "transformers-compat"))
(hsPkgs."containers" or (buildDepError "containers"))
(hsPkgs."directory" or (buildDepError "directory"))
(hsPkgs."filepath" or (buildDepError "filepath"))
(hsPkgs."ghcjs" or (buildDepError "ghcjs"))
];
buildable = true;
modules = [ "ResponseFile" ];
hsSourceDirs = [ "src-bin" "src-bin/haddock" ];
mainPath = [
"Haddock.hs"
] ++ (pkgs.lib).optional (system.isWindows) "";
};
"hsc2hs-ghcjs" = {
depends = [
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."ghcjs" or (buildDepError "ghcjs"))
(hsPkgs."process" or (buildDepError "process"))
];
buildable = true;
hsSourceDirs = [ "src-bin" ];
mainPath = [
"Hsc2Hs.hs"
] ++ (pkgs.lib).optional (system.isWindows) "";
};
"ghcjs-pkg" = {
depends = [
(hsPkgs."ghcjs" or (buildDepError "ghcjs"))
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."directory" or (buildDepError "directory"))
(hsPkgs."process" or (buildDepError "process"))
(hsPkgs."filepath" or (buildDepError "filepath"))
(hsPkgs."containers" or (buildDepError "containers"))
(hsPkgs."Cabal" or (buildDepError "Cabal"))
(hsPkgs."binary" or (buildDepError "binary"))
(hsPkgs."bytestring" or (buildDepError "bytestring"))
(hsPkgs."ghc-boot" or (buildDepError "ghc-boot"))
] ++ (pkgs.lib).optionals (!system.isWindows) [
(hsPkgs."unix" or (buildDepError "unix"))
(hsPkgs."terminfo" or (buildDepError "terminfo"))
];
buildable = if flags.compiler-only then false else true;
cSources = (pkgs.lib).optional (system.isWindows) "cbits/CRT_noglob.c";
hsSourceDirs = [ "src-bin" ];
mainPath = (([
"Pkg.hs"
] ++ (pkgs.lib).optional (flags.compiler-only) "") ++ (pkgs.lib).optional (!system.isWindows) "") ++ (pkgs.lib).optional (system.isWindows) "";
};
"ghcjs-boot" = {
depends = [
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."ghcjs" or (buildDepError "ghcjs"))
(hsPkgs."directory" or (buildDepError "directory"))
(hsPkgs."Cabal" or (buildDepError "Cabal"))
(hsPkgs."mtl" or (buildDepError "mtl"))
(hsPkgs."transformers" or (buildDepError "transformers"))
(hsPkgs."lens" or (buildDepError "lens"))
(hsPkgs."unordered-containers" or (buildDepError "unordered-containers"))
(hsPkgs."vector" or (buildDepError "vector"))
(hsPkgs."filepath" or (buildDepError "filepath"))
(hsPkgs."aeson" or (buildDepError "aeson"))
(hsPkgs."text" or (buildDepError "text"))
(hsPkgs."bytestring" or (buildDepError "bytestring"))
(hsPkgs."system-filepath" or (buildDepError "system-filepath"))
(hsPkgs."shelly" or (buildDepError "shelly"))
(hsPkgs."system-fileio" or (buildDepError "system-fileio"))
(hsPkgs."optparse-applicative" or (buildDepError "optparse-applicative"))
(hsPkgs."tar" or (buildDepError "tar"))
(hsPkgs."yaml" or (buildDepError "yaml"))
(hsPkgs."process" or (buildDepError "process"))
(hsPkgs."time" or (buildDepError "time"))
(hsPkgs."unix-compat" or (buildDepError "unix-compat"))
(hsPkgs."executable-path" or (buildDepError "executable-path"))
];
buildable = if flags.compiler-only then false else true;
hsSourceDirs = [ "src-bin" ];
mainPath = ([
"Boot.hs"
] ++ (pkgs.lib).optional (flags.compiler-only) "") ++ (pkgs.lib).optional (system.isWindows) "";
};
"ghcjs-run" = {
depends = [
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."directory" or (buildDepError "directory"))
(hsPkgs."process" or (buildDepError "process"))
(hsPkgs."filepath" or (buildDepError "filepath"))
];
buildable = if flags.compiler-only then false else true;
hsSourceDirs = [ "src-bin" ];
mainPath = ([
"Run.hs"
] ++ (pkgs.lib).optional (flags.compiler-only) "") ++ (pkgs.lib).optional (system.isWindows) "";
};
"ghcjs-dumparchive" = {
depends = [
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."text" or (buildDepError "text"))
(hsPkgs."ghc-api-ghcjs" or (buildDepError "ghc-api-ghcjs"))
(hsPkgs."ghcjs" or (buildDepError "ghcjs"))
(hsPkgs."bytestring" or (buildDepError "bytestring"))
(hsPkgs."filepath" or (buildDepError "filepath"))
];
buildable = if flags.compiler-only then false else true;
hsSourceDirs = [ "utils" ];
mainPath = ([
"dumpArchive.hs"
] ++ (pkgs.lib).optional (flags.compiler-only) "") ++ (pkgs.lib).optional (system.isWindows) "";
};
};
tests = {
"test" = {
depends = [
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."process" or (buildDepError "process"))
(hsPkgs."network" or (buildDepError "network"))
(hsPkgs."aeson" or (buildDepError "aeson"))
(hsPkgs."test-framework" or (buildDepError "test-framework"))
(hsPkgs."test-framework-hunit" or (buildDepError "test-framework-hunit"))
(hsPkgs."HUnit" or (buildDepError "HUnit"))
(hsPkgs."system-filepath" or (buildDepError "system-filepath"))
(hsPkgs."system-fileio" or (buildDepError "system-fileio"))
(hsPkgs."text" or (buildDepError "text"))
(hsPkgs."transformers" or (buildDepError "transformers"))
(hsPkgs."lens" or (buildDepError "lens"))
(hsPkgs."random" or (buildDepError "random"))
(hsPkgs."time" or (buildDepError "time"))
(hsPkgs."bytestring" or (buildDepError "bytestring"))
(hsPkgs."deepseq" or (buildDepError "deepseq"))
(hsPkgs."unordered-containers" or (buildDepError "unordered-containers"))
(hsPkgs."shelly" or (buildDepError "shelly"))
(hsPkgs."data-default" or (buildDepError "data-default"))
(hsPkgs."yaml" or (buildDepError "yaml"))
(hsPkgs."optparse-applicative" or (buildDepError "optparse-applicative"))
(hsPkgs."directory" or (buildDepError "directory"))
(hsPkgs."http-types" or (buildDepError "http-types"))
(hsPkgs."warp" or (buildDepError "warp"))
(hsPkgs."wai" or (buildDepError "wai"))
(hsPkgs."wai-extra" or (buildDepError "wai-extra"))
(hsPkgs."wai-app-static" or (buildDepError "wai-app-static"))
(hsPkgs."wai-websockets" or (buildDepError "wai-websockets"))
(hsPkgs."websockets" or (buildDepError "websockets"))
(hsPkgs."webdriver" or (buildDepError "webdriver"))
(hsPkgs."lifted-base" or (buildDepError "lifted-base"))
];
buildable = true;
modules = [ "Server" "Client" "Types" ];
hsSourceDirs = [ "test" ];
mainPath = [ "TestRunner.hs" ];
};
};
};
} // rec { src = (pkgs.lib).mkDefault ../.; }

View File

@ -0,0 +1,215 @@
let
buildDepError = pkg:
builtins.throw ''
The Haskell package set does not contain the package: ${pkg} (build dependency).
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
sysDepError = pkg:
builtins.throw ''
The Nixpkgs package set does not contain the package: ${pkg} (system dependency).
You may need to augment the system package mapping in haskell.nix so that it can be found.
'';
pkgConfDepError = pkg:
builtins.throw ''
The pkg-conf packages does not contain the package: ${pkg} (pkg-conf dependency).
You may need to augment the pkg-conf package mapping in haskell.nix so that it can be found.
'';
exeDepError = pkg:
builtins.throw ''
The local executable components do not include the component: ${pkg} (executable dependency).
'';
legacyExeDepError = pkg:
builtins.throw ''
The Haskell package set does not contain the package: ${pkg} (executable dependency).
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
buildToolDepError = pkg:
builtins.throw ''
Neither the Haskell package set or the Nixpkgs package set contain the package: ${pkg} (build tool dependency).
If this is a system dependency:
You may need to augment the system package mapping in haskell.nix so that it can be found.
If this is a Haskell dependency:
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
in { system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
{
flags = {};
package = {
specVersion = "2.0";
identifier = { name = "haddock-api-ghcjs"; version = "2.20.0"; };
license = "BSD-3-Clause";
copyright = "(c) Simon Marlow, David Waern";
maintainer = "Alex Biehl <alexbiehl@gmail.com>, Simon Hengel <sol@typeful.net>, Mateusz Kowalczyk <fuuzetsu@fuuzetsu.co.uk>";
author = "Simon Marlow, David Waern";
homepage = "http://www.haskell.org/haddock/";
url = "";
synopsis = "A documentation-generation tool for Haskell libraries";
description = "Haddock is a documentation-generation tool for Haskell\nlibraries";
buildType = "Simple";
isLocal = true;
detailLevel = "FullDetails";
licenseFiles = [ "LICENSE" ];
dataDir = "resources";
dataFiles = [
"html/quick-jump.min.js"
"html/haddock-bundle.min.js"
"html/quick-jump.css"
"html/solarized.css"
"html/highlight.js"
"html/Classic.theme/haskell_icon.gif"
"html/Classic.theme/minus.gif"
"html/Classic.theme/plus.gif"
"html/Classic.theme/xhaddock.css"
"html/Ocean.std-theme/hslogo-16.png"
"html/Ocean.std-theme/minus.gif"
"html/Ocean.std-theme/ocean.css"
"html/Ocean.std-theme/plus.gif"
"html/Ocean.std-theme/synopsis.png"
"latex/haddock.sty"
];
extraSrcFiles = [ "CHANGES.md" ];
extraTmpFiles = [];
extraDocFiles = [];
};
components = {
"library" = {
depends = [
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."Cabal" or (buildDepError "Cabal"))
(hsPkgs."ghc-api-ghcjs" or (buildDepError "ghc-api-ghcjs"))
(hsPkgs."ghc-paths" or (buildDepError "ghc-paths"))
(hsPkgs."haddock-library-ghcjs" or (buildDepError "haddock-library-ghcjs"))
(hsPkgs."xhtml" or (buildDepError "xhtml"))
(hsPkgs."array" or (buildDepError "array"))
(hsPkgs."bytestring" or (buildDepError "bytestring"))
(hsPkgs."containers" or (buildDepError "containers"))
(hsPkgs."deepseq" or (buildDepError "deepseq"))
(hsPkgs."directory" or (buildDepError "directory"))
(hsPkgs."filepath" or (buildDepError "filepath"))
(hsPkgs."ghc-boot" or (buildDepError "ghc-boot"))
(hsPkgs."transformers" or (buildDepError "transformers"))
];
buildable = true;
modules = [
"Haddock"
"Haddock/Interface"
"Haddock/Interface/Rename"
"Haddock/Interface/Create"
"Haddock/Interface/AttachInstances"
"Haddock/Interface/Json"
"Haddock/Interface/LexParseRn"
"Haddock/Interface/ParseModuleHeader"
"Haddock/Interface/Specialize"
"Haddock/Parser"
"Haddock/Utils"
"Haddock/Utils/Json"
"Haddock/Backends/Xhtml"
"Haddock/Backends/Xhtml/Decl"
"Haddock/Backends/Xhtml/DocMarkup"
"Haddock/Backends/Xhtml/Layout"
"Haddock/Backends/Xhtml/Meta"
"Haddock/Backends/Xhtml/Names"
"Haddock/Backends/Xhtml/Themes"
"Haddock/Backends/Xhtml/Types"
"Haddock/Backends/Xhtml/Utils"
"Haddock/Backends/LaTeX"
"Haddock/Backends/HaddockDB"
"Haddock/Backends/Hoogle"
"Haddock/Backends/Hyperlinker"
"Haddock/Backends/Hyperlinker/Ast"
"Haddock/Backends/Hyperlinker/Parser"
"Haddock/Backends/Hyperlinker/Renderer"
"Haddock/Backends/Hyperlinker/Types"
"Haddock/Backends/Hyperlinker/Utils"
"Haddock/ModuleTree"
"Haddock/Types"
"Haddock/Doc"
"Haddock/Version"
"Haddock/InterfaceFile"
"Haddock/Options"
"Haddock/GhcUtils"
"Haddock/Syb"
"Haddock/Convert"
"Paths_haddock_api_ghcjs"
"Documentation/Haddock"
];
hsSourceDirs = [ "src" ];
};
tests = {
"spec" = {
depends = [
(hsPkgs."Cabal" or (buildDepError "Cabal"))
(hsPkgs."ghc-api-ghcjs" or (buildDepError "ghc-api-ghcjs"))
(hsPkgs."ghc-paths" or (buildDepError "ghc-paths"))
(hsPkgs."haddock-library-ghcjs" or (buildDepError "haddock-library-ghcjs"))
(hsPkgs."xhtml" or (buildDepError "xhtml"))
(hsPkgs."hspec" or (buildDepError "hspec"))
(hsPkgs."QuickCheck" or (buildDepError "QuickCheck"))
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."array" or (buildDepError "array"))
(hsPkgs."bytestring" or (buildDepError "bytestring"))
(hsPkgs."containers" or (buildDepError "containers"))
(hsPkgs."deepseq" or (buildDepError "deepseq"))
(hsPkgs."directory" or (buildDepError "directory"))
(hsPkgs."filepath" or (buildDepError "filepath"))
(hsPkgs."ghc-boot" or (buildDepError "ghc-boot"))
(hsPkgs."transformers" or (buildDepError "transformers"))
];
build-tools = [
(hsPkgs.buildPackages.hspec-discover or (pkgs.buildPackages.hspec-discover or (buildToolDepError "hspec-discover")))
];
buildable = true;
modules = [
"Haddock"
"Haddock/Backends/Hoogle"
"Haddock/Backends/Hyperlinker"
"Haddock/Backends/Hyperlinker/Ast"
"Haddock/Backends/Hyperlinker/Renderer"
"Haddock/Backends/Hyperlinker/Utils"
"Haddock/Backends/LaTeX"
"Haddock/Backends/Xhtml"
"Haddock/Backends/Xhtml/Decl"
"Haddock/Backends/Xhtml/DocMarkup"
"Haddock/Backends/Xhtml/Layout"
"Haddock/Backends/Xhtml/Meta"
"Haddock/Backends/Xhtml/Names"
"Haddock/Backends/Xhtml/Themes"
"Haddock/Backends/Xhtml/Types"
"Haddock/Backends/Xhtml/Utils"
"Haddock/Convert"
"Haddock/Doc"
"Haddock/GhcUtils"
"Haddock/Interface"
"Haddock/Interface/AttachInstances"
"Haddock/Interface/Create"
"Haddock/Interface/Json"
"Haddock/Interface/LexParseRn"
"Haddock/Interface/ParseModuleHeader"
"Haddock/Interface/Rename"
"Haddock/Interface/Specialize"
"Haddock/InterfaceFile"
"Haddock/ModuleTree"
"Haddock/Options"
"Haddock/Parser"
"Haddock/Syb"
"Haddock/Types"
"Haddock/Utils"
"Haddock/Utils/Json"
"Haddock/Version"
"Paths_haddock_api_ghcjs"
"Haddock/Backends/Hyperlinker/ParserSpec"
"Haddock/Backends/Hyperlinker/Parser"
"Haddock/Backends/Hyperlinker/Types"
];
hsSourceDirs = [ "test" "src" ];
mainPath = [ "Spec.hs" ];
};
};
};
} // rec { src = (pkgs.lib).mkDefault ../lib/haddock-api-ghcjs; }

View File

@ -0,0 +1,134 @@
let
buildDepError = pkg:
builtins.throw ''
The Haskell package set does not contain the package: ${pkg} (build dependency).
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
sysDepError = pkg:
builtins.throw ''
The Nixpkgs package set does not contain the package: ${pkg} (system dependency).
You may need to augment the system package mapping in haskell.nix so that it can be found.
'';
pkgConfDepError = pkg:
builtins.throw ''
The pkg-conf packages does not contain the package: ${pkg} (pkg-conf dependency).
You may need to augment the pkg-conf package mapping in haskell.nix so that it can be found.
'';
exeDepError = pkg:
builtins.throw ''
The local executable components do not include the component: ${pkg} (executable dependency).
'';
legacyExeDepError = pkg:
builtins.throw ''
The Haskell package set does not contain the package: ${pkg} (executable dependency).
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
buildToolDepError = pkg:
builtins.throw ''
Neither the Haskell package set or the Nixpkgs package set contain the package: ${pkg} (build tool dependency).
If this is a system dependency:
You may need to augment the system package mapping in haskell.nix so that it can be found.
If this is a Haskell dependency:
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
in { system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
{
flags = {};
package = {
specVersion = "2.0";
identifier = { name = "haddock-library-ghcjs"; version = "1.6.0"; };
license = "BSD-3-Clause";
copyright = "";
maintainer = "Alex Biehl <alexbiehl@gmail.com>, Simon Hengel <sol@typeful.net>, Mateusz Kowalczyk <fuuzetsu@fuuzetsu.co.uk>";
author = "";
homepage = "http://www.haskell.org/haddock/";
url = "";
synopsis = "Library exposing some functionality of Haddock.";
description = "Haddock is a documentation-generation tool for Haskell\nlibraries. These modules expose some functionality of it\nwithout pulling in the GHC dependency. Please note that the\nAPI is likely to change so specify upper bounds in your\nproject if you can't release often. For interacting with Haddock\nitself, see the haddock package.";
buildType = "Simple";
isLocal = true;
detailLevel = "FullDetails";
licenseFiles = [ "LICENSE" ];
dataDir = "";
dataFiles = [];
extraSrcFiles = [ "CHANGES.md" ];
extraTmpFiles = [];
extraDocFiles = [];
};
components = {
"library" = {
depends = [
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."bytestring" or (buildDepError "bytestring"))
(hsPkgs."containers" or (buildDepError "containers"))
(hsPkgs."transformers" or (buildDepError "transformers"))
(hsPkgs."text" or (buildDepError "text"))
(hsPkgs."parsec" or (buildDepError "parsec"))
];
buildable = true;
modules = [
"Documentation/Haddock/Parser/Util"
"Documentation/Haddock/Doc"
"Documentation/Haddock/Markup"
"Documentation/Haddock/Parser"
"Documentation/Haddock/Parser/Monad"
"Documentation/Haddock/Types"
"Documentation/Haddock/Utf8"
];
hsSourceDirs = [ "src" ];
};
tests = {
"spec" = {
depends = [
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."base-compat" or (buildDepError "base-compat"))
(hsPkgs."bytestring" or (buildDepError "bytestring"))
(hsPkgs."containers" or (buildDepError "containers"))
(hsPkgs."transformers" or (buildDepError "transformers"))
(hsPkgs."hspec" or (buildDepError "hspec"))
(hsPkgs."QuickCheck" or (buildDepError "QuickCheck"))
(hsPkgs."text" or (buildDepError "text"))
(hsPkgs."parsec" or (buildDepError "parsec"))
(hsPkgs."deepseq" or (buildDepError "deepseq"))
];
build-tools = [
(hsPkgs.buildPackages.hspec-discover or (pkgs.buildPackages.hspec-discover or (buildToolDepError "hspec-discover")))
];
buildable = true;
modules = [
"Documentation/Haddock/Doc"
"Documentation/Haddock/Parser"
"Documentation/Haddock/Parser/Monad"
"Documentation/Haddock/Parser/Util"
"Documentation/Haddock/Parser/UtilSpec"
"Documentation/Haddock/ParserSpec"
"Documentation/Haddock/Types"
"Documentation/Haddock/Utf8"
"Documentation/Haddock/Utf8Spec"
];
hsSourceDirs = [ "test" "src" ];
mainPath = [ "Spec.hs" ];
};
"fixtures" = {
depends = [
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."base-compat" or (buildDepError "base-compat"))
(hsPkgs."directory" or (buildDepError "directory"))
(hsPkgs."filepath" or (buildDepError "filepath"))
(hsPkgs."optparse-applicative" or (buildDepError "optparse-applicative"))
(hsPkgs."tree-diff" or (buildDepError "tree-diff"))
(hsPkgs."haddock-library" or (buildDepError "haddock-library"))
];
buildable = true;
hsSourceDirs = [ "fixtures" ];
mainPath = [ "Fixtures.hs" ];
};
};
};
} // rec { src = (pkgs.lib).mkDefault ../lib/haddock-library-ghcjs; }

View File

@ -0,0 +1,85 @@
let
buildDepError = pkg:
builtins.throw ''
The Haskell package set does not contain the package: ${pkg} (build dependency).
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
sysDepError = pkg:
builtins.throw ''
The Nixpkgs package set does not contain the package: ${pkg} (system dependency).
You may need to augment the system package mapping in haskell.nix so that it can be found.
'';
pkgConfDepError = pkg:
builtins.throw ''
The pkg-conf packages does not contain the package: ${pkg} (pkg-conf dependency).
You may need to augment the pkg-conf package mapping in haskell.nix so that it can be found.
'';
exeDepError = pkg:
builtins.throw ''
The local executable components do not include the component: ${pkg} (executable dependency).
'';
legacyExeDepError = pkg:
builtins.throw ''
The Haskell package set does not contain the package: ${pkg} (executable dependency).
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
buildToolDepError = pkg:
builtins.throw ''
Neither the Haskell package set or the Nixpkgs package set contain the package: ${pkg} (build tool dependency).
If this is a system dependency:
You may need to augment the system package mapping in haskell.nix so that it can be found.
If this is a Haskell dependency:
If you are using Stackage, make sure that you are using a snapshot that contains the package. Otherwise you may need to update the Hackage snapshot you are using, usually by updating haskell.nix.
'';
in { system, compiler, flags, pkgs, hsPkgs, pkgconfPkgs, ... }:
{
flags = {};
package = {
specVersion = "1.10";
identifier = { name = "template-haskell-ghcjs"; version = "2.14.0.0"; };
license = "BSD-3-Clause";
copyright = "";
maintainer = "libraries@haskell.org";
author = "";
homepage = "";
url = "";
synopsis = "Support library for Template Haskell (customized for GHCJS)";
description = "This package provides modules containing facilities for manipulating\nHaskell source code using Template Haskell.\n\nSee <http://www.haskell.org/haskellwiki/Template_Haskell> for more\ninformation.";
buildType = "Simple";
isLocal = true;
detailLevel = "FullDetails";
licenseFiles = [ "LICENSE" ];
dataDir = "";
dataFiles = [];
extraSrcFiles = [ "changelog.md" ];
extraTmpFiles = [];
extraDocFiles = [];
};
components = {
"library" = {
depends = [
(hsPkgs."base" or (buildDepError "base"))
(hsPkgs."ghc-boot-th" or (buildDepError "ghc-boot-th"))
(hsPkgs."pretty" or (buildDepError "pretty"))
];
buildable = true;
modules = [
"Language/Haskell/TH/Lib/Map"
"Language/Haskell/TH"
"Language/Haskell/TH/Lib"
"Language/Haskell/TH/Ppr"
"Language/Haskell/TH/PprLib"
"Language/Haskell/TH/Quote"
"Language/Haskell/TH/Syntax"
"Language/Haskell/TH/LanguageExtensions"
"Language/Haskell/TH/Lib/Internal"
];
};
};
} // rec { src = (pkgs.lib).mkDefault ../lib/template-haskell-ghcjs; }

View File

@ -0,0 +1,413 @@
{
pkgs = hackage:
{
packages = {
"warp".revision = (((hackage."warp")."3.2.28").revisions).default;
"warp".flags.allow-sendfilefd = true;
"warp".flags.network-bytestring = false;
"warp".flags.warp-debug = false;
"test-framework-hunit".revision = (((hackage."test-framework-hunit")."0.3.0.2").revisions).default;
"test-framework-hunit".flags.base4 = true;
"test-framework-hunit".flags.base3 = false;
"http-client".revision = (((hackage."http-client")."0.6.4").revisions).default;
"http-client".flags.network-uri = true;
"haddock-library".revision = (((hackage."haddock-library")."1.8.0").revisions).default;
"wai-websockets".revision = (((hackage."wai-websockets")."3.0.1.2").revisions).default;
"wai-websockets".flags.example = true;
"cookie".revision = (((hackage."cookie")."0.4.5").revisions).default;
"void".revision = (((hackage."void")."0.7.3").revisions).default;
"void".flags.safe = false;
"semigroupoids".revision = (((hackage."semigroupoids")."5.3.4").revisions).default;
"semigroupoids".flags.comonad = true;
"semigroupoids".flags.doctests = true;
"semigroupoids".flags.unordered-containers = true;
"semigroupoids".flags.distributive = true;
"semigroupoids".flags.tagged = true;
"semigroupoids".flags.containers = true;
"semigroupoids".flags.contravariant = true;
"byteorder".revision = (((hackage."byteorder")."1.0.4").revisions).default;
"free".revision = (((hackage."free")."5.1.3").revisions).default;
"tf-random".revision = (((hackage."tf-random")."0.5").revisions).default;
"zip-archive".revision = (((hackage."zip-archive")."0.4.1").revisions).default;
"zip-archive".flags.executable = false;
"exceptions".revision = (((hackage."exceptions")."0.10.3").revisions).default;
"ghc-paths".revision = (((hackage."ghc-paths")."0.1.0.12").revisions).default;
"binary".revision = (((hackage."binary")."0.8.6.0").revisions).default;
"ghc-boot".revision = (((hackage."ghc-boot")."8.6.5").revisions).default;
"wl-pprint-text".revision = (((hackage."wl-pprint-text")."1.2.0.0").revisions).default;
"tar".revision = (((hackage."tar")."0.5.1.1").revisions).default;
"tar".flags.old-time = false;
"tar".flags.old-bytestring = false;
"ghc-prim".revision = (((hackage."ghc-prim")."0.5.3").revisions).default;
"old-time".revision = (((hackage."old-time")."1.1.0.3").revisions).default;
"bifunctors".revision = (((hackage."bifunctors")."5.5.6").revisions).default;
"bifunctors".flags.semigroups = true;
"bifunctors".flags.tagged = true;
"split".revision = (((hackage."split")."0.2.3.3").revisions).default;
"stm".revision = (((hackage."stm")."2.5.0.0").revisions).default;
"unix-time".revision = (((hackage."unix-time")."0.4.7").revisions).default;
"http2".revision = (((hackage."http2")."1.6.5").revisions).default;
"http2".flags.devel = false;
"appar".revision = (((hackage."appar")."0.1.8").revisions).default;
"case-insensitive".revision = (((hackage."case-insensitive")."1.2.1.0").revisions).default;
"network-byte-order".revision = (((hackage."network-byte-order")."0.1.2.0").revisions).default;
"sop-core".revision = (((hackage."sop-core")."0.5.0.0").revisions).default;
"extensible-exceptions".revision = (((hackage."extensible-exceptions")."0.1.1.4").revisions).default;
"unix".revision = (((hackage."unix")."2.7.2.2").revisions).default;
"SHA".revision = (((hackage."SHA")."1.6.4.4").revisions).default;
"SHA".flags.exe = false;
"ghc-heap".revision = (((hackage."ghc-heap")."8.6.5").revisions).default;
"mtl".revision = (((hackage."mtl")."2.2.2").revisions).default;
"lifted-async".revision = (((hackage."lifted-async")."0.10.0.4").revisions).default;
"network-uri".revision = (((hackage."network-uri")."2.6.1.0").revisions).default;
"regex-base".revision = (((hackage."regex-base")."0.94.0.0").revisions).default;
"zlib".revision = (((hackage."zlib")."0.6.2.1").revisions).default;
"zlib".flags.non-blocking-ffi = false;
"zlib".flags.pkg-config = false;
"rts".revision = (((hackage."rts")."1.0").revisions).default;
"easy-file".revision = (((hackage."easy-file")."0.2.2").revisions).default;
"th-expand-syns".revision = (((hackage."th-expand-syns")."0.4.5.0").revisions).default;
"regex-posix".revision = (((hackage."regex-posix")."0.96.0.0").revisions).default;
"regex-posix".flags._regex-posix-clib = false;
"cryptonite".revision = (((hackage."cryptonite")."0.26").revisions).default;
"cryptonite".flags.support_sse = false;
"cryptonite".flags.integer-gmp = true;
"cryptonite".flags.support_rdrand = true;
"cryptonite".flags.support_aesni = true;
"cryptonite".flags.support_deepseq = true;
"cryptonite".flags.support_pclmuldq = false;
"cryptonite".flags.check_alignment = false;
"cryptonite".flags.old_toolchain_inliner = false;
"alex".revision = (((hackage."alex")."3.2.5").revisions).default;
"alex".flags.small_base = true;
"clock".revision = (((hackage."clock")."0.8").revisions).default;
"clock".flags.llvm = false;
"system-fileio".revision = (((hackage."system-fileio")."0.3.16.4").revisions).default;
"adjunctions".revision = (((hackage."adjunctions")."4.4").revisions).default;
"invariant".revision = (((hackage."invariant")."0.5.3").revisions).default;
"enclosed-exceptions".revision = (((hackage."enclosed-exceptions")."1.0.3").revisions).default;
"th-orphans".revision = (((hackage."th-orphans")."0.13.9").revisions).default;
"executable-path".revision = (((hackage."executable-path")."0.0.3.1").revisions).default;
"syb".revision = (((hackage."syb")."0.7.1").revisions).default;
"distributive".revision = (((hackage."distributive")."0.6.1").revisions).default;
"distributive".flags.semigroups = true;
"distributive".flags.tagged = true;
"generics-sop".revision = (((hackage."generics-sop")."0.5.0.0").revisions).default;
"system-filepath".revision = (((hackage."system-filepath")."0.4.14").revisions).default;
"bytestring-builder".revision = (((hackage."bytestring-builder")."0.10.8.2.0").revisions).default;
"bytestring-builder".flags.bytestring_has_builder = true;
"QuickCheck".revision = (((hackage."QuickCheck")."2.13.2").revisions).default;
"QuickCheck".flags.templatehaskell = true;
"scientific".revision = (((hackage."scientific")."0.3.6.2").revisions).default;
"scientific".flags.integer-simple = false;
"scientific".flags.bytestring-builder = false;
"time-manager".revision = (((hackage."time-manager")."0.0.0").revisions).default;
"newtype-generics".revision = (((hackage."newtype-generics")."0.5.4").revisions).default;
"hspec-discover".revision = (((hackage."hspec-discover")."2.7.1").revisions).default;
"parallel".revision = (((hackage."parallel")."3.2.2.0").revisions).default;
"deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default;
"haskell-src-meta".revision = (((hackage."haskell-src-meta")."0.8.5").revisions).default;
"random".revision = (((hackage."random")."1.1").revisions).default;
"temporary".revision = (((hackage."temporary")."1.3").revisions).default;
"uuid-types".revision = (((hackage."uuid-types")."1.0.3").revisions).default;
"optparse-applicative".revision = (((hackage."optparse-applicative")."0.14.3.0").revisions).default;
"network".revision = (((hackage."network")."3.1.1.1").revisions).default;
"word8".revision = (((hackage."word8")."0.1.3").revisions).default;
"splitmix".revision = (((hackage."splitmix")."0.0.3").revisions).default;
"splitmix".flags.optimised-mixer = false;
"splitmix".flags.random = true;
"async".revision = (((hackage."async")."2.2.2").revisions).default;
"async".flags.bench = false;
"dlist".revision = (((hackage."dlist")."0.8.0.7").revisions).default;
"websockets".revision = (((hackage."websockets")."0.12.6.1").revisions).default;
"websockets".flags.example = false;
"conduit".revision = (((hackage."conduit")."1.3.1.1").revisions).default;
"constraints".revision = (((hackage."constraints")."0.11.2").revisions).default;
"semigroups".revision = (((hackage."semigroups")."0.19.1").revisions).default;
"semigroups".flags.bytestring = true;
"semigroups".flags.unordered-containers = true;
"semigroups".flags.text = true;
"semigroups".flags.tagged = true;
"semigroups".flags.containers = true;
"semigroups".flags.binary = true;
"semigroups".flags.hashable = true;
"semigroups".flags.transformers = true;
"semigroups".flags.deepseq = true;
"semigroups".flags.bytestring-builder = false;
"semigroups".flags.template-haskell = true;
"data-default".revision = (((hackage."data-default")."0.7.1.1").revisions).default;
"HUnit".revision = (((hackage."HUnit")."1.6.0.0").revisions).default;
"lifted-base".revision = (((hackage."lifted-base")."0.2.3.12").revisions).default;
"data-default-instances-old-locale".revision = (((hackage."data-default-instances-old-locale")."0.0.1").revisions).default;
"tree-diff".revision = (((hackage."tree-diff")."0.0.2.1").revisions).default;
"parsec".revision = (((hackage."parsec")."3.1.13.0").revisions).default;
"th-reify-many".revision = (((hackage."th-reify-many")."0.1.9").revisions).default;
"hsc2hs".revision = (((hackage."hsc2hs")."0.68.6").revisions).default;
"hsc2hs".flags.in-ghc-tree = false;
"directory".revision = (((hackage."directory")."1.3.3.0").revisions).default;
"yaml".revision = (((hackage."yaml")."0.10.4.0").revisions).default;
"yaml".flags.no-exe = true;
"yaml".flags.no-examples = true;
"yaml".flags.system-libyaml = false;
"yaml".flags.no-unicode = false;
"transformers-compat".revision = (((hackage."transformers-compat")."0.6.5").revisions).default;
"transformers-compat".flags.five = false;
"transformers-compat".flags.generic-deriving = true;
"transformers-compat".flags.two = false;
"transformers-compat".flags.five-three = true;
"transformers-compat".flags.mtl = true;
"transformers-compat".flags.four = false;
"transformers-compat".flags.three = false;
"template-haskell".revision = (((hackage."template-haskell")."2.14.0.0").revisions).default;
"hspec-expectations".revision = (((hackage."hspec-expectations")."0.8.2").revisions).default;
"mono-traversable".revision = (((hackage."mono-traversable")."1.0.13.0").revisions).default;
"psqueues".revision = (((hackage."psqueues")."0.2.7.2").revisions).default;
"vector".revision = (((hackage."vector")."0.12.0.3").revisions).default;
"vector".flags.unsafechecks = false;
"vector".flags.internalchecks = false;
"vector".flags.wall = false;
"vector".flags.boundschecks = true;
"call-stack".revision = (((hackage."call-stack")."0.2.0").revisions).default;
"primitive".revision = (((hackage."primitive")."0.7.0.0").revisions).default;
"cryptohash".revision = (((hackage."cryptohash")."0.11.9").revisions).default;
"profunctors".revision = (((hackage."profunctors")."5.5.1").revisions).default;
"safe".revision = (((hackage."safe")."0.3.18").revisions).default;
"blaze-builder".revision = (((hackage."blaze-builder")."0.4.1.0").revisions).default;
"base-compat".revision = (((hackage."base-compat")."0.10.5").revisions).default;
"time-compat".revision = (((hackage."time-compat")."1.9.2.2").revisions).default;
"time-compat".flags.old-locale = false;
"ansi-terminal".revision = (((hackage."ansi-terminal")."0.9.1").revisions).default;
"ansi-terminal".flags.example = false;
"tagged".revision = (((hackage."tagged")."0.8.6").revisions).default;
"tagged".flags.transformers = true;
"tagged".flags.deepseq = true;
"parsers".revision = (((hackage."parsers")."0.12.10").revisions).default;
"parsers".flags.parsec = true;
"parsers".flags.binary = true;
"parsers".flags.attoparsec = true;
"haskell-src-exts".revision = (((hackage."haskell-src-exts")."1.20.3").revisions).default;
"lens".revision = (((hackage."lens")."4.17.1").revisions).default;
"lens".flags.j = false;
"lens".flags.test-properties = true;
"lens".flags.old-inline-pragmas = false;
"lens".flags.test-templates = true;
"lens".flags.trustworthy = true;
"lens".flags.test-doctests = true;
"lens".flags.benchmark-uniplate = false;
"lens".flags.inlining = true;
"lens".flags.dump-splices = false;
"lens".flags.test-hunit = true;
"lens".flags.safe = false;
"unliftio-core".revision = (((hackage."unliftio-core")."0.1.2.0").revisions).default;
"containers".revision = (((hackage."containers")."0.6.0.1").revisions).default;
"integer-logarithms".revision = (((hackage."integer-logarithms")."1.0.3").revisions).default;
"integer-logarithms".flags.check-bounds = false;
"integer-logarithms".flags.integer-gmp = true;
"reflection".revision = (((hackage."reflection")."2.1.5").revisions).default;
"reflection".flags.slow = false;
"reflection".flags.template-haskell = true;
"streaming-commons".revision = (((hackage."streaming-commons")."0.2.1.1").revisions).default;
"streaming-commons".flags.use-bytestring-builder = false;
"shelly".revision = (((hackage."shelly")."1.8.1").revisions).default;
"shelly".flags.build-examples = false;
"shelly".flags.lifted = false;
"bytestring".revision = (((hackage."bytestring")."0.10.8.2").revisions).default;
"ansi-wl-pprint".revision = (((hackage."ansi-wl-pprint")."0.6.9").revisions).default;
"ansi-wl-pprint".flags.example = false;
"wai".revision = (((hackage."wai")."3.2.2.1").revisions).default;
"basement".revision = (((hackage."basement")."0.0.11").revisions).default;
"setenv".revision = (((hackage."setenv")."0.1.1.3").revisions).default;
"test-framework".revision = (((hackage."test-framework")."0.8.2.0").revisions).default;
"hostname".revision = (((hackage."hostname")."1.0").revisions).default;
"old-locale".revision = (((hackage."old-locale")."1.0.0.7").revisions).default;
"directory-tree".revision = (((hackage."directory-tree")."0.12.1").revisions).default;
"StateVar".revision = (((hackage."StateVar")."1.2").revisions).default;
"vault".revision = (((hackage."vault")."0.3.1.3").revisions).default;
"vault".flags.useghc = true;
"mime-types".revision = (((hackage."mime-types")."0.1.0.9").revisions).default;
"charset".revision = (((hackage."charset")."0.3.7.1").revisions).default;
"contravariant".revision = (((hackage."contravariant")."1.5.2").revisions).default;
"contravariant".flags.semigroups = true;
"contravariant".flags.tagged = true;
"contravariant".flags.statevar = true;
"data-default-instances-dlist".revision = (((hackage."data-default-instances-dlist")."0.0.1").revisions).default;
"xhtml".revision = (((hackage."xhtml")."3000.2.2.1").revisions).default;
"type-equality".revision = (((hackage."type-equality")."1").revisions).default;
"blaze-markup".revision = (((hackage."blaze-markup")."0.8.2.3").revisions).default;
"text".revision = (((hackage."text")."1.2.3.1").revisions).default;
"Cabal".revision = (((hackage."Cabal")."2.4.0.1").revisions).default;
"unordered-containers".revision = (((hackage."unordered-containers")."0.2.10.0").revisions).default;
"unordered-containers".flags.debug = false;
"base64-bytestring".revision = (((hackage."base64-bytestring")."1.0.0.2").revisions).default;
"base".revision = (((hackage."base")."4.12.0.0").revisions).default;
"comonad".revision = (((hackage."comonad")."5.0.6").revisions).default;
"comonad".flags.distributive = true;
"comonad".flags.test-doctests = true;
"comonad".flags.containers = true;
"hspec".revision = (((hackage."hspec")."2.7.1").revisions).default;
"time".revision = (((hackage."time")."1.8.0.2").revisions).default;
"data-default-class".revision = (((hackage."data-default-class")."0.1.2.0").revisions).default;
"terminfo".revision = (((hackage."terminfo")."0.4.1.2").revisions).default;
"base16-bytestring".revision = (((hackage."base16-bytestring")."0.1.1.6").revisions).default;
"vector-algorithms".revision = (((hackage."vector-algorithms")."0.8.0.3").revisions).default;
"vector-algorithms".flags.unsafechecks = false;
"vector-algorithms".flags.internalchecks = false;
"vector-algorithms".flags.llvm = false;
"vector-algorithms".flags.boundschecks = true;
"vector-algorithms".flags.bench = true;
"vector-algorithms".flags.properties = true;
"iproute".revision = (((hackage."iproute")."1.7.8").revisions).default;
"transformers".revision = (((hackage."transformers")."0.5.6.2").revisions).default;
"hashable".revision = (((hackage."hashable")."1.3.0.0").revisions).default;
"hashable".flags.sse2 = true;
"hashable".flags.integer-gmp = true;
"hashable".flags.sse41 = false;
"hashable".flags.examples = false;
"quickcheck-io".revision = (((hackage."quickcheck-io")."0.2.0").revisions).default;
"wai-extra".revision = (((hackage."wai-extra")."3.0.28").revisions).default;
"wai-extra".flags.build-example = false;
"data-default-instances-containers".revision = (((hackage."data-default-instances-containers")."0.0.1").revisions).default;
"attoparsec".revision = (((hackage."attoparsec")."0.13.2.3").revisions).default;
"attoparsec".flags.developer = false;
"blaze-html".revision = (((hackage."blaze-html")."0.9.1.2").revisions).default;
"digest".revision = (((hackage."digest")."0.0.1.2").revisions).default;
"digest".flags.bytestring-in-base = false;
"MemoTrie".revision = (((hackage."MemoTrie")."0.6.10").revisions).default;
"MemoTrie".flags.examples = false;
"colour".revision = (((hackage."colour")."2.3.5").revisions).default;
"transformers-base".revision = (((hackage."transformers-base")."0.4.5.2").revisions).default;
"transformers-base".flags.orphaninstances = true;
"happy".revision = (((hackage."happy")."1.19.9").revisions).default;
"happy".flags.small_base = true;
"file-embed".revision = (((hackage."file-embed")."0.0.11").revisions).default;
"byteable".revision = (((hackage."byteable")."0.1.1").revisions).default;
"hpc".revision = (((hackage."hpc")."0.6.0.3").revisions).default;
"entropy".revision = (((hackage."entropy")."0.4.1.5").revisions).default;
"entropy".flags.halvm = false;
"filepath".revision = (((hackage."filepath")."1.4.2.1").revisions).default;
"auto-update".revision = (((hackage."auto-update")."0.1.6").revisions).default;
"hspec-core".revision = (((hackage."hspec-core")."2.7.1").revisions).default;
"stringsearch".revision = (((hackage."stringsearch")."0.3.6.6").revisions).default;
"stringsearch".flags.base4 = true;
"stringsearch".flags.base3 = false;
"unix-compat".revision = (((hackage."unix-compat")."0.5.2").revisions).default;
"unix-compat".flags.old-time = false;
"monad-control".revision = (((hackage."monad-control")."1.0.2.3").revisions).default;
"process".revision = (((hackage."process")."1.6.5.0").revisions).default;
"kan-extensions".revision = (((hackage."kan-extensions")."5.2").revisions).default;
"wai-logger".revision = (((hackage."wai-logger")."2.3.6").revisions).default;
"th-lift".revision = (((hackage."th-lift")."0.8.1").revisions).default;
"resourcet".revision = (((hackage."resourcet")."1.2.2").revisions).default;
"webdriver".revision = (((hackage."webdriver")."0.8.5").revisions).default;
"webdriver".flags.network-uri = true;
"webdriver".flags.developer = false;
"pretty".revision = (((hackage."pretty")."1.1.3.6").revisions).default;
"cabal-doctest".revision = (((hackage."cabal-doctest")."1.0.8").revisions).default;
"aeson".revision = (((hackage."aeson")."1.4.6.0").revisions).default;
"aeson".flags.cffi = false;
"aeson".flags.fast = false;
"aeson".flags.bytestring-builder = false;
"aeson".flags.developer = false;
"wai-app-static".revision = (((hackage."wai-app-static")."3.1.6.3").revisions).default;
"wai-app-static".flags.print = false;
"http-types".revision = (((hackage."http-types")."0.12.3").revisions).default;
"ghc-boot-th".revision = (((hackage."ghc-boot-th")."8.6.5").revisions).default;
"th-lift-instances".revision = (((hackage."th-lift-instances")."0.1.14").revisions).default;
"base-orphans".revision = (((hackage."base-orphans")."0.8.1").revisions).default;
"http-date".revision = (((hackage."http-date")."0.0.8").revisions).default;
"th-abstraction".revision = (((hackage."th-abstraction")."0.3.1.0").revisions).default;
"memory".revision = (((hackage."memory")."0.15.0").revisions).default;
"memory".flags.support_bytestring = true;
"memory".flags.support_basement = true;
"memory".flags.support_foundation = true;
"memory".flags.support_deepseq = true;
"fast-logger".revision = (((hackage."fast-logger")."3.0.0").revisions).default;
"bsb-http-chunked".revision = (((hackage."bsb-http-chunked")."0.0.0.4").revisions).default;
"array".revision = (((hackage."array")."0.5.3.0").revisions).default;
"xml".revision = (((hackage."xml")."1.3.14").revisions).default;
"simple-sendfile".revision = (((hackage."simple-sendfile")."0.2.30").revisions).default;
"simple-sendfile".flags.allow-bsd = true;
"integer-gmp".revision = (((hackage."integer-gmp")."1.0.2.0").revisions).default;
};
compiler = {
version = "8.6.5";
nix-name = "ghc865";
packages = {
"binary" = "0.8.6.0";
"ghc-boot" = "8.6.5";
"ghc-prim" = "0.5.3";
"stm" = "2.5.0.0";
"unix" = "2.7.2.2";
"ghc-heap" = "8.6.5";
"mtl" = "2.2.2";
"rts" = "1.0";
"deepseq" = "1.4.4.0";
"parsec" = "3.1.13.0";
"directory" = "1.3.3.0";
"template-haskell" = "2.14.0.0";
"containers" = "0.6.0.1";
"bytestring" = "0.10.8.2";
"xhtml" = "3000.2.2.1";
"text" = "1.2.3.1";
"Cabal" = "2.4.0.1";
"base" = "4.12.0.0";
"time" = "1.8.0.2";
"terminfo" = "0.4.1.2";
"transformers" = "0.5.6.2";
"hpc" = "0.6.0.3";
"filepath" = "1.4.2.1";
"process" = "1.6.5.0";
"pretty" = "1.1.3.6";
"ghc-boot-th" = "8.6.5";
"array" = "0.5.3.0";
"integer-gmp" = "1.0.2.0";
};
};
};
extras = hackage:
{
packages = {
haddock-library-ghcjs = ./.plan.nix/haddock-library-ghcjs.nix;
ghcjs-th = ./.plan.nix/ghcjs-th.nix;
ghc-api-ghcjs = ./.plan.nix/ghc-api-ghcjs.nix;
ghci-ghcjs = ./.plan.nix/ghci-ghcjs.nix;
ghcjs = ./.plan.nix/ghcjs.nix;
haddock-api-ghcjs = ./.plan.nix/haddock-api-ghcjs.nix;
template-haskell-ghcjs = ./.plan.nix/template-haskell-ghcjs.nix;
};
};
modules = [
({ lib, ... }:
{
packages = {
"haddock-library-ghcjs" = { flags = {}; };
"ghcjs-th" = {
flags = { "use-host-template-haskell" = lib.mkOverride 900 false; };
};
"ghc-api-ghcjs" = {
flags = {
"stage1" = lib.mkOverride 900 false;
"stage2" = lib.mkOverride 900 true;
"debug" = lib.mkOverride 900 false;
"stage3" = lib.mkOverride 900 false;
"use-host-template-haskell" = lib.mkOverride 900 false;
"ghci" = lib.mkOverride 900 true;
"terminfo" = lib.mkOverride 900 true;
};
};
"ghci-ghcjs" = { flags = { "ghci" = lib.mkOverride 900 true; }; };
"ghcjs" = {
flags = {
"compiler-only" = lib.mkOverride 900 false;
"runtime-assertions" = lib.mkOverride 900 false;
"no-wrapper-install" = lib.mkOverride 900 false;
"use-host-template-haskell" = lib.mkOverride 900 false;
"disable-optimizer" = lib.mkOverride 900 false;
};
};
"haddock-api-ghcjs" = { flags = {}; };
"template-haskell-ghcjs" = { flags = {}; };
};
})
];
}

View File

@ -8,6 +8,11 @@ let
compiler = cabal.compiler // {
isGhc = true;
# this is partially a hack to support `impl(ghcjs)`.
# We set GHC == true _and_ GHCJS == true.
isGhcjs = hostMap.os == "Ghcjs";
# maybe we need something for asterius here
# as well.
version = lib.mapAttrs (_: f: v: f (builtins.compareVersions config.compiler.version v)) {
eq = c: c == 0;
gt = c: c > 0;

View File

@ -26,6 +26,11 @@ in
default = false;
description = "Is lib:ghc reinstallable?";
};
options.setup-depends = lib.mkOption {
type = lib.types.listOf lib.types.unspecified;
default = [];
description = "pkgs to globally provide to Setup.hs builds";
};
# Dependencies (with reinstallable-lib:ghc)
#
@ -83,6 +88,6 @@ in
buildPackages = buildModules.config.hsPkgs;
} //
lib.mapAttrs
(name: pkg: if pkg == null then null else builder.build-package pkg)
(name: pkg: if pkg == null then null else builder.build-package config pkg)
(config.packages // lib.genAttrs (config.nonReinstallablePkgs ++ config.bootPkgs) (_: null));
}

View File

@ -245,31 +245,55 @@ in {
ghc-patches = ghc-patches "8.8.2";
};
} // self.lib.optionalAttrs (self.targetPlatform.isGhcjs or false) {
ghc865 = let ghcjs865 = self.callPackage ../compiler/ghcjs/ghcjs.nix {
} // self.lib.optionalAttrs (self.targetPlatform.isGhcjs or false)
# This will inject `exactDeps` and `envDeps` into the ghcjs
# compiler defined below. This is crucial to build packages
# with the current use of env and exact Deps.
(builtins.mapAttrs
(_: v: v // {
isHaskellNixBootCompiler = true;
})
({
ghc865 = let buildGHC = self.buildPackages.haskell-nix.compiler.ghc865;
in let ghcjs865 = self.callPackage ../compiler/ghcjs/ghcjs.nix {
ghcjsSrcJson = ../compiler/ghcjs/ghcjs-src.json;
ghcjsVersion = "8.6.0.1";
ghc = self.buildPackages.haskell-nix.compiler.ghc865;
ghc = buildGHC;
cabal-install = self.buildPackages.haskell-nix.cabal-install;
# The alex from the bootstrap packages is apparently broken, and will fail with something like:
# > alex: /nix/store/f7b78rg9pmqgvxvsqfzh1przp7pxii5a-alex-3.2.4-exe-alex/share/x86_64-osx-ghc-8.4.4/alex-3.2.4-1pf5faR9dBuJ8mryql0DoA-alex/AlexTemplate-ghc-nopred: openFile: does not exist (No such file or directory)
# inherit (self.buildPackages.haskell-nix.bootstrap.packages) alex happy;
}; in let targetPrefix = "js-unknown-ghcjs-"; in self.runCommand "${targetPrefix}ghc-8.6.5" {
passthru = {
inherit targetPrefix;
version = "8.6.5";
isHaskellNixCompiler = true;
inherit (ghcjs865) configured-src;
inherit buildGHC;
extraConfigureFlags = [
"--ghcjs"
"--with-ghcjs=${targetPrefix}ghc" "--with-ghcjs-pkg=${targetPrefix}ghc-pkg"
# setting gcc is stupid. non-emscripten ghcjs has no cc.
# however cabal insists on compiling the c sources. m(
"--with-gcc=${self.buildPackages.stdenv.cc}/bin/cc"
];
};
} ''
# note: we'll use the buildGHCs `hsc2hs`, ghcjss wrapper just horribly breaks in this nix setup.
} (''
mkdir -p $out/bin
cd $out/bin
ln -s ${ghcjs865}/bin/ghcjs ${targetPrefix}ghc
ln -s ${ghcjs865}/bin/ghcjs-pkg ${targetPrefix}ghc-pkg
ln -s ${ghcjs865}/bin/hsc2hs-ghcjs ${targetPrefix}hsc2hs
ln -s ${buildGHC}/bin/hsc2hs ${targetPrefix}hsc2hs
cd ..
mkdir lib
cd lib
cp -R ${ghcjs865}/lib/ghcjs-8.6.5 ${targetPrefix}ghc-8.6.5
'';
});
'' + installDeps targetPrefix);
})));
ghc = self.haskell-nix.compiler.ghc865;
cabal-install = self.buildPackages.haskell-nix.bootstrap.packages.cabal-install;
inherit (self.buildPackages.haskell-nix.bootstrap.packages) cabal-install alex happy;
# WARN: The `import ../. {}` will prevent
# any cross to work, as we will loose

View File

@ -455,6 +455,11 @@ self: super: {
shells.ghc = p.hsPkgs.shellFor {};
};
# Like `cabalProject'`, but for building the GHCJS compiler.
# This is exposed to allow GHCJS developers to work on the GHCJS
# code in a nix-shell with `shellFor`.
ghcjsProject = import ../lib/ghcjs-project.nix { pkgs = self; };
# The functions that return a plan-nix often have a lot of dependencies
# that could be GCed and also will not make it into hydra cache.
# Use this `withInputs` function to make sure your tests include