From 939365b278455782bc9685e8b6d63cecd686d33b Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Wed, 1 Feb 2023 09:21:41 +0000 Subject: [PATCH 001/206] Support for armv7a-bionic (android) This adds support to haskell.nix for building for armv7a-android. It includes - various minor fixes - a lot of bionic (libc) patches for ghc - no gold on 32bit android - android overlay: mostly static - disable KTLS on openssl for android --- compiler/ghc/default.nix | 11 +- lib/call-cabal-project-to-nix.nix | 4 +- overlays/android.nix | 21 +- overlays/bootstrap.nix | 24 +- overlays/linux-cross.nix | 19 +- .../patches/ghc/ghc-8.10-3434-armv7a.patch | 68 +++++ overlays/patches/ghc/ghc-8.10-android.patch | 262 ++++++++++++++++++ .../ghc-8.10.7-android-bionic-symbols.patch | 31 +++ .../patches/ghc/ghc-8.10.7-bionic-libc.patch | 35 +++ ...8.10.7-cross-dont-build-stage2-tools.patch | 74 +++++ ...8.10.7-linker-weak-and-common-armv7a.patch | 189 +++++++++++++ .../ghc-8.10.7-linker-weak-and-common.patch | 4 +- .../ghc/libc-memory-symbols-armv7a.patch | 42 +++ .../libraries-prim-os-android-armv7a.patch | 13 + 14 files changed, 780 insertions(+), 17 deletions(-) create mode 100644 overlays/patches/ghc/ghc-8.10-3434-armv7a.patch create mode 100644 overlays/patches/ghc/ghc-8.10-android.patch create mode 100644 overlays/patches/ghc/ghc-8.10.7-android-bionic-symbols.patch create mode 100644 overlays/patches/ghc/ghc-8.10.7-bionic-libc.patch create mode 100644 overlays/patches/ghc/ghc-8.10.7-cross-dont-build-stage2-tools.patch create mode 100644 overlays/patches/ghc/ghc-8.10.7-linker-weak-and-common-armv7a.patch create mode 100644 overlays/patches/ghc/libc-memory-symbols-armv7a.patch create mode 100644 overlays/patches/ghc/libraries-prim-os-android-armv7a.patch diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index b79287cf7c..34376453e2 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -45,9 +45,9 @@ let self = , enableDWARF ? false -, enableTerminfo ? +, enableTerminfo ? !stdenv.targetPlatform.isAndroid && # Terminfo does not work on older ghc cross arm and windows compilers - (!haskell-nix.haskellLib.isCrossTarget || !(stdenv.targetPlatform.isAarch64 || stdenv.targetPlatform.isWindows) || builtins.compareVersions ghc-version "8.10" >= 0) + (!haskell-nix.haskellLib.isCrossTarget || !(stdenv.targetPlatform.isAarch32 || stdenv.targetPlatform.isAarch64 || stdenv.targetPlatform.isWindows) || builtins.compareVersions ghc-version "8.10" >= 0) , # Wheter to build in NUMA support enableNUMA ? true @@ -426,7 +426,10 @@ stdenv.mkDerivation (rec { export NIX_LDFLAGS+=" -rpath $out/lib/${targetPrefix}ghc-${ghc-version}" '' + lib.optionalString stdenv.isDarwin '' export NIX_LDFLAGS+=" -no_dtrace_dof" - '' + lib.optionalString targetPlatform.useAndroidPrebuilt '' + '' + + # we really want "+armv7-a,+soft-float,+neon" as features, but llvm will + # fail with those :facepalm: + lib.optionalString targetPlatform.useAndroidPrebuilt '' sed -i -e '5i ,("armv7a-unknown-linux-androideabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "cortex-a8", ""))' llvm-targets '' + lib.optionalString targetPlatform.isMusl '' echo "patching llvm-targets for musl targets..." @@ -501,7 +504,7 @@ stdenv.mkDerivation (rec { ++ lib.optional stdenv.targetPlatform.isMusl "pie" ++ lib.optional enableDWARF "fortify"; - postInstall = lib.optionalString (enableNUMA && targetPlatform.isLinux) '' + postInstall = lib.optionalString (enableNUMA && targetPlatform.isLinux && !targetPlatform.isAarch32 && !targetPlatform.isAndroid) '' # Patch rts.conf to ensure libnuma can be found for file in $(find "$out/lib" -name "rts*.conf"); do diff --git a/lib/call-cabal-project-to-nix.nix b/lib/call-cabal-project-to-nix.nix index 4c5a31e88c..3ff16062d8 100644 --- a/lib/call-cabal-project-to-nix.nix +++ b/lib/call-cabal-project-to-nix.nix @@ -437,8 +437,8 @@ let cabal.project.freeze chmod +w cabal.project.freeze ''} - export SSL_CERT_FILE=${cacert}/etc/ssl/certs/ca-bundle.crt - export GIT_SSL_CAINFO=${cacert}/etc/ssl/certs/ca-bundle.crt + export SSL_CERT_FILE=${evalPackages.cacert}/etc/ssl/certs/ca-bundle.crt + export GIT_SSL_CAINFO=${evalPackages.cacert}/etc/ssl/certs/ca-bundle.crt CABAL_DIR=${ # This creates `.cabal` directory that is as it would have diff --git a/overlays/android.nix b/overlays/android.nix index 3d2568d80d..85ff5d0047 100644 --- a/overlays/android.nix +++ b/overlays/android.nix @@ -11,18 +11,31 @@ _final: prev: prev.lib.optionalAttrs prev.stdenv.hostPlatform.isAndroid ({ ''; # my current thinking is that this is due to the android toolchain using r23, api30. }); - libffi = prev.libffi.overrideAttrs (_: { + libffi = prev.libffi.overrideAttrs ( old: { dontDisableStatic = true; + configureFlags = old.configureFlags ++ [ "--disable-shared" ]; hardeningDisable = [ "fortify" "stackprotector" "format" ]; + } // prev.lib.optionalAttrs (prev.stdenv.hostPlatform.isAarch32 || prev.stdenv.hostPlatform.isAarch64) { # see libiconv. We want to target a lower minsdk postConfigure = '' - echo "#undef HAVE_MEMFD_CREATE" >> aarch64-unknown-linux-android/fficonfig.h + echo "#undef HAVE_MEMFD_CREATE" >> ${prev.stdenv.hostPlatform.config}/fficonfig.h ''; }); - gmp6 = (prev.gmp6.override { withStatic = true; }).overrideAttrs(_: { + gmp6 = (prev.gmp6.override { withStatic = true; }).overrideAttrs(old: { hardeningDisable = [ "fortify" "stackprotector" "format" ]; + configureFlags = old.configureFlags ++ [ "--disable-shared" ]; }); + zlib = prev.zlib.override { shared = false; static = true; }; + # kernel tls (ktls) doesn't work with the android kernel. And will complain + # about lots of implicitly declared functions and undeclared identifiers, + # because the android (linux) kernel doesn't expose those. + openssl = prev.openssl.override { static = true; enableKTLS = false; }; + }) // prev.lib.optionalAttrs prev.stdenv.targetPlatform.isAndroid ({ - bionic = prev.bionic.override { enableStatic = true; }; + # we still need the shared libraries to link against on the platform. GHC + # has been neutered to not even try loading shared libs and will use dynamic ones. + # We also link iserv against the static libs, so that we have a fully static + # android (bionic/linux) iserv we can execute on glibc/linux. + bionic = prev.bionic.override { enableStatic = true; enableShared = true; }; }) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 902c5d363a..e5338f3bf9 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -163,8 +163,9 @@ in { ++ fromUntil "8.10.2" "8.10.3" ./patches/ghc/MR3714-backported-to-8.10.2.patch # See https://github.com/input-output-hk/haskell.nix/issues/1027 + ++ final.lib.optional (versionAtLeast "8.10.3" && versionLessThan "9.2" && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/ghc-8.10-3434-armv7a.patch ++ final.lib.optional (versionAtLeast "8.10.3" && versionLessThan "9.2" && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/ghc-8.10-3434.patch - ++ final.lib.optional (versionAtLeast "9.2.1" && versionLessThan "9.3" && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/ghc-9.2-3434.patch + ++ final.lib.optional (versionAtLeast "9.2.1" && versionLessThan "9.3" && (final.stdenv.targetPlatform.isAarch64 || final.stdenv.targetPlatform.isAndroid)) ./patches/ghc/ghc-9.2-3434.patch ++ fromUntil "8.10.1" "9.4" ./patches/ghc/ghc-acrt-iob-func.patch ++ fromUntil "8.10.1" "9.2" ./patches/ghc/ghc-mprotect-nonzero-len.patch @@ -247,16 +248,27 @@ in { ++ final.lib.optionals (final.stdenv.targetPlatform.isGhcjs) (fromUntil "9.6.3" "9.8" ./patches/ghc/ghc-9.6.3-JS-implement-TH-support.patch) ++ fromUntil "9.8.1" "9.8.2" ./patches/ghc/ghc-9.8-cabal-c-soures-fix.patch ++ fromUntil "9.6.3" "9.9" ./patches/ghc/ghc-9.6.3-Cabal-9384.patch + ++ final.lib.optionals (final.stdenv.targetPlatform.isWindows) (fromUntil "9.4.1" "9.5" ./patches/ghc/ghc-9.4-hadrian-win-cross.patch) + ++ fromUntil "9.6.1" "9.8" ./patches/ghc/MR10116.patch + ++ fromUntil "9.4.1" "9.6" ./patches/ghc/hadrian-build-deriveConstants-genprimopcode-ghc94.patch + ++ fromUntil "9.6.1" "9.8" ./patches/ghc/hadrian-build-deriveConstants-genprimopcode.patch + ++ final.lib.optional (versionAtLeast "8.10" && versionLessThan "9.4" && final.stdenv.targetPlatform != final.stdenv.hostPlatform) ./patches/ghc/ghc-make-stage-1-lib-ghc.patch # the following is a partial reversal of https://gitlab.haskell.org/ghc/ghc/-/merge_requests/4391, to address haskell.nix#1227 ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/mmap-next.patch ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/m32_alloc.patch + + # Android ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/rts-android-jemalloc-qemu.patch ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/stack-protector-symbols.patch - ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/libraries-prim-os-android.patch + ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/libraries-prim-os-android-armv7a.patch + ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/libraries-prim-os-android.patch ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-rts-linker-condbr.patch - ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-8.10.7-linker-weak-and-common.patch - ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/libc-memory-symbols.patch + # due to mmap-next renaming we need different ones for aarch64 and aarch32 m( + ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/ghc-8.10.7-linker-weak-and-common-armv7a.patch + ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/ghc-8.10.7-linker-weak-and-common.patch + ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/libc-memory-symbols-armv7a.patch + ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/libc-memory-symbols.patch ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/android-base-needs-iconv.patch ++ final.lib.optional (versionAtLeast "8.10" && versionLessThan "9.4" && final.stdenv.targetPlatform != final.stdenv.hostPlatform) ./patches/ghc/ghc-make-stage-1-lib-ghc.patch ++ final.lib.optional (versionAtLeast "8.10" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/ghc-8.10-better-symbol-addr-debug.patch @@ -274,6 +286,10 @@ in { # Fix the bad fixups: https://gitlab.haskell.org/ghc/ghc/-/commit/2adc050857a9c1b992040fbfd55fbe65b2851b19 ++ final.lib.optional (versionAtLeast "9.6" && versionLessThan "9.6.4" && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/2adc050857a9c1b992040fbfd55fbe65b2851b19.patch ++ final.lib.optional (versionAtLeast "8.10.7" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAarch64 && final.stdenv.targetPlatform.isMusl && final.stdenv.targetPlatform != final.stdenv.hostPlatform) ./patches/ghc/ghc-8.10-aarch64-musl-gettimeofday.patch + ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.2" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/ghc-8.10-android.patch + ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.2" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/ghc-8.10.7-android-bionic-symbols.patch + ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.2" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/ghc-8.10.7-bionic-libc.patch + ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.2" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/ghc-8.10.7-cross-dont-build-stage2-tools.patch ; in ({ ghc865 = final.callPackage ../compiler/ghc (traceWarnOld "8.6" { diff --git a/overlays/linux-cross.nix b/overlays/linux-cross.nix index 8055d86dd7..36861dde24 100644 --- a/overlays/linux-cross.nix +++ b/overlays/linux-cross.nix @@ -13,6 +13,22 @@ , ... }: let + # For 32bit android, we need to pass -no-pie, as we otherwise + # get -pie injected into the linker flags. We don't want that. + # If we target 32bit android, we need remote-iserv to be runnable + # in a 32bit linux (via qemu-arm user mode emulation). If we have + # -pie enabled, it will produce a static-pie executable, which + # seems a lot like what we want but will crash on launch. It appears + # the the __stack_chk_guard lookups go through some lookup table, and + # while the relocations for the lookup table are correct, the __stack_chk_guard + # address isn't properly relocated. This could also be because libc isn't + # supposed to be staticlly linked really. However because we are lacking + # the loader for arm on linux, we can't used dynamically linked executables + # until one in /system/bin/linker is provided. + # + # We also need to run armv7a-android in unshare --user --pid --fork, to + # ensure that we get a low pid < 65535 for android (If we run outside) + # of nix build envs. # we want this to hold only for arm (32 and 64bit) for now. isLinuxCross = haskellLib.isCrossHost && hostPlatform.isLinux && (hostPlatform.isAarch32 || hostPlatform.isAarch64); @@ -24,12 +40,13 @@ let else iserv-proxy-interpreter; in writeShellScriptBin ("iserv-wrapper" + lib.optionalString enableProfiling "-prof") '' + #!${stdenv.shell} set -euo pipefail # Unset configure flags as configure should have run already unset configureFlags PORT=$((5000 + $RANDOM % 5000)) (>&2 echo "---> Starting ${interpreter.exeName} on port $PORT") - ${qemu}/bin/qemu-${qemuSuffix} ${interpreter.override (lib.optionalAttrs hostPlatform.isAndroid { setupBuildFlags = ["--ghc-option=-optl-static" ];})}/bin/${interpreter.exeName} tmp $PORT & + ${qemu}/bin/qemu-${qemuSuffix} ${interpreter.override (lib.optionalAttrs hostPlatform.isAndroid { setupBuildFlags = ["--ghc-option=-optl-static" ] ++ lib.optional hostPlatform.isAarch32 "--ghc-option=-optl-no-pie";})}/bin/${interpreter.exeName} tmp $PORT & (>&2 echo "---| ${interpreter.exeName} should have started on $PORT") RISERV_PID="$!" ${iserv-proxy}/bin/iserv-proxy $@ 127.0.0.1 "$PORT" diff --git a/overlays/patches/ghc/ghc-8.10-3434-armv7a.patch b/overlays/patches/ghc/ghc-8.10-3434-armv7a.patch new file mode 100644 index 0000000000..6f1eb66ad1 --- /dev/null +++ b/overlays/patches/ghc/ghc-8.10-3434-armv7a.patch @@ -0,0 +1,68 @@ +diff --git a/libraries/ghc-prim/ghc-prim.cabal b/libraries/ghc-prim/ghc-prim.cabal +index c633124..2bd51c0 100644 +--- a/libraries/ghc-prim/ghc-prim.cabal ++++ b/libraries/ghc-prim/ghc-prim.cabal +@@ -70,7 +70,7 @@ Library + if os(linux) + -- we need libm, but for musl and other's we might need libc, as libm + -- is just an empty shell. +- extra-libraries: c, m ++ extra-libraries: c, m + + c-sources: + cbits/atomic.c +diff --git a/rts/RtsSymbols.c b/rts/RtsSymbols.c +index 9ca696c..b4a85e5 100644 +--- a/rts/RtsSymbols.c ++++ b/rts/RtsSymbols.c +@@ -1000,6 +1000,18 @@ + #define RTS_LIBGCC_SYMBOLS + #endif + ++ ++#if !defined(DYNAMIC) && defined(linux_HOST_OS) ++// we need these for static musl builds. However when ++// linking shared objects (DLLs) this will fail, hence ++// we do not include them when building with -DDYNAMIC ++#define RTS_LINKER_SYMBOLS \ ++ SymI_NeedsProto(__fini_array_start) \ ++ SymI_NeedsProto(__fini_array_end) ++#else ++#define RTS_LINKER_SYMBOLS ++#endif ++ + /* entirely bogus claims about types of these symbols */ + #define SymI_NeedsProto(vvv) extern void vvv(void); + #define SymI_NeedsDataProto(vvv) extern StgWord vvv[]; +@@ -1028,6 +1040,7 @@ RTS_DARWIN_ONLY_SYMBOLS + RTS_OPENBSD_ONLY_SYMBOLS + RTS_LIBGCC_SYMBOLS + RTS_LIBFFI_SYMBOLS ++RTS_LINKER_SYMBOLS + #undef SymI_NeedsProto + #undef SymI_NeedsDataProto + #undef SymI_HasProto +@@ -1068,6 +1081,8 @@ RTS_LIBFFI_SYMBOLS + #define SymI_HasProto_deprecated(vvv) \ + { #vvv, (void*)0xBAADF00D, true }, + ++void *RTS_DYNAMIC = NULL; ++ + RtsSymbolVal rtsSyms[] = { + RTS_SYMBOLS + RTS_RET_SYMBOLS +@@ -1078,6 +1093,7 @@ RtsSymbolVal rtsSyms[] = { + RTS_OPENBSD_ONLY_SYMBOLS + RTS_LIBGCC_SYMBOLS + RTS_LIBFFI_SYMBOLS ++ RTS_LINKER_SYMBOLS + SymI_HasDataProto(nonmoving_write_barrier_enabled) + #if defined(darwin_HOST_OS) && defined(i386_HOST_ARCH) + // dyld stub code contains references to this, +@@ -1085,5 +1101,6 @@ RtsSymbolVal rtsSyms[] = { + // lazy pointers as nonlazy. + { "dyld_stub_binding_helper", (void*)0xDEADBEEF, false }, + #endif ++ { "_DYNAMIC", (void*)(&RTS_DYNAMIC), false }, + { 0, 0, false } /* sentinel */ + }; diff --git a/overlays/patches/ghc/ghc-8.10-android.patch b/overlays/patches/ghc/ghc-8.10-android.patch new file mode 100644 index 0000000000..c251e4c5b1 --- /dev/null +++ b/overlays/patches/ghc/ghc-8.10-android.patch @@ -0,0 +1,262 @@ +diff --git a/rts/Linker.c b/rts/Linker.c +index cfae6fc..b766ce0 100644 +--- a/rts/Linker.c ++++ b/rts/Linker.c +@@ -350,6 +350,37 @@ int ghciInsertSymbolTable( + || strncmp(key, "calloc", 6) == 0 + || strncmp(key, "realloc", 7) == 0 + || strncmp(key, "reallocarray", 12) == 0 ++ ++ || strncmp(key, "open", 4) == 0 ++ || strncmp(key, "close", 5) == 0 ++ || strncmp(key, "stderr", 6) == 0 ++ || strncmp(key, "clock_gettime", 13) == 0 ++ || strncmp(key, "clock_getres", 12) == 0 ++ || strncmp(key, "__stack_chk_guard", 17) == 0 ++ || strncmp(key, "__strchr_chk", 12) == 0 ++ || strncmp(key, "__strcpy_chk", 12) == 0 ++ || strncmp(key, "__strcpy_chk_generic", 20) == 0 ++ || strncmp(key, "__strcat_chk_generic", 20) == 0 ++ || strncmp(key, "__strlcpy_chk", 13) == 0 ++ || strncmp(key, "__strlen_chk", 12) == 0 ++ || strncmp(key, "__strncpy_chk", 13) == 0 ++ || strncmp(key, "__vsnprintf_chk", 15) == 0 ++ || strncmp(key, "__write_chk", 11) == 0 ++ || strncmp(key, "__read_chk", 10) == 0 ++ || strncmp(key, "__memset_chk", 12) == 0 ++ || strncmp(key, "__memset_chk_fail", 17) == 0 ++ || strncmp(key, "__libc_globals", 14) == 0 ++ || strncmp(key, "memmove", 7) == 0 ++ || strncmp(key, "gettimeofday", 12) == 0 ++ || strncmp(key, "strcmp", 6) == 0 ++ || strncmp(key, "fopen", 5) == 0 ++ || strncmp(key, "fread", 5) == 0 ++ || strncmp(key, "fwrite", 6) == 0 ++ || strncmp(key, "fclose", 5) == 0 ++ || strncmp(key, "open", 4) == 0 ++ || strncmp(key, "close", 5) == 0 ++ || strncmp(key, "strerror", 8) == 0 ++ || strncmp(key, "__rel_iplt_start", 16) == 0 + ) { + /* symbols we link aginst the libc we link ghc or iserv against */ + return 1; +diff --git a/rts/RtsSymbols.c b/rts/RtsSymbols.c +index 1da73dd..29ef159 100644 +--- a/rts/RtsSymbols.c ++++ b/rts/RtsSymbols.c +@@ -1009,7 +1009,31 @@ + SymI_NeedsProto(__ashldi3) \ + SymI_NeedsProto(__ashrdi3) \ + SymI_NeedsProto(__lshrdi3) \ +- SymI_NeedsProto(__fixunsdfdi) ++ SymI_NeedsProto(__fixunsdfdi) \ ++ SymI_NeedsProto(__aeabi_memset) \ ++ SymI_NeedsProto(__aeabi_memset4) \ ++ SymI_NeedsProto(__aeabi_memset8) \ ++ SymI_NeedsProto(__aeabi_memcpy) \ ++ SymI_NeedsProto(__aeabi_memcpy4) \ ++ SymI_NeedsProto(__aeabi_memcpy8) \ ++ SymI_NeedsProto(__aeabi_memmove) \ ++ SymI_NeedsProto(__aeabi_memmove4) \ ++ SymI_NeedsProto(__aeabi_memclr) \ ++ SymI_NeedsProto(__aeabi_memclr4) \ ++ SymI_NeedsProto(__aeabi_memclr8) \ ++ SymI_NeedsProto(__aeabi_idiv) \ ++ SymI_NeedsProto(__aeabi_uidiv) \ ++ SymI_NeedsProto(__aeabi_idivmod) \ ++ SymI_NeedsProto(__aeabi_ldivmod) \ ++ SymI_NeedsProto(__aeabi_uidivmod) \ ++ SymI_NeedsProto(__aeabi_uldivmod) \ ++ SymI_NeedsProto(__aeabi_l2f) \ ++ SymI_NeedsProto(__aeabi_l2d) \ ++ SymI_NeedsProto(__aeabi_ul2d) \ ++ SymI_NeedsProto(__aeabi_d2lz) \ ++ SymI_NeedsProto(__aeabi_d2ulz) ++ ++ + #elif defined(__GNUC__) && SIZEOF_VOID_P == 8 + #define RTS_LIBGCC_SYMBOLS \ + SymI_NeedsProto(__udivti3) \ +@@ -1045,10 +1069,45 @@ + SymI_HasProto(free) \ + SymI_HasProto(malloc) \ + SymI_HasProto(calloc) \ +- SymI_HasProto(realloc) ++ SymI_HasProto(realloc) \ ++ SymI_HasProto(stderr) \ ++ SymI_HasProto(fopen) \ ++ SymI_HasProto(fwrite) \ ++ SymI_HasProto(fread) \ ++ SymI_HasProto(fclose) \ ++ SymI_NeedsProto(__assert) \ ++ SymI_NeedsProto(__assert2) \ ++ SymI_NeedsProto(__stack_chk_guard) \ ++ SymI_NeedsProto(__memset_chk) \ ++ SymI_NeedsProto(__memcpy_chk) \ ++ SymI_HasProto(__strlen_chk) \ ++ SymI_NeedsProto(__write_chk) \ ++ SymI_NeedsProto(__read_chk) \ ++ SymI_NeedsProto(__strlcpy_chk) \ ++ SymI_NeedsProto(__strcpy_chk) \ ++ SymI_NeedsProto(__strncpy_chk) \ ++ SymI_NeedsProto(__vsnprintf_chk) \ ++ SymI_HasProto(__strchr_chk) \ ++ SymI_NeedsProto(open) \ ++ SymI_NeedsProto(close) \ ++ SymI_HasProto(strerror) ++#if defined(linux_android_HOST_OS) && SIZEOF_VOID_P <= 4 ++#define RTS_BIONIC_LIBC_SYMBOLS \ ++ // SymI_NeedsProto(reallocarray) \ ++ // SymI_NeedsProto(__svfscanf) \ ++ // SymI_NeedsProto(__vfwscanf) \ ++ // SymI_NeedsProto(__memset_chk_fail) \ ++ // SymI_NeedsProto(__strcpy_chk_generic) \ ++ // SymI_NeedsProto(__strcat_chk_generic) \ ++ // SymI_NeedsProto(__libc_globals) \ ++ // SymI_NeedsProto(__rel_iplt_start) ++#else ++#define RTS_BIONIC_LIBC_SYMBOLS ++#endif + #else + #define RTS_STACK_PROTECTOR_SYMBOLS + #define RTS_LIBC_SYMBOLS ++#define RTS_BIONIC_LIBC_SYMBOLS + #endif + + /* entirely bogus claims about types of these symbols */ +@@ -1082,6 +1141,7 @@ RTS_LIBFFI_SYMBOLS + RTS_LINKER_SYMBOLS + RTS_STACK_PROTECTOR_SYMBOLS + RTS_LIBC_SYMBOLS ++RTS_BIONIC_LIBC_SYMBOLS + #undef SymI_NeedsProto + #undef SymI_NeedsDataProto + #undef SymI_HasProto +@@ -1137,6 +1197,7 @@ RtsSymbolVal rtsSyms[] = { + RTS_LINKER_SYMBOLS + RTS_STACK_PROTECTOR_SYMBOLS + RTS_LIBC_SYMBOLS ++ RTS_BIONIC_LIBC_SYMBOLS + SymI_HasDataProto(nonmoving_write_barrier_enabled) + #if defined(darwin_HOST_OS) && defined(i386_HOST_ARCH) + // dyld stub code contains references to this, +diff --git a/rts/linker/Elf.c b/rts/linker/Elf.c +index c3f9110..da7007c 100644 +--- a/rts/linker/Elf.c ++++ b/rts/linker/Elf.c +@@ -931,6 +931,14 @@ ocGetNames_ELF ( ObjectCode* oc ) + debugBelch("COMMON symbol, size %ld name %s allocated at %p\n", + symbol->elf_sym->st_size, nm, symbol->addr)); + ++ } else if (ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK ++ && shndx == SHN_UNDEF ++ && (ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_FUNC ++ || ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_OBJECT ++ || ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_NOTYPE)) { ++ symbol->addr = NULL; ++ isLocal = false; ++ isWeak = true; + /* Pointless to do addProddableBlock() for this area, + since the linker should never poke around in it. */ + } else if ((ELF_ST_BIND(symbol->elf_sym->st_info) == STB_GLOBAL +@@ -978,14 +986,7 @@ ocGetNames_ELF ( ObjectCode* oc ) + isWeak = ELF_ST_BIND(symbol->elf_sym->st_info) + == STB_WEAK; + } +- } else if (ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK +- && shndx == SHN_UNDEF +- && (ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_FUNC +- || ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_OBJECT +- || ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_NOTYPE)) { +- symbol->addr = NULL; +- isLocal = false; +- isWeak = true; ++ + } else { + /* skip this symbol */ + IF_DEBUG(linker, +@@ -1244,6 +1245,7 @@ do_Elf_Rel_relocations ( ObjectCode* oc, char* ehdrC, + + const StgBool overflow = !isInt(26, (StgInt32) result); + // Handle overflow and Thumb interworking ++ is_target_thm = S & 0x1; + const StgBool needs_veneer = + (is_target_thm && ELF_R_TYPE(info) == COMPAT_R_ARM_JUMP24) + || overflow; +diff --git a/rts/linker/elf_plt_arm.c b/rts/linker/elf_plt_arm.c +index bd21243..e3bd3cb 100644 +--- a/rts/linker/elf_plt_arm.c ++++ b/rts/linker/elf_plt_arm.c +@@ -117,13 +117,13 @@ makeStubArmArm(Stub * s) { + uint32_t movt_r12 = 0xe340c000; + uint32_t bx_r12 = 0xe12fff1c; + +- *((uint32_t*)s->addr+0) = movw_r12 ++ ((uint32_t*)s->addr)[0] = movw_r12 + | (((uint32_t )s->target & 0xf000) << 4) + | ((uint32_t )s->target & 0x0fff); +- *((uint32_t*)s->addr+1) = movt_r12 ++ ((uint32_t*)s->addr)[1] = movt_r12 + | ((((uint32_t )s->target >> 16) & 0xf000) << 4) + | (((uint32_t )s->target >> 16) & 0x0fff); +- *((uint32_t*)s->addr+2) = bx_r12; ++ ((uint32_t*)s->addr)[2] = bx_r12; + + return EXIT_SUCCESS; + } +@@ -157,17 +157,20 @@ makeStubArmThm(Stub * s) { + uint32_t movt_r12 = 0xf2c00c00; + uint32_t bx_r12 = 0x47600000; + +- *((uint32_t*)s->addr+0) = movw_r12 ++ uint32_t movw_r12_inst = movw_r12 + | (((uint32_t )s->target & 0xf000) << 4) +- | (((uint32_t )s->target & 0x0800) << 16) ++ | (((uint32_t )s->target & 0x0800) << 15) + | (((uint32_t )s->target & 0x0700) << 4) + | ((uint32_t )s->target & 0x00ff); +- *((uint32_t*)s->addr+1) = movt_r12 ++ uint32_t movt_r12_inst = movt_r12 + | ((((uint32_t )s->target >> 16) & 0xf000) << 4) +- | ((((uint32_t )s->target >> 16) & 0x0800) << 16) ++ | ((((uint32_t )s->target >> 16) & 0x0800) << 15) + | ((((uint32_t )s->target >> 16) & 0x0700) << 4) + | (((uint32_t )s->target >> 16) & 0x00ff); +- *((uint32_t*)s->addr+2) = bx_r12; ++ // encode in little endian (half word reversal) ++ ((uint32_t*)s->addr)[0] = (movw_r12_inst << 16) | (movw_r12_inst >> 16); ++ ((uint32_t*)s->addr)[1] = (movt_r12_inst << 16) | (movt_r12_inst >> 16); ++ ((uint32_t*)s->addr)[2] = (bx_r12 << 16) | (bx_r12 >> 16); + + return EXIT_SUCCESS; + } +diff --git a/utils/check-sphinx/dist/.doctrees/environment.pickle b/utils/check-sphinx/dist/.doctrees/environment.pickle +index 98df77f..a7b10a7 100644 +Binary files a/utils/check-sphinx/dist/.doctrees/environment.pickle and b/utils/check-sphinx/dist/.doctrees/environment.pickle differ +diff --git a/utils/genapply/Main.hs b/utils/genapply/Main.hs +index 8c194f1..24514e1 100644 +--- a/utils/genapply/Main.hs ++++ b/utils/genapply/Main.hs +@@ -12,6 +12,11 @@ + -- for details + module Main(main) where + ++#undef linux_BUILD_OS ++#undef x86_64_BUILD_ARCH ++#undef linux_HOST_OS ++#undef x86_64_HOST_ARCH ++ + -- Note [Genapply target as host for RTS macros] + -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + -- We improperly include *HOST* macros for our target... +diff --git a/utils/genapply/ghc.mk b/utils/genapply/ghc.mk +index 8da1f7a..c206b24 100644 +--- a/utils/genapply/ghc.mk ++++ b/utils/genapply/ghc.mk +@@ -27,4 +27,5 @@ $(eval $(call build-prog,utils/genapply,dist,0)) + + # Purposely do the wrong stage for HOST := TARGET hack. + # See Note [Genapply target as host for RTS macros]. +-utils/genapply_dist_CC_OPTS += -I,$(BUILD_1_INCLUDE_DIR) ++$(utils/genapply_dist_depfile_haskell) : $(includes_1_H_CONFIG) $(includes_1_H_PLATFORM) ++utils/genapply_dist_HC_OPTS += -I$(BUILD_1_INCLUDE_DIR) diff --git a/overlays/patches/ghc/ghc-8.10.7-android-bionic-symbols.patch b/overlays/patches/ghc/ghc-8.10.7-android-bionic-symbols.patch new file mode 100644 index 0000000000..eea586d951 --- /dev/null +++ b/overlays/patches/ghc/ghc-8.10.7-android-bionic-symbols.patch @@ -0,0 +1,31 @@ +diff --git a/rts/RtsSymbols.c b/rts/RtsSymbols.c +index 29ef159..3cb0fc0 100644 +--- a/rts/RtsSymbols.c ++++ b/rts/RtsSymbols.c +@@ -1093,14 +1093,18 @@ + SymI_HasProto(strerror) + #if defined(linux_android_HOST_OS) && SIZEOF_VOID_P <= 4 + #define RTS_BIONIC_LIBC_SYMBOLS \ +- // SymI_NeedsProto(reallocarray) \ +- // SymI_NeedsProto(__svfscanf) \ +- // SymI_NeedsProto(__vfwscanf) \ +- // SymI_NeedsProto(__memset_chk_fail) \ +- // SymI_NeedsProto(__strcpy_chk_generic) \ +- // SymI_NeedsProto(__strcat_chk_generic) \ +- // SymI_NeedsProto(__libc_globals) \ +- // SymI_NeedsProto(__rel_iplt_start) ++ SymI_NeedsProto(reallocarray) \ ++ SymI_NeedsProto(dlopen) \ ++ SymI_NeedsProto(dlerror) \ ++ SymI_NeedsProto(dlclose) \ ++ SymI_NeedsProto(dlsym) \ ++ SymI_NeedsProto(__svfscanf) \ ++ SymI_NeedsProto(__vfwscanf) \ ++ SymI_NeedsProto(__memset_chk_fail) \ ++ SymI_NeedsProto(__strcpy_chk_generic) \ ++ SymI_NeedsProto(__strcat_chk_generic) \ ++ SymI_NeedsProto(__libc_globals) \ ++ SymI_NeedsProto(__rel_iplt_start) + #else + #define RTS_BIONIC_LIBC_SYMBOLS + #endif diff --git a/overlays/patches/ghc/ghc-8.10.7-bionic-libc.patch b/overlays/patches/ghc/ghc-8.10.7-bionic-libc.patch new file mode 100644 index 0000000000..1a71fa24d9 --- /dev/null +++ b/overlays/patches/ghc/ghc-8.10.7-bionic-libc.patch @@ -0,0 +1,35 @@ +diff --git a/rts/linker/Elf.c b/rts/linker/Elf.c +index da7007c..9f99f58 100644 +--- a/rts/linker/Elf.c ++++ b/rts/linker/Elf.c +@@ -1968,15 +1968,22 @@ int ocRunInit_ELF( ObjectCode *oc ) + } + + if (kind == SECTIONKIND_INIT_ARRAY) { +- char *init_startC = oc->sections[i].start; +- init_start = (init_t*)init_startC; +- init_end = (init_t*)(init_startC + shdr[i].sh_size); +- for (init = init_start; init < init_end; init++) { +- ASSERT(0x0 != *init); +- (*init)(argc, argv, envv); +- } +- } ++ char *bname = basename(OC_INFORMATIVE_FILENAME(oc)); + ++ // do not run .array initialization for jemalloc from libc. This simply cannot work. ++ // It's most likely already run by the hosting process (ghc, or iserv) as they've been ++ // linked against that libc. ++ if(strncmp(bname, "libc.a(jemalloc.o)", 18) != 0) ++ { ++ char *init_startC = oc->sections[i].start; ++ init_start = (init_t*)init_startC; ++ init_end = (init_t*)(init_startC + shdr[i].sh_size); ++ for (init = init_start; init < init_end; init++) { ++ ASSERT(0x0 != *init); ++ (*init)(argc, argv, envv); ++ } ++ } ++ } + // XXX could be more strict and assert that it's + // SECTIONKIND_RWDATA; but allowing RODATA seems harmless enough. + if ((kind == SECTIONKIND_RWDATA || kind == SECTIONKIND_CODE_OR_RODATA) diff --git a/overlays/patches/ghc/ghc-8.10.7-cross-dont-build-stage2-tools.patch b/overlays/patches/ghc/ghc-8.10.7-cross-dont-build-stage2-tools.patch new file mode 100644 index 0000000000..9d6031dc42 --- /dev/null +++ b/overlays/patches/ghc/ghc-8.10.7-cross-dont-build-stage2-tools.patch @@ -0,0 +1,74 @@ +diff --git a/utils/compare_sizes/ghc.mk b/utils/compare_sizes/ghc.mk +index d659a5e..b5e4228 100644 +--- a/utils/compare_sizes/ghc.mk ++++ b/utils/compare_sizes/ghc.mk +@@ -5,5 +5,6 @@ utils/compare_sizes_MODULES = Main + utils/compare_sizes_dist-install_PROGNAME = compareSizes + utils/compare_sizes_dist-install_INSTALL_INPLACE = NO + ++ifneq "$(Stage1Only)" "YES" + $(eval $(call build-prog,utils/compare_sizes,dist-install,1)) +- ++endif +\ No newline at end of file +diff --git a/utils/ghc-cabal/ghc.mk b/utils/ghc-cabal/ghc.mk +index 290b233..c9a119f 100644 +--- a/utils/ghc-cabal/ghc.mk ++++ b/utils/ghc-cabal/ghc.mk +@@ -104,4 +104,6 @@ utils/ghc-cabal_dist-install_INSTALL_INPLACE = NO + utils/ghc-cabal_dist-install_WANT_BINDIST_WRAPPER = YES + utils/ghc-cabal_dist-install_MODULES = Main + ++ifneq "$(Stage1Only)" "YES" + $(eval $(call build-prog,utils/ghc-cabal,dist-install,1)) ++endif +\ No newline at end of file +diff --git a/utils/hpc/ghc.mk b/utils/hpc/ghc.mk +index 9b2bce2..448ad16 100644 +--- a/utils/hpc/ghc.mk ++++ b/utils/hpc/ghc.mk +@@ -18,4 +18,6 @@ utils/hpc_dist-install_PROGNAME = hpc + utils/hpc_dist-install_SHELL_WRAPPER = YES + utils/hpc_dist-install_INSTALL_SHELL_WRAPPER_NAME = hpc + ++ifneq "$(Stage1Only)" "YES" + $(eval $(call build-prog,utils/hpc,dist-install,1)) ++endif +\ No newline at end of file +diff --git a/utils/hsc2hs/ghc.mk b/utils/hsc2hs/ghc.mk +index 386d472..5cc6037 100644 +--- a/utils/hsc2hs/ghc.mk ++++ b/utils/hsc2hs/ghc.mk +@@ -18,8 +18,12 @@ utils/hsc2hs_dist_INSTALL = NO + utils/hsc2hs_dist-install_INSTALL = YES + endif + ++ifeq "$(Stage1Only)" "YES" ++$(eval $(call build-prog,utils/hsc2hs,dist,0)) ++else + $(eval $(call build-prog,utils/hsc2hs,dist,0)) + $(eval $(call build-prog,utils/hsc2hs,dist-install,1)) ++endif + + # After build-prog above + utils/hsc2hs_dist-install_MODULES = $(utils/hsc2hs_dist_MODULES) +diff --git a/utils/iserv/ghc.mk b/utils/iserv/ghc.mk +index 74f90e6..e747ca7 100644 +--- a/utils/iserv/ghc.mk ++++ b/utils/iserv/ghc.mk +@@ -96,6 +96,7 @@ NEED_iserv_dyn = NO + endif + endif + ++ifneq "$(Stage1Only)" "YES" + ifeq "$(NEED_iserv)" "YES" + $(eval $(call build-prog,utils/iserv,stage2,1)) + endif +@@ -107,6 +108,7 @@ endif + ifeq "$(NEED_iserv_dyn)" "YES" + $(eval $(call build-prog,utils/iserv,stage2_dyn,1)) + endif ++endif + + all_ghc_stage2 : $(iserv-stage2_INPLACE) + all_ghc_stage2 : $(iserv-stage2_p_INPLACE) diff --git a/overlays/patches/ghc/ghc-8.10.7-linker-weak-and-common-armv7a.patch b/overlays/patches/ghc/ghc-8.10.7-linker-weak-and-common-armv7a.patch new file mode 100644 index 0000000000..b416c6e2c4 --- /dev/null +++ b/overlays/patches/ghc/ghc-8.10.7-linker-weak-and-common-armv7a.patch @@ -0,0 +1,189 @@ +diff --git a/rts/Linker.c b/rts/Linker.c +index 10b0764..7d473f8 100644 +--- a/rts/Linker.c ++++ b/rts/Linker.c +@@ -273,7 +273,7 @@ int ghciInsertSymbolTable( + RtsSymbolInfo *pinfo = lookupStrHashTable(table, key); + if (!pinfo) /* new entry */ + { +- pinfo = stgMallocBytes(sizeof (*pinfo), "ghciInsertToSymbolTable"); ++ pinfo = stgCallocBytes(1, sizeof (*pinfo), "ghciInsertToSymbolTable"); + pinfo->value = data; + pinfo->owner = owner; + pinfo->weak = weak; +@@ -1329,7 +1329,7 @@ mkOc( pathchar *path, char *image, int imageSize, + ObjectCode* oc; + + IF_DEBUG(linker, debugBelch("mkOc: start\n")); +- oc = stgMallocBytes(sizeof(ObjectCode), "mkOc(oc)"); ++ oc = stgCallocBytes(1, sizeof(ObjectCode), "mkOc(oc)"); + + oc->info = NULL; + +@@ -1496,12 +1496,12 @@ preloadObjectFile (pathchar *path) + // reading the file, and then we misalign image on purpose so + // that the actual sections end up aligned again. + misalignment = machoGetMisalignment(f); +- image = stgMallocBytes(fileSize + misalignment, "loadObj(image)"); ++ image = stgCallocBytes(1, fileSize + misalignment, "loadObj(image)"); + image += misalignment; + + # else /* !defined(darwin_HOST_OS) */ + +- image = stgMallocBytes(fileSize, "loadObj(image)"); ++ image = stgCallocBytes(1, fileSize, "loadObj(image)"); + + #endif + +diff --git a/rts/LinkerInternals.h b/rts/LinkerInternals.h +index f326a84..a846bf5 100644 +--- a/rts/LinkerInternals.h ++++ b/rts/LinkerInternals.h +@@ -209,6 +209,10 @@ typedef struct _ObjectCode { + int n_segments; + Segment *segments; + ++ // COMMON section ++ void * common_mem; ++ unsigned long common_size; ++ + // + // Garbage collection fields + // +diff --git a/rts/linker/Elf.c b/rts/linker/Elf.c +index fdfe87a..c3f9110 100644 +--- a/rts/linker/Elf.c ++++ b/rts/linker/Elf.c +@@ -325,6 +325,15 @@ ocDeinit_ELF(ObjectCode * oc) + stgFree(oc->info); + oc->info = NULL; + } ++ if(NULL != oc->common_mem) { ++#if RTS_LINKER_USE_MMAP ++ munmap(oc->common_mem, oc->common_size); ++#else ++ stgFree(oc->common_mem); ++#endif ++ } ++ oc->common_mem = NULL; ++ oc->common_size = 0; + } + + /* +@@ -861,14 +870,17 @@ ocGetNames_ELF ( ObjectCode* oc ) + for (size_t j = 0; j < symTab->n_symbols; j++) { + ElfSymbol *symbol = &symTab->symbols[j]; + if (SHN_COMMON == symTab->symbols[j].elf_sym->st_shndx) { +- common_size += symbol->elf_sym->st_size; ++ // st_value holds the alignment. Adding alignment always ++ // should give us some wiggle room to get alignment right. ++ common_size += symbol->elf_sym->st_size + symbol->elf_sym->st_value; + } + } + } +- void * common_mem = NULL; ++ oc->common_mem = NULL; ++ oc->common_size = common_size; + if(common_size > 0) { +- common_mem = mmapAnonForLinker(common_size); +- if (common_mem == NULL) { ++ oc->common_mem = mmapAnonForLinker(common_size); ++ if (oc->common_mem == NULL) { + barf("ocGetNames_ELF: Failed to allocate memory for SHN_COMMONs"); + } + } +@@ -909,9 +921,10 @@ ocGetNames_ELF ( ObjectCode* oc ) + if (shndx == SHN_COMMON) { + isLocal = false; + ASSERT(common_used < common_size); +- ASSERT(common_mem); +- symbol->addr = (void*)((uintptr_t)common_mem + common_used); +- common_used += symbol->elf_sym->st_size; ++ ASSERT(oc->common_mem); ++ int alignment = symbol->elf_sym->st_value-1; ++ symbol->addr = (void*)(((uintptr_t)oc->common_mem + common_used + alignment) & ~alignment); ++ common_used = (uintptr_t)symbol->addr - (uintptr_t)oc->common_mem + symbol->elf_sym->st_size; + ASSERT(common_used <= common_size); + + IF_DEBUG(linker, +@@ -925,7 +938,9 @@ ocGetNames_ELF ( ObjectCode* oc ) + || ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK + ) + /* and not an undefined symbol */ +- && shndx != SHN_UNDEF ++ && (shndx != SHN_UNDEF ++ /* unless it's weak */ ++ || (shndx == SHN_UNDEF && ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK)) + /* and not in a "special section" */ + && (shndx < SHN_LORESERVE + #if defined(SHN_XINDEX) +@@ -963,33 +978,20 @@ ocGetNames_ELF ( ObjectCode* oc ) + isWeak = ELF_ST_BIND(symbol->elf_sym->st_info) + == STB_WEAK; + } +- } +- +- /* And the decision is ... */ +- +- if (symbol->addr != NULL) { +- ASSERT(nm != NULL); +- /* Acquire! */ +- if (!isLocal) { +- +- if (isWeak == HS_BOOL_TRUE) { +- setWeakSymbol(oc, nm); +- } +- if (!ghciInsertSymbolTable(oc->fileName, symhash, +- nm, symbol->addr, isWeak, oc) +- ) { +- goto fail; +- } +- oc->symbols[curSymbol++].name = nm; +- oc->symbols[curSymbol].addr = symbol->addr; +- } +- } else { +- /* Skip. */ ++ } else if (ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK ++ && shndx == SHN_UNDEF ++ && (ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_FUNC ++ || ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_OBJECT ++ || ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_NOTYPE)) { ++ symbol->addr = NULL; ++ isLocal = false; ++ isWeak = true; ++ } else { ++ /* skip this symbol */ + IF_DEBUG(linker, + debugBelch("skipping `%s'\n", + nm) + ); +- + /* + debugBelch( + "skipping bind = %d, type = %d, secno = %d `%s'\n", +@@ -999,7 +1001,24 @@ ocGetNames_ELF ( ObjectCode* oc ) + nm + ); + */ +- } ++ continue; ++ } ++ ++ /* And the decision is ... */ ++ ASSERT(nm != NULL); ++ /* Acquire! */ ++ if (!isLocal) { ++ ++ if (isWeak == HS_BOOL_TRUE) { ++ setWeakSymbol(oc, nm); ++ } ++ if (!ghciInsertSymbolTable(oc->fileName, symhash, ++ nm, symbol->addr, isWeak, oc)) { ++ goto fail; ++ } ++ oc->symbols[curSymbol++].name = nm; ++ oc->symbols[curSymbol].addr = symbol->addr; ++ } + } + } + } \ No newline at end of file diff --git a/overlays/patches/ghc/ghc-8.10.7-linker-weak-and-common.patch b/overlays/patches/ghc/ghc-8.10.7-linker-weak-and-common.patch index b416c6e2c4..b982fe3662 100644 --- a/overlays/patches/ghc/ghc-8.10.7-linker-weak-and-common.patch +++ b/overlays/patches/ghc/ghc-8.10.7-linker-weak-and-common.patch @@ -85,9 +85,9 @@ index fdfe87a..c3f9110 100644 + oc->common_mem = NULL; + oc->common_size = common_size; if(common_size > 0) { -- common_mem = mmapAnonForLinker(common_size); +- common_mem = mmapAnonForLinker(common_size, true, "anon:common_mem"); - if (common_mem == NULL) { -+ oc->common_mem = mmapAnonForLinker(common_size); ++ oc->common_mem = mmapAnonForLinker(common_size, true, "anon:common_mem"); + if (oc->common_mem == NULL) { barf("ocGetNames_ELF: Failed to allocate memory for SHN_COMMONs"); } diff --git a/overlays/patches/ghc/libc-memory-symbols-armv7a.patch b/overlays/patches/ghc/libc-memory-symbols-armv7a.patch new file mode 100644 index 0000000000..c705bdda8f --- /dev/null +++ b/overlays/patches/ghc/libc-memory-symbols-armv7a.patch @@ -0,0 +1,42 @@ +diff --git a/rts/Linker.c b/rts/Linker.c +index 062159f..727fe74 100644 +--- a/rts/Linker.c ++++ b/rts/Linker.c +@@ -340,6 +340,20 @@ int ghciInsertSymbolTable( + call this function again to trigger the duplicate error. */ + return 1; + } ++ else if(strncmp(key, "fprintf", 7) == 0 ++ || strncmp(key, "printf", 6) == 0 ++ || strncmp(key, "sprintf", 7) == 0 ++ || strncmp(key, "snprintf", 8) == 0 ++ || strncmp(key, "getauxval", 9) == 0 ++ || strncmp(key, "free", 4) == 0 ++ || strncmp(key, "malloc", 6) == 0 ++ || strncmp(key, "calloc", 6) == 0 ++ || strncmp(key, "realloc", 7) == 0 ++ || strncmp(key, "reallocarray", 12) == 0 ++ ) { ++ /* symbols we link aginst the libc we link ghc or iserv against */ ++ return 1; ++ } + + pathchar* archiveName = NULL; + debugBelch( +diff --git a/rts/RtsSymbols.c b/rts/RtsSymbols.c +index 2acd634..b86b516 100644 +--- a/rts/RtsSymbols.c ++++ b/rts/RtsSymbols.c +@@ -1039,7 +1039,11 @@ + SymI_HasProto(printf) \ + SymI_HasProto(fprintf) \ + SymI_HasProto(sprintf) \ +- SymI_HasProto(snprintf) ++ SymI_HasProto(snprintf) \ ++ SymI_HasProto(free) \ ++ SymI_HasProto(malloc) \ ++ SymI_HasProto(calloc) \ ++ SymI_HasProto(realloc) + #else + #define RTS_STACK_PROTECTOR_SYMBOLS + #define RTS_LIBC_SYMBOLS \ No newline at end of file diff --git a/overlays/patches/ghc/libraries-prim-os-android-armv7a.patch b/overlays/patches/ghc/libraries-prim-os-android-armv7a.patch new file mode 100644 index 0000000000..23274bf737 --- /dev/null +++ b/overlays/patches/ghc/libraries-prim-os-android-armv7a.patch @@ -0,0 +1,13 @@ +diff --git a/libraries/ghc-prim/ghc-prim.cabal b/libraries/ghc-prim/ghc-prim.cabal +index 2bd51c0..aeaeacc 100644 +--- a/libraries/ghc-prim/ghc-prim.cabal ++++ b/libraries/ghc-prim/ghc-prim.cabal +@@ -67,7 +67,7 @@ Library + -- on Windows. Required because of mingw32. + extra-libraries: user32, mingw32, mingwex + +- if os(linux) ++ if os(linux) || os(android) || os(linux-android) + -- we need libm, but for musl and other's we might need libc, as libm + -- is just an empty shell. + extra-libraries: c, m From 0ca227b8e95a017e3d8a604333382025cde2aa04 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Sat, 18 Feb 2023 13:30:18 +0000 Subject: [PATCH 002/206] allow setupBuildFlags on components and packages --- builder/comp-builder.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/builder/comp-builder.nix b/builder/comp-builder.nix index 04d9ad73c0..dc45ef3686 100644 --- a/builder/comp-builder.nix +++ b/builder/comp-builder.nix @@ -496,17 +496,17 @@ let # See also https://gitlab.haskell.org/ghc/ghc/-/issues/12935 (if contentAddressed then '' runHook preBuild - $SETUP_HS build ${haskellLib.componentTarget componentId} -j1 ${lib.concatStringsSep " " setupBuildFlags} + $SETUP_HS build ${haskellLib.componentTarget componentId} -j1 ${lib.concatStringsSep " " (component.setupBuildFlags ++ setupBuildFlags)} runHook postBuild '' else if stdenv.hostPlatform.isGhcjs then '' runHook preBuild # https://gitlab.haskell.org/ghc/ghc/issues/9221 - $SETUP_HS build ${haskellLib.componentTarget componentId} ${lib.concatStringsSep " " setupBuildFlags} + $SETUP_HS build ${haskellLib.componentTarget componentId} ${lib.concatStringsSep " " (component.setupBuildFlags ++ setupBuildFlags)} runHook postBuild '' else '' runHook preBuild # https://gitlab.haskell.org/ghc/ghc/issues/9221 - $SETUP_HS build ${haskellLib.componentTarget componentId} -j$(($NIX_BUILD_CORES > 4 ? 4 : $NIX_BUILD_CORES)) ${lib.concatStringsSep " " setupBuildFlags} + $SETUP_HS build ${haskellLib.componentTarget componentId} -j$(($NIX_BUILD_CORES > 4 ? 4 : $NIX_BUILD_CORES)) ${lib.concatStringsSep " " (component.setupBuildFlags ++ setupBuildFlags)} runHook postBuild ''); From c3c3ca485bfe9817aa165512ca244d724661e723 Mon Sep 17 00:00:00 2001 From: sh <37271604+shumvgolove@users.noreply.github.com> Date: Sun, 19 Mar 2023 02:50:31 +0300 Subject: [PATCH 003/206] android + ios: missing patches (#1884) * android: missing patches * ios: missing patches --- compiler/ghc/default.nix | 11 ++++-- overlays/bootstrap.nix | 2 + .../ghc/ghc-8.10.7-rts-aarch64-darwin.patch | 18 +++++++++ .../ghc/ghc-8.10.7-weak-symbols-2.patch | 37 +++++++++++++++++++ 4 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 overlays/patches/ghc/ghc-8.10.7-rts-aarch64-darwin.patch create mode 100644 overlays/patches/ghc/ghc-8.10.7-weak-symbols-2.patch diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 34376453e2..d32e1ee946 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -177,6 +177,8 @@ let SplitSections = NO '' + lib.optionalString (!enableLibraryProfiling) '' BUILD_PROF_LIBS = NO + '' + lib.optionalString (disableLargeAddressSpace) '' + libraries/base_CONFIGURE_OPTS += --configure-option=--with-libcharset=no ''; # `--with` flags for libraries needed for RTS linker @@ -210,7 +212,10 @@ let # https://gitlab.haskell.org/ghc/ghc/-/issues/23188 # https://github.com/haskell/cabal/issues/8882 "fp_cv_prog_ar_supports_dash_l=no" - ] ++ lib.optional (targetPlatform.isGhcjs) "--target=javascript-unknown-ghcjs"; # TODO use configurePlatforms once tripple is updated in nixpkgs + ] ++ lib.optionals (targetPlatform.isDarwin) [ + "--without-libcharset" + ] ++ lib.optional (targetPlatform.isGhcjs) "--target=javascript-unknown-ghcjs" # TODO use configurePlatforms once tripple is updated in nixpkgs + ; # Splicer will pull out correct variations libDeps = platform: lib.optional (enableTerminfo && !targetPlatform.isGhcjs) [ targetPackages.ncurses targetPackages.ncurses.dev ] @@ -426,8 +431,8 @@ stdenv.mkDerivation (rec { export NIX_LDFLAGS+=" -rpath $out/lib/${targetPrefix}ghc-${ghc-version}" '' + lib.optionalString stdenv.isDarwin '' export NIX_LDFLAGS+=" -no_dtrace_dof" - '' + - # we really want "+armv7-a,+soft-float,+neon" as features, but llvm will + '' + + # we really want "+armv7-a,+soft-float,+neon" as features, but llvm will # fail with those :facepalm: lib.optionalString targetPlatform.useAndroidPrebuilt '' sed -i -e '5i ,("armv7a-unknown-linux-androideabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "cortex-a8", ""))' llvm-targets diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index e5338f3bf9..08b1aa9019 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -286,6 +286,8 @@ in { # Fix the bad fixups: https://gitlab.haskell.org/ghc/ghc/-/commit/2adc050857a9c1b992040fbfd55fbe65b2851b19 ++ final.lib.optional (versionAtLeast "9.6" && versionLessThan "9.6.4" && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/2adc050857a9c1b992040fbfd55fbe65b2851b19.patch ++ final.lib.optional (versionAtLeast "8.10.7" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAarch64 && final.stdenv.targetPlatform.isMusl && final.stdenv.targetPlatform != final.stdenv.hostPlatform) ./patches/ghc/ghc-8.10-aarch64-musl-gettimeofday.patch + ++ final.lib.optional (versionAtLeast "8.10" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-8.10.7-weak-symbols-2.patch + ++ final.lib.optional (versionAtLeast "8.10" && versionLessThan "9.0" && final.stdenv.targetPlatform.isDarwin && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/ghc-8.10.7-rts-aarch64-darwin.patch ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.2" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/ghc-8.10-android.patch ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.2" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/ghc-8.10.7-android-bionic-symbols.patch ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.2" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/ghc-8.10.7-bionic-libc.patch diff --git a/overlays/patches/ghc/ghc-8.10.7-rts-aarch64-darwin.patch b/overlays/patches/ghc/ghc-8.10.7-rts-aarch64-darwin.patch new file mode 100644 index 0000000000..04d527a098 --- /dev/null +++ b/overlays/patches/ghc/ghc-8.10.7-rts-aarch64-darwin.patch @@ -0,0 +1,18 @@ +diff --git a/rts/ghc.mk b/rts/ghc.mk +index 6d6ff4bb90..02d3c64ce9 100644 +--- a/rts/ghc.mk ++++ b/rts/ghc.mk +@@ -415,6 +415,13 @@ rts_CC_OPTS += -fno-strict-aliasing + + rts_CC_OPTS += -fno-common + ++ ++ifeq "$(TargetArch_CPP)" "aarch64" ++ifeq "$(TargetOS_CPP)" "darwin" ++rts_CC_OPTS += -mcpu=apple-a7 -march=armv8-a+norcpc ++endif ++endif ++ + ifeq "$(BeConservative)" "YES" + rts_CC_OPTS += -DBE_CONSERVATIVE + endif \ No newline at end of file diff --git a/overlays/patches/ghc/ghc-8.10.7-weak-symbols-2.patch b/overlays/patches/ghc/ghc-8.10.7-weak-symbols-2.patch new file mode 100644 index 0000000000..32d493dfa9 --- /dev/null +++ b/overlays/patches/ghc/ghc-8.10.7-weak-symbols-2.patch @@ -0,0 +1,37 @@ +diff --git a/rts/Linker.c b/rts/Linker.c +index 727fe74..12a22d7 100644 +--- a/rts/Linker.c ++++ b/rts/Linker.c +@@ -1810,6 +1810,8 @@ static HsInt resolveObjs_ (void) + IF_DEBUG(linker, debugBelch("resolveObjs: start\n")); + + for (ObjectCode *oc = objects; oc; oc = oc->next) { ++ if(oc->status == OBJECT_RESOLVED) ++ continue; + int r = ocTryLoad(oc); + if (!r) + { +diff --git a/rts/linker/Elf.c b/rts/linker/Elf.c +index c3f9110..1b497af 100644 +--- a/rts/linker/Elf.c ++++ b/rts/linker/Elf.c +@@ -963,10 +963,15 @@ ocGetNames_ELF ( ObjectCode* oc ) + stab[j].st_size, stab[j].st_value, nm); + } + */ +- symbol->addr = (SymbolAddr*)( +- (intptr_t) oc->sections[secno].start + +- (intptr_t) symbol->elf_sym->st_value); +- ASSERT(symbol->addr != 0x0); ++ if(shndx == SHN_UNDEF && ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK) { ++ symbol->addr = NULL; ++ } else { ++ symbol->addr = (SymbolAddr*)( ++ (intptr_t) oc->sections[secno].start + ++ (intptr_t) symbol->elf_sym->st_value); ++ ASSERT(symbol->addr != 0x0); ++ } ++ + if (ELF_ST_BIND(symbol->elf_sym->st_info) == STB_LOCAL) { + isLocal = true; + isWeak = false; From 079fcba3a679957690ebc3e3f6ef80f12b80f996 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Sat, 7 Oct 2023 12:17:56 +0000 Subject: [PATCH 004/206] Fix hadrian naming convenction cabal ends up with aarch64-android whereas hadrian ends up with aarch64-linux_android --- overlays/bootstrap.nix | 1 + overlays/patches/ghc/ghc-9.6-hadrian-android.patch | 10 ++++++++++ 2 files changed, 11 insertions(+) create mode 100644 overlays/patches/ghc/ghc-9.6-hadrian-android.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 08b1aa9019..f268990835 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -292,6 +292,7 @@ in { ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.2" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/ghc-8.10.7-android-bionic-symbols.patch ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.2" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/ghc-8.10.7-bionic-libc.patch ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.2" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/ghc-8.10.7-cross-dont-build-stage2-tools.patch + ++ final.lib.optional (versionAtLeast "9.0" && versionLessThan "9.8" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-9.6-hadrian-android.patch ; in ({ ghc865 = final.callPackage ../compiler/ghc (traceWarnOld "8.6" { diff --git a/overlays/patches/ghc/ghc-9.6-hadrian-android.patch b/overlays/patches/ghc/ghc-9.6-hadrian-android.patch new file mode 100644 index 0000000000..fe0c1c4247 --- /dev/null +++ b/overlays/patches/ghc/ghc-9.6-hadrian-android.patch @@ -0,0 +1,10 @@ +diff --git a/hadrian/src/Hadrian/Haskell/Cabal.hs b/hadrian/src/Hadrian/Haskell/Cabal.hs +index f5864b6..69123e1 100644 +--- a/hadrian/src/Hadrian/Haskell/Cabal.hs ++++ b/hadrian/src/Hadrian/Haskell/Cabal.hs +@@ -71,4 +71,5 @@ cabalOsString :: String -> String + cabalOsString "mingw32" = "windows" + cabalOsString "darwin" = "osx" + cabalOsString "solaris2" = "solaris" ++cabalOsString "linux_android" = "android" + cabalOsString other = other \ No newline at end of file From 676aab265e95806e2413e966a27e0d5104d5f6d2 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Sat, 7 Oct 2023 12:18:06 +0000 Subject: [PATCH 005/206] Fix format --- overlays/patches/ghc/ghc-9.0-better-symbol-addr-debug.patch | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/overlays/patches/ghc/ghc-9.0-better-symbol-addr-debug.patch b/overlays/patches/ghc/ghc-9.0-better-symbol-addr-debug.patch index 6ccc52a728..5d71d3c362 100644 --- a/overlays/patches/ghc/ghc-9.0-better-symbol-addr-debug.patch +++ b/overlays/patches/ghc/ghc-9.0-better-symbol-addr-debug.patch @@ -4,11 +4,11 @@ index d8c4f8b724..5e349f2839 100644 +++ b/rts/linker/elf_reloc_aarch64.c @@ -325,7 +325,8 @@ relocateObjectCodeAarch64(ObjectCode * oc) { ELF64_R_SYM((Elf64_Xword)rel->r_info)); - + CHECK(0x0 != symbol); - CHECK(0x0 != symbol->addr); + if(0x0 == symbol->addr) -+ barf("0x0 address for %s + %d of type %d in %s for relocation %d in section %d of kind: %d\n", symbol->name, rel->r_addend, ELF64_R_TYPE((Elf64_Xword)rel->r_info), OC_INFORMATIVE_FILENAME(oc), i, relaTab->targetSectionIndex, oc->sections[relaTab->targetSectionIndex].kind); - ++ barf("0x0 address for %s + %lld of type %llu in %s for relocation %d in section %d of kind: %d\n", symbol->name, rel->r_addend, ELF64_R_TYPE((Elf64_Xword)rel->r_info), OC_INFORMATIVE_FILENAME(oc), i, relaTab->targetSectionIndex, oc->sections[relaTab->targetSectionIndex].kind); + /* take explicit addend */ int64_t addend = rel->r_addend; From c1dfab03c6853fca36f02f966cf382dcb90e9b53 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Sun, 8 Oct 2023 02:44:20 +0000 Subject: [PATCH 006/206] newlines --- overlays/patches/ghc/ghc-9.6-hadrian-android.patch | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/overlays/patches/ghc/ghc-9.6-hadrian-android.patch b/overlays/patches/ghc/ghc-9.6-hadrian-android.patch index fe0c1c4247..6e32aaadd2 100644 --- a/overlays/patches/ghc/ghc-9.6-hadrian-android.patch +++ b/overlays/patches/ghc/ghc-9.6-hadrian-android.patch @@ -7,4 +7,5 @@ index f5864b6..69123e1 100644 cabalOsString "darwin" = "osx" cabalOsString "solaris2" = "solaris" +cabalOsString "linux_android" = "android" - cabalOsString other = other \ No newline at end of file + cabalOsString other = other + From 9b3230dfd97621193759fafd49d3dfa9db2c14c3 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Tue, 10 Oct 2023 03:35:19 +0000 Subject: [PATCH 007/206] WIP tools --- builder/comp-builder.nix | 6 +- compiler/ghc/default.nix | 6 +- overlays/bootstrap.nix | 3 +- overlays/patches/ghc/ghc-9.6-32bit-cmm.patch | 24 ++++++++ .../ghc/ghc-9.6-hadrian-strip-cmd.patch | 56 +++++++++++++++++++ 5 files changed, 88 insertions(+), 7 deletions(-) create mode 100644 overlays/patches/ghc/ghc-9.6-32bit-cmm.patch create mode 100644 overlays/patches/ghc/ghc-9.6-hadrian-strip-cmd.patch diff --git a/builder/comp-builder.nix b/builder/comp-builder.nix index dc45ef3686..04d9ad73c0 100644 --- a/builder/comp-builder.nix +++ b/builder/comp-builder.nix @@ -496,17 +496,17 @@ let # See also https://gitlab.haskell.org/ghc/ghc/-/issues/12935 (if contentAddressed then '' runHook preBuild - $SETUP_HS build ${haskellLib.componentTarget componentId} -j1 ${lib.concatStringsSep " " (component.setupBuildFlags ++ setupBuildFlags)} + $SETUP_HS build ${haskellLib.componentTarget componentId} -j1 ${lib.concatStringsSep " " setupBuildFlags} runHook postBuild '' else if stdenv.hostPlatform.isGhcjs then '' runHook preBuild # https://gitlab.haskell.org/ghc/ghc/issues/9221 - $SETUP_HS build ${haskellLib.componentTarget componentId} ${lib.concatStringsSep " " (component.setupBuildFlags ++ setupBuildFlags)} + $SETUP_HS build ${haskellLib.componentTarget componentId} ${lib.concatStringsSep " " setupBuildFlags} runHook postBuild '' else '' runHook preBuild # https://gitlab.haskell.org/ghc/ghc/issues/9221 - $SETUP_HS build ${haskellLib.componentTarget componentId} -j$(($NIX_BUILD_CORES > 4 ? 4 : $NIX_BUILD_CORES)) ${lib.concatStringsSep " " (component.setupBuildFlags ++ setupBuildFlags)} + $SETUP_HS build ${haskellLib.componentTarget componentId} -j$(($NIX_BUILD_CORES > 4 ? 4 : $NIX_BUILD_CORES)) ${lib.concatStringsSep " " setupBuildFlags} runHook postBuild ''); diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index d32e1ee946..aee3e4cddf 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -243,7 +243,7 @@ let # for musl only; but I'd like to stay far away from the unnecessary # bindist logic as we can. It's slow, and buggy, and doesn't provide any # value for us. - installStage1 = useHadrian && (haskell-nix.haskellLib.isCrossTarget || stdenv.targetPlatform.isMusl); + installStage1 = useHadrian && (with haskell-nix.haskellLib; isCrossTarget || isNativeMusl); hadrian = let @@ -683,7 +683,7 @@ stdenv.mkDerivation (rec { --replace 'dynamic-library-dirs:' 'dynamic-library-dirs: ${libcxx}/lib ${libcxxabi}/lib' find . -name 'system*.conf*' cat mk/system-cxx-std-lib-1.0.conf - '' + lib.optionalString (installStage1 && stdenv.targetPlatform.isMusl) '' + '' + lib.optionalString (installStage1 && haskell-nix.haskellLib.isNativeMusl) '' substituteInPlace hadrian/cfg/system.config \ --replace 'cross-compiling = YES' \ 'cross-compiling = NO' @@ -768,7 +768,7 @@ stdenv.mkDerivation (rec { --replace 'dynamic-library-dirs:' 'dynamic-library-dirs: ${libcxx}/lib ${libcxxabi}/lib' find . -name 'system*.conf*' cat mk/system-cxx-std-lib-1.0.conf - '' + lib.optionalString (installStage1 && !haskell-nix.haskellLib.isCrossTarget && stdenv.targetPlatform.isMusl) '' + '' + lib.optionalString (installStage1 && haskell-nix.haskellLib.isNativeMusl) '' substituteInPlace hadrian/cfg/system.config \ --replace 'cross-compiling = YES' \ 'cross-compiling = NO' diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index f268990835..6abee87d00 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -251,7 +251,6 @@ in { ++ final.lib.optionals (final.stdenv.targetPlatform.isWindows) (fromUntil "9.4.1" "9.5" ./patches/ghc/ghc-9.4-hadrian-win-cross.patch) ++ fromUntil "9.6.1" "9.8" ./patches/ghc/MR10116.patch ++ fromUntil "9.4.1" "9.6" ./patches/ghc/hadrian-build-deriveConstants-genprimopcode-ghc94.patch - ++ fromUntil "9.6.1" "9.8" ./patches/ghc/hadrian-build-deriveConstants-genprimopcode.patch ++ final.lib.optional (versionAtLeast "8.10" && versionLessThan "9.4" && final.stdenv.targetPlatform != final.stdenv.hostPlatform) ./patches/ghc/ghc-make-stage-1-lib-ghc.patch # the following is a partial reversal of https://gitlab.haskell.org/ghc/ghc/-/merge_requests/4391, to address haskell.nix#1227 @@ -293,6 +292,8 @@ in { ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.2" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/ghc-8.10.7-bionic-libc.patch ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.2" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/ghc-8.10.7-cross-dont-build-stage2-tools.patch ++ final.lib.optional (versionAtLeast "9.0" && versionLessThan "9.8" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-9.6-hadrian-android.patch + ++ final.lib.optional (versionAtLeast "9.0" && versionLessThan "9.8" && final.stdenv.targetPlatform.isMusl && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch + ++ final.lib.optional (versionAtLeast "9.0" && versionLessThan "10.0" && final.stdenv.targetPlatform.is32bit) ./patches/ghc/ghc-9.6-32bit-cmm.patch ; in ({ ghc865 = final.callPackage ../compiler/ghc (traceWarnOld "8.6" { diff --git a/overlays/patches/ghc/ghc-9.6-32bit-cmm.patch b/overlays/patches/ghc/ghc-9.6-32bit-cmm.patch new file mode 100644 index 0000000000..4267c8ec1d --- /dev/null +++ b/overlays/patches/ghc/ghc-9.6-32bit-cmm.patch @@ -0,0 +1,24 @@ +diff --git a/compiler/GHC/StgToCmm/CgUtils.hs b/compiler/GHC/StgToCmm/CgUtils.hs +index 4718cbf..07001c6 100644 +--- a/compiler/GHC/StgToCmm/CgUtils.hs ++++ b/compiler/GHC/StgToCmm/CgUtils.hs +@@ -173,15 +173,15 @@ fixStgRegStmt platform stmt = fixAssign $ mapExpDeep fixExpr stmt + BaseReg -> baseAddr + _other -> CmmLoad baseAddr (globalRegType platform reg) NaturallyAligned + +- CmmRegOff (CmmGlobal reg) offset -> ++ CmmRegOff greg@(CmmGlobal reg) offset -> + -- RegOf leaves are just a shorthand form. If the reg maps + -- to a real reg, we keep the shorthand, otherwise, we just + -- expand it and defer to the above code. + case reg `elem` activeStgRegs platform of + True -> expr +- False -> CmmMachOp (MO_Add (wordWidth platform)) [ +- fixExpr (CmmReg (CmmGlobal reg)), ++ False -> CmmMachOp (MO_Add (cmmRegWidth platform greg)) [ ++ fixExpr (CmmReg greg), + CmmLit (CmmInt (fromIntegral offset) +- (wordWidth platform))] ++ (cmmRegWidth platform greg))] + + other_expr -> other_expr \ No newline at end of file diff --git a/overlays/patches/ghc/ghc-9.6-hadrian-strip-cmd.patch b/overlays/patches/ghc/ghc-9.6-hadrian-strip-cmd.patch new file mode 100644 index 0000000000..f5652b35e9 --- /dev/null +++ b/overlays/patches/ghc/ghc-9.6-hadrian-strip-cmd.patch @@ -0,0 +1,56 @@ +diff --git a/hadrian/cfg/system.config.in b/hadrian/cfg/system.config.in +index 6a891b4..a2289f8 100644 +--- a/hadrian/cfg/system.config.in ++++ b/hadrian/cfg/system.config.in +@@ -18,6 +18,7 @@ merge-objects = @MergeObjsCmd@ + system-merge-objects = @LD_STAGE0@ + objdump = @ObjdumpCmd@ + ranlib = @REAL_RANLIB_CMD@ ++strip = @StripCmd@ + sphinx-build = @SPHINXBUILD@ + system-ar = @AR_STAGE0@ + system-cc = @CC_STAGE0@ +diff --git a/hadrian/src/Oracles/Setting.hs b/hadrian/src/Oracles/Setting.hs +index 462d289..535cc5f 100644 +--- a/hadrian/src/Oracles/Setting.hs ++++ b/hadrian/src/Oracles/Setting.hs +@@ -69,6 +69,7 @@ data Setting = BuildArch + | ProjectPatchLevel + | ProjectPatchLevel1 + | ProjectPatchLevel2 ++ | Strip + | SystemGhc + | TargetArch + | TargetOs +@@ -171,6 +172,7 @@ setting key = lookupSystemConfig $ case key of + ProjectPatchLevel -> "project-patch-level" + ProjectPatchLevel1 -> "project-patch-level1" + ProjectPatchLevel2 -> "project-patch-level2" ++ Strip -> "strip" + SystemGhc -> "system-ghc" + TargetArch -> "target-arch" + TargetArmVersion -> "target-arm-version" +diff --git a/hadrian/src/Settings/Builders/Cabal.hs b/hadrian/src/Settings/Builders/Cabal.hs +index 2e42185..032ca72 100644 +--- a/hadrian/src/Settings/Builders/Cabal.hs ++++ b/hadrian/src/Settings/Builders/Cabal.hs +@@ -85,15 +85,11 @@ commonCabalArgs :: Stage -> Args + commonCabalArgs stage = do + verbosity <- expr getVerbosity + pkg <- getPackage ++ strip <- getSetting Strip + package_id <- expr $ pkgIdentifier pkg + let prefix = "${pkgroot}" ++ (if windowsHost then "" else "/..") +- mconcat [ -- Don't strip libraries when cross compiling. +- -- TODO: We need to set @--with-strip=(stripCmdPath :: Action FilePath)@, +- -- and if it's @:@ disable stripping as well. As it is now, I believe +- -- we might have issues with stripping on Windows, as I can't see a +- -- consumer of 'stripCmdPath'. +- -- TODO: See https://github.com/snowleopard/hadrian/issues/549. +- flag CrossCompiling ? pure [ "--disable-executable-stripping" ++ mconcat [ notStage0 ? strip /= "" ? pure [ "--with-strip=" ++ strip ] ++ , flag CrossCompiling ? pure [ "--disable-executable-stripping" + , "--disable-library-stripping" ] + -- We don't want to strip the debug RTS + , S.package rts ? pure [ "--disable-executable-stripping" + From 26379ae25394bdbe59665cb1444a1fae6a32136a Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Wed, 11 Oct 2023 04:53:27 +0000 Subject: [PATCH 008/206] Add iserv logic --- overlays/bootstrap.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 6abee87d00..15f124b4ff 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -294,6 +294,8 @@ in { ++ final.lib.optional (versionAtLeast "9.0" && versionLessThan "9.8" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-9.6-hadrian-android.patch ++ final.lib.optional (versionAtLeast "9.0" && versionLessThan "9.8" && final.stdenv.targetPlatform.isMusl && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch ++ final.lib.optional (versionAtLeast "9.0" && versionLessThan "10.0" && final.stdenv.targetPlatform.is32bit) ./patches/ghc/ghc-9.6-32bit-cmm.patch + # this one is to allow linking extra symbols from iserv. + ++ final.lib.optional (versionAtLeast "9.6.1" && versionLessThan"9.10" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/iserv-syms.patch ; in ({ ghc865 = final.callPackage ../compiler/ghc (traceWarnOld "8.6" { From 44af1d427b093891b913be62e91f0789c68e5d60 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Sun, 15 Oct 2023 13:04:09 +0000 Subject: [PATCH 009/206] WIP --- overlays/bootstrap.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 15f124b4ff..f59c860d25 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -296,6 +296,7 @@ in { ++ final.lib.optional (versionAtLeast "9.0" && versionLessThan "10.0" && final.stdenv.targetPlatform.is32bit) ./patches/ghc/ghc-9.6-32bit-cmm.patch # this one is to allow linking extra symbols from iserv. ++ final.lib.optional (versionAtLeast "9.6.1" && versionLessThan"9.10" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/iserv-syms.patch + ++ final.lib.optional (versionAtLeast "9.4" && final.stdenv.targetPlatform.isWindows) ./patches/ghc/ghc-9.6-fix-code-symbol-jumps.patch ; in ({ ghc865 = final.callPackage ../compiler/ghc (traceWarnOld "8.6" { From fc0989b2aaf94df29ddb0e79e66a713d7374ed50 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Sun, 22 Oct 2023 13:10:50 +0000 Subject: [PATCH 010/206] Fix 9.6.3 aarch64 outline atomics --- overlays/bootstrap.nix | 1 + ...-9.6.3-fix-outline-atomics-signature.patch | 820 ++++++++++++++++++ 2 files changed, 821 insertions(+) create mode 100644 overlays/patches/ghc/ghc-9.6.3-fix-outline-atomics-signature.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index f59c860d25..e99845690a 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -280,6 +280,7 @@ in { ++ final.lib.optional (versionAtLeast "9.4" && versionLessThan "9.4.8" && final.stdenv.targetPlatform.isWindows) ./patches/ghc/ghc-9.6-fix-code-symbol-jumps.patch ++ final.lib.optional (versionAtLeast "9.6" && versionLessThan "9.6.4" && final.stdenv.targetPlatform.isWindows) ./patches/ghc/ghc-9.6-fix-code-symbol-jumps.patch ++ final.lib.optional (versionAtLeast "9.8" && versionLessThan "9.9.20231203" && final.stdenv.targetPlatform.isWindows) ./patches/ghc/ghc-9.6-fix-code-symbol-jumps.patch + ++ final.lib.optional (versionAtLeast "9.6.3" && versionLessThan "9.10" && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/ghc-9.6.3-fix-outline-atomics-signature.patch # this one is to allow linking extra symbols from iserv. # ++ fromUntil "9.6.1" "9.10" ./patches/ghc/iserv-syms.patch # Fix the bad fixups: https://gitlab.haskell.org/ghc/ghc/-/commit/2adc050857a9c1b992040fbfd55fbe65b2851b19 diff --git a/overlays/patches/ghc/ghc-9.6.3-fix-outline-atomics-signature.patch b/overlays/patches/ghc/ghc-9.6.3-fix-outline-atomics-signature.patch new file mode 100644 index 0000000000..65b683b194 --- /dev/null +++ b/overlays/patches/ghc/ghc-9.6.3-fix-outline-atomics-signature.patch @@ -0,0 +1,820 @@ +diff --git a/rts/ARMOutlineAtomicsSymbols.h b/rts/ARMOutlineAtomicsSymbols.h +index c8a78b5..31c095e 100644 +--- a/rts/ARMOutlineAtomicsSymbols.h ++++ b/rts/ARMOutlineAtomicsSymbols.h +@@ -10,583 +10,583 @@ + #include + #include + +-uint8_t ghc___aarch64_cas1_relax(uint8_t old, uint8_t new, uint8_t* p); +-uint8_t ghc___aarch64_cas1_relax(uint8_t old, uint8_t new, uint8_t* p) { ++uint8_t ghc___aarch64_cas1_relax(uint8_t old, uint8_t new, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_cas1_relax(uint8_t old, uint8_t new, atomic_uint_least8_t* p) { + atomic_compare_exchange_strong_explicit(p, &old, new, memory_order_relaxed, memory_order_relaxed); return old; + } + +-uint8_t ghc___aarch64_cas1_acq(uint8_t old, uint8_t new, uint8_t* p); +-uint8_t ghc___aarch64_cas1_acq(uint8_t old, uint8_t new, uint8_t* p) { ++uint8_t ghc___aarch64_cas1_acq(uint8_t old, uint8_t new, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_cas1_acq(uint8_t old, uint8_t new, atomic_uint_least8_t* p) { + atomic_compare_exchange_strong_explicit(p, &old, new, memory_order_acquire, memory_order_acquire); return old; + } + +-uint8_t ghc___aarch64_cas1_acq_rel(uint8_t old, uint8_t new, uint8_t* p); +-uint8_t ghc___aarch64_cas1_acq_rel(uint8_t old, uint8_t new, uint8_t* p) { ++uint8_t ghc___aarch64_cas1_acq_rel(uint8_t old, uint8_t new, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_cas1_acq_rel(uint8_t old, uint8_t new, atomic_uint_least8_t* p) { + atomic_compare_exchange_strong_explicit(p, &old, new, memory_order_acq_rel, memory_order_acquire); return old; + } + +-uint8_t ghc___aarch64_cas1_sync(uint8_t old, uint8_t new, uint8_t* p); +-uint8_t ghc___aarch64_cas1_sync(uint8_t old, uint8_t new, uint8_t* p) { ++uint8_t ghc___aarch64_cas1_sync(uint8_t old, uint8_t new, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_cas1_sync(uint8_t old, uint8_t new, atomic_uint_least8_t* p) { + atomic_compare_exchange_strong_explicit(p, &old, new, memory_order_seq_cst, memory_order_seq_cst); return old; + } + +-uint16_t ghc___aarch64_cas2_relax(uint16_t old, uint16_t new, uint16_t* p); +-uint16_t ghc___aarch64_cas2_relax(uint16_t old, uint16_t new, uint16_t* p) { ++uint16_t ghc___aarch64_cas2_relax(uint16_t old, uint16_t new, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_cas2_relax(uint16_t old, uint16_t new, atomic_uint_least16_t* p) { + atomic_compare_exchange_strong_explicit(p, &old, new, memory_order_relaxed, memory_order_relaxed); return old; + } + +-uint16_t ghc___aarch64_cas2_acq(uint16_t old, uint16_t new, uint16_t* p); +-uint16_t ghc___aarch64_cas2_acq(uint16_t old, uint16_t new, uint16_t* p) { ++uint16_t ghc___aarch64_cas2_acq(uint16_t old, uint16_t new, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_cas2_acq(uint16_t old, uint16_t new, atomic_uint_least16_t* p) { + atomic_compare_exchange_strong_explicit(p, &old, new, memory_order_acquire, memory_order_acquire); return old; + } + +-uint16_t ghc___aarch64_cas2_acq_rel(uint16_t old, uint16_t new, uint16_t* p); +-uint16_t ghc___aarch64_cas2_acq_rel(uint16_t old, uint16_t new, uint16_t* p) { ++uint16_t ghc___aarch64_cas2_acq_rel(uint16_t old, uint16_t new, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_cas2_acq_rel(uint16_t old, uint16_t new, atomic_uint_least16_t* p) { + atomic_compare_exchange_strong_explicit(p, &old, new, memory_order_acq_rel, memory_order_acquire); return old; + } + +-uint16_t ghc___aarch64_cas2_sync(uint16_t old, uint16_t new, uint16_t* p); +-uint16_t ghc___aarch64_cas2_sync(uint16_t old, uint16_t new, uint16_t* p) { ++uint16_t ghc___aarch64_cas2_sync(uint16_t old, uint16_t new, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_cas2_sync(uint16_t old, uint16_t new, atomic_uint_least16_t* p) { + atomic_compare_exchange_strong_explicit(p, &old, new, memory_order_seq_cst, memory_order_seq_cst); return old; + } + +-uint32_t ghc___aarch64_cas4_relax(uint32_t old, uint32_t new, uint32_t* p); +-uint32_t ghc___aarch64_cas4_relax(uint32_t old, uint32_t new, uint32_t* p) { ++uint32_t ghc___aarch64_cas4_relax(uint32_t old, uint32_t new, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_cas4_relax(uint32_t old, uint32_t new, atomic_uint_least32_t* p) { + atomic_compare_exchange_strong_explicit(p, &old, new, memory_order_relaxed, memory_order_relaxed); return old; + } + +-uint32_t ghc___aarch64_cas4_acq(uint32_t old, uint32_t new, uint32_t* p); +-uint32_t ghc___aarch64_cas4_acq(uint32_t old, uint32_t new, uint32_t* p) { ++uint32_t ghc___aarch64_cas4_acq(uint32_t old, uint32_t new, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_cas4_acq(uint32_t old, uint32_t new, atomic_uint_least32_t* p) { + atomic_compare_exchange_strong_explicit(p, &old, new, memory_order_acquire, memory_order_acquire); return old; + } + +-uint32_t ghc___aarch64_cas4_acq_rel(uint32_t old, uint32_t new, uint32_t* p); +-uint32_t ghc___aarch64_cas4_acq_rel(uint32_t old, uint32_t new, uint32_t* p) { ++uint32_t ghc___aarch64_cas4_acq_rel(uint32_t old, uint32_t new, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_cas4_acq_rel(uint32_t old, uint32_t new, atomic_uint_least32_t* p) { + atomic_compare_exchange_strong_explicit(p, &old, new, memory_order_acq_rel, memory_order_acquire); return old; + } + +-uint32_t ghc___aarch64_cas4_sync(uint32_t old, uint32_t new, uint32_t* p); +-uint32_t ghc___aarch64_cas4_sync(uint32_t old, uint32_t new, uint32_t* p) { ++uint32_t ghc___aarch64_cas4_sync(uint32_t old, uint32_t new, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_cas4_sync(uint32_t old, uint32_t new, atomic_uint_least32_t* p) { + atomic_compare_exchange_strong_explicit(p, &old, new, memory_order_seq_cst, memory_order_seq_cst); return old; + } + +-uint64_t ghc___aarch64_cas8_relax(uint64_t old, uint64_t new, uint64_t* p); +-uint64_t ghc___aarch64_cas8_relax(uint64_t old, uint64_t new, uint64_t* p) { ++uint64_t ghc___aarch64_cas8_relax(uint64_t old, uint64_t new, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_cas8_relax(uint64_t old, uint64_t new, atomic_uint_least64_t* p) { + atomic_compare_exchange_strong_explicit(p, &old, new, memory_order_relaxed, memory_order_relaxed); return old; + } + +-uint64_t ghc___aarch64_cas8_acq(uint64_t old, uint64_t new, uint64_t* p); +-uint64_t ghc___aarch64_cas8_acq(uint64_t old, uint64_t new, uint64_t* p) { ++uint64_t ghc___aarch64_cas8_acq(uint64_t old, uint64_t new, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_cas8_acq(uint64_t old, uint64_t new, atomic_uint_least64_t* p) { + atomic_compare_exchange_strong_explicit(p, &old, new, memory_order_acquire, memory_order_acquire); return old; + } + +-uint64_t ghc___aarch64_cas8_acq_rel(uint64_t old, uint64_t new, uint64_t* p); +-uint64_t ghc___aarch64_cas8_acq_rel(uint64_t old, uint64_t new, uint64_t* p) { ++uint64_t ghc___aarch64_cas8_acq_rel(uint64_t old, uint64_t new, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_cas8_acq_rel(uint64_t old, uint64_t new, atomic_uint_least64_t* p) { + atomic_compare_exchange_strong_explicit(p, &old, new, memory_order_acq_rel, memory_order_acquire); return old; + } + +-uint64_t ghc___aarch64_cas8_sync(uint64_t old, uint64_t new, uint64_t* p); +-uint64_t ghc___aarch64_cas8_sync(uint64_t old, uint64_t new, uint64_t* p) { ++uint64_t ghc___aarch64_cas8_sync(uint64_t old, uint64_t new, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_cas8_sync(uint64_t old, uint64_t new, atomic_uint_least64_t* p) { + atomic_compare_exchange_strong_explicit(p, &old, new, memory_order_seq_cst, memory_order_seq_cst); return old; + } + +-uint8_t ghc___aarch64_swp1_relax(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_swp1_relax(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_swp1_relax(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_swp1_relax(uint8_t v, atomic_uint_least8_t* p) { + return atomic_exchange_explicit(p, v, memory_order_relaxed); + } + +-uint8_t ghc___aarch64_swp1_acq(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_swp1_acq(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_swp1_acq(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_swp1_acq(uint8_t v, atomic_uint_least8_t* p) { + return atomic_exchange_explicit(p, v, memory_order_acquire); + } + +-uint8_t ghc___aarch64_swp1_rel(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_swp1_rel(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_swp1_rel(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_swp1_rel(uint8_t v, atomic_uint_least8_t* p) { + return atomic_exchange_explicit(p, v, memory_order_release); + } + +-uint8_t ghc___aarch64_swp1_acq_rel(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_swp1_acq_rel(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_swp1_acq_rel(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_swp1_acq_rel(uint8_t v, atomic_uint_least8_t* p) { + return atomic_exchange_explicit(p, v, memory_order_acq_rel); + } + +-uint8_t ghc___aarch64_swp1_sync(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_swp1_sync(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_swp1_sync(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_swp1_sync(uint8_t v, atomic_uint_least8_t* p) { + return atomic_exchange_explicit(p, v, memory_order_seq_cst); + } + +-uint16_t ghc___aarch64_swp2_relax(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_swp2_relax(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_swp2_relax(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_swp2_relax(uint16_t v, atomic_uint_least16_t* p) { + return atomic_exchange_explicit(p, v, memory_order_relaxed); + } + +-uint16_t ghc___aarch64_swp2_acq(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_swp2_acq(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_swp2_acq(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_swp2_acq(uint16_t v, atomic_uint_least16_t* p) { + return atomic_exchange_explicit(p, v, memory_order_acquire); + } + +-uint16_t ghc___aarch64_swp2_rel(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_swp2_rel(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_swp2_rel(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_swp2_rel(uint16_t v, atomic_uint_least16_t* p) { + return atomic_exchange_explicit(p, v, memory_order_release); + } + +-uint16_t ghc___aarch64_swp2_acq_rel(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_swp2_acq_rel(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_swp2_acq_rel(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_swp2_acq_rel(uint16_t v, atomic_uint_least16_t* p) { + return atomic_exchange_explicit(p, v, memory_order_acq_rel); + } + +-uint16_t ghc___aarch64_swp2_sync(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_swp2_sync(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_swp2_sync(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_swp2_sync(uint16_t v, atomic_uint_least16_t* p) { + return atomic_exchange_explicit(p, v, memory_order_seq_cst); + } + +-uint32_t ghc___aarch64_swp4_relax(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_swp4_relax(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_swp4_relax(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_swp4_relax(uint32_t v, atomic_uint_least32_t* p) { + return atomic_exchange_explicit(p, v, memory_order_relaxed); + } + +-uint32_t ghc___aarch64_swp4_acq(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_swp4_acq(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_swp4_acq(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_swp4_acq(uint32_t v, atomic_uint_least32_t* p) { + return atomic_exchange_explicit(p, v, memory_order_acquire); + } + +-uint32_t ghc___aarch64_swp4_rel(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_swp4_rel(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_swp4_rel(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_swp4_rel(uint32_t v, atomic_uint_least32_t* p) { + return atomic_exchange_explicit(p, v, memory_order_release); + } + +-uint32_t ghc___aarch64_swp4_acq_rel(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_swp4_acq_rel(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_swp4_acq_rel(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_swp4_acq_rel(uint32_t v, atomic_uint_least32_t* p) { + return atomic_exchange_explicit(p, v, memory_order_acq_rel); + } + +-uint32_t ghc___aarch64_swp4_sync(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_swp4_sync(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_swp4_sync(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_swp4_sync(uint32_t v, atomic_uint_least32_t* p) { + return atomic_exchange_explicit(p, v, memory_order_seq_cst); + } + +-uint64_t ghc___aarch64_swp8_relax(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_swp8_relax(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_swp8_relax(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_swp8_relax(uint64_t v, atomic_uint_least64_t* p) { + return atomic_exchange_explicit(p, v, memory_order_relaxed); + } + +-uint64_t ghc___aarch64_swp8_acq(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_swp8_acq(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_swp8_acq(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_swp8_acq(uint64_t v, atomic_uint_least64_t* p) { + return atomic_exchange_explicit(p, v, memory_order_acquire); + } + +-uint64_t ghc___aarch64_swp8_rel(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_swp8_rel(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_swp8_rel(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_swp8_rel(uint64_t v, atomic_uint_least64_t* p) { + return atomic_exchange_explicit(p, v, memory_order_release); + } + +-uint64_t ghc___aarch64_swp8_acq_rel(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_swp8_acq_rel(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_swp8_acq_rel(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_swp8_acq_rel(uint64_t v, atomic_uint_least64_t* p) { + return atomic_exchange_explicit(p, v, memory_order_acq_rel); + } + +-uint64_t ghc___aarch64_swp8_sync(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_swp8_sync(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_swp8_sync(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_swp8_sync(uint64_t v, atomic_uint_least64_t* p) { + return atomic_exchange_explicit(p, v, memory_order_seq_cst); + } + +-uint8_t ghc___aarch64_ldadd1_relax(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldadd1_relax(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldadd1_relax(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldadd1_relax(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_relaxed); + } + +-uint8_t ghc___aarch64_ldadd1_acq(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldadd1_acq(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldadd1_acq(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldadd1_acq(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_acquire); + } + +-uint8_t ghc___aarch64_ldadd1_rel(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldadd1_rel(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldadd1_rel(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldadd1_rel(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_release); + } + +-uint8_t ghc___aarch64_ldadd1_acq_rel(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldadd1_acq_rel(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldadd1_acq_rel(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldadd1_acq_rel(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_acq_rel); + } + +-uint8_t ghc___aarch64_ldadd1_sync(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldadd1_sync(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldadd1_sync(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldadd1_sync(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_seq_cst); + } + +-uint16_t ghc___aarch64_ldadd2_relax(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldadd2_relax(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldadd2_relax(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldadd2_relax(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_relaxed); + } + +-uint16_t ghc___aarch64_ldadd2_acq(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldadd2_acq(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldadd2_acq(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldadd2_acq(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_acquire); + } + +-uint16_t ghc___aarch64_ldadd2_rel(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldadd2_rel(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldadd2_rel(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldadd2_rel(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_release); + } + +-uint16_t ghc___aarch64_ldadd2_acq_rel(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldadd2_acq_rel(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldadd2_acq_rel(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldadd2_acq_rel(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_acq_rel); + } + +-uint16_t ghc___aarch64_ldadd2_sync(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldadd2_sync(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldadd2_sync(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldadd2_sync(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_seq_cst); + } + +-uint32_t ghc___aarch64_ldadd4_relax(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldadd4_relax(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldadd4_relax(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldadd4_relax(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_relaxed); + } + +-uint32_t ghc___aarch64_ldadd4_acq(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldadd4_acq(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldadd4_acq(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldadd4_acq(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_acquire); + } + +-uint32_t ghc___aarch64_ldadd4_rel(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldadd4_rel(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldadd4_rel(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldadd4_rel(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_release); + } + +-uint32_t ghc___aarch64_ldadd4_acq_rel(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldadd4_acq_rel(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldadd4_acq_rel(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldadd4_acq_rel(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_acq_rel); + } + +-uint32_t ghc___aarch64_ldadd4_sync(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldadd4_sync(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldadd4_sync(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldadd4_sync(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_seq_cst); + } + +-uint64_t ghc___aarch64_ldadd8_relax(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldadd8_relax(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldadd8_relax(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldadd8_relax(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_relaxed); + } + +-uint64_t ghc___aarch64_ldadd8_acq(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldadd8_acq(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldadd8_acq(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldadd8_acq(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_acquire); + } + +-uint64_t ghc___aarch64_ldadd8_rel(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldadd8_rel(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldadd8_rel(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldadd8_rel(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_release); + } + +-uint64_t ghc___aarch64_ldadd8_acq_rel(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldadd8_acq_rel(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldadd8_acq_rel(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldadd8_acq_rel(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_acq_rel); + } + +-uint64_t ghc___aarch64_ldadd8_sync(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldadd8_sync(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldadd8_sync(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldadd8_sync(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_add_explicit(p, v, memory_order_seq_cst); + } + +-uint8_t ghc___aarch64_ldclr1_relax(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldclr1_relax(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldclr1_relax(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldclr1_relax(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_relaxed); + } + +-uint8_t ghc___aarch64_ldclr1_acq(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldclr1_acq(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldclr1_acq(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldclr1_acq(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_acquire); + } + +-uint8_t ghc___aarch64_ldclr1_rel(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldclr1_rel(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldclr1_rel(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldclr1_rel(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_release); + } + +-uint8_t ghc___aarch64_ldclr1_acq_rel(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldclr1_acq_rel(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldclr1_acq_rel(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldclr1_acq_rel(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_acq_rel); + } + +-uint8_t ghc___aarch64_ldclr1_sync(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldclr1_sync(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldclr1_sync(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldclr1_sync(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_seq_cst); + } + +-uint16_t ghc___aarch64_ldclr2_relax(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldclr2_relax(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldclr2_relax(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldclr2_relax(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_relaxed); + } + +-uint16_t ghc___aarch64_ldclr2_acq(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldclr2_acq(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldclr2_acq(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldclr2_acq(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_acquire); + } + +-uint16_t ghc___aarch64_ldclr2_rel(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldclr2_rel(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldclr2_rel(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldclr2_rel(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_release); + } + +-uint16_t ghc___aarch64_ldclr2_acq_rel(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldclr2_acq_rel(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldclr2_acq_rel(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldclr2_acq_rel(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_acq_rel); + } + +-uint16_t ghc___aarch64_ldclr2_sync(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldclr2_sync(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldclr2_sync(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldclr2_sync(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_seq_cst); + } + +-uint32_t ghc___aarch64_ldclr4_relax(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldclr4_relax(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldclr4_relax(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldclr4_relax(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_relaxed); + } + +-uint32_t ghc___aarch64_ldclr4_acq(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldclr4_acq(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldclr4_acq(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldclr4_acq(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_acquire); + } + +-uint32_t ghc___aarch64_ldclr4_rel(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldclr4_rel(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldclr4_rel(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldclr4_rel(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_release); + } + +-uint32_t ghc___aarch64_ldclr4_acq_rel(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldclr4_acq_rel(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldclr4_acq_rel(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldclr4_acq_rel(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_acq_rel); + } + +-uint32_t ghc___aarch64_ldclr4_sync(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldclr4_sync(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldclr4_sync(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldclr4_sync(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_seq_cst); + } + +-uint64_t ghc___aarch64_ldclr8_relax(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldclr8_relax(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldclr8_relax(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldclr8_relax(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_relaxed); + } + +-uint64_t ghc___aarch64_ldclr8_acq(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldclr8_acq(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldclr8_acq(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldclr8_acq(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_acquire); + } + +-uint64_t ghc___aarch64_ldclr8_rel(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldclr8_rel(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldclr8_rel(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldclr8_rel(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_release); + } + +-uint64_t ghc___aarch64_ldclr8_acq_rel(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldclr8_acq_rel(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldclr8_acq_rel(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldclr8_acq_rel(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_acq_rel); + } + +-uint64_t ghc___aarch64_ldclr8_sync(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldclr8_sync(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldclr8_sync(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldclr8_sync(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_and_explicit(p, v, memory_order_seq_cst); + } + +-uint8_t ghc___aarch64_ldeor1_relax(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldeor1_relax(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldeor1_relax(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldeor1_relax(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_relaxed); + } + +-uint8_t ghc___aarch64_ldeor1_acq(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldeor1_acq(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldeor1_acq(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldeor1_acq(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_acquire); + } + +-uint8_t ghc___aarch64_ldeor1_rel(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldeor1_rel(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldeor1_rel(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldeor1_rel(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_release); + } + +-uint8_t ghc___aarch64_ldeor1_acq_rel(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldeor1_acq_rel(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldeor1_acq_rel(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldeor1_acq_rel(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_acq_rel); + } + +-uint8_t ghc___aarch64_ldeor1_sync(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldeor1_sync(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldeor1_sync(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldeor1_sync(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_seq_cst); + } + +-uint16_t ghc___aarch64_ldeor2_relax(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldeor2_relax(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldeor2_relax(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldeor2_relax(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_relaxed); + } + +-uint16_t ghc___aarch64_ldeor2_acq(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldeor2_acq(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldeor2_acq(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldeor2_acq(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_acquire); + } + +-uint16_t ghc___aarch64_ldeor2_rel(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldeor2_rel(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldeor2_rel(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldeor2_rel(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_release); + } + +-uint16_t ghc___aarch64_ldeor2_acq_rel(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldeor2_acq_rel(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldeor2_acq_rel(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldeor2_acq_rel(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_acq_rel); + } + +-uint16_t ghc___aarch64_ldeor2_sync(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldeor2_sync(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldeor2_sync(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldeor2_sync(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_seq_cst); + } + +-uint32_t ghc___aarch64_ldeor4_relax(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldeor4_relax(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldeor4_relax(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldeor4_relax(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_relaxed); + } + +-uint32_t ghc___aarch64_ldeor4_acq(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldeor4_acq(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldeor4_acq(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldeor4_acq(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_acquire); + } + +-uint32_t ghc___aarch64_ldeor4_rel(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldeor4_rel(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldeor4_rel(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldeor4_rel(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_release); + } + +-uint32_t ghc___aarch64_ldeor4_acq_rel(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldeor4_acq_rel(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldeor4_acq_rel(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldeor4_acq_rel(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_acq_rel); + } + +-uint32_t ghc___aarch64_ldeor4_sync(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldeor4_sync(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldeor4_sync(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldeor4_sync(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_seq_cst); + } + +-uint64_t ghc___aarch64_ldeor8_relax(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldeor8_relax(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldeor8_relax(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldeor8_relax(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_relaxed); + } + +-uint64_t ghc___aarch64_ldeor8_acq(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldeor8_acq(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldeor8_acq(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldeor8_acq(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_acquire); + } + +-uint64_t ghc___aarch64_ldeor8_rel(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldeor8_rel(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldeor8_rel(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldeor8_rel(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_release); + } + +-uint64_t ghc___aarch64_ldeor8_acq_rel(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldeor8_acq_rel(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldeor8_acq_rel(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldeor8_acq_rel(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_acq_rel); + } + +-uint64_t ghc___aarch64_ldeor8_sync(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldeor8_sync(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldeor8_sync(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldeor8_sync(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_xor_explicit(p, v, memory_order_seq_cst); + } + +-uint8_t ghc___aarch64_ldset1_relax(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldset1_relax(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldset1_relax(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldset1_relax(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_relaxed); + } + +-uint8_t ghc___aarch64_ldset1_acq(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldset1_acq(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldset1_acq(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldset1_acq(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_acquire); + } + +-uint8_t ghc___aarch64_ldset1_rel(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldset1_rel(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldset1_rel(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldset1_rel(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_release); + } + +-uint8_t ghc___aarch64_ldset1_acq_rel(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldset1_acq_rel(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldset1_acq_rel(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldset1_acq_rel(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_acq_rel); + } + +-uint8_t ghc___aarch64_ldset1_sync(uint8_t v, uint8_t* p); +-uint8_t ghc___aarch64_ldset1_sync(uint8_t v, uint8_t* p) { ++uint8_t ghc___aarch64_ldset1_sync(uint8_t v, atomic_uint_least8_t* p); ++uint8_t ghc___aarch64_ldset1_sync(uint8_t v, atomic_uint_least8_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_seq_cst); + } + +-uint16_t ghc___aarch64_ldset2_relax(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldset2_relax(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldset2_relax(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldset2_relax(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_relaxed); + } + +-uint16_t ghc___aarch64_ldset2_acq(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldset2_acq(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldset2_acq(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldset2_acq(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_acquire); + } + +-uint16_t ghc___aarch64_ldset2_rel(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldset2_rel(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldset2_rel(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldset2_rel(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_release); + } + +-uint16_t ghc___aarch64_ldset2_acq_rel(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldset2_acq_rel(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldset2_acq_rel(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldset2_acq_rel(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_acq_rel); + } + +-uint16_t ghc___aarch64_ldset2_sync(uint16_t v, uint16_t* p); +-uint16_t ghc___aarch64_ldset2_sync(uint16_t v, uint16_t* p) { ++uint16_t ghc___aarch64_ldset2_sync(uint16_t v, atomic_uint_least16_t* p); ++uint16_t ghc___aarch64_ldset2_sync(uint16_t v, atomic_uint_least16_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_seq_cst); + } + +-uint32_t ghc___aarch64_ldset4_relax(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldset4_relax(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldset4_relax(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldset4_relax(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_relaxed); + } + +-uint32_t ghc___aarch64_ldset4_acq(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldset4_acq(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldset4_acq(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldset4_acq(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_acquire); + } + +-uint32_t ghc___aarch64_ldset4_rel(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldset4_rel(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldset4_rel(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldset4_rel(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_release); + } + +-uint32_t ghc___aarch64_ldset4_acq_rel(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldset4_acq_rel(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldset4_acq_rel(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldset4_acq_rel(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_acq_rel); + } + +-uint32_t ghc___aarch64_ldset4_sync(uint32_t v, uint32_t* p); +-uint32_t ghc___aarch64_ldset4_sync(uint32_t v, uint32_t* p) { ++uint32_t ghc___aarch64_ldset4_sync(uint32_t v, atomic_uint_least32_t* p); ++uint32_t ghc___aarch64_ldset4_sync(uint32_t v, atomic_uint_least32_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_seq_cst); + } + +-uint64_t ghc___aarch64_ldset8_relax(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldset8_relax(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldset8_relax(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldset8_relax(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_relaxed); + } + +-uint64_t ghc___aarch64_ldset8_acq(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldset8_acq(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldset8_acq(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldset8_acq(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_acquire); + } + +-uint64_t ghc___aarch64_ldset8_rel(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldset8_rel(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldset8_rel(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldset8_rel(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_release); + } + +-uint64_t ghc___aarch64_ldset8_acq_rel(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldset8_acq_rel(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldset8_acq_rel(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldset8_acq_rel(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_acq_rel); + } + +-uint64_t ghc___aarch64_ldset8_sync(uint64_t v, uint64_t* p); +-uint64_t ghc___aarch64_ldset8_sync(uint64_t v, uint64_t* p) { ++uint64_t ghc___aarch64_ldset8_sync(uint64_t v, atomic_uint_least64_t* p); ++uint64_t ghc___aarch64_ldset8_sync(uint64_t v, atomic_uint_least64_t* p) { + return atomic_fetch_or_explicit(p, v, memory_order_seq_cst); + } + From 8c33c01ba053c6847ea74c7a4b1a2e7de84bb292 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Mon, 23 Oct 2023 08:00:12 +0000 Subject: [PATCH 011/206] Better patch --- .../iserv-proxy-interpreter-9.3-android.patch | 166 ++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 overlays/patches/iserv-proxy-interpreter-9.3-android.patch diff --git a/overlays/patches/iserv-proxy-interpreter-9.3-android.patch b/overlays/patches/iserv-proxy-interpreter-9.3-android.patch new file mode 100644 index 0000000000..0f40f148b9 --- /dev/null +++ b/overlays/patches/iserv-proxy-interpreter-9.3-android.patch @@ -0,0 +1,166 @@ +diff --git a/cbits/symbols.c b/cbits/symbols.c +new file mode 100644 +index 0000000..d447895 +--- /dev/null ++++ b/cbits/symbols.c +@@ -0,0 +1,147 @@ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++// #include ++// #include // this includes too many overloaded items. ++#include ++#include ++#include ++#include ++#include ++#include ++ ++// fnctl stubs, see above ++extern void open(void); ++extern void creat(void); ++extern void eventfd(void); ++extern void eventfd_write(void); ++extern void __stack_chk_fail(void); ++ ++typedef void SymbolAddr; ++typedef char SymbolName; ++ ++typedef enum _SymStrength { ++ STRENGTH_NORMAL, ++ STRENGTH_WEAK, ++ STRENGTH_STRONG, ++} SymStrength; ++ ++typedef enum _SymType { ++ SYM_TYPE_CODE = 1 << 0, /* the symbol is a function and can be relocated via a jump island */ ++ SYM_TYPE_DATA = 1 << 1, /* the symbol is data */ ++ SYM_TYPE_INDIRECT_DATA = 1 << 2, /* see Note [_iob_func symbol] */ ++ SYM_TYPE_DUP_DISCARD = 1 << 3, /* the symbol is a symbol in a BFD import library ++ however if a duplicate is found with a mismatching ++ SymType then discard this one. */ ++} SymType; ++ ++typedef struct _RtsSymbolVal { ++ const SymbolName* lbl; ++ SymbolAddr* addr; ++ SymStrength strength; ++ SymType type; ++} RtsSymbolVal; ++ ++#define SYM(x) { #x, (void*)(&x), STRENGTH_NORMAL, 1 } ++typedef mode_t (*umask_func_ptr_t)(mode_t); ++ ++RtsSymbolVal my_iserv_syms[] = { ++ // time.h ++ SYM(clock), ++ // sys/time.h ++ SYM(gettimeofday),SYM(clock_getres),SYM(clock_gettime),SYM(localtime_r),SYM(tzset), ++ // unistd.h ++ SYM(environ), ++ SYM(ftruncate), ++ SYM(getenv), ++ SYM(putenv), ++ SYM(unsetenv), ++ SYM(read), ++ SYM(write), ++ SYM(isatty), ++ SYM(link), ++ SYM(pipe), ++ SYM(unlink), ++ // errno.h ++ SYM(__errno), ++ // math.h ++ SYM(sinhf), SYM(sinh), SYM(sinf), SYM(sin), ++ SYM(coshf), SYM(cosh), SYM(cosf), SYM(cos), ++ SYM(atanhf), SYM(atanh), SYM(atanf), SYM(atan), ++ SYM(asinhf), SYM(asinh), SYM(asinf), SYM(asin), ++ SYM(acoshf), SYM(acosh), SYM(acosf), SYM(acos), ++ SYM(log1pf), SYM(log1p), SYM(logf), SYM(log), ++ SYM(expm1f), SYM(expm1), ++ SYM(expf), SYM(exp), ++ SYM(ldexp), ++ SYM(powf), SYM(pow), ++ SYM(sqrtf), SYM(sqrt), ++ SYM(tanhf), SYM(tanh), SYM(tanf), SYM(tan), ++ // assert.h ++ SYM(__assert2), ++ // signal.h ++ SYM(raise), SYM(sigaddset), SYM(sigemptyset), SYM(sigprocmask), ++ // sys/eventfd.h ++ SYM(eventfd), SYM(eventfd_write), ++ // sys/stat.h ++ SYM(fstat), ++ SYM(lstat), ++ SYM(stat), ++ SYM(chmod), ++ SYM(mkfifo), ++ // SYM(umask), ++ { "umask", (umask_func_ptr_t)(&umask), STRENGTH_NORMAL, 1 }, ++ // sys/wait.h ++ SYM(waitpid), ++ // sym/epoll.h ++ SYM(epoll_create), SYM(epoll_ctl), SYM(epoll_wait), ++ // poll.h ++ SYM(poll), ++ // fcntl.h ++ SYM(open), SYM(creat), SYM(fcntl), SYM(ioctl), ++ // string.h ++ SYM(strerror), ++ SYM(strcmp), ++ SYM(memchr), ++ // ctype.h ++ SYM(__ctype_get_mb_cur_max), ++ // wchar.h ++ SYM(mbrtowc), SYM(wcrtomb), ++ // stdlib.h ++ SYM(qsort), ++ // unistd.h ++ SYM(access), SYM(close), SYM(dup), SYM(dup2), SYM(fork), SYM(getpid), ++ SYM(lseek), ++ // utime.h ++ SYM(utime), ++ // ... ++ SYM(__stack_chk_fail), ++ SYM(memmove), ++ SYM(memcmp), ++ SYM(memcpy), ++ SYM(memset), ++ SYM(stderr), ++ SYM(realloc), ++ SYM(calloc), ++ SYM(malloc), ++ SYM(free), ++ SYM(fprintf), ++ SYM(fopen), SYM(fclose), ++ SYM(fread), ++ SYM(abort), ++ SYM(strlen), ++ { 0, 0, STRENGTH_NORMAL, 1 } /* sentinel */ ++}; ++ ++RtsSymbolVal* iserv_syms() { ++ return my_iserv_syms; ++} +\ No newline at end of file +diff --git a/iserv-proxy.cabal b/iserv-proxy.cabal +index a0eeaeb..a146108 100644 +--- a/iserv-proxy.cabal ++++ b/iserv-proxy.cabal +@@ -101,6 +101,7 @@ Executable iserv-proxy + Executable iserv-proxy-interpreter + Default-Language: Haskell2010 + Main-Is: Interpreter.hs ++ c-sources: cbits/symbols.c + Build-Depends: base >= 4 && < 5, + iserv-proxy + From e8198e9b77d2454c42496d8ab518eda4a245df56 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Mon, 23 Oct 2023 08:00:18 +0000 Subject: [PATCH 012/206] Better linux cross --- overlays/linux-cross.nix | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/overlays/linux-cross.nix b/overlays/linux-cross.nix index 36861dde24..f4940779e5 100644 --- a/overlays/linux-cross.nix +++ b/overlays/linux-cross.nix @@ -42,14 +42,21 @@ let writeShellScriptBin ("iserv-wrapper" + lib.optionalString enableProfiling "-prof") '' #!${stdenv.shell} set -euo pipefail + ISERV_ARGS=''${ISERV_ARGS:-} + PROXY_ARGS=''${PROXY_ARGS:-} # Unset configure flags as configure should have run already unset configureFlags PORT=$((5000 + $RANDOM % 5000)) (>&2 echo "---> Starting ${interpreter.exeName} on port $PORT") - ${qemu}/bin/qemu-${qemuSuffix} ${interpreter.override (lib.optionalAttrs hostPlatform.isAndroid { setupBuildFlags = ["--ghc-option=-optl-static" ] ++ lib.optional hostPlatform.isAarch32 "--ghc-option=-optl-no-pie";})}/bin/${interpreter.exeName} tmp $PORT & + ${qemu}/bin/qemu-${qemuSuffix} ${interpreter.override + (lib.optionalAttrs hostPlatform.isAndroid { + setupBuildFlags = ["--ghc-option=-optl-static" ] ++ lib.optional hostPlatform.isAarch32 "--ghc-option=-optl-no-pie"; + patches = [ ./patches/iserv-proxy-interpreter-9.3-android.patch ]; + enableDebugRTS = true; + })}/bin/${interpreter.exeName} tmp $PORT $ISERV_ARGS & (>&2 echo "---| ${interpreter.exeName} should have started on $PORT") RISERV_PID="$!" - ${iserv-proxy}/bin/iserv-proxy $@ 127.0.0.1 "$PORT" + ${iserv-proxy}/bin/iserv-proxy $@ 127.0.0.1 "$PORT" $PROXY_ARGS (>&2 echo "---> killing ${interpreter.exeName}...") kill $RISERV_PID ''; From 4009bb7437194bb179f8826b8ce9f5cb08126900 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Mon, 23 Oct 2023 08:00:33 +0000 Subject: [PATCH 013/206] Fix ghc:-dynamic-system-linker for android --- compiler/ghc/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index aee3e4cddf..c52f8deae1 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -322,6 +322,8 @@ let # `-fexternal-dynamic-refs` causes `undefined reference` errors when building GHC cross compiler for windows + lib.optionalString (enableRelocatedStaticLibs && targetPlatform.isx86_64 && !targetPlatform.isWindows) " '*.*.ghc.*.opts += -fexternal-dynamic-refs'" + + lib.optionalString targetPlatform.isAndroid + " '*.ghc.cabal.configure.opts += --flags=-dynamic-system-linker'" # The following is required if we build on aarch64-darwin for aarch64-iOS. Otherwise older # iPhones/iPads/... won't understand the compiled code, as the compiler will emit LDSETALH # + lib.optionalString (targetPlatform.???) "'*.rts.ghc.c.opts += -optc-mcpu=apple-a7 -optc-march=armv8-a+norcpc'" From 0c9b2acb33edb12f0aa009325df52f27274b40a7 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Thu, 26 Oct 2023 07:37:48 +0000 Subject: [PATCH 014/206] Fixup arm --- builder/comp-builder.nix | 10 +- overlays/linux-cross.nix | 2 +- .../iserv-proxy-interpreter-9.3-android.patch | 179 +++++++++++++++++- 3 files changed, 185 insertions(+), 6 deletions(-) diff --git a/builder/comp-builder.nix b/builder/comp-builder.nix index 04d9ad73c0..384a917245 100644 --- a/builder/comp-builder.nix +++ b/builder/comp-builder.nix @@ -206,7 +206,15 @@ let (enableFeature enableShared "shared") (enableFeature enableExecutableDynamic "executable-dynamic") (enableFeature doCoverage "coverage") - (enableFeature (enableLibraryForGhci && !stdenv.hostPlatform.isGhcjs) "library-for-ghci") + # For Android (or really anything that uses lld), -r will silently drop + # "lazy" symbols. Those are leaf symbols with no referenes. This however + # does not work when loading the objects into the linker, because then we + # occationally miss symbols when subsequent libraries depending on the one + # that dropped the symbol are loaded. bfd and lld support --whole-archive + # lld -r --whole-archive ... will _not_ drop lazy symbols. However the + # --whole-archive flag needs to come _before_ the objects, it's applied in + # sequence. The proper fix is thusly to add --while-archive to Cabal. + (enableFeature (enableLibraryForGhci && !stdenv.hostPlatform.isGhcjs && !stdenv.hostPlatform.isAndroid) "library-for-ghci") ] ++ lib.optionals (stdenv.hostPlatform.isMusl && (haskellLib.isExecutableType componentId)) [ # These flags will make sure the resulting executable is statically linked. # If it uses other libraries it may be necessary for to add more diff --git a/overlays/linux-cross.nix b/overlays/linux-cross.nix index f4940779e5..55e26c960b 100644 --- a/overlays/linux-cross.nix +++ b/overlays/linux-cross.nix @@ -61,7 +61,7 @@ let kill $RISERV_PID ''; qemuIservWrapper = symlinkJoin { name = "iserv-wrapper"; paths = [ (qemuIservWrapperScript false) (qemuIservWrapperScript true) ]; }; - configureFlags = lib.optional hostPlatform.isAarch32 "--disable-split-sections"; + configureFlags = lib.optional (hostPlatform.isAarch32 || hostPlatform.isAndroid) "--disable-split-sections"; setupBuildFlags = map (opt: "--ghc-option=" + opt) ((lib.optionals isLinuxCross [ "-fexternal-interpreter" "-pgmi" "${qemuIservWrapper}/bin/iserv-wrapper" diff --git a/overlays/patches/iserv-proxy-interpreter-9.3-android.patch b/overlays/patches/iserv-proxy-interpreter-9.3-android.patch index 0f40f148b9..77f79c7ba2 100644 --- a/overlays/patches/iserv-proxy-interpreter-9.3-android.patch +++ b/overlays/patches/iserv-proxy-interpreter-9.3-android.patch @@ -3,7 +3,7 @@ new file mode 100644 index 0000000..d447895 --- /dev/null +++ b/cbits/symbols.c -@@ -0,0 +1,147 @@ +@@ -0,0 +1,318 @@ +#include +#include +#include @@ -24,13 +24,56 @@ index 0000000..d447895 +#include +#include +#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include + +// fnctl stubs, see above +extern void open(void); ++extern void openat(void); +extern void creat(void); +extern void eventfd(void); +extern void eventfd_write(void); ++ ++extern void futimes(void); ++extern void lutimes(void); ++extern void statx(void); ++ +extern void __stack_chk_fail(void); ++extern void __vsprintf_chk(void); ++extern void __open_2(void); ++extern void __memcpy_chk(void); ++extern void __memset_chk(void); ++extern void __memmove_chk(void); ++// GCC stuff ++extern void __addtf3(void); ++extern void __divtf3(void); ++extern void __extenddftf2(void); ++extern void __fixtfsi(void); ++extern void __floatditf(void); ++extern void __floatsitf(void); ++extern void __getf2(void); ++extern void __gttf2(void); ++extern void __lttf2(void); ++extern void __multf3(void); ++extern void __subtf3(void); ++extern void __trunctfdf2(void); ++ ++#define MISSING_FUN(f) void (f)(void) { printf("Unknown call to `%s'\n", #f); exit(1); } ++ ++MISSING_FUN(c_format_unix_time) ++MISSING_FUN(c_format_unix_time_gmt) ++MISSING_FUN(c_parse_unix_time) ++MISSING_FUN(c_parse_unix_time_gmt) + +typedef void SymbolAddr; +typedef char SymbolName; @@ -61,11 +104,78 @@ index 0000000..d447895 +typedef mode_t (*umask_func_ptr_t)(mode_t); + +RtsSymbolVal my_iserv_syms[] = { ++ // arpa/inet.h ++ SYM(htons), ++ SYM(ntohs), ++ SYM(htonl), ++ SYM(ntohl), ++ // sys/random.h ++ SYM(getentropy), ++ SYM(getrandom), ++ // sys/auxv.h ++ SYM(getauxval), ++ // sys/mman.h ++ SYM(madvise),SYM(mlock),SYM(mmap),SYM(mprotect),SYM(munmap), ++ SYM(mremap), ++ SYM(munlock), ++ // select.h ++ SYM(__FD_SET_chk), ++ // sys/socket ++ SYM(accept),SYM(bind),SYM(connect),SYM(getsockopt),SYM(listen), ++ SYM(setsockopt),SYM(socket),SYM(getsockname),SYM(select), ++ SYM(getpeername),SYM(__cmsg_nxthdr),SYM(recv),SYM(recvfrom), ++ SYM(recvmsg),SYM(send),SYM(sendmsg),SYM(sendto),SYM(writev), ++ SYM(accept4), ++ // pthread.h ++ SYM(pthread_equal),SYM(pthread_getspecific),SYM(pthread_key_create), ++ SYM(pthread_key_delete),SYM(pthread_once),SYM(pthread_rwlock_destroy), ++ SYM(pthread_rwlock_init),SYM(pthread_rwlock_rdlock),SYM(pthread_rwlock_unlock), ++ SYM(pthread_rwlock_wrlock),SYM(pthread_self),SYM(pthread_setspecific), ++ SYM(pthread_create),SYM(pthread_join),SYM(pthread_mutex_destroy), ++ SYM(pthread_mutex_init),SYM(pthread_mutex_lock),SYM(pthread_mutex_trylock), ++ SYM(pthread_mutex_unlock),SYM(pthread_mutexattr_destroy), ++ SYM(pthread_mutexattr_init),SYM(pthread_mutexattr_settype), ++ // chk.h ++ SYM(__read_chk),SYM(__write_chk), ++ // netdb.h ++ SYM(freeaddrinfo),SYM(gai_strerror),SYM(getaddrinfo),SYM(getnameinfo), ++ SYM(gethostbyname), ++ // dirent.h ++ SYM(readdir_r),SYM(readdir), ++ SYM(opendir),SYM(closedir), + // time.h -+ SYM(clock), ++ SYM(clock),SYM(gmtime_r), + // sys/time.h + SYM(gettimeofday),SYM(clock_getres),SYM(clock_gettime),SYM(localtime_r),SYM(tzset), + // unistd.h ++ SYM(readlink), ++ SYM(rename), ++ SYM(rmdir), ++ SYM(chown), ++ SYM(realpath), ++ SYM(fchdir), ++ SYM(fdopendir), ++ SYM(rewinddir), ++ SYM(futimens),SYM(futimes),SYM(lutimes), ++ SYM(mknod), ++ SYM(lchown), ++ SYM(symlink), ++ SYM(endgrent),SYM(endpwent), ++ SYM(pathconf), ++ SYM(truncate), ++ SYM(utimensat), ++ SYM(statx), ++ SYM(seekdir), ++ SYM(telldir), ++ SYM(clearenv), ++ SYM(chdir), ++ SYM(sleep), ++ SYM(stdout), ++ SYM(strftime), ++ SYM(utimes), ++ SYM(setenv), ++ SYM(fpathconf), ++ SYM(exit), + SYM(environ), + SYM(ftruncate), + SYM(getenv), @@ -77,6 +187,8 @@ index 0000000..d447895 + SYM(link), + SYM(pipe), + SYM(unlink), ++ SYM(execv),SYM(execve),SYM(execvp),SYM(execvpe), ++ SYM(syscall),SYM(sysconf), + // errno.h + SYM(__errno), + // math.h @@ -95,6 +207,7 @@ index 0000000..d447895 + // assert.h + SYM(__assert2), + // signal.h ++ SYM(signal),SYM(sigaction), + SYM(raise), SYM(sigaddset), SYM(sigemptyset), SYM(sigprocmask), + // sys/eventfd.h + SYM(eventfd), SYM(eventfd_write), @@ -114,10 +227,14 @@ index 0000000..d447895 + SYM(poll), + // fcntl.h + SYM(open), SYM(creat), SYM(fcntl), SYM(ioctl), ++ SYM(openat),SYM(__open_2), + // string.h + SYM(strerror), + SYM(strcmp), -+ SYM(memchr), ++ SYM(memchr),SYM(strcpy),SYM(strchr),SYM(strncpy),SYM(strrchr), ++ SYM(strcat),SYM(strncmp),SYM(strdup), ++ SYM(strtoul),SYM(strspn),SYM(strtol),SYM(strstr),SYM(strcspn), ++ SYM(__strncpy_chk2),SYM(__memcpy_chk), + // ctype.h + SYM(__ctype_get_mb_cur_max), + // wchar.h @@ -128,8 +245,14 @@ index 0000000..d447895 + SYM(access), SYM(close), SYM(dup), SYM(dup2), SYM(fork), SYM(getpid), + SYM(lseek), + // utime.h -+ SYM(utime), ++ SYM(utime),SYM(time), + // ... ++ SYM(fileno), ++ SYM(__vsprintf_chk), ++ SYM(__strlen_chk), ++ SYM(__strchr_chk), ++ SYM(__memset_chk), ++ SYM(__memmove_chk), + SYM(__stack_chk_fail), + SYM(memmove), + SYM(memcmp), @@ -141,10 +264,58 @@ index 0000000..d447895 + SYM(malloc), + SYM(free), + SYM(fprintf), ++ SYM(vfprintf), + SYM(fopen), SYM(fclose), ++ SYM(getegid),SYM(getgid), ++ SYM(getpwent), ++ SYM(getgrent), ++ SYM(getgroups), ++ SYM(getlogin), ++ SYM(getuid), ++ SYM(getgrgid_r),SYM(getgrnam_r),SYM(getpwnam_r),SYM(getpwuid_r), ++ SYM(setegid),SYM(seteuid),SYM(setgid),SYM(setgrent),SYM(setgroups), ++ SYM(setpwent),SYM(setuid), + SYM(fread), + SYM(abort), + SYM(strlen), ++ SYM(fwrite), ++ SYM(feof), ++ SYM(ferror), ++ SYM(fflush), ++ SYM(fgets),SYM(fputc),SYM(fputs), ++ SYM(fseek),SYM(ftell), ++ SYM(sscanf), ++ SYM(shutdown), ++ SYM(atoi), ++ SYM(stdin), ++ SYM(atexit), ++ SYM(usleep), ++ SYM(fchmod), ++ SYM(fchown), ++ SYM(fsync), ++ SYM(getcwd), ++ SYM(geteuid), ++ SYM(localtime), ++ SYM(lseek64), ++ SYM(mkdir), ++ SYM(mktime), ++ SYM(fdopen), ++ SYM(c_format_unix_time), ++ SYM(c_format_unix_time_gmt), ++ SYM(c_parse_unix_time), ++ SYM(c_parse_unix_time_gmt), ++ SYM(__addtf3), ++ SYM(__divtf3), ++ SYM(__extenddftf2), ++ SYM(__fixtfsi), ++ SYM(__floatditf), ++ SYM(__floatsitf), ++ SYM(__getf2), ++ SYM(__gttf2), ++ SYM(__lttf2), ++ SYM(__multf3), ++ SYM(__subtf3), ++ SYM(__trunctfdf2), + { 0, 0, STRENGTH_NORMAL, 1 } /* sentinel */ +}; + From 90094fddda7152b8ceeafec24d159b2dc3353649 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Mon, 30 Oct 2023 11:44:10 +0000 Subject: [PATCH 015/206] Patch only for aarch64 --- overlays/linux-cross.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overlays/linux-cross.nix b/overlays/linux-cross.nix index 55e26c960b..64de610c61 100644 --- a/overlays/linux-cross.nix +++ b/overlays/linux-cross.nix @@ -51,7 +51,7 @@ let ${qemu}/bin/qemu-${qemuSuffix} ${interpreter.override (lib.optionalAttrs hostPlatform.isAndroid { setupBuildFlags = ["--ghc-option=-optl-static" ] ++ lib.optional hostPlatform.isAarch32 "--ghc-option=-optl-no-pie"; - patches = [ ./patches/iserv-proxy-interpreter-9.3-android.patch ]; + patches = lib.optional hostPlatform.isAarch64 ./patches/iserv-proxy-interpreter-9.3-android.patch; enableDebugRTS = true; })}/bin/${interpreter.exeName} tmp $PORT $ISERV_ARGS & (>&2 echo "---| ${interpreter.exeName} should have started on $PORT") From 79882ce9d092e37330e233a9fe42becbbc3f4555 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Wed, 1 Nov 2023 10:47:21 +0800 Subject: [PATCH 016/206] add aggregated ghc-9.6 patch --- overlays/bootstrap.nix | 1 + overlays/patches/ghc/ghc-9.6-iog.patch | 353 +++++++++++++++++++++++++ 2 files changed, 354 insertions(+) create mode 100644 overlays/patches/ghc/ghc-9.6-iog.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index e99845690a..b9683505ea 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -298,6 +298,7 @@ in { # this one is to allow linking extra symbols from iserv. ++ final.lib.optional (versionAtLeast "9.6.1" && versionLessThan"9.10" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/iserv-syms.patch ++ final.lib.optional (versionAtLeast "9.4" && final.stdenv.targetPlatform.isWindows) ./patches/ghc/ghc-9.6-fix-code-symbol-jumps.patch + ++ final.lib.optional (versionAtLeast "9.6.3" && versionLessThan "9.10" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-9.6-iog.patch ; in ({ ghc865 = final.callPackage ../compiler/ghc (traceWarnOld "8.6" { diff --git a/overlays/patches/ghc/ghc-9.6-iog.patch b/overlays/patches/ghc/ghc-9.6-iog.patch new file mode 100644 index 0000000000..1c8a306064 --- /dev/null +++ b/overlays/patches/ghc/ghc-9.6-iog.patch @@ -0,0 +1,353 @@ +diff --git a/rts/Linker.c b/rts/Linker.c +index 59e2ff9397..78e43cd471 100644 +--- a/rts/Linker.c ++++ b/rts/Linker.c +@@ -267,7 +267,7 @@ int ghciInsertSymbolTable( + RtsSymbolInfo *pinfo = lookupStrHashTable(table, key); + if (!pinfo) /* new entry */ + { +- pinfo = stgMallocBytes(sizeof (*pinfo), "ghciInsertToSymbolTable"); ++ pinfo = stgCallocBytes(1, sizeof (*pinfo), "ghciInsertToSymbolTable"); + pinfo->value = data; + pinfo->owner = owner; + pinfo->strength = strength; +@@ -605,11 +605,11 @@ internal_dlopen(const char *dll_name) + /* dlopen failed; return a ptr to the error msg. */ + errmsg = dlerror(); + if (errmsg == NULL) errmsg = "addDLL: unknown error"; +- errmsg_copy = stgMallocBytes(strlen(errmsg)+1, "addDLL"); ++ errmsg_copy = stgCallocBytes(1,strlen(errmsg)+1, "addDLL"); + strcpy(errmsg_copy, errmsg); + errmsg = errmsg_copy; + } else { +- o_so = stgMallocBytes(sizeof(OpenedSO), "addDLL"); ++ o_so = stgCallocBytes(1,sizeof(OpenedSO), "addDLL"); + o_so->handle = hdl; + o_so->next = openedSOs; + openedSOs = o_so; +@@ -1314,7 +1314,7 @@ mkOc( ObjectType type, pathchar *path, char *image, int imageSize, + + + IF_DEBUG(linker, debugBelch("mkOc: %" PATH_FMT "\n", path)); +- oc = stgMallocBytes(sizeof(ObjectCode), "mkOc(oc)"); ++ oc = stgCallocBytes(1, sizeof(ObjectCode), "mkOc(oc)"); + + oc->info = NULL; + oc->type = type; +@@ -1334,7 +1334,7 @@ mkOc( ObjectType type, pathchar *path, char *image, int imageSize, + oc->fileName = pathdup(path); + + if (archiveMemberName) { +- oc->archiveMemberName = stgMallocBytes( (pathlen(archiveMemberName)+1) * pathsize, ++ oc->archiveMemberName = stgCallocBytes(1, (pathlen(archiveMemberName)+1) * pathsize, + "loadObj" ); + pathcopy(oc->archiveMemberName, archiveMemberName); + } else { +@@ -1489,12 +1489,12 @@ preloadObjectFile (pathchar *path) + // reading the file, and then we misalign image on purpose so + // that the actual sections end up aligned again. + misalignment = machoGetMisalignment(f); +- image = stgMallocBytes(fileSize + misalignment, "loadObj(image)"); ++ image = stgCallocBytes(1, fileSize + misalignment, "loadObj(image)"); + image += misalignment; + + # else /* !defined(darwin_HOST_OS) */ + +- image = stgMallocBytes(fileSize, "loadObj(image)"); ++ image = stgCallocBytes(1, fileSize, "loadObj(image)"); + + #endif /* !defined(darwin_HOST_OS) */ + +@@ -1787,6 +1787,8 @@ static HsInt resolveObjs_ (void) + IF_DEBUG(linker, debugBelch("resolveObjs: start\n")); + + for (ObjectCode *oc = objects; oc; oc = oc->next) { ++ if(oc->status == OBJECT_RESOLVED) ++ continue; + int r = ocTryLoad(oc); + if (!r) { + errorBelch("Could not load Object Code %" PATH_FMT ".\n", OC_INFORMATIVE_FILENAME(oc)); +@@ -1907,7 +1909,7 @@ void + addProddableBlock ( ObjectCode* oc, void* start, int size ) + { + ProddableBlock* pb +- = stgMallocBytes(sizeof(ProddableBlock), "addProddableBlock"); ++ = stgCallocBytes(1,sizeof(ProddableBlock), "addProddableBlock"); + + IF_DEBUG(linker, debugBelch("addProddableBlock: %p %p %d\n", oc, start, size)); + ASSERT(size > 0); +diff --git a/rts/LinkerInternals.h b/rts/LinkerInternals.h +index 271611a249..784bb19c10 100644 +--- a/rts/LinkerInternals.h ++++ b/rts/LinkerInternals.h +@@ -299,6 +299,10 @@ struct _ObjectCode { + int n_segments; + Segment *segments; + ++ // COMMON section ++ void * common_mem; ++ unsigned long common_size; ++ + // + // Garbage collection fields + // +diff --git a/rts/RtsUtils.c b/rts/RtsUtils.c +index 4cac10ba15..fe0d8ca40e 100644 +--- a/rts/RtsUtils.c ++++ b/rts/RtsUtils.c +@@ -104,6 +104,11 @@ stgCallocBytes (size_t count, size_t size, char *msg) + rtsConfig.mallocFailHook((W_) count*size, msg); + stg_exit(EXIT_INTERNAL_ERROR); + } ++ // If we run under qemu with jemalloc, calloc is not guaranteed ++ // to zero memory. ++ // - https://giters.com/jemalloc/jemalloc/issues/1844 ++ // - https://lists.nongnu.org/archive/html/qemu-devel/2020-05/msg03119.html ++ memset(space, 0, count*size); + return space; + } + +diff --git a/rts/linker/Elf.c b/rts/linker/Elf.c +index bab2ca3041..5d91301c51 100644 +--- a/rts/linker/Elf.c ++++ b/rts/linker/Elf.c +@@ -303,6 +303,15 @@ ocInit_ELF(ObjectCode * oc) + } + } + } ++ if(NULL != oc->common_mem) { ++#if RTS_LINKER_USE_MMAP ++ munmap(oc->common_mem, oc->common_size); ++#else ++ stgFree(oc->common_mem); ++#endif ++ } ++ oc->common_mem = NULL; ++ oc->common_size = 0; + } + + void +@@ -961,14 +970,17 @@ ocGetNames_ELF ( ObjectCode* oc ) + for (size_t j = 0; j < symTab->n_symbols; j++) { + ElfSymbol *symbol = &symTab->symbols[j]; + if (SHN_COMMON == symTab->symbols[j].elf_sym->st_shndx) { +- common_size += symbol->elf_sym->st_size; ++ // st_value holds the alignment. Adding alignment always ++ // should give us some wiggle room to get alignment right. ++ common_size += symbol->elf_sym->st_size + symbol->elf_sym->st_value; + } + } + } +- void * common_mem = NULL; ++ oc->common_mem = NULL; ++ oc->common_size = common_size; + if(common_size > 0) { +- common_mem = mmapAnonForLinker(common_size); +- if (common_mem == NULL) { ++ oc->common_mem = mmapAnonForLinker(common_size); ++ if (oc->common_mem == NULL) { + barf("ocGetNames_ELF: Failed to allocate memory for SHN_COMMONs"); + } + } +@@ -1010,8 +1022,9 @@ ocGetNames_ELF ( ObjectCode* oc ) + isLocal = false; + CHECK(common_used < common_size); + CHECK(common_mem); +- symbol->addr = (void*)((uintptr_t)common_mem + common_used); +- common_used += symbol->elf_sym->st_size; ++ int alignment = symbol->elf_sym->st_value-1; ++ symbol->addr = (void*)(((uintptr_t)oc->common_mem + common_used + alignment) & ~alignment); ++ common_used = (uintptr_t)symbol->addr - (uintptr_t)oc->common_mem + symbol->elf_sym->st_size; + CHECK(common_used <= common_size); + + IF_DEBUG(linker_verbose, +@@ -1025,7 +1038,9 @@ ocGetNames_ELF ( ObjectCode* oc ) + || ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK + ) + /* and not an undefined symbol */ +- && shndx != SHN_UNDEF ++ && (shndx != SHN_UNDEF ++ /* unless it's weak */ ++ || (shndx == SHN_UNDEF && ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK)) + /* and not in a "special section" */ + && (shndx < SHN_LORESERVE + #if defined(SHN_XINDEX) +@@ -1052,6 +1067,14 @@ ocGetNames_ELF ( ObjectCode* oc ) + (intptr_t) oc->sections[secno].start + + (intptr_t) symbol->elf_sym->st_value); + CHECK(symbol->addr != 0x0); ++ if(shndx == SHN_UNDEF && ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK) { ++ symbol->addr = NULL; ++ } else { ++ symbol->addr = (SymbolAddr*)( ++ (intptr_t) oc->sections[secno].start + ++ (intptr_t) symbol->elf_sym->st_value); ++ CHECK(symbol->addr != 0x0); ++ } + if (ELF_ST_BIND(symbol->elf_sym->st_info) == STB_LOCAL) { + isLocal = true; + isWeak = false; +@@ -1070,35 +1093,20 @@ ocGetNames_ELF ( ObjectCode* oc ) + sym_type = SYM_TYPE_CODE; + } else { + sym_type = SYM_TYPE_DATA; +- } +- +- /* And the decision is ... */ +- +- if (symbol->addr != NULL) { +- CHECK(nm != NULL); +- /* Acquire! */ +- if (!isLocal) { +- +- if (isWeak == HS_BOOL_TRUE) { +- setWeakSymbol(oc, nm); +- } +- if (!ghciInsertSymbolTable(oc->fileName, symhash, +- nm, symbol->addr, isWeak, sym_type, oc) +- ) { +- goto fail; +- } +- oc->symbols[curSymbol].name = nm; +- oc->symbols[curSymbol].addr = symbol->addr; +- oc->symbols[curSymbol].type = sym_type; +- curSymbol++; +- } +- } else { +- /* Skip. */ ++ } else if (ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK ++ && shndx == SHN_UNDEF ++ && (ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_FUNC ++ || ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_OBJECT ++ || ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_NOTYPE)) { ++ symbol->addr = NULL; ++ isLocal = false; ++ isWeak = true; ++ } else { ++ /* skip this symbol */ + IF_DEBUG(linker_verbose, + debugBelch("skipping `%s'\n", + nm) + ); +- + /* + debugBelch( + "skipping bind = %d, type = %d, secno = %d `%s'\n", +@@ -1108,7 +1116,24 @@ ocGetNames_ELF ( ObjectCode* oc ) + nm + ); + */ +- } ++ continue; ++ } ++ ++ /* And the decision is ... */ ++ ASSERT(nm != NULL); ++ /* Acquire! */ ++ if (!isLocal) { ++ ++ if (isWeak == HS_BOOL_TRUE) { ++ setWeakSymbol(oc, nm); ++ } ++ if (!ghciInsertSymbolTable(oc->fileName, symhash, ++ nm, symbol->addr, isWeak, oc)) { ++ goto fail; ++ } ++ oc->symbols[curSymbol++].name = nm; ++ oc->symbols[curSymbol].addr = symbol->addr; ++ } + } + } + } +diff --git a/rts/linker/elf_plt.c b/rts/linker/elf_plt.c +index 9cd42efff2..70817d8b0b 100644 +--- a/rts/linker/elf_plt.c ++++ b/rts/linker/elf_plt.c +@@ -1,4 +1,5 @@ + #include "Rts.h" ++#include "RtsUtils.h" + #include "elf_plt.h" + + #include +@@ -51,7 +52,7 @@ makeStub(Section * section, + void* * addr, + uint8_t flags) { + +- Stub * s = calloc(1, sizeof(Stub)); ++ Stub * s = stgCallocBytes(1, sizeof(Stub), "makeStub"); + ASSERT(s != NULL); + s->target = *addr; + s->flags = flags; +diff --git a/rts/linker/elf_plt_aarch64.c b/rts/linker/elf_plt_aarch64.c +index 11354a63db..6b27a2c73d 100644 +--- a/rts/linker/elf_plt_aarch64.c ++++ b/rts/linker/elf_plt_aarch64.c +@@ -25,6 +25,7 @@ const size_t stubSizeAarch64 = 5 * 4; + */ + bool needStubForRelAarch64(Elf_Rel * rel) { + switch(ELF64_R_TYPE(rel->r_info)) { ++ case COMPAT_R_AARCH64_CONDBR19: + case COMPAT_R_AARCH64_CALL26: + case COMPAT_R_AARCH64_JUMP26: + return true; +@@ -34,6 +35,7 @@ bool needStubForRelAarch64(Elf_Rel * rel) { + } + bool needStubForRelaAarch64(Elf_Rela * rela) { + switch(ELF64_R_TYPE(rela->r_info)) { ++ case COMPAT_R_AARCH64_CONDBR19: + case COMPAT_R_AARCH64_CALL26: + case COMPAT_R_AARCH64_JUMP26: + return true; +diff --git a/rts/linker/elf_reloc_aarch64.c b/rts/linker/elf_reloc_aarch64.c +index 4743e81ea2..f37e3699f1 100644 +--- a/rts/linker/elf_reloc_aarch64.c ++++ b/rts/linker/elf_reloc_aarch64.c +@@ -105,8 +105,24 @@ encodeAddendAarch64(Section * section, Elf_Rel * rel, int64_t addend) { + break; + } + /* - control flow relocations */ ++ case COMPAT_R_AARCH64_CONDBR19: { /* relocate b.* ... */ ++ // 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ++ // 0 1 0 1 0 1 0 0 [ imm19 ... ++ // ++ // 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ++ // ... imm19 ] 0 [ cond ] ++ CHECK(isInt64(19+2, addend)); /* X in range */ ++ *(inst_t *)P = (*(inst_t *)P & 0xff00001f) ++ | ((uint32_t)(addend << (5-2)) & 0x00ffffe0); ++ break; ++ } + case COMPAT_R_AARCH64_JUMP26: /* relocate b ... */ + case COMPAT_R_AARCH64_CALL26: { /* relocate bl ... */ ++ // 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ++ // 0|1 0 0 1 0 1 [ imm26 ... ++ ++ // 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ++ // ... imm26 ] + CHECK(isInt64(26+2, addend)); /* X in range */ + *(inst_t *)P = (*(inst_t *)P & 0xfc000000) /* keep upper 6 (32-6) + * bits */ +@@ -222,6 +238,23 @@ computeAddend(Section * section, Elf_Rel * rel, + case COMPAT_R_AARCH64_ADD_ABS_LO12_NC: + /* type: static, class: aarch64, op: S + A */ + return (S + A) & 0xfff; ++ case COMPAT_R_AARCH64_CONDBR19: { ++ int64_t V = S + A - P; ++ if(!isInt64(19+2, V)) { ++ /* need a stub */ ++ /* check if we already have that stub */ ++ if(findStub(section, (void**)&S, 0)) { ++ /* did not find it. Crete a new stub. */ ++ if(makeStub(section, (void**)&S, 0)) { ++ abort(/* could not find or make stub */); ++ } ++ } ++ ++ V = S + A -P; ++ assert(isInt64(19+2, V)); ++ } ++ return V; ++ } + case COMPAT_R_AARCH64_JUMP26: + case COMPAT_R_AARCH64_CALL26: { + // S+A-P From 6922b2222c4e47ff0b84fafa7500955059b885a2 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Sun, 12 Nov 2023 08:21:38 +0000 Subject: [PATCH 017/206] More android patches --- compiler/ghc/default.nix | 4 +- overlays/patches/ghc/ghc-9.6-iog.patch | 93 +++++++++++++++----------- 2 files changed, 58 insertions(+), 39 deletions(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index c52f8deae1..e422756aca 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -326,7 +326,9 @@ let " '*.ghc.cabal.configure.opts += --flags=-dynamic-system-linker'" # The following is required if we build on aarch64-darwin for aarch64-iOS. Otherwise older # iPhones/iPads/... won't understand the compiled code, as the compiler will emit LDSETALH - # + lib.optionalString (targetPlatform.???) "'*.rts.ghc.c.opts += -optc-mcpu=apple-a7 -optc-march=armv8-a+norcpc'" + # FIXME: we should have iOS as an argument to this derivation, and then make this, as well as + # disableLargeAddress space conditional on iOS = true. + + lib.optionalString (stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64) "'*.rts.ghc.c.opts += -optc-mcpu=apple-a7 -optc-march=armv8-a+norcpc'" # For GHC versions in the 9.x range that don't support the +native_bignum flavour transformer yet + lib.optionalString ((enableNativeBignum && !hadrianHasNativeBignumFlavour)) " --bignum=native" diff --git a/overlays/patches/ghc/ghc-9.6-iog.patch b/overlays/patches/ghc/ghc-9.6-iog.patch index 1c8a306064..849b867311 100644 --- a/overlays/patches/ghc/ghc-9.6-iog.patch +++ b/overlays/patches/ghc/ghc-9.6-iog.patch @@ -26,17 +26,17 @@ index 59e2ff9397..78e43cd471 100644 o_so->next = openedSOs; openedSOs = o_so; @@ -1314,7 +1314,7 @@ mkOc( ObjectType type, pathchar *path, char *image, int imageSize, - - + + IF_DEBUG(linker, debugBelch("mkOc: %" PATH_FMT "\n", path)); - oc = stgMallocBytes(sizeof(ObjectCode), "mkOc(oc)"); + oc = stgCallocBytes(1, sizeof(ObjectCode), "mkOc(oc)"); - + oc->info = NULL; oc->type = type; @@ -1334,7 +1334,7 @@ mkOc( ObjectType type, pathchar *path, char *image, int imageSize, oc->fileName = pathdup(path); - + if (archiveMemberName) { - oc->archiveMemberName = stgMallocBytes( (pathlen(archiveMemberName)+1) * pathsize, + oc->archiveMemberName = stgCallocBytes(1, (pathlen(archiveMemberName)+1) * pathsize, @@ -50,17 +50,17 @@ index 59e2ff9397..78e43cd471 100644 - image = stgMallocBytes(fileSize + misalignment, "loadObj(image)"); + image = stgCallocBytes(1, fileSize + misalignment, "loadObj(image)"); image += misalignment; - + # else /* !defined(darwin_HOST_OS) */ - + - image = stgMallocBytes(fileSize, "loadObj(image)"); + image = stgCallocBytes(1, fileSize, "loadObj(image)"); - + #endif /* !defined(darwin_HOST_OS) */ - + @@ -1787,6 +1787,8 @@ static HsInt resolveObjs_ (void) IF_DEBUG(linker, debugBelch("resolveObjs: start\n")); - + for (ObjectCode *oc = objects; oc; oc = oc->next) { + if(oc->status == OBJECT_RESOLVED) + continue; @@ -73,7 +73,7 @@ index 59e2ff9397..78e43cd471 100644 ProddableBlock* pb - = stgMallocBytes(sizeof(ProddableBlock), "addProddableBlock"); + = stgCallocBytes(1,sizeof(ProddableBlock), "addProddableBlock"); - + IF_DEBUG(linker, debugBelch("addProddableBlock: %p %p %d\n", oc, start, size)); ASSERT(size > 0); diff --git a/rts/LinkerInternals.h b/rts/LinkerInternals.h @@ -83,7 +83,7 @@ index 271611a249..784bb19c10 100644 @@ -299,6 +299,10 @@ struct _ObjectCode { int n_segments; Segment *segments; - + + // COMMON section + void * common_mem; + unsigned long common_size; @@ -106,9 +106,9 @@ index 4cac10ba15..fe0d8ca40e 100644 + memset(space, 0, count*size); return space; } - + diff --git a/rts/linker/Elf.c b/rts/linker/Elf.c -index bab2ca3041..5d91301c51 100644 +index bab2ca3041..9f623a62da 100644 --- a/rts/linker/Elf.c +++ b/rts/linker/Elf.c @@ -303,6 +303,15 @@ ocInit_ELF(ObjectCode * oc) @@ -125,7 +125,7 @@ index bab2ca3041..5d91301c51 100644 + oc->common_mem = NULL; + oc->common_size = 0; } - + void @@ -961,14 +970,17 @@ ocGetNames_ELF ( ObjectCode* oc ) for (size_t j = 0; j < symTab->n_symbols; j++) { @@ -149,17 +149,19 @@ index bab2ca3041..5d91301c51 100644 barf("ocGetNames_ELF: Failed to allocate memory for SHN_COMMONs"); } } -@@ -1010,8 +1022,9 @@ ocGetNames_ELF ( ObjectCode* oc ) +@@ -1009,9 +1021,10 @@ ocGetNames_ELF ( ObjectCode* oc ) + if (shndx == SHN_COMMON) { isLocal = false; CHECK(common_used < common_size); - CHECK(common_mem); +- CHECK(common_mem); - symbol->addr = (void*)((uintptr_t)common_mem + common_used); - common_used += symbol->elf_sym->st_size; ++ CHECK(oc->common_mem); + int alignment = symbol->elf_sym->st_value-1; + symbol->addr = (void*)(((uintptr_t)oc->common_mem + common_used + alignment) & ~alignment); + common_used = (uintptr_t)symbol->addr - (uintptr_t)oc->common_mem + symbol->elf_sym->st_size; CHECK(common_used <= common_size); - + IF_DEBUG(linker_verbose, @@ -1025,7 +1038,9 @@ ocGetNames_ELF ( ObjectCode* oc ) || ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK @@ -187,10 +189,25 @@ index bab2ca3041..5d91301c51 100644 if (ELF_ST_BIND(symbol->elf_sym->st_info) == STB_LOCAL) { isLocal = true; isWeak = false; -@@ -1070,35 +1093,20 @@ ocGetNames_ELF ( ObjectCode* oc ) - sym_type = SYM_TYPE_CODE; +@@ -1063,42 +1086,20 @@ ocGetNames_ELF ( ObjectCode* oc ) + isWeak = ELF_ST_BIND(symbol->elf_sym->st_info) + == STB_WEAK; + } +- } +- +- SymType sym_type; +- if (ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_FUNC) { +- sym_type = SYM_TYPE_CODE; ++ } else if (ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK ++ && shndx == SHN_UNDEF ++ && (ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_FUNC ++ || ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_OBJECT ++ || ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_NOTYPE)) { ++ symbol->addr = NULL; ++ isLocal = false; ++ isWeak = true; } else { - sym_type = SYM_TYPE_DATA; +- sym_type = SYM_TYPE_DATA; - } - - /* And the decision is ... */ @@ -215,16 +232,7 @@ index bab2ca3041..5d91301c51 100644 - } - } else { - /* Skip. */ -+ } else if (ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK -+ && shndx == SHN_UNDEF -+ && (ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_FUNC -+ || ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_OBJECT -+ || ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_NOTYPE)) { -+ symbol->addr = NULL; -+ isLocal = false; -+ isWeak = true; -+ } else { -+ /* skip this symbol */ ++ /* Skip. */ IF_DEBUG(linker_verbose, debugBelch("skipping `%s'\n", nm) @@ -233,16 +241,22 @@ index bab2ca3041..5d91301c51 100644 /* debugBelch( "skipping bind = %d, type = %d, secno = %d `%s'\n", -@@ -1108,7 +1116,24 @@ ocGetNames_ELF ( ObjectCode* oc ) +@@ -1108,7 +1109,34 @@ ocGetNames_ELF ( ObjectCode* oc ) nm ); */ -- } + continue; -+ } + } ++ ++ SymType sym_type; ++ if (ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_FUNC) { ++ sym_type = SYM_TYPE_CODE; ++ } else { ++ sym_type = SYM_TYPE_DATA; ++ } + + /* And the decision is ... */ -+ ASSERT(nm != NULL); ++ CHECK(nm != NULL); + /* Acquire! */ + if (!isLocal) { + @@ -250,11 +264,14 @@ index bab2ca3041..5d91301c51 100644 + setWeakSymbol(oc, nm); + } + if (!ghciInsertSymbolTable(oc->fileName, symhash, -+ nm, symbol->addr, isWeak, oc)) { ++ nm, symbol->addr, isWeak, sym_type, oc) ++ ) { + goto fail; + } -+ oc->symbols[curSymbol++].name = nm; ++ oc->symbols[curSymbol].name = nm; + oc->symbols[curSymbol].addr = symbol->addr; ++ oc->symbols[curSymbol].type = sym_type; ++ curSymbol++; + } } } @@ -267,12 +284,12 @@ index 9cd42efff2..70817d8b0b 100644 #include "Rts.h" +#include "RtsUtils.h" #include "elf_plt.h" - + #include @@ -51,7 +52,7 @@ makeStub(Section * section, void* * addr, uint8_t flags) { - + - Stub * s = calloc(1, sizeof(Stub)); + Stub * s = stgCallocBytes(1, sizeof(Stub), "makeStub"); ASSERT(s != NULL); From eb3d14156bfd50d956b7c74beaaeaae4df913e1e Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Mon, 13 Nov 2023 05:21:49 +0000 Subject: [PATCH 018/206] Adds genapply patch for 9.6 GenApply suffers from having GHC pollute its defines. --- overlays/bootstrap.nix | 3 +- .../ghc/ghc-9.6-genapply-cross-arch.patch | 35 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 overlays/patches/ghc/ghc-9.6-genapply-cross-arch.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index b9683505ea..3f1dd25499 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -298,7 +298,8 @@ in { # this one is to allow linking extra symbols from iserv. ++ final.lib.optional (versionAtLeast "9.6.1" && versionLessThan"9.10" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/iserv-syms.patch ++ final.lib.optional (versionAtLeast "9.4" && final.stdenv.targetPlatform.isWindows) ./patches/ghc/ghc-9.6-fix-code-symbol-jumps.patch - ++ final.lib.optional (versionAtLeast "9.6.3" && versionLessThan "9.10" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-9.6-iog.patch + ++ final.lib.optional (versionAtLeast "9.6.3" && versionLessThan "9.10" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-9.6-iog.patch ./patches/ghc/iserv-syms.patch + ++ final.lib.optional (versionAtLeast "9.6" && versionLessThan "9.12" && final.stdenv.targetPlatform.is32bit) ./patches/ghc/ghc-9.6-genapply-cross-arch.patch ; in ({ ghc865 = final.callPackage ../compiler/ghc (traceWarnOld "8.6" { diff --git a/overlays/patches/ghc/ghc-9.6-genapply-cross-arch.patch b/overlays/patches/ghc/ghc-9.6-genapply-cross-arch.patch new file mode 100644 index 0000000000..8aa2b81077 --- /dev/null +++ b/overlays/patches/ghc/ghc-9.6-genapply-cross-arch.patch @@ -0,0 +1,35 @@ +diff --git a/utils/genapply/Main.hs b/utils/genapply/Main.hs +index 74351ee..8a6513c 100644 +--- a/utils/genapply/Main.hs ++++ b/utils/genapply/Main.hs +@@ -12,6 +12,17 @@ + -- for details + module Main(main) where + ++-- GHC will helpfully pass ++-- -Dlinux_BUILD_OS -Dx86_64_BUILD_ARCH -Dlinux_HOST_OS -Dx86_64_HOST_ARCH -D__GLASGOW_HASKELL_TH__ -D__SSE__ -D__SSE2__ '-D__IO_MANAGER_MIO__=1' ++-- to cc -E when running the CPP phase. :-/ So we have to undefine them. ++#if defined(linux_BUILD_OS) || defined(x86_64_BUILD_ARCH) || defined(linux_HOST_OS) || defined(x86_64_HOST_ARCH) ++#warning "Undefining macros that GHC passes to CPP" ++#undef linux_BUILD_OS ++#undef x86_64_BUILD_ARCH ++#undef linux_HOST_OS ++#undef x86_64_HOST_ARCH ++#endif ++ + -- Note [Genapply target as host for RTS macros] + -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + -- We improperly include *HOST* macros for our target... +@@ -957,6 +968,12 @@ main = do + text "// DO NOT EDIT!", + text "// Automatically generated by utils/genapply/Main.hs", + text "", ++ text "// DEBUG: SIZEOF_VOID_P " <> int SIZEOF_VOID_P, ++ text "// DEBUG: HOST_ARCH " <> text HOST_ARCH, ++ text "// DEBUG: HOST_OS " <> text HOST_OS, ++ text "// DEBUG: BUILD_ARCH " <> text BUILD_ARCH, ++ text "// DEBUG: BUILD_OS " <> text BUILD_OS, ++ text "", + text "#include \"Cmm.h\"", + text "#include \"AutoApply.h\"", + text "#if !defined(UnregisterisedCompiler)", From 315446dcf1898db5c4519ebcf8128c886506bc17 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Sun, 12 Nov 2023 08:26:38 +0000 Subject: [PATCH 019/206] Add [PATCH] AArch64: Fix broken conditional jumps for offsets >= 1MB This is added for aarch64 for now only as that's the only affeted platform. --- overlays/bootstrap.nix | 2 +- ...050857a9c1b992040fbfd55fbe65b2851b19.patch | 54 +++++++++---------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 3f1dd25499..2b5d8f8fe5 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -298,7 +298,7 @@ in { # this one is to allow linking extra symbols from iserv. ++ final.lib.optional (versionAtLeast "9.6.1" && versionLessThan"9.10" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/iserv-syms.patch ++ final.lib.optional (versionAtLeast "9.4" && final.stdenv.targetPlatform.isWindows) ./patches/ghc/ghc-9.6-fix-code-symbol-jumps.patch - ++ final.lib.optional (versionAtLeast "9.6.3" && versionLessThan "9.10" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-9.6-iog.patch ./patches/ghc/iserv-syms.patch + ++ final.lib.optional (versionAtLeast "9.6.3" && versionLessThan "9.10" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-9.6-iog.patch ++ final.lib.optional (versionAtLeast "9.6" && versionLessThan "9.12" && final.stdenv.targetPlatform.is32bit) ./patches/ghc/ghc-9.6-genapply-cross-arch.patch ; in ({ diff --git a/overlays/patches/ghc/2adc050857a9c1b992040fbfd55fbe65b2851b19.patch b/overlays/patches/ghc/2adc050857a9c1b992040fbfd55fbe65b2851b19.patch index c43e4aeffc..427e976b22 100644 --- a/overlays/patches/ghc/2adc050857a9c1b992040fbfd55fbe65b2851b19.patch +++ b/overlays/patches/ghc/2adc050857a9c1b992040fbfd55fbe65b2851b19.patch @@ -26,7 +26,7 @@ index 1d489178673..a251370bfaf 100644 +++ b/compiler/GHC/CmmToAsm.hs @@ -655,13 +655,14 @@ cmmNativeGen logger ncgImpl us fileIds dbgMap cmm count text "cfg not in lockstep") () - + ---- sequence blocks - let sequenced :: [NatCmmDecl statics instr] - sequenced = @@ -43,20 +43,20 @@ index 1d489178673..a251370bfaf 100644 + shorted + + -- massert (checkLayout shorted sequenced) - + let branchOpt :: [NatCmmDecl statics instr] branchOpt = @@ -684,7 +685,7 @@ cmmNativeGen logger ncgImpl us fileIds dbgMap cmm count addUnwind acc proc = acc `mapUnion` computeUnwinding config ncgImpl proc - + - return ( usAlloc + return ( us_seq , fileIds' , branchOpt , lastMinuteImports ++ imports @@ -704,10 +705,10 @@ maybeDumpCfg logger (Just cfg) msg proc_name - + -- | Make sure all blocks we want the layout algorithm to place have been placed. checkLayout :: [NatCmmDecl statics instr] -> [NatCmmDecl statics instr] - -> [NatCmmDecl statics instr] @@ -94,7 +94,7 @@ index b77aa73e52b..2a1fa03b1bc 100644 , generateJumpTableForInstr + , makeFarBranches ) - + where @@ -43,9 +44,11 @@ import GHC.Cmm.Utils import GHC.Cmm.Switch @@ -105,7 +105,7 @@ index b77aa73e52b..2a1fa03b1bc 100644 import GHC.Types.Tickish ( GenTickish(..) ) import GHC.Types.SrcLoc ( srcSpanFile, srcSpanStartLine, srcSpanStartCol ) +import GHC.Types.Unique.Supply - + -- The rest: import GHC.Data.OrdList @@ -61,6 +64,9 @@ import GHC.Data.FastString @@ -115,13 +115,13 @@ index b77aa73e52b..2a1fa03b1bc 100644 +import GHC.Utils.Monad (mapAccumLM) + +import GHC.Cmm.Dataflow.Collections - + -- Note [General layout of an NCG] -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -161,15 +167,17 @@ basicBlockCodeGen block = do let (top,other_blocks,statics) = foldrOL mkBlocks ([],[],[]) instrs - + - mkBlocks (NEWBLOCK id) (instrs,blocks,statics) - = ([], BasicBlock id instrs : blocks, statics) - mkBlocks (LDATA sec dat) (instrs,blocks,statics) @@ -129,7 +129,7 @@ index b77aa73e52b..2a1fa03b1bc 100644 - mkBlocks instr (instrs,blocks,statics) - = (instr:instrs, blocks, statics) return (BasicBlock id top : other_blocks, statics) - + - +mkBlocks :: Instr + -> ([Instr], [GenBasicBlock Instr], [GenCmmDecl RawCmmStatics h g]) @@ -144,7 +144,7 @@ index b77aa73e52b..2a1fa03b1bc 100644 -- | Utilities ann :: SDoc -> Instr -> Instr @@ -1217,6 +1225,7 @@ assignReg_FltCode = assignReg_IntCode - + -- ----------------------------------------------------------------------------- -- Jumps + @@ -154,7 +154,7 @@ index b77aa73e52b..2a1fa03b1bc 100644 @@ -1302,6 +1311,22 @@ genCondJump bid expr = do _ -> pprPanic "AArch64.genCondJump:case mop: " (text $ show expr) _ -> pprPanic "AArch64.genCondJump: " (text $ show expr) - + +-- A conditional jump with at least +/-128M jump range +genCondFarJump :: MonadUnique m => Cond -> Target -> m InstrBlock +genCondFarJump cond far_target = do @@ -171,7 +171,7 @@ index b77aa73e52b..2a1fa03b1bc 100644 + , NEWBLOCK jmp_lbl_id + , B far_target + , NEWBLOCK skip_lbl_id] - + genCondBranch :: BlockId -- the source of the jump @@ -1816,3 +1841,163 @@ genCCall target dest_regs arg_regs bid = do @@ -344,12 +344,12 @@ index 687daccfda1..7efbb9c70bf 100644 +++ b/compiler/GHC/CmmToAsm/AArch64/Cond.hs @@ -1,6 +1,6 @@ module GHC.CmmToAsm.AArch64.Cond where - + -import GHC.Prelude +import GHC.Prelude hiding (EQ) - + -- https://developer.arm.com/documentation/den0024/a/the-a64-instruction-set/data-processing-instructions/conditional-instructions - + @@ -60,7 +60,13 @@ data Cond | UOGE -- b.pl | UOGT -- b.hi @@ -374,8 +374,8 @@ index d8dd1a4dc0c..1fb8193612f 100644 | TLabel CLabel | TReg Reg + deriving (Eq, Ord) - - + + -- Extension diff --git a/compiler/GHC/CmmToAsm/AArch64/Ppr.hs b/compiler/GHC/CmmToAsm/AArch64/Ppr.hs index fd56d37cd39..c672c342376 100644 @@ -384,12 +384,12 @@ index fd56d37cd39..c672c342376 100644 @@ -1,7 +1,7 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE CPP #-} - + -module GHC.CmmToAsm.AArch64.Ppr (pprNatCmmDecl, pprInstr) where +module GHC.CmmToAsm.AArch64.Ppr (pprNatCmmDecl, pprInstr, pprBasicBlock) where - + import GHC.Prelude hiding (EQ) - + @@ -353,7 +353,10 @@ pprInstr platform instr = case instr of -> line (text "\t.loc" <+> int file <+> int line' <+> int col) DELTA d -> dualDoc (asmComment $ text "\tdelta = " <> int d) empty @@ -400,17 +400,17 @@ index fd56d37cd39..c672c342376 100644 + -- print it for debugging purposes. + line (text "BLOCK " <> pprAsmLabel platform (blockLbl blockid)) LDATA _ _ -> panic "pprInstr: LDATA" - + -- Pseudo Instructions ------------------------------------------------------- @@ -567,7 +570,7 @@ pprCond c = case c of UGE -> text "hs" -- Carry set/unsigned higher or same ; Greater than or equal, or unordered UGT -> text "hi" -- Unsigned higher ; Greater than, or unordered - + - NEVER -> text "nv" -- Never + -- NEVER -> text "nv" -- Never VS -> text "vs" -- Overflow ; Unordered (at least one NaN operand) VC -> text "vc" -- No overflow ; Not unordered - + diff --git a/compiler/GHC/CmmToAsm/BlockLayout.hs b/compiler/GHC/CmmToAsm/BlockLayout.hs index fa0929348ce..e2096c90209 100644 --- a/compiler/GHC/CmmToAsm/BlockLayout.hs @@ -420,7 +420,7 @@ index fa0929348ce..e2096c90209 100644 import Control.Monad (foldM, unless) import GHC.Data.UnionFind +import GHC.Types.Unique.Supply (UniqSM) - + {- Note [CFG based code layout] @@ -794,29 +795,32 @@ sequenceTop @@ -476,7 +476,7 @@ index fa0929348ce..e2096c90209 100644 + far_blocks <- (ncgMakeFarBranches ncgImpl) platform info seq_blocks + pure $ CmmProc info lbl live $ ListGraph far_blocks + - + -- The old algorithm: -- It is very simple (and stupid): We make a graph out of diff --git a/compiler/GHC/CmmToAsm/Monad.hs b/compiler/GHC/CmmToAsm/Monad.hs @@ -508,7 +508,7 @@ index 3fedcc1fc40..8682d1db9d8 100644 +++ b/compiler/GHC/CmmToAsm/PPC/Instr.hs @@ -688,12 +688,13 @@ takeRegRegMoveInstr _ = Nothing -- big, we have to work around this limitation. - + makeFarBranches - :: LabelMap RawCmmStatics + :: Platform @@ -538,6 +538,6 @@ index a82674afe8f..a13fa2e4656 100644 , extractUnwindPoints = X86.extractUnwindPoints , invertCondBranches = X86.invertCondBranches } --- +-- GitLab From cd404c49eb76e484884331ca139726ac7b9bcc23 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Tue, 14 Nov 2023 08:03:02 +0800 Subject: [PATCH 020/206] Update default.nix --- compiler/ghc/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index e422756aca..52c6cb03cf 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -328,7 +328,7 @@ let # iPhones/iPads/... won't understand the compiled code, as the compiler will emit LDSETALH # FIXME: we should have iOS as an argument to this derivation, and then make this, as well as # disableLargeAddress space conditional on iOS = true. - + lib.optionalString (stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64) "'*.rts.ghc.c.opts += -optc-mcpu=apple-a7 -optc-march=armv8-a+norcpc'" + + lib.optionalString (stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64) " '*.rts.ghc.c.opts += -optc-mcpu=apple-a7 -optc-march=armv8-a+norcpc'" # For GHC versions in the 9.x range that don't support the +native_bignum flavour transformer yet + lib.optionalString ((enableNativeBignum && !hadrianHasNativeBignumFlavour)) " --bignum=native" From 72d622c31661abf890cc133d266415f6b172f385 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Tue, 14 Nov 2023 08:54:13 +0000 Subject: [PATCH 021/206] fix native musl --- lib/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/default.nix b/lib/default.nix index 88d0ab813c..f602949e06 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -256,8 +256,8 @@ in { && !(stdenv.hostPlatform.isLinux && stdenv.targetPlatform.isMusl && stdenv.hostPlatform.linuxArch == stdenv.targetPlatform.linuxArch); # Native musl build-host-target combo isNativeMusl = stdenv.hostPlatform.isMusl - && stdenv.buildPlatform == stdenv.hostPlatform - && stdenv.hostPlatform == stdenv.targetPlatform; + && stdenv.buildPlatform.linuxArch == stdenv.hostPlatform.linuxArch + && stdenv.hostPlatform.linuxArch == stdenv.targetPlatform.linuxArch; # Takes a version number, module or list of modules (for cabalProject) # and converts it to an list of project modules. This allows From 2884b5f4ebd27ecb89e8c9d52e156d9ba92eed4f Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Wed, 15 Nov 2023 05:06:27 +0000 Subject: [PATCH 022/206] add debug secno patch --- overlays/bootstrap.nix | 1 + overlays/patches/ghc/ghc-9.6-debug-secno.patch | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 overlays/patches/ghc/ghc-9.6-debug-secno.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 2b5d8f8fe5..bd1fee24c7 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -300,6 +300,7 @@ in { ++ final.lib.optional (versionAtLeast "9.4" && final.stdenv.targetPlatform.isWindows) ./patches/ghc/ghc-9.6-fix-code-symbol-jumps.patch ++ final.lib.optional (versionAtLeast "9.6.3" && versionLessThan "9.10" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-9.6-iog.patch ++ final.lib.optional (versionAtLeast "9.6" && versionLessThan "9.12" && final.stdenv.targetPlatform.is32bit) ./patches/ghc/ghc-9.6-genapply-cross-arch.patch + ++ final.lib.optional (versionAtLeast "9.6" && versionLessThan "9.9" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-9.6-debug-secno.patch ; in ({ ghc865 = final.callPackage ../compiler/ghc (traceWarnOld "8.6" { diff --git a/overlays/patches/ghc/ghc-9.6-debug-secno.patch b/overlays/patches/ghc/ghc-9.6-debug-secno.patch new file mode 100644 index 0000000000..3b0ffd738a --- /dev/null +++ b/overlays/patches/ghc/ghc-9.6-debug-secno.patch @@ -0,0 +1,16 @@ +diff --git a/rts/linker/Elf.c b/rts/linker/Elf.c +index 9f623a6..d5fc91c 100644 +--- a/rts/linker/Elf.c ++++ b/rts/linker/Elf.c +@@ -1056,6 +1056,11 @@ ocGetNames_ELF ( ObjectCode* oc ) + ) + ) { + /* Section 0 is the undefined section, hence > and not >=. */ ++ if (!(secno > 0 && secno < shnum)) { ++ debugBelch("while processing %s\n", OC_INFORMATIVE_FILENAME(oc)); ++ debugBelch("while processing symbol %s (%d)\n", nm, j); ++ barf("secno %d out of range (0, %d)\n", secno, shnum); ++ } + CHECK(secno > 0 && secno < shnum); + /* + if (shdr[secno].sh_type == SHT_NOBITS) { From 9ad088f26a86c44671fdd5d551b3d2d32e626047 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Wed, 15 Nov 2023 06:26:04 +0000 Subject: [PATCH 023/206] fix musl being considered stage2 --- lib/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/default.nix b/lib/default.nix index f602949e06..03bae7eab4 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -255,7 +255,7 @@ in { isCrossTarget = stdenv.targetPlatform != stdenv.hostPlatform && !(stdenv.hostPlatform.isLinux && stdenv.targetPlatform.isMusl && stdenv.hostPlatform.linuxArch == stdenv.targetPlatform.linuxArch); # Native musl build-host-target combo - isNativeMusl = stdenv.hostPlatform.isMusl + isNativeMusl = stdenv.targetPlatform.isMusl && stdenv.buildPlatform.linuxArch == stdenv.hostPlatform.linuxArch && stdenv.hostPlatform.linuxArch == stdenv.targetPlatform.linuxArch; From 4e9820c4cedb3f3c3f530204d0b86c0880620536 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Wed, 15 Nov 2023 06:37:59 +0000 Subject: [PATCH 024/206] Allow undefined weak symbols. --- .../patches/ghc/ghc-9.6-debug-secno.patch | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/overlays/patches/ghc/ghc-9.6-debug-secno.patch b/overlays/patches/ghc/ghc-9.6-debug-secno.patch index 3b0ffd738a..6564734a76 100644 --- a/overlays/patches/ghc/ghc-9.6-debug-secno.patch +++ b/overlays/patches/ghc/ghc-9.6-debug-secno.patch @@ -1,16 +1,22 @@ diff --git a/rts/linker/Elf.c b/rts/linker/Elf.c -index 9f623a6..d5fc91c 100644 +index 9f623a6..f4ee928 100644 --- a/rts/linker/Elf.c +++ b/rts/linker/Elf.c -@@ -1056,6 +1056,11 @@ ocGetNames_ELF ( ObjectCode* oc ) +@@ -1056,7 +1056,15 @@ ocGetNames_ELF ( ObjectCode* oc ) ) ) { /* Section 0 is the undefined section, hence > and not >=. */ -+ if (!(secno > 0 && secno < shnum)) { -+ debugBelch("while processing %s\n", OC_INFORMATIVE_FILENAME(oc)); -+ debugBelch("while processing symbol %s (%d)\n", nm, j); -+ barf("secno %d out of range (0, %d)\n", secno, shnum); -+ } - CHECK(secno > 0 && secno < shnum); +- CHECK(secno > 0 && secno < shnum); ++ // This is only a problem if the symbol is _not_ WEAK. If it's ++ // weak this is perfectly ok. See below how we set the symbol's ++ // address to NULL in that case. ++ // if (!(secno > 0 && secno < shnum)) { ++ // debugBelch("while processing %s\n", OC_INFORMATIVE_FILENAME(oc)); ++ // debugBelch("while processing symbol %s (%d)\n", nm, j); ++ // barf("secno %d out of range (0, %d)\n", secno, shnum); ++ // } ++ // CHECK(secno > 0 && secno < shnum); /* if (shdr[secno].sh_type == SHT_NOBITS) { + debugBelch(" BSS symbol, size %d off %d name %s\n", + From d1321de6b83b5347c96535778c6c071e57df669d Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Wed, 15 Nov 2023 08:26:00 +0000 Subject: [PATCH 025/206] Map missing symbols to 0xDEADBEEF. --- overlays/bootstrap.nix | 1 + .../ghc/ghc-9.6-missing-symbols-deadbeef.patch | 14 ++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 overlays/patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index bd1fee24c7..7b2372f4ef 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -301,6 +301,7 @@ in { ++ final.lib.optional (versionAtLeast "9.6.3" && versionLessThan "9.10" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-9.6-iog.patch ++ final.lib.optional (versionAtLeast "9.6" && versionLessThan "9.12" && final.stdenv.targetPlatform.is32bit) ./patches/ghc/ghc-9.6-genapply-cross-arch.patch ++ final.lib.optional (versionAtLeast "9.6" && versionLessThan "9.9" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-9.6-debug-secno.patch + ++ final.lib.optional (versionAtLeast "9.6" && versionLessThan "9.9" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.is32bit) ./patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch ; in ({ ghc865 = final.callPackage ../compiler/ghc (traceWarnOld "8.6" { diff --git a/overlays/patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch b/overlays/patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch new file mode 100644 index 0000000000..5e1bcbdfb1 --- /dev/null +++ b/overlays/patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch @@ -0,0 +1,14 @@ +diff --git a/rts/linker/elf_got.c b/rts/linker/elf_got.c +index 4d0c978..96a9d60 100644 +--- a/rts/linker/elf_got.c ++++ b/rts/linker/elf_got.c +@@ -99,7 +99,8 @@ fillGot(ObjectCode * oc) { + } else { + errorBelch("Failed to lookup symbol: %s\n", + symbol->name); +- return EXIT_FAILURE; ++ // return EXIT_FAILURE; ++ symbol->addr = 0xDEADBEEF; + } + } + } else { From 746a154fee358bb48c61adf170560a94985bf606 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Wed, 15 Nov 2023 09:21:09 +0000 Subject: [PATCH 026/206] Set -dynamic-system-linker if musl and not x86_64 --- compiler/ghc/default.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 52c6cb03cf..70ac6751b6 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -322,7 +322,10 @@ let # `-fexternal-dynamic-refs` causes `undefined reference` errors when building GHC cross compiler for windows + lib.optionalString (enableRelocatedStaticLibs && targetPlatform.isx86_64 && !targetPlatform.isWindows) " '*.*.ghc.*.opts += -fexternal-dynamic-refs'" - + lib.optionalString targetPlatform.isAndroid + # The fact that we need to set this here is pretty idiotic. GHC should figure this out on it's own. + # Either have a runtime flag/setting to disable it or if dlopen fails, remember that it failed and + # fall back to non-dynamic. We only have x86_64 dynamic linker with musl. + + lib.optionalString targetPlatform.isAndroid || (targetPlatform.isMusl && !targetPlatform.isx86) " '*.ghc.cabal.configure.opts += --flags=-dynamic-system-linker'" # The following is required if we build on aarch64-darwin for aarch64-iOS. Otherwise older # iPhones/iPads/... won't understand the compiled code, as the compiler will emit LDSETALH From 3623f1b4b6411411492ad02d4e8a5cef9ed564e5 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Wed, 15 Nov 2023 10:02:04 +0000 Subject: [PATCH 027/206] proper parens --- compiler/ghc/default.nix | 2 +- .../ghc/ghc-9.6-missing-symbols-deadbeef.patch | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 70ac6751b6..26e9382dc8 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -325,7 +325,7 @@ let # The fact that we need to set this here is pretty idiotic. GHC should figure this out on it's own. # Either have a runtime flag/setting to disable it or if dlopen fails, remember that it failed and # fall back to non-dynamic. We only have x86_64 dynamic linker with musl. - + lib.optionalString targetPlatform.isAndroid || (targetPlatform.isMusl && !targetPlatform.isx86) + + lib.optionalString (targetPlatform.isAndroid || (targetPlatform.isMusl && !targetPlatform.isx86)) " '*.ghc.cabal.configure.opts += --flags=-dynamic-system-linker'" # The following is required if we build on aarch64-darwin for aarch64-iOS. Otherwise older # iPhones/iPads/... won't understand the compiled code, as the compiler will emit LDSETALH diff --git a/overlays/patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch b/overlays/patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch index 5e1bcbdfb1..cd02ae8291 100644 --- a/overlays/patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch +++ b/overlays/patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch @@ -12,3 +12,15 @@ index 4d0c978..96a9d60 100644 } } } else { +diff --git a/rts/Linker.c b/rts/Linker.c +index 2356818..727e845 100644 +--- a/rts/Linker.c ++++ b/rts/Linker.c +@@ -1088,6 +1088,7 @@ SymbolAddr* lookupSymbol( SymbolName* lbl ) + "See top entry above.\n", lbl); + IF_DEBUG(linker, printLoadedObjects()); + fflush(stderr); ++ r = 0xDEADBEEF; + } + + if (!runPendingInitializers()) { From 74026f981a1d6546bb712dc73dd07f2e707e7ef0 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Thu, 16 Nov 2023 00:12:18 +0000 Subject: [PATCH 028/206] Add i686 cross --- lib/default.nix | 2 ++ overlays/linux-cross.nix | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/default.nix b/lib/default.nix index 03bae7eab4..03ea17c466 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -585,6 +585,8 @@ in { then "arm" else if hostPlatform.isAarch64 then "aarch64" + else if hostPlatform.isi686 + then "i386" else abort "Don't know which QEMU to use for hostPlatform ${hostPlatform.config}. Please provide qemuSuffix"; # How to run ldd when checking for static linking diff --git a/overlays/linux-cross.nix b/overlays/linux-cross.nix index 64de610c61..abae29011e 100644 --- a/overlays/linux-cross.nix +++ b/overlays/linux-cross.nix @@ -31,7 +31,7 @@ let # of nix build envs. # we want this to hold only for arm (32 and 64bit) for now. - isLinuxCross = haskellLib.isCrossHost && hostPlatform.isLinux && (hostPlatform.isAarch32 || hostPlatform.isAarch64); + isLinuxCross = haskellLib.isCrossHost && hostPlatform.isLinux && (hostPlatform.isAarch32 || hostPlatform.isAarch64 || hostPlatform.isi686); qemuIservWrapperScript = enableProfiling: let interpreter = From b953554327fa3e789356ae4a324deb0759f39d19 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Thu, 16 Nov 2023 00:12:28 +0000 Subject: [PATCH 029/206] more patches --- overlays/linux-cross.nix | 10 +- ...serv-proxy-interpreter-9.3-android32.patch | 337 ++++++++++++++++++ overlays/patches/iserv-proxy-keep-cafs.patch | 33 ++ 3 files changed, 377 insertions(+), 3 deletions(-) create mode 100644 overlays/patches/iserv-proxy-interpreter-9.3-android32.patch create mode 100644 overlays/patches/iserv-proxy-keep-cafs.patch diff --git a/overlays/linux-cross.nix b/overlays/linux-cross.nix index abae29011e..720ae3737f 100644 --- a/overlays/linux-cross.nix +++ b/overlays/linux-cross.nix @@ -49,11 +49,15 @@ let PORT=$((5000 + $RANDOM % 5000)) (>&2 echo "---> Starting ${interpreter.exeName} on port $PORT") ${qemu}/bin/qemu-${qemuSuffix} ${interpreter.override - (lib.optionalAttrs hostPlatform.isAndroid { + ({ + patches = [ ./patches/iserv-proxy-keep-cafs.patch ] + ++ lib.optional (hostPlatform.isAndroid && hostPlatform.isAarch32) ./patches/iserv-proxy-interpreter-9.3-android32.patch + ++ lib.optional (hostPlatform.isAndroid && hostPlatform.isAarch64) ./patches/iserv-proxy-interpreter-9.3-android.patch + ; + } // lib.optionalAttrs hostPlatform.isAndroid { setupBuildFlags = ["--ghc-option=-optl-static" ] ++ lib.optional hostPlatform.isAarch32 "--ghc-option=-optl-no-pie"; - patches = lib.optional hostPlatform.isAarch64 ./patches/iserv-proxy-interpreter-9.3-android.patch; enableDebugRTS = true; - })}/bin/${interpreter.exeName} tmp $PORT $ISERV_ARGS & + })}/bin/${interpreter.exeName} tmp $PORT $ISERV_ARGS & (>&2 echo "---| ${interpreter.exeName} should have started on $PORT") RISERV_PID="$!" ${iserv-proxy}/bin/iserv-proxy $@ 127.0.0.1 "$PORT" $PROXY_ARGS diff --git a/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch b/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch new file mode 100644 index 0000000000..77f79c7ba2 --- /dev/null +++ b/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch @@ -0,0 +1,337 @@ +diff --git a/cbits/symbols.c b/cbits/symbols.c +new file mode 100644 +index 0000000..d447895 +--- /dev/null ++++ b/cbits/symbols.c +@@ -0,0 +1,318 @@ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++// #include ++// #include // this includes too many overloaded items. ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++// fnctl stubs, see above ++extern void open(void); ++extern void openat(void); ++extern void creat(void); ++extern void eventfd(void); ++extern void eventfd_write(void); ++ ++extern void futimes(void); ++extern void lutimes(void); ++extern void statx(void); ++ ++extern void __stack_chk_fail(void); ++extern void __vsprintf_chk(void); ++extern void __open_2(void); ++extern void __memcpy_chk(void); ++extern void __memset_chk(void); ++extern void __memmove_chk(void); ++// GCC stuff ++extern void __addtf3(void); ++extern void __divtf3(void); ++extern void __extenddftf2(void); ++extern void __fixtfsi(void); ++extern void __floatditf(void); ++extern void __floatsitf(void); ++extern void __getf2(void); ++extern void __gttf2(void); ++extern void __lttf2(void); ++extern void __multf3(void); ++extern void __subtf3(void); ++extern void __trunctfdf2(void); ++ ++#define MISSING_FUN(f) void (f)(void) { printf("Unknown call to `%s'\n", #f); exit(1); } ++ ++MISSING_FUN(c_format_unix_time) ++MISSING_FUN(c_format_unix_time_gmt) ++MISSING_FUN(c_parse_unix_time) ++MISSING_FUN(c_parse_unix_time_gmt) ++ ++typedef void SymbolAddr; ++typedef char SymbolName; ++ ++typedef enum _SymStrength { ++ STRENGTH_NORMAL, ++ STRENGTH_WEAK, ++ STRENGTH_STRONG, ++} SymStrength; ++ ++typedef enum _SymType { ++ SYM_TYPE_CODE = 1 << 0, /* the symbol is a function and can be relocated via a jump island */ ++ SYM_TYPE_DATA = 1 << 1, /* the symbol is data */ ++ SYM_TYPE_INDIRECT_DATA = 1 << 2, /* see Note [_iob_func symbol] */ ++ SYM_TYPE_DUP_DISCARD = 1 << 3, /* the symbol is a symbol in a BFD import library ++ however if a duplicate is found with a mismatching ++ SymType then discard this one. */ ++} SymType; ++ ++typedef struct _RtsSymbolVal { ++ const SymbolName* lbl; ++ SymbolAddr* addr; ++ SymStrength strength; ++ SymType type; ++} RtsSymbolVal; ++ ++#define SYM(x) { #x, (void*)(&x), STRENGTH_NORMAL, 1 } ++typedef mode_t (*umask_func_ptr_t)(mode_t); ++ ++RtsSymbolVal my_iserv_syms[] = { ++ // arpa/inet.h ++ SYM(htons), ++ SYM(ntohs), ++ SYM(htonl), ++ SYM(ntohl), ++ // sys/random.h ++ SYM(getentropy), ++ SYM(getrandom), ++ // sys/auxv.h ++ SYM(getauxval), ++ // sys/mman.h ++ SYM(madvise),SYM(mlock),SYM(mmap),SYM(mprotect),SYM(munmap), ++ SYM(mremap), ++ SYM(munlock), ++ // select.h ++ SYM(__FD_SET_chk), ++ // sys/socket ++ SYM(accept),SYM(bind),SYM(connect),SYM(getsockopt),SYM(listen), ++ SYM(setsockopt),SYM(socket),SYM(getsockname),SYM(select), ++ SYM(getpeername),SYM(__cmsg_nxthdr),SYM(recv),SYM(recvfrom), ++ SYM(recvmsg),SYM(send),SYM(sendmsg),SYM(sendto),SYM(writev), ++ SYM(accept4), ++ // pthread.h ++ SYM(pthread_equal),SYM(pthread_getspecific),SYM(pthread_key_create), ++ SYM(pthread_key_delete),SYM(pthread_once),SYM(pthread_rwlock_destroy), ++ SYM(pthread_rwlock_init),SYM(pthread_rwlock_rdlock),SYM(pthread_rwlock_unlock), ++ SYM(pthread_rwlock_wrlock),SYM(pthread_self),SYM(pthread_setspecific), ++ SYM(pthread_create),SYM(pthread_join),SYM(pthread_mutex_destroy), ++ SYM(pthread_mutex_init),SYM(pthread_mutex_lock),SYM(pthread_mutex_trylock), ++ SYM(pthread_mutex_unlock),SYM(pthread_mutexattr_destroy), ++ SYM(pthread_mutexattr_init),SYM(pthread_mutexattr_settype), ++ // chk.h ++ SYM(__read_chk),SYM(__write_chk), ++ // netdb.h ++ SYM(freeaddrinfo),SYM(gai_strerror),SYM(getaddrinfo),SYM(getnameinfo), ++ SYM(gethostbyname), ++ // dirent.h ++ SYM(readdir_r),SYM(readdir), ++ SYM(opendir),SYM(closedir), ++ // time.h ++ SYM(clock),SYM(gmtime_r), ++ // sys/time.h ++ SYM(gettimeofday),SYM(clock_getres),SYM(clock_gettime),SYM(localtime_r),SYM(tzset), ++ // unistd.h ++ SYM(readlink), ++ SYM(rename), ++ SYM(rmdir), ++ SYM(chown), ++ SYM(realpath), ++ SYM(fchdir), ++ SYM(fdopendir), ++ SYM(rewinddir), ++ SYM(futimens),SYM(futimes),SYM(lutimes), ++ SYM(mknod), ++ SYM(lchown), ++ SYM(symlink), ++ SYM(endgrent),SYM(endpwent), ++ SYM(pathconf), ++ SYM(truncate), ++ SYM(utimensat), ++ SYM(statx), ++ SYM(seekdir), ++ SYM(telldir), ++ SYM(clearenv), ++ SYM(chdir), ++ SYM(sleep), ++ SYM(stdout), ++ SYM(strftime), ++ SYM(utimes), ++ SYM(setenv), ++ SYM(fpathconf), ++ SYM(exit), ++ SYM(environ), ++ SYM(ftruncate), ++ SYM(getenv), ++ SYM(putenv), ++ SYM(unsetenv), ++ SYM(read), ++ SYM(write), ++ SYM(isatty), ++ SYM(link), ++ SYM(pipe), ++ SYM(unlink), ++ SYM(execv),SYM(execve),SYM(execvp),SYM(execvpe), ++ SYM(syscall),SYM(sysconf), ++ // errno.h ++ SYM(__errno), ++ // math.h ++ SYM(sinhf), SYM(sinh), SYM(sinf), SYM(sin), ++ SYM(coshf), SYM(cosh), SYM(cosf), SYM(cos), ++ SYM(atanhf), SYM(atanh), SYM(atanf), SYM(atan), ++ SYM(asinhf), SYM(asinh), SYM(asinf), SYM(asin), ++ SYM(acoshf), SYM(acosh), SYM(acosf), SYM(acos), ++ SYM(log1pf), SYM(log1p), SYM(logf), SYM(log), ++ SYM(expm1f), SYM(expm1), ++ SYM(expf), SYM(exp), ++ SYM(ldexp), ++ SYM(powf), SYM(pow), ++ SYM(sqrtf), SYM(sqrt), ++ SYM(tanhf), SYM(tanh), SYM(tanf), SYM(tan), ++ // assert.h ++ SYM(__assert2), ++ // signal.h ++ SYM(signal),SYM(sigaction), ++ SYM(raise), SYM(sigaddset), SYM(sigemptyset), SYM(sigprocmask), ++ // sys/eventfd.h ++ SYM(eventfd), SYM(eventfd_write), ++ // sys/stat.h ++ SYM(fstat), ++ SYM(lstat), ++ SYM(stat), ++ SYM(chmod), ++ SYM(mkfifo), ++ // SYM(umask), ++ { "umask", (umask_func_ptr_t)(&umask), STRENGTH_NORMAL, 1 }, ++ // sys/wait.h ++ SYM(waitpid), ++ // sym/epoll.h ++ SYM(epoll_create), SYM(epoll_ctl), SYM(epoll_wait), ++ // poll.h ++ SYM(poll), ++ // fcntl.h ++ SYM(open), SYM(creat), SYM(fcntl), SYM(ioctl), ++ SYM(openat),SYM(__open_2), ++ // string.h ++ SYM(strerror), ++ SYM(strcmp), ++ SYM(memchr),SYM(strcpy),SYM(strchr),SYM(strncpy),SYM(strrchr), ++ SYM(strcat),SYM(strncmp),SYM(strdup), ++ SYM(strtoul),SYM(strspn),SYM(strtol),SYM(strstr),SYM(strcspn), ++ SYM(__strncpy_chk2),SYM(__memcpy_chk), ++ // ctype.h ++ SYM(__ctype_get_mb_cur_max), ++ // wchar.h ++ SYM(mbrtowc), SYM(wcrtomb), ++ // stdlib.h ++ SYM(qsort), ++ // unistd.h ++ SYM(access), SYM(close), SYM(dup), SYM(dup2), SYM(fork), SYM(getpid), ++ SYM(lseek), ++ // utime.h ++ SYM(utime),SYM(time), ++ // ... ++ SYM(fileno), ++ SYM(__vsprintf_chk), ++ SYM(__strlen_chk), ++ SYM(__strchr_chk), ++ SYM(__memset_chk), ++ SYM(__memmove_chk), ++ SYM(__stack_chk_fail), ++ SYM(memmove), ++ SYM(memcmp), ++ SYM(memcpy), ++ SYM(memset), ++ SYM(stderr), ++ SYM(realloc), ++ SYM(calloc), ++ SYM(malloc), ++ SYM(free), ++ SYM(fprintf), ++ SYM(vfprintf), ++ SYM(fopen), SYM(fclose), ++ SYM(getegid),SYM(getgid), ++ SYM(getpwent), ++ SYM(getgrent), ++ SYM(getgroups), ++ SYM(getlogin), ++ SYM(getuid), ++ SYM(getgrgid_r),SYM(getgrnam_r),SYM(getpwnam_r),SYM(getpwuid_r), ++ SYM(setegid),SYM(seteuid),SYM(setgid),SYM(setgrent),SYM(setgroups), ++ SYM(setpwent),SYM(setuid), ++ SYM(fread), ++ SYM(abort), ++ SYM(strlen), ++ SYM(fwrite), ++ SYM(feof), ++ SYM(ferror), ++ SYM(fflush), ++ SYM(fgets),SYM(fputc),SYM(fputs), ++ SYM(fseek),SYM(ftell), ++ SYM(sscanf), ++ SYM(shutdown), ++ SYM(atoi), ++ SYM(stdin), ++ SYM(atexit), ++ SYM(usleep), ++ SYM(fchmod), ++ SYM(fchown), ++ SYM(fsync), ++ SYM(getcwd), ++ SYM(geteuid), ++ SYM(localtime), ++ SYM(lseek64), ++ SYM(mkdir), ++ SYM(mktime), ++ SYM(fdopen), ++ SYM(c_format_unix_time), ++ SYM(c_format_unix_time_gmt), ++ SYM(c_parse_unix_time), ++ SYM(c_parse_unix_time_gmt), ++ SYM(__addtf3), ++ SYM(__divtf3), ++ SYM(__extenddftf2), ++ SYM(__fixtfsi), ++ SYM(__floatditf), ++ SYM(__floatsitf), ++ SYM(__getf2), ++ SYM(__gttf2), ++ SYM(__lttf2), ++ SYM(__multf3), ++ SYM(__subtf3), ++ SYM(__trunctfdf2), ++ { 0, 0, STRENGTH_NORMAL, 1 } /* sentinel */ ++}; ++ ++RtsSymbolVal* iserv_syms() { ++ return my_iserv_syms; ++} +\ No newline at end of file +diff --git a/iserv-proxy.cabal b/iserv-proxy.cabal +index a0eeaeb..a146108 100644 +--- a/iserv-proxy.cabal ++++ b/iserv-proxy.cabal +@@ -101,6 +101,7 @@ Executable iserv-proxy + Executable iserv-proxy-interpreter + Default-Language: Haskell2010 + Main-Is: Interpreter.hs ++ c-sources: cbits/symbols.c + Build-Depends: base >= 4 && < 5, + iserv-proxy + diff --git a/overlays/patches/iserv-proxy-keep-cafs.patch b/overlays/patches/iserv-proxy-keep-cafs.patch new file mode 100644 index 0000000000..ee17f934a0 --- /dev/null +++ b/overlays/patches/iserv-proxy-keep-cafs.patch @@ -0,0 +1,33 @@ +From 320b0783de5155b18f1ed68dff2be52e75c3377a Mon Sep 17 00:00:00 2001 +From: Sylvain Henry +Date: Wed, 15 Nov 2023 16:06:23 +0100 +Subject: [PATCH] Retain CAFs in the interpreter + +iserv-proxy-interpreter dynamically loads libraries. It must retain CAFs +to avoid issues like: + +> iserv-proxy-interpreter.exe:internal error:Evaluated a CAF that was GC'd! + +ghc-lib uses a hacky keepCAFsForGHCi.c file; iserv still uses a custom +hs-main C file. We use -fkeep-cafs as it has the same effect. +--- + iserv-proxy.cabal | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/iserv-proxy.cabal b/iserv-proxy.cabal +index 7179864..39e5cc6 100644 +--- a/iserv-proxy.cabal ++++ b/iserv-proxy.cabal +@@ -99,6 +99,9 @@ Executable iserv-proxy + Executable iserv-proxy-interpreter + Default-Language: Haskell2010 + Main-Is: Interpreter.hs ++ -- We need to pass -fkeep-cafs to ensure that the interpreter retains CAFs ++ -- Iserv and GHC do something similar. ++ ghc-options: -fkeep-cafs + Build-Depends: base >= 4 && < 5, + iserv-proxy + +-- +GitLab + From 8ccbc65c5928a1c284a0364ab1bf3b4f61a67b33 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Thu, 16 Nov 2023 00:29:39 +0000 Subject: [PATCH 030/206] :facepalm: --- overlays/patches/iserv-proxy-interpreter-9.3-android.patch | 5 ++++- overlays/patches/iserv-proxy-interpreter-9.3-android32.patch | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/overlays/patches/iserv-proxy-interpreter-9.3-android.patch b/overlays/patches/iserv-proxy-interpreter-9.3-android.patch index 77f79c7ba2..5170a536d7 100644 --- a/overlays/patches/iserv-proxy-interpreter-9.3-android.patch +++ b/overlays/patches/iserv-proxy-interpreter-9.3-android.patch @@ -327,10 +327,13 @@ diff --git a/iserv-proxy.cabal b/iserv-proxy.cabal index a0eeaeb..a146108 100644 --- a/iserv-proxy.cabal +++ b/iserv-proxy.cabal -@@ -101,6 +101,7 @@ Executable iserv-proxy +@@ -103,6 +103,7 @@ Executable iserv-proxy Executable iserv-proxy-interpreter Default-Language: Haskell2010 Main-Is: Interpreter.hs + -- We need to pass -fkeep-cafs to ensure that the interpreter retains CAFs + -- Iserv and GHC do something similar. + ghc-options: -fkeep-cafs + c-sources: cbits/symbols.c Build-Depends: base >= 4 && < 5, iserv-proxy diff --git a/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch b/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch index 77f79c7ba2..5170a536d7 100644 --- a/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch +++ b/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch @@ -327,10 +327,13 @@ diff --git a/iserv-proxy.cabal b/iserv-proxy.cabal index a0eeaeb..a146108 100644 --- a/iserv-proxy.cabal +++ b/iserv-proxy.cabal -@@ -101,6 +101,7 @@ Executable iserv-proxy +@@ -103,6 +103,7 @@ Executable iserv-proxy Executable iserv-proxy-interpreter Default-Language: Haskell2010 Main-Is: Interpreter.hs + -- We need to pass -fkeep-cafs to ensure that the interpreter retains CAFs + -- Iserv and GHC do something similar. + ghc-options: -fkeep-cafs + c-sources: cbits/symbols.c Build-Depends: base >= 4 && < 5, iserv-proxy From 12b7e016fa1b3f6e3451113da2ab731af9c81f5c Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Thu, 16 Nov 2023 00:32:41 +0000 Subject: [PATCH 031/206] patch interpreter also for windows. --- overlays/mingw_w64.nix | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/overlays/mingw_w64.nix b/overlays/mingw_w64.nix index b23fe4cd39..7e4738c9a2 100644 --- a/overlays/mingw_w64.nix +++ b/overlays/mingw_w64.nix @@ -34,7 +34,12 @@ let PORT=$((5000 + $RANDOM % 5000)) (>&2 echo "---> Starting ${interpreter.exeName} on port $PORT") REMOTE_ISERV=$(mktemp -d) - ln -s ${interpreter.override { enableDebugRTS = true; }}/bin/* $REMOTE_ISERV + ln -s ${interpreter.override + { + patches = [ ./patches/iserv-proxy-keep-cafs.patch ] + ; + enableDebugRTS = true; + }}/bin/* $REMOTE_ISERV # See coment in comp-builder.nix for where this comes from and why it's here # TODO use `LINK_DLL_FOLDERS` here once it is in all the nixpkgs we want to support. for p in $pkgsHostTargetAsString; do From 793163e0b13fcb42088d2066c9bdab720d04a39f Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Thu, 16 Nov 2023 00:36:12 +0000 Subject: [PATCH 032/206] No dynamic loading on x86. --- compiler/ghc/default.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 26e9382dc8..0336b1cb1a 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -163,8 +163,9 @@ let WITH_TERMINFO=NO '' # musl doesn't have a system-linker. Only on x86, and on x86 we need it, as - # our elf linker for x86_64 is broken. - + lib.optionalString (targetPlatform.isAndroid || (targetPlatform.isMusl && !targetPlatform.isx86)) '' + # our elf linker for x86_64 is broken. The i686 one seems also to not exist. + # So it's really _just_ x86_64. + + lib.optionalString (targetPlatform.isAndroid || (targetPlatform.isMusl && !targetPlatform.isx86_64)) '' compiler_CONFIGURE_OPTS += --flags=-dynamic-system-linker '' # While split sections are now enabled by default in ghc 8.8 for windows, @@ -325,7 +326,7 @@ let # The fact that we need to set this here is pretty idiotic. GHC should figure this out on it's own. # Either have a runtime flag/setting to disable it or if dlopen fails, remember that it failed and # fall back to non-dynamic. We only have x86_64 dynamic linker with musl. - + lib.optionalString (targetPlatform.isAndroid || (targetPlatform.isMusl && !targetPlatform.isx86)) + + lib.optionalString (targetPlatform.isAndroid || (targetPlatform.isMusl && !targetPlatform.isx86_64)) " '*.ghc.cabal.configure.opts += --flags=-dynamic-system-linker'" # The following is required if we build on aarch64-darwin for aarch64-iOS. Otherwise older # iPhones/iPads/... won't understand the compiled code, as the compiler will emit LDSETALH From 8ec031ecf21fb17b6cd3d90ae66daf4c075abd76 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Thu, 16 Nov 2023 00:54:37 +0000 Subject: [PATCH 033/206] :facepalm: --- overlays/patches/iserv-proxy-interpreter-9.3-android.patch | 3 --- overlays/patches/iserv-proxy-interpreter-9.3-android32.patch | 3 --- 2 files changed, 6 deletions(-) diff --git a/overlays/patches/iserv-proxy-interpreter-9.3-android.patch b/overlays/patches/iserv-proxy-interpreter-9.3-android.patch index 5170a536d7..12f3dda3fe 100644 --- a/overlays/patches/iserv-proxy-interpreter-9.3-android.patch +++ b/overlays/patches/iserv-proxy-interpreter-9.3-android.patch @@ -328,9 +328,6 @@ index a0eeaeb..a146108 100644 --- a/iserv-proxy.cabal +++ b/iserv-proxy.cabal @@ -103,6 +103,7 @@ Executable iserv-proxy - Executable iserv-proxy-interpreter - Default-Language: Haskell2010 - Main-Is: Interpreter.hs -- We need to pass -fkeep-cafs to ensure that the interpreter retains CAFs -- Iserv and GHC do something similar. ghc-options: -fkeep-cafs diff --git a/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch b/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch index 5170a536d7..12f3dda3fe 100644 --- a/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch +++ b/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch @@ -328,9 +328,6 @@ index a0eeaeb..a146108 100644 --- a/iserv-proxy.cabal +++ b/iserv-proxy.cabal @@ -103,6 +103,7 @@ Executable iserv-proxy - Executable iserv-proxy-interpreter - Default-Language: Haskell2010 - Main-Is: Interpreter.hs -- We need to pass -fkeep-cafs to ensure that the interpreter retains CAFs -- Iserv and GHC do something similar. ghc-options: -fkeep-cafs From 2dfd8584996c4171871e9660ed9b0fb42a15409d Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Thu, 16 Nov 2023 02:03:53 +0000 Subject: [PATCH 034/206] Sigh --- overlays/bootstrap.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 7b2372f4ef..c5ac836bda 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -296,7 +296,7 @@ in { ++ final.lib.optional (versionAtLeast "9.0" && versionLessThan "9.8" && final.stdenv.targetPlatform.isMusl && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch ++ final.lib.optional (versionAtLeast "9.0" && versionLessThan "10.0" && final.stdenv.targetPlatform.is32bit) ./patches/ghc/ghc-9.6-32bit-cmm.patch # this one is to allow linking extra symbols from iserv. - ++ final.lib.optional (versionAtLeast "9.6.1" && versionLessThan"9.10" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/iserv-syms.patch + ++ final.lib.optional (versionAtLeast "9.6.1" && versionLessThan"9.10" && (final.stdenv.targetPlatform.isAndroid || final.stdenv.targetPlatform.isAarch64 || final.stdenv.targetPlatform.is32bit)) ./patches/ghc/iserv-syms.patch ++ final.lib.optional (versionAtLeast "9.4" && final.stdenv.targetPlatform.isWindows) ./patches/ghc/ghc-9.6-fix-code-symbol-jumps.patch ++ final.lib.optional (versionAtLeast "9.6.3" && versionLessThan "9.10" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-9.6-iog.patch ++ final.lib.optional (versionAtLeast "9.6" && versionLessThan "9.12" && final.stdenv.targetPlatform.is32bit) ./patches/ghc/ghc-9.6-genapply-cross-arch.patch From 22dae4d817851b6880ebcd7598840b4a4ae22755 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Thu, 16 Nov 2023 02:07:35 +0000 Subject: [PATCH 035/206] Disable linux cross patch for now. --- overlays/linux-cross.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overlays/linux-cross.nix b/overlays/linux-cross.nix index 720ae3737f..7205061e9f 100644 --- a/overlays/linux-cross.nix +++ b/overlays/linux-cross.nix @@ -51,7 +51,7 @@ let ${qemu}/bin/qemu-${qemuSuffix} ${interpreter.override ({ patches = [ ./patches/iserv-proxy-keep-cafs.patch ] - ++ lib.optional (hostPlatform.isAndroid && hostPlatform.isAarch32) ./patches/iserv-proxy-interpreter-9.3-android32.patch + # ++ lib.optional (hostPlatform.isAndroid && hostPlatform.isAarch32) ./patches/iserv-proxy-interpreter-9.3-android32.patch ++ lib.optional (hostPlatform.isAndroid && hostPlatform.isAarch64) ./patches/iserv-proxy-interpreter-9.3-android.patch ; } // lib.optionalAttrs hostPlatform.isAndroid { From a9035e4da599f963fe940450e9d4296adf07ca5e Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Thu, 16 Nov 2023 04:07:42 +0000 Subject: [PATCH 036/206] Fix 32bit patch --- overlays/linux-cross.nix | 2 +- ...serv-proxy-interpreter-9.3-android32.patch | 627 +++++++++++------- 2 files changed, 379 insertions(+), 250 deletions(-) diff --git a/overlays/linux-cross.nix b/overlays/linux-cross.nix index 7205061e9f..720ae3737f 100644 --- a/overlays/linux-cross.nix +++ b/overlays/linux-cross.nix @@ -51,7 +51,7 @@ let ${qemu}/bin/qemu-${qemuSuffix} ${interpreter.override ({ patches = [ ./patches/iserv-proxy-keep-cafs.patch ] - # ++ lib.optional (hostPlatform.isAndroid && hostPlatform.isAarch32) ./patches/iserv-proxy-interpreter-9.3-android32.patch + ++ lib.optional (hostPlatform.isAndroid && hostPlatform.isAarch32) ./patches/iserv-proxy-interpreter-9.3-android32.patch ++ lib.optional (hostPlatform.isAndroid && hostPlatform.isAarch64) ./patches/iserv-proxy-interpreter-9.3-android.patch ; } // lib.optionalAttrs hostPlatform.isAndroid { diff --git a/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch b/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch index 12f3dda3fe..7aeba03e07 100644 --- a/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch +++ b/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch @@ -1,74 +1,174 @@ diff --git a/cbits/symbols.c b/cbits/symbols.c new file mode 100644 -index 0000000..d447895 +index 0000000..9974c73 --- /dev/null +++ b/cbits/symbols.c -@@ -0,0 +1,318 @@ +@@ -0,0 +1,447 @@ +#include +#include +#include +#include -+#include -+#include +#include +#include -+#include -+#include -+#include -+#include -+// #include -+// #include // this includes too many overloaded items. -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include + -+// fnctl stubs, see above -+extern void open(void); -+extern void openat(void); -+extern void creat(void); -+extern void eventfd(void); ++extern void __aeabi_idiv(void); ++extern void __aeabi_idivmod(void); ++extern void __aeabi_memcpy(void); ++extern void __aeabi_memclr(void); ++extern void __aeabi_memclr4(void); ++extern void __aeabi_ldivmod(void); ++extern void __aeabi_memcpy4(void); ++extern void __aeabi_memmove(void); ++extern void __aeabi_memset4(void); ++extern void __aeabi_uidiv(void); ++extern void __aeabi_uidivmod(void); ++extern void __aeabi_uldivmod(void); ++ +extern void eventfd_write(void); ++extern void ioctl(void); ++extern void close(void); ++extern void epoll_wait(void); ++// extern void expf(void); ++extern void getpid(void); ++extern void isatty(void); ++extern void waitpid(void); + -+extern void futimes(void); -+extern void lutimes(void); -+extern void statx(void); ++extern void dup2(void); ++extern void epoll_ctl(void); ++extern void ftruncate64(void); ++extern void link(void); ++extern void pipe(void); + ++extern void __assert2(void); ++extern void dup(void); ++extern void epoll_create(void); ++extern void eventfd(void); ++extern void fork(void); ++extern void unlink(void); ++extern void creat(void); ++extern void fcntl(void); ++extern void open(void); ++extern void access(void); ++extern void environ(void); ++extern void lseek64(void); ++extern void umask(void); ++extern void poll(void); ++extern void raise(void); ++extern void mbrtowc(void); ++extern void sigprocmask(void); ++extern void sigaddset(void); ++extern void sigemptyset(void); ++extern void stat(void); ++extern void utime(void); ++extern void chmod(void); ++extern void mkfifo(void); ++extern void wcrtomb(void); ++extern void lstat(void); ++extern void fstat(void); ++extern void write(void); ++extern void read(void); +extern void __stack_chk_fail(void); -+extern void __vsprintf_chk(void); -+extern void __open_2(void); -+extern void __memcpy_chk(void); ++extern void __stack_chk_guard(void); ++extern void __aeabi_memclr8(void); ++extern void __aeabi_memcpy8(void); ++extern void __aeabi_memmove4(void); ++extern void __write_chk(void); ++extern void time(void); ++extern void uname(void); ++extern void tzset(void); ++extern void sysconf(void); ++extern void socket(void); ++extern void readdir(void); ++extern void pthread_rwlock_init(void); +extern void __memset_chk(void); ++extern void __memcpy_chk(void); ++extern void gmtime_r(void); ++extern void getauxval(void); ++extern void clock_gettime(void); ++extern void __aeabi_memset4(void); ++extern void __aeabi_memset8(void); ++extern void __aeabi_memset(void); ++extern void __vsprintf_chk(void); ++extern void usleep(void); ++extern void setsockopt(void); ++extern void __read_chk(void); ++extern void opendir(void); ++extern void mmap(void); ++extern void pthread_rwlock_rdlock(void); +extern void __memmove_chk(void); -+// GCC stuff -+extern void __addtf3(void); -+extern void __divtf3(void); -+extern void __extenddftf2(void); -+extern void __fixtfsi(void); -+extern void __floatditf(void); -+extern void __floatsitf(void); -+extern void __getf2(void); -+extern void __gttf2(void); -+extern void __lttf2(void); -+extern void __multf3(void); -+extern void __subtf3(void); -+extern void __trunctfdf2(void); ++extern void localtime_r(void); ++extern void getsockopt(void); ++extern void getnameinfo(void); ++extern void getentropy(void); ++extern void clock_getres(void); ++extern void __aeabi_d2lz(void); ++extern void __aeabi_l2d(void); ++extern void __aeabi_d2ulz(void); ++extern void syscall(void); ++extern void shutdown(void); ++extern void pthread_rwlock_wrlock(void); ++extern void mprotect(void); ++extern void gettimeofday(void); ++extern void gethostbyname(void); ++extern void gai_strerror(void); ++extern void fsync(void); ++extern void connect(void); ++extern void closedir(void); ++extern void bind(void); ++extern void sleep(void); ++extern void pthread_rwlock_unlock(void); ++extern void __open_2(void); ++extern void mlock(void); ++extern void listen(void); ++extern void freeaddrinfo(void); ++extern void clock(void); ++extern void __aeabi_ul2d(void); ++extern void accept(void); ++extern void strftime(void); ++extern void pthread_rwlock_destroy(void); ++extern void madvise(void); ++extern void getsockname(void); ++extern void getaddrinfo(void); ++extern void sigaction(void); ++extern void pthread_once(void); ++extern void munmap(void); ++extern void __FD_SET_chk(void); ++extern void __cmsg_nxthdr(void); ++extern void pthread_key_create(void); ++extern void select(void); ++extern void sendmsg(void); ++extern void signal(void); ++extern void pthread_getspecific(void); ++extern void pthread_setspecific(void); ++extern void munlock(void); ++extern void pthread_key_delete(void); ++extern void pthread_key_create(void); ++extern void pthread_mutexattr_init(void); ++extern void pthread_self(void); ++extern void pthread_mutexattr_settype(void); ++extern void pthread_equal(void); ++extern void pthread_mutex_init(void); ++extern void pthread_mutexattr_destroy(void); ++extern void pthread_mutex_destroy(void); ++extern void pthread_mutex_lock(void); ++extern void pthread_mutex_trylock(void); ++extern void pthread_mutex_unlock(void); ++extern void utimes(void); ++extern void pthread_join(void); ++extern void __aeabi_l2f(void); ++extern void pthread_create(void); ++extern void localtime(void); ++extern void getcwd(void); ++extern void fchmod(void); ++extern void mkdir(void); ++extern void rmdir(void); ++extern void fchown(void); ++extern void geteuid(void); ++extern void mmap64(void); ++extern void mremap(void); ++extern void readlink(void); + -+#define MISSING_FUN(f) void (f)(void) { printf("Unknown call to `%s'\n", #f); exit(1); } ++#define MISSING_FUN(f) void (f)(void) { printf("Unknown call to %s\n", #f); exit(1); } + +MISSING_FUN(c_format_unix_time) +MISSING_FUN(c_format_unix_time_gmt) @@ -104,218 +204,247 @@ index 0000000..d447895 +typedef mode_t (*umask_func_ptr_t)(mode_t); + +RtsSymbolVal my_iserv_syms[] = { -+ // arpa/inet.h -+ SYM(htons), -+ SYM(ntohs), -+ SYM(htonl), -+ SYM(ntohl), -+ // sys/random.h -+ SYM(getentropy), -+ SYM(getrandom), -+ // sys/auxv.h -+ SYM(getauxval), -+ // sys/mman.h -+ SYM(madvise),SYM(mlock),SYM(mmap),SYM(mprotect),SYM(munmap), -+ SYM(mremap), -+ SYM(munlock), -+ // select.h -+ SYM(__FD_SET_chk), -+ // sys/socket -+ SYM(accept),SYM(bind),SYM(connect),SYM(getsockopt),SYM(listen), -+ SYM(setsockopt),SYM(socket),SYM(getsockname),SYM(select), -+ SYM(getpeername),SYM(__cmsg_nxthdr),SYM(recv),SYM(recvfrom), -+ SYM(recvmsg),SYM(send),SYM(sendmsg),SYM(sendto),SYM(writev), -+ SYM(accept4), -+ // pthread.h -+ SYM(pthread_equal),SYM(pthread_getspecific),SYM(pthread_key_create), -+ SYM(pthread_key_delete),SYM(pthread_once),SYM(pthread_rwlock_destroy), -+ SYM(pthread_rwlock_init),SYM(pthread_rwlock_rdlock),SYM(pthread_rwlock_unlock), -+ SYM(pthread_rwlock_wrlock),SYM(pthread_self),SYM(pthread_setspecific), -+ SYM(pthread_create),SYM(pthread_join),SYM(pthread_mutex_destroy), -+ SYM(pthread_mutex_init),SYM(pthread_mutex_lock),SYM(pthread_mutex_trylock), -+ SYM(pthread_mutex_unlock),SYM(pthread_mutexattr_destroy), -+ SYM(pthread_mutexattr_init),SYM(pthread_mutexattr_settype), -+ // chk.h -+ SYM(__read_chk),SYM(__write_chk), -+ // netdb.h -+ SYM(freeaddrinfo),SYM(gai_strerror),SYM(getaddrinfo),SYM(getnameinfo), -+ SYM(gethostbyname), -+ // dirent.h -+ SYM(readdir_r),SYM(readdir), -+ SYM(opendir),SYM(closedir), -+ // time.h -+ SYM(clock),SYM(gmtime_r), -+ // sys/time.h -+ SYM(gettimeofday),SYM(clock_getres),SYM(clock_gettime),SYM(localtime_r),SYM(tzset), -+ // unistd.h -+ SYM(readlink), -+ SYM(rename), -+ SYM(rmdir), -+ SYM(chown), -+ SYM(realpath), -+ SYM(fchdir), -+ SYM(fdopendir), -+ SYM(rewinddir), -+ SYM(futimens),SYM(futimes),SYM(lutimes), -+ SYM(mknod), -+ SYM(lchown), -+ SYM(symlink), -+ SYM(endgrent),SYM(endpwent), -+ SYM(pathconf), -+ SYM(truncate), -+ SYM(utimensat), -+ SYM(statx), -+ SYM(seekdir), -+ SYM(telldir), -+ SYM(clearenv), -+ SYM(chdir), -+ SYM(sleep), -+ SYM(stdout), -+ SYM(strftime), -+ SYM(utimes), -+ SYM(setenv), -+ SYM(fpathconf), -+ SYM(exit), -+ SYM(environ), -+ SYM(ftruncate), ++ SYM(strlen), ++ SYM(__aeabi_idiv), ++ SYM(__aeabi_idivmod), ++ SYM(__aeabi_memcpy), ++ SYM(__aeabi_memclr), ++ SYM(__aeabi_memclr4), ++ SYM(__aeabi_ldivmod), ++ SYM(__aeabi_memcpy4), ++ SYM(__aeabi_memmove), ++ SYM(__aeabi_memset4), ++ SYM(__aeabi_uidiv), ++ SYM(__aeabi_uidivmod), ++ SYM(__aeabi_uldivmod), ++ SYM(calloc), ++ SYM(malloc), ++ SYM(free), ++ SYM(realloc), ++ SYM(abort), ++ SYM(close), ++ SYM(epoll_wait), ++ SYM(__errno), ++ SYM(eventfd_write), ++ SYM(expf), ++ SYM(fprintf), + SYM(getenv), -+ SYM(putenv), -+ SYM(unsetenv), -+ SYM(read), -+ SYM(write), ++ SYM(getpid), ++ SYM(ioctl), + SYM(isatty), ++ SYM(memcmp), ++ SYM(poll), ++ SYM(raise), ++ SYM(strcmp), ++ SYM(strerror), ++ SYM(unsetenv), ++ SYM(waitpid), ++ SYM(dup2), ++ SYM(epoll_ctl), ++ SYM(ftruncate64), ++ SYM(ldexp), + SYM(link), ++ SYM(log1pf), ++ SYM(mbrtowc), + SYM(pipe), -+ SYM(unlink), -+ SYM(execv),SYM(execve),SYM(execvp),SYM(execvpe), -+ SYM(syscall),SYM(sysconf), -+ // errno.h -+ SYM(__errno), -+ // math.h -+ SYM(sinhf), SYM(sinh), SYM(sinf), SYM(sin), -+ SYM(coshf), SYM(cosh), SYM(cosf), SYM(cos), -+ SYM(atanhf), SYM(atanh), SYM(atanf), SYM(atan), -+ SYM(asinhf), SYM(asinh), SYM(asinf), SYM(asin), -+ SYM(acoshf), SYM(acosh), SYM(acosf), SYM(acos), -+ SYM(log1pf), SYM(log1p), SYM(logf), SYM(log), -+ SYM(expm1f), SYM(expm1), -+ SYM(expf), SYM(exp), -+ SYM(ldexp), -+ SYM(powf), SYM(pow), -+ SYM(sqrtf), SYM(sqrt), -+ SYM(tanhf), SYM(tanh), SYM(tanf), SYM(tan), -+ // assert.h ++ SYM(putenv), ++ SYM(sigprocmask), ++ SYM(stderr), + SYM(__assert2), -+ // signal.h -+ SYM(signal),SYM(sigaction), -+ SYM(raise), SYM(sigaddset), SYM(sigemptyset), SYM(sigprocmask), -+ // sys/eventfd.h -+ SYM(eventfd), SYM(eventfd_write), -+ // sys/stat.h ++ SYM(dup), ++ SYM(epoll_create), ++ SYM(eventfd), ++ SYM(expm1f), ++ SYM(fork), ++ SYM(sigaddset), ++ SYM(stat), ++ SYM(wcrtomb), ++ SYM(__ctype_get_mb_cur_max), + SYM(fstat), ++ SYM(logf), ++ SYM(sigemptyset), ++ SYM(unlink), ++ SYM(creat), + SYM(lstat), -+ SYM(stat), -+ SYM(chmod), + SYM(mkfifo), -+ // SYM(umask), -+ { "umask", (umask_func_ptr_t)(&umask), STRENGTH_NORMAL, 1 }, -+ // sys/wait.h -+ SYM(waitpid), -+ // sym/epoll.h -+ SYM(epoll_create), SYM(epoll_ctl), SYM(epoll_wait), -+ // poll.h -+ SYM(poll), -+ // fcntl.h -+ SYM(open), SYM(creat), SYM(fcntl), SYM(ioctl), -+ SYM(openat),SYM(__open_2), -+ // string.h -+ SYM(strerror), -+ SYM(strcmp), -+ SYM(memchr),SYM(strcpy),SYM(strchr),SYM(strncpy),SYM(strrchr), -+ SYM(strcat),SYM(strncmp),SYM(strdup), -+ SYM(strtoul),SYM(strspn),SYM(strtol),SYM(strstr),SYM(strcspn), -+ SYM(__strncpy_chk2),SYM(__memcpy_chk), -+ // ctype.h -+ SYM(__ctype_get_mb_cur_max), -+ // wchar.h -+ SYM(mbrtowc), SYM(wcrtomb), -+ // stdlib.h + SYM(qsort), -+ // unistd.h -+ SYM(access), SYM(close), SYM(dup), SYM(dup2), SYM(fork), SYM(getpid), -+ SYM(lseek), -+ // utime.h -+ SYM(utime),SYM(time), -+ // ... -+ SYM(fileno), -+ SYM(__vsprintf_chk), -+ SYM(__strlen_chk), -+ SYM(__strchr_chk), ++ SYM(sinf), ++ SYM(chmod), ++ SYM(cosf), ++ SYM(fcntl), ++ SYM(open), ++ SYM(access), ++ SYM(environ), ++ SYM(tanf), ++ SYM(utime), ++ SYM(asinf), ++ SYM(lseek64), ++ SYM(umask), ++ SYM(acosf), ++ SYM(write), ++ SYM(atanf), ++ SYM(read), ++ SYM(sinhf), ++ SYM(coshf), ++ SYM(tanhf), ++ SYM(asinhf), ++ SYM(acoshf), ++ SYM(atanhf), ++ SYM(powf), ++ SYM(exp), ++ SYM(log1p), ++ SYM(expm1), ++ SYM(log), ++ SYM(sin), ++ SYM(cos), ++ SYM(tan), ++ SYM(asin), ++ SYM(acos), ++ SYM(atan), ++ SYM(sinh), ++ SYM(cosh), ++ SYM(tanh), ++ SYM(asinh), ++ SYM(acosh), ++ SYM(atanh), ++ SYM(pow), ++ SYM(__aeabi_memclr8), ++ SYM(__aeabi_memcpy8), ++ SYM(__aeabi_memmove4), ++ SYM(__aeabi_memset), ++ SYM(__aeabi_memset8), ++ SYM(clock_gettime), ++ SYM(fopen), ++ SYM(fwrite), ++ SYM(getauxval), ++ SYM(gmtime_r), ++ SYM(memchr), ++ SYM(__memcpy_chk), ++ SYM(memset), + SYM(__memset_chk), -+ SYM(__memmove_chk), ++ SYM(pthread_rwlock_init), ++ SYM(readdir), ++ SYM(socket), + SYM(__stack_chk_fail), -+ SYM(memmove), -+ SYM(memcmp), -+ SYM(memcpy), -+ SYM(memset), -+ SYM(stderr), -+ SYM(realloc), -+ SYM(calloc), -+ SYM(malloc), -+ SYM(free), -+ SYM(fprintf), ++ SYM(__stack_chk_guard), ++ SYM(strchr), ++ SYM(__strchr_chk), ++ SYM(strcpy), ++ SYM(strdup), ++ SYM(__strlen_chk), ++ SYM(strncmp), ++ SYM(strncpy), ++ SYM(__strncpy_chk2), ++ SYM(strrchr), ++ SYM(strspn), ++ SYM(strstr), ++ SYM(strtoul), ++ SYM(sysconf), ++ SYM(time), ++ SYM(tzset), ++ SYM(uname), + SYM(vfprintf), -+ SYM(fopen), SYM(fclose), -+ SYM(getegid),SYM(getgid), -+ SYM(getpwent), -+ SYM(getgrent), -+ SYM(getgroups), -+ SYM(getlogin), -+ SYM(getuid), -+ SYM(getgrgid_r),SYM(getgrnam_r),SYM(getpwnam_r),SYM(getpwuid_r), -+ SYM(setegid),SYM(seteuid),SYM(setgid),SYM(setgrent),SYM(setgroups), -+ SYM(setpwent),SYM(setuid), ++ SYM(__write_chk), ++ SYM(__aeabi_d2lz), ++ SYM(__aeabi_l2d), ++ SYM(atexit), ++ SYM(atoi), ++ SYM(clock_getres), ++ SYM(fclose), ++ SYM(fileno), + SYM(fread), -+ SYM(abort), -+ SYM(strlen), -+ SYM(fwrite), -+ SYM(feof), -+ SYM(ferror), -+ SYM(fflush), -+ SYM(fgets),SYM(fputc),SYM(fputs), -+ SYM(fseek),SYM(ftell), ++ SYM(fseek), ++ SYM(getentropy), ++ SYM(getnameinfo), ++ SYM(getsockopt), ++ SYM(localtime_r), ++ SYM(__memmove_chk), ++ SYM(mmap), ++ SYM(opendir), ++ SYM(pthread_rwlock_rdlock), ++ SYM(__read_chk), ++ SYM(setsockopt), + SYM(sscanf), ++ SYM(strcspn), ++ SYM(strtok), ++ SYM(strtol), ++ SYM(usleep), ++ SYM(__vsprintf_chk), ++ SYM(__aeabi_d2ulz), ++ SYM(bind), ++ SYM(closedir), ++ SYM(connect), ++ SYM(ferror), ++ SYM(fsync), ++ SYM(ftell), ++ SYM(gai_strerror), ++ SYM(gethostbyname), ++ SYM(gettimeofday), ++ SYM(mprotect), ++ SYM(pthread_rwlock_wrlock), + SYM(shutdown), -+ SYM(atoi), + SYM(stdin), -+ SYM(atexit), -+ SYM(usleep), ++ SYM(syscall), ++ SYM(accept), ++ SYM(__aeabi_ul2d), ++ SYM(clock), ++ SYM(fgets), ++ SYM(fputs), ++ SYM(freeaddrinfo), ++ SYM(listen), ++ SYM(mlock), ++ SYM(__open_2), ++ SYM(pthread_rwlock_unlock), ++ SYM(sleep), ++ SYM(strcat), ++ SYM(feof), ++ SYM(fflush), ++ SYM(getaddrinfo), ++ SYM(getsockname), ++ SYM(madvise), ++ SYM(perror), ++ SYM(pthread_rwlock_destroy), ++ SYM(strftime), ++ SYM(__cmsg_nxthdr), ++ SYM(__FD_SET_chk), ++ SYM(fputc), ++ SYM(munmap), ++ SYM(pthread_once), ++ SYM(sigaction), ++ SYM(pthread_key_create), ++ SYM(select), ++ SYM(sendmsg), ++ SYM(signal), ++ SYM(stdout), ++ SYM(pthread_getspecific), ++ SYM(rename), ++ SYM(munlock), ++ SYM(pthread_setspecific), ++ SYM(pthread_key_delete), ++ SYM(pthread_mutexattr_init), ++ SYM(pthread_mutexattr_settype), ++ SYM(pthread_self), ++ SYM(pthread_equal), ++ SYM(pthread_mutex_init), ++ SYM(pthread_mutexattr_destroy), ++ SYM(pthread_mutex_destroy), ++ SYM(pthread_mutex_lock), ++ SYM(pthread_mutex_trylock), ++ SYM(pthread_mutex_unlock), ++ SYM(utimes), ++ SYM(pthread_join), ++ SYM(__aeabi_l2f), ++ SYM(pthread_create), ++ SYM(localtime), ++ SYM(getcwd), + SYM(fchmod), ++ SYM(mkdir), ++ SYM(rmdir), + SYM(fchown), -+ SYM(fsync), -+ SYM(getcwd), + SYM(geteuid), -+ SYM(localtime), -+ SYM(lseek64), -+ SYM(mkdir), -+ SYM(mktime), -+ SYM(fdopen), -+ SYM(c_format_unix_time), -+ SYM(c_format_unix_time_gmt), -+ SYM(c_parse_unix_time), -+ SYM(c_parse_unix_time_gmt), -+ SYM(__addtf3), -+ SYM(__divtf3), -+ SYM(__extenddftf2), -+ SYM(__fixtfsi), -+ SYM(__floatditf), -+ SYM(__floatsitf), -+ SYM(__getf2), -+ SYM(__gttf2), -+ SYM(__lttf2), -+ SYM(__multf3), -+ SYM(__subtf3), -+ SYM(__trunctfdf2), ++ SYM(mmap64), ++ SYM(mremap), ++ SYM(readlink), + { 0, 0, STRENGTH_NORMAL, 1 } /* sentinel */ +}; + @@ -324,14 +453,14 @@ index 0000000..d447895 +} \ No newline at end of file diff --git a/iserv-proxy.cabal b/iserv-proxy.cabal -index a0eeaeb..a146108 100644 +index eca2047..51a125b 100644 --- a/iserv-proxy.cabal +++ b/iserv-proxy.cabal -@@ -103,6 +103,7 @@ Executable iserv-proxy +@@ -104,6 +104,7 @@ Executable iserv-proxy-interpreter -- We need to pass -fkeep-cafs to ensure that the interpreter retains CAFs -- Iserv and GHC do something similar. ghc-options: -fkeep-cafs + c-sources: cbits/symbols.c Build-Depends: base >= 4 && < 5, iserv-proxy - + From 9b664106dc8d3cf82d01a9040e65a9776a5a7deb Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Thu, 16 Nov 2023 07:27:13 +0000 Subject: [PATCH 037/206] No symbol loading on darwin. The weak logic doesn't seem to work well there. --- overlays/bootstrap.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index c5ac836bda..21f06760ae 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -296,7 +296,8 @@ in { ++ final.lib.optional (versionAtLeast "9.0" && versionLessThan "9.8" && final.stdenv.targetPlatform.isMusl && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch ++ final.lib.optional (versionAtLeast "9.0" && versionLessThan "10.0" && final.stdenv.targetPlatform.is32bit) ./patches/ghc/ghc-9.6-32bit-cmm.patch # this one is to allow linking extra symbols from iserv. - ++ final.lib.optional (versionAtLeast "9.6.1" && versionLessThan"9.10" && (final.stdenv.targetPlatform.isAndroid || final.stdenv.targetPlatform.isAarch64 || final.stdenv.targetPlatform.is32bit)) ./patches/ghc/iserv-syms.patch + # This one will lead to segv's on darwin, when calling `strlen` during lookupStrHashTable. `strlen` ends up being called with 0x0. + ++ final.lib.optional (versionAtLeast "9.6.1" && versionLessThan"9.10" && (final.stdenv.targetPlatform.isAndroid || final.stdenv.targetPlatform.isLinux) && (final.stdenv.targetPlatform.isAarch64 || final.stdenv.targetPlatform.is32bit)) ./patches/ghc/iserv-syms.patch ++ final.lib.optional (versionAtLeast "9.4" && final.stdenv.targetPlatform.isWindows) ./patches/ghc/ghc-9.6-fix-code-symbol-jumps.patch ++ final.lib.optional (versionAtLeast "9.6.3" && versionLessThan "9.10" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/ghc-9.6-iog.patch ++ final.lib.optional (versionAtLeast "9.6" && versionLessThan "9.12" && final.stdenv.targetPlatform.is32bit) ./patches/ghc/ghc-9.6-genapply-cross-arch.patch From 56ab95e5f84dd3974d3f9483267e6fde01d44099 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Tue, 28 Nov 2023 09:28:20 +0000 Subject: [PATCH 038/206] all ghc c files apple-a7 --- compiler/ghc/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 0336b1cb1a..a29c7a92c1 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -332,7 +332,8 @@ let # iPhones/iPads/... won't understand the compiled code, as the compiler will emit LDSETALH # FIXME: we should have iOS as an argument to this derivation, and then make this, as well as # disableLargeAddress space conditional on iOS = true. - + lib.optionalString (stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64) " '*.rts.ghc.c.opts += -optc-mcpu=apple-a7 -optc-march=armv8-a+norcpc'" + + lib.optionalString (stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64) + " '*.*.ghc.c.opts += -optc-mcpu=apple-a7 -optc-march=armv8-a+norcpc'" # For GHC versions in the 9.x range that don't support the +native_bignum flavour transformer yet + lib.optionalString ((enableNativeBignum && !hadrianHasNativeBignumFlavour)) " --bignum=native" From 8b72989fa730a1f16bd7908ffc0e43b3fa3cb42f Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Sat, 20 Jan 2024 07:54:35 +0000 Subject: [PATCH 039/206] Drop duplicate patch --- overlays/bootstrap.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 21f06760ae..5bd1b5166b 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -269,7 +269,6 @@ in { ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch32) ./patches/ghc/libc-memory-symbols-armv7a.patch ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/libc-memory-symbols.patch ++ final.lib.optional (versionAtLeast "8.10.6" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAndroid) ./patches/ghc/android-base-needs-iconv.patch - ++ final.lib.optional (versionAtLeast "8.10" && versionLessThan "9.4" && final.stdenv.targetPlatform != final.stdenv.hostPlatform) ./patches/ghc/ghc-make-stage-1-lib-ghc.patch ++ final.lib.optional (versionAtLeast "8.10" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/ghc-8.10-better-symbol-addr-debug.patch ++ final.lib.optional (versionAtLeast "8.10" && versionLessThan "9.0" && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/ghc-8.10-aarch64-handle-none-rela.patch ++ final.lib.optional (versionAtLeast "9.0" && final.stdenv.targetPlatform.isAarch64) ./patches/ghc/ghc-9.0-better-symbol-addr-debug.patch From d0c35e75cbbc6858770af42ac32b0b85495fbd71 Mon Sep 17 00:00:00 2001 From: Moritz Angermann Date: Sun, 21 Jan 2024 10:38:20 +0000 Subject: [PATCH 040/206] Fixup compilers --- overlays/bootstrap.nix | 1 - overlays/linux-cross.nix | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 5bd1b5166b..f59e734a52 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -249,7 +249,6 @@ in { ++ fromUntil "9.8.1" "9.8.2" ./patches/ghc/ghc-9.8-cabal-c-soures-fix.patch ++ fromUntil "9.6.3" "9.9" ./patches/ghc/ghc-9.6.3-Cabal-9384.patch ++ final.lib.optionals (final.stdenv.targetPlatform.isWindows) (fromUntil "9.4.1" "9.5" ./patches/ghc/ghc-9.4-hadrian-win-cross.patch) - ++ fromUntil "9.6.1" "9.8" ./patches/ghc/MR10116.patch ++ fromUntil "9.4.1" "9.6" ./patches/ghc/hadrian-build-deriveConstants-genprimopcode-ghc94.patch ++ final.lib.optional (versionAtLeast "8.10" && versionLessThan "9.4" && final.stdenv.targetPlatform != final.stdenv.hostPlatform) ./patches/ghc/ghc-make-stage-1-lib-ghc.patch diff --git a/overlays/linux-cross.nix b/overlays/linux-cross.nix index 720ae3737f..c4068c98f0 100644 --- a/overlays/linux-cross.nix +++ b/overlays/linux-cross.nix @@ -50,9 +50,9 @@ let (>&2 echo "---> Starting ${interpreter.exeName} on port $PORT") ${qemu}/bin/qemu-${qemuSuffix} ${interpreter.override ({ - patches = [ ./patches/iserv-proxy-keep-cafs.patch ] - ++ lib.optional (hostPlatform.isAndroid && hostPlatform.isAarch32) ./patches/iserv-proxy-interpreter-9.3-android32.patch - ++ lib.optional (hostPlatform.isAndroid && hostPlatform.isAarch64) ./patches/iserv-proxy-interpreter-9.3-android.patch + patches = lib.optional (builtins.compareVersions interpreter.version "9.0" > 0) ./patches/iserv-proxy-keep-cafs.patch + ++ lib.optional (builtins.compareVersions interpreter.version "9.0" > 0 && hostPlatform.isAndroid && hostPlatform.isAarch32) ./patches/iserv-proxy-interpreter-9.3-android32.patch + ++ lib.optional (builtins.compareVersions interpreter.version "9.0" > 0 && hostPlatform.isAndroid && hostPlatform.isAarch64) ./patches/iserv-proxy-interpreter-9.3-android.patch ; } // lib.optionalAttrs hostPlatform.isAndroid { setupBuildFlags = ["--ghc-option=-optl-static" ] ++ lib.optional hostPlatform.isAarch32 "--ghc-option=-optl-no-pie"; From ee324323006afeebcb71d5838b7a11f8336a7a03 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 17 Sep 2024 22:15:02 +1200 Subject: [PATCH 041/206] Update nixpkgs pins --- flake.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/flake.lock b/flake.lock index b265008ceb..2b032447ed 100644 --- a/flake.lock +++ b/flake.lock @@ -525,11 +525,11 @@ }, "nixpkgs-2405": { "locked": { - "lastModified": 1720122915, - "narHash": "sha256-Nby8WWxj0elBu1xuRaUcRjPi/rU3xVbkAt2kj4QwX2U=", + "lastModified": 1726447378, + "narHash": "sha256-2yV8nmYE1p9lfmLHhOCbYwQC/W8WYfGQABoGzJOb1JQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "835cf2d3f37989c5db6585a28de967a667a75fb1", + "rev": "086b448a5d54fd117f4dc2dee55c9f0ff461bdc1", "type": "github" }, "original": { @@ -557,11 +557,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1720181791, - "narHash": "sha256-i4vJL12/AdyuQuviMMd1Hk2tsGt02hDNhA0Zj1m16N8=", + "lastModified": 1726481836, + "narHash": "sha256-MWTBH4dd5zIz2iatDb8IkqSjIeFum9jAqkFxgHLdzO4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "4284c2b73c8bce4b46a6adf23e16d9e2ec8da4bb", + "rev": "20f9370d5f588fb8c72e844c54511cab054b5f40", "type": "github" }, "original": { From 3d7f4c4aff8e7bd17368a2a829a6b80c97bd3d2b Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 18 Sep 2024 01:46:23 +1200 Subject: [PATCH 042/206] ifdLevel 0 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 554c898495..6905cb4a6d 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 3; + ifdLevel = 0; runningHydraEvalTest = false; compiler = "ghc928"; config = import ./config.nix; From d7dac30916fd1950640639c40f71ad9a70dc03f9 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 18 Sep 2024 15:25:02 +1200 Subject: [PATCH 043/206] Simplify bootPkgs --- overlays/bootstrap.nix | 40 ++++++++-------------------------------- 1 file changed, 8 insertions(+), 32 deletions(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 84601b2b48..fbc931e845 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -41,9 +41,7 @@ in { compiler = let bootPkgs = { ghc = final.buildPackages.buildPackages.haskell-nix.bootstrap.compiler."${buildBootstrapper.compilerNixName}"; - alex = final.haskell-nix.bootstrap.packages.alex-unchecked; - happy = final.haskell-nix.bootstrap.packages.happy-unchecked; - hscolour = final.haskell-nix.bootstrap.packages.hscolour-unchecked; + inherit (final.haskell-nix.bootstrap.packages) alex happy hscolour; }; bootPkgsGhc94 = bootPkgs // { alex = final.buildPackages.haskell-nix.tool "ghc902" "alex" { @@ -998,50 +996,28 @@ in { # hackage with haskell.nix. For alex and happy we # need to use the boot strap compiler as we need them # to build ghcs from source. - # guardMaterializationChecks is used here so we - # can turn off materialization checks when - # building ghc itself (since GHC is a dependency - # of the materialization check it would cause - # infinite recursion). - alex-tool = args: final.haskell-nix.tool buildBootstrapper.compilerNixName "alex" ({config, pkgs, ...}: { + alex = final.haskell-nix.tool buildBootstrapper.compilerNixName "alex" ({config, pkgs, ...}: { compilerSelection = p: p.haskell.compiler; - evalPackages = pkgs.buildPackages; version = "3.2.4"; inherit ghcOverride index-state; materialized = ../materialized/bootstrap + "/${buildBootstrapper.compilerNixName}/alex"; - modules = [{ reinstallableLibGhc = false; }]; - nix-tools = config.evalPackages.haskell-nix.nix-tools; - } // args); - alex = final.haskell-nix.bootstrap.packages.alex-tool {}; - alex-unchecked = final.haskell-nix.bootstrap.packages.alex-tool { checkMaterialization = false; }; - happy-tool = { version ? "1.19.12", ... }@args: final.haskell-nix.tool buildBootstrapper.compilerNixName "happy" + }); + happy = final.haskell-nix.tool buildBootstrapper.compilerNixName "happy" ({config, pkgs, ...}: { compilerSelection = p: p.haskell.compiler; - evalPackages = pkgs.buildPackages; + version = "1.19.12"; inherit version ghcOverride index-state; materialized = ../materialized/bootstrap + "/${buildBootstrapper.compilerNixName}/happy-${version}"; - modules = [{ reinstallableLibGhc = false; }]; - nix-tools = config.evalPackages.haskell-nix.nix-tools; - } // args); - happy = final.haskell-nix.bootstrap.packages.happy-tool {}; - happy-unchecked = final.haskell-nix.bootstrap.packages.happy-tool { checkMaterialization = false; }; - # Older version needed when building ghc 8.6.5 - happy-old = final.haskell-nix.bootstrap.packages.happy-tool { version = "1.19.11"; }; - happy-old-unchecked = final.haskell-nix.bootstrap.packages.happy-tool { version = "1.19.11"; checkMaterialization = false; }; - hscolour-tool = args: (final.haskell-nix.hackage-package + }); + hscolour = (final.haskell-nix.hackage-package ({config, pkgs, ...}: { compilerSelection = p: p.haskell.compiler; - evalPackages = pkgs.buildPackages; compiler-nix-name = buildBootstrapper.compilerNixName; name = "hscolour"; version = "1.24.4"; inherit ghcOverride index-state; materialized = ../materialized/bootstrap + "/${buildBootstrapper.compilerNixName}/hscolour"; - modules = [{ reinstallableLibGhc = false; }]; - nix-tools = config.evalPackages.haskell-nix.nix-tools; - } // args)).getComponent "exe:HsColour"; - hscolour = final.haskell-nix.bootstrap.packages.hscolour-tool {}; - hscolour-unchecked = final.haskell-nix.bootstrap.packages.hscolour-tool { checkMaterialization = false; }; + })).getComponent "exe:HsColour"; }; }; }; From 2ddccc0aeef17b7df1e8a008942cb1d1aa6e1406 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 18 Sep 2024 15:25:21 +1200 Subject: [PATCH 044/206] Update materialized files --- materialized/alex-3.2.7.1/plan.json | 1 + .../bootstrap/ghc8107/alex/.plan.nix/alex.nix | 22 ++--- .../bootstrap/ghc8107/alex/default.nix | 88 ++++++++++--------- materialized/bootstrap/ghc8107/alex/plan.json | 1 + .../ghc8107/happy-1.19.12/.plan.nix/happy.nix | 20 ++--- .../ghc8107/happy-1.19.12/default.nix | 86 ++++++++---------- .../bootstrap/ghc8107/happy-1.19.12/plan.json | 1 + .../ghc8107/hscolour/.plan.nix/hscolour.nix | 14 +-- .../bootstrap/ghc8107/hscolour/default.nix | 53 ++++++----- .../bootstrap/ghc8107/hscolour/plan.json | 1 + .../ghc948/bytestring.nix | 65 -------------- .../ghc-boot-packages-nix/ghc948/deepseq.nix | 45 ---------- .../ghc-boot-packages-nix/ghc948/pretty.nix | 56 ------------ .../ghc982-ghcjs/bytestring.nix | 66 -------------- .../ghc982-ghcjs/deepseq.nix | 45 ---------- .../ghc982-ghcjs/parsec.nix | 77 ---------------- .../ghc982-ghcjs/pretty.nix | 56 ------------ .../ghc982/bytestring.nix | 66 -------------- .../ghc-boot-packages-nix/ghc982/deepseq.nix | 45 ---------- .../ghc-boot-packages-nix/ghc982/parsec.nix | 77 ---------------- .../ghc-boot-packages-nix/ghc982/pretty.nix | 56 ------------ .../ghc964/hadrian-ghc910/hadrian/default.nix | 29 ++++++ materialized/ghc964/hadrian-ghc910/plan.json | 1 + .../ghc964/hadrian-ghc94/hadrian/default.nix | 19 ++++ materialized/ghc964/hadrian-ghc94/plan.json | 1 + .../ghc964/hadrian-ghc96/hadrian/default.nix | 27 ++++++ materialized/ghc964/hadrian-ghc96/plan.json | 1 + .../ghc964/hadrian-ghc98/hadrian/default.nix | 27 ++++++ materialized/ghc964/hadrian-ghc98/plan.json | 1 + materialized/ghcjs/alex/ghc8107/plan.json | 1 + materialized/ghcjs/cabal/ghc8107/plan.json | 1 + materialized/ghcjs/ghc8107/plan.json | 2 +- materialized/ghcjs/happy/ghc8107/plan.json | 1 + materialized/happy-1.20.0/plan.json | 1 + 34 files changed, 259 insertions(+), 794 deletions(-) create mode 100644 materialized/alex-3.2.7.1/plan.json create mode 100644 materialized/bootstrap/ghc8107/alex/plan.json create mode 100644 materialized/bootstrap/ghc8107/happy-1.19.12/plan.json create mode 100644 materialized/bootstrap/ghc8107/hscolour/plan.json delete mode 100644 materialized/ghc-boot-packages-nix/ghc948/bytestring.nix delete mode 100644 materialized/ghc-boot-packages-nix/ghc948/deepseq.nix delete mode 100644 materialized/ghc-boot-packages-nix/ghc948/pretty.nix delete mode 100644 materialized/ghc-boot-packages-nix/ghc982-ghcjs/bytestring.nix delete mode 100644 materialized/ghc-boot-packages-nix/ghc982-ghcjs/deepseq.nix delete mode 100644 materialized/ghc-boot-packages-nix/ghc982-ghcjs/parsec.nix delete mode 100644 materialized/ghc-boot-packages-nix/ghc982-ghcjs/pretty.nix delete mode 100644 materialized/ghc-boot-packages-nix/ghc982/bytestring.nix delete mode 100644 materialized/ghc-boot-packages-nix/ghc982/deepseq.nix delete mode 100644 materialized/ghc-boot-packages-nix/ghc982/parsec.nix delete mode 100644 materialized/ghc-boot-packages-nix/ghc982/pretty.nix create mode 100644 materialized/ghc964/hadrian-ghc910/plan.json create mode 100644 materialized/ghc964/hadrian-ghc94/plan.json create mode 100644 materialized/ghc964/hadrian-ghc96/plan.json create mode 100644 materialized/ghc964/hadrian-ghc98/plan.json create mode 100644 materialized/ghcjs/alex/ghc8107/plan.json create mode 100644 materialized/ghcjs/cabal/ghc8107/plan.json create mode 100644 materialized/ghcjs/happy/ghc8107/plan.json create mode 100644 materialized/happy-1.20.0/plan.json diff --git a/materialized/alex-3.2.7.1/plan.json b/materialized/alex-3.2.7.1/plan.json new file mode 100644 index 0000000000..b5534b6c56 --- /dev/null +++ b/materialized/alex-3.2.7.1/plan.json @@ -0,0 +1 @@ +{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-9.0.2","os":"linux","arch":"x86_64","install-plan":[{"type":"configured","id":"alex-3.2.7.1-inplace-alex","pkg-name":"alex","pkg-version":"3.2.7.1","flags":{},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-9.0.2/alex-3.2.7.1/x/alex","build-info":"./dist-newstyle/build/x86_64-linux/ghc-9.0.2/alex-3.2.7.1/x/alex/build-info.json","depends":["array-0.5.4.0","base-4.15.1.0","containers-0.6.4.1","directory-1.3.6.2"],"exe-depends":[],"component-name":"exe:alex","bin-file":"./dist-newstyle/build/x86_64-linux/ghc-9.0.2/alex-3.2.7.1/x/alex/build/alex/alex"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.15.1.0"]},{"type":"pre-existing","id":"base-4.15.1.0","pkg-name":"base","pkg-version":"4.15.1.0","depends":["ghc-bignum-1.1","ghc-prim-0.7.0"]},{"type":"pre-existing","id":"bytestring-0.10.12.1","pkg-name":"bytestring","pkg-version":"0.10.12.1","depends":["base-4.15.1.0","deepseq-1.4.5.0","ghc-bignum-1.1","ghc-prim-0.7.0","integer-gmp-1.1"]},{"type":"pre-existing","id":"containers-0.6.4.1","pkg-name":"containers","pkg-version":"0.6.4.1","depends":["array-0.5.4.0","base-4.15.1.0","deepseq-1.4.5.0"]},{"type":"pre-existing","id":"deepseq-1.4.5.0","pkg-name":"deepseq","pkg-version":"1.4.5.0","depends":["array-0.5.4.0","base-4.15.1.0","ghc-prim-0.7.0"]},{"type":"pre-existing","id":"directory-1.3.6.2","pkg-name":"directory","pkg-version":"1.3.6.2","depends":["base-4.15.1.0","filepath-1.4.2.1","time-1.9.3","unix-2.7.2.2"]},{"type":"pre-existing","id":"filepath-1.4.2.1","pkg-name":"filepath","pkg-version":"1.4.2.1","depends":["base-4.15.1.0"]},{"type":"pre-existing","id":"ghc-bignum-1.1","pkg-name":"ghc-bignum","pkg-version":"1.1","depends":["ghc-prim-0.7.0"]},{"type":"pre-existing","id":"ghc-prim-0.7.0","pkg-name":"ghc-prim","pkg-version":"0.7.0","depends":[]},{"type":"pre-existing","id":"integer-gmp-1.1","pkg-name":"integer-gmp","pkg-version":"1.1","depends":["base-4.15.1.0","ghc-bignum-1.1","ghc-prim-0.7.0"]},{"type":"pre-existing","id":"time-1.9.3","pkg-name":"time","pkg-version":"1.9.3","depends":["base-4.15.1.0","deepseq-1.4.5.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.15.1.0","bytestring-0.10.12.1","time-1.9.3"]}],"targets":[{"pkg-name":"alex","pkg-version":"3.2.7.1","component-name":"exe:alex","available":[{"id":"alex-3.2.7.1-inplace-alex","component-name":"exe:alex","build-by-default":true}]},{"pkg-name":"alex","pkg-version":"3.2.7.1","component-name":"test:tests","available":["TargetDisabledByUser"]},{"pkg-name":"array","pkg-version":"0.5.4.0","component-name":"lib","available":[{"id":"array-0.5.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base","pkg-version":"4.15.1.0","component-name":"lib","available":[{"id":"base-4.15.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"bytestring","pkg-version":"0.10.12.1","component-name":"lib","available":[{"id":"bytestring-0.10.12.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"containers","pkg-version":"0.6.4.1","component-name":"lib","available":[{"id":"containers-0.6.4.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"deepseq","pkg-version":"1.4.5.0","component-name":"lib","available":[{"id":"deepseq-1.4.5.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory","pkg-version":"1.3.6.2","component-name":"lib","available":[{"id":"directory-1.3.6.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"filepath","pkg-version":"1.4.2.1","component-name":"lib","available":[{"id":"filepath-1.4.2.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-bignum","pkg-version":"1.1","component-name":"lib","available":[{"id":"ghc-bignum-1.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-prim","pkg-version":"0.7.0","component-name":"lib","available":[{"id":"ghc-prim-0.7.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"integer-gmp","pkg-version":"1.1","component-name":"lib","available":[{"id":"integer-gmp-1.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"time","pkg-version":"1.9.3","component-name":"lib","available":[{"id":"time-1.9.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix","pkg-version":"2.7.2.2","component-name":"lib","available":[{"id":"unix-2.7.2.2","component-name":"lib","build-by-default":true}]}]} \ No newline at end of file diff --git a/materialized/bootstrap/ghc8107/alex/.plan.nix/alex.nix b/materialized/bootstrap/ghc8107/alex/.plan.nix/alex.nix index 5294056b9c..c388ddff87 100644 --- a/materialized/bootstrap/ghc8107/alex/.plan.nix/alex.nix +++ b/materialized/bootstrap/ghc8107/alex/.plan.nix/alex.nix @@ -41,7 +41,7 @@ "AlexWrapper-monadUserState" "AlexWrapper-monadUserState-bytestring" "AlexWrapper-gscan" - ]; + ]; extraSrcFiles = [ "CHANGELOG.md" "README.md" @@ -98,22 +98,22 @@ "tests/posn_typeclass_bytestring.x" "tests/strict_typeclass.x" "tests/unicode.x" - ]; + ]; extraTmpFiles = []; extraDocFiles = []; - }; + }; components = { exes = { "alex" = { depends = [ (hsPkgs."base" or (errorHandler.buildDepError "base")) - ] ++ (if flags.small_base + ] ++ (if flags.small_base then [ (hsPkgs."base" or (errorHandler.buildDepError "base")) (hsPkgs."array" or (errorHandler.buildDepError "array")) (hsPkgs."containers" or (errorHandler.buildDepError "containers")) (hsPkgs."directory" or (errorHandler.buildDepError "directory")) - ] + ] else [ (hsPkgs."base" or (errorHandler.buildDepError "base")) ]); buildable = true; modules = [ @@ -138,23 +138,23 @@ "Data/Ranged/Boundaries" "Data/Ranged/RangedSet" "Data/Ranged/Ranges" - ]; + ]; hsSourceDirs = [ "src" ]; mainPath = [ "Main.hs" ] ++ [ "" ]; - }; }; + }; tests = { "tests" = { depends = [ (hsPkgs."base" or (errorHandler.buildDepError "base")) (hsPkgs."process" or (errorHandler.buildDepError "process")) - ]; + ]; build-tools = [ (hsPkgs.pkgsBuildBuild.alex.components.exes.alex or (pkgs.pkgsBuildBuild.alex or (errorHandler.buildToolDepError "alex:alex"))) - ]; + ]; buildable = true; mainPath = [ "test.hs" ]; - }; }; }; - } // rec { src = (pkgs.lib).mkDefault ../.; } \ No newline at end of file + }; + } // rec { src = pkgs.lib.mkDefault ../.; } \ No newline at end of file diff --git a/materialized/bootstrap/ghc8107/alex/default.nix b/materialized/bootstrap/ghc8107/alex/default.nix index af9ebc4515..358d0e1ec0 100644 --- a/materialized/bootstrap/ghc8107/alex/default.nix +++ b/materialized/bootstrap/ghc8107/alex/default.nix @@ -2,68 +2,76 @@ pkgs = hackage: { packages = { - "ghc-prim".revision = (((hackage."ghc-prim")."0.6.1").revisions).default; - "array".revision = (((hackage."array")."0.5.4.0").revisions).default; - "integer-gmp".revision = (((hackage."integer-gmp")."1.0.3.0").revisions).default; - "process".revision = (((hackage."process")."1.6.13.2").revisions).default; - "base".revision = (((hackage."base")."4.14.3.0").revisions).default; - "rts".revision = (((hackage."rts")."1.0.1").revisions).default; - "time".revision = (((hackage."time")."1.9.3").revisions).default; - "unix".revision = (((hackage."unix")."2.7.2.2").revisions).default; - "bytestring".revision = (((hackage."bytestring")."0.10.12.0").revisions).default; - "containers".revision = (((hackage."containers")."0.6.5.1").revisions).default; - "directory".revision = (((hackage."directory")."1.3.6.0").revisions).default; - "filepath".revision = (((hackage."filepath")."1.4.2.1").revisions).default; - "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default; - }; + ghc-prim.revision = hackage.ghc-prim."0.6.1".revisions.default; + time.revision = hackage.time."1.9.3".revisions.default; + base.revision = hackage.base."4.14.3.0".revisions.default; + unix.revision = hackage.unix."2.7.2.2".revisions.default; + deepseq.revision = hackage.deepseq."1.4.4.0".revisions.default; + integer-gmp.revision = hackage.integer-gmp."1.0.3.0".revisions.default; + containers.revision = hackage.containers."0.6.5.1".revisions.default; + array.revision = hackage.array."0.5.4.0".revisions.default; + bytestring.revision = hackage.bytestring."0.10.12.0".revisions.default; + directory.revision = hackage.directory."1.3.6.0".revisions.default; + filepath.revision = hackage.filepath."1.4.2.1".revisions.default; + }; compiler = { version = "8.10.7"; nix-name = "ghc8107"; packages = { - "ghc-prim" = "0.6.1"; - "array" = "0.5.4.0"; - "integer-gmp" = "1.0.3.0"; - "process" = "1.6.13.2"; - "base" = "4.14.3.0"; - "rts" = "1.0.1"; - "time" = "1.9.3"; "unix" = "2.7.2.2"; + "filepath" = "1.4.2.1"; "bytestring" = "0.10.12.0"; "containers" = "0.6.5.1"; + "ghc-prim" = "0.6.1"; + "base" = "4.14.3.0"; + "time" = "1.9.3"; "directory" = "1.3.6.0"; - "filepath" = "1.4.2.1"; + "integer-gmp" = "1.0.3.0"; "deepseq" = "1.4.4.0"; - }; + "array" = "0.5.4.0"; }; }; + }; extras = hackage: { packages = { alex = ./.plan.nix/alex.nix; }; }; modules = [ + { + preExistingPkgs = [ + "ghc-prim" + "time" + "base" + "unix" + "deepseq" + "integer-gmp" + "containers" + "array" + "bytestring" + "directory" + "filepath" + ]; + } ({ lib, ... }: { packages = { "alex" = { flags = { "small_base" = lib.mkOverride 900 true; }; }; - }; - }) + }; + }) ({ lib, ... }: { packages = { + "directory".components.library.planned = lib.mkOverride 900 true; + "deepseq".components.library.planned = lib.mkOverride 900 true; + "base".components.library.planned = lib.mkOverride 900 true; + "integer-gmp".components.library.planned = lib.mkOverride 900 true; + "filepath".components.library.planned = lib.mkOverride 900 true; "containers".components.library.planned = lib.mkOverride 900 true; "ghc-prim".components.library.planned = lib.mkOverride 900 true; - "process".components.library.planned = lib.mkOverride 900 true; - "integer-gmp".components.library.planned = lib.mkOverride 900 true; - "array".components.library.planned = lib.mkOverride 900 true; "bytestring".components.library.planned = lib.mkOverride 900 true; - "unix".components.library.planned = lib.mkOverride 900 true; - "alex".components.exes."alex".planned = lib.mkOverride 900 true; - "base".components.library.planned = lib.mkOverride 900 true; - "rts".components.library.planned = lib.mkOverride 900 true; "time".components.library.planned = lib.mkOverride 900 true; - "deepseq".components.library.planned = lib.mkOverride 900 true; - "filepath".components.library.planned = lib.mkOverride 900 true; - "directory".components.library.planned = lib.mkOverride 900 true; - "alex".components.tests."tests".planned = lib.mkOverride 900 true; - }; - }) - ]; - } \ No newline at end of file + "alex".components.exes."alex".planned = lib.mkOverride 900 true; + "array".components.library.planned = lib.mkOverride 900 true; + "unix".components.library.planned = lib.mkOverride 900 true; + }; + }) + ]; +} \ No newline at end of file diff --git a/materialized/bootstrap/ghc8107/alex/plan.json b/materialized/bootstrap/ghc8107/alex/plan.json new file mode 100644 index 0000000000..2a03b0107d --- /dev/null +++ b/materialized/bootstrap/ghc8107/alex/plan.json @@ -0,0 +1 @@ +{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-8.10.7","os":"linux","arch":"x86_64","install-plan":[{"type":"configured","id":"alex-3.2.4-inplace-alex","pkg-name":"alex","pkg-version":"3.2.4","flags":{"small_base":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/alex-3.2.4/x/alex","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/alex-3.2.4/x/alex/build-info.json","depends":["array-0.5.4.0","base-4.14.3.0","containers-0.6.5.1","directory-1.3.6.0"],"exe-depends":[],"component-name":"exe:alex","bin-file":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/alex-3.2.4/x/alex/build/alex/alex"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.14.3.0"]},{"type":"pre-existing","id":"base-4.14.3.0","pkg-name":"base","pkg-version":"4.14.3.0","depends":["ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"pre-existing","id":"bytestring-0.10.12.0","pkg-name":"bytestring","pkg-version":"0.10.12.0","depends":["base-4.14.3.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.14.3.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"deepseq-1.4.4.0","pkg-name":"deepseq","pkg-version":"1.4.4.0","depends":["array-0.5.4.0","base-4.14.3.0","ghc-prim-0.6.1"]},{"type":"pre-existing","id":"directory-1.3.6.0","pkg-name":"directory","pkg-version":"1.3.6.0","depends":["base-4.14.3.0","filepath-1.4.2.1","time-1.9.3","unix-2.7.2.2"]},{"type":"pre-existing","id":"filepath-1.4.2.1","pkg-name":"filepath","pkg-version":"1.4.2.1","depends":["base-4.14.3.0"]},{"type":"pre-existing","id":"ghc-prim-0.6.1","pkg-name":"ghc-prim","pkg-version":"0.6.1","depends":[]},{"type":"pre-existing","id":"integer-gmp-1.0.3.0","pkg-name":"integer-gmp","pkg-version":"1.0.3.0","depends":["ghc-prim-0.6.1"]},{"type":"pre-existing","id":"time-1.9.3","pkg-name":"time","pkg-version":"1.9.3","depends":["base-4.14.3.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.14.3.0","bytestring-0.10.12.0","time-1.9.3"]}],"targets":[{"pkg-name":"alex","pkg-version":"3.2.4","component-name":"exe:alex","available":[{"id":"alex-3.2.4-inplace-alex","component-name":"exe:alex","build-by-default":true}]},{"pkg-name":"alex","pkg-version":"3.2.4","component-name":"test:tests","available":["TargetDisabledByUser"]},{"pkg-name":"array","pkg-version":"0.5.4.0","component-name":"lib","available":[{"id":"array-0.5.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base","pkg-version":"4.14.3.0","component-name":"lib","available":[{"id":"base-4.14.3.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"bytestring","pkg-version":"0.10.12.0","component-name":"lib","available":[{"id":"bytestring-0.10.12.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"containers","pkg-version":"0.6.5.1","component-name":"lib","available":[{"id":"containers-0.6.5.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"deepseq","pkg-version":"1.4.4.0","component-name":"lib","available":[{"id":"deepseq-1.4.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory","pkg-version":"1.3.6.0","component-name":"lib","available":[{"id":"directory-1.3.6.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"filepath","pkg-version":"1.4.2.1","component-name":"lib","available":[{"id":"filepath-1.4.2.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-prim","pkg-version":"0.6.1","component-name":"lib","available":[{"id":"ghc-prim-0.6.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"integer-gmp","pkg-version":"1.0.3.0","component-name":"lib","available":[{"id":"integer-gmp-1.0.3.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"time","pkg-version":"1.9.3","component-name":"lib","available":[{"id":"time-1.9.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix","pkg-version":"2.7.2.2","component-name":"lib","available":[{"id":"unix-2.7.2.2","component-name":"lib","build-by-default":true}]}]} \ No newline at end of file diff --git a/materialized/bootstrap/ghc8107/happy-1.19.12/.plan.nix/happy.nix b/materialized/bootstrap/ghc8107/happy-1.19.12/.plan.nix/happy.nix index 8a9ace8483..8c2e732857 100644 --- a/materialized/bootstrap/ghc8107/happy-1.19.12/.plan.nix/happy.nix +++ b/materialized/bootstrap/ghc8107/happy-1.19.12/.plan.nix/happy.nix @@ -39,7 +39,7 @@ "GLR_Lib" "GLR_Lib-ghc" "GLR_Lib-ghc-debug" - ]; + ]; extraSrcFiles = [ "ANNOUNCE" "CHANGES" @@ -145,10 +145,10 @@ "tests/typeclass_monad002.ly" "tests/typeclass_monad_lexer.y" "tests/rank2.y" - ]; + ]; extraTmpFiles = []; extraDocFiles = []; - }; + }; components = { exes = { "happy" = { @@ -157,7 +157,7 @@ (hsPkgs."array" or (errorHandler.buildDepError "array")) (hsPkgs."containers" or (errorHandler.buildDepError "containers")) (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - ]; + ]; buildable = true; modules = [ "Paths_happy" @@ -178,23 +178,23 @@ "AttrGrammarParser" "ParamRules" "PrettyGrammar" - ]; + ]; hsSourceDirs = [ "src" ]; mainPath = [ "Main.lhs" ]; - }; }; + }; tests = { "tests" = { depends = [ (hsPkgs."base" or (errorHandler.buildDepError "base")) (hsPkgs."process" or (errorHandler.buildDepError "process")) - ]; + ]; build-tools = [ (hsPkgs.pkgsBuildBuild.happy.components.exes.happy or (pkgs.pkgsBuildBuild.happy or (errorHandler.buildToolDepError "happy:happy"))) - ]; + ]; buildable = true; mainPath = [ "test.hs" ]; - }; }; }; - } // rec { src = (pkgs.lib).mkDefault ../.; } \ No newline at end of file + }; + } // rec { src = pkgs.lib.mkDefault ../.; } \ No newline at end of file diff --git a/materialized/bootstrap/ghc8107/happy-1.19.12/default.nix b/materialized/bootstrap/ghc8107/happy-1.19.12/default.nix index 73e76139a6..f4fa58e413 100644 --- a/materialized/bootstrap/ghc8107/happy-1.19.12/default.nix +++ b/materialized/bootstrap/ghc8107/happy-1.19.12/default.nix @@ -2,74 +2,64 @@ pkgs = hackage: { packages = { - "ghc-prim".revision = (((hackage."ghc-prim")."0.6.1").revisions).default; - "array".revision = (((hackage."array")."0.5.4.0").revisions).default; - "integer-gmp".revision = (((hackage."integer-gmp")."1.0.3.0").revisions).default; - "process".revision = (((hackage."process")."1.6.13.2").revisions).default; - "base".revision = (((hackage."base")."4.14.3.0").revisions).default; - "rts".revision = (((hackage."rts")."1.0.1").revisions).default; - "mtl".revision = (((hackage."mtl")."2.2.2").revisions).default; - "time".revision = (((hackage."time")."1.9.3").revisions).default; - "unix".revision = (((hackage."unix")."2.7.2.2").revisions).default; - "bytestring".revision = (((hackage."bytestring")."0.10.12.0").revisions).default; - "containers".revision = (((hackage."containers")."0.6.5.1").revisions).default; - "directory".revision = (((hackage."directory")."1.3.6.0").revisions).default; - "filepath".revision = (((hackage."filepath")."1.4.2.1").revisions).default; - "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default; - "transformers".revision = (((hackage."transformers")."0.5.6.2").revisions).default; - }; + ghc-prim.revision = hackage.ghc-prim."0.6.1".revisions.default; + transformers.revision = hackage.transformers."0.5.6.2".revisions.default; + base.revision = hackage.base."4.14.3.0".revisions.default; + mtl.revision = hackage.mtl."2.2.2".revisions.default; + deepseq.revision = hackage.deepseq."1.4.4.0".revisions.default; + integer-gmp.revision = hackage.integer-gmp."1.0.3.0".revisions.default; + containers.revision = hackage.containers."0.6.5.1".revisions.default; + array.revision = hackage.array."0.5.4.0".revisions.default; + }; compiler = { version = "8.10.7"; nix-name = "ghc8107"; packages = { + "transformers" = "0.5.6.2"; + "containers" = "0.6.5.1"; "ghc-prim" = "0.6.1"; - "array" = "0.5.4.0"; - "integer-gmp" = "1.0.3.0"; - "process" = "1.6.13.2"; - "base" = "4.14.3.0"; - "rts" = "1.0.1"; "mtl" = "2.2.2"; - "time" = "1.9.3"; - "unix" = "2.7.2.2"; - "bytestring" = "0.10.12.0"; - "containers" = "0.6.5.1"; - "directory" = "1.3.6.0"; - "filepath" = "1.4.2.1"; + "base" = "4.14.3.0"; + "integer-gmp" = "1.0.3.0"; "deepseq" = "1.4.4.0"; - "transformers" = "0.5.6.2"; - }; + "array" = "0.5.4.0"; }; }; + }; extras = hackage: { packages = { happy = ./.plan.nix/happy.nix; }; }; modules = [ + { + preExistingPkgs = [ + "ghc-prim" + "transformers" + "base" + "mtl" + "deepseq" + "integer-gmp" + "containers" + "array" + ]; + } ({ lib, ... }: { packages = { "happy" = { flags = { "small_base" = lib.mkOverride 900 true; }; }; - }; - }) + }; + }) ({ lib, ... }: { packages = { + "deepseq".components.library.planned = lib.mkOverride 900 true; + "base".components.library.planned = lib.mkOverride 900 true; + "integer-gmp".components.library.planned = lib.mkOverride 900 true; + "transformers".components.library.planned = lib.mkOverride 900 true; + "mtl".components.library.planned = lib.mkOverride 900 true; "containers".components.library.planned = lib.mkOverride 900 true; "ghc-prim".components.library.planned = lib.mkOverride 900 true; "happy".components.exes."happy".planned = lib.mkOverride 900 true; - "transformers".components.library.planned = lib.mkOverride 900 true; - "process".components.library.planned = lib.mkOverride 900 true; - "integer-gmp".components.library.planned = lib.mkOverride 900 true; "array".components.library.planned = lib.mkOverride 900 true; - "bytestring".components.library.planned = lib.mkOverride 900 true; - "unix".components.library.planned = lib.mkOverride 900 true; - "base".components.library.planned = lib.mkOverride 900 true; - "rts".components.library.planned = lib.mkOverride 900 true; - "mtl".components.library.planned = lib.mkOverride 900 true; - "time".components.library.planned = lib.mkOverride 900 true; - "deepseq".components.library.planned = lib.mkOverride 900 true; - "filepath".components.library.planned = lib.mkOverride 900 true; - "happy".components.tests."tests".planned = lib.mkOverride 900 true; - "directory".components.library.planned = lib.mkOverride 900 true; - }; - }) - ]; - } \ No newline at end of file + }; + }) + ]; +} \ No newline at end of file diff --git a/materialized/bootstrap/ghc8107/happy-1.19.12/plan.json b/materialized/bootstrap/ghc8107/happy-1.19.12/plan.json new file mode 100644 index 0000000000..aeb0dba3c1 --- /dev/null +++ b/materialized/bootstrap/ghc8107/happy-1.19.12/plan.json @@ -0,0 +1 @@ +{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-8.10.7","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.14.3.0"]},{"type":"pre-existing","id":"base-4.14.3.0","pkg-name":"base","pkg-version":"4.14.3.0","depends":["ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.14.3.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"deepseq-1.4.4.0","pkg-name":"deepseq","pkg-version":"1.4.4.0","depends":["array-0.5.4.0","base-4.14.3.0","ghc-prim-0.6.1"]},{"type":"pre-existing","id":"ghc-prim-0.6.1","pkg-name":"ghc-prim","pkg-version":"0.6.1","depends":[]},{"type":"configured","id":"happy-1.19.12-inplace-happy","pkg-name":"happy","pkg-version":"1.19.12","flags":{"small_base":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/happy-1.19.12/x/happy","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/happy-1.19.12/x/happy/build-info.json","depends":["array-0.5.4.0","base-4.14.3.0","containers-0.6.5.1","mtl-2.2.2"],"exe-depends":[],"component-name":"exe:happy","bin-file":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/happy-1.19.12/x/happy/build/happy/happy"},{"type":"pre-existing","id":"integer-gmp-1.0.3.0","pkg-name":"integer-gmp","pkg-version":"1.0.3.0","depends":["ghc-prim-0.6.1"]},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.14.3.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.14.3.0","ghc-prim-0.6.1"]}],"targets":[{"pkg-name":"array","pkg-version":"0.5.4.0","component-name":"lib","available":[{"id":"array-0.5.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base","pkg-version":"4.14.3.0","component-name":"lib","available":[{"id":"base-4.14.3.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"containers","pkg-version":"0.6.5.1","component-name":"lib","available":[{"id":"containers-0.6.5.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"deepseq","pkg-version":"1.4.4.0","component-name":"lib","available":[{"id":"deepseq-1.4.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-prim","pkg-version":"0.6.1","component-name":"lib","available":[{"id":"ghc-prim-0.6.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"happy","pkg-version":"1.19.12","component-name":"exe:happy","available":[{"id":"happy-1.19.12-inplace-happy","component-name":"exe:happy","build-by-default":true}]},{"pkg-name":"happy","pkg-version":"1.19.12","component-name":"test:tests","available":["TargetDisabledByUser"]},{"pkg-name":"integer-gmp","pkg-version":"1.0.3.0","component-name":"lib","available":[{"id":"integer-gmp-1.0.3.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"mtl","pkg-version":"2.2.2","component-name":"lib","available":[{"id":"mtl-2.2.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"transformers","pkg-version":"0.5.6.2","component-name":"lib","available":[{"id":"transformers-0.5.6.2","component-name":"lib","build-by-default":true}]}]} \ No newline at end of file diff --git a/materialized/bootstrap/ghc8107/hscolour/.plan.nix/hscolour.nix b/materialized/bootstrap/ghc8107/hscolour/.plan.nix/hscolour.nix index 1f1cb89188..2953159025 100644 --- a/materialized/bootstrap/ghc8107/hscolour/.plan.nix/hscolour.nix +++ b/materialized/bootstrap/ghc8107/hscolour/.plan.nix/hscolour.nix @@ -29,13 +29,13 @@ extraSrcFiles = []; extraTmpFiles = []; extraDocFiles = []; - }; + }; components = { "library" = { depends = [ (hsPkgs."base" or (errorHandler.buildDepError "base")) (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - ]; + ]; buildable = true; modules = [ "Language/Haskell/HsColour" @@ -54,17 +54,17 @@ "Language/Haskell/HsColour/Options" "Language/Haskell/HsColour/Output" "Language/Haskell/HsColour/TTY" - ]; - }; + ]; + }; exes = { "HsColour" = { depends = [ (hsPkgs."base" or (errorHandler.buildDepError "base")) (hsPkgs."containers" or (errorHandler.buildDepError "containers")) - ]; + ]; buildable = true; mainPath = [ "HsColour.hs" ]; - }; }; }; - } // rec { src = (pkgs.lib).mkDefault ../.; } \ No newline at end of file + }; + } // rec { src = pkgs.lib.mkDefault ../.; } \ No newline at end of file diff --git a/materialized/bootstrap/ghc8107/hscolour/default.nix b/materialized/bootstrap/ghc8107/hscolour/default.nix index cf299d5c2c..a81ff955ab 100644 --- a/materialized/bootstrap/ghc8107/hscolour/default.nix +++ b/materialized/bootstrap/ghc8107/hscolour/default.nix @@ -2,46 +2,53 @@ pkgs = hackage: { packages = { - "ghc-prim".revision = (((hackage."ghc-prim")."0.6.1").revisions).default; - "array".revision = (((hackage."array")."0.5.4.0").revisions).default; - "integer-gmp".revision = (((hackage."integer-gmp")."1.0.3.0").revisions).default; - "base".revision = (((hackage."base")."4.14.3.0").revisions).default; - "rts".revision = (((hackage."rts")."1.0.1").revisions).default; - "containers".revision = (((hackage."containers")."0.6.5.1").revisions).default; - "deepseq".revision = (((hackage."deepseq")."1.4.4.0").revisions).default; - }; + ghc-prim.revision = hackage.ghc-prim."0.6.1".revisions.default; + base.revision = hackage.base."4.14.3.0".revisions.default; + deepseq.revision = hackage.deepseq."1.4.4.0".revisions.default; + integer-gmp.revision = hackage.integer-gmp."1.0.3.0".revisions.default; + containers.revision = hackage.containers."0.6.5.1".revisions.default; + array.revision = hackage.array."0.5.4.0".revisions.default; + }; compiler = { version = "8.10.7"; nix-name = "ghc8107"; packages = { + "containers" = "0.6.5.1"; "ghc-prim" = "0.6.1"; - "array" = "0.5.4.0"; - "integer-gmp" = "1.0.3.0"; "base" = "4.14.3.0"; - "rts" = "1.0.1"; - "containers" = "0.6.5.1"; + "integer-gmp" = "1.0.3.0"; "deepseq" = "1.4.4.0"; - }; + "array" = "0.5.4.0"; }; }; + }; extras = hackage: { packages = { hscolour = ./.plan.nix/hscolour.nix; }; }; modules = [ + { + preExistingPkgs = [ + "ghc-prim" + "base" + "deepseq" + "integer-gmp" + "containers" + "array" + ]; + } ({ lib, ... }: { packages = { "hscolour" = { flags = {}; }; }; }) ({ lib, ... }: { packages = { - "containers".components.library.planned = lib.mkOverride 900 true; - "ghc-prim".components.library.planned = lib.mkOverride 900 true; - "hscolour".components.exes."HsColour".planned = lib.mkOverride 900 true; "hscolour".components.library.planned = lib.mkOverride 900 true; + "deepseq".components.library.planned = lib.mkOverride 900 true; + "base".components.library.planned = lib.mkOverride 900 true; "integer-gmp".components.library.planned = lib.mkOverride 900 true; + "hscolour".components.exes."HsColour".planned = lib.mkOverride 900 true; + "containers".components.library.planned = lib.mkOverride 900 true; + "ghc-prim".components.library.planned = lib.mkOverride 900 true; "array".components.library.planned = lib.mkOverride 900 true; - "base".components.library.planned = lib.mkOverride 900 true; - "rts".components.library.planned = lib.mkOverride 900 true; - "deepseq".components.library.planned = lib.mkOverride 900 true; - }; - }) - ]; - } \ No newline at end of file + }; + }) + ]; +} \ No newline at end of file diff --git a/materialized/bootstrap/ghc8107/hscolour/plan.json b/materialized/bootstrap/ghc8107/hscolour/plan.json new file mode 100644 index 0000000000..548b7b20e3 --- /dev/null +++ b/materialized/bootstrap/ghc8107/hscolour/plan.json @@ -0,0 +1 @@ +{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-8.10.7","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.14.3.0"]},{"type":"pre-existing","id":"base-4.14.3.0","pkg-name":"base","pkg-version":"4.14.3.0","depends":["ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.14.3.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"deepseq-1.4.4.0","pkg-name":"deepseq","pkg-version":"1.4.4.0","depends":["array-0.5.4.0","base-4.14.3.0","ghc-prim-0.6.1"]},{"type":"pre-existing","id":"ghc-prim-0.6.1","pkg-name":"ghc-prim","pkg-version":"0.6.1","depends":[]},{"type":"configured","id":"hscolour-1.24.4-inplace","pkg-name":"hscolour","pkg-version":"1.24.4","flags":{},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/hscolour-1.24.4","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/hscolour-1.24.4/build-info.json","components":{"lib":{"depends":["base-4.14.3.0","containers-0.6.5.1"],"exe-depends":[]},"exe:HsColour":{"depends":["base-4.14.3.0","containers-0.6.5.1"],"exe-depends":[],"bin-file":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/hscolour-1.24.4/build/HsColour/HsColour"}}},{"type":"pre-existing","id":"integer-gmp-1.0.3.0","pkg-name":"integer-gmp","pkg-version":"1.0.3.0","depends":["ghc-prim-0.6.1"]}],"targets":[{"pkg-name":"array","pkg-version":"0.5.4.0","component-name":"lib","available":[{"id":"array-0.5.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base","pkg-version":"4.14.3.0","component-name":"lib","available":[{"id":"base-4.14.3.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"containers","pkg-version":"0.6.5.1","component-name":"lib","available":[{"id":"containers-0.6.5.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"deepseq","pkg-version":"1.4.4.0","component-name":"lib","available":[{"id":"deepseq-1.4.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-prim","pkg-version":"0.6.1","component-name":"lib","available":[{"id":"ghc-prim-0.6.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"hscolour","pkg-version":"1.24.4","component-name":"lib","available":[{"id":"hscolour-1.24.4-inplace","component-name":"lib","build-by-default":true}]},{"pkg-name":"hscolour","pkg-version":"1.24.4","component-name":"exe:HsColour","available":[{"id":"hscolour-1.24.4-inplace","component-name":"exe:HsColour","build-by-default":true}]},{"pkg-name":"integer-gmp","pkg-version":"1.0.3.0","component-name":"lib","available":[{"id":"integer-gmp-1.0.3.0","component-name":"lib","build-by-default":true}]}]} \ No newline at end of file diff --git a/materialized/ghc-boot-packages-nix/ghc948/bytestring.nix b/materialized/ghc-boot-packages-nix/ghc948/bytestring.nix deleted file mode 100644 index 9901355311..0000000000 --- a/materialized/ghc-boot-packages-nix/ghc948/bytestring.nix +++ /dev/null @@ -1,65 +0,0 @@ -{ system - , compiler - , flags - , pkgs - , hsPkgs - , pkgconfPkgs - , errorHandler - , config - , ... }: - { - flags = {}; - package = { - specVersion = "1.10"; - identifier = { name = "bytestring"; version = "0.11.5.3"; }; - license = "BSD-3-Clause"; - copyright = "Copyright (c) Don Stewart 2005-2009,\n(c) Duncan Coutts 2006-2015,\n(c) David Roundy 2003-2005,\n(c) Jasper Van der Jeugt 2010,\n(c) Simon Meier 2010-2013."; - maintainer = "Haskell Bytestring Team , Core Libraries Committee"; - author = "Don Stewart,\nDuncan Coutts"; - homepage = "https://github.com/haskell/bytestring"; - url = ""; - synopsis = "Fast, compact, strict and lazy byte strings with a list interface"; - description = "An efficient compact, immutable byte string type (both strict and lazy)\nsuitable for binary or 8-bit character data.\n\nThe 'ByteString' type represents sequences of bytes or 8-bit characters.\nIt is suitable for high performance use, both in terms of large data\nquantities, or high speed requirements. The 'ByteString' functions follow\nthe same style as Haskell\\'s ordinary lists, so it is easy to convert code\nfrom using 'String' to 'ByteString'.\n\nTwo 'ByteString' variants are provided:\n\n* Strict 'ByteString's keep the string as a single large array. This\nmakes them convenient for passing data between C and Haskell.\n\n* Lazy 'ByteString's use a lazy list of strict chunks which makes it\nsuitable for I\\/O streaming tasks.\n\nThe @Char8@ modules provide a character-based view of the same\nunderlying 'ByteString' types. This makes it convenient to handle mixed\nbinary and 8-bit character content (which is common in many file formats\nand network protocols).\n\nThe 'Builder' module provides an efficient way to build up 'ByteString's\nin an ad-hoc way by repeated concatenation. This is ideal for fast\nserialisation or pretty printing.\n\nThere is also a 'ShortByteString' type which has a lower memory overhead\nand can be converted to or from a 'ByteString'. It is suitable for keeping\nmany short strings in memory.\n\n'ByteString's are not designed for Unicode. For Unicode strings you should\nuse the 'Text' type from the @text@ package.\n\nThese modules are intended to be imported qualified, to avoid name clashes\nwith \"Prelude\" functions, e.g.\n\n> import qualified Data.ByteString as BS"; - buildType = "Simple"; - }; - components = { - "library" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) - ]; - libs = pkgs.lib.optional (system.isWindows && (compiler.isGhc && compiler.version.lt "9.3")) (pkgs."gcc" or (errorHandler.sysDepError "gcc")); - buildable = true; - }; - tests = { - "bytestring-tests" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) - (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) - (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) - (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) - ]; - buildable = true; - }; - }; - benchmarks = { - "bytestring-bench" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."tasty-bench" or (errorHandler.buildDepError "tasty-bench")) - (hsPkgs."random" or (errorHandler.buildDepError "random")) - ]; - buildable = true; - }; - }; - }; - } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc948/deepseq.nix b/materialized/ghc-boot-packages-nix/ghc948/deepseq.nix deleted file mode 100644 index f2f913895e..0000000000 --- a/materialized/ghc-boot-packages-nix/ghc948/deepseq.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ system - , compiler - , flags - , pkgs - , hsPkgs - , pkgconfPkgs - , errorHandler - , config - , ... }: - { - flags = {}; - package = { - specVersion = "1.12"; - identifier = { name = "deepseq"; version = "1.4.8.0"; }; - license = "BSD-3-Clause"; - copyright = ""; - maintainer = "libraries@haskell.org"; - author = ""; - homepage = ""; - url = ""; - synopsis = "Deep evaluation of data structures"; - description = "This package provides methods for fully evaluating data structures\n(\\\"deep evaluation\\\"). Deep evaluation is often used for adding\nstrictness to a program, e.g. in order to force pending exceptions,\nremove space leaks, or force lazy I/O to happen. It is also useful\nin parallel programs, to ensure pending work does not migrate to the\nwrong thread.\n\nThe primary use of this package is via the 'deepseq' function, a\n\\\"deep\\\" version of 'seq'. It is implemented on top of an 'NFData'\ntypeclass (\\\"Normal Form Data\\\", data structures with no unevaluated\ncomponents) which defines strategies for fully evaluating different\ndata types. See module documentation in \"Control.DeepSeq\" for more\ndetails."; - buildType = "Simple"; - }; - components = { - "library" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."array" or (errorHandler.buildDepError "array")) - ] ++ pkgs.lib.optional (compiler.isGhc && compiler.version.ge "9.0") (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")); - buildable = true; - }; - tests = { - "test" = { - depends = [ - (hsPkgs."array" or (errorHandler.buildDepError "array")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) - ]; - buildable = true; - }; - }; - }; - } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc948/pretty.nix b/materialized/ghc-boot-packages-nix/ghc948/pretty.nix deleted file mode 100644 index 7d4c79f506..0000000000 --- a/materialized/ghc-boot-packages-nix/ghc948/pretty.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ system - , compiler - , flags - , pkgs - , hsPkgs - , pkgconfPkgs - , errorHandler - , config - , ... }: - { - flags = {}; - package = { - specVersion = "1.8"; - identifier = { name = "pretty"; version = "1.1.3.6"; }; - license = "BSD-3-Clause"; - copyright = ""; - maintainer = "David Terei "; - author = ""; - homepage = "http://github.com/haskell/pretty"; - url = ""; - synopsis = "Pretty-printing library"; - description = "This package contains a pretty-printing library, a set of API's\nthat provides a way to easily print out text in a consistent\nformat of your choosing. This is useful for compilers and related\ntools.\n\nThis library was originally designed by John Hughes's and has since\nbeen heavily modified by Simon Peyton Jones."; - buildType = "Simple"; - }; - components = { - "library" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) - ]; - buildable = true; - }; - tests = { - "test-pretty" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) - (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) - ]; - buildable = true; - }; - }; - benchmarks = { - "pretty-bench" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."criterion" or (errorHandler.buildDepError "criterion")) - (hsPkgs."pretty" or (errorHandler.buildDepError "pretty")) - ]; - buildable = true; - }; - }; - }; - } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc982-ghcjs/bytestring.nix b/materialized/ghc-boot-packages-nix/ghc982-ghcjs/bytestring.nix deleted file mode 100644 index 6b38669a93..0000000000 --- a/materialized/ghc-boot-packages-nix/ghc982-ghcjs/bytestring.nix +++ /dev/null @@ -1,66 +0,0 @@ -{ system - , compiler - , flags - , pkgs - , hsPkgs - , pkgconfPkgs - , errorHandler - , config - , ... }: - { - flags = { pure-haskell = false; }; - package = { - specVersion = "1.10"; - identifier = { name = "bytestring"; version = "0.12.1.0"; }; - license = "BSD-3-Clause"; - copyright = "Copyright (c) Don Stewart 2005-2009,\n(c) Duncan Coutts 2006-2015,\n(c) David Roundy 2003-2005,\n(c) Jasper Van der Jeugt 2010,\n(c) Simon Meier 2010-2013."; - maintainer = "Haskell Bytestring Team , Core Libraries Committee"; - author = "Don Stewart,\nDuncan Coutts"; - homepage = "https://github.com/haskell/bytestring"; - url = ""; - synopsis = "Fast, compact, strict and lazy byte strings with a list interface"; - description = "An efficient compact, immutable byte string type (both strict and lazy)\nsuitable for binary or 8-bit character data.\n\nThe 'ByteString' type represents sequences of bytes or 8-bit characters.\nIt is suitable for high performance use, both in terms of large data\nquantities, or high speed requirements. The 'ByteString' functions follow\nthe same style as Haskell\\'s ordinary lists, so it is easy to convert code\nfrom using 'String' to 'ByteString'.\n\nTwo 'ByteString' variants are provided:\n\n* Strict 'ByteString's keep the string as a single large array. This\nmakes them convenient for passing data between C and Haskell.\n\n* Lazy 'ByteString's use a lazy list of strict chunks which makes it\nsuitable for I\\/O streaming tasks.\n\nThe @Char8@ modules provide a character-based view of the same\nunderlying 'ByteString' types. This makes it convenient to handle mixed\nbinary and 8-bit character content (which is common in many file formats\nand network protocols).\n\nThe 'Builder' module provides an efficient way to build up 'ByteString's\nin an ad-hoc way by repeated concatenation. This is ideal for fast\nserialisation or pretty printing.\n\nThere is also a 'ShortByteString' type which has a lower memory overhead\nand can be converted to or from a 'ByteString'. It is suitable for keeping\nmany short strings in memory, especially long-term, without incurring any\npossible heap fragmentation costs.\n\n'ByteString's are not designed for Unicode. For Unicode strings you should\nuse the 'Text' type from the @text@ package.\n\nThese modules are intended to be imported qualified, to avoid name clashes\nwith \"Prelude\" functions, e.g.\n\n> import qualified Data.ByteString as BS"; - buildType = "Simple"; - }; - components = { - "library" = { - depends = ([ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) - ] ++ pkgs.lib.optional (compiler.isGhc && compiler.version.lt "9.4") (hsPkgs."data-array-byte" or (errorHandler.buildDepError "data-array-byte"))) ++ pkgs.lib.optional (system.isJavaScript || flags.pure-haskell) (hsPkgs."base" or (errorHandler.buildDepError "base")); - libs = pkgs.lib.optionals (!(system.isJavaScript || flags.pure-haskell)) (pkgs.lib.optional (system.isWindows && (compiler.isGhc && compiler.version.lt "9.3")) (pkgs."gcc" or (errorHandler.sysDepError "gcc"))); - buildable = true; - }; - tests = { - "bytestring-tests" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) - (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) - (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) - (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) - (hsPkgs."syb" or (errorHandler.buildDepError "syb")) - ]; - buildable = true; - }; - }; - benchmarks = { - "bytestring-bench" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."tasty-bench" or (errorHandler.buildDepError "tasty-bench")) - (hsPkgs."random" or (errorHandler.buildDepError "random")) - ]; - buildable = true; - }; - }; - }; - } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc982-ghcjs/deepseq.nix b/materialized/ghc-boot-packages-nix/ghc982-ghcjs/deepseq.nix deleted file mode 100644 index 3bc6d64832..0000000000 --- a/materialized/ghc-boot-packages-nix/ghc982-ghcjs/deepseq.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ system - , compiler - , flags - , pkgs - , hsPkgs - , pkgconfPkgs - , errorHandler - , config - , ... }: - { - flags = {}; - package = { - specVersion = "1.12"; - identifier = { name = "deepseq"; version = "1.5.0.0"; }; - license = "BSD-3-Clause"; - copyright = ""; - maintainer = "libraries@haskell.org"; - author = ""; - homepage = ""; - url = ""; - synopsis = "Deep evaluation of data structures"; - description = "This package provides methods for fully evaluating data structures\n(\\\"deep evaluation\\\"). Deep evaluation is often used for adding\nstrictness to a program, e.g. in order to force pending exceptions,\nremove space leaks, or force lazy I/O to happen. It is also useful\nin parallel programs, to ensure pending work does not migrate to the\nwrong thread.\n\nThe primary use of this package is via the 'deepseq' function, a\n\\\"deep\\\" version of 'seq'. It is implemented on top of an 'NFData'\ntypeclass (\\\"Normal Form Data\\\", data structures with no unevaluated\ncomponents) which defines strategies for fully evaluating different\ndata types. See module documentation in \"Control.DeepSeq\" for more\ndetails."; - buildType = "Simple"; - }; - components = { - "library" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."array" or (errorHandler.buildDepError "array")) - ] ++ pkgs.lib.optional (compiler.isGhc && compiler.version.ge "9.0") (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")); - buildable = true; - }; - tests = { - "test" = { - depends = [ - (hsPkgs."array" or (errorHandler.buildDepError "array")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) - ]; - buildable = true; - }; - }; - }; - } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc982-ghcjs/parsec.nix b/materialized/ghc-boot-packages-nix/ghc982-ghcjs/parsec.nix deleted file mode 100644 index fcd8e03f39..0000000000 --- a/materialized/ghc-boot-packages-nix/ghc982-ghcjs/parsec.nix +++ /dev/null @@ -1,77 +0,0 @@ -{ system - , compiler - , flags - , pkgs - , hsPkgs - , pkgconfPkgs - , errorHandler - , config - , ... }: - { - flags = {}; - package = { - specVersion = "1.12"; - identifier = { name = "parsec"; version = "3.1.17.0"; }; - license = "BSD-2-Clause"; - copyright = ""; - maintainer = "Oleg Grenrus , Herbert Valerio Riedel "; - author = "Daan Leijen , Paolo Martini , Antoine Latter "; - homepage = "https://github.com/haskell/parsec"; - url = ""; - synopsis = "Monadic parser combinators"; - description = "Parsec is designed from scratch as an industrial-strength parser\nlibrary. It is simple, safe, well documented (on the package\nhomepage), has extensive libraries, good error messages,\nand is fast. It is defined as a monad transformer that can be\nstacked on arbitrary monads, and it is also parametric in the\ninput stream type.\n\nThe main entry point is the \"Text.Parsec\" module which provides\ndefaults for parsing 'Char'acter data.\n\nThe \"Text.ParserCombinators.Parsec\" module hierarchy contains\nthe legacy @parsec-2@ API and may be removed at some point in\nthe future."; - buildType = "Simple"; - }; - components = { - "library" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - ] ++ pkgs.lib.optionals (!(compiler.isGhc && compiler.version.ge "8.0")) [ - (hsPkgs."fail" or (errorHandler.buildDepError "fail")) - (hsPkgs."semigroups" or (errorHandler.buildDepError "semigroups")) - ]; - buildable = true; - }; - tests = { - "parsec-tests" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."parsec" or (errorHandler.buildDepError "parsec")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) - ] ++ pkgs.lib.optional (!(compiler.isGhc && compiler.version.ge "8.0")) (hsPkgs."semigroups" or (errorHandler.buildDepError "semigroups")); - buildable = true; - }; - "parsec-issue127" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."parsec" or (errorHandler.buildDepError "parsec")) - ]; - buildable = true; - }; - "parsec-issue171" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."parsec" or (errorHandler.buildDepError "parsec")) - ]; - buildable = true; - }; - "parsec-issue175" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) - (hsPkgs."parsec" or (errorHandler.buildDepError "parsec")) - ]; - buildable = true; - }; - }; - }; - } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc982-ghcjs/pretty.nix b/materialized/ghc-boot-packages-nix/ghc982-ghcjs/pretty.nix deleted file mode 100644 index 7d4c79f506..0000000000 --- a/materialized/ghc-boot-packages-nix/ghc982-ghcjs/pretty.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ system - , compiler - , flags - , pkgs - , hsPkgs - , pkgconfPkgs - , errorHandler - , config - , ... }: - { - flags = {}; - package = { - specVersion = "1.8"; - identifier = { name = "pretty"; version = "1.1.3.6"; }; - license = "BSD-3-Clause"; - copyright = ""; - maintainer = "David Terei "; - author = ""; - homepage = "http://github.com/haskell/pretty"; - url = ""; - synopsis = "Pretty-printing library"; - description = "This package contains a pretty-printing library, a set of API's\nthat provides a way to easily print out text in a consistent\nformat of your choosing. This is useful for compilers and related\ntools.\n\nThis library was originally designed by John Hughes's and has since\nbeen heavily modified by Simon Peyton Jones."; - buildType = "Simple"; - }; - components = { - "library" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) - ]; - buildable = true; - }; - tests = { - "test-pretty" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) - (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) - ]; - buildable = true; - }; - }; - benchmarks = { - "pretty-bench" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."criterion" or (errorHandler.buildDepError "criterion")) - (hsPkgs."pretty" or (errorHandler.buildDepError "pretty")) - ]; - buildable = true; - }; - }; - }; - } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc982/bytestring.nix b/materialized/ghc-boot-packages-nix/ghc982/bytestring.nix deleted file mode 100644 index 6b38669a93..0000000000 --- a/materialized/ghc-boot-packages-nix/ghc982/bytestring.nix +++ /dev/null @@ -1,66 +0,0 @@ -{ system - , compiler - , flags - , pkgs - , hsPkgs - , pkgconfPkgs - , errorHandler - , config - , ... }: - { - flags = { pure-haskell = false; }; - package = { - specVersion = "1.10"; - identifier = { name = "bytestring"; version = "0.12.1.0"; }; - license = "BSD-3-Clause"; - copyright = "Copyright (c) Don Stewart 2005-2009,\n(c) Duncan Coutts 2006-2015,\n(c) David Roundy 2003-2005,\n(c) Jasper Van der Jeugt 2010,\n(c) Simon Meier 2010-2013."; - maintainer = "Haskell Bytestring Team , Core Libraries Committee"; - author = "Don Stewart,\nDuncan Coutts"; - homepage = "https://github.com/haskell/bytestring"; - url = ""; - synopsis = "Fast, compact, strict and lazy byte strings with a list interface"; - description = "An efficient compact, immutable byte string type (both strict and lazy)\nsuitable for binary or 8-bit character data.\n\nThe 'ByteString' type represents sequences of bytes or 8-bit characters.\nIt is suitable for high performance use, both in terms of large data\nquantities, or high speed requirements. The 'ByteString' functions follow\nthe same style as Haskell\\'s ordinary lists, so it is easy to convert code\nfrom using 'String' to 'ByteString'.\n\nTwo 'ByteString' variants are provided:\n\n* Strict 'ByteString's keep the string as a single large array. This\nmakes them convenient for passing data between C and Haskell.\n\n* Lazy 'ByteString's use a lazy list of strict chunks which makes it\nsuitable for I\\/O streaming tasks.\n\nThe @Char8@ modules provide a character-based view of the same\nunderlying 'ByteString' types. This makes it convenient to handle mixed\nbinary and 8-bit character content (which is common in many file formats\nand network protocols).\n\nThe 'Builder' module provides an efficient way to build up 'ByteString's\nin an ad-hoc way by repeated concatenation. This is ideal for fast\nserialisation or pretty printing.\n\nThere is also a 'ShortByteString' type which has a lower memory overhead\nand can be converted to or from a 'ByteString'. It is suitable for keeping\nmany short strings in memory, especially long-term, without incurring any\npossible heap fragmentation costs.\n\n'ByteString's are not designed for Unicode. For Unicode strings you should\nuse the 'Text' type from the @text@ package.\n\nThese modules are intended to be imported qualified, to avoid name clashes\nwith \"Prelude\" functions, e.g.\n\n> import qualified Data.ByteString as BS"; - buildType = "Simple"; - }; - components = { - "library" = { - depends = ([ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) - ] ++ pkgs.lib.optional (compiler.isGhc && compiler.version.lt "9.4") (hsPkgs."data-array-byte" or (errorHandler.buildDepError "data-array-byte"))) ++ pkgs.lib.optional (system.isJavaScript || flags.pure-haskell) (hsPkgs."base" or (errorHandler.buildDepError "base")); - libs = pkgs.lib.optionals (!(system.isJavaScript || flags.pure-haskell)) (pkgs.lib.optional (system.isWindows && (compiler.isGhc && compiler.version.lt "9.3")) (pkgs."gcc" or (errorHandler.sysDepError "gcc"))); - buildable = true; - }; - tests = { - "bytestring-tests" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) - (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."tasty-quickcheck" or (errorHandler.buildDepError "tasty-quickcheck")) - (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) - (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) - (hsPkgs."syb" or (errorHandler.buildDepError "syb")) - ]; - buildable = true; - }; - }; - benchmarks = { - "bytestring-bench" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."tasty-bench" or (errorHandler.buildDepError "tasty-bench")) - (hsPkgs."random" or (errorHandler.buildDepError "random")) - ]; - buildable = true; - }; - }; - }; - } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc982/deepseq.nix b/materialized/ghc-boot-packages-nix/ghc982/deepseq.nix deleted file mode 100644 index 3bc6d64832..0000000000 --- a/materialized/ghc-boot-packages-nix/ghc982/deepseq.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ system - , compiler - , flags - , pkgs - , hsPkgs - , pkgconfPkgs - , errorHandler - , config - , ... }: - { - flags = {}; - package = { - specVersion = "1.12"; - identifier = { name = "deepseq"; version = "1.5.0.0"; }; - license = "BSD-3-Clause"; - copyright = ""; - maintainer = "libraries@haskell.org"; - author = ""; - homepage = ""; - url = ""; - synopsis = "Deep evaluation of data structures"; - description = "This package provides methods for fully evaluating data structures\n(\\\"deep evaluation\\\"). Deep evaluation is often used for adding\nstrictness to a program, e.g. in order to force pending exceptions,\nremove space leaks, or force lazy I/O to happen. It is also useful\nin parallel programs, to ensure pending work does not migrate to the\nwrong thread.\n\nThe primary use of this package is via the 'deepseq' function, a\n\\\"deep\\\" version of 'seq'. It is implemented on top of an 'NFData'\ntypeclass (\\\"Normal Form Data\\\", data structures with no unevaluated\ncomponents) which defines strategies for fully evaluating different\ndata types. See module documentation in \"Control.DeepSeq\" for more\ndetails."; - buildType = "Simple"; - }; - components = { - "library" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."array" or (errorHandler.buildDepError "array")) - ] ++ pkgs.lib.optional (compiler.isGhc && compiler.version.ge "9.0") (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")); - buildable = true; - }; - tests = { - "test" = { - depends = [ - (hsPkgs."array" or (errorHandler.buildDepError "array")) - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) - ]; - buildable = true; - }; - }; - }; - } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc982/parsec.nix b/materialized/ghc-boot-packages-nix/ghc982/parsec.nix deleted file mode 100644 index fcd8e03f39..0000000000 --- a/materialized/ghc-boot-packages-nix/ghc982/parsec.nix +++ /dev/null @@ -1,77 +0,0 @@ -{ system - , compiler - , flags - , pkgs - , hsPkgs - , pkgconfPkgs - , errorHandler - , config - , ... }: - { - flags = {}; - package = { - specVersion = "1.12"; - identifier = { name = "parsec"; version = "3.1.17.0"; }; - license = "BSD-2-Clause"; - copyright = ""; - maintainer = "Oleg Grenrus , Herbert Valerio Riedel "; - author = "Daan Leijen , Paolo Martini , Antoine Latter "; - homepage = "https://github.com/haskell/parsec"; - url = ""; - synopsis = "Monadic parser combinators"; - description = "Parsec is designed from scratch as an industrial-strength parser\nlibrary. It is simple, safe, well documented (on the package\nhomepage), has extensive libraries, good error messages,\nand is fast. It is defined as a monad transformer that can be\nstacked on arbitrary monads, and it is also parametric in the\ninput stream type.\n\nThe main entry point is the \"Text.Parsec\" module which provides\ndefaults for parsing 'Char'acter data.\n\nThe \"Text.ParserCombinators.Parsec\" module hierarchy contains\nthe legacy @parsec-2@ API and may be removed at some point in\nthe future."; - buildType = "Simple"; - }; - components = { - "library" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) - (hsPkgs."text" or (errorHandler.buildDepError "text")) - ] ++ pkgs.lib.optionals (!(compiler.isGhc && compiler.version.ge "8.0")) [ - (hsPkgs."fail" or (errorHandler.buildDepError "fail")) - (hsPkgs."semigroups" or (errorHandler.buildDepError "semigroups")) - ]; - buildable = true; - }; - tests = { - "parsec-tests" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) - (hsPkgs."parsec" or (errorHandler.buildDepError "parsec")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) - ] ++ pkgs.lib.optional (!(compiler.isGhc && compiler.version.ge "8.0")) (hsPkgs."semigroups" or (errorHandler.buildDepError "semigroups")); - buildable = true; - }; - "parsec-issue127" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."parsec" or (errorHandler.buildDepError "parsec")) - ]; - buildable = true; - }; - "parsec-issue171" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."parsec" or (errorHandler.buildDepError "parsec")) - ]; - buildable = true; - }; - "parsec-issue175" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) - (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) - (hsPkgs."parsec" or (errorHandler.buildDepError "parsec")) - ]; - buildable = true; - }; - }; - }; - } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc982/pretty.nix b/materialized/ghc-boot-packages-nix/ghc982/pretty.nix deleted file mode 100644 index 7d4c79f506..0000000000 --- a/materialized/ghc-boot-packages-nix/ghc982/pretty.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ system - , compiler - , flags - , pkgs - , hsPkgs - , pkgconfPkgs - , errorHandler - , config - , ... }: - { - flags = {}; - package = { - specVersion = "1.8"; - identifier = { name = "pretty"; version = "1.1.3.6"; }; - license = "BSD-3-Clause"; - copyright = ""; - maintainer = "David Terei "; - author = ""; - homepage = "http://github.com/haskell/pretty"; - url = ""; - synopsis = "Pretty-printing library"; - description = "This package contains a pretty-printing library, a set of API's\nthat provides a way to easily print out text in a consistent\nformat of your choosing. This is useful for compilers and related\ntools.\n\nThis library was originally designed by John Hughes's and has since\nbeen heavily modified by Simon Peyton Jones."; - buildType = "Simple"; - }; - components = { - "library" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) - ]; - buildable = true; - }; - tests = { - "test-pretty" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) - (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) - (hsPkgs."QuickCheck" or (errorHandler.buildDepError "QuickCheck")) - ]; - buildable = true; - }; - }; - benchmarks = { - "pretty-bench" = { - depends = [ - (hsPkgs."base" or (errorHandler.buildDepError "base")) - (hsPkgs."criterion" or (errorHandler.buildDepError "criterion")) - (hsPkgs."pretty" or (errorHandler.buildDepError "pretty")) - ]; - buildable = true; - }; - }; - }; - } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc964/hadrian-ghc910/hadrian/default.nix b/materialized/ghc964/hadrian-ghc910/hadrian/default.nix index c251f95e09..3a9d912802 100644 --- a/materialized/ghc964/hadrian-ghc910/hadrian/default.nix +++ b/materialized/ghc964/hadrian-ghc910/hadrian/default.nix @@ -98,6 +98,35 @@ }; }; modules = [ + { + preExistingPkgs = [ + "ghc-prim" + "transformers" + "time" + "base" + "unix" + "ghc-boot-th" + "mtl" + "pretty" + "Cabal-syntax" + "process" + "stm" + "template-haskell" + "exceptions" + "parsec" + "system-cxx-std-lib" + "deepseq" + "text" + "containers" + "array" + "bytestring" + "Cabal" + "directory" + "ghc-bignum" + "binary" + "filepath" + ]; + } ({ lib, ... }: { packages = { diff --git a/materialized/ghc964/hadrian-ghc910/plan.json b/materialized/ghc964/hadrian-ghc910/plan.json new file mode 100644 index 0000000000..d620fb747b --- /dev/null +++ b/materialized/ghc964/hadrian-ghc910/plan.json @@ -0,0 +1 @@ +{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-9.6.4","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.10.1.0","pkg-name":"Cabal","pkg-version":"3.10.1.0","depends":["Cabal-syntax-3.10.1.0","array-0.5.6.0","base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","directory-1.3.8.1","filepath-1.4.200.1","mtl-2.3.1","parsec-3.1.16.1","pretty-1.1.3.6","process-1.6.17.0","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0"]},{"type":"pre-existing","id":"Cabal-syntax-3.10.1.0","pkg-name":"Cabal-syntax","pkg-version":"3.10.1.0","depends":["array-0.5.6.0","base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","directory-1.3.8.1","filepath-1.4.200.1","mtl-2.3.1","parsec-3.1.16.1","pretty-1.1.3.6","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0"]},{"type":"configured","id":"QuickCheck-2.14.3-116702925e70e233df64507a5cae969ff9c69efe35b3cc35e56c87d47168ff11","pkg-name":"QuickCheck","pkg-version":"2.14.3","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f03d2f404d5ba465453d0fbc1944832789a759fe7c4f9bf8616bc1378a02fde4","pkg-src-sha256":"5c0f22b36b28a1a8fa110b3819818d3f29494a3b0dedbae299f064123ca70501","depends":["base-4.18.2.0","containers-0.6.7","deepseq-1.4.8.1","random-1.2.1.1-e2b8c23c50d3a2e2d7c30c46d2a3344a9c2a38bf319885311c62efb7342cb80b","splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","template-haskell-2.20.0.0","transformers-0.6.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.6.0","pkg-name":"array","pkg-version":"0.5.6.0","depends":["base-4.18.2.0"]},{"type":"pre-existing","id":"base-4.18.2.0","pkg-name":"base","pkg-version":"4.18.2.0","depends":["ghc-bignum-1.3","ghc-prim-0.10.0"]},{"type":"configured","id":"base16-bytestring-1.0.2.0-48e234cd9d2674d718111ce6f52d0142cc28a3c5a0493618f8fb6a8b7f7dd1f7","pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a694e88f9ec9fc79f0b03f233d3fea592b68f70a34aac2ddb5bcaecb6562e2fd","pkg-src-sha256":"1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784","depends":["base-4.18.2.0","bytestring-0.11.5.3"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"binary-0.8.9.1","pkg-name":"binary","pkg-version":"0.8.9.1","depends":["array-0.5.6.0","base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"bytestring-0.11.5.3","pkg-name":"bytestring","pkg-version":"0.11.5.3","depends":["base-4.18.2.0","deepseq-1.4.8.1","ghc-prim-0.10.0","template-haskell-2.20.0.0"]},{"type":"configured","id":"clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","pkg-name":"clock","pkg-version":"0.8.4","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b938655b00cf204ce69abfff946021bed111d2609a9f7a9c22e28a1a202e9115","pkg-src-sha256":"6ae9898afe788a5e334cd5fad5d18a3c2e8e59fa09aaf7b957dbb38a4767df2e","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.7","pkg-name":"containers","pkg-version":"0.6.7","depends":["array-0.5.6.0","base-4.18.2.0","deepseq-1.4.8.1","template-haskell-2.20.0.0"]},{"type":"configured","id":"cryptohash-sha256-0.11.102.1-898616048405d66a1ac2538c4878965bc94c2902780e27b3e48e171cdfe34cf8","pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","flags":{"exe":false,"use-cbits":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"03db065161987f614a3a2bbcd16264f78e47efe231fb5bd161be2043eaf20488","pkg-src-sha256":"73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6","depends":["base-4.18.2.0","bytestring-0.11.5.3"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.4.8.1","pkg-name":"deepseq","pkg-version":"1.4.8.1","depends":["array-0.5.6.0","base-4.18.2.0","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"directory-1.3.8.1","pkg-name":"directory","pkg-version":"1.3.8.1","depends":["base-4.18.2.0","filepath-1.4.200.1","time-1.12.2","unix-2.8.4.0"]},{"type":"pre-existing","id":"exceptions-0.10.7","pkg-name":"exceptions","pkg-version":"0.10.7","depends":["base-4.18.2.0","mtl-2.3.1","stm-2.5.1.0","template-haskell-2.20.0.0","transformers-0.6.1.0"]},{"type":"configured","id":"extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","pkg-name":"extra","pkg-version":"1.7.14","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e3d3ce1dc7746b1132930e48c59fb5e8c51a09e92e0c031316be031067a273fb","pkg-src-sha256":"b6a909f8f0e4b8076a1653b4d34815a782f0a8c1e83d5267f4d00496471ef567","depends":["base-4.18.2.0","clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","directory-1.3.8.1","filepath-1.4.200.1","process-1.6.17.0","time-1.12.2","unix-2.8.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.200.1","pkg-name":"filepath","pkg-version":"1.4.200.1","depends":["base-4.18.2.0","bytestring-0.11.5.3","deepseq-1.4.8.1","exceptions-0.10.7","template-haskell-2.20.0.0"]},{"type":"configured","id":"filepattern-0.1.3-e0b05225cb586afea88cbd5fba3b81dbc7d8925b44e8dd467cfd9ed208da351b","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.18.2.0","directory-1.3.8.1","extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","filepath-1.4.200.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.3","pkg-name":"ghc-bignum","pkg-version":"1.3","depends":["ghc-prim-0.10.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.6.4","pkg-name":"ghc-boot-th","pkg-version":"9.6.4","depends":["base-4.18.2.0"]},{"type":"configured","id":"ghc-platform-0.1.0.0-inplace","pkg-name":"ghc-platform","pkg-version":"0.1.0.0","flags":{},"style":"local","pkg-src":{"type":"local","path":"./hadrian/../libraries/ghc-platform"},"dist-dir":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/ghc-platform-0.1.0.0","build-info":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/ghc-platform-0.1.0.0/build-info.json","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-prim-0.10.0","pkg-name":"ghc-prim","pkg-version":"0.10.0","depends":[]},{"type":"configured","id":"ghc-toolchain-0.1.0.0-inplace","pkg-name":"ghc-toolchain","pkg-version":"0.1.0.0","flags":{},"style":"local","pkg-src":{"type":"local","path":"./hadrian/../utils/ghc-toolchain"},"dist-dir":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/ghc-toolchain-0.1.0.0","build-info":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/ghc-toolchain-0.1.0.0/build-info.json","depends":["base-4.18.2.0","directory-1.3.8.1","filepath-1.4.200.1","ghc-platform-0.1.0.0-inplace","process-1.6.17.0","text-2.0.2","transformers-0.6.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"./hadrian/."},"dist-dir":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian","build-info":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.10.1.0","QuickCheck-2.14.3-116702925e70e233df64507a5cae969ff9c69efe35b3cc35e56c87d47168ff11","base-4.18.2.0","base16-bytestring-1.0.2.0-48e234cd9d2674d718111ce6f52d0142cc28a3c5a0493618f8fb6a8b7f7dd1f7","bytestring-0.11.5.3","containers-0.6.7","cryptohash-sha256-0.11.102.1-898616048405d66a1ac2538c4878965bc94c2902780e27b3e48e171cdfe34cf8","directory-1.3.8.1","extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","filepath-1.4.200.1","ghc-platform-0.1.0.0-inplace","ghc-toolchain-0.1.0.0-inplace","mtl-2.3.1","parsec-3.1.16.1","shake-0.19.7-9369313762a66f683383a6b11b819b9aafcd8f0d518c176b2cb1f5a198ccf8cd","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unordered-containers-0.2.19.1-0eb0d95c2f270578763e7cbc938fd7d57fa65a8f3c10aa64b616bc79bbf6b993"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.4.3.0-cf03199beb9180bbbb9b383e3088c03deb3be32037dd08933c3d3ba08171d03e","pkg-name":"hashable","pkg-version":"1.4.3.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f3bf68acfa0df7a064a378ef2cdcfeb55e6fb96100675f4c593556dcbf3d7194","pkg-src-sha256":"32efb16c2891786209b7cbe5c39df9b3a9ae51e836f1a54f646bc4602b7ab0f5","depends":["base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","filepath-1.4.200.1","ghc-bignum-1.3","ghc-prim-0.10.0","text-2.0.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.3.1","pkg-name":"mtl","pkg-version":"2.3.1","depends":["base-4.18.2.0","transformers-0.6.1.0"]},{"type":"pre-existing","id":"parsec-3.1.16.1","pkg-name":"parsec","pkg-version":"3.1.16.1","depends":["base-4.18.2.0","bytestring-0.11.5.3","mtl-2.3.1","text-2.0.2"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.18.2.0","deepseq-1.4.8.1","ghc-prim-0.10.0"]},{"type":"configured","id":"primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","pkg-name":"primitive","pkg-version":"0.9.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1ceb39f67c0e614180f2992a6d30f26603ab2cd23c4f8e25b30213f98807f6f1","pkg-src-sha256":"696d4bd291c94d736142d6182117dca4258d3ef28bfefdb649ac8b5ecd0999c7","depends":["base-4.18.2.0","deepseq-1.4.8.1","template-haskell-2.20.0.0","transformers-0.6.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.17.0","pkg-name":"process","pkg-version":"1.6.17.0","depends":["base-4.18.2.0","deepseq-1.4.8.1","directory-1.3.8.1","filepath-1.4.200.1","unix-2.8.4.0"]},{"type":"configured","id":"random-1.2.1.1-e2b8c23c50d3a2e2d7c30c46d2a3344a9c2a38bf319885311c62efb7342cb80b","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e7c1f881159d5cc788619c9ee8b8f340ba2ff0db571cdf3d1a1968ebc5108789","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.18.2.0","bytestring-0.11.5.3","deepseq-1.4.8.1","mtl-2.3.1","splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-9369313762a66f683383a6b11b819b9aafcd8f0d518c176b2cb1f5a198ccf8cd","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","directory-1.3.8.1","extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","filepath-1.4.200.1","filepattern-0.1.3-e0b05225cb586afea88cbd5fba3b81dbc7d8925b44e8dd467cfd9ed208da351b","hashable-1.4.3.0-cf03199beb9180bbbb9b383e3088c03deb3be32037dd08933c3d3ba08171d03e","heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","process-1.6.17.0","random-1.2.1.1-e2b8c23c50d3a2e2d7c30c46d2a3344a9c2a38bf319885311c62efb7342cb80b","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0","unordered-containers-0.2.19.1-0eb0d95c2f270578763e7cbc938fd7d57fa65a8f3c10aa64b616bc79bbf6b993","utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-e-shake-74d898c5705f61c05a8a7aee14d32e6ef38e5584b58da7af7f06efe4c3c36716","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","directory-1.3.8.1","extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","filepath-1.4.200.1","filepattern-0.1.3-e0b05225cb586afea88cbd5fba3b81dbc7d8925b44e8dd467cfd9ed208da351b","hashable-1.4.3.0-cf03199beb9180bbbb9b383e3088c03deb3be32037dd08933c3d3ba08171d03e","heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","process-1.6.17.0","random-1.2.1.1-e2b8c23c50d3a2e2d7c30c46d2a3344a9c2a38bf319885311c62efb7342cb80b","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0","unordered-containers-0.2.19.1-0eb0d95c2f270578763e7cbc938fd7d57fa65a8f3c10aa64b616bc79bbf6b993","utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/store/ghc-9.6.4/shake-0.19.7-e-shake-74d898c5705f61c05a8a7aee14d32e6ef38e5584b58da7af7f06efe4c3c36716/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","pkg-name":"splitmix","pkg-version":"0.1.0.5","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"bac0ae8d46a04e410666b0c8081cff63f060f29157983b569ca86ddb6e6e0dc6","pkg-src-sha256":"9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002","depends":["base-4.18.2.0","deepseq-1.4.8.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"stm-2.5.1.0","pkg-name":"stm","pkg-version":"2.5.1.0","depends":["array-0.5.6.0","base-4.18.2.0"]},{"type":"pre-existing","id":"system-cxx-std-lib-1.0","pkg-name":"system-cxx-std-lib","pkg-version":"1.0","depends":[]},{"type":"pre-existing","id":"template-haskell-2.20.0.0","pkg-name":"template-haskell","pkg-version":"2.20.0.0","depends":["base-4.18.2.0","ghc-boot-th-9.6.4","ghc-prim-0.10.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-2.0.2","pkg-name":"text","pkg-version":"2.0.2","depends":["array-0.5.6.0","base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","ghc-prim-0.10.0","system-cxx-std-lib-1.0","template-haskell-2.20.0.0"]},{"type":"pre-existing","id":"time-1.12.2","pkg-name":"time","pkg-version":"1.12.2","depends":["base-4.18.2.0","deepseq-1.4.8.1"]},{"type":"pre-existing","id":"transformers-0.6.1.0","pkg-name":"transformers","pkg-version":"0.6.1.0","depends":["base-4.18.2.0","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"unix-2.8.4.0","pkg-name":"unix","pkg-version":"2.8.4.0","depends":["base-4.18.2.0","bytestring-0.11.5.3","filepath-1.4.200.1","time-1.12.2"]},{"type":"configured","id":"unordered-containers-0.2.19.1-0eb0d95c2f270578763e7cbc938fd7d57fa65a8f3c10aa64b616bc79bbf6b993","pkg-name":"unordered-containers","pkg-version":"0.2.19.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1c28ca429e3960de0330908579a427ccacddd700cb84ec1969e2bbe576152add","pkg-src-sha256":"1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2","depends":["base-4.18.2.0","deepseq-1.4.8.1","hashable-1.4.3.0-cf03199beb9180bbbb9b383e3088c03deb3be32037dd08933c3d3ba08171d03e","template-haskell-2.20.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.18.2.0","bytestring-0.11.5.3"],"exe-depends":[],"component-name":"lib"}],"targets":[{"pkg-name":"Cabal","pkg-version":"3.10.1.0","component-name":"lib","available":[{"id":"Cabal-3.10.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"Cabal-syntax","pkg-version":"3.10.1.0","component-name":"lib","available":[{"id":"Cabal-syntax-3.10.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"lib","available":[{"id":"QuickCheck-2.14.3-116702925e70e233df64507a5cae969ff9c69efe35b3cc35e56c87d47168ff11","component-name":"lib","build-by-default":true}]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-gcoarbitrary","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-generators","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-gshrink","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-misc","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-monadfix","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-split","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-terminal","available":["TargetNotLocal"]},{"pkg-name":"array","pkg-version":"0.5.6.0","component-name":"lib","available":[{"id":"array-0.5.6.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base","pkg-version":"4.18.2.0","component-name":"lib","available":[{"id":"base-4.18.2.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","component-name":"lib","available":[{"id":"base16-bytestring-1.0.2.0-48e234cd9d2674d718111ce6f52d0142cc28a3c5a0493618f8fb6a8b7f7dd1f7","component-name":"lib","build-by-default":true}]},{"pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"binary","pkg-version":"0.8.9.1","component-name":"lib","available":[{"id":"binary-0.8.9.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"bytestring","pkg-version":"0.11.5.3","component-name":"lib","available":[{"id":"bytestring-0.11.5.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"lib","available":[{"id":"clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","component-name":"lib","build-by-default":true}]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"containers","pkg-version":"0.6.7","component-name":"lib","available":[{"id":"containers-0.6.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","component-name":"lib","available":[{"id":"cryptohash-sha256-0.11.102.1-898616048405d66a1ac2538c4878965bc94c2902780e27b3e48e171cdfe34cf8","component-name":"lib","build-by-default":true}]},{"pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","component-name":"exe:sha256sum","available":["TargetNotBuildable"]},{"pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","component-name":"test:test-sha256","available":["TargetNotLocal"]},{"pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","component-name":"bench:bench-sha256","available":["TargetNotLocal"]},{"pkg-name":"deepseq","pkg-version":"1.4.8.1","component-name":"lib","available":[{"id":"deepseq-1.4.8.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory","pkg-version":"1.3.8.1","component-name":"lib","available":[{"id":"directory-1.3.8.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"exceptions","pkg-version":"0.10.7","component-name":"lib","available":[{"id":"exceptions-0.10.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"extra","pkg-version":"1.7.14","component-name":"lib","available":[{"id":"extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","component-name":"lib","build-by-default":true}]},{"pkg-name":"extra","pkg-version":"1.7.14","component-name":"test:extra-test","available":["TargetNotLocal"]},{"pkg-name":"filepath","pkg-version":"1.4.200.1","component-name":"lib","available":[{"id":"filepath-1.4.200.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"filepattern","pkg-version":"0.1.3","component-name":"lib","available":[{"id":"filepattern-0.1.3-e0b05225cb586afea88cbd5fba3b81dbc7d8925b44e8dd467cfd9ed208da351b","component-name":"lib","build-by-default":true}]},{"pkg-name":"filepattern","pkg-version":"0.1.3","component-name":"test:filepattern-test","available":["TargetNotLocal"]},{"pkg-name":"ghc-bignum","pkg-version":"1.3","component-name":"lib","available":[{"id":"ghc-bignum-1.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-boot-th","pkg-version":"9.6.4","component-name":"lib","available":[{"id":"ghc-boot-th-9.6.4","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-platform","pkg-version":"0.1.0.0","component-name":"lib","available":[{"id":"ghc-platform-0.1.0.0-inplace","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-prim","pkg-version":"0.10.0","component-name":"lib","available":[{"id":"ghc-prim-0.10.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-toolchain","pkg-version":"0.1.0.0","component-name":"lib","available":[{"id":"ghc-toolchain-0.1.0.0-inplace","component-name":"lib","build-by-default":true}]},{"pkg-name":"hadrian","pkg-version":"0.1.0.0","component-name":"exe:hadrian","available":[{"id":"hadrian-0.1.0.0-inplace-hadrian","component-name":"exe:hadrian","build-by-default":true}]},{"pkg-name":"hashable","pkg-version":"1.4.3.0","component-name":"lib","available":[{"id":"hashable-1.4.3.0-cf03199beb9180bbbb9b383e3088c03deb3be32037dd08933c3d3ba08171d03e","component-name":"lib","build-by-default":true}]},{"pkg-name":"hashable","pkg-version":"1.4.3.0","component-name":"test:hashable-examples","available":["TargetNotLocal"]},{"pkg-name":"hashable","pkg-version":"1.4.3.0","component-name":"test:hashable-tests","available":["TargetNotLocal"]},{"pkg-name":"heaps","pkg-version":"0.4","component-name":"lib","available":[{"id":"heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-dgtable","pkg-version":"0.5.2","component-name":"lib","available":[{"id":"js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-dgtable","pkg-version":"0.5.2","component-name":"test:js-dgtable-test","available":["TargetNotLocal"]},{"pkg-name":"js-flot","pkg-version":"0.8.3","component-name":"lib","available":[{"id":"js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-flot","pkg-version":"0.8.3","component-name":"test:js-flot-test","available":["TargetNotLocal"]},{"pkg-name":"js-jquery","pkg-version":"3.3.1","component-name":"lib","available":[{"id":"js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-jquery","pkg-version":"3.3.1","component-name":"test:js-jquery-test","available":["TargetNotLocal"]},{"pkg-name":"mtl","pkg-version":"2.3.1","component-name":"lib","available":[{"id":"mtl-2.3.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"parsec","pkg-version":"3.1.16.1","component-name":"lib","available":[{"id":"parsec-3.1.16.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"pretty","pkg-version":"1.1.3.6","component-name":"lib","available":[{"id":"pretty-1.1.3.6","component-name":"lib","build-by-default":true}]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"lib","available":[{"id":"primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","component-name":"lib","build-by-default":true}]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"test:test-qc","available":["TargetNotLocal"]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"process","pkg-version":"1.6.17.0","component-name":"lib","available":[{"id":"process-1.6.17.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"lib","available":[{"id":"random-1.2.1.1-e2b8c23c50d3a2e2d7c30c46d2a3344a9c2a38bf319885311c62efb7342cb80b","component-name":"lib","build-by-default":true}]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:legacy-test","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:spec-inspection","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"bench:legacy-bench","available":["TargetNotLocal"]},{"pkg-name":"shake","pkg-version":"0.19.7","component-name":"lib","available":[{"id":"shake-0.19.7-9369313762a66f683383a6b11b819b9aafcd8f0d518c176b2cb1f5a198ccf8cd","component-name":"lib","build-by-default":true}]},{"pkg-name":"shake","pkg-version":"0.19.7","component-name":"exe:shake","available":[{"id":"shake-0.19.7-e-shake-74d898c5705f61c05a8a7aee14d32e6ef38e5584b58da7af7f06efe4c3c36716","component-name":"exe:shake","build-by-default":true}]},{"pkg-name":"shake","pkg-version":"0.19.7","component-name":"test:shake-test","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"lib","available":[{"id":"splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","component-name":"lib","build-by-default":true}]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:examples","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:initialization","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:montecarlo-pi","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:montecarlo-pi-32","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-dieharder","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-tests","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-testu01","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:comparison","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:range","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:simple-sum","available":["TargetNotLocal"]},{"pkg-name":"stm","pkg-version":"2.5.1.0","component-name":"lib","available":[{"id":"stm-2.5.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"system-cxx-std-lib","pkg-version":"1.0","component-name":"lib","available":[{"id":"system-cxx-std-lib-1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"template-haskell","pkg-version":"2.20.0.0","component-name":"lib","available":[{"id":"template-haskell-2.20.0.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"text","pkg-version":"2.0.2","component-name":"lib","available":[{"id":"text-2.0.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"time","pkg-version":"1.12.2","component-name":"lib","available":[{"id":"time-1.12.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"transformers","pkg-version":"0.6.1.0","component-name":"lib","available":[{"id":"transformers-0.6.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix","pkg-version":"2.8.4.0","component-name":"lib","available":[{"id":"unix-2.8.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"unordered-containers","pkg-version":"0.2.19.1","component-name":"lib","available":[{"id":"unordered-containers-0.2.19.1-0eb0d95c2f270578763e7cbc938fd7d57fa65a8f3c10aa64b616bc79bbf6b993","component-name":"lib","build-by-default":true}]},{"pkg-name":"unordered-containers","pkg-version":"0.2.19.1","component-name":"test:unordered-containers-tests","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.19.1","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"utf8-string","pkg-version":"1.0.2","component-name":"lib","available":[{"id":"utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05","component-name":"lib","build-by-default":true}]},{"pkg-name":"utf8-string","pkg-version":"1.0.2","component-name":"test:unit-tests","available":["TargetNotLocal"]}]} \ No newline at end of file diff --git a/materialized/ghc964/hadrian-ghc94/hadrian/default.nix b/materialized/ghc964/hadrian-ghc94/hadrian/default.nix index eeec4eca3e..6b8e6fd8cb 100644 --- a/materialized/ghc964/hadrian-ghc94/hadrian/default.nix +++ b/materialized/ghc964/hadrian-ghc94/hadrian/default.nix @@ -80,6 +80,25 @@ extras = hackage: { packages = { hadrian = ./.plan.nix/hadrian.nix; }; }; modules = [ + { + preExistingPkgs = [ + "ghc-prim" + "time" + "base" + "ghc-boot-th" + "pretty" + "stm" + "template-haskell" + "system-cxx-std-lib" + "deepseq" + "text" + "containers" + "array" + "bytestring" + "ghc-bignum" + "binary" + ]; + } ({ lib, ... }: { packages = { diff --git a/materialized/ghc964/hadrian-ghc94/plan.json b/materialized/ghc964/hadrian-ghc94/plan.json new file mode 100644 index 0000000000..f6763a901b --- /dev/null +++ b/materialized/ghc964/hadrian-ghc94/plan.json @@ -0,0 +1 @@ +{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-9.6.4","os":"linux","arch":"x86_64","install-plan":[{"type":"configured","id":"Cabal-3.8.1.0-b9660a1d59e5e89ca97a8504aaf0b5d036a399fd65d690e89579547c13736faa","pkg-name":"Cabal","pkg-version":"3.8.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"77121d8e1aff14a0fd95684b751599db78a7dd26d55862d9fcef27c88b193e9d","pkg-src-sha256":"7464cbe6c2f3d7e5d0232023a1a7330621f8b24853cb259fc89a2af85b736608","depends":["Cabal-syntax-3.8.1.0-5335b17974246b150c558793880dbd690d9bb5cd3cb93a0f312cfdcb518a619b","array-0.5.6.0","base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","directory-1.3.8.1-dce2490f9b9b46eb5ca4c6855ae28c4f4cbc258ebd96c8c85c5b8c1604de0c9e","filepath-1.4.100.4-684dc9cfc41e6368b175870d3cc6e6636e80f309833f43b294d93519fd277673","mtl-2.2.2-bd3261ad8b9db841cd32623ed041dba3290ad7e9eab162b0b2519de5890f36c5","parsec-3.1.17.0-86f3f3d7362b3b6cd0625242923e563af47ae07a1954b0930fa2e1add151b4f2","pretty-1.1.3.6","process-1.6.18.0-24593d14b1461232a4223b7d859f951d62fafb7c2e4fe9543b43a1f4976414d0","text-2.0.2","time-1.12.2","transformers-0.5.6.2-55e06373e9f8b851d660815c23b29c4aedf2edf520a16438a77576432b6b7e88","unix-2.8.3.0-de12b755bfc83ca9f83e1597ece1b920bd874728bf4c6fbe1cfc8e169d17e1af"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"Cabal-syntax-3.8.1.0-5335b17974246b150c558793880dbd690d9bb5cd3cb93a0f312cfdcb518a619b","pkg-name":"Cabal-syntax","pkg-version":"3.8.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ed2d937ba6c6a20b75850349eedd41374885fc42369ef152d69e2ba70f44f593","pkg-src-sha256":"07e8ddb19fe01781485f1522b6afc22aba680b0ab28ebe6bbfb84a2dd698ce0f","depends":["array-0.5.6.0","base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","directory-1.3.8.1-dce2490f9b9b46eb5ca4c6855ae28c4f4cbc258ebd96c8c85c5b8c1604de0c9e","filepath-1.4.100.4-684dc9cfc41e6368b175870d3cc6e6636e80f309833f43b294d93519fd277673","mtl-2.2.2-bd3261ad8b9db841cd32623ed041dba3290ad7e9eab162b0b2519de5890f36c5","parsec-3.1.17.0-86f3f3d7362b3b6cd0625242923e563af47ae07a1954b0930fa2e1add151b4f2","pretty-1.1.3.6","text-2.0.2","time-1.12.2","transformers-0.5.6.2-55e06373e9f8b851d660815c23b29c4aedf2edf520a16438a77576432b6b7e88","unix-2.8.3.0-de12b755bfc83ca9f83e1597ece1b920bd874728bf4c6fbe1cfc8e169d17e1af"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"QuickCheck-2.14.3-e273f27661514201f089ac7929c1cf7842cd4d7d11880d3975d02132d9646641","pkg-name":"QuickCheck","pkg-version":"2.14.3","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f03d2f404d5ba465453d0fbc1944832789a759fe7c4f9bf8616bc1378a02fde4","pkg-src-sha256":"5c0f22b36b28a1a8fa110b3819818d3f29494a3b0dedbae299f064123ca70501","depends":["base-4.18.2.0","containers-0.6.7","deepseq-1.4.8.1","random-1.2.1.1-e5b5a07d910cd04b47ccdff1ca05127c7c7b47a7444f9ac083587e927aabf24d","splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","template-haskell-2.20.0.0","transformers-0.5.6.2-55e06373e9f8b851d660815c23b29c4aedf2edf520a16438a77576432b6b7e88"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.6.0","pkg-name":"array","pkg-version":"0.5.6.0","depends":["base-4.18.2.0"]},{"type":"pre-existing","id":"base-4.18.2.0","pkg-name":"base","pkg-version":"4.18.2.0","depends":["ghc-bignum-1.3","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"binary-0.8.9.1","pkg-name":"binary","pkg-version":"0.8.9.1","depends":["array-0.5.6.0","base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"bytestring-0.11.5.3","pkg-name":"bytestring","pkg-version":"0.11.5.3","depends":["base-4.18.2.0","deepseq-1.4.8.1","ghc-prim-0.10.0","template-haskell-2.20.0.0"]},{"type":"configured","id":"clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","pkg-name":"clock","pkg-version":"0.8.4","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b938655b00cf204ce69abfff946021bed111d2609a9f7a9c22e28a1a202e9115","pkg-src-sha256":"6ae9898afe788a5e334cd5fad5d18a3c2e8e59fa09aaf7b957dbb38a4767df2e","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.7","pkg-name":"containers","pkg-version":"0.6.7","depends":["array-0.5.6.0","base-4.18.2.0","deepseq-1.4.8.1","template-haskell-2.20.0.0"]},{"type":"pre-existing","id":"deepseq-1.4.8.1","pkg-name":"deepseq","pkg-version":"1.4.8.1","depends":["array-0.5.6.0","base-4.18.2.0","ghc-prim-0.10.0"]},{"type":"configured","id":"directory-1.3.8.1-dce2490f9b9b46eb5ca4c6855ae28c4f4cbc258ebd96c8c85c5b8c1604de0c9e","pkg-name":"directory","pkg-version":"1.3.8.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"bd3b0a0947a365d2da80b9f4a960a864d42ffa7a46577fdc7a0611703486a7f9","pkg-src-sha256":"bd8253197587d32d4553070d2de89d3817176860932b0e9ab7bb7ba3759d8e9c","components":{"lib":{"depends":["base-4.18.2.0","filepath-1.4.100.4-684dc9cfc41e6368b175870d3cc6e6636e80f309833f43b294d93519fd277673","time-1.12.2","unix-2.8.3.0-de12b755bfc83ca9f83e1597ece1b920bd874728bf4c6fbe1cfc8e169d17e1af"],"exe-depends":[]}}},{"type":"configured","id":"exceptions-0.10.7-d8e618fd9c29202aabe4fde627f648fe39ae30a4d2131b11be06ec962080d69f","pkg-name":"exceptions","pkg-version":"0.10.7","flags":{"transformers-0-4":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"60ccc2277f8fa98a1a03c42afd9c589ba33ce208eaaef7d69bfbb42ce09d1816","pkg-src-sha256":"9a42ade4c8b53d8da5350e8e0e2929f4ef128c4b8591b120656455310b546049","depends":["base-4.18.2.0","mtl-2.2.2-bd3261ad8b9db841cd32623ed041dba3290ad7e9eab162b0b2519de5890f36c5","stm-2.5.1.0","template-haskell-2.20.0.0","transformers-0.5.6.2-55e06373e9f8b851d660815c23b29c4aedf2edf520a16438a77576432b6b7e88"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"extra-1.7.14-042f04d0cdbffd8f46e0a9c52040823d92cf8a258316fb3b900251bbd230abfb","pkg-name":"extra","pkg-version":"1.7.14","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e3d3ce1dc7746b1132930e48c59fb5e8c51a09e92e0c031316be031067a273fb","pkg-src-sha256":"b6a909f8f0e4b8076a1653b4d34815a782f0a8c1e83d5267f4d00496471ef567","depends":["base-4.18.2.0","clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","directory-1.3.8.1-dce2490f9b9b46eb5ca4c6855ae28c4f4cbc258ebd96c8c85c5b8c1604de0c9e","filepath-1.4.100.4-684dc9cfc41e6368b175870d3cc6e6636e80f309833f43b294d93519fd277673","process-1.6.18.0-24593d14b1461232a4223b7d859f951d62fafb7c2e4fe9543b43a1f4976414d0","time-1.12.2","unix-2.8.3.0-de12b755bfc83ca9f83e1597ece1b920bd874728bf4c6fbe1cfc8e169d17e1af"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"filepath-1.4.100.4-684dc9cfc41e6368b175870d3cc6e6636e80f309833f43b294d93519fd277673","pkg-name":"filepath","pkg-version":"1.4.100.4","flags":{"cpphs":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2de84756d3907308230e34fcc7c1917a73f218f6d53838618b7d5b95dd33e2c3","pkg-src-sha256":"82876250347c2fdf0f9de5448ce44f02539f37951b671d9a30719a6c4f96e9ad","depends":["base-4.18.2.0","bytestring-0.11.5.3","deepseq-1.4.8.1","exceptions-0.10.7-d8e618fd9c29202aabe4fde627f648fe39ae30a4d2131b11be06ec962080d69f","template-haskell-2.20.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"filepattern-0.1.3-96a0576cb8a211fdb1da735eaa691994aec2506470939db5f5459e1488b8d590","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.18.2.0","directory-1.3.8.1-dce2490f9b9b46eb5ca4c6855ae28c4f4cbc258ebd96c8c85c5b8c1604de0c9e","extra-1.7.14-042f04d0cdbffd8f46e0a9c52040823d92cf8a258316fb3b900251bbd230abfb","filepath-1.4.100.4-684dc9cfc41e6368b175870d3cc6e6636e80f309833f43b294d93519fd277673"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.3","pkg-name":"ghc-bignum","pkg-version":"1.3","depends":["ghc-prim-0.10.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.6.4","pkg-name":"ghc-boot-th","pkg-version":"9.6.4","depends":["base-4.18.2.0"]},{"type":"pre-existing","id":"ghc-prim-0.10.0","pkg-name":"ghc-prim","pkg-version":"0.10.0","depends":[]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"./hadrian/."},"dist-dir":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian","build-info":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.8.1.0-b9660a1d59e5e89ca97a8504aaf0b5d036a399fd65d690e89579547c13736faa","QuickCheck-2.14.3-e273f27661514201f089ac7929c1cf7842cd4d7d11880d3975d02132d9646641","base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","directory-1.3.8.1-dce2490f9b9b46eb5ca4c6855ae28c4f4cbc258ebd96c8c85c5b8c1604de0c9e","extra-1.7.14-042f04d0cdbffd8f46e0a9c52040823d92cf8a258316fb3b900251bbd230abfb","filepath-1.4.100.4-684dc9cfc41e6368b175870d3cc6e6636e80f309833f43b294d93519fd277673","mtl-2.2.2-bd3261ad8b9db841cd32623ed041dba3290ad7e9eab162b0b2519de5890f36c5","parsec-3.1.17.0-86f3f3d7362b3b6cd0625242923e563af47ae07a1954b0930fa2e1add151b4f2","shake-0.19.7-5bd388776e9de85134fb9a1252dbec6017b43c187e99a683dabfc71239bc1d74","text-2.0.2","transformers-0.5.6.2-55e06373e9f8b851d660815c23b29c4aedf2edf520a16438a77576432b6b7e88","unordered-containers-0.2.19.1-5c3a294a1debe70632d1827ee63ece6b68e15cfddbd6c14f409180c3fbc50ebd"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.4.3.0-590ef3d2265671c3b40e6e564000da8fa428936fcefe2a71f270d0ace1487860","pkg-name":"hashable","pkg-version":"1.4.3.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f3bf68acfa0df7a064a378ef2cdcfeb55e6fb96100675f4c593556dcbf3d7194","pkg-src-sha256":"32efb16c2891786209b7cbe5c39df9b3a9ae51e836f1a54f646bc4602b7ab0f5","depends":["base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","filepath-1.4.100.4-684dc9cfc41e6368b175870d3cc6e6636e80f309833f43b294d93519fd277673","ghc-bignum-1.3","ghc-prim-0.10.0","text-2.0.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"mtl-2.2.2-bd3261ad8b9db841cd32623ed041dba3290ad7e9eab162b0b2519de5890f36c5","pkg-name":"mtl","pkg-version":"2.2.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1050fb71acd9f5d67da7d992583f5bd0eb14407b9dc7acc122af1b738b706ca3","pkg-src-sha256":"8803f48a8ed33296c3a3272f448198737a287ec31baa901af09e2118c829bef6","depends":["base-4.18.2.0","transformers-0.5.6.2-55e06373e9f8b851d660815c23b29c4aedf2edf520a16438a77576432b6b7e88"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"parsec-3.1.17.0-86f3f3d7362b3b6cd0625242923e563af47ae07a1954b0930fa2e1add151b4f2","pkg-name":"parsec","pkg-version":"3.1.17.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6cf18e59d9f1c5b40385457b82ab679dc18d3c5bd3c2c67b2f94e1e8732e6624","pkg-src-sha256":"58c500bec1ec3c849c8243ddfd675a5983b17a8e5da55acea6adade5ae179d36","depends":["base-4.18.2.0","bytestring-0.11.5.3","mtl-2.2.2-bd3261ad8b9db841cd32623ed041dba3290ad7e9eab162b0b2519de5890f36c5","text-2.0.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.18.2.0","deepseq-1.4.8.1","ghc-prim-0.10.0"]},{"type":"configured","id":"primitive-0.9.0.0-70ec9a6b87334899fd5e7d03687290ac2d4d46d3abfc44b5ec78067ea85f53e0","pkg-name":"primitive","pkg-version":"0.9.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1ceb39f67c0e614180f2992a6d30f26603ab2cd23c4f8e25b30213f98807f6f1","pkg-src-sha256":"696d4bd291c94d736142d6182117dca4258d3ef28bfefdb649ac8b5ecd0999c7","depends":["base-4.18.2.0","deepseq-1.4.8.1","template-haskell-2.20.0.0","transformers-0.5.6.2-55e06373e9f8b851d660815c23b29c4aedf2edf520a16438a77576432b6b7e88"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"process-1.6.18.0-24593d14b1461232a4223b7d859f951d62fafb7c2e4fe9543b43a1f4976414d0","pkg-name":"process","pkg-version":"1.6.18.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"cd0a3e0376b5a8525983d3131a31e52f9ffefc278ce635eec45a9d3987b8be3e","pkg-src-sha256":"aa5f4c4fe4974f89f5ab998c7509daa4bda3926cfb06daacd5eba892aad8a37e","components":{"lib":{"depends":["base-4.18.2.0","deepseq-1.4.8.1","directory-1.3.8.1-dce2490f9b9b46eb5ca4c6855ae28c4f4cbc258ebd96c8c85c5b8c1604de0c9e","filepath-1.4.100.4-684dc9cfc41e6368b175870d3cc6e6636e80f309833f43b294d93519fd277673","unix-2.8.3.0-de12b755bfc83ca9f83e1597ece1b920bd874728bf4c6fbe1cfc8e169d17e1af"],"exe-depends":[]}}},{"type":"configured","id":"random-1.2.1.1-e5b5a07d910cd04b47ccdff1ca05127c7c7b47a7444f9ac083587e927aabf24d","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e7c1f881159d5cc788619c9ee8b8f340ba2ff0db571cdf3d1a1968ebc5108789","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.18.2.0","bytestring-0.11.5.3","deepseq-1.4.8.1","mtl-2.2.2-bd3261ad8b9db841cd32623ed041dba3290ad7e9eab162b0b2519de5890f36c5","splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-5bd388776e9de85134fb9a1252dbec6017b43c187e99a683dabfc71239bc1d74","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","directory-1.3.8.1-dce2490f9b9b46eb5ca4c6855ae28c4f4cbc258ebd96c8c85c5b8c1604de0c9e","extra-1.7.14-042f04d0cdbffd8f46e0a9c52040823d92cf8a258316fb3b900251bbd230abfb","filepath-1.4.100.4-684dc9cfc41e6368b175870d3cc6e6636e80f309833f43b294d93519fd277673","filepattern-0.1.3-96a0576cb8a211fdb1da735eaa691994aec2506470939db5f5459e1488b8d590","hashable-1.4.3.0-590ef3d2265671c3b40e6e564000da8fa428936fcefe2a71f270d0ace1487860","heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","primitive-0.9.0.0-70ec9a6b87334899fd5e7d03687290ac2d4d46d3abfc44b5ec78067ea85f53e0","process-1.6.18.0-24593d14b1461232a4223b7d859f951d62fafb7c2e4fe9543b43a1f4976414d0","random-1.2.1.1-e5b5a07d910cd04b47ccdff1ca05127c7c7b47a7444f9ac083587e927aabf24d","time-1.12.2","transformers-0.5.6.2-55e06373e9f8b851d660815c23b29c4aedf2edf520a16438a77576432b6b7e88","unix-2.8.3.0-de12b755bfc83ca9f83e1597ece1b920bd874728bf4c6fbe1cfc8e169d17e1af","unordered-containers-0.2.19.1-5c3a294a1debe70632d1827ee63ece6b68e15cfddbd6c14f409180c3fbc50ebd","utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-e-shake-d498dbb71d46a4db538efddd7403181735fc0702c3e509999695c166ef8cf28c","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","directory-1.3.8.1-dce2490f9b9b46eb5ca4c6855ae28c4f4cbc258ebd96c8c85c5b8c1604de0c9e","extra-1.7.14-042f04d0cdbffd8f46e0a9c52040823d92cf8a258316fb3b900251bbd230abfb","filepath-1.4.100.4-684dc9cfc41e6368b175870d3cc6e6636e80f309833f43b294d93519fd277673","filepattern-0.1.3-96a0576cb8a211fdb1da735eaa691994aec2506470939db5f5459e1488b8d590","hashable-1.4.3.0-590ef3d2265671c3b40e6e564000da8fa428936fcefe2a71f270d0ace1487860","heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","primitive-0.9.0.0-70ec9a6b87334899fd5e7d03687290ac2d4d46d3abfc44b5ec78067ea85f53e0","process-1.6.18.0-24593d14b1461232a4223b7d859f951d62fafb7c2e4fe9543b43a1f4976414d0","random-1.2.1.1-e5b5a07d910cd04b47ccdff1ca05127c7c7b47a7444f9ac083587e927aabf24d","time-1.12.2","transformers-0.5.6.2-55e06373e9f8b851d660815c23b29c4aedf2edf520a16438a77576432b6b7e88","unix-2.8.3.0-de12b755bfc83ca9f83e1597ece1b920bd874728bf4c6fbe1cfc8e169d17e1af","unordered-containers-0.2.19.1-5c3a294a1debe70632d1827ee63ece6b68e15cfddbd6c14f409180c3fbc50ebd","utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/store/ghc-9.6.4/shake-0.19.7-e-shake-d498dbb71d46a4db538efddd7403181735fc0702c3e509999695c166ef8cf28c/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","pkg-name":"splitmix","pkg-version":"0.1.0.5","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"bac0ae8d46a04e410666b0c8081cff63f060f29157983b569ca86ddb6e6e0dc6","pkg-src-sha256":"9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002","depends":["base-4.18.2.0","deepseq-1.4.8.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"stm-2.5.1.0","pkg-name":"stm","pkg-version":"2.5.1.0","depends":["array-0.5.6.0","base-4.18.2.0"]},{"type":"pre-existing","id":"system-cxx-std-lib-1.0","pkg-name":"system-cxx-std-lib","pkg-version":"1.0","depends":[]},{"type":"pre-existing","id":"template-haskell-2.20.0.0","pkg-name":"template-haskell","pkg-version":"2.20.0.0","depends":["base-4.18.2.0","ghc-boot-th-9.6.4","ghc-prim-0.10.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-2.0.2","pkg-name":"text","pkg-version":"2.0.2","depends":["array-0.5.6.0","base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","ghc-prim-0.10.0","system-cxx-std-lib-1.0","template-haskell-2.20.0.0"]},{"type":"pre-existing","id":"time-1.12.2","pkg-name":"time","pkg-version":"1.12.2","depends":["base-4.18.2.0","deepseq-1.4.8.1"]},{"type":"configured","id":"transformers-0.5.6.2-55e06373e9f8b851d660815c23b29c4aedf2edf520a16438a77576432b6b7e88","pkg-name":"transformers","pkg-version":"0.5.6.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6c959d14430f4deffb99579ba019de07c3d852a2122b6f449344386c7d75ff1d","pkg-src-sha256":"b668795d600297e4c8a7fd55a107b9827b2c52c0bc14c5ea0d65e20e6691c66c","components":{"lib":{"depends":["base-4.18.2.0"],"exe-depends":[]}}},{"type":"configured","id":"unix-2.8.3.0-de12b755bfc83ca9f83e1597ece1b920bd874728bf4c6fbe1cfc8e169d17e1af","pkg-name":"unix","pkg-version":"2.8.3.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6dfdbb57fcfe5b0b6ecdaf633bc1cceb98a87800a22544f42354375016c6e66c","pkg-src-sha256":"a9dc7868d42ec10e38c4d785eaec7f98d401590d4ebfd8f17ef59da3f18a5dab","components":{"lib":{"depends":["base-4.18.2.0","bytestring-0.11.5.3","filepath-1.4.100.4-684dc9cfc41e6368b175870d3cc6e6636e80f309833f43b294d93519fd277673","time-1.12.2"],"exe-depends":[]}}},{"type":"configured","id":"unordered-containers-0.2.19.1-5c3a294a1debe70632d1827ee63ece6b68e15cfddbd6c14f409180c3fbc50ebd","pkg-name":"unordered-containers","pkg-version":"0.2.19.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1c28ca429e3960de0330908579a427ccacddd700cb84ec1969e2bbe576152add","pkg-src-sha256":"1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2","depends":["base-4.18.2.0","deepseq-1.4.8.1","hashable-1.4.3.0-590ef3d2265671c3b40e6e564000da8fa428936fcefe2a71f270d0ace1487860","template-haskell-2.20.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.18.2.0","bytestring-0.11.5.3"],"exe-depends":[],"component-name":"lib"}],"targets":[{"pkg-name":"Cabal","pkg-version":"3.8.1.0","component-name":"lib","available":[{"id":"Cabal-3.8.1.0-b9660a1d59e5e89ca97a8504aaf0b5d036a399fd65d690e89579547c13736faa","component-name":"lib","build-by-default":true}]},{"pkg-name":"Cabal-syntax","pkg-version":"3.8.1.0","component-name":"lib","available":[{"id":"Cabal-syntax-3.8.1.0-5335b17974246b150c558793880dbd690d9bb5cd3cb93a0f312cfdcb518a619b","component-name":"lib","build-by-default":true}]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"lib","available":[{"id":"QuickCheck-2.14.3-e273f27661514201f089ac7929c1cf7842cd4d7d11880d3975d02132d9646641","component-name":"lib","build-by-default":true}]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-gcoarbitrary","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-generators","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-gshrink","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-misc","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-monadfix","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-split","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-terminal","available":["TargetNotLocal"]},{"pkg-name":"array","pkg-version":"0.5.6.0","component-name":"lib","available":[{"id":"array-0.5.6.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base","pkg-version":"4.18.2.0","component-name":"lib","available":[{"id":"base-4.18.2.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"binary","pkg-version":"0.8.9.1","component-name":"lib","available":[{"id":"binary-0.8.9.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"bytestring","pkg-version":"0.11.5.3","component-name":"lib","available":[{"id":"bytestring-0.11.5.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"lib","available":[{"id":"clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","component-name":"lib","build-by-default":true}]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"containers","pkg-version":"0.6.7","component-name":"lib","available":[{"id":"containers-0.6.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"deepseq","pkg-version":"1.4.8.1","component-name":"lib","available":[{"id":"deepseq-1.4.8.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory","pkg-version":"1.3.8.1","component-name":"lib","available":[{"id":"directory-1.3.8.1-dce2490f9b9b46eb5ca4c6855ae28c4f4cbc258ebd96c8c85c5b8c1604de0c9e","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory","pkg-version":"1.3.8.1","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"exceptions","pkg-version":"0.10.7","component-name":"lib","available":[{"id":"exceptions-0.10.7-d8e618fd9c29202aabe4fde627f648fe39ae30a4d2131b11be06ec962080d69f","component-name":"lib","build-by-default":true}]},{"pkg-name":"exceptions","pkg-version":"0.10.7","component-name":"test:exceptions-tests","available":["TargetNotLocal"]},{"pkg-name":"extra","pkg-version":"1.7.14","component-name":"lib","available":[{"id":"extra-1.7.14-042f04d0cdbffd8f46e0a9c52040823d92cf8a258316fb3b900251bbd230abfb","component-name":"lib","build-by-default":true}]},{"pkg-name":"extra","pkg-version":"1.7.14","component-name":"test:extra-test","available":["TargetNotLocal"]},{"pkg-name":"filepath","pkg-version":"1.4.100.4","component-name":"lib","available":[{"id":"filepath-1.4.100.4-684dc9cfc41e6368b175870d3cc6e6636e80f309833f43b294d93519fd277673","component-name":"lib","build-by-default":true}]},{"pkg-name":"filepath","pkg-version":"1.4.100.4","component-name":"test:abstract-filepath","available":["TargetNotLocal"]},{"pkg-name":"filepath","pkg-version":"1.4.100.4","component-name":"test:bytestring-tests","available":["TargetNotLocal"]},{"pkg-name":"filepath","pkg-version":"1.4.100.4","component-name":"test:filepath-equivalent-tests","available":["TargetNotLocal"]},{"pkg-name":"filepath","pkg-version":"1.4.100.4","component-name":"test:filepath-tests","available":["TargetNotLocal"]},{"pkg-name":"filepath","pkg-version":"1.4.100.4","component-name":"bench:bench-filepath","available":["TargetNotLocal"]},{"pkg-name":"filepattern","pkg-version":"0.1.3","component-name":"lib","available":[{"id":"filepattern-0.1.3-96a0576cb8a211fdb1da735eaa691994aec2506470939db5f5459e1488b8d590","component-name":"lib","build-by-default":true}]},{"pkg-name":"filepattern","pkg-version":"0.1.3","component-name":"test:filepattern-test","available":["TargetNotLocal"]},{"pkg-name":"ghc-bignum","pkg-version":"1.3","component-name":"lib","available":[{"id":"ghc-bignum-1.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-boot-th","pkg-version":"9.6.4","component-name":"lib","available":[{"id":"ghc-boot-th-9.6.4","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-prim","pkg-version":"0.10.0","component-name":"lib","available":[{"id":"ghc-prim-0.10.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"hadrian","pkg-version":"0.1.0.0","component-name":"exe:hadrian","available":[{"id":"hadrian-0.1.0.0-inplace-hadrian","component-name":"exe:hadrian","build-by-default":true}]},{"pkg-name":"hashable","pkg-version":"1.4.3.0","component-name":"lib","available":[{"id":"hashable-1.4.3.0-590ef3d2265671c3b40e6e564000da8fa428936fcefe2a71f270d0ace1487860","component-name":"lib","build-by-default":true}]},{"pkg-name":"hashable","pkg-version":"1.4.3.0","component-name":"test:hashable-examples","available":["TargetNotLocal"]},{"pkg-name":"hashable","pkg-version":"1.4.3.0","component-name":"test:hashable-tests","available":["TargetNotLocal"]},{"pkg-name":"heaps","pkg-version":"0.4","component-name":"lib","available":[{"id":"heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-dgtable","pkg-version":"0.5.2","component-name":"lib","available":[{"id":"js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-dgtable","pkg-version":"0.5.2","component-name":"test:js-dgtable-test","available":["TargetNotLocal"]},{"pkg-name":"js-flot","pkg-version":"0.8.3","component-name":"lib","available":[{"id":"js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-flot","pkg-version":"0.8.3","component-name":"test:js-flot-test","available":["TargetNotLocal"]},{"pkg-name":"js-jquery","pkg-version":"3.3.1","component-name":"lib","available":[{"id":"js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-jquery","pkg-version":"3.3.1","component-name":"test:js-jquery-test","available":["TargetNotLocal"]},{"pkg-name":"mtl","pkg-version":"2.2.2","component-name":"lib","available":[{"id":"mtl-2.2.2-bd3261ad8b9db841cd32623ed041dba3290ad7e9eab162b0b2519de5890f36c5","component-name":"lib","build-by-default":true}]},{"pkg-name":"parsec","pkg-version":"3.1.17.0","component-name":"lib","available":[{"id":"parsec-3.1.17.0-86f3f3d7362b3b6cd0625242923e563af47ae07a1954b0930fa2e1add151b4f2","component-name":"lib","build-by-default":true}]},{"pkg-name":"parsec","pkg-version":"3.1.17.0","component-name":"test:parsec-issue127","available":["TargetNotLocal"]},{"pkg-name":"parsec","pkg-version":"3.1.17.0","component-name":"test:parsec-issue171","available":["TargetNotLocal"]},{"pkg-name":"parsec","pkg-version":"3.1.17.0","component-name":"test:parsec-issue175","available":["TargetNotLocal"]},{"pkg-name":"parsec","pkg-version":"3.1.17.0","component-name":"test:parsec-tests","available":["TargetNotLocal"]},{"pkg-name":"pretty","pkg-version":"1.1.3.6","component-name":"lib","available":[{"id":"pretty-1.1.3.6","component-name":"lib","build-by-default":true}]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"lib","available":[{"id":"primitive-0.9.0.0-70ec9a6b87334899fd5e7d03687290ac2d4d46d3abfc44b5ec78067ea85f53e0","component-name":"lib","build-by-default":true}]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"test:test-qc","available":["TargetNotLocal"]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"process","pkg-version":"1.6.18.0","component-name":"lib","available":[{"id":"process-1.6.18.0-24593d14b1461232a4223b7d859f951d62fafb7c2e4fe9543b43a1f4976414d0","component-name":"lib","build-by-default":true}]},{"pkg-name":"process","pkg-version":"1.6.18.0","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"lib","available":[{"id":"random-1.2.1.1-e5b5a07d910cd04b47ccdff1ca05127c7c7b47a7444f9ac083587e927aabf24d","component-name":"lib","build-by-default":true}]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:legacy-test","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:spec-inspection","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"bench:legacy-bench","available":["TargetNotLocal"]},{"pkg-name":"shake","pkg-version":"0.19.7","component-name":"lib","available":[{"id":"shake-0.19.7-5bd388776e9de85134fb9a1252dbec6017b43c187e99a683dabfc71239bc1d74","component-name":"lib","build-by-default":true}]},{"pkg-name":"shake","pkg-version":"0.19.7","component-name":"exe:shake","available":[{"id":"shake-0.19.7-e-shake-d498dbb71d46a4db538efddd7403181735fc0702c3e509999695c166ef8cf28c","component-name":"exe:shake","build-by-default":true}]},{"pkg-name":"shake","pkg-version":"0.19.7","component-name":"test:shake-test","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"lib","available":[{"id":"splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","component-name":"lib","build-by-default":true}]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:examples","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:initialization","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:montecarlo-pi","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:montecarlo-pi-32","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-dieharder","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-tests","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-testu01","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:comparison","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:range","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:simple-sum","available":["TargetNotLocal"]},{"pkg-name":"stm","pkg-version":"2.5.1.0","component-name":"lib","available":[{"id":"stm-2.5.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"system-cxx-std-lib","pkg-version":"1.0","component-name":"lib","available":[{"id":"system-cxx-std-lib-1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"template-haskell","pkg-version":"2.20.0.0","component-name":"lib","available":[{"id":"template-haskell-2.20.0.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"text","pkg-version":"2.0.2","component-name":"lib","available":[{"id":"text-2.0.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"time","pkg-version":"1.12.2","component-name":"lib","available":[{"id":"time-1.12.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"transformers","pkg-version":"0.5.6.2","component-name":"lib","available":[{"id":"transformers-0.5.6.2-55e06373e9f8b851d660815c23b29c4aedf2edf520a16438a77576432b6b7e88","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"lib","available":[{"id":"unix-2.8.3.0-de12b755bfc83ca9f83e1597ece1b920bd874728bf4c6fbe1cfc8e169d17e1af","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"test:FdReadBuf001","available":["TargetNotLocal"]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"test:ForkProcess01","available":["TargetNotLocal"]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"test:Posix004","available":["TargetNotLocal"]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"test:Posix009","available":["TargetNotLocal"]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"test:Posix014","available":["TargetNotLocal"]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"test:PutEnv001","available":["TargetNotLocal"]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"test:ResourceLimit","available":["TargetNotLocal"]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"test:Semaphore001","available":["TargetNotLocal"]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"test:Semaphore002","available":["TargetNotLocal"]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"test:SemaphoreInterrupt","available":["TargetNotLocal"]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"test:Signals002","available":["TargetNotLocal"]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"test:Signals004","available":["TargetNotLocal"]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"test:T13660","available":["TargetNotLocal"]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"test:T8108","available":["TargetNotLocal"]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"test:Terminal","available":["TargetNotLocal"]},{"pkg-name":"unix","pkg-version":"2.8.3.0","component-name":"test:unix-tests","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.19.1","component-name":"lib","available":[{"id":"unordered-containers-0.2.19.1-5c3a294a1debe70632d1827ee63ece6b68e15cfddbd6c14f409180c3fbc50ebd","component-name":"lib","build-by-default":true}]},{"pkg-name":"unordered-containers","pkg-version":"0.2.19.1","component-name":"test:unordered-containers-tests","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.19.1","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"utf8-string","pkg-version":"1.0.2","component-name":"lib","available":[{"id":"utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05","component-name":"lib","build-by-default":true}]},{"pkg-name":"utf8-string","pkg-version":"1.0.2","component-name":"test:unit-tests","available":["TargetNotLocal"]}]} \ No newline at end of file diff --git a/materialized/ghc964/hadrian-ghc96/hadrian/default.nix b/materialized/ghc964/hadrian-ghc96/hadrian/default.nix index e20361dbf3..ca057a5d6b 100644 --- a/materialized/ghc964/hadrian-ghc96/hadrian/default.nix +++ b/materialized/ghc964/hadrian-ghc96/hadrian/default.nix @@ -86,6 +86,33 @@ extras = hackage: { packages = { hadrian = ./.plan.nix/hadrian.nix; }; }; modules = [ + { + preExistingPkgs = [ + "ghc-prim" + "transformers" + "time" + "base" + "unix" + "ghc-boot-th" + "mtl" + "pretty" + "process" + "stm" + "template-haskell" + "exceptions" + "parsec" + "system-cxx-std-lib" + "deepseq" + "text" + "containers" + "array" + "bytestring" + "directory" + "ghc-bignum" + "binary" + "filepath" + ]; + } ({ lib, ... }: { packages = { diff --git a/materialized/ghc964/hadrian-ghc96/plan.json b/materialized/ghc964/hadrian-ghc96/plan.json new file mode 100644 index 0000000000..7610e57826 --- /dev/null +++ b/materialized/ghc964/hadrian-ghc96/plan.json @@ -0,0 +1 @@ +{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-9.6.4","os":"linux","arch":"x86_64","install-plan":[{"type":"configured","id":"Cabal-3.8.1.0-c668f818769193b477ca1a8b87e802e56126adbc7bed962d76bde34a01e8c306","pkg-name":"Cabal","pkg-version":"3.8.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"77121d8e1aff14a0fd95684b751599db78a7dd26d55862d9fcef27c88b193e9d","pkg-src-sha256":"7464cbe6c2f3d7e5d0232023a1a7330621f8b24853cb259fc89a2af85b736608","depends":["Cabal-syntax-3.8.1.0-b99db30153f1d2c83dc6d34e637d577dc69cabe5825778a1e3462bcf8317b588","array-0.5.6.0","base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","directory-1.3.8.1","filepath-1.4.200.1","mtl-2.3.1","parsec-3.1.16.1","pretty-1.1.3.6","process-1.6.17.0","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"Cabal-syntax-3.8.1.0-b99db30153f1d2c83dc6d34e637d577dc69cabe5825778a1e3462bcf8317b588","pkg-name":"Cabal-syntax","pkg-version":"3.8.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ed2d937ba6c6a20b75850349eedd41374885fc42369ef152d69e2ba70f44f593","pkg-src-sha256":"07e8ddb19fe01781485f1522b6afc22aba680b0ab28ebe6bbfb84a2dd698ce0f","depends":["array-0.5.6.0","base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","directory-1.3.8.1","filepath-1.4.200.1","mtl-2.3.1","parsec-3.1.16.1","pretty-1.1.3.6","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"QuickCheck-2.14.3-116702925e70e233df64507a5cae969ff9c69efe35b3cc35e56c87d47168ff11","pkg-name":"QuickCheck","pkg-version":"2.14.3","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f03d2f404d5ba465453d0fbc1944832789a759fe7c4f9bf8616bc1378a02fde4","pkg-src-sha256":"5c0f22b36b28a1a8fa110b3819818d3f29494a3b0dedbae299f064123ca70501","depends":["base-4.18.2.0","containers-0.6.7","deepseq-1.4.8.1","random-1.2.1.1-e2b8c23c50d3a2e2d7c30c46d2a3344a9c2a38bf319885311c62efb7342cb80b","splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","template-haskell-2.20.0.0","transformers-0.6.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.6.0","pkg-name":"array","pkg-version":"0.5.6.0","depends":["base-4.18.2.0"]},{"type":"pre-existing","id":"base-4.18.2.0","pkg-name":"base","pkg-version":"4.18.2.0","depends":["ghc-bignum-1.3","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"binary-0.8.9.1","pkg-name":"binary","pkg-version":"0.8.9.1","depends":["array-0.5.6.0","base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"bytestring-0.11.5.3","pkg-name":"bytestring","pkg-version":"0.11.5.3","depends":["base-4.18.2.0","deepseq-1.4.8.1","ghc-prim-0.10.0","template-haskell-2.20.0.0"]},{"type":"configured","id":"clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","pkg-name":"clock","pkg-version":"0.8.4","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b938655b00cf204ce69abfff946021bed111d2609a9f7a9c22e28a1a202e9115","pkg-src-sha256":"6ae9898afe788a5e334cd5fad5d18a3c2e8e59fa09aaf7b957dbb38a4767df2e","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.7","pkg-name":"containers","pkg-version":"0.6.7","depends":["array-0.5.6.0","base-4.18.2.0","deepseq-1.4.8.1","template-haskell-2.20.0.0"]},{"type":"pre-existing","id":"deepseq-1.4.8.1","pkg-name":"deepseq","pkg-version":"1.4.8.1","depends":["array-0.5.6.0","base-4.18.2.0","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"directory-1.3.8.1","pkg-name":"directory","pkg-version":"1.3.8.1","depends":["base-4.18.2.0","filepath-1.4.200.1","time-1.12.2","unix-2.8.4.0"]},{"type":"pre-existing","id":"exceptions-0.10.7","pkg-name":"exceptions","pkg-version":"0.10.7","depends":["base-4.18.2.0","mtl-2.3.1","stm-2.5.1.0","template-haskell-2.20.0.0","transformers-0.6.1.0"]},{"type":"configured","id":"extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","pkg-name":"extra","pkg-version":"1.7.14","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e3d3ce1dc7746b1132930e48c59fb5e8c51a09e92e0c031316be031067a273fb","pkg-src-sha256":"b6a909f8f0e4b8076a1653b4d34815a782f0a8c1e83d5267f4d00496471ef567","depends":["base-4.18.2.0","clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","directory-1.3.8.1","filepath-1.4.200.1","process-1.6.17.0","time-1.12.2","unix-2.8.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.200.1","pkg-name":"filepath","pkg-version":"1.4.200.1","depends":["base-4.18.2.0","bytestring-0.11.5.3","deepseq-1.4.8.1","exceptions-0.10.7","template-haskell-2.20.0.0"]},{"type":"configured","id":"filepattern-0.1.3-e0b05225cb586afea88cbd5fba3b81dbc7d8925b44e8dd467cfd9ed208da351b","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.18.2.0","directory-1.3.8.1","extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","filepath-1.4.200.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.3","pkg-name":"ghc-bignum","pkg-version":"1.3","depends":["ghc-prim-0.10.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.6.4","pkg-name":"ghc-boot-th","pkg-version":"9.6.4","depends":["base-4.18.2.0"]},{"type":"pre-existing","id":"ghc-prim-0.10.0","pkg-name":"ghc-prim","pkg-version":"0.10.0","depends":[]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"./hadrian/."},"dist-dir":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian","build-info":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.8.1.0-c668f818769193b477ca1a8b87e802e56126adbc7bed962d76bde34a01e8c306","QuickCheck-2.14.3-116702925e70e233df64507a5cae969ff9c69efe35b3cc35e56c87d47168ff11","base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","directory-1.3.8.1","extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","filepath-1.4.200.1","mtl-2.3.1","parsec-3.1.16.1","shake-0.19.7-9369313762a66f683383a6b11b819b9aafcd8f0d518c176b2cb1f5a198ccf8cd","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unordered-containers-0.2.19.1-0eb0d95c2f270578763e7cbc938fd7d57fa65a8f3c10aa64b616bc79bbf6b993"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.4.3.0-cf03199beb9180bbbb9b383e3088c03deb3be32037dd08933c3d3ba08171d03e","pkg-name":"hashable","pkg-version":"1.4.3.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f3bf68acfa0df7a064a378ef2cdcfeb55e6fb96100675f4c593556dcbf3d7194","pkg-src-sha256":"32efb16c2891786209b7cbe5c39df9b3a9ae51e836f1a54f646bc4602b7ab0f5","depends":["base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","filepath-1.4.200.1","ghc-bignum-1.3","ghc-prim-0.10.0","text-2.0.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.3.1","pkg-name":"mtl","pkg-version":"2.3.1","depends":["base-4.18.2.0","transformers-0.6.1.0"]},{"type":"pre-existing","id":"parsec-3.1.16.1","pkg-name":"parsec","pkg-version":"3.1.16.1","depends":["base-4.18.2.0","bytestring-0.11.5.3","mtl-2.3.1","text-2.0.2"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.18.2.0","deepseq-1.4.8.1","ghc-prim-0.10.0"]},{"type":"configured","id":"primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","pkg-name":"primitive","pkg-version":"0.9.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1ceb39f67c0e614180f2992a6d30f26603ab2cd23c4f8e25b30213f98807f6f1","pkg-src-sha256":"696d4bd291c94d736142d6182117dca4258d3ef28bfefdb649ac8b5ecd0999c7","depends":["base-4.18.2.0","deepseq-1.4.8.1","template-haskell-2.20.0.0","transformers-0.6.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.17.0","pkg-name":"process","pkg-version":"1.6.17.0","depends":["base-4.18.2.0","deepseq-1.4.8.1","directory-1.3.8.1","filepath-1.4.200.1","unix-2.8.4.0"]},{"type":"configured","id":"random-1.2.1.1-e2b8c23c50d3a2e2d7c30c46d2a3344a9c2a38bf319885311c62efb7342cb80b","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e7c1f881159d5cc788619c9ee8b8f340ba2ff0db571cdf3d1a1968ebc5108789","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.18.2.0","bytestring-0.11.5.3","deepseq-1.4.8.1","mtl-2.3.1","splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-9369313762a66f683383a6b11b819b9aafcd8f0d518c176b2cb1f5a198ccf8cd","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","directory-1.3.8.1","extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","filepath-1.4.200.1","filepattern-0.1.3-e0b05225cb586afea88cbd5fba3b81dbc7d8925b44e8dd467cfd9ed208da351b","hashable-1.4.3.0-cf03199beb9180bbbb9b383e3088c03deb3be32037dd08933c3d3ba08171d03e","heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","process-1.6.17.0","random-1.2.1.1-e2b8c23c50d3a2e2d7c30c46d2a3344a9c2a38bf319885311c62efb7342cb80b","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0","unordered-containers-0.2.19.1-0eb0d95c2f270578763e7cbc938fd7d57fa65a8f3c10aa64b616bc79bbf6b993","utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-e-shake-74d898c5705f61c05a8a7aee14d32e6ef38e5584b58da7af7f06efe4c3c36716","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","directory-1.3.8.1","extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","filepath-1.4.200.1","filepattern-0.1.3-e0b05225cb586afea88cbd5fba3b81dbc7d8925b44e8dd467cfd9ed208da351b","hashable-1.4.3.0-cf03199beb9180bbbb9b383e3088c03deb3be32037dd08933c3d3ba08171d03e","heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","process-1.6.17.0","random-1.2.1.1-e2b8c23c50d3a2e2d7c30c46d2a3344a9c2a38bf319885311c62efb7342cb80b","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0","unordered-containers-0.2.19.1-0eb0d95c2f270578763e7cbc938fd7d57fa65a8f3c10aa64b616bc79bbf6b993","utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/store/ghc-9.6.4/shake-0.19.7-e-shake-74d898c5705f61c05a8a7aee14d32e6ef38e5584b58da7af7f06efe4c3c36716/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","pkg-name":"splitmix","pkg-version":"0.1.0.5","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"bac0ae8d46a04e410666b0c8081cff63f060f29157983b569ca86ddb6e6e0dc6","pkg-src-sha256":"9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002","depends":["base-4.18.2.0","deepseq-1.4.8.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"stm-2.5.1.0","pkg-name":"stm","pkg-version":"2.5.1.0","depends":["array-0.5.6.0","base-4.18.2.0"]},{"type":"pre-existing","id":"system-cxx-std-lib-1.0","pkg-name":"system-cxx-std-lib","pkg-version":"1.0","depends":[]},{"type":"pre-existing","id":"template-haskell-2.20.0.0","pkg-name":"template-haskell","pkg-version":"2.20.0.0","depends":["base-4.18.2.0","ghc-boot-th-9.6.4","ghc-prim-0.10.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-2.0.2","pkg-name":"text","pkg-version":"2.0.2","depends":["array-0.5.6.0","base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","ghc-prim-0.10.0","system-cxx-std-lib-1.0","template-haskell-2.20.0.0"]},{"type":"pre-existing","id":"time-1.12.2","pkg-name":"time","pkg-version":"1.12.2","depends":["base-4.18.2.0","deepseq-1.4.8.1"]},{"type":"pre-existing","id":"transformers-0.6.1.0","pkg-name":"transformers","pkg-version":"0.6.1.0","depends":["base-4.18.2.0","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"unix-2.8.4.0","pkg-name":"unix","pkg-version":"2.8.4.0","depends":["base-4.18.2.0","bytestring-0.11.5.3","filepath-1.4.200.1","time-1.12.2"]},{"type":"configured","id":"unordered-containers-0.2.19.1-0eb0d95c2f270578763e7cbc938fd7d57fa65a8f3c10aa64b616bc79bbf6b993","pkg-name":"unordered-containers","pkg-version":"0.2.19.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1c28ca429e3960de0330908579a427ccacddd700cb84ec1969e2bbe576152add","pkg-src-sha256":"1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2","depends":["base-4.18.2.0","deepseq-1.4.8.1","hashable-1.4.3.0-cf03199beb9180bbbb9b383e3088c03deb3be32037dd08933c3d3ba08171d03e","template-haskell-2.20.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.18.2.0","bytestring-0.11.5.3"],"exe-depends":[],"component-name":"lib"}],"targets":[{"pkg-name":"Cabal","pkg-version":"3.8.1.0","component-name":"lib","available":[{"id":"Cabal-3.8.1.0-c668f818769193b477ca1a8b87e802e56126adbc7bed962d76bde34a01e8c306","component-name":"lib","build-by-default":true}]},{"pkg-name":"Cabal-syntax","pkg-version":"3.8.1.0","component-name":"lib","available":[{"id":"Cabal-syntax-3.8.1.0-b99db30153f1d2c83dc6d34e637d577dc69cabe5825778a1e3462bcf8317b588","component-name":"lib","build-by-default":true}]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"lib","available":[{"id":"QuickCheck-2.14.3-116702925e70e233df64507a5cae969ff9c69efe35b3cc35e56c87d47168ff11","component-name":"lib","build-by-default":true}]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-gcoarbitrary","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-generators","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-gshrink","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-misc","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-monadfix","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-split","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-terminal","available":["TargetNotLocal"]},{"pkg-name":"array","pkg-version":"0.5.6.0","component-name":"lib","available":[{"id":"array-0.5.6.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base","pkg-version":"4.18.2.0","component-name":"lib","available":[{"id":"base-4.18.2.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"binary","pkg-version":"0.8.9.1","component-name":"lib","available":[{"id":"binary-0.8.9.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"bytestring","pkg-version":"0.11.5.3","component-name":"lib","available":[{"id":"bytestring-0.11.5.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"lib","available":[{"id":"clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","component-name":"lib","build-by-default":true}]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"containers","pkg-version":"0.6.7","component-name":"lib","available":[{"id":"containers-0.6.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"deepseq","pkg-version":"1.4.8.1","component-name":"lib","available":[{"id":"deepseq-1.4.8.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory","pkg-version":"1.3.8.1","component-name":"lib","available":[{"id":"directory-1.3.8.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"exceptions","pkg-version":"0.10.7","component-name":"lib","available":[{"id":"exceptions-0.10.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"extra","pkg-version":"1.7.14","component-name":"lib","available":[{"id":"extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","component-name":"lib","build-by-default":true}]},{"pkg-name":"extra","pkg-version":"1.7.14","component-name":"test:extra-test","available":["TargetNotLocal"]},{"pkg-name":"filepath","pkg-version":"1.4.200.1","component-name":"lib","available":[{"id":"filepath-1.4.200.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"filepattern","pkg-version":"0.1.3","component-name":"lib","available":[{"id":"filepattern-0.1.3-e0b05225cb586afea88cbd5fba3b81dbc7d8925b44e8dd467cfd9ed208da351b","component-name":"lib","build-by-default":true}]},{"pkg-name":"filepattern","pkg-version":"0.1.3","component-name":"test:filepattern-test","available":["TargetNotLocal"]},{"pkg-name":"ghc-bignum","pkg-version":"1.3","component-name":"lib","available":[{"id":"ghc-bignum-1.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-boot-th","pkg-version":"9.6.4","component-name":"lib","available":[{"id":"ghc-boot-th-9.6.4","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-prim","pkg-version":"0.10.0","component-name":"lib","available":[{"id":"ghc-prim-0.10.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"hadrian","pkg-version":"0.1.0.0","component-name":"exe:hadrian","available":[{"id":"hadrian-0.1.0.0-inplace-hadrian","component-name":"exe:hadrian","build-by-default":true}]},{"pkg-name":"hashable","pkg-version":"1.4.3.0","component-name":"lib","available":[{"id":"hashable-1.4.3.0-cf03199beb9180bbbb9b383e3088c03deb3be32037dd08933c3d3ba08171d03e","component-name":"lib","build-by-default":true}]},{"pkg-name":"hashable","pkg-version":"1.4.3.0","component-name":"test:hashable-examples","available":["TargetNotLocal"]},{"pkg-name":"hashable","pkg-version":"1.4.3.0","component-name":"test:hashable-tests","available":["TargetNotLocal"]},{"pkg-name":"heaps","pkg-version":"0.4","component-name":"lib","available":[{"id":"heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-dgtable","pkg-version":"0.5.2","component-name":"lib","available":[{"id":"js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-dgtable","pkg-version":"0.5.2","component-name":"test:js-dgtable-test","available":["TargetNotLocal"]},{"pkg-name":"js-flot","pkg-version":"0.8.3","component-name":"lib","available":[{"id":"js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-flot","pkg-version":"0.8.3","component-name":"test:js-flot-test","available":["TargetNotLocal"]},{"pkg-name":"js-jquery","pkg-version":"3.3.1","component-name":"lib","available":[{"id":"js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-jquery","pkg-version":"3.3.1","component-name":"test:js-jquery-test","available":["TargetNotLocal"]},{"pkg-name":"mtl","pkg-version":"2.3.1","component-name":"lib","available":[{"id":"mtl-2.3.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"parsec","pkg-version":"3.1.16.1","component-name":"lib","available":[{"id":"parsec-3.1.16.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"pretty","pkg-version":"1.1.3.6","component-name":"lib","available":[{"id":"pretty-1.1.3.6","component-name":"lib","build-by-default":true}]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"lib","available":[{"id":"primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","component-name":"lib","build-by-default":true}]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"test:test-qc","available":["TargetNotLocal"]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"process","pkg-version":"1.6.17.0","component-name":"lib","available":[{"id":"process-1.6.17.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"lib","available":[{"id":"random-1.2.1.1-e2b8c23c50d3a2e2d7c30c46d2a3344a9c2a38bf319885311c62efb7342cb80b","component-name":"lib","build-by-default":true}]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:legacy-test","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:spec-inspection","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"bench:legacy-bench","available":["TargetNotLocal"]},{"pkg-name":"shake","pkg-version":"0.19.7","component-name":"lib","available":[{"id":"shake-0.19.7-9369313762a66f683383a6b11b819b9aafcd8f0d518c176b2cb1f5a198ccf8cd","component-name":"lib","build-by-default":true}]},{"pkg-name":"shake","pkg-version":"0.19.7","component-name":"exe:shake","available":[{"id":"shake-0.19.7-e-shake-74d898c5705f61c05a8a7aee14d32e6ef38e5584b58da7af7f06efe4c3c36716","component-name":"exe:shake","build-by-default":true}]},{"pkg-name":"shake","pkg-version":"0.19.7","component-name":"test:shake-test","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"lib","available":[{"id":"splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","component-name":"lib","build-by-default":true}]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:examples","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:initialization","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:montecarlo-pi","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:montecarlo-pi-32","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-dieharder","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-tests","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-testu01","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:comparison","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:range","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:simple-sum","available":["TargetNotLocal"]},{"pkg-name":"stm","pkg-version":"2.5.1.0","component-name":"lib","available":[{"id":"stm-2.5.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"system-cxx-std-lib","pkg-version":"1.0","component-name":"lib","available":[{"id":"system-cxx-std-lib-1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"template-haskell","pkg-version":"2.20.0.0","component-name":"lib","available":[{"id":"template-haskell-2.20.0.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"text","pkg-version":"2.0.2","component-name":"lib","available":[{"id":"text-2.0.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"time","pkg-version":"1.12.2","component-name":"lib","available":[{"id":"time-1.12.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"transformers","pkg-version":"0.6.1.0","component-name":"lib","available":[{"id":"transformers-0.6.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix","pkg-version":"2.8.4.0","component-name":"lib","available":[{"id":"unix-2.8.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"unordered-containers","pkg-version":"0.2.19.1","component-name":"lib","available":[{"id":"unordered-containers-0.2.19.1-0eb0d95c2f270578763e7cbc938fd7d57fa65a8f3c10aa64b616bc79bbf6b993","component-name":"lib","build-by-default":true}]},{"pkg-name":"unordered-containers","pkg-version":"0.2.19.1","component-name":"test:unordered-containers-tests","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.19.1","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"utf8-string","pkg-version":"1.0.2","component-name":"lib","available":[{"id":"utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05","component-name":"lib","build-by-default":true}]},{"pkg-name":"utf8-string","pkg-version":"1.0.2","component-name":"test:unit-tests","available":["TargetNotLocal"]}]} \ No newline at end of file diff --git a/materialized/ghc964/hadrian-ghc98/hadrian/default.nix b/materialized/ghc964/hadrian-ghc98/hadrian/default.nix index c679a4c074..08f0ef6f72 100644 --- a/materialized/ghc964/hadrian-ghc98/hadrian/default.nix +++ b/materialized/ghc964/hadrian-ghc98/hadrian/default.nix @@ -90,6 +90,33 @@ extras = hackage: { packages = { hadrian = ./.plan.nix/hadrian.nix; }; }; modules = [ + { + preExistingPkgs = [ + "ghc-prim" + "transformers" + "time" + "base" + "unix" + "ghc-boot-th" + "mtl" + "pretty" + "process" + "stm" + "template-haskell" + "exceptions" + "parsec" + "system-cxx-std-lib" + "deepseq" + "text" + "containers" + "array" + "bytestring" + "directory" + "ghc-bignum" + "binary" + "filepath" + ]; + } ({ lib, ... }: { packages = { diff --git a/materialized/ghc964/hadrian-ghc98/plan.json b/materialized/ghc964/hadrian-ghc98/plan.json new file mode 100644 index 0000000000..eb5633aa5f --- /dev/null +++ b/materialized/ghc964/hadrian-ghc98/plan.json @@ -0,0 +1 @@ +{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-9.6.4","os":"linux","arch":"x86_64","install-plan":[{"type":"configured","id":"Cabal-3.8.1.0-c668f818769193b477ca1a8b87e802e56126adbc7bed962d76bde34a01e8c306","pkg-name":"Cabal","pkg-version":"3.8.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"77121d8e1aff14a0fd95684b751599db78a7dd26d55862d9fcef27c88b193e9d","pkg-src-sha256":"7464cbe6c2f3d7e5d0232023a1a7330621f8b24853cb259fc89a2af85b736608","depends":["Cabal-syntax-3.8.1.0-b99db30153f1d2c83dc6d34e637d577dc69cabe5825778a1e3462bcf8317b588","array-0.5.6.0","base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","directory-1.3.8.1","filepath-1.4.200.1","mtl-2.3.1","parsec-3.1.16.1","pretty-1.1.3.6","process-1.6.17.0","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"Cabal-syntax-3.8.1.0-b99db30153f1d2c83dc6d34e637d577dc69cabe5825778a1e3462bcf8317b588","pkg-name":"Cabal-syntax","pkg-version":"3.8.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ed2d937ba6c6a20b75850349eedd41374885fc42369ef152d69e2ba70f44f593","pkg-src-sha256":"07e8ddb19fe01781485f1522b6afc22aba680b0ab28ebe6bbfb84a2dd698ce0f","depends":["array-0.5.6.0","base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","directory-1.3.8.1","filepath-1.4.200.1","mtl-2.3.1","parsec-3.1.16.1","pretty-1.1.3.6","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"QuickCheck-2.14.3-116702925e70e233df64507a5cae969ff9c69efe35b3cc35e56c87d47168ff11","pkg-name":"QuickCheck","pkg-version":"2.14.3","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f03d2f404d5ba465453d0fbc1944832789a759fe7c4f9bf8616bc1378a02fde4","pkg-src-sha256":"5c0f22b36b28a1a8fa110b3819818d3f29494a3b0dedbae299f064123ca70501","depends":["base-4.18.2.0","containers-0.6.7","deepseq-1.4.8.1","random-1.2.1.1-e2b8c23c50d3a2e2d7c30c46d2a3344a9c2a38bf319885311c62efb7342cb80b","splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","template-haskell-2.20.0.0","transformers-0.6.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.6.0","pkg-name":"array","pkg-version":"0.5.6.0","depends":["base-4.18.2.0"]},{"type":"pre-existing","id":"base-4.18.2.0","pkg-name":"base","pkg-version":"4.18.2.0","depends":["ghc-bignum-1.3","ghc-prim-0.10.0"]},{"type":"configured","id":"base16-bytestring-1.0.2.0-48e234cd9d2674d718111ce6f52d0142cc28a3c5a0493618f8fb6a8b7f7dd1f7","pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a694e88f9ec9fc79f0b03f233d3fea592b68f70a34aac2ddb5bcaecb6562e2fd","pkg-src-sha256":"1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784","depends":["base-4.18.2.0","bytestring-0.11.5.3"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"binary-0.8.9.1","pkg-name":"binary","pkg-version":"0.8.9.1","depends":["array-0.5.6.0","base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"bytestring-0.11.5.3","pkg-name":"bytestring","pkg-version":"0.11.5.3","depends":["base-4.18.2.0","deepseq-1.4.8.1","ghc-prim-0.10.0","template-haskell-2.20.0.0"]},{"type":"configured","id":"clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","pkg-name":"clock","pkg-version":"0.8.4","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b938655b00cf204ce69abfff946021bed111d2609a9f7a9c22e28a1a202e9115","pkg-src-sha256":"6ae9898afe788a5e334cd5fad5d18a3c2e8e59fa09aaf7b957dbb38a4767df2e","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.7","pkg-name":"containers","pkg-version":"0.6.7","depends":["array-0.5.6.0","base-4.18.2.0","deepseq-1.4.8.1","template-haskell-2.20.0.0"]},{"type":"configured","id":"cryptohash-sha256-0.11.102.1-898616048405d66a1ac2538c4878965bc94c2902780e27b3e48e171cdfe34cf8","pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","flags":{"exe":false,"use-cbits":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"03db065161987f614a3a2bbcd16264f78e47efe231fb5bd161be2043eaf20488","pkg-src-sha256":"73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6","depends":["base-4.18.2.0","bytestring-0.11.5.3"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.4.8.1","pkg-name":"deepseq","pkg-version":"1.4.8.1","depends":["array-0.5.6.0","base-4.18.2.0","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"directory-1.3.8.1","pkg-name":"directory","pkg-version":"1.3.8.1","depends":["base-4.18.2.0","filepath-1.4.200.1","time-1.12.2","unix-2.8.4.0"]},{"type":"pre-existing","id":"exceptions-0.10.7","pkg-name":"exceptions","pkg-version":"0.10.7","depends":["base-4.18.2.0","mtl-2.3.1","stm-2.5.1.0","template-haskell-2.20.0.0","transformers-0.6.1.0"]},{"type":"configured","id":"extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","pkg-name":"extra","pkg-version":"1.7.14","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e3d3ce1dc7746b1132930e48c59fb5e8c51a09e92e0c031316be031067a273fb","pkg-src-sha256":"b6a909f8f0e4b8076a1653b4d34815a782f0a8c1e83d5267f4d00496471ef567","depends":["base-4.18.2.0","clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","directory-1.3.8.1","filepath-1.4.200.1","process-1.6.17.0","time-1.12.2","unix-2.8.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.200.1","pkg-name":"filepath","pkg-version":"1.4.200.1","depends":["base-4.18.2.0","bytestring-0.11.5.3","deepseq-1.4.8.1","exceptions-0.10.7","template-haskell-2.20.0.0"]},{"type":"configured","id":"filepattern-0.1.3-e0b05225cb586afea88cbd5fba3b81dbc7d8925b44e8dd467cfd9ed208da351b","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.18.2.0","directory-1.3.8.1","extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","filepath-1.4.200.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.3","pkg-name":"ghc-bignum","pkg-version":"1.3","depends":["ghc-prim-0.10.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.6.4","pkg-name":"ghc-boot-th","pkg-version":"9.6.4","depends":["base-4.18.2.0"]},{"type":"pre-existing","id":"ghc-prim-0.10.0","pkg-name":"ghc-prim","pkg-version":"0.10.0","depends":[]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"./hadrian/."},"dist-dir":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian","build-info":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.8.1.0-c668f818769193b477ca1a8b87e802e56126adbc7bed962d76bde34a01e8c306","QuickCheck-2.14.3-116702925e70e233df64507a5cae969ff9c69efe35b3cc35e56c87d47168ff11","base-4.18.2.0","base16-bytestring-1.0.2.0-48e234cd9d2674d718111ce6f52d0142cc28a3c5a0493618f8fb6a8b7f7dd1f7","bytestring-0.11.5.3","containers-0.6.7","cryptohash-sha256-0.11.102.1-898616048405d66a1ac2538c4878965bc94c2902780e27b3e48e171cdfe34cf8","directory-1.3.8.1","extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","filepath-1.4.200.1","mtl-2.3.1","parsec-3.1.16.1","shake-0.19.7-9369313762a66f683383a6b11b819b9aafcd8f0d518c176b2cb1f5a198ccf8cd","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unordered-containers-0.2.19.1-0eb0d95c2f270578763e7cbc938fd7d57fa65a8f3c10aa64b616bc79bbf6b993"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.4.3.0-cf03199beb9180bbbb9b383e3088c03deb3be32037dd08933c3d3ba08171d03e","pkg-name":"hashable","pkg-version":"1.4.3.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f3bf68acfa0df7a064a378ef2cdcfeb55e6fb96100675f4c593556dcbf3d7194","pkg-src-sha256":"32efb16c2891786209b7cbe5c39df9b3a9ae51e836f1a54f646bc4602b7ab0f5","depends":["base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","filepath-1.4.200.1","ghc-bignum-1.3","ghc-prim-0.10.0","text-2.0.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.3.1","pkg-name":"mtl","pkg-version":"2.3.1","depends":["base-4.18.2.0","transformers-0.6.1.0"]},{"type":"pre-existing","id":"parsec-3.1.16.1","pkg-name":"parsec","pkg-version":"3.1.16.1","depends":["base-4.18.2.0","bytestring-0.11.5.3","mtl-2.3.1","text-2.0.2"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.18.2.0","deepseq-1.4.8.1","ghc-prim-0.10.0"]},{"type":"configured","id":"primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","pkg-name":"primitive","pkg-version":"0.9.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1ceb39f67c0e614180f2992a6d30f26603ab2cd23c4f8e25b30213f98807f6f1","pkg-src-sha256":"696d4bd291c94d736142d6182117dca4258d3ef28bfefdb649ac8b5ecd0999c7","depends":["base-4.18.2.0","deepseq-1.4.8.1","template-haskell-2.20.0.0","transformers-0.6.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.17.0","pkg-name":"process","pkg-version":"1.6.17.0","depends":["base-4.18.2.0","deepseq-1.4.8.1","directory-1.3.8.1","filepath-1.4.200.1","unix-2.8.4.0"]},{"type":"configured","id":"random-1.2.1.1-e2b8c23c50d3a2e2d7c30c46d2a3344a9c2a38bf319885311c62efb7342cb80b","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e7c1f881159d5cc788619c9ee8b8f340ba2ff0db571cdf3d1a1968ebc5108789","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.18.2.0","bytestring-0.11.5.3","deepseq-1.4.8.1","mtl-2.3.1","splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-9369313762a66f683383a6b11b819b9aafcd8f0d518c176b2cb1f5a198ccf8cd","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","directory-1.3.8.1","extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","filepath-1.4.200.1","filepattern-0.1.3-e0b05225cb586afea88cbd5fba3b81dbc7d8925b44e8dd467cfd9ed208da351b","hashable-1.4.3.0-cf03199beb9180bbbb9b383e3088c03deb3be32037dd08933c3d3ba08171d03e","heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","process-1.6.17.0","random-1.2.1.1-e2b8c23c50d3a2e2d7c30c46d2a3344a9c2a38bf319885311c62efb7342cb80b","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0","unordered-containers-0.2.19.1-0eb0d95c2f270578763e7cbc938fd7d57fa65a8f3c10aa64b616bc79bbf6b993","utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.7-e-shake-74d898c5705f61c05a8a7aee14d32e6ef38e5584b58da7af7f06efe4c3c36716","pkg-name":"shake","pkg-version":"0.19.7","flags":{"cloud":false,"embed-files":false,"portable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3cb5814cce210b9756fa9246ff1b2a1e1b86be46fdc4c5e2baacdc5bf83ce5c3","pkg-src-sha256":"352a56af12f70b50d564dcb61131555577281957ee196f1702a3723c0a3699d1","depends":["base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","directory-1.3.8.1","extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","filepath-1.4.200.1","filepattern-0.1.3-e0b05225cb586afea88cbd5fba3b81dbc7d8925b44e8dd467cfd9ed208da351b","hashable-1.4.3.0-cf03199beb9180bbbb9b383e3088c03deb3be32037dd08933c3d3ba08171d03e","heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","process-1.6.17.0","random-1.2.1.1-e2b8c23c50d3a2e2d7c30c46d2a3344a9c2a38bf319885311c62efb7342cb80b","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0","unordered-containers-0.2.19.1-0eb0d95c2f270578763e7cbc938fd7d57fa65a8f3c10aa64b616bc79bbf6b993","utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/store/ghc-9.6.4/shake-0.19.7-e-shake-74d898c5705f61c05a8a7aee14d32e6ef38e5584b58da7af7f06efe4c3c36716/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","pkg-name":"splitmix","pkg-version":"0.1.0.5","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"bac0ae8d46a04e410666b0c8081cff63f060f29157983b569ca86ddb6e6e0dc6","pkg-src-sha256":"9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002","depends":["base-4.18.2.0","deepseq-1.4.8.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"stm-2.5.1.0","pkg-name":"stm","pkg-version":"2.5.1.0","depends":["array-0.5.6.0","base-4.18.2.0"]},{"type":"pre-existing","id":"system-cxx-std-lib-1.0","pkg-name":"system-cxx-std-lib","pkg-version":"1.0","depends":[]},{"type":"pre-existing","id":"template-haskell-2.20.0.0","pkg-name":"template-haskell","pkg-version":"2.20.0.0","depends":["base-4.18.2.0","ghc-boot-th-9.6.4","ghc-prim-0.10.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-2.0.2","pkg-name":"text","pkg-version":"2.0.2","depends":["array-0.5.6.0","base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","ghc-prim-0.10.0","system-cxx-std-lib-1.0","template-haskell-2.20.0.0"]},{"type":"pre-existing","id":"time-1.12.2","pkg-name":"time","pkg-version":"1.12.2","depends":["base-4.18.2.0","deepseq-1.4.8.1"]},{"type":"pre-existing","id":"transformers-0.6.1.0","pkg-name":"transformers","pkg-version":"0.6.1.0","depends":["base-4.18.2.0","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"unix-2.8.4.0","pkg-name":"unix","pkg-version":"2.8.4.0","depends":["base-4.18.2.0","bytestring-0.11.5.3","filepath-1.4.200.1","time-1.12.2"]},{"type":"configured","id":"unordered-containers-0.2.19.1-0eb0d95c2f270578763e7cbc938fd7d57fa65a8f3c10aa64b616bc79bbf6b993","pkg-name":"unordered-containers","pkg-version":"0.2.19.1","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1c28ca429e3960de0330908579a427ccacddd700cb84ec1969e2bbe576152add","pkg-src-sha256":"1b27bec5e0d522b27a6029ebf4c4a6d40acbc083c787008e32fb55c4b1d128d2","depends":["base-4.18.2.0","deepseq-1.4.8.1","hashable-1.4.3.0-cf03199beb9180bbbb9b383e3088c03deb3be32037dd08933c3d3ba08171d03e","template-haskell-2.20.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.18.2.0","bytestring-0.11.5.3"],"exe-depends":[],"component-name":"lib"}],"targets":[{"pkg-name":"Cabal","pkg-version":"3.8.1.0","component-name":"lib","available":[{"id":"Cabal-3.8.1.0-c668f818769193b477ca1a8b87e802e56126adbc7bed962d76bde34a01e8c306","component-name":"lib","build-by-default":true}]},{"pkg-name":"Cabal-syntax","pkg-version":"3.8.1.0","component-name":"lib","available":[{"id":"Cabal-syntax-3.8.1.0-b99db30153f1d2c83dc6d34e637d577dc69cabe5825778a1e3462bcf8317b588","component-name":"lib","build-by-default":true}]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"lib","available":[{"id":"QuickCheck-2.14.3-116702925e70e233df64507a5cae969ff9c69efe35b3cc35e56c87d47168ff11","component-name":"lib","build-by-default":true}]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-gcoarbitrary","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-generators","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-gshrink","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-misc","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-monadfix","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-split","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-terminal","available":["TargetNotLocal"]},{"pkg-name":"array","pkg-version":"0.5.6.0","component-name":"lib","available":[{"id":"array-0.5.6.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base","pkg-version":"4.18.2.0","component-name":"lib","available":[{"id":"base-4.18.2.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","component-name":"lib","available":[{"id":"base16-bytestring-1.0.2.0-48e234cd9d2674d718111ce6f52d0142cc28a3c5a0493618f8fb6a8b7f7dd1f7","component-name":"lib","build-by-default":true}]},{"pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"binary","pkg-version":"0.8.9.1","component-name":"lib","available":[{"id":"binary-0.8.9.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"bytestring","pkg-version":"0.11.5.3","component-name":"lib","available":[{"id":"bytestring-0.11.5.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"lib","available":[{"id":"clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","component-name":"lib","build-by-default":true}]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"containers","pkg-version":"0.6.7","component-name":"lib","available":[{"id":"containers-0.6.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","component-name":"lib","available":[{"id":"cryptohash-sha256-0.11.102.1-898616048405d66a1ac2538c4878965bc94c2902780e27b3e48e171cdfe34cf8","component-name":"lib","build-by-default":true}]},{"pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","component-name":"exe:sha256sum","available":["TargetNotBuildable"]},{"pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","component-name":"test:test-sha256","available":["TargetNotLocal"]},{"pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","component-name":"bench:bench-sha256","available":["TargetNotLocal"]},{"pkg-name":"deepseq","pkg-version":"1.4.8.1","component-name":"lib","available":[{"id":"deepseq-1.4.8.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory","pkg-version":"1.3.8.1","component-name":"lib","available":[{"id":"directory-1.3.8.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"exceptions","pkg-version":"0.10.7","component-name":"lib","available":[{"id":"exceptions-0.10.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"extra","pkg-version":"1.7.14","component-name":"lib","available":[{"id":"extra-1.7.14-5b3875febb50e86e1fd0471cb61fc83c08afae84f74dd82e3fe23bdc226bd3c9","component-name":"lib","build-by-default":true}]},{"pkg-name":"extra","pkg-version":"1.7.14","component-name":"test:extra-test","available":["TargetNotLocal"]},{"pkg-name":"filepath","pkg-version":"1.4.200.1","component-name":"lib","available":[{"id":"filepath-1.4.200.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"filepattern","pkg-version":"0.1.3","component-name":"lib","available":[{"id":"filepattern-0.1.3-e0b05225cb586afea88cbd5fba3b81dbc7d8925b44e8dd467cfd9ed208da351b","component-name":"lib","build-by-default":true}]},{"pkg-name":"filepattern","pkg-version":"0.1.3","component-name":"test:filepattern-test","available":["TargetNotLocal"]},{"pkg-name":"ghc-bignum","pkg-version":"1.3","component-name":"lib","available":[{"id":"ghc-bignum-1.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-boot-th","pkg-version":"9.6.4","component-name":"lib","available":[{"id":"ghc-boot-th-9.6.4","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-prim","pkg-version":"0.10.0","component-name":"lib","available":[{"id":"ghc-prim-0.10.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"hadrian","pkg-version":"0.1.0.0","component-name":"exe:hadrian","available":[{"id":"hadrian-0.1.0.0-inplace-hadrian","component-name":"exe:hadrian","build-by-default":true}]},{"pkg-name":"hashable","pkg-version":"1.4.3.0","component-name":"lib","available":[{"id":"hashable-1.4.3.0-cf03199beb9180bbbb9b383e3088c03deb3be32037dd08933c3d3ba08171d03e","component-name":"lib","build-by-default":true}]},{"pkg-name":"hashable","pkg-version":"1.4.3.0","component-name":"test:hashable-examples","available":["TargetNotLocal"]},{"pkg-name":"hashable","pkg-version":"1.4.3.0","component-name":"test:hashable-tests","available":["TargetNotLocal"]},{"pkg-name":"heaps","pkg-version":"0.4","component-name":"lib","available":[{"id":"heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-dgtable","pkg-version":"0.5.2","component-name":"lib","available":[{"id":"js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-dgtable","pkg-version":"0.5.2","component-name":"test:js-dgtable-test","available":["TargetNotLocal"]},{"pkg-name":"js-flot","pkg-version":"0.8.3","component-name":"lib","available":[{"id":"js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-flot","pkg-version":"0.8.3","component-name":"test:js-flot-test","available":["TargetNotLocal"]},{"pkg-name":"js-jquery","pkg-version":"3.3.1","component-name":"lib","available":[{"id":"js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-jquery","pkg-version":"3.3.1","component-name":"test:js-jquery-test","available":["TargetNotLocal"]},{"pkg-name":"mtl","pkg-version":"2.3.1","component-name":"lib","available":[{"id":"mtl-2.3.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"parsec","pkg-version":"3.1.16.1","component-name":"lib","available":[{"id":"parsec-3.1.16.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"pretty","pkg-version":"1.1.3.6","component-name":"lib","available":[{"id":"pretty-1.1.3.6","component-name":"lib","build-by-default":true}]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"lib","available":[{"id":"primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","component-name":"lib","build-by-default":true}]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"test:test-qc","available":["TargetNotLocal"]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"process","pkg-version":"1.6.17.0","component-name":"lib","available":[{"id":"process-1.6.17.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"lib","available":[{"id":"random-1.2.1.1-e2b8c23c50d3a2e2d7c30c46d2a3344a9c2a38bf319885311c62efb7342cb80b","component-name":"lib","build-by-default":true}]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:legacy-test","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:spec-inspection","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"bench:legacy-bench","available":["TargetNotLocal"]},{"pkg-name":"shake","pkg-version":"0.19.7","component-name":"lib","available":[{"id":"shake-0.19.7-9369313762a66f683383a6b11b819b9aafcd8f0d518c176b2cb1f5a198ccf8cd","component-name":"lib","build-by-default":true}]},{"pkg-name":"shake","pkg-version":"0.19.7","component-name":"exe:shake","available":[{"id":"shake-0.19.7-e-shake-74d898c5705f61c05a8a7aee14d32e6ef38e5584b58da7af7f06efe4c3c36716","component-name":"exe:shake","build-by-default":true}]},{"pkg-name":"shake","pkg-version":"0.19.7","component-name":"test:shake-test","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"lib","available":[{"id":"splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","component-name":"lib","build-by-default":true}]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:examples","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:initialization","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:montecarlo-pi","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:montecarlo-pi-32","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-dieharder","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-tests","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-testu01","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:comparison","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:range","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:simple-sum","available":["TargetNotLocal"]},{"pkg-name":"stm","pkg-version":"2.5.1.0","component-name":"lib","available":[{"id":"stm-2.5.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"system-cxx-std-lib","pkg-version":"1.0","component-name":"lib","available":[{"id":"system-cxx-std-lib-1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"template-haskell","pkg-version":"2.20.0.0","component-name":"lib","available":[{"id":"template-haskell-2.20.0.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"text","pkg-version":"2.0.2","component-name":"lib","available":[{"id":"text-2.0.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"time","pkg-version":"1.12.2","component-name":"lib","available":[{"id":"time-1.12.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"transformers","pkg-version":"0.6.1.0","component-name":"lib","available":[{"id":"transformers-0.6.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix","pkg-version":"2.8.4.0","component-name":"lib","available":[{"id":"unix-2.8.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"unordered-containers","pkg-version":"0.2.19.1","component-name":"lib","available":[{"id":"unordered-containers-0.2.19.1-0eb0d95c2f270578763e7cbc938fd7d57fa65a8f3c10aa64b616bc79bbf6b993","component-name":"lib","build-by-default":true}]},{"pkg-name":"unordered-containers","pkg-version":"0.2.19.1","component-name":"test:unordered-containers-tests","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.19.1","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"utf8-string","pkg-version":"1.0.2","component-name":"lib","available":[{"id":"utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05","component-name":"lib","build-by-default":true}]},{"pkg-name":"utf8-string","pkg-version":"1.0.2","component-name":"test:unit-tests","available":["TargetNotLocal"]}]} \ No newline at end of file diff --git a/materialized/ghcjs/alex/ghc8107/plan.json b/materialized/ghcjs/alex/ghc8107/plan.json new file mode 100644 index 0000000000..699dfef194 --- /dev/null +++ b/materialized/ghcjs/alex/ghc8107/plan.json @@ -0,0 +1 @@ +{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-8.10.7","os":"linux","arch":"x86_64","install-plan":[{"type":"configured","id":"alex-3.2.5-inplace-alex","pkg-name":"alex","pkg-version":"3.2.5","flags":{"small_base":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/alex-3.2.5/x/alex","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/alex-3.2.5/x/alex/build-info.json","depends":["array-0.5.4.0","base-4.14.3.0","containers-0.6.5.1","directory-1.3.6.0"],"exe-depends":[],"component-name":"exe:alex","bin-file":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/alex-3.2.5/x/alex/build/alex/alex"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.14.3.0"]},{"type":"pre-existing","id":"base-4.14.3.0","pkg-name":"base","pkg-version":"4.14.3.0","depends":["ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"pre-existing","id":"bytestring-0.10.12.0","pkg-name":"bytestring","pkg-version":"0.10.12.0","depends":["base-4.14.3.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.14.3.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"deepseq-1.4.4.0","pkg-name":"deepseq","pkg-version":"1.4.4.0","depends":["array-0.5.4.0","base-4.14.3.0","ghc-prim-0.6.1"]},{"type":"pre-existing","id":"directory-1.3.6.0","pkg-name":"directory","pkg-version":"1.3.6.0","depends":["base-4.14.3.0","filepath-1.4.2.1","time-1.9.3","unix-2.7.2.2"]},{"type":"pre-existing","id":"filepath-1.4.2.1","pkg-name":"filepath","pkg-version":"1.4.2.1","depends":["base-4.14.3.0"]},{"type":"pre-existing","id":"ghc-prim-0.6.1","pkg-name":"ghc-prim","pkg-version":"0.6.1","depends":[]},{"type":"pre-existing","id":"integer-gmp-1.0.3.0","pkg-name":"integer-gmp","pkg-version":"1.0.3.0","depends":["ghc-prim-0.6.1"]},{"type":"pre-existing","id":"time-1.9.3","pkg-name":"time","pkg-version":"1.9.3","depends":["base-4.14.3.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.14.3.0","bytestring-0.10.12.0","time-1.9.3"]}],"targets":[{"pkg-name":"alex","pkg-version":"3.2.5","component-name":"exe:alex","available":[{"id":"alex-3.2.5-inplace-alex","component-name":"exe:alex","build-by-default":true}]},{"pkg-name":"alex","pkg-version":"3.2.5","component-name":"test:tests","available":["TargetDisabledByUser"]},{"pkg-name":"array","pkg-version":"0.5.4.0","component-name":"lib","available":[{"id":"array-0.5.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base","pkg-version":"4.14.3.0","component-name":"lib","available":[{"id":"base-4.14.3.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"bytestring","pkg-version":"0.10.12.0","component-name":"lib","available":[{"id":"bytestring-0.10.12.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"containers","pkg-version":"0.6.5.1","component-name":"lib","available":[{"id":"containers-0.6.5.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"deepseq","pkg-version":"1.4.4.0","component-name":"lib","available":[{"id":"deepseq-1.4.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory","pkg-version":"1.3.6.0","component-name":"lib","available":[{"id":"directory-1.3.6.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"filepath","pkg-version":"1.4.2.1","component-name":"lib","available":[{"id":"filepath-1.4.2.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-prim","pkg-version":"0.6.1","component-name":"lib","available":[{"id":"ghc-prim-0.6.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"integer-gmp","pkg-version":"1.0.3.0","component-name":"lib","available":[{"id":"integer-gmp-1.0.3.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"time","pkg-version":"1.9.3","component-name":"lib","available":[{"id":"time-1.9.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix","pkg-version":"2.7.2.2","component-name":"lib","available":[{"id":"unix-2.7.2.2","component-name":"lib","build-by-default":true}]}]} \ No newline at end of file diff --git a/materialized/ghcjs/cabal/ghc8107/plan.json b/materialized/ghcjs/cabal/ghc8107/plan.json new file mode 100644 index 0000000000..705277e3da --- /dev/null +++ b/materialized/ghcjs/cabal/ghc8107/plan.json @@ -0,0 +1 @@ +{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-8.10.7","os":"linux","arch":"x86_64","install-plan":[{"type":"configured","id":"Cabal-3.8.1.0-254ed15bf5c8a3507521ed173962e284f55d5b289da364545928a13d0408b8e4","pkg-name":"Cabal","pkg-version":"3.8.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"77121d8e1aff14a0fd95684b751599db78a7dd26d55862d9fcef27c88b193e9d","pkg-src-sha256":"7464cbe6c2f3d7e5d0232023a1a7330621f8b24853cb259fc89a2af85b736608","depends":["Cabal-syntax-3.8.1.0-b915cfc5b689dcee3ff0da5b8645eb84bdc2e94162e5401107d4d2a109ae6373","array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","pretty-1.1.3.6","process-1.6.18.0-28f4084bc816db0935a003bd3b4728b865df3c3b7ad5f4bf5b50a396aff656cf","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"Cabal-syntax-3.8.1.0-b915cfc5b689dcee3ff0da5b8645eb84bdc2e94162e5401107d4d2a109ae6373","pkg-name":"Cabal-syntax","pkg-version":"3.8.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ed2d937ba6c6a20b75850349eedd41374885fc42369ef152d69e2ba70f44f593","pkg-src-sha256":"07e8ddb19fe01781485f1522b6afc22aba680b0ab28ebe6bbfb84a2dd698ce0f","depends":["array-0.5.4.0","base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","pretty-1.1.3.6","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"HTTP-4000.4.1-75090b1b9f3cc3003a55f795457e6ac8bd0a05b1dd347188fb0cee06b7543689","pkg-name":"HTTP","pkg-version":"4000.4.1","flags":{"conduit10":false,"network-uri":true,"warn-as-error":false,"warp-tests":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0e37572590743e49d7a610f472e1618a594dc861410846f64d9f2347923c4f5b","pkg-src-sha256":"df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","mtl-2.2.2","network-3.1.4.0-31810b3941ba7a39c57ad4465a156d9552feb0b0dc9374aa6db4b73509c135e0","network-uri-2.6.4.2-512664775d014e86058cdfe34db9c888ac621c84b2dc250f655809aaf578be46","parsec-3.1.14.0","time-1.9.3","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.14.3.0"]},{"type":"configured","id":"async-2.2.4-76ad0185450ead1eb319be2b17f5d4929d4a2036dd6daf6b7e1d375f94098f27","pkg-name":"async","pkg-version":"2.2.4","flags":{"bench":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9b8ceefce014e490f9e1335fa5f511161309926c55d01cec795016f4363b5d2d","pkg-src-sha256":"484df85be0e76c4fed9376451e48e1d0c6e97952ce79735b72d54297e7e0a725","depends":["base-4.14.3.0","hashable-1.4.3.0-0b38c3308404686982e5e2b43e60fe1ab5f9c32b8c8e799c52c8caf95a469cd1","stm-2.5.0.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"base-4.14.3.0","pkg-name":"base","pkg-version":"4.14.3.0","depends":["ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"configured","id":"base-orphans-0.9.1-5afa3fad682fdc56445f2fff83348e814c91c11da808225c081be9f5ba3bbd42","pkg-name":"base-orphans","pkg-version":"0.9.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c4733d09f798fc4304e936924a1a7d9fc2425aefad6c46ad4592035254b46051","pkg-src-sha256":"5bbf2da382c5b212d6a8be2f8c49edee0eba30f272a15fd32c13e6e4091ef172","depends":["base-4.14.3.0","ghc-prim-0.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"base16-bytestring-1.0.2.0-733bc7ff54d4d1205255b2131fae86a7fe07229cb5ada4f2260950334d026547","pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a694e88f9ec9fc79f0b03f233d3fea592b68f70a34aac2ddb5bcaecb6562e2fd","pkg-src-sha256":"1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784","depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"base64-bytestring-1.2.1.0-1ceca88b1d8a588ade6eab7e0148751072964f9ea42862f670ae020beee1532b","pkg-name":"base64-bytestring","pkg-version":"1.2.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"45305ccf8914c66d385b518721472c7b8c858f1986945377f74f85c1e0d49803","pkg-src-sha256":"fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9","depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"binary-0.8.8.0","pkg-name":"binary","pkg-version":"0.8.8.0","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","ghc-prim-0.6.1"]},{"type":"pre-existing","id":"bytestring-0.10.12.0","pkg-name":"bytestring","pkg-version":"0.10.12.0","depends":["base-4.14.3.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"configured","id":"cabal-install-3.8.1.0-inplace","pkg-name":"cabal-install","pkg-version":"3.8.1.0","flags":{"lukko":true,"native-dns":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/cabal-install-3.8.1.0","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/cabal-install-3.8.1.0/build-info.json","depends":["Cabal-3.8.1.0-254ed15bf5c8a3507521ed173962e284f55d5b289da364545928a13d0408b8e4","Cabal-syntax-3.8.1.0-b915cfc5b689dcee3ff0da5b8645eb84bdc2e94162e5401107d4d2a109ae6373","HTTP-4000.4.1-75090b1b9f3cc3003a55f795457e6ac8bd0a05b1dd347188fb0cee06b7543689","array-0.5.4.0","async-2.2.4-76ad0185450ead1eb319be2b17f5d4929d4a2036dd6daf6b7e1d375f94098f27","base-4.14.3.0","base16-bytestring-1.0.2.0-733bc7ff54d4d1205255b2131fae86a7fe07229cb5ada4f2260950334d026547","binary-0.8.8.0","bytestring-0.10.12.0","cabal-install-solver-3.8.1.0-0330e22ac010fe5032765c3fa31d1f807a4db2c832ec8dcbe30dce8aeae51255","containers-0.6.5.1","cryptohash-sha256-0.11.102.1-2a240aba380ab68e1884623d77ed4a88ed685ddb9615cc2d3da0054e00f826b2","directory-1.3.6.0","echo-0.1.4-f017006d03acda071f87eb81ed298118d192419036421744381a3e83d0d50f48","edit-distance-0.2.2.1-080b99643aaa59dbaf9bd405d7ff53f3915fe0496490f9875fea3bd375290254","exceptions-0.10.4","filepath-1.4.2.1","hackage-security-0.6.2.3-2a59930aa81f942708ad4f1d9aad08e3c17b71808f509c5fe8cfae3e29beb48b","hashable-1.4.3.0-0b38c3308404686982e5e2b43e60fe1ab5f9c32b8c8e799c52c8caf95a469cd1","lukko-0.1.1.3-175058dba6e76fc42a1227b8a998ec3630fc5a044650ccb155baad5fea2291ff","mtl-2.2.2","network-uri-2.6.4.2-512664775d014e86058cdfe34db9c888ac621c84b2dc250f655809aaf578be46","parsec-3.1.14.0","pretty-1.1.3.6","process-1.6.18.0-28f4084bc816db0935a003bd3b4728b865df3c3b7ad5f4bf5b50a396aff656cf","random-1.2.1.1-b872f3388deff3e63fa8625e4b64db91c39eb1fa6bb7eb2a71f43ff049f2830c","regex-base-0.94.0.2-fe2b37ccad4ad4d57b72ea59bd44841e9fe48b41f3925a58e7776dec1132252a","regex-posix-0.96.0.1-2b78e133dfdc85cf98c18d126955d5e323319db0e0cd2c02535ee368e1e3adde","resolv-0.2.0.2-bdb32c7f655d10427844dcf40badfe6c12e39ba818147e78f9a1e973e41f6e78","safe-exceptions-0.1.7.4-1db4b3cf1327cbd19559cac8a1522c8f793394f62c3dab6432f6d8666974d3d6","stm-2.5.0.1","tar-0.5.1.1-643c87cd04d43966ba086abf693a99a6c8e6a74b2250a8c6db6f078672b95893","text-1.2.4.1","time-1.9.3","unix-2.7.2.2","zlib-0.6.3.0-74d9ec99f546b67df23ff9fcfa69fbf35a9bddd9a5cf16da9466177d8b057ac5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cabal-install-3.8.1.0-inplace-cabal","pkg-name":"cabal-install","pkg-version":"3.8.1.0","flags":{"lukko":true,"native-dns":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/cabal-install-3.8.1.0/x/cabal","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/cabal-install-3.8.1.0/x/cabal/build-info.json","depends":["Cabal-3.8.1.0-254ed15bf5c8a3507521ed173962e284f55d5b289da364545928a13d0408b8e4","Cabal-syntax-3.8.1.0-b915cfc5b689dcee3ff0da5b8645eb84bdc2e94162e5401107d4d2a109ae6373","base-4.14.3.0","cabal-install-3.8.1.0-inplace","directory-1.3.6.0","filepath-1.4.2.1"],"exe-depends":[],"component-name":"exe:cabal","bin-file":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/cabal-install-3.8.1.0/x/cabal/build/cabal/cabal"},{"type":"configured","id":"cabal-install-solver-3.8.1.0-0330e22ac010fe5032765c3fa31d1f807a4db2c832ec8dcbe30dce8aeae51255","pkg-name":"cabal-install-solver","pkg-version":"3.8.1.0","flags":{"debug-conflict-sets":false,"debug-expensive-assertions":false,"debug-tracetree":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"95f75217c3f6f7231576d73dd9275303f271360a0a2a0f02bb03c80b843c88bc","pkg-src-sha256":"df2369f6c37517a3b2625bc19057d9e206bbb40386bcb607f17dc7d2e588ffe7","depends":["Cabal-3.8.1.0-254ed15bf5c8a3507521ed173962e284f55d5b289da364545928a13d0408b8e4","Cabal-syntax-3.8.1.0-b915cfc5b689dcee3ff0da5b8645eb84bdc2e94162e5401107d4d2a109ae6373","array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","edit-distance-0.2.2.1-080b99643aaa59dbaf9bd405d7ff53f3915fe0496490f9875fea3bd375290254","filepath-1.4.2.1","mtl-2.2.2","pretty-1.1.3.6","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.14.3.0","deepseq-1.4.4.0"]},{"type":"configured","id":"cryptohash-sha256-0.11.102.1-2a240aba380ab68e1884623d77ed4a88ed685ddb9615cc2d3da0054e00f826b2","pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","flags":{"exe":false,"use-cbits":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"03db065161987f614a3a2bbcd16264f78e47efe231fb5bd161be2043eaf20488","pkg-src-sha256":"73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6","depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"data-array-byte-0.1.0.1-d9dda83e05cdc02ac88cc22a3ba90d50910d002ea0597977e3b36db50cb97a49","pkg-name":"data-array-byte","pkg-version":"0.1.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ad89e28b2b046175698fbf542af2ce43e5d2af50aae9f48d12566b1bb3de1d3c","pkg-src-sha256":"1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600","depends":["base-4.14.3.0","deepseq-1.4.4.0","template-haskell-2.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.4.4.0","pkg-name":"deepseq","pkg-version":"1.4.4.0","depends":["array-0.5.4.0","base-4.14.3.0","ghc-prim-0.6.1"]},{"type":"pre-existing","id":"directory-1.3.6.0","pkg-name":"directory","pkg-version":"1.3.6.0","depends":["base-4.14.3.0","filepath-1.4.2.1","time-1.9.3","unix-2.7.2.2"]},{"type":"configured","id":"echo-0.1.4-f017006d03acda071f87eb81ed298118d192419036421744381a3e83d0d50f48","pkg-name":"echo","pkg-version":"0.1.4","flags":{"example":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42","pkg-src-sha256":"c9fe1bf2904825a65b667251ec644f197b71dc5c209d2d254be5de3d496b0e43","depends":["base-4.14.3.0","process-1.6.18.0-28f4084bc816db0935a003bd3b4728b865df3c3b7ad5f4bf5b50a396aff656cf"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ed25519-0.0.5.0-4102d940d669a56b216c5ca3e7ba3153a26cdd1810b38c4c08f49740ff9de4ad","pkg-name":"ed25519","pkg-version":"0.0.5.0","flags":{"no-donna":true,"test-doctests":true,"test-hlint":true,"test-properties":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"48383789821af5cc624498f3ee1d0939a070cda9468c0bfe63c951736be81c75","pkg-src-sha256":"d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d","depends":["base-4.14.3.0","bytestring-0.10.12.0","ghc-prim-0.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"edit-distance-0.2.2.1-080b99643aaa59dbaf9bd405d7ff53f3915fe0496490f9875fea3bd375290254","pkg-name":"edit-distance","pkg-version":"0.2.2.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee","pkg-src-sha256":"3e8885ee2f56ad4da940f043ae8f981ee2fe336b5e8e4ba3f7436cff4f526c4a","depends":["array-0.5.4.0","base-4.14.3.0","containers-0.6.5.1","random-1.2.1.1-b872f3388deff3e63fa8625e4b64db91c39eb1fa6bb7eb2a71f43ff049f2830c"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"exceptions-0.10.4","pkg-name":"exceptions","pkg-version":"0.10.4","depends":["base-4.14.3.0","mtl-2.2.2","stm-2.5.0.1","template-haskell-2.16.0.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"filepath-1.4.2.1","pkg-name":"filepath","pkg-version":"1.4.2.1","depends":["base-4.14.3.0"]},{"type":"pre-existing","id":"ghc-boot-th-8.10.7","pkg-name":"ghc-boot-th","pkg-version":"8.10.7","depends":["base-4.14.3.0"]},{"type":"pre-existing","id":"ghc-prim-0.6.1","pkg-name":"ghc-prim","pkg-version":"0.6.1","depends":[]},{"type":"configured","id":"hackage-security-0.6.2.3-2a59930aa81f942708ad4f1d9aad08e3c17b71808f509c5fe8cfae3e29beb48b","pkg-name":"hackage-security","pkg-version":"0.6.2.3","flags":{"base48":true,"cabal-syntax":true,"lukko":true,"mtl21":false,"old-directory":false,"use-network-uri":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2b2e560ac449e49f86a10d79957b2409da5be4b77edabd7425696780334cf3bf","pkg-src-sha256":"52ee0576971955571d846b8e6c09638f89f4f7881f4a95173e44ccc0d856a066","depends":["Cabal-syntax-3.8.1.0-b915cfc5b689dcee3ff0da5b8645eb84bdc2e94162e5401107d4d2a109ae6373","base-4.14.3.0","base16-bytestring-1.0.2.0-733bc7ff54d4d1205255b2131fae86a7fe07229cb5ada4f2260950334d026547","base64-bytestring-1.2.1.0-1ceca88b1d8a588ade6eab7e0148751072964f9ea42862f670ae020beee1532b","bytestring-0.10.12.0","containers-0.6.5.1","cryptohash-sha256-0.11.102.1-2a240aba380ab68e1884623d77ed4a88ed685ddb9615cc2d3da0054e00f826b2","directory-1.3.6.0","ed25519-0.0.5.0-4102d940d669a56b216c5ca3e7ba3153a26cdd1810b38c4c08f49740ff9de4ad","filepath-1.4.2.1","ghc-prim-0.6.1","lukko-0.1.1.3-175058dba6e76fc42a1227b8a998ec3630fc5a044650ccb155baad5fea2291ff","mtl-2.2.2","network-3.1.4.0-31810b3941ba7a39c57ad4465a156d9552feb0b0dc9374aa6db4b73509c135e0","network-uri-2.6.4.2-512664775d014e86058cdfe34db9c888ac621c84b2dc250f655809aaf578be46","parsec-3.1.14.0","pretty-1.1.3.6","tar-0.5.1.1-643c87cd04d43966ba086abf693a99a6c8e6a74b2250a8c6db6f078672b95893","template-haskell-2.16.0.0","time-1.9.3","transformers-0.5.6.2","zlib-0.6.3.0-74d9ec99f546b67df23ff9fcfa69fbf35a9bddd9a5cf16da9466177d8b057ac5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hashable-1.4.3.0-0b38c3308404686982e5e2b43e60fe1ab5f9c32b8c8e799c52c8caf95a469cd1","pkg-name":"hashable","pkg-version":"1.4.3.0","flags":{"integer-gmp":true,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f3bf68acfa0df7a064a378ef2cdcfeb55e6fb96100675f4c593556dcbf3d7194","pkg-src-sha256":"32efb16c2891786209b7cbe5c39df9b3a9ae51e836f1a54f646bc4602b7ab0f5","depends":["base-4.14.3.0","base-orphans-0.9.1-5afa3fad682fdc56445f2fff83348e814c91c11da808225c081be9f5ba3bbd42","bytestring-0.10.12.0","containers-0.6.5.1","data-array-byte-0.1.0.1-d9dda83e05cdc02ac88cc22a3ba90d50910d002ea0597977e3b36db50cb97a49","deepseq-1.4.4.0","filepath-1.4.2.1","ghc-prim-0.6.1","integer-gmp-1.0.3.0","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hsc2hs-0.68.10-e-hsc2hs-667757714a750c154bd4047351c7d1c5379d9b47952d3c07a836f326a045cf4e","pkg-name":"hsc2hs","pkg-version":"0.68.10","flags":{"in-ghc-tree":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"488cca2a179a5141da8f35a3a7e6699a0ef690f834f589d6b152c4947aa8fe2d","pkg-src-sha256":"6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76","depends":["base-4.14.3.0","containers-0.6.5.1","directory-1.3.6.0","filepath-1.4.2.1","process-1.6.18.0-28f4084bc816db0935a003bd3b4728b865df3c3b7ad5f4bf5b50a396aff656cf"],"exe-depends":[],"component-name":"exe:hsc2hs","bin-file":"/store/ghc-8.10.7/hsc2hs-0.68.10-e-hsc2hs-667757714a750c154bd4047351c7d1c5379d9b47952d3c07a836f326a045cf4e/bin/hsc2hs"},{"type":"pre-existing","id":"integer-gmp-1.0.3.0","pkg-name":"integer-gmp","pkg-version":"1.0.3.0","depends":["ghc-prim-0.6.1"]},{"type":"configured","id":"lukko-0.1.1.3-175058dba6e76fc42a1227b8a998ec3630fc5a044650ccb155baad5fea2291ff","pkg-name":"lukko","pkg-version":"0.1.1.3","flags":{"ofd-locking":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"17786545dce60c4d5783ba6125c0a6499a1abddd3d7417b15500ccd767c35f07","pkg-src-sha256":"a80efb60cfa3dae18682c01980d76d5f7e413e191cd186992e1bf7388d48ab1f","depends":["base-4.14.3.0"],"exe-depends":["hsc2hs-0.68.10-e-hsc2hs-667757714a750c154bd4047351c7d1c5379d9b47952d3c07a836f326a045cf4e"],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.14.3.0","transformers-0.5.6.2"]},{"type":"configured","id":"network-3.1.4.0-31810b3941ba7a39c57ad4465a156d9552feb0b0dc9374aa6db4b73509c135e0","pkg-name":"network","pkg-version":"3.1.4.0","flags":{"devel":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def","pkg-src-sha256":"b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e","components":{"lib":{"depends":["base-4.14.3.0","bytestring-0.10.12.0","deepseq-1.4.4.0","directory-1.3.6.0"],"exe-depends":["hsc2hs-0.68.10-e-hsc2hs-667757714a750c154bd4047351c7d1c5379d9b47952d3c07a836f326a045cf4e"]}}},{"type":"configured","id":"network-uri-2.6.4.2-512664775d014e86058cdfe34db9c888ac621c84b2dc250f655809aaf578be46","pkg-name":"network-uri","pkg-version":"2.6.4.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6fffb57373962b5651a2db8b0af732098b3bf029a7ced76a9855615de2026588","pkg-src-sha256":"9c188973126e893250b881f20e8811dca06c223c23402b06f7a1f2e995797228","depends":["base-4.14.3.0","deepseq-1.4.4.0","parsec-3.1.14.0","template-haskell-2.16.0.0","th-compat-0.1.4-e68b2813868be10a140f1cc31b5113ed69a77034f00f4aa43752fe73e721811b"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"parsec-3.1.14.0","pkg-name":"parsec","pkg-version":"3.1.14.0","depends":["base-4.14.3.0","bytestring-0.10.12.0","mtl-2.2.2","text-1.2.4.1"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.14.3.0","deepseq-1.4.4.0","ghc-prim-0.6.1"]},{"type":"configured","id":"process-1.6.18.0-28f4084bc816db0935a003bd3b4728b865df3c3b7ad5f4bf5b50a396aff656cf","pkg-name":"process","pkg-version":"1.6.18.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"cd0a3e0376b5a8525983d3131a31e52f9ffefc278ce635eec45a9d3987b8be3e","pkg-src-sha256":"aa5f4c4fe4974f89f5ab998c7509daa4bda3926cfb06daacd5eba892aad8a37e","components":{"lib":{"depends":["base-4.14.3.0","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","unix-2.7.2.2"],"exe-depends":[]}}},{"type":"configured","id":"random-1.2.1.1-b872f3388deff3e63fa8625e4b64db91c39eb1fa6bb7eb2a71f43ff049f2830c","pkg-name":"random","pkg-version":"1.2.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e7c1f881159d5cc788619c9ee8b8f340ba2ff0db571cdf3d1a1968ebc5108789","pkg-src-sha256":"3e1272f7ed6a4d7bd1712b90143ec326fee9b225789222379fea20a9c90c9b76","depends":["base-4.14.3.0","bytestring-0.10.12.0","deepseq-1.4.4.0","mtl-2.2.2","splitmix-0.1.0.5-0e6e46cae31ddf8c25afcce5ef25132ee5a5e94d2cc31382c000a371f20a176e"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"regex-base-0.94.0.2-fe2b37ccad4ad4d57b72ea59bd44841e9fe48b41f3925a58e7776dec1132252a","pkg-name":"regex-base","pkg-version":"0.94.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0322b2fcd1358f3355e0c8608efa60d27b14d1c9d476451dbcb9181363bd8b27","pkg-src-sha256":"7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"regex-posix-0.96.0.1-2b78e133dfdc85cf98c18d126955d5e323319db0e0cd2c02535ee368e1e3adde","pkg-name":"regex-posix","pkg-version":"0.96.0.1","flags":{"_regex-posix-clib":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"816d6acc560cb86672f347a7bef8129578dde26ed760f9e79b4976ed9bd7b9fd","pkg-src-sha256":"c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","regex-base-0.94.0.2-fe2b37ccad4ad4d57b72ea59bd44841e9fe48b41f3925a58e7776dec1132252a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"resolv-0.2.0.2-bdb32c7f655d10427844dcf40badfe6c12e39ba818147e78f9a1e973e41f6e78","pkg-name":"resolv","pkg-version":"0.2.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4868265ab5760d2fdeb96625b138c8df25d41b9ee2651fa299ed019a69403045","pkg-src-sha256":"880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b","components":{"lib":{"depends":["base-4.14.3.0","base16-bytestring-1.0.2.0-733bc7ff54d4d1205255b2131fae86a7fe07229cb5ada4f2260950334d026547","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1"],"exe-depends":[]}}},{"type":"configured","id":"safe-exceptions-0.1.7.4-1db4b3cf1327cbd19559cac8a1522c8f793394f62c3dab6432f6d8666974d3d6","pkg-name":"safe-exceptions","pkg-version":"0.1.7.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"8bb7261bd54bd58acfcb154be6a161fb6d0d31a1852aadc8e927d2ad2d7651d1","pkg-src-sha256":"3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6","depends":["base-4.14.3.0","deepseq-1.4.4.0","exceptions-0.10.4","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"splitmix-0.1.0.5-0e6e46cae31ddf8c25afcce5ef25132ee5a5e94d2cc31382c000a371f20a176e","pkg-name":"splitmix","pkg-version":"0.1.0.5","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"bac0ae8d46a04e410666b0c8081cff63f060f29157983b569ca86ddb6e6e0dc6","pkg-src-sha256":"9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002","depends":["base-4.14.3.0","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"stm-2.5.0.1","pkg-name":"stm","pkg-version":"2.5.0.1","depends":["array-0.5.4.0","base-4.14.3.0"]},{"type":"configured","id":"tar-0.5.1.1-643c87cd04d43966ba086abf693a99a6c8e6a74b2250a8c6db6f078672b95893","pkg-name":"tar","pkg-version":"0.5.1.1","flags":{"old-bytestring":false,"old-time":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3bbccd643018c7bf53d27740a66d7d5c856923acee960412e6dadff207c5e2ae","pkg-src-sha256":"b384449f62b2b0aa3e6d2cb1004b8060b01f21ec93e7b63e7af6d8fad8a9f1de","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","time-1.9.3"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.16.0.0","pkg-name":"template-haskell","pkg-version":"2.16.0.0","depends":["base-4.14.3.0","ghc-boot-th-8.10.7","ghc-prim-0.6.1","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-1.2.4.1","pkg-name":"text","pkg-version":"1.2.4.1","depends":["array-0.5.4.0","base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0","template-haskell-2.16.0.0"]},{"type":"configured","id":"th-compat-0.1.4-e68b2813868be10a140f1cc31b5113ed69a77034f00f4aa43752fe73e721811b","pkg-name":"th-compat","pkg-version":"0.1.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3e7d1b8f9c72cab04c8dfdfd26589dd7f31e015ad640a207aca3b654577532ff","pkg-src-sha256":"d8f97ac14ab47b6b8a7b0fdb4ff95426322ec56badd01652ac15da4a44d4bab8","depends":["base-4.14.3.0","directory-1.3.6.0","filepath-1.4.2.1","template-haskell-2.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"time-1.9.3","pkg-name":"time","pkg-version":"1.9.3","depends":["base-4.14.3.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.14.3.0","ghc-prim-0.6.1"]},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.14.3.0","bytestring-0.10.12.0","time-1.9.3"]},{"type":"configured","id":"zlib-0.6.3.0-74d9ec99f546b67df23ff9fcfa69fbf35a9bddd9a5cf16da9466177d8b057ac5","pkg-name":"zlib","pkg-version":"0.6.3.0","flags":{"bundled-c-zlib":false,"non-blocking-ffi":false,"pkg-config":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"19eb7759af71957811d5ec10ddb1e2f4c98700ddb9c0da6860c0441d811f0e6d","pkg-src-sha256":"9eaa989ad4534438b5beb51c1d3a4c8f6a088fdff0b259a5394fbf39aaee04da","depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"}],"targets":[{"pkg-name":"Cabal","pkg-version":"3.8.1.0","component-name":"lib","available":[{"id":"Cabal-3.8.1.0-254ed15bf5c8a3507521ed173962e284f55d5b289da364545928a13d0408b8e4","component-name":"lib","build-by-default":true}]},{"pkg-name":"Cabal-syntax","pkg-version":"3.8.1.0","component-name":"lib","available":[{"id":"Cabal-syntax-3.8.1.0-b915cfc5b689dcee3ff0da5b8645eb84bdc2e94162e5401107d4d2a109ae6373","component-name":"lib","build-by-default":true}]},{"pkg-name":"HTTP","pkg-version":"4000.4.1","component-name":"lib","available":[{"id":"HTTP-4000.4.1-75090b1b9f3cc3003a55f795457e6ac8bd0a05b1dd347188fb0cee06b7543689","component-name":"lib","build-by-default":true}]},{"pkg-name":"HTTP","pkg-version":"4000.4.1","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"array","pkg-version":"0.5.4.0","component-name":"lib","available":[{"id":"array-0.5.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"async","pkg-version":"2.2.4","component-name":"lib","available":[{"id":"async-2.2.4-76ad0185450ead1eb319be2b17f5d4929d4a2036dd6daf6b7e1d375f94098f27","component-name":"lib","build-by-default":true}]},{"pkg-name":"async","pkg-version":"2.2.4","component-name":"exe:concasync","available":["TargetNotBuildable"]},{"pkg-name":"async","pkg-version":"2.2.4","component-name":"exe:conccancel","available":["TargetNotBuildable"]},{"pkg-name":"async","pkg-version":"2.2.4","component-name":"exe:race","available":["TargetNotBuildable"]},{"pkg-name":"async","pkg-version":"2.2.4","component-name":"test:test-async","available":["TargetNotLocal"]},{"pkg-name":"base","pkg-version":"4.14.3.0","component-name":"lib","available":[{"id":"base-4.14.3.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base-orphans","pkg-version":"0.9.1","component-name":"lib","available":[{"id":"base-orphans-0.9.1-5afa3fad682fdc56445f2fff83348e814c91c11da808225c081be9f5ba3bbd42","component-name":"lib","build-by-default":true}]},{"pkg-name":"base-orphans","pkg-version":"0.9.1","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","component-name":"lib","available":[{"id":"base16-bytestring-1.0.2.0-733bc7ff54d4d1205255b2131fae86a7fe07229cb5ada4f2260950334d026547","component-name":"lib","build-by-default":true}]},{"pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"base16-bytestring","pkg-version":"1.0.2.0","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"base64-bytestring","pkg-version":"1.2.1.0","component-name":"lib","available":[{"id":"base64-bytestring-1.2.1.0-1ceca88b1d8a588ade6eab7e0148751072964f9ea42862f670ae020beee1532b","component-name":"lib","build-by-default":true}]},{"pkg-name":"base64-bytestring","pkg-version":"1.2.1.0","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"base64-bytestring","pkg-version":"1.2.1.0","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"binary","pkg-version":"0.8.8.0","component-name":"lib","available":[{"id":"binary-0.8.8.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"bytestring","pkg-version":"0.10.12.0","component-name":"lib","available":[{"id":"bytestring-0.10.12.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"cabal-install","pkg-version":"3.8.1.0","component-name":"lib","available":[{"id":"cabal-install-3.8.1.0-inplace","component-name":"lib","build-by-default":true}]},{"pkg-name":"cabal-install","pkg-version":"3.8.1.0","component-name":"exe:cabal","available":[{"id":"cabal-install-3.8.1.0-inplace-cabal","component-name":"exe:cabal","build-by-default":true}]},{"pkg-name":"cabal-install","pkg-version":"3.8.1.0","component-name":"test:integration-tests2","available":["TargetDisabledByUser"]},{"pkg-name":"cabal-install","pkg-version":"3.8.1.0","component-name":"test:long-tests","available":["TargetDisabledByUser"]},{"pkg-name":"cabal-install","pkg-version":"3.8.1.0","component-name":"test:mem-use-tests","available":["TargetDisabledByUser"]},{"pkg-name":"cabal-install","pkg-version":"3.8.1.0","component-name":"test:unit-tests","available":["TargetDisabledByUser"]},{"pkg-name":"cabal-install-solver","pkg-version":"3.8.1.0","component-name":"lib","available":[{"id":"cabal-install-solver-3.8.1.0-0330e22ac010fe5032765c3fa31d1f807a4db2c832ec8dcbe30dce8aeae51255","component-name":"lib","build-by-default":true}]},{"pkg-name":"cabal-install-solver","pkg-version":"3.8.1.0","component-name":"test:unit-tests","available":["TargetNotLocal"]},{"pkg-name":"containers","pkg-version":"0.6.5.1","component-name":"lib","available":[{"id":"containers-0.6.5.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","component-name":"lib","available":[{"id":"cryptohash-sha256-0.11.102.1-2a240aba380ab68e1884623d77ed4a88ed685ddb9615cc2d3da0054e00f826b2","component-name":"lib","build-by-default":true}]},{"pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","component-name":"exe:sha256sum","available":["TargetNotBuildable"]},{"pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","component-name":"test:test-sha256","available":["TargetNotLocal"]},{"pkg-name":"cryptohash-sha256","pkg-version":"0.11.102.1","component-name":"bench:bench-sha256","available":["TargetNotLocal"]},{"pkg-name":"data-array-byte","pkg-version":"0.1.0.1","component-name":"lib","available":[{"id":"data-array-byte-0.1.0.1-d9dda83e05cdc02ac88cc22a3ba90d50910d002ea0597977e3b36db50cb97a49","component-name":"lib","build-by-default":true}]},{"pkg-name":"data-array-byte","pkg-version":"0.1.0.1","component-name":"test:data-array-byte-tests","available":["TargetNotLocal"]},{"pkg-name":"deepseq","pkg-version":"1.4.4.0","component-name":"lib","available":[{"id":"deepseq-1.4.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory","pkg-version":"1.3.6.0","component-name":"lib","available":[{"id":"directory-1.3.6.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"echo","pkg-version":"0.1.4","component-name":"lib","available":[{"id":"echo-0.1.4-f017006d03acda071f87eb81ed298118d192419036421744381a3e83d0d50f48","component-name":"lib","build-by-default":true}]},{"pkg-name":"echo","pkg-version":"0.1.4","component-name":"exe:password","available":["TargetNotBuildable"]},{"pkg-name":"ed25519","pkg-version":"0.0.5.0","component-name":"lib","available":[{"id":"ed25519-0.0.5.0-4102d940d669a56b216c5ca3e7ba3153a26cdd1810b38c4c08f49740ff9de4ad","component-name":"lib","build-by-default":true}]},{"pkg-name":"ed25519","pkg-version":"0.0.5.0","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"ed25519","pkg-version":"0.0.5.0","component-name":"test:hlint","available":["TargetNotLocal"]},{"pkg-name":"ed25519","pkg-version":"0.0.5.0","component-name":"test:properties","available":["TargetNotLocal"]},{"pkg-name":"ed25519","pkg-version":"0.0.5.0","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"edit-distance","pkg-version":"0.2.2.1","component-name":"lib","available":[{"id":"edit-distance-0.2.2.1-080b99643aaa59dbaf9bd405d7ff53f3915fe0496490f9875fea3bd375290254","component-name":"lib","build-by-default":true}]},{"pkg-name":"edit-distance","pkg-version":"0.2.2.1","component-name":"test:edit-distance-tests","available":["TargetNotLocal"]},{"pkg-name":"edit-distance","pkg-version":"0.2.2.1","component-name":"bench:edit-distance-benchmark","available":["TargetNotLocal"]},{"pkg-name":"exceptions","pkg-version":"0.10.4","component-name":"lib","available":[{"id":"exceptions-0.10.4","component-name":"lib","build-by-default":true}]},{"pkg-name":"filepath","pkg-version":"1.4.2.1","component-name":"lib","available":[{"id":"filepath-1.4.2.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-boot-th","pkg-version":"8.10.7","component-name":"lib","available":[{"id":"ghc-boot-th-8.10.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-prim","pkg-version":"0.6.1","component-name":"lib","available":[{"id":"ghc-prim-0.6.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"hackage-security","pkg-version":"0.6.2.3","component-name":"lib","available":[{"id":"hackage-security-0.6.2.3-2a59930aa81f942708ad4f1d9aad08e3c17b71808f509c5fe8cfae3e29beb48b","component-name":"lib","build-by-default":true}]},{"pkg-name":"hackage-security","pkg-version":"0.6.2.3","component-name":"test:TestSuite","available":["TargetNotLocal"]},{"pkg-name":"hashable","pkg-version":"1.4.3.0","component-name":"lib","available":[{"id":"hashable-1.4.3.0-0b38c3308404686982e5e2b43e60fe1ab5f9c32b8c8e799c52c8caf95a469cd1","component-name":"lib","build-by-default":true}]},{"pkg-name":"hashable","pkg-version":"1.4.3.0","component-name":"test:hashable-examples","available":["TargetNotLocal"]},{"pkg-name":"hashable","pkg-version":"1.4.3.0","component-name":"test:hashable-tests","available":["TargetNotLocal"]},{"pkg-name":"hsc2hs","pkg-version":"0.68.10","component-name":"exe:hsc2hs","available":[{"id":"hsc2hs-0.68.10-e-hsc2hs-667757714a750c154bd4047351c7d1c5379d9b47952d3c07a836f326a045cf4e","component-name":"exe:hsc2hs","build-by-default":true}]},{"pkg-name":"hsc2hs","pkg-version":"0.68.10","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"integer-gmp","pkg-version":"1.0.3.0","component-name":"lib","available":[{"id":"integer-gmp-1.0.3.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"lukko","pkg-version":"0.1.1.3","component-name":"lib","available":[{"id":"lukko-0.1.1.3-175058dba6e76fc42a1227b8a998ec3630fc5a044650ccb155baad5fea2291ff","component-name":"lib","build-by-default":true}]},{"pkg-name":"lukko","pkg-version":"0.1.1.3","component-name":"test:test-process","available":["TargetNotLocal"]},{"pkg-name":"lukko","pkg-version":"0.1.1.3","component-name":"test:test-thread","available":["TargetNotLocal"]},{"pkg-name":"mtl","pkg-version":"2.2.2","component-name":"lib","available":[{"id":"mtl-2.2.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"network","pkg-version":"3.1.4.0","component-name":"lib","available":[{"id":"network-3.1.4.0-31810b3941ba7a39c57ad4465a156d9552feb0b0dc9374aa6db4b73509c135e0","component-name":"lib","build-by-default":true}]},{"pkg-name":"network","pkg-version":"3.1.4.0","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"network-uri","pkg-version":"2.6.4.2","component-name":"lib","available":[{"id":"network-uri-2.6.4.2-512664775d014e86058cdfe34db9c888ac621c84b2dc250f655809aaf578be46","component-name":"lib","build-by-default":true}]},{"pkg-name":"network-uri","pkg-version":"2.6.4.2","component-name":"test:uri","available":["TargetNotLocal"]},{"pkg-name":"network-uri","pkg-version":"2.6.4.2","component-name":"bench:uri-bench","available":["TargetNotLocal"]},{"pkg-name":"parsec","pkg-version":"3.1.14.0","component-name":"lib","available":[{"id":"parsec-3.1.14.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"pretty","pkg-version":"1.1.3.6","component-name":"lib","available":[{"id":"pretty-1.1.3.6","component-name":"lib","build-by-default":true}]},{"pkg-name":"process","pkg-version":"1.6.18.0","component-name":"lib","available":[{"id":"process-1.6.18.0-28f4084bc816db0935a003bd3b4728b865df3c3b7ad5f4bf5b50a396aff656cf","component-name":"lib","build-by-default":true}]},{"pkg-name":"process","pkg-version":"1.6.18.0","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"lib","available":[{"id":"random-1.2.1.1-b872f3388deff3e63fa8625e4b64db91c39eb1fa6bb7eb2a71f43ff049f2830c","component-name":"lib","build-by-default":true}]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:legacy-test","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"test:spec-inspection","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.1","component-name":"bench:legacy-bench","available":["TargetNotLocal"]},{"pkg-name":"regex-base","pkg-version":"0.94.0.2","component-name":"lib","available":[{"id":"regex-base-0.94.0.2-fe2b37ccad4ad4d57b72ea59bd44841e9fe48b41f3925a58e7776dec1132252a","component-name":"lib","build-by-default":true}]},{"pkg-name":"regex-posix","pkg-version":"0.96.0.1","component-name":"lib","available":[{"id":"regex-posix-0.96.0.1-2b78e133dfdc85cf98c18d126955d5e323319db0e0cd2c02535ee368e1e3adde","component-name":"lib","build-by-default":true}]},{"pkg-name":"resolv","pkg-version":"0.2.0.2","component-name":"lib","available":[{"id":"resolv-0.2.0.2-bdb32c7f655d10427844dcf40badfe6c12e39ba818147e78f9a1e973e41f6e78","component-name":"lib","build-by-default":true}]},{"pkg-name":"resolv","pkg-version":"0.2.0.2","component-name":"test:resolv.","available":["TargetNotLocal"]},{"pkg-name":"safe-exceptions","pkg-version":"0.1.7.4","component-name":"lib","available":[{"id":"safe-exceptions-0.1.7.4-1db4b3cf1327cbd19559cac8a1522c8f793394f62c3dab6432f6d8666974d3d6","component-name":"lib","build-by-default":true}]},{"pkg-name":"safe-exceptions","pkg-version":"0.1.7.4","component-name":"test:safe-exceptions-test","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"lib","available":[{"id":"splitmix-0.1.0.5-0e6e46cae31ddf8c25afcce5ef25132ee5a5e94d2cc31382c000a371f20a176e","component-name":"lib","build-by-default":true}]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:examples","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:initialization","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:montecarlo-pi","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:montecarlo-pi-32","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-dieharder","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-tests","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-testu01","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:comparison","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:range","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:simple-sum","available":["TargetNotLocal"]},{"pkg-name":"stm","pkg-version":"2.5.0.1","component-name":"lib","available":[{"id":"stm-2.5.0.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"tar","pkg-version":"0.5.1.1","component-name":"lib","available":[{"id":"tar-0.5.1.1-643c87cd04d43966ba086abf693a99a6c8e6a74b2250a8c6db6f078672b95893","component-name":"lib","build-by-default":true}]},{"pkg-name":"tar","pkg-version":"0.5.1.1","component-name":"test:properties","available":["TargetNotLocal"]},{"pkg-name":"tar","pkg-version":"0.5.1.1","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"template-haskell","pkg-version":"2.16.0.0","component-name":"lib","available":[{"id":"template-haskell-2.16.0.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"text","pkg-version":"1.2.4.1","component-name":"lib","available":[{"id":"text-1.2.4.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"th-compat","pkg-version":"0.1.4","component-name":"lib","available":[{"id":"th-compat-0.1.4-e68b2813868be10a140f1cc31b5113ed69a77034f00f4aa43752fe73e721811b","component-name":"lib","build-by-default":true}]},{"pkg-name":"th-compat","pkg-version":"0.1.4","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"time","pkg-version":"1.9.3","component-name":"lib","available":[{"id":"time-1.9.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"transformers","pkg-version":"0.5.6.2","component-name":"lib","available":[{"id":"transformers-0.5.6.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix","pkg-version":"2.7.2.2","component-name":"lib","available":[{"id":"unix-2.7.2.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"zlib","pkg-version":"0.6.3.0","component-name":"lib","available":[{"id":"zlib-0.6.3.0-74d9ec99f546b67df23ff9fcfa69fbf35a9bddd9a5cf16da9466177d8b057ac5","component-name":"lib","build-by-default":true}]},{"pkg-name":"zlib","pkg-version":"0.6.3.0","component-name":"test:tests","available":["TargetNotLocal"]}]} \ No newline at end of file diff --git a/materialized/ghcjs/ghc8107/plan.json b/materialized/ghcjs/ghc8107/plan.json index b41b8c34e4..4ba83e3b03 100644 --- a/materialized/ghcjs/ghc8107/plan.json +++ b/materialized/ghcjs/ghc8107/plan.json @@ -1 +1 @@ -{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-8.10.7","os":"osx","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.2.1.0","pkg-name":"Cabal","pkg-version":"3.2.1.0","depends":["array-0.5.4.0","base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","pretty-1.1.3.6","process-1.6.13.2","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"HUnt-1.6.2.0-b7015290","pkg-name":"HUnit","pkg-version":"1.6.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1a79174e8af616117ad39464cac9de205ca923da6582825e97c10786fda933a4","pkg-src-sha256":"b0b7538871ffc058486fc00740886d2f3172f8fa6869936bfe83a5e10bd744ab","depends":["base-4.14.3.0","cll-stck-0.3.0-7605e60f","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"SHA-1.6.4.4-47cba51b","pkg-name":"SHA","pkg-version":"1.6.4.4","flags":{"exe":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3b7523df3e2186ae8c5ac78c745efb586814afe9c775b886a747556d9f4d429c","pkg-src-sha256":"6bd950df6b11a3998bb1452d875d2da043ee43385459afc5f16d471d25178b44","depends":["array-0.5.4.0","base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"SttVr-1.2.1-9a4219da","pkg-name":"StateVar","pkg-version":"1.2.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b8bea664120dc78f5c15d9b8c0947d51dbc58a0b63ee49971fa7caac9f3e0845","pkg-src-sha256":"ee261552912b60d8b937f0253615e310e6cc25f9c407001b3bcc2e3d55000f8b","depends":["base-4.14.3.0","stm-2.5.0.1","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.14.3.0"]},{"type":"pre-existing","id":"base-4.14.3.0","pkg-name":"base","pkg-version":"4.14.3.0","depends":["ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"configured","id":"bfnctrs-5.5.7-195e3fe2","pkg-name":"bifunctors","pkg-version":"5.5.7","flags":{"semigroups":true,"tagged":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"19d907460f166ade334e9d85d7c0bcc58b57da5e8f802b28bba6d8d81fd3ee70","pkg-src-sha256":"88b3a2d4504e1139a3aef7027913faa0870631477d0a2ebb6fa67d494cdb3532","depends":["base-4.14.3.0","bs-rphns-0.8.4-c8f36af6","cmnd-5.0.8-89fd52db","containers-0.6.5.1","tggd-0.8.6.1-22e9a365","template-haskell-2.16.0.0","th-bstrctn-0.3.2.0-ed858cb3","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"binary-0.8.8.0","pkg-name":"binary","pkg-version":"0.8.8.0","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","ghc-prim-0.6.1"]},{"type":"configured","id":"blz-bldr-0.4.2.1-f5d6708e","pkg-name":"blaze-builder","pkg-version":"0.4.2.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c1830d7b52910b4569162d4fad27da510bd6a4b43c94da1e9ec0712bebc36121","pkg-src-sha256":"6e6889bc9c3ff92062a17f3825dcc1b28510d261334d4d4e177232d904ea0b06","depends":["base-4.14.3.0","bytestring-0.10.12.0","deepseq-1.4.4.0","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"blz-html-0.9.1.2-11bdfacd","pkg-name":"blaze-html","pkg-version":"0.9.1.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"49db3eb70fa93fb572f3a9233b542b59e7f766a2b95c92d01d95a596c7727473","pkg-src-sha256":"60503f42546c6c1b954014d188ea137e43d74dcffd2bf6157c113fd91a0c394c","depends":["base-4.14.3.0","blz-bldr-0.4.2.1-f5d6708e","blz-mrkp-0.8.2.8-65ba3032","bytestring-0.10.12.0","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"blz-mrkp-0.8.2.8-65ba3032","pkg-name":"blaze-markup","pkg-version":"0.8.2.8","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b5916c6f0899d4d0094bed54af7397a8042fa3255e8ef459ab2cdf83a0c938e6","pkg-src-sha256":"43fc3f6872dc8d1be8d0fe091bd4775139b42179987f33d6490a7c5f1e07a349","depends":["base-4.14.3.0","blz-bldr-0.4.2.1-f5d6708e","bytestring-0.10.12.0","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"bs-cmpt-0.11.2-d5806554","pkg-name":"base-compat","pkg-version":"0.11.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f95374022a56e8c74a289e2b70ec50a1365f58b5f1f50f5c7f0fc14edf88f30e","pkg-src-sha256":"53a6b5145442fba5a4bad6db2bcdede17f164642b48bc39b95015422a39adbdb","depends":["base-4.14.3.0","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"bs-cmpt-bttrs-0.11.2-60bdc7ba","pkg-name":"base-compat-batteries","pkg-version":"0.11.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"eb3b976007754ddc16e8d4afacdd1e575ae746edb57dcd0a1a728ccd4b372a69","pkg-src-sha256":"31e066a5aa96af94fe6465adb959c38d63a49e01357641aa4322c754a94d3023","depends":["base-4.14.3.0","bs-cmpt-0.11.2-d5806554"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"bs-rphns-0.8.4-c8f36af6","pkg-name":"base-orphans","pkg-version":"0.8.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9a70dc95761ab9a9d49a038a4599b7b7945d486d80ed1678f347445bc336f3e0","pkg-src-sha256":"37b2b59356c03400a2d509862677393c5ff706a0aabf826c104f6fe03d93bbb3","depends":["base-4.14.3.0","ghc-prim-0.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"bs16-bytstrng-0.1.1.7-df2561c0","pkg-name":"base16-bytestring","pkg-version":"0.1.1.7","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0021256a9628971c08da95cb8f4d0d72192f3bb8a7b30b55c080562d17c43dd3","pkg-src-sha256":"525689679d5cc80fa532c1d5cfeace0f62bbb54134fad514f1ba00d0e7fe69ba","depends":["base-4.14.3.0","bytestring-0.10.12.0","ghc-prim-0.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"bs64-bytstrng-1.0.0.3-4e6d0aeb","pkg-name":"base64-bytestring","pkg-version":"1.0.0.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d5027ea6d63eab27cfa34eb1f5a05b6a5ee521dd176a06da3f7d80e117a88259","pkg-src-sha256":"ef159d60ec14c0a3f3e26bab5c9fd7634d5e1b983c6a64f0b0c3261efe008fc7","depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"bsb-http-chnkd-0.0.0.4-fe7d15c6","pkg-name":"bsb-http-chunked","pkg-version":"0.0.0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"add530e695ea3058bf4f7156a1ca85653ff3635b87ec6d1be8c4891645190f96","pkg-src-sha256":"148309e23eb8b261c1de374712372d62d8c8dc8ee504c392809c7ec33c0a0e7c","depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"bsmnt-0.0.11-f050f8fa","pkg-name":"basement","pkg-version":"0.0.11","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b685783bd7eeed832c47ebbd48599d9c45dccbc2380dd9295e137a30b37ecdc6","pkg-src-sha256":"67582b3475a5547925399f719df21f8bbbd0ca4d4db27795c22a474f8ee6346b","depends":["base-4.14.3.0","ghc-prim-0.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"bytbl-0.1.1-2633b450","pkg-name":"byteable","pkg-version":"0.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"12eeda93251d4b5d510ac95cf578f5c89d4a399b14ca73116deaf4921a516fdf","pkg-src-sha256":"243b34a1b5b64b39e39fe58f75c18f6cad5b668b10cabcd86816cbde27783fe2","depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"bytestring-0.10.12.0","pkg-name":"bytestring","pkg-version":"0.10.12.0","depends":["base-4.14.3.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"configured","id":"bytrdr-1.0.4-81c9a110","pkg-name":"byteorder","pkg-version":"1.0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a952817dcbe20af0346fb55a28c13e95e2ddbf3e99f9b4fffdc063f150f13b20","pkg-src-sha256":"bd20bbb586947f99c38a4c93d9d0266f49f6fc581767b51ba568f6d5d52d2919","components":{"lib":{"depends":["base-4.14.3.0"],"exe-depends":[]}}},{"type":"configured","id":"bytstrng-bldr-0.10.8.2.0-4ab17831","pkg-name":"bytestring-builder","pkg-version":"0.10.8.2.0","flags":{"bytestring_has_builder":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6b2b812cdac53f5a2c82376a416dde04adbb5ca3e1604c0d075368a0498f762b","pkg-src-sha256":"27faef6db27c5be5a3715fd68b93725853e0e668849eaf92ce7c33cef9cb2c3f","depends":["base-4.14.3.0","bytestring-0.10.12.0","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cbl-dctst-1.0.8-001accad","pkg-name":"cabal-doctest","pkg-version":"1.0.8","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"8bd1d614fb65f0d52609da30bf8e5ec71a4b6adf8ff5610edb3cb4d114576117","pkg-src-sha256":"2026a6a87d410202ce091412ca6bc33c5aca787025326b4a3d13425a23392e0e","depends":["Cabal-3.2.1.0","base-4.14.3.0","directory-1.3.6.0","filepath-1.4.2.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ck-0.4.5-cfccc30b","pkg-name":"cookie","pkg-version":"0.4.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"22bbe2bea34cfc546eaca2468386035fec521b8dbae52f5aa2f994ed68b35e0e","pkg-src-sha256":"707f94d1b31018b91d6a1e9e19ef5413e20d02cab00ad93a5fd7d7b3b46a3583","depends":["base-4.14.3.0","bytestring-0.10.12.0","dt-dflt-clss-0.1.2.0-b0a51f50","deepseq-1.4.4.0","text-1.2.4.1","time-1.9.3"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"clck-0.8.2-55eb42a0","pkg-name":"clock","pkg-version":"0.8.2","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"473ffd59765cc67634bdc55b63c699a85addf3a024089073ec2a862881e83e2a","pkg-src-sha256":"0b5db110c703e68b251d5883253a934b012110b45393fc65df1b095eb9a4e461","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cll-stck-0.3.0-7605e60f","pkg-name":"call-stack","pkg-version":"0.3.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dc369179410fd39542efde04778d1c4a18a015b3cf4b1703d9c88e07d58ece20","pkg-src-sha256":"b80e8de2b87f01922b23b328655ad2f843f42495f3e1033ae907aade603c716a","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"clr-2.3.5-3ce536bf","pkg-name":"colour","pkg-version":"2.3.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b27db0a3ad40d70bdbd8510a104269f8707592e80757a1abc66a22ba25e5a42f","pkg-src-sha256":"3b8d471979617dce7c193523743c9782df63433d8e87e3ef6d97922e0da104e7","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cmnd-5.0.8-89fd52db","pkg-name":"comonad","pkg-version":"5.0.8","flags":{"containers":true,"distributive":true,"indexed-traversable":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a3a140be7a21d6ba16bf9102bf4c79455ff3213679311587bac45ba0723c8d7a","pkg-src-sha256":"ef6cdf2cc292cc43ee6aa96c581b235fdea8ab44a0bffb24dc79ae2b2ef33d13","depends":["base-4.14.3.0","containers-0.6.5.1","dstrbtv-0.6.2.1-27e474d4","ndxd-trvrsbl-0.1.1-5423d452","tggd-0.8.6.1-22e9a365","transformers-0.5.6.2","trnsfrmrs-cmpt-0.6.6-c2257ba9"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cndt-1.3.4.1-7277901b","pkg-name":"conduit","pkg-version":"1.3.4.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"eeabaf3f822e3e15317995766f50ef4a20371bdc3bb4721a7541e37228018dcf","pkg-src-sha256":"85743b8d5f2d5779ccb7459b5a919c5786707af23fe7a065d281ee8e6dc226f1","depends":["base-4.14.3.0","bytestring-0.10.12.0","directory-1.3.6.0","exceptions-0.10.4","filepath-1.4.2.1","mn-trvrsbl-1.0.15.1-62aa4220","mtl-2.2.2","prmtv-0.7.1.0-9e5d8d36","rsrct-1.2.4.2-8c58f12d","text-1.2.4.1","transformers-0.5.6.2","unix-2.7.2.2","nlft-cr-0.2.0.1-0ed8000c","vctr-0.12.2.0-9301e615"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cnstrnts-0.13-1b93bc9d","pkg-name":"constraints","pkg-version":"0.13","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d341eb4adbf712f928706928d23a173fb3d0976f0dfaf6a274958975d5fc9e75","pkg-src-sha256":"9259af54682f2673931978d96074c147406b1e18bd9111903fcaefe9252a6590","depends":["base-4.14.3.0","binary-0.8.8.0","deepseq-1.4.4.0","ghc-prim-0.6.1","hshbl-1.3.1.0-81a7e86a","mtl-2.2.2","transformers-0.5.6.2","trnsfrmrs-cmpt-0.6.6-c2257ba9","typ-qlty-1-8a20443f"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cntrvrnt-1.5.3-cf62fb3c","pkg-name":"contravariant","pkg-version":"1.5.3","flags":{"semigroups":true,"statevar":true,"tagged":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e59a7742e725f94fc6578e3593cd3f6d4e3d46a9510c3a782e5fe5e5f238e3ce","pkg-src-sha256":"44536f0e331fde471271937323dc90409e95d47f57e42657fdaf242a0fd65dc1","depends":["SttVr-1.2.1-9a4219da","base-4.14.3.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.14.3.0","deepseq-1.4.4.0"]},{"type":"configured","id":"crypthsh-0.11.9-7a1d901a","pkg-name":"cryptohash","pkg-version":"0.11.9","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59d9494ba0cc9eef087ecba2e12e4d3e2d3b0327dd1542af552e3dca0e7de70d","pkg-src-sha256":"c28f847fc1fcd65b6eea2e74a100300af940919f04bb21d391f6a773968f22fb","depends":["base-4.14.3.0","bytbl-0.1.1-2633b450","bytestring-0.10.12.0","cryptnt-0.28-dfdefa25","ghc-prim-0.6.1","mmry-0.15.0-1ae4b367"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cryptnt-0.28-dfdefa25","pkg-name":"cryptonite","pkg-version":"0.28","flags":{"check_alignment":false,"integer-gmp":true,"old_toolchain_inliner":false,"support_aesni":true,"support_deepseq":true,"support_pclmuldq":false,"support_rdrand":true,"support_sse":false,"use_target_attributes":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b6c75e62b4c655d4cb1bcbb80d01430d136aac32bd6962c86c84738935cc8f9d","pkg-src-sha256":"74ad886ae3f7cd6cadecb596707e49df37b0170ceed313e382bd15b13132a5db","depends":["base-4.14.3.0","bsmnt-0.0.11-f050f8fa","bytestring-0.10.12.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0","mmry-0.15.0-1ae4b367"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cs-nsnstv-1.2.1.0-0f0c5d1c","pkg-name":"case-insensitive","pkg-version":"1.2.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9dfd3171fc7698cf8d931727d3af3a7b389135b583e46b5adac1f9d2026fff61","pkg-src-sha256":"296dc17e0c5f3dfb3d82ced83e4c9c44c338ecde749b278b6eae512f1d04e406","depends":["base-4.14.3.0","bytestring-0.10.12.0","deepseq-1.4.4.0","hshbl-1.3.1.0-81a7e86a","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"d-typs-1.0.4-6e509a2f","pkg-name":"uuid-types","pkg-version":"1.0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"34de8cf688e30f668cba5e5d79e907eb7f65bca2538ce927fddb42d74840036b","pkg-src-sha256":"c2aa2ccaa3a74259aca1f57cc1c277822086430814ce5e4f38cfd868fe48ec06","depends":["base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","deepseq-1.4.4.0","hshbl-1.3.1.0-81a7e86a","rndm-1.2.0-5f8e0010","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"deepseq-1.4.4.0","pkg-name":"deepseq","pkg-version":"1.4.4.0","depends":["array-0.5.4.0","base-4.14.3.0","ghc-prim-0.6.1"]},{"type":"configured","id":"dgst-0.0.1.2-33c1e67d","pkg-name":"digest","pkg-version":"0.0.1.2","flags":{"bytestring-in-base":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d3c2a49e25bb3b0228ddb063493b80adcfc26625f9ebbe4a89dd4fbb4339d1bc","pkg-src-sha256":"641717eb16392abf8965986a9e8dc21eebf1d97775bbb6923c7b7f8fee17fe11","components":{"lib":{"depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[]}}},{"type":"pre-existing","id":"directory-1.3.6.0","pkg-name":"directory","pkg-version":"1.3.6.0","depends":["base-4.14.3.0","filepath-1.4.2.1","time-1.9.3","unix-2.7.2.2"]},{"type":"configured","id":"djnctns-4.4-a26f282f","pkg-name":"adjunctions","pkg-version":"4.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2738dd5f5d5e93749adb14a05472e58a96a75d0f299e46371c6f46dc4e97daf9","pkg-src-sha256":"507c2ef55337ae61c805f8cbc1213dfd7d2b85187342675d662254b8d8a16ae9","depends":["array-0.5.4.0","base-4.14.3.0","cmnd-5.0.8-89fd52db","containers-0.6.5.1","cntrvrnt-1.5.3-cf62fb3c","dstrbtv-0.6.2.1-27e474d4","fr-5.1.3-805aa632","mtl-2.2.2","prfnctrs-5.6-bf1267af","smgrpds-5.3.4-9d8fc753","smgrps-0.19.1-253fa398","tggd-0.8.6.1-22e9a365","transformers-0.5.6.2","trnsfrmrs-cmpt-0.6.6-c2257ba9","vd-0.7.3-3b10c00c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"dlst-0.8.0.8-96990b97","pkg-name":"dlist","pkg-version":"0.8.0.8","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"90ca348bffdc62d7070bcf0e97c728f8d01b24fbc7ea08d2909157d0da76534c","pkg-src-sha256":"7129cf18068d3384e305708a10426ab8f573bee1030b023a114f45f1d0ec496d","depends":["base-4.14.3.0","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"drctry-tr-0.12.1-591e4ce7","pkg-name":"directory-tree","pkg-version":"0.12.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6f24ee1eca965a199a96f853582e61a338f1a529c87bc02c7f1451e2f2ed03fe","pkg-src-sha256":"e2084495b3a226cf54d949635c86fc14e89daa09d86cce39e3c3cf898ae6e517","depends":["base-4.14.3.0","directory-1.3.6.0","filepath-1.4.2.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"dstrbtv-0.6.2.1-27e474d4","pkg-name":"distributive","pkg-version":"0.6.2.1","flags":{"semigroups":true,"tagged":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2823eff05c6b093492efe804027e7cf82757221f934964c76106ac3248899b89","pkg-src-sha256":"d7351392e078f58caa46630a4b9c643e1e2e9dddee45848c5c8358e7b1316b91","depends":["base-4.14.3.0","bs-rphns-0.8.4-c8f36af6","tggd-0.8.6.1-22e9a365","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"dt-dflt-0.7.1.1-2f50bc38","pkg-name":"data-default","pkg-version":"0.7.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2804e8d14f521a1edee88b68b66347448e7f3b685868290fdc55930e4471f5a9","pkg-src-sha256":"b0f95d279cd75cacaa8152a01590dc3460f7134f6840b37052abb3ba3cb2a511","components":{"lib":{"depends":["base-4.14.3.0","dt-dflt-clss-0.1.2.0-b0a51f50","dt-dflt-nstncs-cntnrs-0.0.1-6a172060","dt-dflt-nstncs-dlst-0.0.1-aafdaf2f","dt-dflt-nstncs-ld-lcl-0.0.1-7e7191a8"],"exe-depends":[]}}},{"type":"configured","id":"dt-dflt-clss-0.1.2.0-b0a51f50","pkg-name":"data-default-class","pkg-version":"0.1.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"63e62120b7efd733a5a17cf59ceb43268e9a929c748127172d7d42f4a336e327","pkg-src-sha256":"4f01b423f000c3e069aaf52a348564a6536797f31498bb85c3db4bd2d0973e56","components":{"lib":{"depends":["base-4.14.3.0"],"exe-depends":[]}}},{"type":"configured","id":"dt-dflt-nstncs-cntnrs-0.0.1-6a172060","pkg-name":"data-default-instances-containers","pkg-version":"0.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6e1f4b28028a3bc455aaf4b5a9104b71ea72cff78b1b8041863df7afd1a8deb3","pkg-src-sha256":"a55e07af005c9815d82f3fc95e125db82994377c9f4a769428878701d4ec081a","components":{"lib":{"depends":["base-4.14.3.0","containers-0.6.5.1","dt-dflt-clss-0.1.2.0-b0a51f50"],"exe-depends":[]}}},{"type":"configured","id":"dt-dflt-nstncs-dlst-0.0.1-aafdaf2f","pkg-name":"data-default-instances-dlist","pkg-version":"0.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4286abacbb256c392907701be16986a6e07f2beaf2778e7bd925465655d9e301","pkg-src-sha256":"7d683711cbf08abd7adcd5ac2be825381308d220397315a5570fe61b719b5959","components":{"lib":{"depends":["base-4.14.3.0","dt-dflt-clss-0.1.2.0-b0a51f50","dlst-0.8.0.8-96990b97"],"exe-depends":[]}}},{"type":"configured","id":"dt-dflt-nstncs-ld-lcl-0.0.1-7e7191a8","pkg-name":"data-default-instances-old-locale","pkg-version":"0.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d4a757f68f0f83531fcb34a4525fe6769c54a45182e28ffdfff19c2b0ace42fb","pkg-src-sha256":"60d3b02922958c4908d7bf2b24ddf61511665745f784227d206745784b0c0802","components":{"lib":{"depends":["base-4.14.3.0","dt-dflt-clss-0.1.2.0-b0a51f50","ld-lcl-1.0.0.7-fbd769ce"],"exe-depends":[]}}},{"type":"pre-existing","id":"exceptions-0.10.4","pkg-name":"exceptions","pkg-version":"0.10.4","depends":["base-4.14.3.0","mtl-2.2.2","stm-2.5.0.1","template-haskell-2.16.0.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"filepath-1.4.2.1","pkg-name":"filepath","pkg-version":"1.4.2.1","depends":["base-4.14.3.0"]},{"type":"configured","id":"fl-mbd-0.0.13.0-7552374e","pkg-name":"file-embed","pkg-version":"0.0.13.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a819e90b91cab919ffef5895ab6e1b2a44eac395a585f489b0c289a4a12d1c54","pkg-src-sha256":"d13068abb0bd22c5d118164734a097dc591977b2c7561d912af9097803c6e1ea","depends":["base-4.14.3.0","bytestring-0.10.12.0","directory-1.3.6.0","filepath-1.4.2.1","template-haskell-2.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"fr-5.1.3-805aa632","pkg-name":"free","pkg-version":"5.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"604c27b6ba0a560c8a1377ad76e5bbb8528e924d6b0590215d815faddbec0b70","pkg-src-sha256":"2c70d66e3a1ad52ce4b22d5510ffc6d7b3db950bd7f43bc61801cfe7b24c2e2d","depends":["base-4.14.3.0","cmnd-5.0.8-89fd52db","containers-0.6.5.1","dstrbtv-0.6.2.1-27e474d4","exceptions-0.10.4","mtl-2.2.2","prfnctrs-5.6-bf1267af","smgrpds-5.3.4-9d8fc753","template-haskell-2.16.0.0","transformers-0.5.6.2","trnsfrmrs-bs-0.4.5.2-3f76eadc"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"fst-lggr-3.0.3-b2e892ac","pkg-name":"fast-logger","pkg-version":"3.0.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"936f28014b9bea19c4cf74e85fa534ba19250ef1511e0ad51c086d968fdcb701","pkg-src-sha256":"5763a0321053ecaba2d1040800bae9988f52b813fb08d5276ea7ce10e3d2f068","depends":["array-0.5.4.0","t-pdt-0.1.6-34d65238","base-4.14.3.0","bytestring-0.10.12.0","directory-1.3.6.0","sy-fl-0.2.2-c2329e48","filepath-1.4.2.1","text-1.2.4.1","nx-cmpt-0.5.3-a704442d","nx-tm-0.4.7-387b5d59"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-boot-8.10.7","pkg-name":"ghc-boot","pkg-version":"8.10.7","depends":["base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","directory-1.3.6.0","filepath-1.4.2.1","ghc-boot-th-8.10.7"]},{"type":"pre-existing","id":"ghc-boot-th-8.10.7","pkg-name":"ghc-boot-th","pkg-version":"8.10.7","depends":["base-4.14.3.0"]},{"type":"pre-existing","id":"ghc-compact-0.1.0.0","pkg-name":"ghc-compact","pkg-version":"0.1.0.0","depends":["base-4.14.3.0","bytestring-0.10.12.0","ghc-prim-0.6.1"]},{"type":"pre-existing","id":"ghc-heap-8.10.7","pkg-name":"ghc-heap","pkg-version":"8.10.7","depends":["base-4.14.3.0","ghc-prim-0.6.1"]},{"type":"pre-existing","id":"ghc-prim-0.6.1","pkg-name":"ghc-prim","pkg-version":"0.6.1","depends":[]},{"type":"configured","id":"ghc-pths-0.1.0.12-22eabb95","pkg-name":"ghc-paths","pkg-version":"0.1.0.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"afdfdb6584f39e821b2b7130e12007bf3ad87401d86f5105eead059c150dc81d","pkg-src-sha256":"6ecbe676d073cb07989c61ce4c5709c4e67cbefdd2d55a4095f9388b6fe2c484","components":{"lib":{"depends":["base-4.14.3.0"],"exe-depends":[]},"setup":{"depends":["Cabal-3.2.1.0","base-4.14.3.0","directory-1.3.6.0"],"exe-depends":[]}}},{"type":"pre-existing","id":"ghci-8.10.7","pkg-name":"ghci","pkg-version":"8.10.7","depends":["array-0.5.4.0","base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","filepath-1.4.2.1","ghc-boot-8.10.7","ghc-boot-th-8.10.7","ghc-heap-8.10.7","template-haskell-2.16.0.0","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"ghcjs-8.10.7-inplace","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7","build-info":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/build-info.json","depends":["Cabal-3.2.1.0","sn-1.4.7.1-f545389d","array-0.5.4.0","ttprsc-0.13.2.5-bfdb3102","base-4.14.3.0","bs16-bytstrng-0.1.1.7-df2561c0","bs64-bytstrng-1.0.0.3-4e6d0aeb","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","crypthsh-0.11.9-7a1d901a","dt-dflt-0.7.1.1-2f50bc38","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","ghc-boot-8.10.7","ghc-boot-th-8.10.7","ghc-compact-0.1.0.0","ghc-heap-8.10.7","ghc-pths-0.1.0.12-22eabb95","ghci-8.10.7","hshbl-1.3.1.0-81a7e86a","hpc-0.6.1.0","lns-4.19.2-261cde91","mtl-2.2.2","ptprs-pplctv-0.15.1.0-84e62b2b","prlll-3.2.2.0-ba7f78ce","parsec-3.1.14.0","process-1.6.13.2","sf-0.3.19-acedf167","splt-0.2.3.4-d58cb8cf","strngsrch-0.3.6.6-d69f1338","syb-0.7.2.1-ad42e2f3","template-haskell-2.16.0.0","terminfo-0.4.1.4","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2","nrdrd-cntnrs-0.2.13.0-86a72f83","vctr-0.12.2.0-9301e615","wl-pprnt-txt-1.2.0.1-c0ba3a44","yml-0.11.5.0-e85230ae"],"exe-depends":["hppy-1.20.0-c7a066ac"],"component-name":"lib"},{"type":"configured","id":"ghcjs-8.10.7-inplace-ghcjs","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs","build-info":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs/build-info.json","depends":["base-4.14.3.0","ghcjs-8.10.7-inplace"],"exe-depends":[],"component-name":"exe:ghcjs","bin-file":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs/build/ghcjs/ghcjs"},{"type":"configured","id":"ghcjs-8.10.7-inplace-ghcjs-boot","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-boot","build-info":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-boot/build-info.json","depends":["Cabal-3.2.1.0","sn-1.4.7.1-f545389d","base-4.14.3.0","bytestring-0.10.12.0","directory-1.3.6.0","xctbl-pth-0.0.3.1-a4e5146e","filepath-1.4.2.1","ghcjs-8.10.7-inplace","lns-4.19.2-261cde91","mtl-2.2.2","ptprs-pplctv-0.15.1.0-84e62b2b","process-1.6.13.2","tr-0.5.1.1-52757773","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","nx-cmpt-0.5.3-a704442d","nrdrd-cntnrs-0.2.13.0-86a72f83","vctr-0.12.2.0-9301e615","yml-0.11.5.0-e85230ae"],"exe-depends":[],"component-name":"exe:ghcjs-boot","bin-file":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-boot/build/ghcjs-boot/ghcjs-boot"},{"type":"configured","id":"ghcjs-8.10.7-inplace-ghcjs-dumparchive","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-dumparchive","build-info":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-dumparchive/build-info.json","depends":["base-4.14.3.0","bytestring-0.10.12.0","filepath-1.4.2.1","ghcjs-8.10.7-inplace","text-1.2.4.1"],"exe-depends":[],"component-name":"exe:ghcjs-dumparchive","bin-file":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-dumparchive/build/ghcjs-dumparchive/ghcjs-dumparchive"},{"type":"configured","id":"ghcjs-8.10.7-inplace-ghcjs-pkg","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-pkg","build-info":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-pkg/build-info.json","depends":["Cabal-3.2.1.0","base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","directory-1.3.6.0","filepath-1.4.2.1","ghc-boot-8.10.7","ghcjs-8.10.7-inplace","process-1.6.13.2","terminfo-0.4.1.4","unix-2.7.2.2"],"exe-depends":[],"component-name":"exe:ghcjs-pkg","bin-file":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-pkg/build/ghcjs-pkg/ghcjs-pkg"},{"type":"configured","id":"ghcjs-8.10.7-inplace-haddock","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/haddock","build-info":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/haddock/build-info.json","depends":["Cabal-3.2.1.0","array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","ghc-boot-8.10.7","ghcjs-8.10.7-inplace","parsec-3.1.14.0","text-1.2.4.1","transformers-0.5.6.2","xhtml-3000.2.2.1"],"exe-depends":[],"component-name":"exe:haddock","bin-file":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/haddock/build/haddock/haddock"},{"type":"configured","id":"ghcjs-8.10.7-inplace-private-ghcjs-hsc2hs","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-hsc2hs","build-info":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-hsc2hs/build-info.json","depends":["base-4.14.3.0","containers-0.6.5.1","directory-1.3.6.0","filepath-1.4.2.1","process-1.6.13.2"],"exe-depends":[],"component-name":"exe:private-ghcjs-hsc2hs","bin-file":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-hsc2hs/build/private-ghcjs-hsc2hs/private-ghcjs-hsc2hs"},{"type":"configured","id":"ghcjs-8.10.7-inplace-private-ghcjs-run","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-run","build-info":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-run/build-info.json","depends":["base-4.14.3.0","directory-1.3.6.0","filepath-1.4.2.1","process-1.6.13.2"],"exe-depends":[],"component-name":"exe:private-ghcjs-run","bin-file":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-run/build/private-ghcjs-run/private-ghcjs-run"},{"type":"configured","id":"ghcjs-8.10.7-inplace-private-ghcjs-unlit","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-unlit","build-info":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-unlit/build-info.json","depends":[],"exe-depends":[],"component-name":"exe:private-ghcjs-unlit","bin-file":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-unlit/build/private-ghcjs-unlit/private-ghcjs-unlit"},{"type":"configured","id":"ghcjs-8.10.7-inplace-test","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/t/test","build-info":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/t/test/build-info.json","depends":["HUnt-1.6.2.0-b7015290","sn-1.4.7.1-f545389d","base-4.14.3.0","bytestring-0.10.12.0","dt-dflt-0.7.1.1-2f50bc38","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","http-typs-0.12.3-c2432fef","lns-4.19.2-261cde91","lftd-bs-0.2.3.12-0139ca1f","ntwrk-3.1.2.1-08b0c5d8","ptprs-pplctv-0.15.1.0-84e62b2b","process-1.6.13.2","rndm-1.2.0-5f8e0010","shlly-1.9.0-4138217d","tst-frmwrk-0.8.2.0-541e50fd","tst-frmwrk-hnt-0.3.0.2-b7e00943","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","nrdrd-cntnrs-0.2.13.0-86a72f83","w-3.2.3-c218a955","w-pp-sttc-3.1.7.2-f457c4cc","w-xtr-3.0.32-450e0b45","w-wbsckts-3.0.1.2-9328eaa1","wrp-3.3.14-d90ecb38","wbdrvr-0.9.0.1-8c8bf380","wbsckts-0.12.7.2-af5140c4","yml-0.11.5.0-e85230ae"],"exe-depends":[],"component-name":"test:test","bin-file":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-8.10.7/t/test/build/test/test"},{"type":"configured","id":"ghcjs-th-0.1.0.0-inplace","pkg-name":"ghcjs-th","pkg-version":"0.1.0.0","flags":{"use-host-template-haskell":true},"style":"local","pkg-src":{"type":"local","path":"./lib/ghcjs-th"},"dist-dir":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-th-0.1.0.0","build-info":"./dist-newstyle/build/x86_64-osx/ghc-8.10.7/ghcjs-th-0.1.0.0/build-info.json","depends":["base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","ghc-prim-0.6.1","ghci-8.10.7","template-haskell-2.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"hpc-0.6.1.0","pkg-name":"hpc","pkg-version":"0.6.1.0","depends":["base-4.14.3.0","containers-0.6.5.1","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","time-1.9.3"]},{"type":"configured","id":"hppy-1.20.0-c7a066ac","pkg-name":"happy","pkg-version":"1.20.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f99e612b29d68d784d7e193943a13466f0923de69452a2585081491efed0436b","pkg-src-sha256":"3b1d3a8f93a2723b554d9f07b2cd136be1a7b2fcab1855b12b7aab5cbac8868c","depends":["array-0.5.4.0","base-4.14.3.0","containers-0.6.5.1","mtl-2.2.2"],"exe-depends":[],"component-name":"exe:happy","bin-file":"/store/ghc-8.10.7/hppy-1.20.0-c7a066ac/bin/happy"},{"type":"configured","id":"hrglss-0.2.12-94395846","pkg-name":"hourglass","pkg-version":"0.2.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e083f5e030dfebe432e30a9c0fa07a99a54eac992f622442646be561fd7a44e8","pkg-src-sha256":"44335b5c402e80c60f1db6a74462be4ea29d1a9043aa994334ffee1164f1ca4a","depends":["base-4.14.3.0","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hsc2hs-0.68.7-83233b7f","pkg-name":"hsc2hs","pkg-version":"0.68.7","flags":{"in-ghc-tree":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4a0f6860a17e7c245646975e3c2981416afdcb6a7b3553c31005eb3641a7f55b","pkg-src-sha256":"fd7915e41e3ed3bc7750fee0e8add2b4f32dcac8b7c544cfdf5542293223894a","depends":["base-4.14.3.0","containers-0.6.5.1","directory-1.3.6.0","filepath-1.4.2.1","process-1.6.13.2"],"exe-depends":[],"component-name":"exe:hsc2hs","bin-file":"/store/ghc-8.10.7/hsc2hs-0.68.7-83233b7f/bin/hsc2hs"},{"type":"configured","id":"hshbl-1.3.1.0-81a7e86a","pkg-name":"hashable","pkg-version":"1.3.1.0","flags":{"integer-gmp":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d965e098e06cc585b201da6137dcb31c40f35eb7a937b833903969447985c076","pkg-src-sha256":"8061823a4ac521b53912edcba36b956f3159cb885b07ec119af295a6568ca7c4","depends":["base-4.14.3.0","bytestring-0.10.12.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hstnm-1.0-c687754f","pkg-name":"hostname","pkg-version":"1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"8203b6ecd14ca1ef12f73a471b0a6a4be3ad4568d8b84f2bc4bc9e0abb8c4153","pkg-src-sha256":"9b43dab1b6da521f35685b20555da00738c8e136eb972458c786242406a9cf5c","components":{"lib":{"depends":["base-4.14.3.0"],"exe-depends":[]}}},{"type":"configured","id":"http-clnt-0.7.6-d2cedd3d","pkg-name":"http-client","pkg-version":"0.7.6","flags":{"network-uri":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c5115765335ede42038f59c1a52414be382c80d41f01e8d24922a37a9d85ab5d","pkg-src-sha256":"33f378976118f9d800fa526452ada06314c3b4f9eab134e1a4d215380baea890","depends":["array-0.5.4.0","base-4.14.3.0","bs64-bytstrng-1.0.0.3-4e6d0aeb","blz-bldr-0.4.2.1-f5d6708e","bytestring-0.10.12.0","cs-nsnstv-1.2.1.0-0f0c5d1c","containers-0.6.5.1","ck-0.4.5-cfccc30b","deepseq-1.4.4.0","exceptions-0.10.4","filepath-1.4.2.1","ghc-prim-0.6.1","http-typs-0.12.3-c2432fef","mm-typs-0.1.0.9-f771e3c4","ntwrk-3.1.2.1-08b0c5d8","ntwrk-r-2.6.4.1-70848399","rndm-1.2.0-5f8e0010","stm-2.5.0.1","strmng-cmmns-0.2.2.1-f8c2fa62","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"http-dt-0.0.11-7b034d21","pkg-name":"http-date","pkg-version":"0.0.11","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b278b07f880705e3b0b073206ad26954548b666d616733c9a6b5d50993f547d4","pkg-src-sha256":"32f923ac1ad9bdfeadce7c52a03c9ba6225ba60dc14137cb1cdf32ea84ccf4d3","depends":["array-0.5.4.0","ttprsc-0.13.2.5-bfdb3102","base-4.14.3.0","bytestring-0.10.12.0","time-1.9.3"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"http-typs-0.12.3-c2432fef","pkg-name":"http-types","pkg-version":"0.12.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f35229edb1bc7b3ae27f961b2407dadb5bfa69d43a8f5337ab46cdc79ca4afe9","pkg-src-sha256":"4e8a4a66477459fa436a331c75e46857ec8026283df984d54f90576cd3024016","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","cs-nsnstv-1.2.1.0-0f0c5d1c","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"http2-2.0.6-d6761ca2","pkg-name":"http2","pkg-version":"2.0.6","flags":{"devel":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d286b50b1f644b3a4b0c80f5d40d21ac2682e30b5035e46c5395773d5b69ec3b","pkg-src-sha256":"2a756b1a855fab64c63f45b9bd91435d23a4e039ef51c9b189e8c77bf356a19e","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","cs-nsnstv-1.2.1.0-0f0c5d1c","containers-0.6.5.1","http-typs-0.12.3-c2432fef","ntwrk-3.1.2.1-08b0c5d8","ntwrk-byt-rdr-0.1.6-5bc10b06","psqs-0.2.7.2-3928525f","stm-2.5.0.1","tm-mngr-0.0.0-6703061d"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"integer-gmp-1.0.3.0","pkg-name":"integer-gmp","pkg-version":"1.0.3.0","depends":["ghc-prim-0.6.1"]},{"type":"configured","id":"kn-xtnsns-5.2.2-bc676010","pkg-name":"kan-extensions","pkg-version":"5.2.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c9ad889deb63a2c6a0af95bc6ccefadd12633b711097e36af32935d54b901179","pkg-src-sha256":"3bf3ce4cacf9c57c03e9a1c36ecb1baf5d8356730853a2592d2112d1248498a0","depends":["djnctns-4.4-a26f282f","array-0.5.4.0","base-4.14.3.0","cmnd-5.0.8-89fd52db","containers-0.6.5.1","cntrvrnt-1.5.3-cf62fb3c","dstrbtv-0.6.2.1-27e474d4","fr-5.1.3-805aa632","nvrnt-0.5.3-9235ec85","mtl-2.2.2","prfnctrs-5.6-bf1267af","smgrpds-5.3.4-9d8fc753","tggd-0.8.6.1-22e9a365","transformers-0.5.6.2","trnsfrmrs-cmpt-0.6.6-c2257ba9"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"lbyml-0.1.2-7defdd02","pkg-name":"libyaml","pkg-version":"0.1.2","flags":{"no-unicode":false,"system-libyaml":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7f14f69ceb14659699974e8e47e1ea6f226ea21ff42a802db03e721c319d201d","pkg-src-sha256":"8f42d66f199fcaee255326f8f770d88b0670df56b5eb78002d6058f3a45e97b5","depends":["base-4.14.3.0","bytestring-0.10.12.0","cndt-1.3.4.1-7277901b","rsrct-1.2.4.2-8c58f12d"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ld-lcl-1.0.0.7-fbd769ce","pkg-name":"old-locale","pkg-version":"1.0.0.7","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fa998be2c7e00cd26a6e9075bea790caaf3932caa3e9497ad69bc20380dd6911","pkg-src-sha256":"dbaf8bf6b888fb98845705079296a23c3f40ee2f449df7312f7f7f1de18d7b50","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ld-tm-1.1.0.3-c649dfa8","pkg-name":"old-time","pkg-version":"1.1.0.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c91fbb3ee73d20ccd015842b30f1f29a304893ebe0ae3128b7bbc13d5bb0d4c8","pkg-src-sha256":"1ccb158b0f7851715d36b757c523b026ca1541e2030d02239802ba39b4112bc1","components":{"lib":{"depends":["base-4.14.3.0","ld-lcl-1.0.0.7-fbd769ce"],"exe-depends":[]}}},{"type":"configured","id":"lftd-bs-0.2.3.12-0139ca1f","pkg-name":"lifted-base","pkg-version":"0.2.3.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e94ad0692c9c5d85c373e508f23654f2da8ac8c3e475c2b65ffbc04fb165ad69","pkg-src-sha256":"c134a95f56750aae806e38957bb03c59627cda16034af9e00a02b699474317c5","depends":["base-4.14.3.0","mnd-cntrl-1.0.2.3-748e18fe","trnsfrmrs-bs-0.4.5.2-3f76eadc"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"lftd-sync-0.10.1.3-f2051f67","pkg-name":"lifted-async","pkg-version":"0.10.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"cb9f0b2bc84e0081df475cea5370b5f0908485d622214a44891ad347826d4b4a","pkg-src-sha256":"f340fa9b649dd6bd3fc0942eceb94945a5b251e676b8d8e9841d6b24c531b4c2","depends":["sync-2.2.3-77cbb22e","base-4.14.3.0","cnstrnts-0.13-1b93bc9d","lftd-bs-0.2.3.12-0139ca1f","mnd-cntrl-1.0.2.3-748e18fe","trnsfrmrs-bs-0.4.5.2-3f76eadc"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"lns-4.19.2-261cde91","pkg-name":"lens","pkg-version":"4.19.2","flags":{"benchmark-uniplate":false,"dump-splices":false,"inlining":true,"j":false,"old-inline-pragmas":false,"safe":false,"test-doctests":true,"test-hunit":true,"test-properties":true,"test-templates":true,"trustworthy":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f84441c407bf436490cbc19b5c7497a66f5880be7023e7a9f0e205aee98239e5","pkg-src-sha256":"52f858ae3971a5104cdba5e81a27d154fda11fe65a54a4ac328c85904bdec23b","components":{"lib":{"depends":["array-0.5.4.0","base-4.14.3.0","bs-rphns-0.8.4-c8f36af6","bfnctrs-5.5.7-195e3fe2","bytestring-0.10.12.0","cll-stck-0.3.0-7605e60f","cmnd-5.0.8-89fd52db","containers-0.6.5.1","cntrvrnt-1.5.3-cf62fb3c","dstrbtv-0.6.2.1-27e474d4","exceptions-0.10.4","filepath-1.4.2.1","fr-5.1.3-805aa632","ghc-prim-0.6.1","hshbl-1.3.1.0-81a7e86a","kn-xtnsns-5.2.2-bc676010","mtl-2.2.2","prlll-3.2.2.0-ba7f78ce","prfnctrs-5.6-bf1267af","rflctn-2.1.6-e0ea7273","smgrpds-5.3.4-9d8fc753","tggd-0.8.6.1-22e9a365","template-haskell-2.16.0.0","text-1.2.4.1","th-bstrctn-0.3.2.0-ed858cb3","transformers-0.5.6.2","trnsfrmrs-cmpt-0.6.6-c2257ba9","nrdrd-cntnrs-0.2.13.0-86a72f83","vctr-0.12.2.0-9301e615"],"exe-depends":[]},"setup":{"depends":["Cabal-3.2.1.0","base-4.14.3.0","cbl-dctst-1.0.8-001accad","filepath-1.4.2.1"],"exe-depends":[]}}},{"type":"configured","id":"mm-typs-0.1.0.9-f771e3c4","pkg-name":"mime-types","pkg-version":"0.1.0.9","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d631fe56daed713ec7798933aaa1429dc9912d85375619aa6e25a0fefe8e95e7","pkg-src-sha256":"0a32435169ef4ba59f4a4b8addfd0c04479410854d1b8d69a1e38fb389ba71d2","depends":["base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"mmry-0.15.0-1ae4b367","pkg-name":"memory","pkg-version":"0.15.0","flags":{"support_basement":true,"support_bytestring":true,"support_deepseq":true,"support_foundation":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"be7024b50e876a9c3b7febaefdd81d5dc67268c58a7b4e6b3825bdc58274d88c","pkg-src-sha256":"e3ff892c1a94708954d0bb2c4f4ab81bc0f505352d95095319c462db1aeb3529","depends":["base-4.14.3.0","bsmnt-0.0.11-f050f8fa","bytestring-0.10.12.0","deepseq-1.4.4.0","ghc-prim-0.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"mn-trvrsbl-1.0.15.1-62aa4220","pkg-name":"mono-traversable","pkg-version":"1.0.15.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"cad0e8681cd6c96d3303867fc68c80e2f5d55c2c4bf5277c06ca74402fda61c8","pkg-src-sha256":"c2df5b79ed2f88f2ee313e57c1d591d4463788e20d39e439297eec5ba5835ddf","depends":["base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","hshbl-1.3.1.0-81a7e86a","splt-0.2.3.4-d58cb8cf","text-1.2.4.1","transformers-0.5.6.2","nrdrd-cntnrs-0.2.13.0-86a72f83","vctr-0.12.2.0-9301e615","vctr-lgrthms-0.8.0.4-aa341e68"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"mnd-cntrl-1.0.2.3-748e18fe","pkg-name":"monad-control","pkg-version":"1.0.2.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a3ae888d2fed2e2a0ca33ae11e2480219e07312bccf1a02ffe2ba2e3ec5913ee","pkg-src-sha256":"6c1034189d237ae45368c70f0e68f714dd3beda715dd265b6c8a99fcc64022b1","components":{"lib":{"depends":["base-4.14.3.0","stm-2.5.0.1","transformers-0.5.6.2","trnsfrmrs-bs-0.4.5.2-3f76eadc","trnsfrmrs-cmpt-0.6.6-c2257ba9"],"exe-depends":[]}}},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.14.3.0","transformers-0.5.6.2"]},{"type":"configured","id":"nclsd-xcptns-1.0.3-a8a2e7cb","pkg-name":"enclosed-exceptions","pkg-version":"1.0.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6d4e9b5156721ccfa62d3cdcbf13d8571773031050ec714cb55b841f0c183f6a","pkg-src-sha256":"af6d93f113ac92b89a32af1fed52f445f492afcc0be93980cbadc5698f94f0b9","depends":["base-4.14.3.0","deepseq-1.4.4.0","lftd-bs-0.2.3.12-0139ca1f","mnd-cntrl-1.0.2.3-748e18fe","transformers-0.5.6.2","trnsfrmrs-bs-0.4.5.2-3f76eadc"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ndxd-trvrsbl-0.1.1-5423d452","pkg-name":"indexed-traversable","pkg-version":"0.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e330ec1ab336ee2fb1eff117ebe3480d1663396fecd981f185b7123dc7941ae1","pkg-src-sha256":"7ac36ae3153cbe7a8e99eacffd065367b87544953cc92997f424a150db468139","depends":["array-0.5.4.0","base-4.14.3.0","containers-0.6.5.1","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"nlft-cr-0.2.0.1-0ed8000c","pkg-name":"unliftio-core","pkg-version":"0.2.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9b3e44ea9aacacbfc35b3b54015af450091916ac3618a41868ebf6546977659a","pkg-src-sha256":"919f0d1297ea2f5373118553c1df2a9405d8b9e31a8307e829da67d4953c299a","depends":["base-4.14.3.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"nrdrd-cntnrs-0.2.13.0-86a72f83","pkg-name":"unordered-containers","pkg-version":"0.2.13.0","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6310c636f92ed4908fdd0de582b6be31c2851c7b5f2ec14e9f416eb94df7a078","pkg-src-sha256":"86b01369ab8eb311383a052d389337e2cd71a63088323f02932754df4aa37b55","depends":["base-4.14.3.0","deepseq-1.4.4.0","hshbl-1.3.1.0-81a7e86a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ns-trmnl-0.11-ea4f31d8","pkg-name":"ansi-terminal","pkg-version":"0.11","flags":{"example":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"97470250c92aae14c4c810d7f664c532995ba8910e2ad797b29f22ad0d2d0194","pkg-src-sha256":"c6611b9e51add41db3f79eac30066c06b33a6ca2a09e586b4b361d7f98303793","depends":["base-4.14.3.0","clr-2.3.5-3ce536bf"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ns-wl-pprnt-0.6.9-cbaf5426","pkg-name":"ansi-wl-pprint","pkg-version":"0.6.9","flags":{"example":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"20d30674f137d43aa0279c2c2cc5e45a5f1c3c57e301852494906158b6313bf7","pkg-src-sha256":"a7b2e8e7cd3f02f2954e8b17dc60a0ccd889f49e2068ebb15abfa1d42f7a4eac","depends":["ns-trmnl-0.11-ea4f31d8","base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ntgr-lgrthms-1.0.3.1-bcc6b5f0","pkg-name":"integer-logarithms","pkg-version":"1.0.3.1","flags":{"check-bounds":false,"integer-gmp":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"888fb6c4fbd79ed2e8f8b94b61bccac25f7fab2b13b32b496e86828bc60b17cf","pkg-src-sha256":"9b0a9f9fab609b15cd015865721fb05f744a1bc77ae92fd133872de528bbea7f","depends":["array-0.5.4.0","base-4.14.3.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ntrpy-0.4.1.6-31ada688","pkg-name":"entropy","pkg-version":"0.4.1.6","flags":{"halvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d72a8745b0d011737190832be477f6d98a7c819865a6392e4c451110eb79361c","pkg-src-sha256":"adc759ff756a6d71a450422ba511177632f43a33bf673901fd2334f53ef8bf62","components":{"lib":{"depends":["base-4.14.3.0","bytestring-0.10.12.0","unix-2.7.2.2"],"exe-depends":[]},"setup":{"depends":["Cabal-3.2.1.0","base-4.14.3.0","directory-1.3.6.0","filepath-1.4.2.1","process-1.6.13.2"],"exe-depends":[]}}},{"type":"configured","id":"ntwrk-3.1.2.1-08b0c5d8","pkg-name":"network","pkg-version":"3.1.2.1","flags":{"devel":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"188d6daea8cd91bc3553efd5a90a1e7c6d0425fa66a53baa74db5b6d9fd75c8b","pkg-src-sha256":"fcaa954445cb575ff04d088e719452e356324b6acb98c5aefd2541a069439d4a","components":{"lib":{"depends":["base-4.14.3.0","bytestring-0.10.12.0","deepseq-1.4.4.0","directory-1.3.6.0"],"exe-depends":["hsc2hs-0.68.7-83233b7f"]}}},{"type":"configured","id":"ntwrk-byt-rdr-0.1.6-5bc10b06","pkg-name":"network-byte-order","pkg-version":"0.1.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"23d8b609ac43a69d04d5e8f411e5f86a0266c0e8b33b65f8c92ebda64273fe3a","pkg-src-sha256":"f2b0ccc9b759d686af30aac874fc394c13c1fc8a3db00fac401c9339c263dc5e","depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ntwrk-r-2.6.4.1-70848399","pkg-name":"network-uri","pkg-version":"2.6.4.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a4765164ed0a2d1668446eb2e03460ce98645fbf083598c690846af79b7de10d","pkg-src-sha256":"57856db93608a4d419f681b881c9b8d4448800d5a687587dc37e8a9e0b223584","depends":["base-4.14.3.0","deepseq-1.4.4.0","parsec-3.1.14.0","template-haskell-2.16.0.0","th-cmpt-0.1.2-214f3ab8"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"nvrnt-0.5.3-9235ec85","pkg-name":"invariant","pkg-version":"0.5.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"5b74af0b909c44b17298a9c04bcd0aea030f36a869da9112b103890f3aa2516f","pkg-src-sha256":"d73e5def38da9fdd85def073857aa5f4b1d3b0c2df05c43d58a677cca02d440c","depends":["SttVr-1.2.1-9a4219da","array-0.5.4.0","base-4.14.3.0","bfnctrs-5.5.7-195e3fe2","cmnd-5.0.8-89fd52db","containers-0.6.5.1","cntrvrnt-1.5.3-cf62fb3c","ghc-prim-0.6.1","prfnctrs-5.6-bf1267af","stm-2.5.0.1","tggd-0.8.6.1-22e9a365","template-haskell-2.16.0.0","th-bstrctn-0.3.2.0-ed858cb3","transformers-0.5.6.2","trnsfrmrs-cmpt-0.6.6-c2257ba9","nrdrd-cntnrs-0.2.13.0-86a72f83"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"nx-cmpt-0.5.3-a704442d","pkg-name":"unix-compat","pkg-version":"0.5.3","flags":{"old-time":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"60be4a0b2e1cd873e5ad5f0cc9e53575b77640567abb43ef700d5b323ca2ac49","pkg-src-sha256":"0893b597ea0db406429d0d563506af6755728eface0e1981f9392122db88e5c8","depends":["base-4.14.3.0","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"nx-tm-0.4.7-387b5d59","pkg-name":"unix-time","pkg-version":"0.4.7","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c0d971d04561875b908451c563df8728fe6d8639c90e070b244227f13f76ab8e","pkg-src-sha256":"19233f8badf921d444c6165689253d877cfed58ce08f28cad312558a9280de09","components":{"lib":{"depends":["base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","ld-tm-1.1.0.3-c649dfa8"],"exe-depends":["hsc2hs-0.68.7-83233b7f"]}}},{"type":"pre-existing","id":"parsec-3.1.14.0","pkg-name":"parsec","pkg-version":"3.1.14.0","depends":["base-4.14.3.0","bytestring-0.10.12.0","mtl-2.2.2","text-1.2.4.1"]},{"type":"configured","id":"pm-0.2.4-b7fc940c","pkg-name":"pem","pkg-version":"0.2.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"cc8e62118b783e284dc0fa032f54fe386a3861a948ec88079370a433c103a705","pkg-src-sha256":"770c4c1b9cd24b3db7f511f8a48404a0d098999e28573c3743a8a296bb96f8d4","depends":["base-4.14.3.0","bsmnt-0.0.11-f050f8fa","bytestring-0.10.12.0","mmry-0.15.0-1ae4b367"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ppr-0.1.8-c634d8fb","pkg-name":"appar","pkg-version":"0.1.8","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a5d529bacbb74d566e4c5f9479af0637eac5957705f6db4d2670517489795de8","pkg-src-sha256":"c4ceeddc26525b58d82c41b6d3e32141371a200a6794aae185b6266ccc81631f","components":{"lib":{"depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[]}}},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.14.3.0","deepseq-1.4.4.0","ghc-prim-0.6.1"]},{"type":"configured","id":"prfnctrs-5.6-bf1267af","pkg-name":"profunctors","pkg-version":"5.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"8be6a4efb50a030b59d1213edb119636801b8e96768671e8953b20e6f4f2a7fa","pkg-src-sha256":"cb06a548f67c17d38fef7b2e5d1f66a5e48f353d7806290e795cc97c9a298ce3","depends":["base-4.14.3.0","bs-rphns-0.8.4-c8f36af6","bfnctrs-5.5.7-195e3fe2","cmnd-5.0.8-89fd52db","cntrvrnt-1.5.3-cf62fb3c","dstrbtv-0.6.2.1-27e474d4","tggd-0.8.6.1-22e9a365","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"prlll-3.2.2.0-ba7f78ce","pkg-name":"parallel","pkg-version":"3.2.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"421ce1717610bab82969572b96be89d83ea8d8afe7751cb54d80b996fff063d3","pkg-src-sha256":"170453a71a2a8b31cca63125533f7771d7debeb639700bdabdd779c34d8a6ef6","depends":["array-0.5.4.0","base-4.14.3.0","containers-0.6.5.1","deepseq-1.4.4.0","ghc-prim-0.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"prmtv-0.7.1.0-9e5d8d36","pkg-name":"primitive","pkg-version":"0.7.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f6357d5720c1c665096c3e011467daf443198b786a708d2ff926958a24d508d4","pkg-src-sha256":"6bebecfdf2a57787d9fd5231bfd612b65a92edd7b33a973b2a0f11312b89a3f0","depends":["base-4.14.3.0","deepseq-1.4.4.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.13.2","pkg-name":"process","pkg-version":"1.6.13.2","depends":["base-4.14.3.0","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","unix-2.7.2.2"]},{"type":"configured","id":"prt-1.7.11-6d20dc87","pkg-name":"iproute","pkg-version":"1.7.11","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a7bba909d85301aaa06534911891f91d4eb8aacdae6204b260cceb7309e09a56","pkg-src-sha256":"205dcd27cce76345e4fc60060b5d428b015a09e9023f5f1bba58be1f562a8a8b","depends":["ppr-0.1.8-c634d8fb","base-4.14.3.0","bytrdr-1.0.4-81c9a110","bytestring-0.10.12.0","containers-0.6.5.1","ntwrk-3.1.2.1-08b0c5d8"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"psqs-0.2.7.2-3928525f","pkg-name":"psqueues","pkg-version":"0.2.7.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dbefb35cff7f85ecbe846aed9d6362a3ce1c45260885fb9d562d8c8ed8a81534","pkg-src-sha256":"26263b555d943f9b18bbebda6a090848fdba3c1b403a9b7c848f6bac99e893f9","depends":["base-4.14.3.0","deepseq-1.4.4.0","ghc-prim-0.6.1","hshbl-1.3.1.0-81a7e86a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ptprs-pplctv-0.15.1.0-84e62b2b","pkg-name":"optparse-applicative","pkg-version":"0.15.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"29ff6146aabf54d46c4c8788e8d1eadaea27c94f6d360c690c5f6c93dac4b07e","pkg-src-sha256":"4db3675fd1e0594afdf079db46f4cd412d483835d703e7c07e1a1a37d6f046f3","depends":["ns-wl-pprnt-0.6.9-cbaf5426","base-4.14.3.0","process-1.6.13.2","transformers-0.5.6.2","trnsfrmrs-cmpt-0.6.6-c2257ba9"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"rflctn-2.1.6-e0ea7273","pkg-name":"reflection","pkg-version":"2.1.6","flags":{"slow":false,"template-haskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"044acb7caf41a9d8246878f849baed2dffbc4582d0a1e5c7c079d4287239e970","pkg-src-sha256":"bf3e14917ebb329a53701a3cce0afe670f20037a0148dbfa5cbfa574ed6ba6cd","depends":["base-4.14.3.0","template-haskell-2.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"rgx-bs-0.94.0.1-fcc8da24","pkg-name":"regex-base","pkg-version":"0.94.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6e3546b73cd5489201d481aa645a531f2c61aa317984e31c5f379ac0bcbfbfad","pkg-src-sha256":"71b1d96fff201f31fe8cd4532f056aca03a21cd486890256dc3007dd73adedd9","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","mtl-2.2.2","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"rgx-psx-0.96.0.0-a3587e43","pkg-name":"regex-posix","pkg-version":"0.96.0.0","flags":{"_regex-posix-clib":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"bd870f983a21bb474bd96449736f011c599981ce70da808a21ec1a28292e5481","pkg-src-sha256":"251300f1a6bb2e91abb8bf513a21981f8fab79c98a65acea2bb6d6a524414521","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","rgx-bs-0.94.0.1-fcc8da24"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"rndm-1.2.0-5f8e0010","pkg-name":"random","pkg-version":"1.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"30d72df4cc1d2fe2d445c88f0ee9d21965af7ce86660c43a6c32a6a1d90d51c9","pkg-src-sha256":"e4519cf7c058bfd5bdbe4acc782284acc9e25e74487208619ca83cbcd63fb9de","depends":["base-4.14.3.0","bytestring-0.10.12.0","deepseq-1.4.4.0","mtl-2.2.2","spltmx-0.1.0.3-f9f98fdf"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"rsrct-1.2.4.2-8c58f12d","pkg-name":"resourcet","pkg-version":"1.2.4.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d57516781d1721f70aa0b9ec8ea9200ab02bf76349cb76d73ad57729302289cc","pkg-src-sha256":"17f20842043ad199961a801b6efb1233b9098eb3537f8395844268f6a223eb87","depends":["base-4.14.3.0","containers-0.6.5.1","exceptions-0.10.4","mtl-2.2.2","prmtv-0.7.1.0-9e5d8d36","transformers-0.5.6.2","nlft-cr-0.2.0.1-0ed8000c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"scntfc-0.3.6.2-734dabfd","pkg-name":"scientific","pkg-version":"0.3.6.2","flags":{"bytestring-builder":false,"integer-simple":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dd49abc76bd8e2b57e7a057dc2bb742a00527b4bf9350f9374be03b5934e55d8","pkg-src-sha256":"278d0afc87450254f8a76eab21b5583af63954efc9b74844a17a21a68013140f","depends":["base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","hshbl-1.3.1.0-81a7e86a","integer-gmp-1.0.3.0","ntgr-lgrthms-1.0.3.1-bcc6b5f0","prmtv-0.7.1.0-9e5d8d36","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"sf-0.3.19-acedf167","pkg-name":"safe","pkg-version":"0.3.19","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0910dafb8898f52bde4c646e560228a0fd08b1fca5457f222d2f5c0fad6d2039","pkg-src-sha256":"25043442c8f8aa95955bb17467d023630632b961aaa61e807e325d9b2c33f7a2","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shlly-1.9.0-4138217d","pkg-name":"shelly","pkg-version":"1.9.0","flags":{"build-examples":false,"lifted":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ee030e939e2e5367cf33923c1b9e20bd0793667b02f4baf3d6224984b9b94720","pkg-src-sha256":"5eb5fd4fc105e218cef6cfa10971d299ad660324e6a6006b8cccc31edf39aace","depends":["sync-2.2.3-77cbb22e","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","directory-1.3.6.0","nclsd-xcptns-1.0.3-a8a2e7cb","exceptions-0.10.4","filepath-1.4.2.1","lftd-sync-0.10.1.3-f2051f67","lftd-bs-0.2.3.12-0139ca1f","mnd-cntrl-1.0.2.3-748e18fe","mtl-2.2.2","process-1.6.13.2","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","trnsfrmrs-bs-0.4.5.2-3f76eadc","unix-2.7.2.2","nx-cmpt-0.5.3-a704442d"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"smgrpds-5.3.4-9d8fc753","pkg-name":"semigroupoids","pkg-version":"5.3.4","flags":{"comonad":true,"containers":true,"contravariant":true,"distributive":true,"doctests":true,"tagged":true,"unordered-containers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"120873dfa8084ec92745c766336e90d648c347ab99ce55329d5af36dbd3732ba","pkg-src-sha256":"00d2e48973c3ab0a5d52616728ed63d0509454c8328148f698720014d7c58964","components":{"lib":{"depends":["base-4.14.3.0","bs-rphns-0.8.4-c8f36af6","bfnctrs-5.5.7-195e3fe2","cmnd-5.0.8-89fd52db","containers-0.6.5.1","cntrvrnt-1.5.3-cf62fb3c","dstrbtv-0.6.2.1-27e474d4","hshbl-1.3.1.0-81a7e86a","tggd-0.8.6.1-22e9a365","template-haskell-2.16.0.0","transformers-0.5.6.2","trnsfrmrs-cmpt-0.6.6-c2257ba9","nrdrd-cntnrs-0.2.13.0-86a72f83"],"exe-depends":[]},"setup":{"depends":["Cabal-3.2.1.0","base-4.14.3.0","cbl-dctst-1.0.8-001accad"],"exe-depends":[]}}},{"type":"configured","id":"smgrps-0.19.1-253fa398","pkg-name":"semigroups","pkg-version":"0.19.1","flags":{"binary":true,"bytestring":true,"bytestring-builder":false,"containers":true,"deepseq":true,"hashable":true,"tagged":true,"template-haskell":true,"text":true,"transformers":true,"unordered-containers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ecae129621e0d2f77bef2f01e4458c2e0567ab6e1f39579c61d7cec8058ebb0e","pkg-src-sha256":"79e761e64b862564a3470d5d356cb6b060b14452d675859aed3b2d1e14646648","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"smpl-sndfl-0.2.30-fd4e576c","pkg-name":"simple-sendfile","pkg-version":"0.2.30","flags":{"allow-bsd":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c6893e159dc20eea6d0b805bfd8d9b73e6a6ba3fe72cc396acdc24fdcd33cc38","pkg-src-sha256":"b6864d2b3c62ff8ea23fa24e9e26f751bfe5253c8efb1f1e4fee2ba91d065284","depends":["base-4.14.3.0","bytestring-0.10.12.0","ntwrk-3.1.2.1-08b0c5d8","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"sn-1.4.7.1-f545389d","pkg-name":"aeson","pkg-version":"1.4.7.1","flags":{"bytestring-builder":false,"cffi":false,"developer":false,"fast":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6d8d2fd959b7122a1df9389cf4eca30420a053d67289f92cdc0dbc0dab3530ba","pkg-src-sha256":"07e746655fd9bec81c59927c5617877ff4fcd81d0df45c5fb8ef154fb8f40294","depends":["ttprsc-0.13.2.5-bfdb3102","base-4.14.3.0","bs-cmpt-bttrs-0.11.2-60bdc7ba","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","dlst-0.8.0.8-96990b97","ghc-prim-0.6.1","hshbl-1.3.1.0-81a7e86a","prmtv-0.7.1.0-9e5d8d36","scntfc-0.3.6.2-734dabfd","tggd-0.8.6.1-22e9a365","template-haskell-2.16.0.0","text-1.2.4.1","th-bstrctn-0.3.2.0-ed858cb3","time-1.9.3","tm-cmpt-1.9.5-7f0b56a3","nrdrd-cntnrs-0.2.13.0-86a72f83","d-typs-1.0.4-6e509a2f","vctr-0.12.2.0-9301e615"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"sn1-ncdng-0.9.6-00fac9aa","pkg-name":"asn1-encoding","pkg-version":"0.9.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"27ed8f6043aed79630313bb931f7c8e2b510f0b4586cd55c16ae040c7d1ea098","pkg-src-sha256":"d9f8deabd3b908e5cf83c0d813c08dc0143b3ec1c0d97f660d2cfa02c1c8da0a","depends":["sn1-typs-0.3.4-e09490aa","base-4.14.3.0","bytestring-0.10.12.0","hrglss-0.2.12-94395846"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"sn1-prs-0.9.5-8aca0976","pkg-name":"asn1-parse","pkg-version":"0.9.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"77c0126d63070df2d82cb4cfa4febb26c4e280f6d854bc778c2fa4d80ce692b8","pkg-src-sha256":"8f1fe1344d30b39dc594d74df2c55209577722af1497204b4c2b6d6e8747f39e","components":{"lib":{"depends":["sn1-ncdng-0.9.6-00fac9aa","sn1-typs-0.3.4-e09490aa","base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[]}}},{"type":"configured","id":"sn1-typs-0.3.4-e09490aa","pkg-name":"asn1-types","pkg-version":"0.3.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"8e879b3a5bbdd0031232eb84d904b5a3a2c20a18847692b996d774f4ff811355","pkg-src-sha256":"78ee92a251379298ca820fa53edbf4b33c539b9fcd887c86f520c30e3b4e21a8","components":{"lib":{"depends":["base-4.14.3.0","bytestring-0.10.12.0","hrglss-0.2.12-94395846","mmry-0.15.0-1ae4b367"],"exe-depends":[]}}},{"type":"configured","id":"splt-0.2.3.4-d58cb8cf","pkg-name":"split","pkg-version":"0.2.3.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"048c75891d63a03828f97667214aaaf0e67b7dcbfec297753e39939ffda6f51a","pkg-src-sha256":"271fe5104c9f40034aa9a1aad6269bcecc9454bc5a57c247e69e17de996c1f2a","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"spltmx-0.1.0.3-f9f98fdf","pkg-name":"splitmix","pkg-version":"0.1.0.3","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fc3aae74c467f4b608050bef53aec17904a618731df9407e655d8f3bf8c32d5c","pkg-src-sha256":"46009f4b000c9e6613377767b8718bf38476469f2a8e2162d98cc246882d5a35","depends":["base-4.14.3.0","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"stm-2.5.0.1","pkg-name":"stm","pkg-version":"2.5.0.1","depends":["array-0.5.4.0","base-4.14.3.0"]},{"type":"configured","id":"strmng-cmmns-0.2.2.1-f8c2fa62","pkg-name":"streaming-commons","pkg-version":"0.2.2.1","flags":{"use-bytestring-builder":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"28abce35b48dcfb871926dad4cb37bdf737372892b4e5222abc97ca31f2ac738","pkg-src-sha256":"306940bf4878a0b714e6746a7f934d018100efc86332c176a648014bfe1e81dd","depends":["array-0.5.4.0","sync-2.2.3-77cbb22e","base-4.14.3.0","bytestring-0.10.12.0","directory-1.3.6.0","ntwrk-3.1.2.1-08b0c5d8","process-1.6.13.2","rndm-1.2.0-5f8e0010","stm-2.5.0.1","text-1.2.4.1","transformers-0.5.6.2","unix-2.7.2.2","zlb-0.6.2.3-69a07bb9"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"strngsrch-0.3.6.6-d69f1338","pkg-name":"stringsearch","pkg-version":"0.3.6.6","flags":{"base3":false,"base4":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e88c03f4adb4bb3ab88550c921a9a8a2836a0a70f58b9cc64cff2ac65af9b77c","pkg-src-sha256":"295f1971920bc52263d8275d7054ad223a7e1aefe75533f9887735c9644ffe4a","components":{"lib":{"depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1"],"exe-depends":[]}}},{"type":"configured","id":"sy-fl-0.2.2-c2329e48","pkg-name":"easy-file","pkg-version":"0.2.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"72303120495a9fed82276a7987434361edd6dfecafad241d7c6c03b68e4801e5","pkg-src-sha256":"52f52e72ba48d60935932401c233a72bf45c582871238aecc5a18021ce67b47e","components":{"lib":{"depends":["base-4.14.3.0","directory-1.3.6.0","filepath-1.4.2.1","time-1.9.3","unix-2.7.2.2"],"exe-depends":[]}}},{"type":"configured","id":"syb-0.7.2.1-ad42e2f3","pkg-name":"syb","pkg-version":"0.7.2.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"bf42655a213402215299e435c52f799e76cbec0b984cd7153d6b9af8a1c0803f","pkg-src-sha256":"1807c66f77e66786739387f0ae9f16d150d1cfa9d626afcb729f0e9b442a8d96","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"sync-2.2.3-77cbb22e","pkg-name":"async","pkg-version":"2.2.3","flags":{"bench":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0cbefb8247308b38e397e675f832b9bd5317ff1872001d5358f213654423c55b","pkg-src-sha256":"467af3a0037947a5232ecf5f4efbd4cf2118aaa2310566d7f40ac82b0e32935c","depends":["base-4.14.3.0","hshbl-1.3.1.0-81a7e86a","stm-2.5.0.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"t-pdt-0.1.6-34d65238","pkg-name":"auto-update","pkg-version":"0.1.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"10adca282e131a2fa01fb7a411b02811685c1cea02e9813df2d7fb468b5ef638","pkg-src-sha256":"f4e023dc8713c387ecf20d851247597fd012cabea3872310b35e911105eb66c4","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.16.0.0","pkg-name":"template-haskell","pkg-version":"2.16.0.0","depends":["base-4.14.3.0","ghc-boot-th-8.10.7","ghc-prim-0.6.1","pretty-1.1.3.6"]},{"type":"pre-existing","id":"terminfo-0.4.1.4","pkg-name":"terminfo","pkg-version":"0.4.1.4","depends":["base-4.14.3.0"]},{"type":"pre-existing","id":"text-1.2.4.1","pkg-name":"text","pkg-version":"1.2.4.1","depends":["array-0.5.4.0","base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0","template-haskell-2.16.0.0"]},{"type":"configured","id":"tggd-0.8.6.1-22e9a365","pkg-name":"tagged","pkg-version":"0.8.6.1","flags":{"deepseq":true,"transformers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"98e446479bd3fe5bdc5fa63fec2a2f6998e1bb8cb6db1dee611716f588b3ab28","pkg-src-sha256":"f5e0fcf95f0bb4aa63f428f2c01955a41ea1a42cfcf39145ed631f59a9616c02","depends":["base-4.14.3.0","deepseq-1.4.4.0","template-haskell-2.16.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"th-bstrctn-0.3.2.0-ed858cb3","pkg-name":"th-abstraction","pkg-version":"0.3.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9b5b4e6e2bbff9b075ad7751ee98e2107090bd17b51d5442695b8990e4db6521","pkg-src-sha256":"36fef33ad0f34b9b8fb5552fe6187579a00d5f90d938e9bc24d382a9919feb79","depends":["base-4.14.3.0","containers-0.6.5.1","ghc-prim-0.6.1","template-haskell-2.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"th-cmpt-0.1.2-214f3ab8","pkg-name":"th-compat","pkg-version":"0.1.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3d55de1adc542c1a870c9ada90da2fbbe5f4e8bcd3eed545a55c3df9311b32a8","pkg-src-sha256":"2bc45d0199de3dc65ebc9b71251799f5238869dbc6a66bdf0c06c7e23d603801","depends":["base-4.14.3.0","template-haskell-2.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"time-1.9.3","pkg-name":"time","pkg-version":"1.9.3","depends":["base-4.14.3.0","deepseq-1.4.4.0"]},{"type":"configured","id":"tm-cmpt-1.9.5-7f0b56a3","pkg-name":"time-compat","pkg-version":"1.9.5","flags":{"old-locale":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a586bd5a59b47ea0c9eafc55c6936ede11126f4a6e619d6d7aeefee73c43d9b8","pkg-src-sha256":"3126b267d19f31d52a3c36f13a8788be03242f829a5bddd8a3084e134d01e3a6","depends":["base-4.14.3.0","bs-rphns-0.8.4-c8f36af6","deepseq-1.4.4.0","time-1.9.3"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tm-mngr-0.0.0-6703061d","pkg-name":"time-manager","pkg-version":"0.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d258b1d08f9b926823f5380e9201303b0ebeefe4f9e0047c0cbd7b6728135ee1","pkg-src-sha256":"90a616ed20b2119bb64f78f84230b6798cde22a35e87bc8d9ee08cdf1d90fcdb","depends":["t-pdt-0.1.6-34d65238","base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tmprry-1.3-b8b887fd","pkg-name":"temporary","pkg-version":"1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3a66c136f700dbf42f3c5000ca93e80b26dead51e54322c83272b236c1ec8ef1","pkg-src-sha256":"8c442993694b5ffca823ce864af95bd2841fb5264ee511c61cf48cc71d879890","depends":["base-4.14.3.0","directory-1.3.6.0","exceptions-0.10.4","filepath-1.4.2.1","rndm-1.2.0-5f8e0010","transformers-0.5.6.2","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tr-0.5.1.1-52757773","pkg-name":"tar","pkg-version":"0.5.1.1","flags":{"old-bytestring":false,"old-time":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"94ded05718fe75b88c98e7113feeb9fca50688a7e59b6aefd80a6f48438c5062","pkg-src-sha256":"b384449f62b2b0aa3e6d2cb1004b8060b01f21ec93e7b63e7af6d8fad8a9f1de","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","time-1.9.3"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.14.3.0","ghc-prim-0.6.1"]},{"type":"configured","id":"trnsfrmrs-bs-0.4.5.2-3f76eadc","pkg-name":"transformers-base","pkg-version":"0.4.5.2","flags":{"orphaninstances":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e4d8155470905ba2942033a1537fc4cf91927d1c9b34693fd57ddf3bc02334af","pkg-src-sha256":"d0c80c63fdce6a077dd8eda4f1ff289b85578703a3f1272e141d400fe23245e8","depends":["base-4.14.3.0","bs-rphns-0.8.4-c8f36af6","stm-2.5.0.1","transformers-0.5.6.2","trnsfrmrs-cmpt-0.6.6-c2257ba9"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"trnsfrmrs-cmpt-0.6.6-c2257ba9","pkg-name":"transformers-compat","pkg-version":"0.6.6","flags":{"five":false,"five-three":true,"four":false,"generic-deriving":true,"mtl":true,"three":false,"two":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"510709db2b12d1510d70de824ee544ca0a9e6f27aa7e299218cbacc0750b4a5e","pkg-src-sha256":"7e2e0251e5e6d28142615a4b950a3fabac9c0b7804b1ec4a4ae985f19519a9f9","depends":["base-4.14.3.0","ghc-prim-0.6.1","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tst-frmwrk-0.8.2.0-541e50fd","pkg-name":"test-framework","pkg-version":"0.8.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"39f114d1ed0c95d0772ba6873bef9a69c1e08b865f46deb1b6c93ca5224f7871","pkg-src-sha256":"f5aec7a15dbcb39e951bcf6502606fd99d751197b5510f41706899aa7e660ac2","depends":["ns-trmnl-0.11-ea4f31d8","ns-wl-pprnt-0.6.9-cbaf5426","base-4.14.3.0","containers-0.6.5.1","hstnm-1.0-c687754f","ld-lcl-1.0.0.7-fbd769ce","rndm-1.2.0-5f8e0010","rgx-psx-0.96.0.0-a3587e43","time-1.9.3","xml-1.3.14-60ead35d"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tst-frmwrk-hnt-0.3.0.2-b7e00943","pkg-name":"test-framework-hunit","pkg-version":"0.3.0.2","flags":{"base3":false,"base4":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7fd007e9cb082cd64a2213a6d36acf057f7d6df6b5343a088e81b2b3a9a23545","pkg-src-sha256":"95cb8ee02a850b164bfdabdf4dbc839d621361f3ac770ad21ea43a8bde360bf8","components":{"lib":{"depends":["HUnt-1.6.2.0-b7015290","base-4.14.3.0","xtnsbl-xcptns-0.1.1.4-58d8a3c5","tst-frmwrk-0.8.2.0-541e50fd"],"exe-depends":[]}}},{"type":"configured","id":"ttprsc-0.13.2.5-bfdb3102","pkg-name":"attoparsec","pkg-version":"0.13.2.5","flags":{"developer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7c88195c3f3243c6abe356c1bc872cf40818a8c7b0e261a8f8e6868fe42819a0","pkg-src-sha256":"21e0f38eaa1957bf471276afa17651c125a38924575f12c2cbd2fa534b45686f","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","ghc-prim-0.6.1","scntfc-0.3.6.2-734dabfd","text-1.2.4.1","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"typ-qlty-1-8a20443f","pkg-name":"type-equality","pkg-version":"1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f2a895a7b22384d9b43a9c6608725b2de7581e77e5b20ab9cfe3f959f6cd71a8","pkg-src-sha256":"4728b502a211454ef682a10d7a3e817c22d06ba509df114bb267ef9d43a08ce8","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.14.3.0","bytestring-0.10.12.0","time-1.9.3"]},{"type":"configured","id":"vctr-0.12.2.0-9301e615","pkg-name":"vector","pkg-version":"0.12.2.0","flags":{"boundschecks":true,"internalchecks":false,"unsafechecks":false,"wall":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6e81683c2c19b4aea58f1f453547cb03851b3cfd4031b8eb82abfa4643a13494","pkg-src-sha256":"17ab0b84c87859333ff681bb9f768368779677925bd589ff4baa05be3fd26b50","depends":["base-4.14.3.0","deepseq-1.4.4.0","ghc-prim-0.6.1","prmtv-0.7.1.0-9e5d8d36"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vctr-lgrthms-0.8.0.4-aa341e68","pkg-name":"vector-algorithms","pkg-version":"0.8.0.4","flags":{"bench":true,"boundschecks":true,"internalchecks":false,"llvm":false,"properties":true,"unsafechecks":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"bf4760b23a0fee09abb8c9e3c952c870f5dc9780876e9d7e38ab2bdd98c8f283","pkg-src-sha256":"76176a56778bf30a275b1089ee6db24ec6c67d92525145f8dfe215b80137af3b","depends":["base-4.14.3.0","bytestring-0.10.12.0","prmtv-0.7.1.0-9e5d8d36","vctr-0.12.2.0-9301e615"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vd-0.7.3-3b10c00c","pkg-name":"void","pkg-version":"0.7.3","flags":{"safe":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"13d30f62fcdf065e595d679d4ac8b4b0c1bb1a1b73db7b5b5a8f857cb5c8a546","pkg-src-sha256":"53af758ddc37dc63981671e503438d02c6f64a2d8744e9bec557a894431f7317","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vlt-0.3.1.5-2ae9d093","pkg-name":"vault","pkg-version":"0.3.1.5","flags":{"useghc":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"10398b6c75b00a5a9f37423c3f064acad4cfdfacb76e2baac1bd9ba225286d67","pkg-src-sha256":"ac2a6b6adf58598c5c8faa931ae961a8a2aa50ddb2f0f7a2044ff6e8c3d433a0","depends":["base-4.14.3.0","containers-0.6.5.1","hshbl-1.3.1.0-81a7e86a","nrdrd-cntnrs-0.2.13.0-86a72f83"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"w-3.2.3-c218a955","pkg-name":"wai","pkg-version":"3.2.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c7518618bdb842116dbc1a4e4553223799eef43add19278c2bbffb4536595fe0","pkg-src-sha256":"5574d6541000988fe204d3032db87fd0a5404cdbde33ee4fa02e6006768229f8","depends":["base-4.14.3.0","bytestring-0.10.12.0","http-typs-0.12.3-c2432fef","ntwrk-3.1.2.1-08b0c5d8","text-1.2.4.1","vlt-0.3.1.5-2ae9d093"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"w-lggr-2.3.6-3fd4ddab","pkg-name":"wai-logger","pkg-version":"2.3.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2cf80c00b7247277f84e14869f43bf05e9cccb59ca26fb2b5bb20f74edae56e2","pkg-src-sha256":"e2fbd8c74fa0a31f9ea0faa53f4ad4e588644a34d8dfc7cc50d85c245c3c7541","components":{"lib":{"depends":["base-4.14.3.0","bytrdr-1.0.4-81c9a110","bytestring-0.10.12.0","fst-lggr-3.0.3-b2e892ac","http-typs-0.12.3-c2432fef","ntwrk-3.1.2.1-08b0c5d8","w-3.2.3-c218a955"],"exe-depends":[]},"setup":{"depends":["Cabal-3.2.1.0","base-4.14.3.0","cbl-dctst-1.0.8-001accad"],"exe-depends":[]}}},{"type":"configured","id":"w-pp-sttc-3.1.7.2-58832556","pkg-name":"wai-app-static","pkg-version":"3.1.7.2","flags":{"print":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ad6b8b07777e6d63f5bf84da2522ac469ff66219a59cdb72baeb69af95e4ffe0","pkg-src-sha256":"c8e7db8ddb31d2297df4cae0add63e514f2a8ef92a68541707585f8148690f8d","depends":["base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","directory-1.3.6.0","mm-typs-0.1.0.9-f771e3c4","text-1.2.4.1","w-pp-sttc-3.1.7.2-f457c4cc"],"exe-depends":[],"component-name":"exe:warp","bin-file":"/store/ghc-8.10.7/w-pp-sttc-3.1.7.2-58832556/bin/warp"},{"type":"configured","id":"w-pp-sttc-3.1.7.2-f457c4cc","pkg-name":"wai-app-static","pkg-version":"3.1.7.2","flags":{"print":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ad6b8b07777e6d63f5bf84da2522ac469ff66219a59cdb72baeb69af95e4ffe0","pkg-src-sha256":"c8e7db8ddb31d2297df4cae0add63e514f2a8ef92a68541707585f8148690f8d","depends":["base-4.14.3.0","blz-html-0.9.1.2-11bdfacd","blz-mrkp-0.8.2.8-65ba3032","bytestring-0.10.12.0","containers-0.6.5.1","cryptnt-0.28-dfdefa25","directory-1.3.6.0","fl-mbd-0.0.13.0-7552374e","filepath-1.4.2.1","http-dt-0.0.11-7b034d21","http-typs-0.12.3-c2432fef","mmry-0.15.0-1ae4b367","mm-typs-0.1.0.9-f771e3c4","ld-lcl-1.0.0.7-fbd769ce","ptprs-pplctv-0.15.1.0-84e62b2b","template-haskell-2.16.0.0","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","nx-cmpt-0.5.3-a704442d","nrdrd-cntnrs-0.2.13.0-86a72f83","w-3.2.3-c218a955","w-xtr-3.0.32-450e0b45","wrp-3.3.14-d90ecb38","zlb-0.6.2.3-69a07bb9"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"w-wbsckts-3.0.1.2-9328eaa1","pkg-name":"wai-websockets","pkg-version":"3.0.1.2","flags":{"example":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0e713ddb8c28d47be76cefeab3a73b6876477d648ddcd873ba6b15d08691aa7f","pkg-src-sha256":"917cceb08f296d7dc6b6cafb66133ae53888b2c98b8fb2a2d7fa629d75ab5d2c","depends":["base-4.14.3.0","bytestring-0.10.12.0","cs-nsnstv-1.2.1.0-0f0c5d1c","http-typs-0.12.3-c2432fef","ntwrk-3.1.2.1-08b0c5d8","transformers-0.5.6.2","w-3.2.3-c218a955","wbsckts-0.12.7.2-af5140c4"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"w-wbsckts-3.0.1.2-bcea58a0","pkg-name":"wai-websockets","pkg-version":"3.0.1.2","flags":{"example":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0e713ddb8c28d47be76cefeab3a73b6876477d648ddcd873ba6b15d08691aa7f","pkg-src-sha256":"917cceb08f296d7dc6b6cafb66133ae53888b2c98b8fb2a2d7fa629d75ab5d2c","depends":["base-4.14.3.0","bytestring-0.10.12.0","cs-nsnstv-1.2.1.0-0f0c5d1c","fl-mbd-0.0.13.0-7552374e","http-typs-0.12.3-c2432fef","ntwrk-3.1.2.1-08b0c5d8","text-1.2.4.1","transformers-0.5.6.2","w-3.2.3-c218a955","w-pp-sttc-3.1.7.2-f457c4cc","w-wbsckts-3.0.1.2-9328eaa1","wrp-3.3.14-d90ecb38","wbsckts-0.12.7.2-af5140c4"],"exe-depends":[],"component-name":"exe:wai-websockets-example","bin-file":"/store/ghc-8.10.7/w-wbsckts-3.0.1.2-bcea58a0/bin/wai-websockets-example"},{"type":"configured","id":"w-xtr-3.0.32-450e0b45","pkg-name":"wai-extra","pkg-version":"3.0.32","flags":{"build-example":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7a9e65c4555e1b937dc788b8ba249dbacd4f36840c60581bc27115a5c4a48079","pkg-src-sha256":"0052878f765dda7a8cbd2c5b72295a80d0251a03b267dbb67633d3aafcaee698","depends":["sn-1.4.7.1-f545389d","ns-trmnl-0.11-ea4f31d8","base-4.14.3.0","bs64-bytstrng-1.0.0.3-4e6d0aeb","bytestring-0.10.12.0","cs-nsnstv-1.2.1.0-0f0c5d1c","containers-0.6.5.1","ck-0.4.5-cfccc30b","dt-dflt-clss-0.1.2.0-b0a51f50","deepseq-1.4.4.0","directory-1.3.6.0","fst-lggr-3.0.3-b2e892ac","http-typs-0.12.3-c2432fef","http2-2.0.6-d6761ca2","prt-1.7.11-6d20dc87","ntwrk-3.1.2.1-08b0c5d8","ld-lcl-1.0.0.7-fbd769ce","rsrct-1.2.4.2-8c58f12d","strmng-cmmns-0.2.2.1-f8c2fa62","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2","nx-cmpt-0.5.3-a704442d","vlt-0.3.1.5-2ae9d093","vd-0.7.3-3b10c00c","w-3.2.3-c218a955","w-lggr-2.3.6-3fd4ddab","wrd8-0.1.3-ac79ab23","zlb-0.6.2.3-69a07bb9"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"wbdrvr-0.9.0.1-8c8bf380","pkg-name":"webdriver","pkg-version":"0.9.0.1","flags":{"developer":false,"network-uri":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"95b810162a436390f83e8aa5e0038bb3a094f2f0ad35f30d3c07e2a3564ae26f","pkg-src-sha256":"135950889784b9d323c70ebf7ecd75b8df194489a303d85995b1fccc7549dff0","depends":["sn-1.4.7.1-f545389d","ttprsc-0.13.2.5-bfdb3102","base-4.14.3.0","bs64-bytstrng-1.0.0.3-4e6d0aeb","bytestring-0.10.12.0","cll-stck-0.3.0-7605e60f","dt-dflt-clss-0.1.2.0-b0a51f50","directory-1.3.6.0","drctry-tr-0.12.1-591e4ce7","exceptions-0.10.4","filepath-1.4.2.1","http-clnt-0.7.6-d2cedd3d","http-typs-0.12.3-c2432fef","lftd-bs-0.2.3.12-0139ca1f","mnd-cntrl-1.0.2.3-748e18fe","ntwrk-3.1.2.1-08b0c5d8","ntwrk-r-2.6.4.1-70848399","scntfc-0.3.6.2-734dabfd","tmprry-1.3-b8b887fd","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","trnsfrmrs-bs-0.4.5.2-3f76eadc","nrdrd-cntnrs-0.2.13.0-86a72f83","vctr-0.12.2.0-9301e615","zp-rchv-0.4.1-f2a3ddf8"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"wbsckts-0.12.7.2-af5140c4","pkg-name":"websockets","pkg-version":"0.12.7.2","flags":{"example":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"5a6a3e40ee0c4e6b2cdc573a332ba4a06bb115b97b58147ed3fb005e3ede5ede","pkg-src-sha256":"84c45a5db481b4c969dddfa7d3cca257ac2a97801594f1180b596d41035122ad","depends":["SHA-1.6.4.4-47cba51b","sync-2.2.3-77cbb22e","ttprsc-0.13.2.5-bfdb3102","base-4.14.3.0","bs64-bytstrng-1.0.0.3-4e6d0aeb","binary-0.8.8.0","bytestring-0.10.12.0","bytstrng-bldr-0.10.8.2.0-4ab17831","cs-nsnstv-1.2.1.0-0f0c5d1c","clck-0.8.2-55eb42a0","containers-0.6.5.1","ntrpy-0.4.1.6-31ada688","ntwrk-3.1.2.1-08b0c5d8","rndm-1.2.0-5f8e0010","strmng-cmmns-0.2.2.1-f8c2fa62","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"wl-pprnt-txt-1.2.0.1-c0ba3a44","pkg-name":"wl-pprint-text","pkg-version":"1.2.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"14d3c6f5708da415558b1683d54c406864639cf6b08a8de7f36e8bcd08896603","pkg-src-sha256":"9e6efdba61da70caf85560570648ec097b88cc2b92bc1306135b93f0ff9b0c0c","components":{"lib":{"depends":["base-4.14.3.0","bs-cmpt-0.11.2-d5806554","text-1.2.4.1"],"exe-depends":[]}}},{"type":"configured","id":"wrd8-0.1.3-ac79ab23","pkg-name":"word8","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e5464d0600821a116467d4b12fef12b15ff040c3599500e5f0274225e78c6faf","pkg-src-sha256":"2630934c75728bfbf390c1f0206b225507b354f68d4047b06c018a36823b5d8a","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"wrp-3.3.14-d90ecb38","pkg-name":"warp","pkg-version":"3.3.14","flags":{"allow-sendfilefd":true,"network-bytestring":false,"warp-debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"cd627497cb2a43ab7923d7df3aa90480ea2dac0de1b05455b40a89ea789ac2c7","pkg-src-sha256":"2331da1ac67c644828883498301bee7bbf59f8b3d79b37850a621cba9a811572","depends":["array-0.5.4.0","sync-2.2.3-77cbb22e","t-pdt-0.1.6-34d65238","base-4.14.3.0","bsb-http-chnkd-0.0.0.4-fe7d15c6","bytestring-0.10.12.0","cs-nsnstv-1.2.1.0-0f0c5d1c","containers-0.6.5.1","ghc-prim-0.6.1","hshbl-1.3.1.0-81a7e86a","http-dt-0.0.11-7b034d21","http-typs-0.12.3-c2432fef","http2-2.0.6-d6761ca2","prt-1.7.11-6d20dc87","ntwrk-3.1.2.1-08b0c5d8","smpl-sndfl-0.2.30-fd4e576c","stm-2.5.0.1","strmng-cmmns-0.2.2.1-f8c2fa62","text-1.2.4.1","tm-mngr-0.0.0-6703061d","unix-2.7.2.2","nx-cmpt-0.5.3-a704442d","vlt-0.3.1.5-2ae9d093","w-3.2.3-c218a955","wrd8-0.1.3-ac79ab23","x509-1.7.5-84d96510"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"x509-1.7.5-84d96510","pkg-name":"x509","pkg-version":"1.7.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"01185a9a17bee4e89287d9e32bfaa673133cf2b09a39759627bed1f72ea528fd","pkg-src-sha256":"b1b0fcbb4aa0d749ed2b54710c2ebd6d900cb932108ad14f97640cf4ca60c7c8","depends":["sn1-ncdng-0.9.6-00fac9aa","sn1-prs-0.9.5-8aca0976","sn1-typs-0.3.4-e09490aa","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","cryptnt-0.28-dfdefa25","hrglss-0.2.12-94395846","mmry-0.15.0-1ae4b367","mtl-2.2.2","pm-0.2.4-b7fc940c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"xctbl-pth-0.0.3.1-a4e5146e","pkg-name":"executable-path","pkg-version":"0.0.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"865c184b96e224ba6727632176e457418aea02d8cfd6b65507d5d1a6c0372a85","pkg-src-sha256":"9cc742b6d40a487b3af38dca6852ca3b50a0db94d42fe819576c84beb5adbc6f","components":{"lib":{"depends":["base-4.14.3.0","directory-1.3.6.0","filepath-1.4.2.1"],"exe-depends":[]}}},{"type":"pre-existing","id":"xhtml-3000.2.2.1","pkg-name":"xhtml","pkg-version":"3000.2.2.1","depends":["base-4.14.3.0"]},{"type":"configured","id":"xml-1.3.14-60ead35d","pkg-name":"xml","pkg-version":"1.3.14","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c7a33d37c968c769723931a33e4e795f0aadda6cb62e7073ded8a2db52509d95","pkg-src-sha256":"32d1a1a9f21a59176d84697f96ae3a13a0198420e3e4f1c48abbab7d2425013d","components":{"lib":{"depends":["base-4.14.3.0","bytestring-0.10.12.0","text-1.2.4.1"],"exe-depends":[]}}},{"type":"configured","id":"xtnsbl-xcptns-0.1.1.4-58d8a3c5","pkg-name":"extensible-exceptions","pkg-version":"0.1.1.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"eb5fe684a7ffe8d1ed2ed6cdaec7dfb29efc780811ea7158a64edc2abc516f47","pkg-src-sha256":"6ce5e8801760385a408dab71b53550f87629e661b260bdc2cd41c6a439b6e388","components":{"lib":{"depends":["base-4.14.3.0"],"exe-depends":[]}}},{"type":"configured","id":"yml-0.11.5.0-e85230ae","pkg-name":"yaml","pkg-version":"0.11.5.0","flags":{"no-examples":true,"no-exe":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"499783456cb70964b6ff29e310d1785829e57eb872ec143a9a81da0edb69cb61","pkg-src-sha256":"b28e748bd69948cb1b43694d4d7c74756e060e09ca91688d0485e23f19d6cdad","depends":["sn-1.4.7.1-f545389d","ttprsc-0.13.2.5-bfdb3102","base-4.14.3.0","bytestring-0.10.12.0","cndt-1.3.4.1-7277901b","containers-0.6.5.1","directory-1.3.6.0","filepath-1.4.2.1","lbyml-0.1.2-7defdd02","mtl-2.2.2","rsrct-1.2.4.2-8c58f12d","scntfc-0.3.6.2-734dabfd","template-haskell-2.16.0.0","text-1.2.4.1","transformers-0.5.6.2","nrdrd-cntnrs-0.2.13.0-86a72f83","vctr-0.12.2.0-9301e615"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"zlb-0.6.2.3-69a07bb9","pkg-name":"zlib","pkg-version":"0.6.2.3","flags":{"bundled-c-zlib":false,"non-blocking-ffi":false,"pkg-config":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"28f4d460c260e074cab833625454564b9783a3389b7bb91fd54da2790b39592c","pkg-src-sha256":"807f6bddf9cb3c517ce5757d991dde3c7e319953a22c86ee03d74534bd5abc88","depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"zp-rchv-0.4.1-f2a3ddf8","pkg-name":"zip-archive","pkg-version":"0.4.1","flags":{"executable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"51774bdc747d20b8f23172315f9c3fdd6c11de01607e98e9890eb87fb49566d7","pkg-src-sha256":"c5d5c9976241dcc25b0d8753dc526bb1bfef60f30dee38c53a7ae56e6be9b1b1","depends":["array-0.5.4.0","base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","dgst-0.0.1.2-33c1e67d","directory-1.3.6.0","filepath-1.4.2.1","mtl-2.2.2","pretty-1.1.3.6","text-1.2.4.1","time-1.9.3","unix-2.7.2.2","zlb-0.6.2.3-69a07bb9"],"exe-depends":[],"component-name":"lib"}],"targets":[{"pkg-name":"Cabal","pkg-version":"3.2.1.0","component-name":"lib","available":[{"id":"Cabal-3.2.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"HUnit","pkg-version":"1.6.2.0","component-name":"lib","available":[{"id":"HUnt-1.6.2.0-b7015290","component-name":"lib","build-by-default":true}]},{"pkg-name":"HUnit","pkg-version":"1.6.2.0","component-name":"test:tests","available":["TargetNotLocal"]},{"pkg-name":"SHA","pkg-version":"1.6.4.4","component-name":"lib","available":[{"id":"SHA-1.6.4.4-47cba51b","component-name":"lib","build-by-default":true}]},{"pkg-name":"SHA","pkg-version":"1.6.4.4","component-name":"exe:sha1","available":["TargetNotBuildable"]},{"pkg-name":"SHA","pkg-version":"1.6.4.4","component-name":"exe:sha224","available":["TargetNotBuildable"]},{"pkg-name":"SHA","pkg-version":"1.6.4.4","component-name":"exe:sha256","available":["TargetNotBuildable"]},{"pkg-name":"SHA","pkg-version":"1.6.4.4","component-name":"exe:sha384","available":["TargetNotBuildable"]},{"pkg-name":"SHA","pkg-version":"1.6.4.4","component-name":"exe:sha512","available":["TargetNotBuildable"]},{"pkg-name":"SHA","pkg-version":"1.6.4.4","component-name":"test:test-sha","available":["TargetNotLocal"]},{"pkg-name":"StateVar","pkg-version":"1.2.1","component-name":"lib","available":[{"id":"SttVr-1.2.1-9a4219da","component-name":"lib","build-by-default":true}]},{"pkg-name":"adjunctions","pkg-version":"4.4","component-name":"lib","available":[{"id":"djnctns-4.4-a26f282f","component-name":"lib","build-by-default":true}]},{"pkg-name":"adjunctions","pkg-version":"4.4","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"aeson","pkg-version":"1.4.7.1","component-name":"lib","available":[{"id":"sn-1.4.7.1-f545389d","component-name":"lib","build-by-default":true}]},{"pkg-name":"aeson","pkg-version":"1.4.7.1","component-name":"test:tests","available":["TargetNotLocal"]},{"pkg-name":"ansi-terminal","pkg-version":"0.11","component-name":"lib","available":[{"id":"ns-trmnl-0.11-ea4f31d8","component-name":"lib","build-by-default":true}]},{"pkg-name":"ansi-terminal","pkg-version":"0.11","component-name":"exe:ansi-terminal-example","available":["TargetNotBuildable"]},{"pkg-name":"ansi-wl-pprint","pkg-version":"0.6.9","component-name":"lib","available":[{"id":"ns-wl-pprnt-0.6.9-cbaf5426","component-name":"lib","build-by-default":true}]},{"pkg-name":"ansi-wl-pprint","pkg-version":"0.6.9","component-name":"exe:ansi-wl-pprint-example","available":["TargetNotBuildable"]},{"pkg-name":"appar","pkg-version":"0.1.8","component-name":"lib","available":[{"id":"ppr-0.1.8-c634d8fb","component-name":"lib","build-by-default":true}]},{"pkg-name":"array","pkg-version":"0.5.4.0","component-name":"lib","available":[{"id":"array-0.5.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"asn1-encoding","pkg-version":"0.9.6","component-name":"lib","available":[{"id":"sn1-ncdng-0.9.6-00fac9aa","component-name":"lib","build-by-default":true}]},{"pkg-name":"asn1-encoding","pkg-version":"0.9.6","component-name":"test:tests-asn1-encoding","available":["TargetNotLocal"]},{"pkg-name":"asn1-parse","pkg-version":"0.9.5","component-name":"lib","available":[{"id":"sn1-prs-0.9.5-8aca0976","component-name":"lib","build-by-default":true}]},{"pkg-name":"asn1-types","pkg-version":"0.3.4","component-name":"lib","available":[{"id":"sn1-typs-0.3.4-e09490aa","component-name":"lib","build-by-default":true}]},{"pkg-name":"async","pkg-version":"2.2.3","component-name":"lib","available":[{"id":"sync-2.2.3-77cbb22e","component-name":"lib","build-by-default":true}]},{"pkg-name":"async","pkg-version":"2.2.3","component-name":"exe:concasync","available":["TargetNotBuildable"]},{"pkg-name":"async","pkg-version":"2.2.3","component-name":"exe:conccancel","available":["TargetNotBuildable"]},{"pkg-name":"async","pkg-version":"2.2.3","component-name":"exe:race","available":["TargetNotBuildable"]},{"pkg-name":"async","pkg-version":"2.2.3","component-name":"test:test-async","available":["TargetNotLocal"]},{"pkg-name":"attoparsec","pkg-version":"0.13.2.5","component-name":"lib","available":[{"id":"ttprsc-0.13.2.5-bfdb3102","component-name":"lib","build-by-default":true}]},{"pkg-name":"attoparsec","pkg-version":"0.13.2.5","component-name":"test:tests","available":["TargetNotLocal"]},{"pkg-name":"attoparsec","pkg-version":"0.13.2.5","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"auto-update","pkg-version":"0.1.6","component-name":"lib","available":[{"id":"t-pdt-0.1.6-34d65238","component-name":"lib","build-by-default":true}]},{"pkg-name":"auto-update","pkg-version":"0.1.6","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"base","pkg-version":"4.14.3.0","component-name":"lib","available":[{"id":"base-4.14.3.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base-compat","pkg-version":"0.11.2","component-name":"lib","available":[{"id":"bs-cmpt-0.11.2-d5806554","component-name":"lib","build-by-default":true}]},{"pkg-name":"base-compat-batteries","pkg-version":"0.11.2","component-name":"lib","available":[{"id":"bs-cmpt-bttrs-0.11.2-60bdc7ba","component-name":"lib","build-by-default":true}]},{"pkg-name":"base-compat-batteries","pkg-version":"0.11.2","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"base-orphans","pkg-version":"0.8.4","component-name":"lib","available":[{"id":"bs-rphns-0.8.4-c8f36af6","component-name":"lib","build-by-default":true}]},{"pkg-name":"base-orphans","pkg-version":"0.8.4","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"base16-bytestring","pkg-version":"0.1.1.7","component-name":"lib","available":[{"id":"bs16-bytstrng-0.1.1.7-df2561c0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base16-bytestring","pkg-version":"0.1.1.7","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"base64-bytestring","pkg-version":"1.0.0.3","component-name":"lib","available":[{"id":"bs64-bytstrng-1.0.0.3-4e6d0aeb","component-name":"lib","build-by-default":true}]},{"pkg-name":"base64-bytestring","pkg-version":"1.0.0.3","component-name":"test:tests","available":["TargetNotLocal"]},{"pkg-name":"base64-bytestring","pkg-version":"1.0.0.3","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"basement","pkg-version":"0.0.11","component-name":"lib","available":[{"id":"bsmnt-0.0.11-f050f8fa","component-name":"lib","build-by-default":true}]},{"pkg-name":"bifunctors","pkg-version":"5.5.7","component-name":"lib","available":[{"id":"bfnctrs-5.5.7-195e3fe2","component-name":"lib","build-by-default":true}]},{"pkg-name":"bifunctors","pkg-version":"5.5.7","component-name":"test:bifunctors-spec","available":["TargetNotLocal"]},{"pkg-name":"binary","pkg-version":"0.8.8.0","component-name":"lib","available":[{"id":"binary-0.8.8.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"blaze-builder","pkg-version":"0.4.2.1","component-name":"lib","available":[{"id":"blz-bldr-0.4.2.1-f5d6708e","component-name":"lib","build-by-default":true}]},{"pkg-name":"blaze-builder","pkg-version":"0.4.2.1","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"blaze-html","pkg-version":"0.9.1.2","component-name":"lib","available":[{"id":"blz-html-0.9.1.2-11bdfacd","component-name":"lib","build-by-default":true}]},{"pkg-name":"blaze-html","pkg-version":"0.9.1.2","component-name":"test:blaze-html-tests","available":["TargetNotLocal"]},{"pkg-name":"blaze-markup","pkg-version":"0.8.2.8","component-name":"lib","available":[{"id":"blz-mrkp-0.8.2.8-65ba3032","component-name":"lib","build-by-default":true}]},{"pkg-name":"blaze-markup","pkg-version":"0.8.2.8","component-name":"test:blaze-markup-tests","available":["TargetNotLocal"]},{"pkg-name":"bsb-http-chunked","pkg-version":"0.0.0.4","component-name":"lib","available":[{"id":"bsb-http-chnkd-0.0.0.4-fe7d15c6","component-name":"lib","build-by-default":true}]},{"pkg-name":"bsb-http-chunked","pkg-version":"0.0.0.4","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"bsb-http-chunked","pkg-version":"0.0.0.4","component-name":"test:tests","available":["TargetNotLocal"]},{"pkg-name":"bsb-http-chunked","pkg-version":"0.0.0.4","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"byteable","pkg-version":"0.1.1","component-name":"lib","available":[{"id":"bytbl-0.1.1-2633b450","component-name":"lib","build-by-default":true}]},{"pkg-name":"byteorder","pkg-version":"1.0.4","component-name":"lib","available":[{"id":"bytrdr-1.0.4-81c9a110","component-name":"lib","build-by-default":true}]},{"pkg-name":"bytestring","pkg-version":"0.10.12.0","component-name":"lib","available":[{"id":"bytestring-0.10.12.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"bytestring-builder","pkg-version":"0.10.8.2.0","component-name":"lib","available":[{"id":"bytstrng-bldr-0.10.8.2.0-4ab17831","component-name":"lib","build-by-default":true}]},{"pkg-name":"cabal-doctest","pkg-version":"1.0.8","component-name":"lib","available":[{"id":"cbl-dctst-1.0.8-001accad","component-name":"lib","build-by-default":true}]},{"pkg-name":"call-stack","pkg-version":"0.3.0","component-name":"lib","available":[{"id":"cll-stck-0.3.0-7605e60f","component-name":"lib","build-by-default":true}]},{"pkg-name":"call-stack","pkg-version":"0.3.0","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"case-insensitive","pkg-version":"1.2.1.0","component-name":"lib","available":[{"id":"cs-nsnstv-1.2.1.0-0f0c5d1c","component-name":"lib","build-by-default":true}]},{"pkg-name":"case-insensitive","pkg-version":"1.2.1.0","component-name":"test:test-case-insensitive","available":["TargetNotLocal"]},{"pkg-name":"case-insensitive","pkg-version":"1.2.1.0","component-name":"bench:bench-case-insensitive","available":["TargetNotLocal"]},{"pkg-name":"clock","pkg-version":"0.8.2","component-name":"lib","available":[{"id":"clck-0.8.2-55eb42a0","component-name":"lib","build-by-default":true}]},{"pkg-name":"clock","pkg-version":"0.8.2","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"clock","pkg-version":"0.8.2","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"colour","pkg-version":"2.3.5","component-name":"lib","available":[{"id":"clr-2.3.5-3ce536bf","component-name":"lib","build-by-default":true}]},{"pkg-name":"colour","pkg-version":"2.3.5","component-name":"test:test-colour","available":["TargetNotLocal"]},{"pkg-name":"comonad","pkg-version":"5.0.8","component-name":"lib","available":[{"id":"cmnd-5.0.8-89fd52db","component-name":"lib","build-by-default":true}]},{"pkg-name":"conduit","pkg-version":"1.3.4.1","component-name":"lib","available":[{"id":"cndt-1.3.4.1-7277901b","component-name":"lib","build-by-default":true}]},{"pkg-name":"conduit","pkg-version":"1.3.4.1","component-name":"test:conduit-test","available":["TargetNotLocal"]},{"pkg-name":"conduit","pkg-version":"1.3.4.1","component-name":"bench:optimize-201408","available":["TargetNotLocal"]},{"pkg-name":"conduit","pkg-version":"1.3.4.1","component-name":"bench:unfused","available":["TargetNotLocal"]},{"pkg-name":"constraints","pkg-version":"0.13","component-name":"lib","available":[{"id":"cnstrnts-0.13-1b93bc9d","component-name":"lib","build-by-default":true}]},{"pkg-name":"constraints","pkg-version":"0.13","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"containers","pkg-version":"0.6.5.1","component-name":"lib","available":[{"id":"containers-0.6.5.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"contravariant","pkg-version":"1.5.3","component-name":"lib","available":[{"id":"cntrvrnt-1.5.3-cf62fb3c","component-name":"lib","build-by-default":true}]},{"pkg-name":"cookie","pkg-version":"0.4.5","component-name":"lib","available":[{"id":"ck-0.4.5-cfccc30b","component-name":"lib","build-by-default":true}]},{"pkg-name":"cookie","pkg-version":"0.4.5","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"cryptohash","pkg-version":"0.11.9","component-name":"lib","available":[{"id":"crypthsh-0.11.9-7a1d901a","component-name":"lib","build-by-default":true}]},{"pkg-name":"cryptohash","pkg-version":"0.11.9","component-name":"test:test-kat","available":["TargetNotLocal"]},{"pkg-name":"cryptohash","pkg-version":"0.11.9","component-name":"bench:bench-api","available":["TargetNotLocal"]},{"pkg-name":"cryptohash","pkg-version":"0.11.9","component-name":"bench:bench-hashes","available":["TargetNotLocal"]},{"pkg-name":"cryptohash","pkg-version":"0.11.9","component-name":"bench:bench-hmac","available":["TargetNotLocal"]},{"pkg-name":"cryptonite","pkg-version":"0.28","component-name":"lib","available":[{"id":"cryptnt-0.28-dfdefa25","component-name":"lib","build-by-default":true}]},{"pkg-name":"cryptonite","pkg-version":"0.28","component-name":"test:test-cryptonite","available":["TargetNotLocal"]},{"pkg-name":"cryptonite","pkg-version":"0.28","component-name":"bench:bench-cryptonite","available":["TargetNotLocal"]},{"pkg-name":"data-default","pkg-version":"0.7.1.1","component-name":"lib","available":[{"id":"dt-dflt-0.7.1.1-2f50bc38","component-name":"lib","build-by-default":true}]},{"pkg-name":"data-default-class","pkg-version":"0.1.2.0","component-name":"lib","available":[{"id":"dt-dflt-clss-0.1.2.0-b0a51f50","component-name":"lib","build-by-default":true}]},{"pkg-name":"data-default-instances-containers","pkg-version":"0.0.1","component-name":"lib","available":[{"id":"dt-dflt-nstncs-cntnrs-0.0.1-6a172060","component-name":"lib","build-by-default":true}]},{"pkg-name":"data-default-instances-dlist","pkg-version":"0.0.1","component-name":"lib","available":[{"id":"dt-dflt-nstncs-dlst-0.0.1-aafdaf2f","component-name":"lib","build-by-default":true}]},{"pkg-name":"data-default-instances-old-locale","pkg-version":"0.0.1","component-name":"lib","available":[{"id":"dt-dflt-nstncs-ld-lcl-0.0.1-7e7191a8","component-name":"lib","build-by-default":true}]},{"pkg-name":"deepseq","pkg-version":"1.4.4.0","component-name":"lib","available":[{"id":"deepseq-1.4.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"digest","pkg-version":"0.0.1.2","component-name":"lib","available":[{"id":"dgst-0.0.1.2-33c1e67d","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory","pkg-version":"1.3.6.0","component-name":"lib","available":[{"id":"directory-1.3.6.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory-tree","pkg-version":"0.12.1","component-name":"lib","available":[{"id":"drctry-tr-0.12.1-591e4ce7","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory-tree","pkg-version":"0.12.1","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"distributive","pkg-version":"0.6.2.1","component-name":"lib","available":[{"id":"dstrbtv-0.6.2.1-27e474d4","component-name":"lib","build-by-default":true}]},{"pkg-name":"distributive","pkg-version":"0.6.2.1","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"dlist","pkg-version":"0.8.0.8","component-name":"lib","available":[{"id":"dlst-0.8.0.8-96990b97","component-name":"lib","build-by-default":true}]},{"pkg-name":"dlist","pkg-version":"0.8.0.8","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"easy-file","pkg-version":"0.2.2","component-name":"lib","available":[{"id":"sy-fl-0.2.2-c2329e48","component-name":"lib","build-by-default":true}]},{"pkg-name":"enclosed-exceptions","pkg-version":"1.0.3","component-name":"lib","available":[{"id":"nclsd-xcptns-1.0.3-a8a2e7cb","component-name":"lib","build-by-default":true}]},{"pkg-name":"enclosed-exceptions","pkg-version":"1.0.3","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"entropy","pkg-version":"0.4.1.6","component-name":"lib","available":[{"id":"ntrpy-0.4.1.6-31ada688","component-name":"lib","build-by-default":true}]},{"pkg-name":"exceptions","pkg-version":"0.10.4","component-name":"lib","available":[{"id":"exceptions-0.10.4","component-name":"lib","build-by-default":true}]},{"pkg-name":"executable-path","pkg-version":"0.0.3.1","component-name":"lib","available":[{"id":"xctbl-pth-0.0.3.1-a4e5146e","component-name":"lib","build-by-default":true}]},{"pkg-name":"extensible-exceptions","pkg-version":"0.1.1.4","component-name":"lib","available":[{"id":"xtnsbl-xcptns-0.1.1.4-58d8a3c5","component-name":"lib","build-by-default":true}]},{"pkg-name":"fast-logger","pkg-version":"3.0.3","component-name":"lib","available":[{"id":"fst-lggr-3.0.3-b2e892ac","component-name":"lib","build-by-default":true}]},{"pkg-name":"fast-logger","pkg-version":"3.0.3","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"file-embed","pkg-version":"0.0.13.0","component-name":"lib","available":[{"id":"fl-mbd-0.0.13.0-7552374e","component-name":"lib","build-by-default":true}]},{"pkg-name":"file-embed","pkg-version":"0.0.13.0","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"filepath","pkg-version":"1.4.2.1","component-name":"lib","available":[{"id":"filepath-1.4.2.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"free","pkg-version":"5.1.3","component-name":"lib","available":[{"id":"fr-5.1.3-805aa632","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-boot","pkg-version":"8.10.7","component-name":"lib","available":[{"id":"ghc-boot-8.10.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-boot-th","pkg-version":"8.10.7","component-name":"lib","available":[{"id":"ghc-boot-th-8.10.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-compact","pkg-version":"0.1.0.0","component-name":"lib","available":[{"id":"ghc-compact-0.1.0.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-heap","pkg-version":"8.10.7","component-name":"lib","available":[{"id":"ghc-heap-8.10.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-paths","pkg-version":"0.1.0.12","component-name":"lib","available":[{"id":"ghc-pths-0.1.0.12-22eabb95","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-prim","pkg-version":"0.6.1","component-name":"lib","available":[{"id":"ghc-prim-0.6.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghci","pkg-version":"8.10.7","component-name":"lib","available":[{"id":"ghci-8.10.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"lib","available":[{"id":"ghcjs-8.10.7-inplace","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:ghcjs","available":[{"id":"ghcjs-8.10.7-inplace-ghcjs","component-name":"exe:ghcjs","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:ghcjs-boot","available":[{"id":"ghcjs-8.10.7-inplace-ghcjs-boot","component-name":"exe:ghcjs-boot","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:ghcjs-dumparchive","available":[{"id":"ghcjs-8.10.7-inplace-ghcjs-dumparchive","component-name":"exe:ghcjs-dumparchive","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:ghcjs-pkg","available":[{"id":"ghcjs-8.10.7-inplace-ghcjs-pkg","component-name":"exe:ghcjs-pkg","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:haddock","available":[{"id":"ghcjs-8.10.7-inplace-haddock","component-name":"exe:haddock","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:private-ghcjs-hsc2hs","available":[{"id":"ghcjs-8.10.7-inplace-private-ghcjs-hsc2hs","component-name":"exe:private-ghcjs-hsc2hs","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:private-ghcjs-run","available":[{"id":"ghcjs-8.10.7-inplace-private-ghcjs-run","component-name":"exe:private-ghcjs-run","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:private-ghcjs-touchy","available":["TargetNotBuildable"]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:private-ghcjs-unlit","available":[{"id":"ghcjs-8.10.7-inplace-private-ghcjs-unlit","component-name":"exe:private-ghcjs-unlit","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:private-ghcjs-wrapper","available":["TargetNotBuildable"]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"test:test","available":[{"id":"ghcjs-8.10.7-inplace-test","component-name":"test:test","build-by-default":true}]},{"pkg-name":"ghcjs-th","pkg-version":"0.1.0.0","component-name":"lib","available":[{"id":"ghcjs-th-0.1.0.0-inplace","component-name":"lib","build-by-default":true}]},{"pkg-name":"happy","pkg-version":"1.20.0","component-name":"exe:happy","available":[{"id":"hppy-1.20.0-c7a066ac","component-name":"exe:happy","build-by-default":true}]},{"pkg-name":"happy","pkg-version":"1.20.0","component-name":"test:tests","available":["TargetNotLocal"]},{"pkg-name":"hashable","pkg-version":"1.3.1.0","component-name":"lib","available":[{"id":"hshbl-1.3.1.0-81a7e86a","component-name":"lib","build-by-default":true}]},{"pkg-name":"hashable","pkg-version":"1.3.1.0","component-name":"test:hashable-examples","available":["TargetNotLocal"]},{"pkg-name":"hashable","pkg-version":"1.3.1.0","component-name":"test:hashable-tests","available":["TargetNotLocal"]},{"pkg-name":"hostname","pkg-version":"1.0","component-name":"lib","available":[{"id":"hstnm-1.0-c687754f","component-name":"lib","build-by-default":true}]},{"pkg-name":"hourglass","pkg-version":"0.2.12","component-name":"lib","available":[{"id":"hrglss-0.2.12-94395846","component-name":"lib","build-by-default":true}]},{"pkg-name":"hourglass","pkg-version":"0.2.12","component-name":"test:test-hourglass","available":["TargetNotLocal"]},{"pkg-name":"hourglass","pkg-version":"0.2.12","component-name":"bench:bench-hourglass","available":["TargetNotLocal"]},{"pkg-name":"hpc","pkg-version":"0.6.1.0","component-name":"lib","available":[{"id":"hpc-0.6.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"hsc2hs","pkg-version":"0.68.7","component-name":"exe:hsc2hs","available":[{"id":"hsc2hs-0.68.7-83233b7f","component-name":"exe:hsc2hs","build-by-default":true}]},{"pkg-name":"hsc2hs","pkg-version":"0.68.7","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"http-client","pkg-version":"0.7.6","component-name":"lib","available":[{"id":"http-clnt-0.7.6-d2cedd3d","component-name":"lib","build-by-default":true}]},{"pkg-name":"http-client","pkg-version":"0.7.6","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"http-client","pkg-version":"0.7.6","component-name":"test:spec-nonet","available":["TargetNotLocal"]},{"pkg-name":"http-date","pkg-version":"0.0.11","component-name":"lib","available":[{"id":"http-dt-0.0.11-7b034d21","component-name":"lib","build-by-default":true}]},{"pkg-name":"http-date","pkg-version":"0.0.11","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"http-date","pkg-version":"0.0.11","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"http-types","pkg-version":"0.12.3","component-name":"lib","available":[{"id":"http-typs-0.12.3-c2432fef","component-name":"lib","build-by-default":true}]},{"pkg-name":"http-types","pkg-version":"0.12.3","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"http-types","pkg-version":"0.12.3","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"lib","available":[{"id":"http2-2.0.6-d6761ca2","component-name":"lib","build-by-default":true}]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"exe:frame-encode","available":["TargetNotBuildable"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"exe:hpack-debug","available":["TargetNotBuildable"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"exe:hpack-encode","available":["TargetNotBuildable"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"exe:hpack-stat","available":["TargetNotBuildable"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"test:doctest","available":["TargetNotLocal"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"test:frame","available":["TargetNotLocal"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"test:hpack","available":["TargetNotLocal"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"bench:header-compression","available":["TargetNotLocal"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"bench:priority","available":["TargetNotLocal"]},{"pkg-name":"indexed-traversable","pkg-version":"0.1.1","component-name":"lib","available":[{"id":"ndxd-trvrsbl-0.1.1-5423d452","component-name":"lib","build-by-default":true}]},{"pkg-name":"integer-gmp","pkg-version":"1.0.3.0","component-name":"lib","available":[{"id":"integer-gmp-1.0.3.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"integer-logarithms","pkg-version":"1.0.3.1","component-name":"lib","available":[{"id":"ntgr-lgrthms-1.0.3.1-bcc6b5f0","component-name":"lib","build-by-default":true}]},{"pkg-name":"integer-logarithms","pkg-version":"1.0.3.1","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"invariant","pkg-version":"0.5.3","component-name":"lib","available":[{"id":"nvrnt-0.5.3-9235ec85","component-name":"lib","build-by-default":true}]},{"pkg-name":"invariant","pkg-version":"0.5.3","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"iproute","pkg-version":"1.7.11","component-name":"lib","available":[{"id":"prt-1.7.11-6d20dc87","component-name":"lib","build-by-default":true}]},{"pkg-name":"iproute","pkg-version":"1.7.11","component-name":"test:doctest","available":["TargetNotLocal"]},{"pkg-name":"iproute","pkg-version":"1.7.11","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"kan-extensions","pkg-version":"5.2.2","component-name":"lib","available":[{"id":"kn-xtnsns-5.2.2-bc676010","component-name":"lib","build-by-default":true}]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"lib","available":[{"id":"lns-4.19.2-261cde91","component-name":"lib","build-by-default":true}]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"test:hunit","available":["TargetNotLocal"]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"test:properties","available":["TargetNotLocal"]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"test:templates","available":["TargetNotLocal"]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"bench:alongside","available":["TargetNotLocal"]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"bench:folds","available":["TargetNotLocal"]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"bench:plated","available":["TargetNotLocal"]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"bench:traversals","available":["TargetNotLocal"]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"bench:unsafe","available":["TargetNotLocal"]},{"pkg-name":"libyaml","pkg-version":"0.1.2","component-name":"lib","available":[{"id":"lbyml-0.1.2-7defdd02","component-name":"lib","build-by-default":true}]},{"pkg-name":"lifted-async","pkg-version":"0.10.1.3","component-name":"lib","available":[{"id":"lftd-sync-0.10.1.3-f2051f67","component-name":"lib","build-by-default":true}]},{"pkg-name":"lifted-async","pkg-version":"0.10.1.3","component-name":"test:regression-tests","available":["TargetNotLocal"]},{"pkg-name":"lifted-async","pkg-version":"0.10.1.3","component-name":"test:test-lifted-async","available":["TargetNotLocal"]},{"pkg-name":"lifted-async","pkg-version":"0.10.1.3","component-name":"bench:benchmark-lifted-async","available":["TargetNotLocal"]},{"pkg-name":"lifted-async","pkg-version":"0.10.1.3","component-name":"bench:benchmark-lifted-async-threaded","available":["TargetNotLocal"]},{"pkg-name":"lifted-base","pkg-version":"0.2.3.12","component-name":"lib","available":[{"id":"lftd-bs-0.2.3.12-0139ca1f","component-name":"lib","build-by-default":true}]},{"pkg-name":"lifted-base","pkg-version":"0.2.3.12","component-name":"test:test-lifted-base","available":["TargetNotLocal"]},{"pkg-name":"lifted-base","pkg-version":"0.2.3.12","component-name":"bench:bench-lifted-base","available":["TargetNotLocal"]},{"pkg-name":"memory","pkg-version":"0.15.0","component-name":"lib","available":[{"id":"mmry-0.15.0-1ae4b367","component-name":"lib","build-by-default":true}]},{"pkg-name":"memory","pkg-version":"0.15.0","component-name":"test:test-memory","available":["TargetNotLocal"]},{"pkg-name":"mime-types","pkg-version":"0.1.0.9","component-name":"lib","available":[{"id":"mm-typs-0.1.0.9-f771e3c4","component-name":"lib","build-by-default":true}]},{"pkg-name":"monad-control","pkg-version":"1.0.2.3","component-name":"lib","available":[{"id":"mnd-cntrl-1.0.2.3-748e18fe","component-name":"lib","build-by-default":true}]},{"pkg-name":"mono-traversable","pkg-version":"1.0.15.1","component-name":"lib","available":[{"id":"mn-trvrsbl-1.0.15.1-62aa4220","component-name":"lib","build-by-default":true}]},{"pkg-name":"mono-traversable","pkg-version":"1.0.15.1","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"mono-traversable","pkg-version":"1.0.15.1","component-name":"bench:sorting","available":["TargetNotLocal"]},{"pkg-name":"mtl","pkg-version":"2.2.2","component-name":"lib","available":[{"id":"mtl-2.2.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"network","pkg-version":"3.1.2.1","component-name":"lib","available":[{"id":"ntwrk-3.1.2.1-08b0c5d8","component-name":"lib","build-by-default":true}]},{"pkg-name":"network","pkg-version":"3.1.2.1","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"network","pkg-version":"3.1.2.1","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"network-byte-order","pkg-version":"0.1.6","component-name":"lib","available":[{"id":"ntwrk-byt-rdr-0.1.6-5bc10b06","component-name":"lib","build-by-default":true}]},{"pkg-name":"network-byte-order","pkg-version":"0.1.6","component-name":"test:doctest","available":["TargetNotLocal"]},{"pkg-name":"network-uri","pkg-version":"2.6.4.1","component-name":"lib","available":[{"id":"ntwrk-r-2.6.4.1-70848399","component-name":"lib","build-by-default":true}]},{"pkg-name":"network-uri","pkg-version":"2.6.4.1","component-name":"test:uri","available":["TargetNotLocal"]},{"pkg-name":"network-uri","pkg-version":"2.6.4.1","component-name":"bench:uri-bench","available":["TargetNotLocal"]},{"pkg-name":"old-locale","pkg-version":"1.0.0.7","component-name":"lib","available":[{"id":"ld-lcl-1.0.0.7-fbd769ce","component-name":"lib","build-by-default":true}]},{"pkg-name":"old-time","pkg-version":"1.1.0.3","component-name":"lib","available":[{"id":"ld-tm-1.1.0.3-c649dfa8","component-name":"lib","build-by-default":true}]},{"pkg-name":"optparse-applicative","pkg-version":"0.15.1.0","component-name":"lib","available":[{"id":"ptprs-pplctv-0.15.1.0-84e62b2b","component-name":"lib","build-by-default":true}]},{"pkg-name":"optparse-applicative","pkg-version":"0.15.1.0","component-name":"test:tests","available":["TargetNotLocal"]},{"pkg-name":"parallel","pkg-version":"3.2.2.0","component-name":"lib","available":[{"id":"prlll-3.2.2.0-ba7f78ce","component-name":"lib","build-by-default":true}]},{"pkg-name":"parsec","pkg-version":"3.1.14.0","component-name":"lib","available":[{"id":"parsec-3.1.14.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"pem","pkg-version":"0.2.4","component-name":"lib","available":[{"id":"pm-0.2.4-b7fc940c","component-name":"lib","build-by-default":true}]},{"pkg-name":"pem","pkg-version":"0.2.4","component-name":"test:test-pem","available":["TargetNotLocal"]},{"pkg-name":"pretty","pkg-version":"1.1.3.6","component-name":"lib","available":[{"id":"pretty-1.1.3.6","component-name":"lib","build-by-default":true}]},{"pkg-name":"primitive","pkg-version":"0.7.1.0","component-name":"lib","available":[{"id":"prmtv-0.7.1.0-9e5d8d36","component-name":"lib","build-by-default":true}]},{"pkg-name":"primitive","pkg-version":"0.7.1.0","component-name":"test:test-qc","available":["TargetNotLocal"]},{"pkg-name":"process","pkg-version":"1.6.13.2","component-name":"lib","available":[{"id":"process-1.6.13.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"profunctors","pkg-version":"5.6","component-name":"lib","available":[{"id":"prfnctrs-5.6-bf1267af","component-name":"lib","build-by-default":true}]},{"pkg-name":"psqueues","pkg-version":"0.2.7.2","component-name":"lib","available":[{"id":"psqs-0.2.7.2-3928525f","component-name":"lib","build-by-default":true}]},{"pkg-name":"psqueues","pkg-version":"0.2.7.2","component-name":"test:psqueues-tests","available":["TargetNotLocal"]},{"pkg-name":"psqueues","pkg-version":"0.2.7.2","component-name":"bench:psqueues-benchmarks","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.0","component-name":"lib","available":[{"id":"rndm-1.2.0-5f8e0010","component-name":"lib","build-by-default":true}]},{"pkg-name":"random","pkg-version":"1.2.0","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.0","component-name":"test:legacy-test","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.0","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.0","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.0","component-name":"bench:legacy-bench","available":["TargetNotLocal"]},{"pkg-name":"reflection","pkg-version":"2.1.6","component-name":"lib","available":[{"id":"rflctn-2.1.6-e0ea7273","component-name":"lib","build-by-default":true}]},{"pkg-name":"reflection","pkg-version":"2.1.6","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"regex-base","pkg-version":"0.94.0.1","component-name":"lib","available":[{"id":"rgx-bs-0.94.0.1-fcc8da24","component-name":"lib","build-by-default":true}]},{"pkg-name":"regex-posix","pkg-version":"0.96.0.0","component-name":"lib","available":[{"id":"rgx-psx-0.96.0.0-a3587e43","component-name":"lib","build-by-default":true}]},{"pkg-name":"resourcet","pkg-version":"1.2.4.2","component-name":"lib","available":[{"id":"rsrct-1.2.4.2-8c58f12d","component-name":"lib","build-by-default":true}]},{"pkg-name":"resourcet","pkg-version":"1.2.4.2","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"safe","pkg-version":"0.3.19","component-name":"lib","available":[{"id":"sf-0.3.19-acedf167","component-name":"lib","build-by-default":true}]},{"pkg-name":"safe","pkg-version":"0.3.19","component-name":"test:safe-test","available":["TargetNotLocal"]},{"pkg-name":"scientific","pkg-version":"0.3.6.2","component-name":"lib","available":[{"id":"scntfc-0.3.6.2-734dabfd","component-name":"lib","build-by-default":true}]},{"pkg-name":"scientific","pkg-version":"0.3.6.2","component-name":"test:test-scientific","available":["TargetNotLocal"]},{"pkg-name":"scientific","pkg-version":"0.3.6.2","component-name":"bench:bench-scientific","available":["TargetNotLocal"]},{"pkg-name":"semigroupoids","pkg-version":"5.3.4","component-name":"lib","available":[{"id":"smgrpds-5.3.4-9d8fc753","component-name":"lib","build-by-default":true}]},{"pkg-name":"semigroupoids","pkg-version":"5.3.4","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"semigroups","pkg-version":"0.19.1","component-name":"lib","available":[{"id":"smgrps-0.19.1-253fa398","component-name":"lib","build-by-default":true}]},{"pkg-name":"shelly","pkg-version":"1.9.0","component-name":"lib","available":[{"id":"shlly-1.9.0-4138217d","component-name":"lib","build-by-default":true}]},{"pkg-name":"shelly","pkg-version":"1.9.0","component-name":"exe:Color","available":["TargetNotBuildable"]},{"pkg-name":"shelly","pkg-version":"1.9.0","component-name":"exe:drain","available":["TargetNotBuildable"]},{"pkg-name":"shelly","pkg-version":"1.9.0","component-name":"exe:run-handles","available":["TargetNotBuildable"]},{"pkg-name":"shelly","pkg-version":"1.9.0","component-name":"test:shelly-testsuite","available":["TargetNotLocal"]},{"pkg-name":"simple-sendfile","pkg-version":"0.2.30","component-name":"lib","available":[{"id":"smpl-sndfl-0.2.30-fd4e576c","component-name":"lib","build-by-default":true}]},{"pkg-name":"simple-sendfile","pkg-version":"0.2.30","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"split","pkg-version":"0.2.3.4","component-name":"lib","available":[{"id":"splt-0.2.3.4-d58cb8cf","component-name":"lib","build-by-default":true}]},{"pkg-name":"split","pkg-version":"0.2.3.4","component-name":"test:split-tests","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"lib","available":[{"id":"spltmx-0.1.0.3-f9f98fdf","component-name":"lib","build-by-default":true}]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"test:examples","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"test:initialization","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"test:montecarlo-pi","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"test:montecarlo-pi-32","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"test:splitmix-dieharder","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"test:splitmix-tests","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"bench:comparison","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"bench:range","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"bench:simple-sum","available":["TargetNotLocal"]},{"pkg-name":"stm","pkg-version":"2.5.0.1","component-name":"lib","available":[{"id":"stm-2.5.0.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"streaming-commons","pkg-version":"0.2.2.1","component-name":"lib","available":[{"id":"strmng-cmmns-0.2.2.1-f8c2fa62","component-name":"lib","build-by-default":true}]},{"pkg-name":"streaming-commons","pkg-version":"0.2.2.1","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"streaming-commons","pkg-version":"0.2.2.1","component-name":"bench:builder-to-bytestring-io","available":["TargetNotLocal"]},{"pkg-name":"streaming-commons","pkg-version":"0.2.2.1","component-name":"bench:count-chars","available":["TargetNotLocal"]},{"pkg-name":"streaming-commons","pkg-version":"0.2.2.1","component-name":"bench:decode-memory-usage","available":["TargetNotLocal"]},{"pkg-name":"stringsearch","pkg-version":"0.3.6.6","component-name":"lib","available":[{"id":"strngsrch-0.3.6.6-d69f1338","component-name":"lib","build-by-default":true}]},{"pkg-name":"syb","pkg-version":"0.7.2.1","component-name":"lib","available":[{"id":"syb-0.7.2.1-ad42e2f3","component-name":"lib","build-by-default":true}]},{"pkg-name":"syb","pkg-version":"0.7.2.1","component-name":"test:unit-tests","available":["TargetNotLocal"]},{"pkg-name":"tagged","pkg-version":"0.8.6.1","component-name":"lib","available":[{"id":"tggd-0.8.6.1-22e9a365","component-name":"lib","build-by-default":true}]},{"pkg-name":"tar","pkg-version":"0.5.1.1","component-name":"lib","available":[{"id":"tr-0.5.1.1-52757773","component-name":"lib","build-by-default":true}]},{"pkg-name":"tar","pkg-version":"0.5.1.1","component-name":"test:properties","available":["TargetNotLocal"]},{"pkg-name":"tar","pkg-version":"0.5.1.1","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"template-haskell","pkg-version":"2.16.0.0","component-name":"lib","available":[{"id":"template-haskell-2.16.0.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"temporary","pkg-version":"1.3","component-name":"lib","available":[{"id":"tmprry-1.3-b8b887fd","component-name":"lib","build-by-default":true}]},{"pkg-name":"temporary","pkg-version":"1.3","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"terminfo","pkg-version":"0.4.1.4","component-name":"lib","available":[{"id":"terminfo-0.4.1.4","component-name":"lib","build-by-default":true}]},{"pkg-name":"test-framework","pkg-version":"0.8.2.0","component-name":"lib","available":[{"id":"tst-frmwrk-0.8.2.0-541e50fd","component-name":"lib","build-by-default":true}]},{"pkg-name":"test-framework","pkg-version":"0.8.2.0","component-name":"test:test-framework-tests","available":["TargetNotLocal"]},{"pkg-name":"test-framework-hunit","pkg-version":"0.3.0.2","component-name":"lib","available":[{"id":"tst-frmwrk-hnt-0.3.0.2-b7e00943","component-name":"lib","build-by-default":true}]},{"pkg-name":"text","pkg-version":"1.2.4.1","component-name":"lib","available":[{"id":"text-1.2.4.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"th-abstraction","pkg-version":"0.3.2.0","component-name":"lib","available":[{"id":"th-bstrctn-0.3.2.0-ed858cb3","component-name":"lib","build-by-default":true}]},{"pkg-name":"th-abstraction","pkg-version":"0.3.2.0","component-name":"test:unit-tests","available":["TargetNotLocal"]},{"pkg-name":"th-compat","pkg-version":"0.1.2","component-name":"lib","available":[{"id":"th-cmpt-0.1.2-214f3ab8","component-name":"lib","build-by-default":true}]},{"pkg-name":"th-compat","pkg-version":"0.1.2","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"time","pkg-version":"1.9.3","component-name":"lib","available":[{"id":"time-1.9.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"time-compat","pkg-version":"1.9.5","component-name":"lib","available":[{"id":"tm-cmpt-1.9.5-7f0b56a3","component-name":"lib","build-by-default":true}]},{"pkg-name":"time-compat","pkg-version":"1.9.5","component-name":"test:instances","available":["TargetNotLocal"]},{"pkg-name":"time-compat","pkg-version":"1.9.5","component-name":"test:main","available":["TargetNotLocal"]},{"pkg-name":"time-manager","pkg-version":"0.0.0","component-name":"lib","available":[{"id":"tm-mngr-0.0.0-6703061d","component-name":"lib","build-by-default":true}]},{"pkg-name":"transformers","pkg-version":"0.5.6.2","component-name":"lib","available":[{"id":"transformers-0.5.6.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"transformers-base","pkg-version":"0.4.5.2","component-name":"lib","available":[{"id":"trnsfrmrs-bs-0.4.5.2-3f76eadc","component-name":"lib","build-by-default":true}]},{"pkg-name":"transformers-compat","pkg-version":"0.6.6","component-name":"lib","available":[{"id":"trnsfrmrs-cmpt-0.6.6-c2257ba9","component-name":"lib","build-by-default":true}]},{"pkg-name":"type-equality","pkg-version":"1","component-name":"lib","available":[{"id":"typ-qlty-1-8a20443f","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix","pkg-version":"2.7.2.2","component-name":"lib","available":[{"id":"unix-2.7.2.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix-compat","pkg-version":"0.5.3","component-name":"lib","available":[{"id":"nx-cmpt-0.5.3-a704442d","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix-time","pkg-version":"0.4.7","component-name":"lib","available":[{"id":"nx-tm-0.4.7-387b5d59","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix-time","pkg-version":"0.4.7","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"unix-time","pkg-version":"0.4.7","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"unliftio-core","pkg-version":"0.2.0.1","component-name":"lib","available":[{"id":"nlft-cr-0.2.0.1-0ed8000c","component-name":"lib","build-by-default":true}]},{"pkg-name":"unordered-containers","pkg-version":"0.2.13.0","component-name":"lib","available":[{"id":"nrdrd-cntnrs-0.2.13.0-86a72f83","component-name":"lib","build-by-default":true}]},{"pkg-name":"unordered-containers","pkg-version":"0.2.13.0","component-name":"test:hashmap-lazy-properties","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.13.0","component-name":"test:hashmap-strict-properties","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.13.0","component-name":"test:hashset-properties","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.13.0","component-name":"test:list-tests","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.13.0","component-name":"test:regressions","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.13.0","component-name":"test:strictness-properties","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.13.0","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"uuid-types","pkg-version":"1.0.4","component-name":"lib","available":[{"id":"d-typs-1.0.4-6e509a2f","component-name":"lib","build-by-default":true}]},{"pkg-name":"uuid-types","pkg-version":"1.0.4","component-name":"test:testuuid","available":["TargetNotLocal"]},{"pkg-name":"vault","pkg-version":"0.3.1.5","component-name":"lib","available":[{"id":"vlt-0.3.1.5-2ae9d093","component-name":"lib","build-by-default":true}]},{"pkg-name":"vector","pkg-version":"0.12.2.0","component-name":"lib","available":[{"id":"vctr-0.12.2.0-9301e615","component-name":"lib","build-by-default":true}]},{"pkg-name":"vector","pkg-version":"0.12.2.0","component-name":"test:vector-doctest","available":["TargetNotLocal"]},{"pkg-name":"vector","pkg-version":"0.12.2.0","component-name":"test:vector-tests-O0","available":["TargetNotLocal"]},{"pkg-name":"vector","pkg-version":"0.12.2.0","component-name":"test:vector-tests-O2","available":["TargetNotLocal"]},{"pkg-name":"vector-algorithms","pkg-version":"0.8.0.4","component-name":"lib","available":[{"id":"vctr-lgrthms-0.8.0.4-aa341e68","component-name":"lib","build-by-default":true}]},{"pkg-name":"vector-algorithms","pkg-version":"0.8.0.4","component-name":"test:properties","available":["TargetNotLocal"]},{"pkg-name":"vector-algorithms","pkg-version":"0.8.0.4","component-name":"bench:simple-bench","available":["TargetNotLocal"]},{"pkg-name":"void","pkg-version":"0.7.3","component-name":"lib","available":[{"id":"vd-0.7.3-3b10c00c","component-name":"lib","build-by-default":true}]},{"pkg-name":"wai","pkg-version":"3.2.3","component-name":"lib","available":[{"id":"w-3.2.3-c218a955","component-name":"lib","build-by-default":true}]},{"pkg-name":"wai","pkg-version":"3.2.3","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"wai-app-static","pkg-version":"3.1.7.2","component-name":"lib","available":[{"id":"w-pp-sttc-3.1.7.2-f457c4cc","component-name":"lib","build-by-default":true}]},{"pkg-name":"wai-app-static","pkg-version":"3.1.7.2","component-name":"exe:warp","available":[{"id":"w-pp-sttc-3.1.7.2-58832556","component-name":"exe:warp","build-by-default":true}]},{"pkg-name":"wai-app-static","pkg-version":"3.1.7.2","component-name":"test:runtests","available":["TargetNotLocal"]},{"pkg-name":"wai-extra","pkg-version":"3.0.32","component-name":"lib","available":[{"id":"w-xtr-3.0.32-450e0b45","component-name":"lib","build-by-default":true}]},{"pkg-name":"wai-extra","pkg-version":"3.0.32","component-name":"exe:example","available":["TargetNotBuildable"]},{"pkg-name":"wai-extra","pkg-version":"3.0.32","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"wai-logger","pkg-version":"2.3.6","component-name":"lib","available":[{"id":"w-lggr-2.3.6-3fd4ddab","component-name":"lib","build-by-default":true}]},{"pkg-name":"wai-logger","pkg-version":"2.3.6","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"wai-websockets","pkg-version":"3.0.1.2","component-name":"lib","available":[{"id":"w-wbsckts-3.0.1.2-9328eaa1","component-name":"lib","build-by-default":true}]},{"pkg-name":"wai-websockets","pkg-version":"3.0.1.2","component-name":"exe:wai-websockets-example","available":[{"id":"w-wbsckts-3.0.1.2-bcea58a0","component-name":"exe:wai-websockets-example","build-by-default":true}]},{"pkg-name":"warp","pkg-version":"3.3.14","component-name":"lib","available":[{"id":"wrp-3.3.14-d90ecb38","component-name":"lib","build-by-default":true}]},{"pkg-name":"warp","pkg-version":"3.3.14","component-name":"test:doctest","available":["TargetNotLocal"]},{"pkg-name":"warp","pkg-version":"3.3.14","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"warp","pkg-version":"3.3.14","component-name":"bench:parser","available":["TargetNotLocal"]},{"pkg-name":"webdriver","pkg-version":"0.9.0.1","component-name":"lib","available":[{"id":"wbdrvr-0.9.0.1-8c8bf380","component-name":"lib","build-by-default":true}]},{"pkg-name":"websockets","pkg-version":"0.12.7.2","component-name":"lib","available":[{"id":"wbsckts-0.12.7.2-af5140c4","component-name":"lib","build-by-default":true}]},{"pkg-name":"websockets","pkg-version":"0.12.7.2","component-name":"exe:websockets-autobahn","available":["TargetNotBuildable"]},{"pkg-name":"websockets","pkg-version":"0.12.7.2","component-name":"exe:websockets-example","available":["TargetNotBuildable"]},{"pkg-name":"websockets","pkg-version":"0.12.7.2","component-name":"test:websockets-tests","available":["TargetNotLocal"]},{"pkg-name":"websockets","pkg-version":"0.12.7.2","component-name":"bench:bench-mask","available":["TargetNotLocal"]},{"pkg-name":"wl-pprint-text","pkg-version":"1.2.0.1","component-name":"lib","available":[{"id":"wl-pprnt-txt-1.2.0.1-c0ba3a44","component-name":"lib","build-by-default":true}]},{"pkg-name":"word8","pkg-version":"0.1.3","component-name":"lib","available":[{"id":"wrd8-0.1.3-ac79ab23","component-name":"lib","build-by-default":true}]},{"pkg-name":"word8","pkg-version":"0.1.3","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"word8","pkg-version":"0.1.3","component-name":"bench:criterion","available":["TargetNotLocal"]},{"pkg-name":"x509","pkg-version":"1.7.5","component-name":"lib","available":[{"id":"x509-1.7.5-84d96510","component-name":"lib","build-by-default":true}]},{"pkg-name":"x509","pkg-version":"1.7.5","component-name":"test:test-x509","available":["TargetNotLocal"]},{"pkg-name":"xhtml","pkg-version":"3000.2.2.1","component-name":"lib","available":[{"id":"xhtml-3000.2.2.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"xml","pkg-version":"1.3.14","component-name":"lib","available":[{"id":"xml-1.3.14-60ead35d","component-name":"lib","build-by-default":true}]},{"pkg-name":"yaml","pkg-version":"0.11.5.0","component-name":"lib","available":[{"id":"yml-0.11.5.0-e85230ae","component-name":"lib","build-by-default":true}]},{"pkg-name":"yaml","pkg-version":"0.11.5.0","component-name":"exe:examples","available":["TargetNotBuildable"]},{"pkg-name":"yaml","pkg-version":"0.11.5.0","component-name":"exe:json2yaml","available":["TargetNotBuildable"]},{"pkg-name":"yaml","pkg-version":"0.11.5.0","component-name":"exe:yaml2json","available":["TargetNotBuildable"]},{"pkg-name":"yaml","pkg-version":"0.11.5.0","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"zip-archive","pkg-version":"0.4.1","component-name":"lib","available":[{"id":"zp-rchv-0.4.1-f2a3ddf8","component-name":"lib","build-by-default":true}]},{"pkg-name":"zip-archive","pkg-version":"0.4.1","component-name":"exe:zip-archive","available":["TargetNotBuildable"]},{"pkg-name":"zip-archive","pkg-version":"0.4.1","component-name":"test:test-zip-archive","available":["TargetNotLocal"]},{"pkg-name":"zlib","pkg-version":"0.6.2.3","component-name":"lib","available":[{"id":"zlb-0.6.2.3-69a07bb9","component-name":"lib","build-by-default":true}]},{"pkg-name":"zlib","pkg-version":"0.6.2.3","component-name":"test:tests","available":["TargetNotLocal"]}]} \ No newline at end of file +{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-8.10.7","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"Cabal-3.2.1.0","pkg-name":"Cabal","pkg-version":"3.2.1.0","depends":["array-0.5.4.0","base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","mtl-2.2.2","parsec-3.1.14.0","pretty-1.1.3.6","process-1.6.13.2","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"HUnit-1.6.2.0-314ab465650beeeec200f38d63ecc71fad8c18b79234495712d8cbf66cc392ef","pkg-name":"HUnit","pkg-version":"1.6.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"1a79174e8af616117ad39464cac9de205ca923da6582825e97c10786fda933a4","pkg-src-sha256":"b0b7538871ffc058486fc00740886d2f3172f8fa6869936bfe83a5e10bd744ab","depends":["base-4.14.3.0","call-stack-0.3.0-766edef699faf57980b537804dab60a9f3ac1de3a91de98cf4fcfd0435e80ded","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"SHA-1.6.4.4-fb858600c6b2e7dd75168be718cdde3ada98013127ddbf5eab1169065d6bfdfc","pkg-name":"SHA","pkg-version":"1.6.4.4","flags":{"exe":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3b7523df3e2186ae8c5ac78c745efb586814afe9c775b886a747556d9f4d429c","pkg-src-sha256":"6bd950df6b11a3998bb1452d875d2da043ee43385459afc5f16d471d25178b44","depends":["array-0.5.4.0","base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"StateVar-1.2.1-cdb9ff81c4b8442ce9dc6c5b7311e6c2f41a738f99e8b73459a76b1c5a949b7c","pkg-name":"StateVar","pkg-version":"1.2.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b8bea664120dc78f5c15d9b8c0947d51dbc58a0b63ee49971fa7caac9f3e0845","pkg-src-sha256":"ee261552912b60d8b937f0253615e310e6cc25f9c407001b3bcc2e3d55000f8b","depends":["base-4.14.3.0","stm-2.5.0.1","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"adjunctions-4.4-7afb2e346a87af64a67e82ed94119085b73323baed1e84cdb18bd6d25e7cb8da","pkg-name":"adjunctions","pkg-version":"4.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2738dd5f5d5e93749adb14a05472e58a96a75d0f299e46371c6f46dc4e97daf9","pkg-src-sha256":"507c2ef55337ae61c805f8cbc1213dfd7d2b85187342675d662254b8d8a16ae9","depends":["array-0.5.4.0","base-4.14.3.0","comonad-5.0.8-84dad871ca1e06bf26db07aebb9423762f4131e55712cd07cb7957905813d252","containers-0.6.5.1","contravariant-1.5.3-d3a9d369e446e3ff9ca5798448ac1aeb48842e7951f9a1992079a218abf646b6","distributive-0.6.2.1-590207038e714f2c87eff8c936fa808c84df073258a026835d614af402cdf034","free-5.1.3-f330c46773f99df34d4d64a78d98ad438cab6434e3affbd43c9735f52fd71728","mtl-2.2.2","profunctors-5.6-6fde5b754660999c4bdfb6d35878d4000620c3d338cda12a93bb9d35059f3397","semigroupoids-5.3.4-149842f32a584b89e1316295da35aa131274d2e9c2c7302c87f39990b9e3c118","semigroups-0.19.1-9fc2a2aad08381bf3b7b83a5a7a86b5f9c4de3e16843376dbd6cd99e824757e1","tagged-0.8.6.1-90fe6ab77927b221fb709757ad97b1ec8b6385ae75970a39cb1a5fcfc832cffd","transformers-0.5.6.2","transformers-compat-0.6.6-c13045e1ff52ee93041fb029a1d9e9a05c37a0cb700d2c921faf08c34edcaede","void-0.7.3-a42d1eef0f87c637011e4d9f1374cf8032d62a9528998a747d2eddaf6d987c86"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"aeson-1.4.7.1-52a0a9a1400dce323fd3d192ed978d613759f226f95780101e22948c7029ceb3","pkg-name":"aeson","pkg-version":"1.4.7.1","flags":{"bytestring-builder":false,"cffi":false,"developer":false,"fast":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6d8d2fd959b7122a1df9389cf4eca30420a053d67289f92cdc0dbc0dab3530ba","pkg-src-sha256":"07e746655fd9bec81c59927c5617877ff4fcd81d0df45c5fb8ef154fb8f40294","depends":["attoparsec-0.13.2.5-101b2cdaf6874d1152c4a364734790b0bd77a38358f95a8c9a6ec3606cca3d3b","base-4.14.3.0","base-compat-batteries-0.11.2-976ab05059efb80b88e21c895dd960e4bb0f14193691c3fd7fdbc501899ba3e4","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","dlist-0.8.0.8-37f052ad713a5f768e754fa19302aed2e64fdc36b33cd00a589c6d1dd3800dfe","ghc-prim-0.6.1","hashable-1.3.1.0-564753cf17a1add5c46186b831cbea5bf0134d07ce651f274f2b99d57730e2b2","primitive-0.7.1.0-7ccb0748f64fa9b4343f00f3d4c0f11f2cb114d7cdaf164ea91f4084bcecf2b4","scientific-0.3.6.2-42e3b56e032df0ce79f9062afa301c4cf62b7891d5bcc06b2adf3c10aaa3a378","tagged-0.8.6.1-90fe6ab77927b221fb709757ad97b1ec8b6385ae75970a39cb1a5fcfc832cffd","template-haskell-2.16.0.0","text-1.2.4.1","th-abstraction-0.3.2.0-d7dbeb8154b6dd18f43d59e413543ac1bec4c700d695dccb3dc6268af1544009","time-1.9.3","time-compat-1.9.5-71a65c2deb18d6d8d92b409212320e2c85df8b72a793ab4e2eb7c477a23b71f4","unordered-containers-0.2.13.0-35460b21e441aeebe83724b11caf0fabc4c79c49a4c3453dc1ec91e4ce589e47","uuid-types-1.0.4-6086ee179fe2f1ed9da5bd809a02f7629168918177bc5196b524120354539813","vector-0.12.2.0-84be1736eb2fdcccd3f3255cdd99deab0bc6b8c8104c444c17df2676a325d9a1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ansi-terminal-0.11-68045ba4dc159ef4d015a7becef8401cce3f1e07756980a26cd5d04a806924cd","pkg-name":"ansi-terminal","pkg-version":"0.11","flags":{"example":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"97470250c92aae14c4c810d7f664c532995ba8910e2ad797b29f22ad0d2d0194","pkg-src-sha256":"c6611b9e51add41db3f79eac30066c06b33a6ca2a09e586b4b361d7f98303793","depends":["base-4.14.3.0","colour-2.3.5-a5aa9f2be50d4ed011c1be7700b7a83002fe6b60755a26d197e6fc7ce5768c6f"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"ansi-wl-pprint-0.6.9-a2a5a82f0dda324638d65a03fd5311d9adbaaf655f5688baf31de8c8a2e5a686","pkg-name":"ansi-wl-pprint","pkg-version":"0.6.9","flags":{"example":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"20d30674f137d43aa0279c2c2cc5e45a5f1c3c57e301852494906158b6313bf7","pkg-src-sha256":"a7b2e8e7cd3f02f2954e8b17dc60a0ccd889f49e2068ebb15abfa1d42f7a4eac","depends":["ansi-terminal-0.11-68045ba4dc159ef4d015a7becef8401cce3f1e07756980a26cd5d04a806924cd","base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"appar-0.1.8-8fb5a263212cce5a622c5468fcdb68a68f1f79d9768ea726c629381d06b97677","pkg-name":"appar","pkg-version":"0.1.8","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a5d529bacbb74d566e4c5f9479af0637eac5957705f6db4d2670517489795de8","pkg-src-sha256":"c4ceeddc26525b58d82c41b6d3e32141371a200a6794aae185b6266ccc81631f","components":{"lib":{"depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[]}}},{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.14.3.0"]},{"type":"configured","id":"asn1-encoding-0.9.6-49f037fcb9444c19e8f30436cd6b5eb8efad2370bda9b0ba2856e8d501e8e70d","pkg-name":"asn1-encoding","pkg-version":"0.9.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"27ed8f6043aed79630313bb931f7c8e2b510f0b4586cd55c16ae040c7d1ea098","pkg-src-sha256":"d9f8deabd3b908e5cf83c0d813c08dc0143b3ec1c0d97f660d2cfa02c1c8da0a","depends":["asn1-types-0.3.4-7aaf8aa4bb5627deee7969088cf079090846bd49986985822143e0cfc0ef9c3d","base-4.14.3.0","bytestring-0.10.12.0","hourglass-0.2.12-7f1a2f8e035f979a92fc06fb0a3622206548d2e7eae3800f34fe5ed8e9047d93"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"asn1-parse-0.9.5-14fa65dc20e3abccda9883188f30a5f5d0158e6c256abc9999d5e53419e4e2cf","pkg-name":"asn1-parse","pkg-version":"0.9.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"77c0126d63070df2d82cb4cfa4febb26c4e280f6d854bc778c2fa4d80ce692b8","pkg-src-sha256":"8f1fe1344d30b39dc594d74df2c55209577722af1497204b4c2b6d6e8747f39e","components":{"lib":{"depends":["asn1-encoding-0.9.6-49f037fcb9444c19e8f30436cd6b5eb8efad2370bda9b0ba2856e8d501e8e70d","asn1-types-0.3.4-7aaf8aa4bb5627deee7969088cf079090846bd49986985822143e0cfc0ef9c3d","base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[]}}},{"type":"configured","id":"asn1-types-0.3.4-7aaf8aa4bb5627deee7969088cf079090846bd49986985822143e0cfc0ef9c3d","pkg-name":"asn1-types","pkg-version":"0.3.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"8e879b3a5bbdd0031232eb84d904b5a3a2c20a18847692b996d774f4ff811355","pkg-src-sha256":"78ee92a251379298ca820fa53edbf4b33c539b9fcd887c86f520c30e3b4e21a8","components":{"lib":{"depends":["base-4.14.3.0","bytestring-0.10.12.0","hourglass-0.2.12-7f1a2f8e035f979a92fc06fb0a3622206548d2e7eae3800f34fe5ed8e9047d93","memory-0.15.0-e3b790978092deb24c20e670f314f00f6280d43c1441412b7c11be54cd23a855"],"exe-depends":[]}}},{"type":"configured","id":"async-2.2.3-61de372d98a1e267d734e51b5e1b4cff35a2fc324ce981f8581dd50ab715530c","pkg-name":"async","pkg-version":"2.2.3","flags":{"bench":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0cbefb8247308b38e397e675f832b9bd5317ff1872001d5358f213654423c55b","pkg-src-sha256":"467af3a0037947a5232ecf5f4efbd4cf2118aaa2310566d7f40ac82b0e32935c","depends":["base-4.14.3.0","hashable-1.3.1.0-564753cf17a1add5c46186b831cbea5bf0134d07ce651f274f2b99d57730e2b2","stm-2.5.0.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"attoparsec-0.13.2.5-101b2cdaf6874d1152c4a364734790b0bd77a38358f95a8c9a6ec3606cca3d3b","pkg-name":"attoparsec","pkg-version":"0.13.2.5","flags":{"developer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7c88195c3f3243c6abe356c1bc872cf40818a8c7b0e261a8f8e6868fe42819a0","pkg-src-sha256":"21e0f38eaa1957bf471276afa17651c125a38924575f12c2cbd2fa534b45686f","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","ghc-prim-0.6.1","scientific-0.3.6.2-42e3b56e032df0ce79f9062afa301c4cf62b7891d5bcc06b2adf3c10aaa3a378","text-1.2.4.1","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"auto-update-0.1.6-e8e826113afdb347fe8d7388c54fbeeb751a076150519ea04e74fa71c78c46e4","pkg-name":"auto-update","pkg-version":"0.1.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"10adca282e131a2fa01fb7a411b02811685c1cea02e9813df2d7fb468b5ef638","pkg-src-sha256":"f4e023dc8713c387ecf20d851247597fd012cabea3872310b35e911105eb66c4","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"base-4.14.3.0","pkg-name":"base","pkg-version":"4.14.3.0","depends":["ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"configured","id":"base-compat-0.11.2-b863e3e1a5ee375ab25bec4afb10b3d53ce241746b505b3edc9ba3eb7e9b3361","pkg-name":"base-compat","pkg-version":"0.11.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f95374022a56e8c74a289e2b70ec50a1365f58b5f1f50f5c7f0fc14edf88f30e","pkg-src-sha256":"53a6b5145442fba5a4bad6db2bcdede17f164642b48bc39b95015422a39adbdb","depends":["base-4.14.3.0","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"base-compat-batteries-0.11.2-976ab05059efb80b88e21c895dd960e4bb0f14193691c3fd7fdbc501899ba3e4","pkg-name":"base-compat-batteries","pkg-version":"0.11.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"eb3b976007754ddc16e8d4afacdd1e575ae746edb57dcd0a1a728ccd4b372a69","pkg-src-sha256":"31e066a5aa96af94fe6465adb959c38d63a49e01357641aa4322c754a94d3023","depends":["base-4.14.3.0","base-compat-0.11.2-b863e3e1a5ee375ab25bec4afb10b3d53ce241746b505b3edc9ba3eb7e9b3361"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"base-orphans-0.8.4-5c47df155956fb73bbb69058ad0037967c377270cdf9afc72baa7ecfd53b2d7d","pkg-name":"base-orphans","pkg-version":"0.8.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9a70dc95761ab9a9d49a038a4599b7b7945d486d80ed1678f347445bc336f3e0","pkg-src-sha256":"37b2b59356c03400a2d509862677393c5ff706a0aabf826c104f6fe03d93bbb3","depends":["base-4.14.3.0","ghc-prim-0.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"base16-bytestring-0.1.1.7-77925cf395cd9922858f7d16362a46276afd7053ca6079c4e932cddc9574150e","pkg-name":"base16-bytestring","pkg-version":"0.1.1.7","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0021256a9628971c08da95cb8f4d0d72192f3bb8a7b30b55c080562d17c43dd3","pkg-src-sha256":"525689679d5cc80fa532c1d5cfeace0f62bbb54134fad514f1ba00d0e7fe69ba","depends":["base-4.14.3.0","bytestring-0.10.12.0","ghc-prim-0.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"base64-bytestring-1.0.0.3-f9e5becf7dfbc91185d0c57f336812ed0311b41786ecb3bcc51fb08ba37fd76b","pkg-name":"base64-bytestring","pkg-version":"1.0.0.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d5027ea6d63eab27cfa34eb1f5a05b6a5ee521dd176a06da3f7d80e117a88259","pkg-src-sha256":"ef159d60ec14c0a3f3e26bab5c9fd7634d5e1b983c6a64f0b0c3261efe008fc7","depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"basement-0.0.11-274c4ae453d426264bb6282174f264d18ecb1b70dab6099919dfa6bb95920f32","pkg-name":"basement","pkg-version":"0.0.11","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b685783bd7eeed832c47ebbd48599d9c45dccbc2380dd9295e137a30b37ecdc6","pkg-src-sha256":"67582b3475a5547925399f719df21f8bbbd0ca4d4db27795c22a474f8ee6346b","depends":["base-4.14.3.0","ghc-prim-0.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"bifunctors-5.5.7-fa9f071c0ca8eb588a51415afcae581f1e95061bab18698e1b9f8c2d1bbcbc63","pkg-name":"bifunctors","pkg-version":"5.5.7","flags":{"semigroups":true,"tagged":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"19d907460f166ade334e9d85d7c0bcc58b57da5e8f802b28bba6d8d81fd3ee70","pkg-src-sha256":"88b3a2d4504e1139a3aef7027913faa0870631477d0a2ebb6fa67d494cdb3532","depends":["base-4.14.3.0","base-orphans-0.8.4-5c47df155956fb73bbb69058ad0037967c377270cdf9afc72baa7ecfd53b2d7d","comonad-5.0.8-84dad871ca1e06bf26db07aebb9423762f4131e55712cd07cb7957905813d252","containers-0.6.5.1","tagged-0.8.6.1-90fe6ab77927b221fb709757ad97b1ec8b6385ae75970a39cb1a5fcfc832cffd","template-haskell-2.16.0.0","th-abstraction-0.3.2.0-d7dbeb8154b6dd18f43d59e413543ac1bec4c700d695dccb3dc6268af1544009","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"binary-0.8.8.0","pkg-name":"binary","pkg-version":"0.8.8.0","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","ghc-prim-0.6.1"]},{"type":"configured","id":"blaze-builder-0.4.2.1-c694e0e375f646ecf1acece0f97effbaa4b3f19f5ece616657e500d5ffe1867c","pkg-name":"blaze-builder","pkg-version":"0.4.2.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c1830d7b52910b4569162d4fad27da510bd6a4b43c94da1e9ec0712bebc36121","pkg-src-sha256":"6e6889bc9c3ff92062a17f3825dcc1b28510d261334d4d4e177232d904ea0b06","depends":["base-4.14.3.0","bytestring-0.10.12.0","deepseq-1.4.4.0","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"blaze-html-0.9.1.2-022d22b03693695c24e4963a307d0e6faa8216dac14462831e569778bf44c77c","pkg-name":"blaze-html","pkg-version":"0.9.1.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"49db3eb70fa93fb572f3a9233b542b59e7f766a2b95c92d01d95a596c7727473","pkg-src-sha256":"60503f42546c6c1b954014d188ea137e43d74dcffd2bf6157c113fd91a0c394c","depends":["base-4.14.3.0","blaze-builder-0.4.2.1-c694e0e375f646ecf1acece0f97effbaa4b3f19f5ece616657e500d5ffe1867c","blaze-markup-0.8.2.8-bc2dff2d134f02b5cf60656035ece9a666b81e8bb3192243e4bce0571e4e3e98","bytestring-0.10.12.0","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"blaze-markup-0.8.2.8-bc2dff2d134f02b5cf60656035ece9a666b81e8bb3192243e4bce0571e4e3e98","pkg-name":"blaze-markup","pkg-version":"0.8.2.8","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b5916c6f0899d4d0094bed54af7397a8042fa3255e8ef459ab2cdf83a0c938e6","pkg-src-sha256":"43fc3f6872dc8d1be8d0fe091bd4775139b42179987f33d6490a7c5f1e07a349","depends":["base-4.14.3.0","blaze-builder-0.4.2.1-c694e0e375f646ecf1acece0f97effbaa4b3f19f5ece616657e500d5ffe1867c","bytestring-0.10.12.0","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"bsb-http-chunked-0.0.0.4-93c3de301fc0c7f414768bbce87bf5ebfb21b2cc4b90db023ff41feac4be585b","pkg-name":"bsb-http-chunked","pkg-version":"0.0.0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"add530e695ea3058bf4f7156a1ca85653ff3635b87ec6d1be8c4891645190f96","pkg-src-sha256":"148309e23eb8b261c1de374712372d62d8c8dc8ee504c392809c7ec33c0a0e7c","depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"byteable-0.1.1-ba0f6a5de53bd5be451d958f4b3e20e1bc251f579f854e09e5b7db3d17f030fa","pkg-name":"byteable","pkg-version":"0.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"12eeda93251d4b5d510ac95cf578f5c89d4a399b14ca73116deaf4921a516fdf","pkg-src-sha256":"243b34a1b5b64b39e39fe58f75c18f6cad5b668b10cabcd86816cbde27783fe2","depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"byteorder-1.0.4-8941468c0399921cea5e6aac8bdd2d7cfbbfbfcb24a4ebd26a56fb6d0ed63534","pkg-name":"byteorder","pkg-version":"1.0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a952817dcbe20af0346fb55a28c13e95e2ddbf3e99f9b4fffdc063f150f13b20","pkg-src-sha256":"bd20bbb586947f99c38a4c93d9d0266f49f6fc581767b51ba568f6d5d52d2919","components":{"lib":{"depends":["base-4.14.3.0"],"exe-depends":[]}}},{"type":"pre-existing","id":"bytestring-0.10.12.0","pkg-name":"bytestring","pkg-version":"0.10.12.0","depends":["base-4.14.3.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"configured","id":"bytestring-builder-0.10.8.2.0-91b0d6bc8faf4964d8d2787800f0633b603b423516feb8c19def5491e95ed21c","pkg-name":"bytestring-builder","pkg-version":"0.10.8.2.0","flags":{"bytestring_has_builder":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6b2b812cdac53f5a2c82376a416dde04adbb5ca3e1604c0d075368a0498f762b","pkg-src-sha256":"27faef6db27c5be5a3715fd68b93725853e0e668849eaf92ce7c33cef9cb2c3f","depends":["base-4.14.3.0","bytestring-0.10.12.0","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cabal-doctest-1.0.8-cc5c2e87559eb18bdfdc001ed167b2e0d0b78de00dcfa62e272ab89cba37ff46","pkg-name":"cabal-doctest","pkg-version":"1.0.8","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"8bd1d614fb65f0d52609da30bf8e5ec71a4b6adf8ff5610edb3cb4d114576117","pkg-src-sha256":"2026a6a87d410202ce091412ca6bc33c5aca787025326b4a3d13425a23392e0e","depends":["Cabal-3.2.1.0","base-4.14.3.0","directory-1.3.6.0","filepath-1.4.2.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"call-stack-0.3.0-766edef699faf57980b537804dab60a9f3ac1de3a91de98cf4fcfd0435e80ded","pkg-name":"call-stack","pkg-version":"0.3.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dc369179410fd39542efde04778d1c4a18a015b3cf4b1703d9c88e07d58ece20","pkg-src-sha256":"b80e8de2b87f01922b23b328655ad2f843f42495f3e1033ae907aade603c716a","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"case-insensitive-1.2.1.0-04d96ac70421b0f8f3b44d7428a3ecc840602b9c41723a4e68226276ba482222","pkg-name":"case-insensitive","pkg-version":"1.2.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9dfd3171fc7698cf8d931727d3af3a7b389135b583e46b5adac1f9d2026fff61","pkg-src-sha256":"296dc17e0c5f3dfb3d82ced83e4c9c44c338ecde749b278b6eae512f1d04e406","depends":["base-4.14.3.0","bytestring-0.10.12.0","deepseq-1.4.4.0","hashable-1.3.1.0-564753cf17a1add5c46186b831cbea5bf0134d07ce651f274f2b99d57730e2b2","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"clock-0.8.2-2c2c7b4fade89668e1d92d470dbc6dac9cac04e6f6ec45820457ddda3c27587a","pkg-name":"clock","pkg-version":"0.8.2","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"473ffd59765cc67634bdc55b63c699a85addf3a024089073ec2a862881e83e2a","pkg-src-sha256":"0b5db110c703e68b251d5883253a934b012110b45393fc65df1b095eb9a4e461","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"colour-2.3.5-a5aa9f2be50d4ed011c1be7700b7a83002fe6b60755a26d197e6fc7ce5768c6f","pkg-name":"colour","pkg-version":"2.3.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b27db0a3ad40d70bdbd8510a104269f8707592e80757a1abc66a22ba25e5a42f","pkg-src-sha256":"3b8d471979617dce7c193523743c9782df63433d8e87e3ef6d97922e0da104e7","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"comonad-5.0.8-84dad871ca1e06bf26db07aebb9423762f4131e55712cd07cb7957905813d252","pkg-name":"comonad","pkg-version":"5.0.8","flags":{"containers":true,"distributive":true,"indexed-traversable":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a3a140be7a21d6ba16bf9102bf4c79455ff3213679311587bac45ba0723c8d7a","pkg-src-sha256":"ef6cdf2cc292cc43ee6aa96c581b235fdea8ab44a0bffb24dc79ae2b2ef33d13","depends":["base-4.14.3.0","containers-0.6.5.1","distributive-0.6.2.1-590207038e714f2c87eff8c936fa808c84df073258a026835d614af402cdf034","indexed-traversable-0.1.1-859ad062f72f50cb0e073dc82fa2adde481c5f84e83dfb553607a7a6b1160be1","tagged-0.8.6.1-90fe6ab77927b221fb709757ad97b1ec8b6385ae75970a39cb1a5fcfc832cffd","transformers-0.5.6.2","transformers-compat-0.6.6-c13045e1ff52ee93041fb029a1d9e9a05c37a0cb700d2c921faf08c34edcaede"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"conduit-1.3.4.1-370668f1ebcb07704d42c7d9513f477c1993b011c50722b04740e706f73165ef","pkg-name":"conduit","pkg-version":"1.3.4.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"eeabaf3f822e3e15317995766f50ef4a20371bdc3bb4721a7541e37228018dcf","pkg-src-sha256":"85743b8d5f2d5779ccb7459b5a919c5786707af23fe7a065d281ee8e6dc226f1","depends":["base-4.14.3.0","bytestring-0.10.12.0","directory-1.3.6.0","exceptions-0.10.4","filepath-1.4.2.1","mono-traversable-1.0.15.1-14a7b01eb3da98ee8bec53e1a2c3325795947148555bfd08e601059e3f8ef800","mtl-2.2.2","primitive-0.7.1.0-7ccb0748f64fa9b4343f00f3d4c0f11f2cb114d7cdaf164ea91f4084bcecf2b4","resourcet-1.2.4.2-302da70f53a381e3946d9bc3f2c181c3464035a3dd78edb509158b7de3de01cc","text-1.2.4.1","transformers-0.5.6.2","unix-2.7.2.2","unliftio-core-0.2.0.1-d0855bd29dffa1bf2bc5c121ed96f93f42e3ddc4c54f561bd3f7a186584466ac","vector-0.12.2.0-84be1736eb2fdcccd3f3255cdd99deab0bc6b8c8104c444c17df2676a325d9a1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"constraints-0.13-4b01ef386e6a78dd5a5f51064f7a9b86949fdaf2d54fb07641c19705461b230d","pkg-name":"constraints","pkg-version":"0.13","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d341eb4adbf712f928706928d23a173fb3d0976f0dfaf6a274958975d5fc9e75","pkg-src-sha256":"9259af54682f2673931978d96074c147406b1e18bd9111903fcaefe9252a6590","depends":["base-4.14.3.0","binary-0.8.8.0","deepseq-1.4.4.0","ghc-prim-0.6.1","hashable-1.3.1.0-564753cf17a1add5c46186b831cbea5bf0134d07ce651f274f2b99d57730e2b2","mtl-2.2.2","transformers-0.5.6.2","transformers-compat-0.6.6-c13045e1ff52ee93041fb029a1d9e9a05c37a0cb700d2c921faf08c34edcaede","type-equality-1-4cd1419c88ebdbd4cd0a28c94eb2a79dd5234fbd3edbd50a599c817080638d8c"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.14.3.0","deepseq-1.4.4.0"]},{"type":"configured","id":"contravariant-1.5.3-d3a9d369e446e3ff9ca5798448ac1aeb48842e7951f9a1992079a218abf646b6","pkg-name":"contravariant","pkg-version":"1.5.3","flags":{"semigroups":true,"statevar":true,"tagged":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e59a7742e725f94fc6578e3593cd3f6d4e3d46a9510c3a782e5fe5e5f238e3ce","pkg-src-sha256":"44536f0e331fde471271937323dc90409e95d47f57e42657fdaf242a0fd65dc1","depends":["StateVar-1.2.1-cdb9ff81c4b8442ce9dc6c5b7311e6c2f41a738f99e8b73459a76b1c5a949b7c","base-4.14.3.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cookie-0.4.5-1666bb4d62c924da233e083065c6a869a88b0c3a1c692a55dbf161d4c809b252","pkg-name":"cookie","pkg-version":"0.4.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"22bbe2bea34cfc546eaca2468386035fec521b8dbae52f5aa2f994ed68b35e0e","pkg-src-sha256":"707f94d1b31018b91d6a1e9e19ef5413e20d02cab00ad93a5fd7d7b3b46a3583","depends":["base-4.14.3.0","bytestring-0.10.12.0","data-default-class-0.1.2.0-17ceafe0f96b0cdbafad084ab784938676a45ba49a92d1c9875e1376c64a517d","deepseq-1.4.4.0","text-1.2.4.1","time-1.9.3"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cryptohash-0.11.9-aa23ead3b32b01f8b290c64b004126442b9bbdfee20fdf41511410330eaf28ce","pkg-name":"cryptohash","pkg-version":"0.11.9","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59d9494ba0cc9eef087ecba2e12e4d3e2d3b0327dd1542af552e3dca0e7de70d","pkg-src-sha256":"c28f847fc1fcd65b6eea2e74a100300af940919f04bb21d391f6a773968f22fb","depends":["base-4.14.3.0","byteable-0.1.1-ba0f6a5de53bd5be451d958f4b3e20e1bc251f579f854e09e5b7db3d17f030fa","bytestring-0.10.12.0","cryptonite-0.28-c4162375c9a940361371e61f131514da5733be9b0f847ca300a4aacfb7afbc2f","ghc-prim-0.6.1","memory-0.15.0-e3b790978092deb24c20e670f314f00f6280d43c1441412b7c11be54cd23a855"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"cryptonite-0.28-c4162375c9a940361371e61f131514da5733be9b0f847ca300a4aacfb7afbc2f","pkg-name":"cryptonite","pkg-version":"0.28","flags":{"check_alignment":false,"integer-gmp":true,"old_toolchain_inliner":false,"support_aesni":true,"support_deepseq":true,"support_pclmuldq":false,"support_rdrand":true,"support_sse":false,"use_target_attributes":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b6c75e62b4c655d4cb1bcbb80d01430d136aac32bd6962c86c84738935cc8f9d","pkg-src-sha256":"74ad886ae3f7cd6cadecb596707e49df37b0170ceed313e382bd15b13132a5db","depends":["base-4.14.3.0","basement-0.0.11-274c4ae453d426264bb6282174f264d18ecb1b70dab6099919dfa6bb95920f32","bytestring-0.10.12.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0","memory-0.15.0-e3b790978092deb24c20e670f314f00f6280d43c1441412b7c11be54cd23a855"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"data-default-0.7.1.1-14a5dd71fd9b9460c9e01d850dbf5a924905b919addadf74a1e21023ba2090c9","pkg-name":"data-default","pkg-version":"0.7.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2804e8d14f521a1edee88b68b66347448e7f3b685868290fdc55930e4471f5a9","pkg-src-sha256":"b0f95d279cd75cacaa8152a01590dc3460f7134f6840b37052abb3ba3cb2a511","components":{"lib":{"depends":["base-4.14.3.0","data-default-class-0.1.2.0-17ceafe0f96b0cdbafad084ab784938676a45ba49a92d1c9875e1376c64a517d","data-default-instances-containers-0.0.1-54c5dd643760980377e2aebc9a73fae4974414a5ea72744d6f967916c6f32c61","data-default-instances-dlist-0.0.1-c42bb74da18690ecb87c15192fab756c4e4c029e0200de4c6bd5c86e23d6a254","data-default-instances-old-locale-0.0.1-1b5c29e0a5f4e61dd28c301aeed67bc08930d48ce94f25ecdcc1276822946c61"],"exe-depends":[]}}},{"type":"configured","id":"data-default-class-0.1.2.0-17ceafe0f96b0cdbafad084ab784938676a45ba49a92d1c9875e1376c64a517d","pkg-name":"data-default-class","pkg-version":"0.1.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"63e62120b7efd733a5a17cf59ceb43268e9a929c748127172d7d42f4a336e327","pkg-src-sha256":"4f01b423f000c3e069aaf52a348564a6536797f31498bb85c3db4bd2d0973e56","components":{"lib":{"depends":["base-4.14.3.0"],"exe-depends":[]}}},{"type":"configured","id":"data-default-instances-containers-0.0.1-54c5dd643760980377e2aebc9a73fae4974414a5ea72744d6f967916c6f32c61","pkg-name":"data-default-instances-containers","pkg-version":"0.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6e1f4b28028a3bc455aaf4b5a9104b71ea72cff78b1b8041863df7afd1a8deb3","pkg-src-sha256":"a55e07af005c9815d82f3fc95e125db82994377c9f4a769428878701d4ec081a","components":{"lib":{"depends":["base-4.14.3.0","containers-0.6.5.1","data-default-class-0.1.2.0-17ceafe0f96b0cdbafad084ab784938676a45ba49a92d1c9875e1376c64a517d"],"exe-depends":[]}}},{"type":"configured","id":"data-default-instances-dlist-0.0.1-c42bb74da18690ecb87c15192fab756c4e4c029e0200de4c6bd5c86e23d6a254","pkg-name":"data-default-instances-dlist","pkg-version":"0.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4286abacbb256c392907701be16986a6e07f2beaf2778e7bd925465655d9e301","pkg-src-sha256":"7d683711cbf08abd7adcd5ac2be825381308d220397315a5570fe61b719b5959","components":{"lib":{"depends":["base-4.14.3.0","data-default-class-0.1.2.0-17ceafe0f96b0cdbafad084ab784938676a45ba49a92d1c9875e1376c64a517d","dlist-0.8.0.8-37f052ad713a5f768e754fa19302aed2e64fdc36b33cd00a589c6d1dd3800dfe"],"exe-depends":[]}}},{"type":"configured","id":"data-default-instances-old-locale-0.0.1-1b5c29e0a5f4e61dd28c301aeed67bc08930d48ce94f25ecdcc1276822946c61","pkg-name":"data-default-instances-old-locale","pkg-version":"0.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d4a757f68f0f83531fcb34a4525fe6769c54a45182e28ffdfff19c2b0ace42fb","pkg-src-sha256":"60d3b02922958c4908d7bf2b24ddf61511665745f784227d206745784b0c0802","components":{"lib":{"depends":["base-4.14.3.0","data-default-class-0.1.2.0-17ceafe0f96b0cdbafad084ab784938676a45ba49a92d1c9875e1376c64a517d","old-locale-1.0.0.7-0b56be282c9d84e8a62244b3b072a0d01762b387596f58798264e4b9c6aa0b1c"],"exe-depends":[]}}},{"type":"pre-existing","id":"deepseq-1.4.4.0","pkg-name":"deepseq","pkg-version":"1.4.4.0","depends":["array-0.5.4.0","base-4.14.3.0","ghc-prim-0.6.1"]},{"type":"configured","id":"digest-0.0.1.2-49962857791e1f806aa8abe46447eb9b3fd34bfadd4dcff262ce2a0ad85fc46d","pkg-name":"digest","pkg-version":"0.0.1.2","flags":{"bytestring-in-base":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d3c2a49e25bb3b0228ddb063493b80adcfc26625f9ebbe4a89dd4fbb4339d1bc","pkg-src-sha256":"641717eb16392abf8965986a9e8dc21eebf1d97775bbb6923c7b7f8fee17fe11","components":{"lib":{"depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[]}}},{"type":"pre-existing","id":"directory-1.3.6.0","pkg-name":"directory","pkg-version":"1.3.6.0","depends":["base-4.14.3.0","filepath-1.4.2.1","time-1.9.3","unix-2.7.2.2"]},{"type":"configured","id":"directory-tree-0.12.1-7aef9d3ea02418dfb0b81c0f4df3582801c93089fc39ffbf62cd8e06d5673f48","pkg-name":"directory-tree","pkg-version":"0.12.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6f24ee1eca965a199a96f853582e61a338f1a529c87bc02c7f1451e2f2ed03fe","pkg-src-sha256":"e2084495b3a226cf54d949635c86fc14e89daa09d86cce39e3c3cf898ae6e517","depends":["base-4.14.3.0","directory-1.3.6.0","filepath-1.4.2.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"distributive-0.6.2.1-590207038e714f2c87eff8c936fa808c84df073258a026835d614af402cdf034","pkg-name":"distributive","pkg-version":"0.6.2.1","flags":{"semigroups":true,"tagged":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2823eff05c6b093492efe804027e7cf82757221f934964c76106ac3248899b89","pkg-src-sha256":"d7351392e078f58caa46630a4b9c643e1e2e9dddee45848c5c8358e7b1316b91","depends":["base-4.14.3.0","base-orphans-0.8.4-5c47df155956fb73bbb69058ad0037967c377270cdf9afc72baa7ecfd53b2d7d","tagged-0.8.6.1-90fe6ab77927b221fb709757ad97b1ec8b6385ae75970a39cb1a5fcfc832cffd","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"dlist-0.8.0.8-37f052ad713a5f768e754fa19302aed2e64fdc36b33cd00a589c6d1dd3800dfe","pkg-name":"dlist","pkg-version":"0.8.0.8","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"90ca348bffdc62d7070bcf0e97c728f8d01b24fbc7ea08d2909157d0da76534c","pkg-src-sha256":"7129cf18068d3384e305708a10426ab8f573bee1030b023a114f45f1d0ec496d","depends":["base-4.14.3.0","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"easy-file-0.2.2-81dad8f595046adec420f2364e68bef6c6c4dc00dea05594e7a72fe17b4388b9","pkg-name":"easy-file","pkg-version":"0.2.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"72303120495a9fed82276a7987434361edd6dfecafad241d7c6c03b68e4801e5","pkg-src-sha256":"52f52e72ba48d60935932401c233a72bf45c582871238aecc5a18021ce67b47e","components":{"lib":{"depends":["base-4.14.3.0","directory-1.3.6.0","filepath-1.4.2.1","time-1.9.3","unix-2.7.2.2"],"exe-depends":[]}}},{"type":"configured","id":"enclosed-exceptions-1.0.3-116b50bd2397f153ecb8506eb04e6c16ca9f5e330047f2e884a6bb84c8d1e8b4","pkg-name":"enclosed-exceptions","pkg-version":"1.0.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6d4e9b5156721ccfa62d3cdcbf13d8571773031050ec714cb55b841f0c183f6a","pkg-src-sha256":"af6d93f113ac92b89a32af1fed52f445f492afcc0be93980cbadc5698f94f0b9","depends":["base-4.14.3.0","deepseq-1.4.4.0","lifted-base-0.2.3.12-d676308f67e6ea842d5113b274f0d27bb940d5b6f46d966d107583274c238bb5","monad-control-1.0.2.3-15717da05dfc99ece4f412301d4ad426993cb1e971bd790b62b9b7cd65892c0b","transformers-0.5.6.2","transformers-base-0.4.5.2-f59c3b08e18ebf1e05bdd152225473dbafc17b3afcdc67346a6635ed5b4de427"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"entropy-0.4.1.6-23d69be192f334e6ffc35b304aea12f8575026f35e495f0e703663c33c3cf18d","pkg-name":"entropy","pkg-version":"0.4.1.6","flags":{"halvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d72a8745b0d011737190832be477f6d98a7c819865a6392e4c451110eb79361c","pkg-src-sha256":"adc759ff756a6d71a450422ba511177632f43a33bf673901fd2334f53ef8bf62","components":{"lib":{"depends":["base-4.14.3.0","bytestring-0.10.12.0","unix-2.7.2.2"],"exe-depends":[]},"setup":{"depends":["Cabal-3.2.1.0","base-4.14.3.0","directory-1.3.6.0","filepath-1.4.2.1","process-1.6.13.2"],"exe-depends":[]}}},{"type":"pre-existing","id":"exceptions-0.10.4","pkg-name":"exceptions","pkg-version":"0.10.4","depends":["base-4.14.3.0","mtl-2.2.2","stm-2.5.0.1","template-haskell-2.16.0.0","transformers-0.5.6.2"]},{"type":"configured","id":"executable-path-0.0.3.1-8850d4a31accb5fd8d5f871c9214154d6cdd6a1217e4d43acdf765e7f8f5f0ac","pkg-name":"executable-path","pkg-version":"0.0.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"865c184b96e224ba6727632176e457418aea02d8cfd6b65507d5d1a6c0372a85","pkg-src-sha256":"9cc742b6d40a487b3af38dca6852ca3b50a0db94d42fe819576c84beb5adbc6f","components":{"lib":{"depends":["base-4.14.3.0","directory-1.3.6.0","filepath-1.4.2.1","unix-2.7.2.2"],"exe-depends":[]}}},{"type":"configured","id":"extensible-exceptions-0.1.1.4-8cc6a1f8ee4f082c86b889e18baaf343050ddbc7a582cb6ff369da69867f1c1b","pkg-name":"extensible-exceptions","pkg-version":"0.1.1.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"eb5fe684a7ffe8d1ed2ed6cdaec7dfb29efc780811ea7158a64edc2abc516f47","pkg-src-sha256":"6ce5e8801760385a408dab71b53550f87629e661b260bdc2cd41c6a439b6e388","components":{"lib":{"depends":["base-4.14.3.0"],"exe-depends":[]}}},{"type":"configured","id":"fast-logger-3.0.3-dcaa0bb54cf4bc4a51b14dbb2590735910e4d1d57d62aad4cca1896d4ef4bc6a","pkg-name":"fast-logger","pkg-version":"3.0.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"936f28014b9bea19c4cf74e85fa534ba19250ef1511e0ad51c086d968fdcb701","pkg-src-sha256":"5763a0321053ecaba2d1040800bae9988f52b813fb08d5276ea7ce10e3d2f068","depends":["array-0.5.4.0","auto-update-0.1.6-e8e826113afdb347fe8d7388c54fbeeb751a076150519ea04e74fa71c78c46e4","base-4.14.3.0","bytestring-0.10.12.0","directory-1.3.6.0","easy-file-0.2.2-81dad8f595046adec420f2364e68bef6c6c4dc00dea05594e7a72fe17b4388b9","filepath-1.4.2.1","text-1.2.4.1","unix-compat-0.5.3-2bc2837e6f4bbc1b7104bd912ca92ab1f2ad1e42c984992d69f66d4dc3a997dd","unix-time-0.4.7-327f5b87b2611e066655cbb58cf346c1d0142212ed35f6a6dd6f01879cb86dc4"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"file-embed-0.0.13.0-07dd896cc8ff066813a1f3f766a7baaef44afa16095bcd2a3f20db4174a292d6","pkg-name":"file-embed","pkg-version":"0.0.13.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a819e90b91cab919ffef5895ab6e1b2a44eac395a585f489b0c289a4a12d1c54","pkg-src-sha256":"d13068abb0bd22c5d118164734a097dc591977b2c7561d912af9097803c6e1ea","depends":["base-4.14.3.0","bytestring-0.10.12.0","directory-1.3.6.0","filepath-1.4.2.1","template-haskell-2.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.2.1","pkg-name":"filepath","pkg-version":"1.4.2.1","depends":["base-4.14.3.0"]},{"type":"configured","id":"free-5.1.3-f330c46773f99df34d4d64a78d98ad438cab6434e3affbd43c9735f52fd71728","pkg-name":"free","pkg-version":"5.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"604c27b6ba0a560c8a1377ad76e5bbb8528e924d6b0590215d815faddbec0b70","pkg-src-sha256":"2c70d66e3a1ad52ce4b22d5510ffc6d7b3db950bd7f43bc61801cfe7b24c2e2d","depends":["base-4.14.3.0","comonad-5.0.8-84dad871ca1e06bf26db07aebb9423762f4131e55712cd07cb7957905813d252","containers-0.6.5.1","distributive-0.6.2.1-590207038e714f2c87eff8c936fa808c84df073258a026835d614af402cdf034","exceptions-0.10.4","mtl-2.2.2","profunctors-5.6-6fde5b754660999c4bdfb6d35878d4000620c3d338cda12a93bb9d35059f3397","semigroupoids-5.3.4-149842f32a584b89e1316295da35aa131274d2e9c2c7302c87f39990b9e3c118","template-haskell-2.16.0.0","transformers-0.5.6.2","transformers-base-0.4.5.2-f59c3b08e18ebf1e05bdd152225473dbafc17b3afcdc67346a6635ed5b4de427"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-boot-8.10.7","pkg-name":"ghc-boot","pkg-version":"8.10.7","depends":["base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","directory-1.3.6.0","filepath-1.4.2.1","ghc-boot-th-8.10.7"]},{"type":"pre-existing","id":"ghc-boot-th-8.10.7","pkg-name":"ghc-boot-th","pkg-version":"8.10.7","depends":["base-4.14.3.0"]},{"type":"pre-existing","id":"ghc-compact-0.1.0.0","pkg-name":"ghc-compact","pkg-version":"0.1.0.0","depends":["base-4.14.3.0","bytestring-0.10.12.0","ghc-prim-0.6.1"]},{"type":"pre-existing","id":"ghc-heap-8.10.7","pkg-name":"ghc-heap","pkg-version":"8.10.7","depends":["base-4.14.3.0","ghc-prim-0.6.1"]},{"type":"configured","id":"ghc-paths-0.1.0.12-b698ec3f14b7264932d5870dfa659247742f258bbfa6d0baf97b12d62d607135","pkg-name":"ghc-paths","pkg-version":"0.1.0.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"afdfdb6584f39e821b2b7130e12007bf3ad87401d86f5105eead059c150dc81d","pkg-src-sha256":"6ecbe676d073cb07989c61ce4c5709c4e67cbefdd2d55a4095f9388b6fe2c484","components":{"lib":{"depends":["base-4.14.3.0"],"exe-depends":[]},"setup":{"depends":["Cabal-3.2.1.0","base-4.14.3.0","directory-1.3.6.0"],"exe-depends":[]}}},{"type":"pre-existing","id":"ghc-prim-0.6.1","pkg-name":"ghc-prim","pkg-version":"0.6.1","depends":[]},{"type":"pre-existing","id":"ghci-8.10.7","pkg-name":"ghci","pkg-version":"8.10.7","depends":["array-0.5.4.0","base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","filepath-1.4.2.1","ghc-boot-8.10.7","ghc-boot-th-8.10.7","ghc-heap-8.10.7","template-haskell-2.16.0.0","transformers-0.5.6.2","unix-2.7.2.2"]},{"type":"configured","id":"ghcjs-8.10.7-inplace","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/build-info.json","depends":["Cabal-3.2.1.0","aeson-1.4.7.1-52a0a9a1400dce323fd3d192ed978d613759f226f95780101e22948c7029ceb3","array-0.5.4.0","attoparsec-0.13.2.5-101b2cdaf6874d1152c4a364734790b0bd77a38358f95a8c9a6ec3606cca3d3b","base-4.14.3.0","base16-bytestring-0.1.1.7-77925cf395cd9922858f7d16362a46276afd7053ca6079c4e932cddc9574150e","base64-bytestring-1.0.0.3-f9e5becf7dfbc91185d0c57f336812ed0311b41786ecb3bcc51fb08ba37fd76b","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","cryptohash-0.11.9-aa23ead3b32b01f8b290c64b004126442b9bbdfee20fdf41511410330eaf28ce","data-default-0.7.1.1-14a5dd71fd9b9460c9e01d850dbf5a924905b919addadf74a1e21023ba2090c9","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","ghc-boot-8.10.7","ghc-boot-th-8.10.7","ghc-compact-0.1.0.0","ghc-heap-8.10.7","ghc-paths-0.1.0.12-b698ec3f14b7264932d5870dfa659247742f258bbfa6d0baf97b12d62d607135","ghci-8.10.7","hashable-1.3.1.0-564753cf17a1add5c46186b831cbea5bf0134d07ce651f274f2b99d57730e2b2","hpc-0.6.1.0","lens-4.19.2-a365e8ee15eac5187637caf0f9a84168dcf51fefd5a0ada0844b88a6cd4de834","mtl-2.2.2","optparse-applicative-0.15.1.0-ff69718b26c95902c84e69b0d38586ca2b71b8bb5566d63b9fcabab034f14315","parallel-3.2.2.0-ec2949e70412ce6ff7ffd865dd2d3b7cb720043a39b010d37a44ef3b76e4424d","parsec-3.1.14.0","process-1.6.13.2","safe-0.3.19-51e71c14211a5a289b16e0d6b07ca550bda815589f5bf3e7d68eb5d66dbd69d4","split-0.2.3.4-b35824015585af9ca2cfc77c94ab6a24b60b6ac2cac313cec0606c2533291814","stringsearch-0.3.6.6-ed3c625583d8ef2c2cbb8a855cd2444fedee837a8e8140f5a903278226083f8e","syb-0.7.2.1-f17324f538cc1a70b6242a24980d699ca900c553769879889ca40466f83fd57f","template-haskell-2.16.0.0","terminfo-0.4.1.4","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2","unordered-containers-0.2.13.0-35460b21e441aeebe83724b11caf0fabc4c79c49a4c3453dc1ec91e4ce589e47","vector-0.12.2.0-84be1736eb2fdcccd3f3255cdd99deab0bc6b8c8104c444c17df2676a325d9a1","wl-pprint-text-1.2.0.1-f65bf92b2ca9aa1c1aba70c2a50d26c1a0a57919fafc7d735fbaf8708f5bf560","yaml-0.11.5.0-f343c7e162c8d325f1d496c33d87fe89cf5a20b66600d096d0bf1e902e6baa1a"],"exe-depends":["happy-1.20.0-e-happy-3381209c89ac2203d07bd4b222160e1a46477e5747b38342479eae0cc9ed21a8"],"component-name":"lib"},{"type":"configured","id":"ghcjs-8.10.7-inplace-ghcjs","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs/build-info.json","depends":["base-4.14.3.0","ghcjs-8.10.7-inplace"],"exe-depends":[],"component-name":"exe:ghcjs","bin-file":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs/build/ghcjs/ghcjs"},{"type":"configured","id":"ghcjs-8.10.7-inplace-ghcjs-boot","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-boot","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-boot/build-info.json","depends":["Cabal-3.2.1.0","aeson-1.4.7.1-52a0a9a1400dce323fd3d192ed978d613759f226f95780101e22948c7029ceb3","base-4.14.3.0","bytestring-0.10.12.0","directory-1.3.6.0","executable-path-0.0.3.1-8850d4a31accb5fd8d5f871c9214154d6cdd6a1217e4d43acdf765e7f8f5f0ac","filepath-1.4.2.1","ghcjs-8.10.7-inplace","lens-4.19.2-a365e8ee15eac5187637caf0f9a84168dcf51fefd5a0ada0844b88a6cd4de834","mtl-2.2.2","optparse-applicative-0.15.1.0-ff69718b26c95902c84e69b0d38586ca2b71b8bb5566d63b9fcabab034f14315","process-1.6.13.2","tar-0.5.1.1-643c87cd04d43966ba086abf693a99a6c8e6a74b2250a8c6db6f078672b95893","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","unix-compat-0.5.3-2bc2837e6f4bbc1b7104bd912ca92ab1f2ad1e42c984992d69f66d4dc3a997dd","unordered-containers-0.2.13.0-35460b21e441aeebe83724b11caf0fabc4c79c49a4c3453dc1ec91e4ce589e47","vector-0.12.2.0-84be1736eb2fdcccd3f3255cdd99deab0bc6b8c8104c444c17df2676a325d9a1","yaml-0.11.5.0-f343c7e162c8d325f1d496c33d87fe89cf5a20b66600d096d0bf1e902e6baa1a"],"exe-depends":[],"component-name":"exe:ghcjs-boot","bin-file":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-boot/build/ghcjs-boot/ghcjs-boot"},{"type":"configured","id":"ghcjs-8.10.7-inplace-ghcjs-dumparchive","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-dumparchive","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-dumparchive/build-info.json","depends":["base-4.14.3.0","bytestring-0.10.12.0","filepath-1.4.2.1","ghcjs-8.10.7-inplace","text-1.2.4.1"],"exe-depends":[],"component-name":"exe:ghcjs-dumparchive","bin-file":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-dumparchive/build/ghcjs-dumparchive/ghcjs-dumparchive"},{"type":"configured","id":"ghcjs-8.10.7-inplace-ghcjs-pkg","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-pkg","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-pkg/build-info.json","depends":["Cabal-3.2.1.0","base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","directory-1.3.6.0","filepath-1.4.2.1","ghc-boot-8.10.7","ghcjs-8.10.7-inplace","process-1.6.13.2","terminfo-0.4.1.4","unix-2.7.2.2"],"exe-depends":[],"component-name":"exe:ghcjs-pkg","bin-file":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/ghcjs-pkg/build/ghcjs-pkg/ghcjs-pkg"},{"type":"configured","id":"ghcjs-8.10.7-inplace-haddock","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/haddock","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/haddock/build-info.json","depends":["Cabal-3.2.1.0","array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","ghc-boot-8.10.7","ghcjs-8.10.7-inplace","parsec-3.1.14.0","text-1.2.4.1","transformers-0.5.6.2","xhtml-3000.2.2.1"],"exe-depends":[],"component-name":"exe:haddock","bin-file":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/haddock/build/haddock/haddock"},{"type":"configured","id":"ghcjs-8.10.7-inplace-private-ghcjs-hsc2hs","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-hsc2hs","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-hsc2hs/build-info.json","depends":["base-4.14.3.0","containers-0.6.5.1","directory-1.3.6.0","filepath-1.4.2.1","process-1.6.13.2"],"exe-depends":[],"component-name":"exe:private-ghcjs-hsc2hs","bin-file":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-hsc2hs/build/private-ghcjs-hsc2hs/private-ghcjs-hsc2hs"},{"type":"configured","id":"ghcjs-8.10.7-inplace-private-ghcjs-run","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-run","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-run/build-info.json","depends":["base-4.14.3.0","directory-1.3.6.0","filepath-1.4.2.1","process-1.6.13.2"],"exe-depends":[],"component-name":"exe:private-ghcjs-run","bin-file":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-run/build/private-ghcjs-run/private-ghcjs-run"},{"type":"configured","id":"ghcjs-8.10.7-inplace-private-ghcjs-unlit","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-unlit","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-unlit/build-info.json","depends":[],"exe-depends":[],"component-name":"exe:private-ghcjs-unlit","bin-file":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/x/private-ghcjs-unlit/build/private-ghcjs-unlit/private-ghcjs-unlit"},{"type":"configured","id":"ghcjs-8.10.7-inplace-test","pkg-name":"ghcjs","pkg-version":"8.10.7","flags":{"compiler-only":false,"debug":false,"disable-optimizer":false,"ghci":true,"no-wrapper-install":true,"runtime-assertions":false,"stage1":false,"stage2":true,"stage3":false,"terminfo":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/t/test","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/t/test/build-info.json","depends":["HUnit-1.6.2.0-314ab465650beeeec200f38d63ecc71fad8c18b79234495712d8cbf66cc392ef","aeson-1.4.7.1-52a0a9a1400dce323fd3d192ed978d613759f226f95780101e22948c7029ceb3","base-4.14.3.0","bytestring-0.10.12.0","data-default-0.7.1.1-14a5dd71fd9b9460c9e01d850dbf5a924905b919addadf74a1e21023ba2090c9","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","http-types-0.12.3-4e17183468badc2f43f143b7ee05da6af13dee91e604abece963af8f86bc5ddc","lens-4.19.2-a365e8ee15eac5187637caf0f9a84168dcf51fefd5a0ada0844b88a6cd4de834","lifted-base-0.2.3.12-d676308f67e6ea842d5113b274f0d27bb940d5b6f46d966d107583274c238bb5","network-3.1.2.1-6db674957a82e804f5cd1b8604faefe4d02b0888eca4d90642b7b8e588874014","optparse-applicative-0.15.1.0-ff69718b26c95902c84e69b0d38586ca2b71b8bb5566d63b9fcabab034f14315","process-1.6.13.2","random-1.2.0-2582a6283f6e8be75a7a3a45af494827ff1c10897473f915a522fd9a4b441210","shelly-1.9.0-d6d8c7f447b6bd65c18b3be6927750eb9dfd02f79324a8f06ca3bfa0bb425079","test-framework-0.8.2.0-4acaaf8eda1287dd7e779b387dd505fd725d0ee0383eeb97d73df9fa7ee5eb34","test-framework-hunit-0.3.0.2-251703d47b62042b244e7d589c2a4bc1754ecd3c68d7d25fa52563917e5fb486","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","unordered-containers-0.2.13.0-35460b21e441aeebe83724b11caf0fabc4c79c49a4c3453dc1ec91e4ce589e47","wai-3.2.3-f78cd8b8b3b0191ae95f0a17d9e4679af13a09b5426dd7a64a7c2ee96cde9059","wai-app-static-3.1.7.2-063d791ea745dac9aae85ff14de9fe9c456f6e85653b4f9f97a90b8a1e8555df","wai-extra-3.0.32-2aba6dc4516932801d14dbedbc45c653eab5b878ceb83d48aa3355f2e092b6a6","wai-websockets-3.0.1.2-ff20345d458ca8ad8918f900d7cc52c9d7f4edf34f54ea9426ed0152b4129d9a","warp-3.3.14-e75ca651b306735e7a4c986568378b5ab2592061a7a8b739ff4742530de5cc2f","webdriver-0.9.0.1-35a56a29edc76894542404eac80a7216f880803a2f4567121fc370db555d5d3e","websockets-0.12.7.2-9a73545fb032fca4a3ff32d85cc5c4b62eac54762308714d8f3022bba46aa4e0","yaml-0.11.5.0-f343c7e162c8d325f1d496c33d87fe89cf5a20b66600d096d0bf1e902e6baa1a"],"exe-depends":[],"component-name":"test:test","bin-file":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-8.10.7/t/test/build/test/test"},{"type":"configured","id":"ghcjs-th-0.1.0.0-inplace","pkg-name":"ghcjs-th","pkg-version":"0.1.0.0","flags":{"use-host-template-haskell":true},"style":"local","pkg-src":{"type":"local","path":"./lib/ghcjs-th"},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-th-0.1.0.0","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/ghcjs-th-0.1.0.0/build-info.json","depends":["base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","ghc-prim-0.6.1","ghci-8.10.7","template-haskell-2.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"happy-1.20.0-e-happy-3381209c89ac2203d07bd4b222160e1a46477e5747b38342479eae0cc9ed21a8","pkg-name":"happy","pkg-version":"1.20.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f99e612b29d68d784d7e193943a13466f0923de69452a2585081491efed0436b","pkg-src-sha256":"3b1d3a8f93a2723b554d9f07b2cd136be1a7b2fcab1855b12b7aab5cbac8868c","depends":["array-0.5.4.0","base-4.14.3.0","containers-0.6.5.1","mtl-2.2.2"],"exe-depends":[],"component-name":"exe:happy","bin-file":"/store/ghc-8.10.7/happy-1.20.0-e-happy-3381209c89ac2203d07bd4b222160e1a46477e5747b38342479eae0cc9ed21a8/bin/happy"},{"type":"configured","id":"hashable-1.3.1.0-564753cf17a1add5c46186b831cbea5bf0134d07ce651f274f2b99d57730e2b2","pkg-name":"hashable","pkg-version":"1.3.1.0","flags":{"integer-gmp":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d965e098e06cc585b201da6137dcb31c40f35eb7a937b833903969447985c076","pkg-src-sha256":"8061823a4ac521b53912edcba36b956f3159cb885b07ec119af295a6568ca7c4","depends":["base-4.14.3.0","bytestring-0.10.12.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"hostname-1.0-a81e773a8679491b2cf913154430d20a33f93ed6f4554b930c893277d3f6ba43","pkg-name":"hostname","pkg-version":"1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"8203b6ecd14ca1ef12f73a471b0a6a4be3ad4568d8b84f2bc4bc9e0abb8c4153","pkg-src-sha256":"9b43dab1b6da521f35685b20555da00738c8e136eb972458c786242406a9cf5c","components":{"lib":{"depends":["base-4.14.3.0"],"exe-depends":[]}}},{"type":"configured","id":"hourglass-0.2.12-7f1a2f8e035f979a92fc06fb0a3622206548d2e7eae3800f34fe5ed8e9047d93","pkg-name":"hourglass","pkg-version":"0.2.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e083f5e030dfebe432e30a9c0fa07a99a54eac992f622442646be561fd7a44e8","pkg-src-sha256":"44335b5c402e80c60f1db6a74462be4ea29d1a9043aa994334ffee1164f1ca4a","depends":["base-4.14.3.0","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"hpc-0.6.1.0","pkg-name":"hpc","pkg-version":"0.6.1.0","depends":["base-4.14.3.0","containers-0.6.5.1","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","time-1.9.3"]},{"type":"configured","id":"hsc2hs-0.68.7-e-hsc2hs-664c04f5ad5632a07731b57f398bef2f771ab84da35218b03d98405047bf669c","pkg-name":"hsc2hs","pkg-version":"0.68.7","flags":{"in-ghc-tree":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4a0f6860a17e7c245646975e3c2981416afdcb6a7b3553c31005eb3641a7f55b","pkg-src-sha256":"fd7915e41e3ed3bc7750fee0e8add2b4f32dcac8b7c544cfdf5542293223894a","depends":["base-4.14.3.0","containers-0.6.5.1","directory-1.3.6.0","filepath-1.4.2.1","process-1.6.13.2"],"exe-depends":[],"component-name":"exe:hsc2hs","bin-file":"/store/ghc-8.10.7/hsc2hs-0.68.7-e-hsc2hs-664c04f5ad5632a07731b57f398bef2f771ab84da35218b03d98405047bf669c/bin/hsc2hs"},{"type":"configured","id":"http-client-0.7.6-bc867bac8a0aae16e34a39f4373870f6fb81169fb4dc90912002cf8c8417157f","pkg-name":"http-client","pkg-version":"0.7.6","flags":{"network-uri":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c5115765335ede42038f59c1a52414be382c80d41f01e8d24922a37a9d85ab5d","pkg-src-sha256":"33f378976118f9d800fa526452ada06314c3b4f9eab134e1a4d215380baea890","depends":["array-0.5.4.0","base-4.14.3.0","base64-bytestring-1.0.0.3-f9e5becf7dfbc91185d0c57f336812ed0311b41786ecb3bcc51fb08ba37fd76b","blaze-builder-0.4.2.1-c694e0e375f646ecf1acece0f97effbaa4b3f19f5ece616657e500d5ffe1867c","bytestring-0.10.12.0","case-insensitive-1.2.1.0-04d96ac70421b0f8f3b44d7428a3ecc840602b9c41723a4e68226276ba482222","containers-0.6.5.1","cookie-0.4.5-1666bb4d62c924da233e083065c6a869a88b0c3a1c692a55dbf161d4c809b252","deepseq-1.4.4.0","exceptions-0.10.4","filepath-1.4.2.1","ghc-prim-0.6.1","http-types-0.12.3-4e17183468badc2f43f143b7ee05da6af13dee91e604abece963af8f86bc5ddc","mime-types-0.1.0.9-6d101b38a5c1e1264b6a27339e11234fbbd759a5d3562d5310626611c3604e6a","network-3.1.2.1-6db674957a82e804f5cd1b8604faefe4d02b0888eca4d90642b7b8e588874014","network-uri-2.6.4.1-5ef235b928a29ecc3adc1d005831c62dce98cd2facaab3ea93b098cddd1ce995","random-1.2.0-2582a6283f6e8be75a7a3a45af494827ff1c10897473f915a522fd9a4b441210","stm-2.5.0.1","streaming-commons-0.2.2.1-942cb4328612adafa73367d11a898b63952d40a880d771224be522f99e9b4d7d","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"http-date-0.0.11-8a0bfcf14f2c7820a253801ceb7f8fdcbe28785a9c1061585750e7de9d541055","pkg-name":"http-date","pkg-version":"0.0.11","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b278b07f880705e3b0b073206ad26954548b666d616733c9a6b5d50993f547d4","pkg-src-sha256":"32f923ac1ad9bdfeadce7c52a03c9ba6225ba60dc14137cb1cdf32ea84ccf4d3","depends":["array-0.5.4.0","attoparsec-0.13.2.5-101b2cdaf6874d1152c4a364734790b0bd77a38358f95a8c9a6ec3606cca3d3b","base-4.14.3.0","bytestring-0.10.12.0","time-1.9.3"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"http-types-0.12.3-4e17183468badc2f43f143b7ee05da6af13dee91e604abece963af8f86bc5ddc","pkg-name":"http-types","pkg-version":"0.12.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f35229edb1bc7b3ae27f961b2407dadb5bfa69d43a8f5337ab46cdc79ca4afe9","pkg-src-sha256":"4e8a4a66477459fa436a331c75e46857ec8026283df984d54f90576cd3024016","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","case-insensitive-1.2.1.0-04d96ac70421b0f8f3b44d7428a3ecc840602b9c41723a4e68226276ba482222","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"http2-2.0.6-df60e47325f865bff182031be49c2b1bd6484fb39639e3eecab84084e0b440fe","pkg-name":"http2","pkg-version":"2.0.6","flags":{"devel":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d286b50b1f644b3a4b0c80f5d40d21ac2682e30b5035e46c5395773d5b69ec3b","pkg-src-sha256":"2a756b1a855fab64c63f45b9bd91435d23a4e039ef51c9b189e8c77bf356a19e","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","case-insensitive-1.2.1.0-04d96ac70421b0f8f3b44d7428a3ecc840602b9c41723a4e68226276ba482222","containers-0.6.5.1","http-types-0.12.3-4e17183468badc2f43f143b7ee05da6af13dee91e604abece963af8f86bc5ddc","network-3.1.2.1-6db674957a82e804f5cd1b8604faefe4d02b0888eca4d90642b7b8e588874014","network-byte-order-0.1.6-56958e8e281dbc9e6cdcc1129b8ebeecd09fcefe9a6eab7f59bb0bd26dd6d6f8","psqueues-0.2.7.2-db0c1fae7218798631412dfc6a6f21047ef8dfd74a6ff1624df380bb287b085f","stm-2.5.0.1","time-manager-0.0.0-bc7a85c82be20473dfe915bd8d3f3d3c39f4329684c4a119a5da74bba91eb38c"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"indexed-traversable-0.1.1-859ad062f72f50cb0e073dc82fa2adde481c5f84e83dfb553607a7a6b1160be1","pkg-name":"indexed-traversable","pkg-version":"0.1.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e330ec1ab336ee2fb1eff117ebe3480d1663396fecd981f185b7123dc7941ae1","pkg-src-sha256":"7ac36ae3153cbe7a8e99eacffd065367b87544953cc92997f424a150db468139","depends":["array-0.5.4.0","base-4.14.3.0","containers-0.6.5.1","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"integer-gmp-1.0.3.0","pkg-name":"integer-gmp","pkg-version":"1.0.3.0","depends":["ghc-prim-0.6.1"]},{"type":"configured","id":"integer-logarithms-1.0.3.1-32259a5ad23876e1cc8b3c3578f0af2894940ba8ed87dc4e1dc5162ea050a14c","pkg-name":"integer-logarithms","pkg-version":"1.0.3.1","flags":{"check-bounds":false,"integer-gmp":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"888fb6c4fbd79ed2e8f8b94b61bccac25f7fab2b13b32b496e86828bc60b17cf","pkg-src-sha256":"9b0a9f9fab609b15cd015865721fb05f744a1bc77ae92fd133872de528bbea7f","depends":["array-0.5.4.0","base-4.14.3.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"invariant-0.5.3-31ab128e2fba5ccfde647a220f5af6673702e43abfc49fae9c158d95c172a7e9","pkg-name":"invariant","pkg-version":"0.5.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"5b74af0b909c44b17298a9c04bcd0aea030f36a869da9112b103890f3aa2516f","pkg-src-sha256":"d73e5def38da9fdd85def073857aa5f4b1d3b0c2df05c43d58a677cca02d440c","depends":["StateVar-1.2.1-cdb9ff81c4b8442ce9dc6c5b7311e6c2f41a738f99e8b73459a76b1c5a949b7c","array-0.5.4.0","base-4.14.3.0","bifunctors-5.5.7-fa9f071c0ca8eb588a51415afcae581f1e95061bab18698e1b9f8c2d1bbcbc63","comonad-5.0.8-84dad871ca1e06bf26db07aebb9423762f4131e55712cd07cb7957905813d252","containers-0.6.5.1","contravariant-1.5.3-d3a9d369e446e3ff9ca5798448ac1aeb48842e7951f9a1992079a218abf646b6","ghc-prim-0.6.1","profunctors-5.6-6fde5b754660999c4bdfb6d35878d4000620c3d338cda12a93bb9d35059f3397","stm-2.5.0.1","tagged-0.8.6.1-90fe6ab77927b221fb709757ad97b1ec8b6385ae75970a39cb1a5fcfc832cffd","template-haskell-2.16.0.0","th-abstraction-0.3.2.0-d7dbeb8154b6dd18f43d59e413543ac1bec4c700d695dccb3dc6268af1544009","transformers-0.5.6.2","transformers-compat-0.6.6-c13045e1ff52ee93041fb029a1d9e9a05c37a0cb700d2c921faf08c34edcaede","unordered-containers-0.2.13.0-35460b21e441aeebe83724b11caf0fabc4c79c49a4c3453dc1ec91e4ce589e47"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"iproute-1.7.11-655ccfd58d1d0ad48ae49e3cc9b9dcca77e69497b27720261e1fb11b3da244b8","pkg-name":"iproute","pkg-version":"1.7.11","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a7bba909d85301aaa06534911891f91d4eb8aacdae6204b260cceb7309e09a56","pkg-src-sha256":"205dcd27cce76345e4fc60060b5d428b015a09e9023f5f1bba58be1f562a8a8b","depends":["appar-0.1.8-8fb5a263212cce5a622c5468fcdb68a68f1f79d9768ea726c629381d06b97677","base-4.14.3.0","byteorder-1.0.4-8941468c0399921cea5e6aac8bdd2d7cfbbfbfcb24a4ebd26a56fb6d0ed63534","bytestring-0.10.12.0","containers-0.6.5.1","network-3.1.2.1-6db674957a82e804f5cd1b8604faefe4d02b0888eca4d90642b7b8e588874014"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"kan-extensions-5.2.2-99b79e6dc7a50799b9e9d629a22ce906230cf23141e7ca52fb5d48022fe8d862","pkg-name":"kan-extensions","pkg-version":"5.2.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c9ad889deb63a2c6a0af95bc6ccefadd12633b711097e36af32935d54b901179","pkg-src-sha256":"3bf3ce4cacf9c57c03e9a1c36ecb1baf5d8356730853a2592d2112d1248498a0","depends":["adjunctions-4.4-7afb2e346a87af64a67e82ed94119085b73323baed1e84cdb18bd6d25e7cb8da","array-0.5.4.0","base-4.14.3.0","comonad-5.0.8-84dad871ca1e06bf26db07aebb9423762f4131e55712cd07cb7957905813d252","containers-0.6.5.1","contravariant-1.5.3-d3a9d369e446e3ff9ca5798448ac1aeb48842e7951f9a1992079a218abf646b6","distributive-0.6.2.1-590207038e714f2c87eff8c936fa808c84df073258a026835d614af402cdf034","free-5.1.3-f330c46773f99df34d4d64a78d98ad438cab6434e3affbd43c9735f52fd71728","invariant-0.5.3-31ab128e2fba5ccfde647a220f5af6673702e43abfc49fae9c158d95c172a7e9","mtl-2.2.2","profunctors-5.6-6fde5b754660999c4bdfb6d35878d4000620c3d338cda12a93bb9d35059f3397","semigroupoids-5.3.4-149842f32a584b89e1316295da35aa131274d2e9c2c7302c87f39990b9e3c118","tagged-0.8.6.1-90fe6ab77927b221fb709757ad97b1ec8b6385ae75970a39cb1a5fcfc832cffd","transformers-0.5.6.2","transformers-compat-0.6.6-c13045e1ff52ee93041fb029a1d9e9a05c37a0cb700d2c921faf08c34edcaede"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"lens-4.19.2-a365e8ee15eac5187637caf0f9a84168dcf51fefd5a0ada0844b88a6cd4de834","pkg-name":"lens","pkg-version":"4.19.2","flags":{"benchmark-uniplate":false,"dump-splices":false,"inlining":true,"j":false,"old-inline-pragmas":false,"safe":false,"test-doctests":true,"test-hunit":true,"test-properties":true,"test-templates":true,"trustworthy":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f84441c407bf436490cbc19b5c7497a66f5880be7023e7a9f0e205aee98239e5","pkg-src-sha256":"52f858ae3971a5104cdba5e81a27d154fda11fe65a54a4ac328c85904bdec23b","components":{"lib":{"depends":["array-0.5.4.0","base-4.14.3.0","base-orphans-0.8.4-5c47df155956fb73bbb69058ad0037967c377270cdf9afc72baa7ecfd53b2d7d","bifunctors-5.5.7-fa9f071c0ca8eb588a51415afcae581f1e95061bab18698e1b9f8c2d1bbcbc63","bytestring-0.10.12.0","call-stack-0.3.0-766edef699faf57980b537804dab60a9f3ac1de3a91de98cf4fcfd0435e80ded","comonad-5.0.8-84dad871ca1e06bf26db07aebb9423762f4131e55712cd07cb7957905813d252","containers-0.6.5.1","contravariant-1.5.3-d3a9d369e446e3ff9ca5798448ac1aeb48842e7951f9a1992079a218abf646b6","distributive-0.6.2.1-590207038e714f2c87eff8c936fa808c84df073258a026835d614af402cdf034","exceptions-0.10.4","filepath-1.4.2.1","free-5.1.3-f330c46773f99df34d4d64a78d98ad438cab6434e3affbd43c9735f52fd71728","ghc-prim-0.6.1","hashable-1.3.1.0-564753cf17a1add5c46186b831cbea5bf0134d07ce651f274f2b99d57730e2b2","kan-extensions-5.2.2-99b79e6dc7a50799b9e9d629a22ce906230cf23141e7ca52fb5d48022fe8d862","mtl-2.2.2","parallel-3.2.2.0-ec2949e70412ce6ff7ffd865dd2d3b7cb720043a39b010d37a44ef3b76e4424d","profunctors-5.6-6fde5b754660999c4bdfb6d35878d4000620c3d338cda12a93bb9d35059f3397","reflection-2.1.6-e0014472389fc81f3e7fd7fd3c1cfe3f04370072826a8003cbb29e0a7fc8c50a","semigroupoids-5.3.4-149842f32a584b89e1316295da35aa131274d2e9c2c7302c87f39990b9e3c118","tagged-0.8.6.1-90fe6ab77927b221fb709757ad97b1ec8b6385ae75970a39cb1a5fcfc832cffd","template-haskell-2.16.0.0","text-1.2.4.1","th-abstraction-0.3.2.0-d7dbeb8154b6dd18f43d59e413543ac1bec4c700d695dccb3dc6268af1544009","transformers-0.5.6.2","transformers-compat-0.6.6-c13045e1ff52ee93041fb029a1d9e9a05c37a0cb700d2c921faf08c34edcaede","unordered-containers-0.2.13.0-35460b21e441aeebe83724b11caf0fabc4c79c49a4c3453dc1ec91e4ce589e47","vector-0.12.2.0-84be1736eb2fdcccd3f3255cdd99deab0bc6b8c8104c444c17df2676a325d9a1"],"exe-depends":[]},"setup":{"depends":["Cabal-3.2.1.0","base-4.14.3.0","cabal-doctest-1.0.8-cc5c2e87559eb18bdfdc001ed167b2e0d0b78de00dcfa62e272ab89cba37ff46","filepath-1.4.2.1"],"exe-depends":[]}}},{"type":"configured","id":"libyaml-0.1.2-a1b62c66fb76d114c3ef330aaa99817281069d6c18f5704b5d311fc904e102a1","pkg-name":"libyaml","pkg-version":"0.1.2","flags":{"no-unicode":false,"system-libyaml":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7f14f69ceb14659699974e8e47e1ea6f226ea21ff42a802db03e721c319d201d","pkg-src-sha256":"8f42d66f199fcaee255326f8f770d88b0670df56b5eb78002d6058f3a45e97b5","depends":["base-4.14.3.0","bytestring-0.10.12.0","conduit-1.3.4.1-370668f1ebcb07704d42c7d9513f477c1993b011c50722b04740e706f73165ef","resourcet-1.2.4.2-302da70f53a381e3946d9bc3f2c181c3464035a3dd78edb509158b7de3de01cc"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"lifted-async-0.10.1.3-83cf5de09b953f58e5801096270a0fc5d005a60d1c90f81216f25c636b060566","pkg-name":"lifted-async","pkg-version":"0.10.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"cb9f0b2bc84e0081df475cea5370b5f0908485d622214a44891ad347826d4b4a","pkg-src-sha256":"f340fa9b649dd6bd3fc0942eceb94945a5b251e676b8d8e9841d6b24c531b4c2","depends":["async-2.2.3-61de372d98a1e267d734e51b5e1b4cff35a2fc324ce981f8581dd50ab715530c","base-4.14.3.0","constraints-0.13-4b01ef386e6a78dd5a5f51064f7a9b86949fdaf2d54fb07641c19705461b230d","lifted-base-0.2.3.12-d676308f67e6ea842d5113b274f0d27bb940d5b6f46d966d107583274c238bb5","monad-control-1.0.2.3-15717da05dfc99ece4f412301d4ad426993cb1e971bd790b62b9b7cd65892c0b","transformers-base-0.4.5.2-f59c3b08e18ebf1e05bdd152225473dbafc17b3afcdc67346a6635ed5b4de427"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"lifted-base-0.2.3.12-d676308f67e6ea842d5113b274f0d27bb940d5b6f46d966d107583274c238bb5","pkg-name":"lifted-base","pkg-version":"0.2.3.12","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e94ad0692c9c5d85c373e508f23654f2da8ac8c3e475c2b65ffbc04fb165ad69","pkg-src-sha256":"c134a95f56750aae806e38957bb03c59627cda16034af9e00a02b699474317c5","depends":["base-4.14.3.0","monad-control-1.0.2.3-15717da05dfc99ece4f412301d4ad426993cb1e971bd790b62b9b7cd65892c0b","transformers-base-0.4.5.2-f59c3b08e18ebf1e05bdd152225473dbafc17b3afcdc67346a6635ed5b4de427"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"memory-0.15.0-e3b790978092deb24c20e670f314f00f6280d43c1441412b7c11be54cd23a855","pkg-name":"memory","pkg-version":"0.15.0","flags":{"support_basement":true,"support_bytestring":true,"support_deepseq":true,"support_foundation":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"be7024b50e876a9c3b7febaefdd81d5dc67268c58a7b4e6b3825bdc58274d88c","pkg-src-sha256":"e3ff892c1a94708954d0bb2c4f4ab81bc0f505352d95095319c462db1aeb3529","depends":["base-4.14.3.0","basement-0.0.11-274c4ae453d426264bb6282174f264d18ecb1b70dab6099919dfa6bb95920f32","bytestring-0.10.12.0","deepseq-1.4.4.0","ghc-prim-0.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"mime-types-0.1.0.9-6d101b38a5c1e1264b6a27339e11234fbbd759a5d3562d5310626611c3604e6a","pkg-name":"mime-types","pkg-version":"0.1.0.9","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d631fe56daed713ec7798933aaa1429dc9912d85375619aa6e25a0fefe8e95e7","pkg-src-sha256":"0a32435169ef4ba59f4a4b8addfd0c04479410854d1b8d69a1e38fb389ba71d2","depends":["base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"monad-control-1.0.2.3-15717da05dfc99ece4f412301d4ad426993cb1e971bd790b62b9b7cd65892c0b","pkg-name":"monad-control","pkg-version":"1.0.2.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a3ae888d2fed2e2a0ca33ae11e2480219e07312bccf1a02ffe2ba2e3ec5913ee","pkg-src-sha256":"6c1034189d237ae45368c70f0e68f714dd3beda715dd265b6c8a99fcc64022b1","components":{"lib":{"depends":["base-4.14.3.0","stm-2.5.0.1","transformers-0.5.6.2","transformers-base-0.4.5.2-f59c3b08e18ebf1e05bdd152225473dbafc17b3afcdc67346a6635ed5b4de427","transformers-compat-0.6.6-c13045e1ff52ee93041fb029a1d9e9a05c37a0cb700d2c921faf08c34edcaede"],"exe-depends":[]}}},{"type":"configured","id":"mono-traversable-1.0.15.1-14a7b01eb3da98ee8bec53e1a2c3325795947148555bfd08e601059e3f8ef800","pkg-name":"mono-traversable","pkg-version":"1.0.15.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"cad0e8681cd6c96d3303867fc68c80e2f5d55c2c4bf5277c06ca74402fda61c8","pkg-src-sha256":"c2df5b79ed2f88f2ee313e57c1d591d4463788e20d39e439297eec5ba5835ddf","depends":["base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","hashable-1.3.1.0-564753cf17a1add5c46186b831cbea5bf0134d07ce651f274f2b99d57730e2b2","split-0.2.3.4-b35824015585af9ca2cfc77c94ab6a24b60b6ac2cac313cec0606c2533291814","text-1.2.4.1","transformers-0.5.6.2","unordered-containers-0.2.13.0-35460b21e441aeebe83724b11caf0fabc4c79c49a4c3453dc1ec91e4ce589e47","vector-0.12.2.0-84be1736eb2fdcccd3f3255cdd99deab0bc6b8c8104c444c17df2676a325d9a1","vector-algorithms-0.8.0.4-d44a9018bc6e936bbaccd8d7592d9f20d5027e9444ae406c591e0aa8b143babb"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.14.3.0","transformers-0.5.6.2"]},{"type":"configured","id":"network-3.1.2.1-6db674957a82e804f5cd1b8604faefe4d02b0888eca4d90642b7b8e588874014","pkg-name":"network","pkg-version":"3.1.2.1","flags":{"devel":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"188d6daea8cd91bc3553efd5a90a1e7c6d0425fa66a53baa74db5b6d9fd75c8b","pkg-src-sha256":"fcaa954445cb575ff04d088e719452e356324b6acb98c5aefd2541a069439d4a","components":{"lib":{"depends":["base-4.14.3.0","bytestring-0.10.12.0","deepseq-1.4.4.0","directory-1.3.6.0"],"exe-depends":["hsc2hs-0.68.7-e-hsc2hs-664c04f5ad5632a07731b57f398bef2f771ab84da35218b03d98405047bf669c"]}}},{"type":"configured","id":"network-byte-order-0.1.6-56958e8e281dbc9e6cdcc1129b8ebeecd09fcefe9a6eab7f59bb0bd26dd6d6f8","pkg-name":"network-byte-order","pkg-version":"0.1.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"23d8b609ac43a69d04d5e8f411e5f86a0266c0e8b33b65f8c92ebda64273fe3a","pkg-src-sha256":"f2b0ccc9b759d686af30aac874fc394c13c1fc8a3db00fac401c9339c263dc5e","depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"network-uri-2.6.4.1-5ef235b928a29ecc3adc1d005831c62dce98cd2facaab3ea93b098cddd1ce995","pkg-name":"network-uri","pkg-version":"2.6.4.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a4765164ed0a2d1668446eb2e03460ce98645fbf083598c690846af79b7de10d","pkg-src-sha256":"57856db93608a4d419f681b881c9b8d4448800d5a687587dc37e8a9e0b223584","depends":["base-4.14.3.0","deepseq-1.4.4.0","parsec-3.1.14.0","template-haskell-2.16.0.0","th-compat-0.1.2-f673eb08c16520585c802ecd381034ab8705dd899881810ed7fc99b2b45167db"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"old-locale-1.0.0.7-0b56be282c9d84e8a62244b3b072a0d01762b387596f58798264e4b9c6aa0b1c","pkg-name":"old-locale","pkg-version":"1.0.0.7","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fa998be2c7e00cd26a6e9075bea790caaf3932caa3e9497ad69bc20380dd6911","pkg-src-sha256":"dbaf8bf6b888fb98845705079296a23c3f40ee2f449df7312f7f7f1de18d7b50","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"old-time-1.1.0.3-dfe22a7c6d4d35e59baed241e72dc9c2daa94f91b4983c47fb8eae5a99b18922","pkg-name":"old-time","pkg-version":"1.1.0.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c91fbb3ee73d20ccd015842b30f1f29a304893ebe0ae3128b7bbc13d5bb0d4c8","pkg-src-sha256":"1ccb158b0f7851715d36b757c523b026ca1541e2030d02239802ba39b4112bc1","components":{"lib":{"depends":["base-4.14.3.0","old-locale-1.0.0.7-0b56be282c9d84e8a62244b3b072a0d01762b387596f58798264e4b9c6aa0b1c"],"exe-depends":[]}}},{"type":"configured","id":"optparse-applicative-0.15.1.0-ff69718b26c95902c84e69b0d38586ca2b71b8bb5566d63b9fcabab034f14315","pkg-name":"optparse-applicative","pkg-version":"0.15.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"29ff6146aabf54d46c4c8788e8d1eadaea27c94f6d360c690c5f6c93dac4b07e","pkg-src-sha256":"4db3675fd1e0594afdf079db46f4cd412d483835d703e7c07e1a1a37d6f046f3","depends":["ansi-wl-pprint-0.6.9-a2a5a82f0dda324638d65a03fd5311d9adbaaf655f5688baf31de8c8a2e5a686","base-4.14.3.0","process-1.6.13.2","transformers-0.5.6.2","transformers-compat-0.6.6-c13045e1ff52ee93041fb029a1d9e9a05c37a0cb700d2c921faf08c34edcaede"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"parallel-3.2.2.0-ec2949e70412ce6ff7ffd865dd2d3b7cb720043a39b010d37a44ef3b76e4424d","pkg-name":"parallel","pkg-version":"3.2.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"421ce1717610bab82969572b96be89d83ea8d8afe7751cb54d80b996fff063d3","pkg-src-sha256":"170453a71a2a8b31cca63125533f7771d7debeb639700bdabdd779c34d8a6ef6","depends":["array-0.5.4.0","base-4.14.3.0","containers-0.6.5.1","deepseq-1.4.4.0","ghc-prim-0.6.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"parsec-3.1.14.0","pkg-name":"parsec","pkg-version":"3.1.14.0","depends":["base-4.14.3.0","bytestring-0.10.12.0","mtl-2.2.2","text-1.2.4.1"]},{"type":"configured","id":"pem-0.2.4-ce55be6cefac4d646278605f2a4d3a94535dd6ee2149d7186fb2a9b2834098e2","pkg-name":"pem","pkg-version":"0.2.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"cc8e62118b783e284dc0fa032f54fe386a3861a948ec88079370a433c103a705","pkg-src-sha256":"770c4c1b9cd24b3db7f511f8a48404a0d098999e28573c3743a8a296bb96f8d4","depends":["base-4.14.3.0","basement-0.0.11-274c4ae453d426264bb6282174f264d18ecb1b70dab6099919dfa6bb95920f32","bytestring-0.10.12.0","memory-0.15.0-e3b790978092deb24c20e670f314f00f6280d43c1441412b7c11be54cd23a855"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.14.3.0","deepseq-1.4.4.0","ghc-prim-0.6.1"]},{"type":"configured","id":"primitive-0.7.1.0-7ccb0748f64fa9b4343f00f3d4c0f11f2cb114d7cdaf164ea91f4084bcecf2b4","pkg-name":"primitive","pkg-version":"0.7.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f6357d5720c1c665096c3e011467daf443198b786a708d2ff926958a24d508d4","pkg-src-sha256":"6bebecfdf2a57787d9fd5231bfd612b65a92edd7b33a973b2a0f11312b89a3f0","depends":["base-4.14.3.0","deepseq-1.4.4.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.13.2","pkg-name":"process","pkg-version":"1.6.13.2","depends":["base-4.14.3.0","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","unix-2.7.2.2"]},{"type":"configured","id":"profunctors-5.6-6fde5b754660999c4bdfb6d35878d4000620c3d338cda12a93bb9d35059f3397","pkg-name":"profunctors","pkg-version":"5.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"8be6a4efb50a030b59d1213edb119636801b8e96768671e8953b20e6f4f2a7fa","pkg-src-sha256":"cb06a548f67c17d38fef7b2e5d1f66a5e48f353d7806290e795cc97c9a298ce3","depends":["base-4.14.3.0","base-orphans-0.8.4-5c47df155956fb73bbb69058ad0037967c377270cdf9afc72baa7ecfd53b2d7d","bifunctors-5.5.7-fa9f071c0ca8eb588a51415afcae581f1e95061bab18698e1b9f8c2d1bbcbc63","comonad-5.0.8-84dad871ca1e06bf26db07aebb9423762f4131e55712cd07cb7957905813d252","contravariant-1.5.3-d3a9d369e446e3ff9ca5798448ac1aeb48842e7951f9a1992079a218abf646b6","distributive-0.6.2.1-590207038e714f2c87eff8c936fa808c84df073258a026835d614af402cdf034","tagged-0.8.6.1-90fe6ab77927b221fb709757ad97b1ec8b6385ae75970a39cb1a5fcfc832cffd","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"psqueues-0.2.7.2-db0c1fae7218798631412dfc6a6f21047ef8dfd74a6ff1624df380bb287b085f","pkg-name":"psqueues","pkg-version":"0.2.7.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dbefb35cff7f85ecbe846aed9d6362a3ce1c45260885fb9d562d8c8ed8a81534","pkg-src-sha256":"26263b555d943f9b18bbebda6a090848fdba3c1b403a9b7c848f6bac99e893f9","depends":["base-4.14.3.0","deepseq-1.4.4.0","ghc-prim-0.6.1","hashable-1.3.1.0-564753cf17a1add5c46186b831cbea5bf0134d07ce651f274f2b99d57730e2b2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"random-1.2.0-2582a6283f6e8be75a7a3a45af494827ff1c10897473f915a522fd9a4b441210","pkg-name":"random","pkg-version":"1.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"30d72df4cc1d2fe2d445c88f0ee9d21965af7ce86660c43a6c32a6a1d90d51c9","pkg-src-sha256":"e4519cf7c058bfd5bdbe4acc782284acc9e25e74487208619ca83cbcd63fb9de","depends":["base-4.14.3.0","bytestring-0.10.12.0","deepseq-1.4.4.0","mtl-2.2.2","splitmix-0.1.0.3-d6f6b66e6617160e1a17af8ff83c4d20299913bc8d11f722313ea9e9a089a3d3"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"reflection-2.1.6-e0014472389fc81f3e7fd7fd3c1cfe3f04370072826a8003cbb29e0a7fc8c50a","pkg-name":"reflection","pkg-version":"2.1.6","flags":{"slow":false,"template-haskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"044acb7caf41a9d8246878f849baed2dffbc4582d0a1e5c7c079d4287239e970","pkg-src-sha256":"bf3e14917ebb329a53701a3cce0afe670f20037a0148dbfa5cbfa574ed6ba6cd","depends":["base-4.14.3.0","template-haskell-2.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"regex-base-0.94.0.1-3a17040d054766ab8dc57f26c7d65c9c0f8782a8ce82862d2e8d4da9aa36c4bd","pkg-name":"regex-base","pkg-version":"0.94.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6e3546b73cd5489201d481aa645a531f2c61aa317984e31c5f379ac0bcbfbfad","pkg-src-sha256":"71b1d96fff201f31fe8cd4532f056aca03a21cd486890256dc3007dd73adedd9","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","mtl-2.2.2","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"regex-posix-0.96.0.0-6e5c96176f90239b1b35ea81399d2149d2bbf5bc0c0d85e6660a46b539cb7abb","pkg-name":"regex-posix","pkg-version":"0.96.0.0","flags":{"_regex-posix-clib":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"bd870f983a21bb474bd96449736f011c599981ce70da808a21ec1a28292e5481","pkg-src-sha256":"251300f1a6bb2e91abb8bf513a21981f8fab79c98a65acea2bb6d6a524414521","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","regex-base-0.94.0.1-3a17040d054766ab8dc57f26c7d65c9c0f8782a8ce82862d2e8d4da9aa36c4bd"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"resourcet-1.2.4.2-302da70f53a381e3946d9bc3f2c181c3464035a3dd78edb509158b7de3de01cc","pkg-name":"resourcet","pkg-version":"1.2.4.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d57516781d1721f70aa0b9ec8ea9200ab02bf76349cb76d73ad57729302289cc","pkg-src-sha256":"17f20842043ad199961a801b6efb1233b9098eb3537f8395844268f6a223eb87","depends":["base-4.14.3.0","containers-0.6.5.1","exceptions-0.10.4","mtl-2.2.2","primitive-0.7.1.0-7ccb0748f64fa9b4343f00f3d4c0f11f2cb114d7cdaf164ea91f4084bcecf2b4","transformers-0.5.6.2","unliftio-core-0.2.0.1-d0855bd29dffa1bf2bc5c121ed96f93f42e3ddc4c54f561bd3f7a186584466ac"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"safe-0.3.19-51e71c14211a5a289b16e0d6b07ca550bda815589f5bf3e7d68eb5d66dbd69d4","pkg-name":"safe","pkg-version":"0.3.19","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0910dafb8898f52bde4c646e560228a0fd08b1fca5457f222d2f5c0fad6d2039","pkg-src-sha256":"25043442c8f8aa95955bb17467d023630632b961aaa61e807e325d9b2c33f7a2","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"scientific-0.3.6.2-42e3b56e032df0ce79f9062afa301c4cf62b7891d5bcc06b2adf3c10aaa3a378","pkg-name":"scientific","pkg-version":"0.3.6.2","flags":{"bytestring-builder":false,"integer-simple":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"dd49abc76bd8e2b57e7a057dc2bb742a00527b4bf9350f9374be03b5934e55d8","pkg-src-sha256":"278d0afc87450254f8a76eab21b5583af63954efc9b74844a17a21a68013140f","depends":["base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","hashable-1.3.1.0-564753cf17a1add5c46186b831cbea5bf0134d07ce651f274f2b99d57730e2b2","integer-gmp-1.0.3.0","integer-logarithms-1.0.3.1-32259a5ad23876e1cc8b3c3578f0af2894940ba8ed87dc4e1dc5162ea050a14c","primitive-0.7.1.0-7ccb0748f64fa9b4343f00f3d4c0f11f2cb114d7cdaf164ea91f4084bcecf2b4","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"semigroupoids-5.3.4-149842f32a584b89e1316295da35aa131274d2e9c2c7302c87f39990b9e3c118","pkg-name":"semigroupoids","pkg-version":"5.3.4","flags":{"comonad":true,"containers":true,"contravariant":true,"distributive":true,"doctests":true,"tagged":true,"unordered-containers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"120873dfa8084ec92745c766336e90d648c347ab99ce55329d5af36dbd3732ba","pkg-src-sha256":"00d2e48973c3ab0a5d52616728ed63d0509454c8328148f698720014d7c58964","components":{"lib":{"depends":["base-4.14.3.0","base-orphans-0.8.4-5c47df155956fb73bbb69058ad0037967c377270cdf9afc72baa7ecfd53b2d7d","bifunctors-5.5.7-fa9f071c0ca8eb588a51415afcae581f1e95061bab18698e1b9f8c2d1bbcbc63","comonad-5.0.8-84dad871ca1e06bf26db07aebb9423762f4131e55712cd07cb7957905813d252","containers-0.6.5.1","contravariant-1.5.3-d3a9d369e446e3ff9ca5798448ac1aeb48842e7951f9a1992079a218abf646b6","distributive-0.6.2.1-590207038e714f2c87eff8c936fa808c84df073258a026835d614af402cdf034","hashable-1.3.1.0-564753cf17a1add5c46186b831cbea5bf0134d07ce651f274f2b99d57730e2b2","tagged-0.8.6.1-90fe6ab77927b221fb709757ad97b1ec8b6385ae75970a39cb1a5fcfc832cffd","template-haskell-2.16.0.0","transformers-0.5.6.2","transformers-compat-0.6.6-c13045e1ff52ee93041fb029a1d9e9a05c37a0cb700d2c921faf08c34edcaede","unordered-containers-0.2.13.0-35460b21e441aeebe83724b11caf0fabc4c79c49a4c3453dc1ec91e4ce589e47"],"exe-depends":[]},"setup":{"depends":["Cabal-3.2.1.0","base-4.14.3.0","cabal-doctest-1.0.8-cc5c2e87559eb18bdfdc001ed167b2e0d0b78de00dcfa62e272ab89cba37ff46"],"exe-depends":[]}}},{"type":"configured","id":"semigroups-0.19.1-9fc2a2aad08381bf3b7b83a5a7a86b5f9c4de3e16843376dbd6cd99e824757e1","pkg-name":"semigroups","pkg-version":"0.19.1","flags":{"binary":true,"bytestring":true,"bytestring-builder":false,"containers":true,"deepseq":true,"hashable":true,"tagged":true,"template-haskell":true,"text":true,"transformers":true,"unordered-containers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ecae129621e0d2f77bef2f01e4458c2e0567ab6e1f39579c61d7cec8058ebb0e","pkg-src-sha256":"79e761e64b862564a3470d5d356cb6b060b14452d675859aed3b2d1e14646648","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shelly-1.9.0-d6d8c7f447b6bd65c18b3be6927750eb9dfd02f79324a8f06ca3bfa0bb425079","pkg-name":"shelly","pkg-version":"1.9.0","flags":{"build-examples":false,"lifted":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ee030e939e2e5367cf33923c1b9e20bd0793667b02f4baf3d6224984b9b94720","pkg-src-sha256":"5eb5fd4fc105e218cef6cfa10971d299ad660324e6a6006b8cccc31edf39aace","depends":["async-2.2.3-61de372d98a1e267d734e51b5e1b4cff35a2fc324ce981f8581dd50ab715530c","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","directory-1.3.6.0","enclosed-exceptions-1.0.3-116b50bd2397f153ecb8506eb04e6c16ca9f5e330047f2e884a6bb84c8d1e8b4","exceptions-0.10.4","filepath-1.4.2.1","lifted-async-0.10.1.3-83cf5de09b953f58e5801096270a0fc5d005a60d1c90f81216f25c636b060566","lifted-base-0.2.3.12-d676308f67e6ea842d5113b274f0d27bb940d5b6f46d966d107583274c238bb5","monad-control-1.0.2.3-15717da05dfc99ece4f412301d4ad426993cb1e971bd790b62b9b7cd65892c0b","mtl-2.2.2","process-1.6.13.2","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","transformers-base-0.4.5.2-f59c3b08e18ebf1e05bdd152225473dbafc17b3afcdc67346a6635ed5b4de427","unix-2.7.2.2","unix-compat-0.5.3-2bc2837e6f4bbc1b7104bd912ca92ab1f2ad1e42c984992d69f66d4dc3a997dd"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"simple-sendfile-0.2.30-582c15ed93e6db542d7c9ac4cc6c2f444258db9ec8bd7a0210a901e1a1cdcb65","pkg-name":"simple-sendfile","pkg-version":"0.2.30","flags":{"allow-bsd":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c6893e159dc20eea6d0b805bfd8d9b73e6a6ba3fe72cc396acdc24fdcd33cc38","pkg-src-sha256":"b6864d2b3c62ff8ea23fa24e9e26f751bfe5253c8efb1f1e4fee2ba91d065284","depends":["base-4.14.3.0","bytestring-0.10.12.0","network-3.1.2.1-6db674957a82e804f5cd1b8604faefe4d02b0888eca4d90642b7b8e588874014","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"split-0.2.3.4-b35824015585af9ca2cfc77c94ab6a24b60b6ac2cac313cec0606c2533291814","pkg-name":"split","pkg-version":"0.2.3.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"048c75891d63a03828f97667214aaaf0e67b7dcbfec297753e39939ffda6f51a","pkg-src-sha256":"271fe5104c9f40034aa9a1aad6269bcecc9454bc5a57c247e69e17de996c1f2a","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"splitmix-0.1.0.3-d6f6b66e6617160e1a17af8ff83c4d20299913bc8d11f722313ea9e9a089a3d3","pkg-name":"splitmix","pkg-version":"0.1.0.3","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fc3aae74c467f4b608050bef53aec17904a618731df9407e655d8f3bf8c32d5c","pkg-src-sha256":"46009f4b000c9e6613377767b8718bf38476469f2a8e2162d98cc246882d5a35","depends":["base-4.14.3.0","deepseq-1.4.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"stm-2.5.0.1","pkg-name":"stm","pkg-version":"2.5.0.1","depends":["array-0.5.4.0","base-4.14.3.0"]},{"type":"configured","id":"streaming-commons-0.2.2.1-942cb4328612adafa73367d11a898b63952d40a880d771224be522f99e9b4d7d","pkg-name":"streaming-commons","pkg-version":"0.2.2.1","flags":{"use-bytestring-builder":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"28abce35b48dcfb871926dad4cb37bdf737372892b4e5222abc97ca31f2ac738","pkg-src-sha256":"306940bf4878a0b714e6746a7f934d018100efc86332c176a648014bfe1e81dd","depends":["array-0.5.4.0","async-2.2.3-61de372d98a1e267d734e51b5e1b4cff35a2fc324ce981f8581dd50ab715530c","base-4.14.3.0","bytestring-0.10.12.0","directory-1.3.6.0","network-3.1.2.1-6db674957a82e804f5cd1b8604faefe4d02b0888eca4d90642b7b8e588874014","process-1.6.13.2","random-1.2.0-2582a6283f6e8be75a7a3a45af494827ff1c10897473f915a522fd9a4b441210","stm-2.5.0.1","text-1.2.4.1","transformers-0.5.6.2","unix-2.7.2.2","zlib-0.6.2.3-a637f3112bea0ad58c129e9e214d7009d480609a743e2473280eb8404869d423"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"stringsearch-0.3.6.6-ed3c625583d8ef2c2cbb8a855cd2444fedee837a8e8140f5a903278226083f8e","pkg-name":"stringsearch","pkg-version":"0.3.6.6","flags":{"base3":false,"base4":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e88c03f4adb4bb3ab88550c921a9a8a2836a0a70f58b9cc64cff2ac65af9b77c","pkg-src-sha256":"295f1971920bc52263d8275d7054ad223a7e1aefe75533f9887735c9644ffe4a","components":{"lib":{"depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1"],"exe-depends":[]}}},{"type":"configured","id":"syb-0.7.2.1-f17324f538cc1a70b6242a24980d699ca900c553769879889ca40466f83fd57f","pkg-name":"syb","pkg-version":"0.7.2.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"bf42655a213402215299e435c52f799e76cbec0b984cd7153d6b9af8a1c0803f","pkg-src-sha256":"1807c66f77e66786739387f0ae9f16d150d1cfa9d626afcb729f0e9b442a8d96","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tagged-0.8.6.1-90fe6ab77927b221fb709757ad97b1ec8b6385ae75970a39cb1a5fcfc832cffd","pkg-name":"tagged","pkg-version":"0.8.6.1","flags":{"deepseq":true,"transformers":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"98e446479bd3fe5bdc5fa63fec2a2f6998e1bb8cb6db1dee611716f588b3ab28","pkg-src-sha256":"f5e0fcf95f0bb4aa63f428f2c01955a41ea1a42cfcf39145ed631f59a9616c02","depends":["base-4.14.3.0","deepseq-1.4.4.0","template-haskell-2.16.0.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"tar-0.5.1.1-643c87cd04d43966ba086abf693a99a6c8e6a74b2250a8c6db6f078672b95893","pkg-name":"tar","pkg-version":"0.5.1.1","flags":{"old-bytestring":false,"old-time":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"94ded05718fe75b88c98e7113feeb9fca50688a7e59b6aefd80a6f48438c5062","pkg-src-sha256":"b384449f62b2b0aa3e6d2cb1004b8060b01f21ec93e7b63e7af6d8fad8a9f1de","depends":["array-0.5.4.0","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","deepseq-1.4.4.0","directory-1.3.6.0","filepath-1.4.2.1","time-1.9.3"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"template-haskell-2.16.0.0","pkg-name":"template-haskell","pkg-version":"2.16.0.0","depends":["base-4.14.3.0","ghc-boot-th-8.10.7","ghc-prim-0.6.1","pretty-1.1.3.6"]},{"type":"configured","id":"temporary-1.3-ff789bf78c36599a0a16db6158f62be122deb703e96987b84a1d080b3218a979","pkg-name":"temporary","pkg-version":"1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3a66c136f700dbf42f3c5000ca93e80b26dead51e54322c83272b236c1ec8ef1","pkg-src-sha256":"8c442993694b5ffca823ce864af95bd2841fb5264ee511c61cf48cc71d879890","depends":["base-4.14.3.0","directory-1.3.6.0","exceptions-0.10.4","filepath-1.4.2.1","random-1.2.0-2582a6283f6e8be75a7a3a45af494827ff1c10897473f915a522fd9a4b441210","transformers-0.5.6.2","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"terminfo-0.4.1.4","pkg-name":"terminfo","pkg-version":"0.4.1.4","depends":["base-4.14.3.0"]},{"type":"configured","id":"test-framework-0.8.2.0-4acaaf8eda1287dd7e779b387dd505fd725d0ee0383eeb97d73df9fa7ee5eb34","pkg-name":"test-framework","pkg-version":"0.8.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"39f114d1ed0c95d0772ba6873bef9a69c1e08b865f46deb1b6c93ca5224f7871","pkg-src-sha256":"f5aec7a15dbcb39e951bcf6502606fd99d751197b5510f41706899aa7e660ac2","depends":["ansi-terminal-0.11-68045ba4dc159ef4d015a7becef8401cce3f1e07756980a26cd5d04a806924cd","ansi-wl-pprint-0.6.9-a2a5a82f0dda324638d65a03fd5311d9adbaaf655f5688baf31de8c8a2e5a686","base-4.14.3.0","containers-0.6.5.1","hostname-1.0-a81e773a8679491b2cf913154430d20a33f93ed6f4554b930c893277d3f6ba43","old-locale-1.0.0.7-0b56be282c9d84e8a62244b3b072a0d01762b387596f58798264e4b9c6aa0b1c","random-1.2.0-2582a6283f6e8be75a7a3a45af494827ff1c10897473f915a522fd9a4b441210","regex-posix-0.96.0.0-6e5c96176f90239b1b35ea81399d2149d2bbf5bc0c0d85e6660a46b539cb7abb","time-1.9.3","xml-1.3.14-1aebc396e1d8eed7019387ea5aaacd1f989a750252a8ba709d99c0557b7fbbf5"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"test-framework-hunit-0.3.0.2-251703d47b62042b244e7d589c2a4bc1754ecd3c68d7d25fa52563917e5fb486","pkg-name":"test-framework-hunit","pkg-version":"0.3.0.2","flags":{"base3":false,"base4":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7fd007e9cb082cd64a2213a6d36acf057f7d6df6b5343a088e81b2b3a9a23545","pkg-src-sha256":"95cb8ee02a850b164bfdabdf4dbc839d621361f3ac770ad21ea43a8bde360bf8","components":{"lib":{"depends":["HUnit-1.6.2.0-314ab465650beeeec200f38d63ecc71fad8c18b79234495712d8cbf66cc392ef","base-4.14.3.0","extensible-exceptions-0.1.1.4-8cc6a1f8ee4f082c86b889e18baaf343050ddbc7a582cb6ff369da69867f1c1b","test-framework-0.8.2.0-4acaaf8eda1287dd7e779b387dd505fd725d0ee0383eeb97d73df9fa7ee5eb34"],"exe-depends":[]}}},{"type":"pre-existing","id":"text-1.2.4.1","pkg-name":"text","pkg-version":"1.2.4.1","depends":["array-0.5.4.0","base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","deepseq-1.4.4.0","ghc-prim-0.6.1","integer-gmp-1.0.3.0","template-haskell-2.16.0.0"]},{"type":"configured","id":"th-abstraction-0.3.2.0-d7dbeb8154b6dd18f43d59e413543ac1bec4c700d695dccb3dc6268af1544009","pkg-name":"th-abstraction","pkg-version":"0.3.2.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9b5b4e6e2bbff9b075ad7751ee98e2107090bd17b51d5442695b8990e4db6521","pkg-src-sha256":"36fef33ad0f34b9b8fb5552fe6187579a00d5f90d938e9bc24d382a9919feb79","depends":["base-4.14.3.0","containers-0.6.5.1","ghc-prim-0.6.1","template-haskell-2.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"th-compat-0.1.2-f673eb08c16520585c802ecd381034ab8705dd899881810ed7fc99b2b45167db","pkg-name":"th-compat","pkg-version":"0.1.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"3d55de1adc542c1a870c9ada90da2fbbe5f4e8bcd3eed545a55c3df9311b32a8","pkg-src-sha256":"2bc45d0199de3dc65ebc9b71251799f5238869dbc6a66bdf0c06c7e23d603801","depends":["base-4.14.3.0","template-haskell-2.16.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"time-1.9.3","pkg-name":"time","pkg-version":"1.9.3","depends":["base-4.14.3.0","deepseq-1.4.4.0"]},{"type":"configured","id":"time-compat-1.9.5-71a65c2deb18d6d8d92b409212320e2c85df8b72a793ab4e2eb7c477a23b71f4","pkg-name":"time-compat","pkg-version":"1.9.5","flags":{"old-locale":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"a586bd5a59b47ea0c9eafc55c6936ede11126f4a6e619d6d7aeefee73c43d9b8","pkg-src-sha256":"3126b267d19f31d52a3c36f13a8788be03242f829a5bddd8a3084e134d01e3a6","depends":["base-4.14.3.0","base-orphans-0.8.4-5c47df155956fb73bbb69058ad0037967c377270cdf9afc72baa7ecfd53b2d7d","deepseq-1.4.4.0","time-1.9.3"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"time-manager-0.0.0-bc7a85c82be20473dfe915bd8d3f3d3c39f4329684c4a119a5da74bba91eb38c","pkg-name":"time-manager","pkg-version":"0.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"d258b1d08f9b926823f5380e9201303b0ebeefe4f9e0047c0cbd7b6728135ee1","pkg-src-sha256":"90a616ed20b2119bb64f78f84230b6798cde22a35e87bc8d9ee08cdf1d90fcdb","depends":["auto-update-0.1.6-e8e826113afdb347fe8d7388c54fbeeb751a076150519ea04e74fa71c78c46e4","base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.14.3.0","ghc-prim-0.6.1"]},{"type":"configured","id":"transformers-base-0.4.5.2-f59c3b08e18ebf1e05bdd152225473dbafc17b3afcdc67346a6635ed5b4de427","pkg-name":"transformers-base","pkg-version":"0.4.5.2","flags":{"orphaninstances":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e4d8155470905ba2942033a1537fc4cf91927d1c9b34693fd57ddf3bc02334af","pkg-src-sha256":"d0c80c63fdce6a077dd8eda4f1ff289b85578703a3f1272e141d400fe23245e8","depends":["base-4.14.3.0","base-orphans-0.8.4-5c47df155956fb73bbb69058ad0037967c377270cdf9afc72baa7ecfd53b2d7d","stm-2.5.0.1","transformers-0.5.6.2","transformers-compat-0.6.6-c13045e1ff52ee93041fb029a1d9e9a05c37a0cb700d2c921faf08c34edcaede"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"transformers-compat-0.6.6-c13045e1ff52ee93041fb029a1d9e9a05c37a0cb700d2c921faf08c34edcaede","pkg-name":"transformers-compat","pkg-version":"0.6.6","flags":{"five":false,"five-three":true,"four":false,"generic-deriving":true,"mtl":true,"three":false,"two":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"510709db2b12d1510d70de824ee544ca0a9e6f27aa7e299218cbacc0750b4a5e","pkg-src-sha256":"7e2e0251e5e6d28142615a4b950a3fabac9c0b7804b1ec4a4ae985f19519a9f9","depends":["base-4.14.3.0","ghc-prim-0.6.1","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"type-equality-1-4cd1419c88ebdbd4cd0a28c94eb2a79dd5234fbd3edbd50a599c817080638d8c","pkg-name":"type-equality","pkg-version":"1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f2a895a7b22384d9b43a9c6608725b2de7581e77e5b20ab9cfe3f959f6cd71a8","pkg-src-sha256":"4728b502a211454ef682a10d7a3e817c22d06ba509df114bb267ef9d43a08ce8","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"unix-2.7.2.2","pkg-name":"unix","pkg-version":"2.7.2.2","depends":["base-4.14.3.0","bytestring-0.10.12.0","time-1.9.3"]},{"type":"configured","id":"unix-compat-0.5.3-2bc2837e6f4bbc1b7104bd912ca92ab1f2ad1e42c984992d69f66d4dc3a997dd","pkg-name":"unix-compat","pkg-version":"0.5.3","flags":{"old-time":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"60be4a0b2e1cd873e5ad5f0cc9e53575b77640567abb43ef700d5b323ca2ac49","pkg-src-sha256":"0893b597ea0db406429d0d563506af6755728eface0e1981f9392122db88e5c8","depends":["base-4.14.3.0","unix-2.7.2.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"unix-time-0.4.7-327f5b87b2611e066655cbb58cf346c1d0142212ed35f6a6dd6f01879cb86dc4","pkg-name":"unix-time","pkg-version":"0.4.7","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c0d971d04561875b908451c563df8728fe6d8639c90e070b244227f13f76ab8e","pkg-src-sha256":"19233f8badf921d444c6165689253d877cfed58ce08f28cad312558a9280de09","components":{"lib":{"depends":["base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","old-time-1.1.0.3-dfe22a7c6d4d35e59baed241e72dc9c2daa94f91b4983c47fb8eae5a99b18922"],"exe-depends":["hsc2hs-0.68.7-e-hsc2hs-664c04f5ad5632a07731b57f398bef2f771ab84da35218b03d98405047bf669c"]}}},{"type":"configured","id":"unliftio-core-0.2.0.1-d0855bd29dffa1bf2bc5c121ed96f93f42e3ddc4c54f561bd3f7a186584466ac","pkg-name":"unliftio-core","pkg-version":"0.2.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9b3e44ea9aacacbfc35b3b54015af450091916ac3618a41868ebf6546977659a","pkg-src-sha256":"919f0d1297ea2f5373118553c1df2a9405d8b9e31a8307e829da67d4953c299a","depends":["base-4.14.3.0","transformers-0.5.6.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"unordered-containers-0.2.13.0-35460b21e441aeebe83724b11caf0fabc4c79c49a4c3453dc1ec91e4ce589e47","pkg-name":"unordered-containers","pkg-version":"0.2.13.0","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6310c636f92ed4908fdd0de582b6be31c2851c7b5f2ec14e9f416eb94df7a078","pkg-src-sha256":"86b01369ab8eb311383a052d389337e2cd71a63088323f02932754df4aa37b55","depends":["base-4.14.3.0","deepseq-1.4.4.0","hashable-1.3.1.0-564753cf17a1add5c46186b831cbea5bf0134d07ce651f274f2b99d57730e2b2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"uuid-types-1.0.4-6086ee179fe2f1ed9da5bd809a02f7629168918177bc5196b524120354539813","pkg-name":"uuid-types","pkg-version":"1.0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"34de8cf688e30f668cba5e5d79e907eb7f65bca2538ce927fddb42d74840036b","pkg-src-sha256":"c2aa2ccaa3a74259aca1f57cc1c277822086430814ce5e4f38cfd868fe48ec06","depends":["base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","deepseq-1.4.4.0","hashable-1.3.1.0-564753cf17a1add5c46186b831cbea5bf0134d07ce651f274f2b99d57730e2b2","random-1.2.0-2582a6283f6e8be75a7a3a45af494827ff1c10897473f915a522fd9a4b441210","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vault-0.3.1.5-e6aaa3e9286a9fe1f03f6431c42c07e12b49138cf64435197da23c125d649f30","pkg-name":"vault","pkg-version":"0.3.1.5","flags":{"useghc":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"10398b6c75b00a5a9f37423c3f064acad4cfdfacb76e2baac1bd9ba225286d67","pkg-src-sha256":"ac2a6b6adf58598c5c8faa931ae961a8a2aa50ddb2f0f7a2044ff6e8c3d433a0","depends":["base-4.14.3.0","containers-0.6.5.1","hashable-1.3.1.0-564753cf17a1add5c46186b831cbea5bf0134d07ce651f274f2b99d57730e2b2","unordered-containers-0.2.13.0-35460b21e441aeebe83724b11caf0fabc4c79c49a4c3453dc1ec91e4ce589e47"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vector-0.12.2.0-84be1736eb2fdcccd3f3255cdd99deab0bc6b8c8104c444c17df2676a325d9a1","pkg-name":"vector","pkg-version":"0.12.2.0","flags":{"boundschecks":true,"internalchecks":false,"unsafechecks":false,"wall":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"6e81683c2c19b4aea58f1f453547cb03851b3cfd4031b8eb82abfa4643a13494","pkg-src-sha256":"17ab0b84c87859333ff681bb9f768368779677925bd589ff4baa05be3fd26b50","depends":["base-4.14.3.0","deepseq-1.4.4.0","ghc-prim-0.6.1","primitive-0.7.1.0-7ccb0748f64fa9b4343f00f3d4c0f11f2cb114d7cdaf164ea91f4084bcecf2b4"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"vector-algorithms-0.8.0.4-d44a9018bc6e936bbaccd8d7592d9f20d5027e9444ae406c591e0aa8b143babb","pkg-name":"vector-algorithms","pkg-version":"0.8.0.4","flags":{"bench":true,"boundschecks":true,"internalchecks":false,"llvm":false,"properties":true,"unsafechecks":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"bf4760b23a0fee09abb8c9e3c952c870f5dc9780876e9d7e38ab2bdd98c8f283","pkg-src-sha256":"76176a56778bf30a275b1089ee6db24ec6c67d92525145f8dfe215b80137af3b","depends":["base-4.14.3.0","bytestring-0.10.12.0","primitive-0.7.1.0-7ccb0748f64fa9b4343f00f3d4c0f11f2cb114d7cdaf164ea91f4084bcecf2b4","vector-0.12.2.0-84be1736eb2fdcccd3f3255cdd99deab0bc6b8c8104c444c17df2676a325d9a1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"void-0.7.3-a42d1eef0f87c637011e4d9f1374cf8032d62a9528998a747d2eddaf6d987c86","pkg-name":"void","pkg-version":"0.7.3","flags":{"safe":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"13d30f62fcdf065e595d679d4ac8b4b0c1bb1a1b73db7b5b5a8f857cb5c8a546","pkg-src-sha256":"53af758ddc37dc63981671e503438d02c6f64a2d8744e9bec557a894431f7317","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"wai-3.2.3-f78cd8b8b3b0191ae95f0a17d9e4679af13a09b5426dd7a64a7c2ee96cde9059","pkg-name":"wai","pkg-version":"3.2.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c7518618bdb842116dbc1a4e4553223799eef43add19278c2bbffb4536595fe0","pkg-src-sha256":"5574d6541000988fe204d3032db87fd0a5404cdbde33ee4fa02e6006768229f8","depends":["base-4.14.3.0","bytestring-0.10.12.0","http-types-0.12.3-4e17183468badc2f43f143b7ee05da6af13dee91e604abece963af8f86bc5ddc","network-3.1.2.1-6db674957a82e804f5cd1b8604faefe4d02b0888eca4d90642b7b8e588874014","text-1.2.4.1","vault-0.3.1.5-e6aaa3e9286a9fe1f03f6431c42c07e12b49138cf64435197da23c125d649f30"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"wai-app-static-3.1.7.2-063d791ea745dac9aae85ff14de9fe9c456f6e85653b4f9f97a90b8a1e8555df","pkg-name":"wai-app-static","pkg-version":"3.1.7.2","flags":{"print":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ad6b8b07777e6d63f5bf84da2522ac469ff66219a59cdb72baeb69af95e4ffe0","pkg-src-sha256":"c8e7db8ddb31d2297df4cae0add63e514f2a8ef92a68541707585f8148690f8d","depends":["base-4.14.3.0","blaze-html-0.9.1.2-022d22b03693695c24e4963a307d0e6faa8216dac14462831e569778bf44c77c","blaze-markup-0.8.2.8-bc2dff2d134f02b5cf60656035ece9a666b81e8bb3192243e4bce0571e4e3e98","bytestring-0.10.12.0","containers-0.6.5.1","cryptonite-0.28-c4162375c9a940361371e61f131514da5733be9b0f847ca300a4aacfb7afbc2f","directory-1.3.6.0","file-embed-0.0.13.0-07dd896cc8ff066813a1f3f766a7baaef44afa16095bcd2a3f20db4174a292d6","filepath-1.4.2.1","http-date-0.0.11-8a0bfcf14f2c7820a253801ceb7f8fdcbe28785a9c1061585750e7de9d541055","http-types-0.12.3-4e17183468badc2f43f143b7ee05da6af13dee91e604abece963af8f86bc5ddc","memory-0.15.0-e3b790978092deb24c20e670f314f00f6280d43c1441412b7c11be54cd23a855","mime-types-0.1.0.9-6d101b38a5c1e1264b6a27339e11234fbbd759a5d3562d5310626611c3604e6a","old-locale-1.0.0.7-0b56be282c9d84e8a62244b3b072a0d01762b387596f58798264e4b9c6aa0b1c","optparse-applicative-0.15.1.0-ff69718b26c95902c84e69b0d38586ca2b71b8bb5566d63b9fcabab034f14315","template-haskell-2.16.0.0","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","unix-compat-0.5.3-2bc2837e6f4bbc1b7104bd912ca92ab1f2ad1e42c984992d69f66d4dc3a997dd","unordered-containers-0.2.13.0-35460b21e441aeebe83724b11caf0fabc4c79c49a4c3453dc1ec91e4ce589e47","wai-3.2.3-f78cd8b8b3b0191ae95f0a17d9e4679af13a09b5426dd7a64a7c2ee96cde9059","wai-extra-3.0.32-2aba6dc4516932801d14dbedbc45c653eab5b878ceb83d48aa3355f2e092b6a6","warp-3.3.14-e75ca651b306735e7a4c986568378b5ab2592061a7a8b739ff4742530de5cc2f","zlib-0.6.2.3-a637f3112bea0ad58c129e9e214d7009d480609a743e2473280eb8404869d423"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"wai-app-static-3.1.7.2-e-warp-9901da3d600430101d53709ca6d58b231800bd28ed46206a1afc0ca453f2378d","pkg-name":"wai-app-static","pkg-version":"3.1.7.2","flags":{"print":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ad6b8b07777e6d63f5bf84da2522ac469ff66219a59cdb72baeb69af95e4ffe0","pkg-src-sha256":"c8e7db8ddb31d2297df4cae0add63e514f2a8ef92a68541707585f8148690f8d","depends":["base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","directory-1.3.6.0","mime-types-0.1.0.9-6d101b38a5c1e1264b6a27339e11234fbbd759a5d3562d5310626611c3604e6a","text-1.2.4.1","wai-app-static-3.1.7.2-063d791ea745dac9aae85ff14de9fe9c456f6e85653b4f9f97a90b8a1e8555df"],"exe-depends":[],"component-name":"exe:warp","bin-file":"/store/ghc-8.10.7/wai-app-static-3.1.7.2-e-warp-9901da3d600430101d53709ca6d58b231800bd28ed46206a1afc0ca453f2378d/bin/warp"},{"type":"configured","id":"wai-extra-3.0.32-2aba6dc4516932801d14dbedbc45c653eab5b878ceb83d48aa3355f2e092b6a6","pkg-name":"wai-extra","pkg-version":"3.0.32","flags":{"build-example":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7a9e65c4555e1b937dc788b8ba249dbacd4f36840c60581bc27115a5c4a48079","pkg-src-sha256":"0052878f765dda7a8cbd2c5b72295a80d0251a03b267dbb67633d3aafcaee698","depends":["aeson-1.4.7.1-52a0a9a1400dce323fd3d192ed978d613759f226f95780101e22948c7029ceb3","ansi-terminal-0.11-68045ba4dc159ef4d015a7becef8401cce3f1e07756980a26cd5d04a806924cd","base-4.14.3.0","base64-bytestring-1.0.0.3-f9e5becf7dfbc91185d0c57f336812ed0311b41786ecb3bcc51fb08ba37fd76b","bytestring-0.10.12.0","case-insensitive-1.2.1.0-04d96ac70421b0f8f3b44d7428a3ecc840602b9c41723a4e68226276ba482222","containers-0.6.5.1","cookie-0.4.5-1666bb4d62c924da233e083065c6a869a88b0c3a1c692a55dbf161d4c809b252","data-default-class-0.1.2.0-17ceafe0f96b0cdbafad084ab784938676a45ba49a92d1c9875e1376c64a517d","deepseq-1.4.4.0","directory-1.3.6.0","fast-logger-3.0.3-dcaa0bb54cf4bc4a51b14dbb2590735910e4d1d57d62aad4cca1896d4ef4bc6a","http-types-0.12.3-4e17183468badc2f43f143b7ee05da6af13dee91e604abece963af8f86bc5ddc","http2-2.0.6-df60e47325f865bff182031be49c2b1bd6484fb39639e3eecab84084e0b440fe","iproute-1.7.11-655ccfd58d1d0ad48ae49e3cc9b9dcca77e69497b27720261e1fb11b3da244b8","network-3.1.2.1-6db674957a82e804f5cd1b8604faefe4d02b0888eca4d90642b7b8e588874014","old-locale-1.0.0.7-0b56be282c9d84e8a62244b3b072a0d01762b387596f58798264e4b9c6aa0b1c","resourcet-1.2.4.2-302da70f53a381e3946d9bc3f2c181c3464035a3dd78edb509158b7de3de01cc","streaming-commons-0.2.2.1-942cb4328612adafa73367d11a898b63952d40a880d771224be522f99e9b4d7d","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","unix-2.7.2.2","unix-compat-0.5.3-2bc2837e6f4bbc1b7104bd912ca92ab1f2ad1e42c984992d69f66d4dc3a997dd","vault-0.3.1.5-e6aaa3e9286a9fe1f03f6431c42c07e12b49138cf64435197da23c125d649f30","void-0.7.3-a42d1eef0f87c637011e4d9f1374cf8032d62a9528998a747d2eddaf6d987c86","wai-3.2.3-f78cd8b8b3b0191ae95f0a17d9e4679af13a09b5426dd7a64a7c2ee96cde9059","wai-logger-2.3.6-f95a799adae8b044547c71c6c74079de223418e3a072b5d2b6481746fbb66c46","word8-0.1.3-a52b0b2e8eaf12d4065c5bb0feed18420e66828a5f860b7767d8b6a9bf6c7dca","zlib-0.6.2.3-a637f3112bea0ad58c129e9e214d7009d480609a743e2473280eb8404869d423"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"wai-logger-2.3.6-f95a799adae8b044547c71c6c74079de223418e3a072b5d2b6481746fbb66c46","pkg-name":"wai-logger","pkg-version":"2.3.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2cf80c00b7247277f84e14869f43bf05e9cccb59ca26fb2b5bb20f74edae56e2","pkg-src-sha256":"e2fbd8c74fa0a31f9ea0faa53f4ad4e588644a34d8dfc7cc50d85c245c3c7541","components":{"lib":{"depends":["base-4.14.3.0","byteorder-1.0.4-8941468c0399921cea5e6aac8bdd2d7cfbbfbfcb24a4ebd26a56fb6d0ed63534","bytestring-0.10.12.0","fast-logger-3.0.3-dcaa0bb54cf4bc4a51b14dbb2590735910e4d1d57d62aad4cca1896d4ef4bc6a","http-types-0.12.3-4e17183468badc2f43f143b7ee05da6af13dee91e604abece963af8f86bc5ddc","network-3.1.2.1-6db674957a82e804f5cd1b8604faefe4d02b0888eca4d90642b7b8e588874014","wai-3.2.3-f78cd8b8b3b0191ae95f0a17d9e4679af13a09b5426dd7a64a7c2ee96cde9059"],"exe-depends":[]},"setup":{"depends":["Cabal-3.2.1.0","base-4.14.3.0","cabal-doctest-1.0.8-cc5c2e87559eb18bdfdc001ed167b2e0d0b78de00dcfa62e272ab89cba37ff46"],"exe-depends":[]}}},{"type":"configured","id":"wai-websockets-3.0.1.2-e-wai-websockets-example-32a164fba5a85343fd9f1541ccd83e246f2d36cbcb031f06d2979c0db7bb49a7","pkg-name":"wai-websockets","pkg-version":"3.0.1.2","flags":{"example":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0e713ddb8c28d47be76cefeab3a73b6876477d648ddcd873ba6b15d08691aa7f","pkg-src-sha256":"917cceb08f296d7dc6b6cafb66133ae53888b2c98b8fb2a2d7fa629d75ab5d2c","depends":["base-4.14.3.0","bytestring-0.10.12.0","case-insensitive-1.2.1.0-04d96ac70421b0f8f3b44d7428a3ecc840602b9c41723a4e68226276ba482222","file-embed-0.0.13.0-07dd896cc8ff066813a1f3f766a7baaef44afa16095bcd2a3f20db4174a292d6","http-types-0.12.3-4e17183468badc2f43f143b7ee05da6af13dee91e604abece963af8f86bc5ddc","network-3.1.2.1-6db674957a82e804f5cd1b8604faefe4d02b0888eca4d90642b7b8e588874014","text-1.2.4.1","transformers-0.5.6.2","wai-3.2.3-f78cd8b8b3b0191ae95f0a17d9e4679af13a09b5426dd7a64a7c2ee96cde9059","wai-app-static-3.1.7.2-063d791ea745dac9aae85ff14de9fe9c456f6e85653b4f9f97a90b8a1e8555df","wai-websockets-3.0.1.2-ff20345d458ca8ad8918f900d7cc52c9d7f4edf34f54ea9426ed0152b4129d9a","warp-3.3.14-e75ca651b306735e7a4c986568378b5ab2592061a7a8b739ff4742530de5cc2f","websockets-0.12.7.2-9a73545fb032fca4a3ff32d85cc5c4b62eac54762308714d8f3022bba46aa4e0"],"exe-depends":[],"component-name":"exe:wai-websockets-example","bin-file":"/store/ghc-8.10.7/wai-websockets-3.0.1.2-e-wai-websockets-example-32a164fba5a85343fd9f1541ccd83e246f2d36cbcb031f06d2979c0db7bb49a7/bin/wai-websockets-example"},{"type":"configured","id":"wai-websockets-3.0.1.2-ff20345d458ca8ad8918f900d7cc52c9d7f4edf34f54ea9426ed0152b4129d9a","pkg-name":"wai-websockets","pkg-version":"3.0.1.2","flags":{"example":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"0e713ddb8c28d47be76cefeab3a73b6876477d648ddcd873ba6b15d08691aa7f","pkg-src-sha256":"917cceb08f296d7dc6b6cafb66133ae53888b2c98b8fb2a2d7fa629d75ab5d2c","depends":["base-4.14.3.0","bytestring-0.10.12.0","case-insensitive-1.2.1.0-04d96ac70421b0f8f3b44d7428a3ecc840602b9c41723a4e68226276ba482222","http-types-0.12.3-4e17183468badc2f43f143b7ee05da6af13dee91e604abece963af8f86bc5ddc","network-3.1.2.1-6db674957a82e804f5cd1b8604faefe4d02b0888eca4d90642b7b8e588874014","transformers-0.5.6.2","wai-3.2.3-f78cd8b8b3b0191ae95f0a17d9e4679af13a09b5426dd7a64a7c2ee96cde9059","websockets-0.12.7.2-9a73545fb032fca4a3ff32d85cc5c4b62eac54762308714d8f3022bba46aa4e0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"warp-3.3.14-e75ca651b306735e7a4c986568378b5ab2592061a7a8b739ff4742530de5cc2f","pkg-name":"warp","pkg-version":"3.3.14","flags":{"allow-sendfilefd":true,"network-bytestring":false,"warp-debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"cd627497cb2a43ab7923d7df3aa90480ea2dac0de1b05455b40a89ea789ac2c7","pkg-src-sha256":"2331da1ac67c644828883498301bee7bbf59f8b3d79b37850a621cba9a811572","depends":["array-0.5.4.0","async-2.2.3-61de372d98a1e267d734e51b5e1b4cff35a2fc324ce981f8581dd50ab715530c","auto-update-0.1.6-e8e826113afdb347fe8d7388c54fbeeb751a076150519ea04e74fa71c78c46e4","base-4.14.3.0","bsb-http-chunked-0.0.0.4-93c3de301fc0c7f414768bbce87bf5ebfb21b2cc4b90db023ff41feac4be585b","bytestring-0.10.12.0","case-insensitive-1.2.1.0-04d96ac70421b0f8f3b44d7428a3ecc840602b9c41723a4e68226276ba482222","containers-0.6.5.1","ghc-prim-0.6.1","hashable-1.3.1.0-564753cf17a1add5c46186b831cbea5bf0134d07ce651f274f2b99d57730e2b2","http-date-0.0.11-8a0bfcf14f2c7820a253801ceb7f8fdcbe28785a9c1061585750e7de9d541055","http-types-0.12.3-4e17183468badc2f43f143b7ee05da6af13dee91e604abece963af8f86bc5ddc","http2-2.0.6-df60e47325f865bff182031be49c2b1bd6484fb39639e3eecab84084e0b440fe","iproute-1.7.11-655ccfd58d1d0ad48ae49e3cc9b9dcca77e69497b27720261e1fb11b3da244b8","network-3.1.2.1-6db674957a82e804f5cd1b8604faefe4d02b0888eca4d90642b7b8e588874014","simple-sendfile-0.2.30-582c15ed93e6db542d7c9ac4cc6c2f444258db9ec8bd7a0210a901e1a1cdcb65","stm-2.5.0.1","streaming-commons-0.2.2.1-942cb4328612adafa73367d11a898b63952d40a880d771224be522f99e9b4d7d","text-1.2.4.1","time-manager-0.0.0-bc7a85c82be20473dfe915bd8d3f3d3c39f4329684c4a119a5da74bba91eb38c","unix-2.7.2.2","unix-compat-0.5.3-2bc2837e6f4bbc1b7104bd912ca92ab1f2ad1e42c984992d69f66d4dc3a997dd","vault-0.3.1.5-e6aaa3e9286a9fe1f03f6431c42c07e12b49138cf64435197da23c125d649f30","wai-3.2.3-f78cd8b8b3b0191ae95f0a17d9e4679af13a09b5426dd7a64a7c2ee96cde9059","word8-0.1.3-a52b0b2e8eaf12d4065c5bb0feed18420e66828a5f860b7767d8b6a9bf6c7dca","x509-1.7.5-70029ef763fd15a3a0f57750c5952e47a961410c40c88681736543158773ba8a"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"webdriver-0.9.0.1-35a56a29edc76894542404eac80a7216f880803a2f4567121fc370db555d5d3e","pkg-name":"webdriver","pkg-version":"0.9.0.1","flags":{"developer":false,"network-uri":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"95b810162a436390f83e8aa5e0038bb3a094f2f0ad35f30d3c07e2a3564ae26f","pkg-src-sha256":"135950889784b9d323c70ebf7ecd75b8df194489a303d85995b1fccc7549dff0","depends":["aeson-1.4.7.1-52a0a9a1400dce323fd3d192ed978d613759f226f95780101e22948c7029ceb3","attoparsec-0.13.2.5-101b2cdaf6874d1152c4a364734790b0bd77a38358f95a8c9a6ec3606cca3d3b","base-4.14.3.0","base64-bytestring-1.0.0.3-f9e5becf7dfbc91185d0c57f336812ed0311b41786ecb3bcc51fb08ba37fd76b","bytestring-0.10.12.0","call-stack-0.3.0-766edef699faf57980b537804dab60a9f3ac1de3a91de98cf4fcfd0435e80ded","data-default-class-0.1.2.0-17ceafe0f96b0cdbafad084ab784938676a45ba49a92d1c9875e1376c64a517d","directory-1.3.6.0","directory-tree-0.12.1-7aef9d3ea02418dfb0b81c0f4df3582801c93089fc39ffbf62cd8e06d5673f48","exceptions-0.10.4","filepath-1.4.2.1","http-client-0.7.6-bc867bac8a0aae16e34a39f4373870f6fb81169fb4dc90912002cf8c8417157f","http-types-0.12.3-4e17183468badc2f43f143b7ee05da6af13dee91e604abece963af8f86bc5ddc","lifted-base-0.2.3.12-d676308f67e6ea842d5113b274f0d27bb940d5b6f46d966d107583274c238bb5","monad-control-1.0.2.3-15717da05dfc99ece4f412301d4ad426993cb1e971bd790b62b9b7cd65892c0b","network-3.1.2.1-6db674957a82e804f5cd1b8604faefe4d02b0888eca4d90642b7b8e588874014","network-uri-2.6.4.1-5ef235b928a29ecc3adc1d005831c62dce98cd2facaab3ea93b098cddd1ce995","scientific-0.3.6.2-42e3b56e032df0ce79f9062afa301c4cf62b7891d5bcc06b2adf3c10aaa3a378","temporary-1.3-ff789bf78c36599a0a16db6158f62be122deb703e96987b84a1d080b3218a979","text-1.2.4.1","time-1.9.3","transformers-0.5.6.2","transformers-base-0.4.5.2-f59c3b08e18ebf1e05bdd152225473dbafc17b3afcdc67346a6635ed5b4de427","unordered-containers-0.2.13.0-35460b21e441aeebe83724b11caf0fabc4c79c49a4c3453dc1ec91e4ce589e47","vector-0.12.2.0-84be1736eb2fdcccd3f3255cdd99deab0bc6b8c8104c444c17df2676a325d9a1","zip-archive-0.4.1-0407cfd03f1387943c6ee463976a39a402f94cc5ad054a470b8a7b44d9890ae3"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"websockets-0.12.7.2-9a73545fb032fca4a3ff32d85cc5c4b62eac54762308714d8f3022bba46aa4e0","pkg-name":"websockets","pkg-version":"0.12.7.2","flags":{"example":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"5a6a3e40ee0c4e6b2cdc573a332ba4a06bb115b97b58147ed3fb005e3ede5ede","pkg-src-sha256":"84c45a5db481b4c969dddfa7d3cca257ac2a97801594f1180b596d41035122ad","depends":["SHA-1.6.4.4-fb858600c6b2e7dd75168be718cdde3ada98013127ddbf5eab1169065d6bfdfc","async-2.2.3-61de372d98a1e267d734e51b5e1b4cff35a2fc324ce981f8581dd50ab715530c","attoparsec-0.13.2.5-101b2cdaf6874d1152c4a364734790b0bd77a38358f95a8c9a6ec3606cca3d3b","base-4.14.3.0","base64-bytestring-1.0.0.3-f9e5becf7dfbc91185d0c57f336812ed0311b41786ecb3bcc51fb08ba37fd76b","binary-0.8.8.0","bytestring-0.10.12.0","bytestring-builder-0.10.8.2.0-91b0d6bc8faf4964d8d2787800f0633b603b423516feb8c19def5491e95ed21c","case-insensitive-1.2.1.0-04d96ac70421b0f8f3b44d7428a3ecc840602b9c41723a4e68226276ba482222","clock-0.8.2-2c2c7b4fade89668e1d92d470dbc6dac9cac04e6f6ec45820457ddda3c27587a","containers-0.6.5.1","entropy-0.4.1.6-23d69be192f334e6ffc35b304aea12f8575026f35e495f0e703663c33c3cf18d","network-3.1.2.1-6db674957a82e804f5cd1b8604faefe4d02b0888eca4d90642b7b8e588874014","random-1.2.0-2582a6283f6e8be75a7a3a45af494827ff1c10897473f915a522fd9a4b441210","streaming-commons-0.2.2.1-942cb4328612adafa73367d11a898b63952d40a880d771224be522f99e9b4d7d","text-1.2.4.1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"wl-pprint-text-1.2.0.1-f65bf92b2ca9aa1c1aba70c2a50d26c1a0a57919fafc7d735fbaf8708f5bf560","pkg-name":"wl-pprint-text","pkg-version":"1.2.0.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"14d3c6f5708da415558b1683d54c406864639cf6b08a8de7f36e8bcd08896603","pkg-src-sha256":"9e6efdba61da70caf85560570648ec097b88cc2b92bc1306135b93f0ff9b0c0c","components":{"lib":{"depends":["base-4.14.3.0","base-compat-0.11.2-b863e3e1a5ee375ab25bec4afb10b3d53ce241746b505b3edc9ba3eb7e9b3361","text-1.2.4.1"],"exe-depends":[]}}},{"type":"configured","id":"word8-0.1.3-a52b0b2e8eaf12d4065c5bb0feed18420e66828a5f860b7767d8b6a9bf6c7dca","pkg-name":"word8","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e5464d0600821a116467d4b12fef12b15ff040c3599500e5f0274225e78c6faf","pkg-src-sha256":"2630934c75728bfbf390c1f0206b225507b354f68d4047b06c018a36823b5d8a","depends":["base-4.14.3.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"x509-1.7.5-70029ef763fd15a3a0f57750c5952e47a961410c40c88681736543158773ba8a","pkg-name":"x509","pkg-version":"1.7.5","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"01185a9a17bee4e89287d9e32bfaa673133cf2b09a39759627bed1f72ea528fd","pkg-src-sha256":"b1b0fcbb4aa0d749ed2b54710c2ebd6d900cb932108ad14f97640cf4ca60c7c8","depends":["asn1-encoding-0.9.6-49f037fcb9444c19e8f30436cd6b5eb8efad2370bda9b0ba2856e8d501e8e70d","asn1-parse-0.9.5-14fa65dc20e3abccda9883188f30a5f5d0158e6c256abc9999d5e53419e4e2cf","asn1-types-0.3.4-7aaf8aa4bb5627deee7969088cf079090846bd49986985822143e0cfc0ef9c3d","base-4.14.3.0","bytestring-0.10.12.0","containers-0.6.5.1","cryptonite-0.28-c4162375c9a940361371e61f131514da5733be9b0f847ca300a4aacfb7afbc2f","hourglass-0.2.12-7f1a2f8e035f979a92fc06fb0a3622206548d2e7eae3800f34fe5ed8e9047d93","memory-0.15.0-e3b790978092deb24c20e670f314f00f6280d43c1441412b7c11be54cd23a855","mtl-2.2.2","pem-0.2.4-ce55be6cefac4d646278605f2a4d3a94535dd6ee2149d7186fb2a9b2834098e2"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"xhtml-3000.2.2.1","pkg-name":"xhtml","pkg-version":"3000.2.2.1","depends":["base-4.14.3.0"]},{"type":"configured","id":"xml-1.3.14-1aebc396e1d8eed7019387ea5aaacd1f989a750252a8ba709d99c0557b7fbbf5","pkg-name":"xml","pkg-version":"1.3.14","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c7a33d37c968c769723931a33e4e795f0aadda6cb62e7073ded8a2db52509d95","pkg-src-sha256":"32d1a1a9f21a59176d84697f96ae3a13a0198420e3e4f1c48abbab7d2425013d","components":{"lib":{"depends":["base-4.14.3.0","bytestring-0.10.12.0","text-1.2.4.1"],"exe-depends":[]}}},{"type":"configured","id":"yaml-0.11.5.0-f343c7e162c8d325f1d496c33d87fe89cf5a20b66600d096d0bf1e902e6baa1a","pkg-name":"yaml","pkg-version":"0.11.5.0","flags":{"no-examples":true,"no-exe":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"499783456cb70964b6ff29e310d1785829e57eb872ec143a9a81da0edb69cb61","pkg-src-sha256":"b28e748bd69948cb1b43694d4d7c74756e060e09ca91688d0485e23f19d6cdad","depends":["aeson-1.4.7.1-52a0a9a1400dce323fd3d192ed978d613759f226f95780101e22948c7029ceb3","attoparsec-0.13.2.5-101b2cdaf6874d1152c4a364734790b0bd77a38358f95a8c9a6ec3606cca3d3b","base-4.14.3.0","bytestring-0.10.12.0","conduit-1.3.4.1-370668f1ebcb07704d42c7d9513f477c1993b011c50722b04740e706f73165ef","containers-0.6.5.1","directory-1.3.6.0","filepath-1.4.2.1","libyaml-0.1.2-a1b62c66fb76d114c3ef330aaa99817281069d6c18f5704b5d311fc904e102a1","mtl-2.2.2","resourcet-1.2.4.2-302da70f53a381e3946d9bc3f2c181c3464035a3dd78edb509158b7de3de01cc","scientific-0.3.6.2-42e3b56e032df0ce79f9062afa301c4cf62b7891d5bcc06b2adf3c10aaa3a378","template-haskell-2.16.0.0","text-1.2.4.1","transformers-0.5.6.2","unordered-containers-0.2.13.0-35460b21e441aeebe83724b11caf0fabc4c79c49a4c3453dc1ec91e4ce589e47","vector-0.12.2.0-84be1736eb2fdcccd3f3255cdd99deab0bc6b8c8104c444c17df2676a325d9a1"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"zip-archive-0.4.1-0407cfd03f1387943c6ee463976a39a402f94cc5ad054a470b8a7b44d9890ae3","pkg-name":"zip-archive","pkg-version":"0.4.1","flags":{"executable":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"51774bdc747d20b8f23172315f9c3fdd6c11de01607e98e9890eb87fb49566d7","pkg-src-sha256":"c5d5c9976241dcc25b0d8753dc526bb1bfef60f30dee38c53a7ae56e6be9b1b1","depends":["array-0.5.4.0","base-4.14.3.0","binary-0.8.8.0","bytestring-0.10.12.0","containers-0.6.5.1","digest-0.0.1.2-49962857791e1f806aa8abe46447eb9b3fd34bfadd4dcff262ce2a0ad85fc46d","directory-1.3.6.0","filepath-1.4.2.1","mtl-2.2.2","pretty-1.1.3.6","text-1.2.4.1","time-1.9.3","unix-2.7.2.2","zlib-0.6.2.3-a637f3112bea0ad58c129e9e214d7009d480609a743e2473280eb8404869d423"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"zlib-0.6.2.3-a637f3112bea0ad58c129e9e214d7009d480609a743e2473280eb8404869d423","pkg-name":"zlib","pkg-version":"0.6.2.3","flags":{"bundled-c-zlib":false,"non-blocking-ffi":false,"pkg-config":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"28f4d460c260e074cab833625454564b9783a3389b7bb91fd54da2790b39592c","pkg-src-sha256":"807f6bddf9cb3c517ce5757d991dde3c7e319953a22c86ee03d74534bd5abc88","depends":["base-4.14.3.0","bytestring-0.10.12.0"],"exe-depends":[],"component-name":"lib"}],"targets":[{"pkg-name":"Cabal","pkg-version":"3.2.1.0","component-name":"lib","available":[{"id":"Cabal-3.2.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"HUnit","pkg-version":"1.6.2.0","component-name":"lib","available":[{"id":"HUnit-1.6.2.0-314ab465650beeeec200f38d63ecc71fad8c18b79234495712d8cbf66cc392ef","component-name":"lib","build-by-default":true}]},{"pkg-name":"HUnit","pkg-version":"1.6.2.0","component-name":"test:tests","available":["TargetNotLocal"]},{"pkg-name":"SHA","pkg-version":"1.6.4.4","component-name":"lib","available":[{"id":"SHA-1.6.4.4-fb858600c6b2e7dd75168be718cdde3ada98013127ddbf5eab1169065d6bfdfc","component-name":"lib","build-by-default":true}]},{"pkg-name":"SHA","pkg-version":"1.6.4.4","component-name":"exe:sha1","available":["TargetNotBuildable"]},{"pkg-name":"SHA","pkg-version":"1.6.4.4","component-name":"exe:sha224","available":["TargetNotBuildable"]},{"pkg-name":"SHA","pkg-version":"1.6.4.4","component-name":"exe:sha256","available":["TargetNotBuildable"]},{"pkg-name":"SHA","pkg-version":"1.6.4.4","component-name":"exe:sha384","available":["TargetNotBuildable"]},{"pkg-name":"SHA","pkg-version":"1.6.4.4","component-name":"exe:sha512","available":["TargetNotBuildable"]},{"pkg-name":"SHA","pkg-version":"1.6.4.4","component-name":"test:test-sha","available":["TargetNotLocal"]},{"pkg-name":"StateVar","pkg-version":"1.2.1","component-name":"lib","available":[{"id":"StateVar-1.2.1-cdb9ff81c4b8442ce9dc6c5b7311e6c2f41a738f99e8b73459a76b1c5a949b7c","component-name":"lib","build-by-default":true}]},{"pkg-name":"adjunctions","pkg-version":"4.4","component-name":"lib","available":[{"id":"adjunctions-4.4-7afb2e346a87af64a67e82ed94119085b73323baed1e84cdb18bd6d25e7cb8da","component-name":"lib","build-by-default":true}]},{"pkg-name":"adjunctions","pkg-version":"4.4","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"aeson","pkg-version":"1.4.7.1","component-name":"lib","available":[{"id":"aeson-1.4.7.1-52a0a9a1400dce323fd3d192ed978d613759f226f95780101e22948c7029ceb3","component-name":"lib","build-by-default":true}]},{"pkg-name":"aeson","pkg-version":"1.4.7.1","component-name":"test:tests","available":["TargetNotLocal"]},{"pkg-name":"ansi-terminal","pkg-version":"0.11","component-name":"lib","available":[{"id":"ansi-terminal-0.11-68045ba4dc159ef4d015a7becef8401cce3f1e07756980a26cd5d04a806924cd","component-name":"lib","build-by-default":true}]},{"pkg-name":"ansi-terminal","pkg-version":"0.11","component-name":"exe:ansi-terminal-example","available":["TargetNotBuildable"]},{"pkg-name":"ansi-wl-pprint","pkg-version":"0.6.9","component-name":"lib","available":[{"id":"ansi-wl-pprint-0.6.9-a2a5a82f0dda324638d65a03fd5311d9adbaaf655f5688baf31de8c8a2e5a686","component-name":"lib","build-by-default":true}]},{"pkg-name":"ansi-wl-pprint","pkg-version":"0.6.9","component-name":"exe:ansi-wl-pprint-example","available":["TargetNotBuildable"]},{"pkg-name":"appar","pkg-version":"0.1.8","component-name":"lib","available":[{"id":"appar-0.1.8-8fb5a263212cce5a622c5468fcdb68a68f1f79d9768ea726c629381d06b97677","component-name":"lib","build-by-default":true}]},{"pkg-name":"array","pkg-version":"0.5.4.0","component-name":"lib","available":[{"id":"array-0.5.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"asn1-encoding","pkg-version":"0.9.6","component-name":"lib","available":[{"id":"asn1-encoding-0.9.6-49f037fcb9444c19e8f30436cd6b5eb8efad2370bda9b0ba2856e8d501e8e70d","component-name":"lib","build-by-default":true}]},{"pkg-name":"asn1-encoding","pkg-version":"0.9.6","component-name":"test:tests-asn1-encoding","available":["TargetNotLocal"]},{"pkg-name":"asn1-parse","pkg-version":"0.9.5","component-name":"lib","available":[{"id":"asn1-parse-0.9.5-14fa65dc20e3abccda9883188f30a5f5d0158e6c256abc9999d5e53419e4e2cf","component-name":"lib","build-by-default":true}]},{"pkg-name":"asn1-types","pkg-version":"0.3.4","component-name":"lib","available":[{"id":"asn1-types-0.3.4-7aaf8aa4bb5627deee7969088cf079090846bd49986985822143e0cfc0ef9c3d","component-name":"lib","build-by-default":true}]},{"pkg-name":"async","pkg-version":"2.2.3","component-name":"lib","available":[{"id":"async-2.2.3-61de372d98a1e267d734e51b5e1b4cff35a2fc324ce981f8581dd50ab715530c","component-name":"lib","build-by-default":true}]},{"pkg-name":"async","pkg-version":"2.2.3","component-name":"exe:concasync","available":["TargetNotBuildable"]},{"pkg-name":"async","pkg-version":"2.2.3","component-name":"exe:conccancel","available":["TargetNotBuildable"]},{"pkg-name":"async","pkg-version":"2.2.3","component-name":"exe:race","available":["TargetNotBuildable"]},{"pkg-name":"async","pkg-version":"2.2.3","component-name":"test:test-async","available":["TargetNotLocal"]},{"pkg-name":"attoparsec","pkg-version":"0.13.2.5","component-name":"lib","available":[{"id":"attoparsec-0.13.2.5-101b2cdaf6874d1152c4a364734790b0bd77a38358f95a8c9a6ec3606cca3d3b","component-name":"lib","build-by-default":true}]},{"pkg-name":"attoparsec","pkg-version":"0.13.2.5","component-name":"test:tests","available":["TargetNotLocal"]},{"pkg-name":"attoparsec","pkg-version":"0.13.2.5","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"auto-update","pkg-version":"0.1.6","component-name":"lib","available":[{"id":"auto-update-0.1.6-e8e826113afdb347fe8d7388c54fbeeb751a076150519ea04e74fa71c78c46e4","component-name":"lib","build-by-default":true}]},{"pkg-name":"auto-update","pkg-version":"0.1.6","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"base","pkg-version":"4.14.3.0","component-name":"lib","available":[{"id":"base-4.14.3.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base-compat","pkg-version":"0.11.2","component-name":"lib","available":[{"id":"base-compat-0.11.2-b863e3e1a5ee375ab25bec4afb10b3d53ce241746b505b3edc9ba3eb7e9b3361","component-name":"lib","build-by-default":true}]},{"pkg-name":"base-compat-batteries","pkg-version":"0.11.2","component-name":"lib","available":[{"id":"base-compat-batteries-0.11.2-976ab05059efb80b88e21c895dd960e4bb0f14193691c3fd7fdbc501899ba3e4","component-name":"lib","build-by-default":true}]},{"pkg-name":"base-compat-batteries","pkg-version":"0.11.2","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"base-orphans","pkg-version":"0.8.4","component-name":"lib","available":[{"id":"base-orphans-0.8.4-5c47df155956fb73bbb69058ad0037967c377270cdf9afc72baa7ecfd53b2d7d","component-name":"lib","build-by-default":true}]},{"pkg-name":"base-orphans","pkg-version":"0.8.4","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"base16-bytestring","pkg-version":"0.1.1.7","component-name":"lib","available":[{"id":"base16-bytestring-0.1.1.7-77925cf395cd9922858f7d16362a46276afd7053ca6079c4e932cddc9574150e","component-name":"lib","build-by-default":true}]},{"pkg-name":"base16-bytestring","pkg-version":"0.1.1.7","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"base64-bytestring","pkg-version":"1.0.0.3","component-name":"lib","available":[{"id":"base64-bytestring-1.0.0.3-f9e5becf7dfbc91185d0c57f336812ed0311b41786ecb3bcc51fb08ba37fd76b","component-name":"lib","build-by-default":true}]},{"pkg-name":"base64-bytestring","pkg-version":"1.0.0.3","component-name":"test:tests","available":["TargetNotLocal"]},{"pkg-name":"base64-bytestring","pkg-version":"1.0.0.3","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"basement","pkg-version":"0.0.11","component-name":"lib","available":[{"id":"basement-0.0.11-274c4ae453d426264bb6282174f264d18ecb1b70dab6099919dfa6bb95920f32","component-name":"lib","build-by-default":true}]},{"pkg-name":"bifunctors","pkg-version":"5.5.7","component-name":"lib","available":[{"id":"bifunctors-5.5.7-fa9f071c0ca8eb588a51415afcae581f1e95061bab18698e1b9f8c2d1bbcbc63","component-name":"lib","build-by-default":true}]},{"pkg-name":"bifunctors","pkg-version":"5.5.7","component-name":"test:bifunctors-spec","available":["TargetNotLocal"]},{"pkg-name":"binary","pkg-version":"0.8.8.0","component-name":"lib","available":[{"id":"binary-0.8.8.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"blaze-builder","pkg-version":"0.4.2.1","component-name":"lib","available":[{"id":"blaze-builder-0.4.2.1-c694e0e375f646ecf1acece0f97effbaa4b3f19f5ece616657e500d5ffe1867c","component-name":"lib","build-by-default":true}]},{"pkg-name":"blaze-builder","pkg-version":"0.4.2.1","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"blaze-html","pkg-version":"0.9.1.2","component-name":"lib","available":[{"id":"blaze-html-0.9.1.2-022d22b03693695c24e4963a307d0e6faa8216dac14462831e569778bf44c77c","component-name":"lib","build-by-default":true}]},{"pkg-name":"blaze-html","pkg-version":"0.9.1.2","component-name":"test:blaze-html-tests","available":["TargetNotLocal"]},{"pkg-name":"blaze-markup","pkg-version":"0.8.2.8","component-name":"lib","available":[{"id":"blaze-markup-0.8.2.8-bc2dff2d134f02b5cf60656035ece9a666b81e8bb3192243e4bce0571e4e3e98","component-name":"lib","build-by-default":true}]},{"pkg-name":"blaze-markup","pkg-version":"0.8.2.8","component-name":"test:blaze-markup-tests","available":["TargetNotLocal"]},{"pkg-name":"bsb-http-chunked","pkg-version":"0.0.0.4","component-name":"lib","available":[{"id":"bsb-http-chunked-0.0.0.4-93c3de301fc0c7f414768bbce87bf5ebfb21b2cc4b90db023ff41feac4be585b","component-name":"lib","build-by-default":true}]},{"pkg-name":"bsb-http-chunked","pkg-version":"0.0.0.4","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"bsb-http-chunked","pkg-version":"0.0.0.4","component-name":"test:tests","available":["TargetNotLocal"]},{"pkg-name":"bsb-http-chunked","pkg-version":"0.0.0.4","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"byteable","pkg-version":"0.1.1","component-name":"lib","available":[{"id":"byteable-0.1.1-ba0f6a5de53bd5be451d958f4b3e20e1bc251f579f854e09e5b7db3d17f030fa","component-name":"lib","build-by-default":true}]},{"pkg-name":"byteorder","pkg-version":"1.0.4","component-name":"lib","available":[{"id":"byteorder-1.0.4-8941468c0399921cea5e6aac8bdd2d7cfbbfbfcb24a4ebd26a56fb6d0ed63534","component-name":"lib","build-by-default":true}]},{"pkg-name":"bytestring","pkg-version":"0.10.12.0","component-name":"lib","available":[{"id":"bytestring-0.10.12.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"bytestring-builder","pkg-version":"0.10.8.2.0","component-name":"lib","available":[{"id":"bytestring-builder-0.10.8.2.0-91b0d6bc8faf4964d8d2787800f0633b603b423516feb8c19def5491e95ed21c","component-name":"lib","build-by-default":true}]},{"pkg-name":"cabal-doctest","pkg-version":"1.0.8","component-name":"lib","available":[{"id":"cabal-doctest-1.0.8-cc5c2e87559eb18bdfdc001ed167b2e0d0b78de00dcfa62e272ab89cba37ff46","component-name":"lib","build-by-default":true}]},{"pkg-name":"call-stack","pkg-version":"0.3.0","component-name":"lib","available":[{"id":"call-stack-0.3.0-766edef699faf57980b537804dab60a9f3ac1de3a91de98cf4fcfd0435e80ded","component-name":"lib","build-by-default":true}]},{"pkg-name":"call-stack","pkg-version":"0.3.0","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"case-insensitive","pkg-version":"1.2.1.0","component-name":"lib","available":[{"id":"case-insensitive-1.2.1.0-04d96ac70421b0f8f3b44d7428a3ecc840602b9c41723a4e68226276ba482222","component-name":"lib","build-by-default":true}]},{"pkg-name":"case-insensitive","pkg-version":"1.2.1.0","component-name":"test:test-case-insensitive","available":["TargetNotLocal"]},{"pkg-name":"case-insensitive","pkg-version":"1.2.1.0","component-name":"bench:bench-case-insensitive","available":["TargetNotLocal"]},{"pkg-name":"clock","pkg-version":"0.8.2","component-name":"lib","available":[{"id":"clock-0.8.2-2c2c7b4fade89668e1d92d470dbc6dac9cac04e6f6ec45820457ddda3c27587a","component-name":"lib","build-by-default":true}]},{"pkg-name":"clock","pkg-version":"0.8.2","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"clock","pkg-version":"0.8.2","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"colour","pkg-version":"2.3.5","component-name":"lib","available":[{"id":"colour-2.3.5-a5aa9f2be50d4ed011c1be7700b7a83002fe6b60755a26d197e6fc7ce5768c6f","component-name":"lib","build-by-default":true}]},{"pkg-name":"colour","pkg-version":"2.3.5","component-name":"test:test-colour","available":["TargetNotLocal"]},{"pkg-name":"comonad","pkg-version":"5.0.8","component-name":"lib","available":[{"id":"comonad-5.0.8-84dad871ca1e06bf26db07aebb9423762f4131e55712cd07cb7957905813d252","component-name":"lib","build-by-default":true}]},{"pkg-name":"conduit","pkg-version":"1.3.4.1","component-name":"lib","available":[{"id":"conduit-1.3.4.1-370668f1ebcb07704d42c7d9513f477c1993b011c50722b04740e706f73165ef","component-name":"lib","build-by-default":true}]},{"pkg-name":"conduit","pkg-version":"1.3.4.1","component-name":"test:conduit-test","available":["TargetNotLocal"]},{"pkg-name":"conduit","pkg-version":"1.3.4.1","component-name":"bench:optimize-201408","available":["TargetNotLocal"]},{"pkg-name":"conduit","pkg-version":"1.3.4.1","component-name":"bench:unfused","available":["TargetNotLocal"]},{"pkg-name":"constraints","pkg-version":"0.13","component-name":"lib","available":[{"id":"constraints-0.13-4b01ef386e6a78dd5a5f51064f7a9b86949fdaf2d54fb07641c19705461b230d","component-name":"lib","build-by-default":true}]},{"pkg-name":"constraints","pkg-version":"0.13","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"containers","pkg-version":"0.6.5.1","component-name":"lib","available":[{"id":"containers-0.6.5.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"contravariant","pkg-version":"1.5.3","component-name":"lib","available":[{"id":"contravariant-1.5.3-d3a9d369e446e3ff9ca5798448ac1aeb48842e7951f9a1992079a218abf646b6","component-name":"lib","build-by-default":true}]},{"pkg-name":"cookie","pkg-version":"0.4.5","component-name":"lib","available":[{"id":"cookie-0.4.5-1666bb4d62c924da233e083065c6a869a88b0c3a1c692a55dbf161d4c809b252","component-name":"lib","build-by-default":true}]},{"pkg-name":"cookie","pkg-version":"0.4.5","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"cryptohash","pkg-version":"0.11.9","component-name":"lib","available":[{"id":"cryptohash-0.11.9-aa23ead3b32b01f8b290c64b004126442b9bbdfee20fdf41511410330eaf28ce","component-name":"lib","build-by-default":true}]},{"pkg-name":"cryptohash","pkg-version":"0.11.9","component-name":"test:test-kat","available":["TargetNotLocal"]},{"pkg-name":"cryptohash","pkg-version":"0.11.9","component-name":"bench:bench-api","available":["TargetNotLocal"]},{"pkg-name":"cryptohash","pkg-version":"0.11.9","component-name":"bench:bench-hashes","available":["TargetNotLocal"]},{"pkg-name":"cryptohash","pkg-version":"0.11.9","component-name":"bench:bench-hmac","available":["TargetNotLocal"]},{"pkg-name":"cryptonite","pkg-version":"0.28","component-name":"lib","available":[{"id":"cryptonite-0.28-c4162375c9a940361371e61f131514da5733be9b0f847ca300a4aacfb7afbc2f","component-name":"lib","build-by-default":true}]},{"pkg-name":"cryptonite","pkg-version":"0.28","component-name":"test:test-cryptonite","available":["TargetNotLocal"]},{"pkg-name":"cryptonite","pkg-version":"0.28","component-name":"bench:bench-cryptonite","available":["TargetNotLocal"]},{"pkg-name":"data-default","pkg-version":"0.7.1.1","component-name":"lib","available":[{"id":"data-default-0.7.1.1-14a5dd71fd9b9460c9e01d850dbf5a924905b919addadf74a1e21023ba2090c9","component-name":"lib","build-by-default":true}]},{"pkg-name":"data-default-class","pkg-version":"0.1.2.0","component-name":"lib","available":[{"id":"data-default-class-0.1.2.0-17ceafe0f96b0cdbafad084ab784938676a45ba49a92d1c9875e1376c64a517d","component-name":"lib","build-by-default":true}]},{"pkg-name":"data-default-instances-containers","pkg-version":"0.0.1","component-name":"lib","available":[{"id":"data-default-instances-containers-0.0.1-54c5dd643760980377e2aebc9a73fae4974414a5ea72744d6f967916c6f32c61","component-name":"lib","build-by-default":true}]},{"pkg-name":"data-default-instances-dlist","pkg-version":"0.0.1","component-name":"lib","available":[{"id":"data-default-instances-dlist-0.0.1-c42bb74da18690ecb87c15192fab756c4e4c029e0200de4c6bd5c86e23d6a254","component-name":"lib","build-by-default":true}]},{"pkg-name":"data-default-instances-old-locale","pkg-version":"0.0.1","component-name":"lib","available":[{"id":"data-default-instances-old-locale-0.0.1-1b5c29e0a5f4e61dd28c301aeed67bc08930d48ce94f25ecdcc1276822946c61","component-name":"lib","build-by-default":true}]},{"pkg-name":"deepseq","pkg-version":"1.4.4.0","component-name":"lib","available":[{"id":"deepseq-1.4.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"digest","pkg-version":"0.0.1.2","component-name":"lib","available":[{"id":"digest-0.0.1.2-49962857791e1f806aa8abe46447eb9b3fd34bfadd4dcff262ce2a0ad85fc46d","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory","pkg-version":"1.3.6.0","component-name":"lib","available":[{"id":"directory-1.3.6.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory-tree","pkg-version":"0.12.1","component-name":"lib","available":[{"id":"directory-tree-0.12.1-7aef9d3ea02418dfb0b81c0f4df3582801c93089fc39ffbf62cd8e06d5673f48","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory-tree","pkg-version":"0.12.1","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"distributive","pkg-version":"0.6.2.1","component-name":"lib","available":[{"id":"distributive-0.6.2.1-590207038e714f2c87eff8c936fa808c84df073258a026835d614af402cdf034","component-name":"lib","build-by-default":true}]},{"pkg-name":"distributive","pkg-version":"0.6.2.1","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"dlist","pkg-version":"0.8.0.8","component-name":"lib","available":[{"id":"dlist-0.8.0.8-37f052ad713a5f768e754fa19302aed2e64fdc36b33cd00a589c6d1dd3800dfe","component-name":"lib","build-by-default":true}]},{"pkg-name":"dlist","pkg-version":"0.8.0.8","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"easy-file","pkg-version":"0.2.2","component-name":"lib","available":[{"id":"easy-file-0.2.2-81dad8f595046adec420f2364e68bef6c6c4dc00dea05594e7a72fe17b4388b9","component-name":"lib","build-by-default":true}]},{"pkg-name":"enclosed-exceptions","pkg-version":"1.0.3","component-name":"lib","available":[{"id":"enclosed-exceptions-1.0.3-116b50bd2397f153ecb8506eb04e6c16ca9f5e330047f2e884a6bb84c8d1e8b4","component-name":"lib","build-by-default":true}]},{"pkg-name":"enclosed-exceptions","pkg-version":"1.0.3","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"entropy","pkg-version":"0.4.1.6","component-name":"lib","available":[{"id":"entropy-0.4.1.6-23d69be192f334e6ffc35b304aea12f8575026f35e495f0e703663c33c3cf18d","component-name":"lib","build-by-default":true}]},{"pkg-name":"exceptions","pkg-version":"0.10.4","component-name":"lib","available":[{"id":"exceptions-0.10.4","component-name":"lib","build-by-default":true}]},{"pkg-name":"executable-path","pkg-version":"0.0.3.1","component-name":"lib","available":[{"id":"executable-path-0.0.3.1-8850d4a31accb5fd8d5f871c9214154d6cdd6a1217e4d43acdf765e7f8f5f0ac","component-name":"lib","build-by-default":true}]},{"pkg-name":"extensible-exceptions","pkg-version":"0.1.1.4","component-name":"lib","available":[{"id":"extensible-exceptions-0.1.1.4-8cc6a1f8ee4f082c86b889e18baaf343050ddbc7a582cb6ff369da69867f1c1b","component-name":"lib","build-by-default":true}]},{"pkg-name":"fast-logger","pkg-version":"3.0.3","component-name":"lib","available":[{"id":"fast-logger-3.0.3-dcaa0bb54cf4bc4a51b14dbb2590735910e4d1d57d62aad4cca1896d4ef4bc6a","component-name":"lib","build-by-default":true}]},{"pkg-name":"fast-logger","pkg-version":"3.0.3","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"file-embed","pkg-version":"0.0.13.0","component-name":"lib","available":[{"id":"file-embed-0.0.13.0-07dd896cc8ff066813a1f3f766a7baaef44afa16095bcd2a3f20db4174a292d6","component-name":"lib","build-by-default":true}]},{"pkg-name":"file-embed","pkg-version":"0.0.13.0","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"filepath","pkg-version":"1.4.2.1","component-name":"lib","available":[{"id":"filepath-1.4.2.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"free","pkg-version":"5.1.3","component-name":"lib","available":[{"id":"free-5.1.3-f330c46773f99df34d4d64a78d98ad438cab6434e3affbd43c9735f52fd71728","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-boot","pkg-version":"8.10.7","component-name":"lib","available":[{"id":"ghc-boot-8.10.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-boot-th","pkg-version":"8.10.7","component-name":"lib","available":[{"id":"ghc-boot-th-8.10.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-compact","pkg-version":"0.1.0.0","component-name":"lib","available":[{"id":"ghc-compact-0.1.0.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-heap","pkg-version":"8.10.7","component-name":"lib","available":[{"id":"ghc-heap-8.10.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-paths","pkg-version":"0.1.0.12","component-name":"lib","available":[{"id":"ghc-paths-0.1.0.12-b698ec3f14b7264932d5870dfa659247742f258bbfa6d0baf97b12d62d607135","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-prim","pkg-version":"0.6.1","component-name":"lib","available":[{"id":"ghc-prim-0.6.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghci","pkg-version":"8.10.7","component-name":"lib","available":[{"id":"ghci-8.10.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"lib","available":[{"id":"ghcjs-8.10.7-inplace","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:ghcjs","available":[{"id":"ghcjs-8.10.7-inplace-ghcjs","component-name":"exe:ghcjs","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:ghcjs-boot","available":[{"id":"ghcjs-8.10.7-inplace-ghcjs-boot","component-name":"exe:ghcjs-boot","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:ghcjs-dumparchive","available":[{"id":"ghcjs-8.10.7-inplace-ghcjs-dumparchive","component-name":"exe:ghcjs-dumparchive","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:ghcjs-pkg","available":[{"id":"ghcjs-8.10.7-inplace-ghcjs-pkg","component-name":"exe:ghcjs-pkg","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:haddock","available":[{"id":"ghcjs-8.10.7-inplace-haddock","component-name":"exe:haddock","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:private-ghcjs-hsc2hs","available":[{"id":"ghcjs-8.10.7-inplace-private-ghcjs-hsc2hs","component-name":"exe:private-ghcjs-hsc2hs","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:private-ghcjs-run","available":[{"id":"ghcjs-8.10.7-inplace-private-ghcjs-run","component-name":"exe:private-ghcjs-run","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:private-ghcjs-touchy","available":["TargetNotBuildable"]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:private-ghcjs-unlit","available":[{"id":"ghcjs-8.10.7-inplace-private-ghcjs-unlit","component-name":"exe:private-ghcjs-unlit","build-by-default":true}]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"exe:private-ghcjs-wrapper","available":["TargetNotBuildable"]},{"pkg-name":"ghcjs","pkg-version":"8.10.7","component-name":"test:test","available":[{"id":"ghcjs-8.10.7-inplace-test","component-name":"test:test","build-by-default":true}]},{"pkg-name":"ghcjs-th","pkg-version":"0.1.0.0","component-name":"lib","available":[{"id":"ghcjs-th-0.1.0.0-inplace","component-name":"lib","build-by-default":true}]},{"pkg-name":"happy","pkg-version":"1.20.0","component-name":"exe:happy","available":[{"id":"happy-1.20.0-e-happy-3381209c89ac2203d07bd4b222160e1a46477e5747b38342479eae0cc9ed21a8","component-name":"exe:happy","build-by-default":true}]},{"pkg-name":"happy","pkg-version":"1.20.0","component-name":"test:tests","available":["TargetNotLocal"]},{"pkg-name":"hashable","pkg-version":"1.3.1.0","component-name":"lib","available":[{"id":"hashable-1.3.1.0-564753cf17a1add5c46186b831cbea5bf0134d07ce651f274f2b99d57730e2b2","component-name":"lib","build-by-default":true}]},{"pkg-name":"hashable","pkg-version":"1.3.1.0","component-name":"test:hashable-examples","available":["TargetNotLocal"]},{"pkg-name":"hashable","pkg-version":"1.3.1.0","component-name":"test:hashable-tests","available":["TargetNotLocal"]},{"pkg-name":"hostname","pkg-version":"1.0","component-name":"lib","available":[{"id":"hostname-1.0-a81e773a8679491b2cf913154430d20a33f93ed6f4554b930c893277d3f6ba43","component-name":"lib","build-by-default":true}]},{"pkg-name":"hourglass","pkg-version":"0.2.12","component-name":"lib","available":[{"id":"hourglass-0.2.12-7f1a2f8e035f979a92fc06fb0a3622206548d2e7eae3800f34fe5ed8e9047d93","component-name":"lib","build-by-default":true}]},{"pkg-name":"hourglass","pkg-version":"0.2.12","component-name":"test:test-hourglass","available":["TargetNotLocal"]},{"pkg-name":"hourglass","pkg-version":"0.2.12","component-name":"bench:bench-hourglass","available":["TargetNotLocal"]},{"pkg-name":"hpc","pkg-version":"0.6.1.0","component-name":"lib","available":[{"id":"hpc-0.6.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"hsc2hs","pkg-version":"0.68.7","component-name":"exe:hsc2hs","available":[{"id":"hsc2hs-0.68.7-e-hsc2hs-664c04f5ad5632a07731b57f398bef2f771ab84da35218b03d98405047bf669c","component-name":"exe:hsc2hs","build-by-default":true}]},{"pkg-name":"hsc2hs","pkg-version":"0.68.7","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"http-client","pkg-version":"0.7.6","component-name":"lib","available":[{"id":"http-client-0.7.6-bc867bac8a0aae16e34a39f4373870f6fb81169fb4dc90912002cf8c8417157f","component-name":"lib","build-by-default":true}]},{"pkg-name":"http-client","pkg-version":"0.7.6","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"http-client","pkg-version":"0.7.6","component-name":"test:spec-nonet","available":["TargetNotLocal"]},{"pkg-name":"http-date","pkg-version":"0.0.11","component-name":"lib","available":[{"id":"http-date-0.0.11-8a0bfcf14f2c7820a253801ceb7f8fdcbe28785a9c1061585750e7de9d541055","component-name":"lib","build-by-default":true}]},{"pkg-name":"http-date","pkg-version":"0.0.11","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"http-date","pkg-version":"0.0.11","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"http-types","pkg-version":"0.12.3","component-name":"lib","available":[{"id":"http-types-0.12.3-4e17183468badc2f43f143b7ee05da6af13dee91e604abece963af8f86bc5ddc","component-name":"lib","build-by-default":true}]},{"pkg-name":"http-types","pkg-version":"0.12.3","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"http-types","pkg-version":"0.12.3","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"lib","available":[{"id":"http2-2.0.6-df60e47325f865bff182031be49c2b1bd6484fb39639e3eecab84084e0b440fe","component-name":"lib","build-by-default":true}]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"exe:frame-encode","available":["TargetNotBuildable"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"exe:hpack-debug","available":["TargetNotBuildable"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"exe:hpack-encode","available":["TargetNotBuildable"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"exe:hpack-stat","available":["TargetNotBuildable"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"test:doctest","available":["TargetNotLocal"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"test:frame","available":["TargetNotLocal"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"test:hpack","available":["TargetNotLocal"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"bench:header-compression","available":["TargetNotLocal"]},{"pkg-name":"http2","pkg-version":"2.0.6","component-name":"bench:priority","available":["TargetNotLocal"]},{"pkg-name":"indexed-traversable","pkg-version":"0.1.1","component-name":"lib","available":[{"id":"indexed-traversable-0.1.1-859ad062f72f50cb0e073dc82fa2adde481c5f84e83dfb553607a7a6b1160be1","component-name":"lib","build-by-default":true}]},{"pkg-name":"integer-gmp","pkg-version":"1.0.3.0","component-name":"lib","available":[{"id":"integer-gmp-1.0.3.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"integer-logarithms","pkg-version":"1.0.3.1","component-name":"lib","available":[{"id":"integer-logarithms-1.0.3.1-32259a5ad23876e1cc8b3c3578f0af2894940ba8ed87dc4e1dc5162ea050a14c","component-name":"lib","build-by-default":true}]},{"pkg-name":"integer-logarithms","pkg-version":"1.0.3.1","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"invariant","pkg-version":"0.5.3","component-name":"lib","available":[{"id":"invariant-0.5.3-31ab128e2fba5ccfde647a220f5af6673702e43abfc49fae9c158d95c172a7e9","component-name":"lib","build-by-default":true}]},{"pkg-name":"invariant","pkg-version":"0.5.3","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"iproute","pkg-version":"1.7.11","component-name":"lib","available":[{"id":"iproute-1.7.11-655ccfd58d1d0ad48ae49e3cc9b9dcca77e69497b27720261e1fb11b3da244b8","component-name":"lib","build-by-default":true}]},{"pkg-name":"iproute","pkg-version":"1.7.11","component-name":"test:doctest","available":["TargetNotLocal"]},{"pkg-name":"iproute","pkg-version":"1.7.11","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"kan-extensions","pkg-version":"5.2.2","component-name":"lib","available":[{"id":"kan-extensions-5.2.2-99b79e6dc7a50799b9e9d629a22ce906230cf23141e7ca52fb5d48022fe8d862","component-name":"lib","build-by-default":true}]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"lib","available":[{"id":"lens-4.19.2-a365e8ee15eac5187637caf0f9a84168dcf51fefd5a0ada0844b88a6cd4de834","component-name":"lib","build-by-default":true}]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"test:hunit","available":["TargetNotLocal"]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"test:properties","available":["TargetNotLocal"]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"test:templates","available":["TargetNotLocal"]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"bench:alongside","available":["TargetNotLocal"]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"bench:folds","available":["TargetNotLocal"]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"bench:plated","available":["TargetNotLocal"]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"bench:traversals","available":["TargetNotLocal"]},{"pkg-name":"lens","pkg-version":"4.19.2","component-name":"bench:unsafe","available":["TargetNotLocal"]},{"pkg-name":"libyaml","pkg-version":"0.1.2","component-name":"lib","available":[{"id":"libyaml-0.1.2-a1b62c66fb76d114c3ef330aaa99817281069d6c18f5704b5d311fc904e102a1","component-name":"lib","build-by-default":true}]},{"pkg-name":"lifted-async","pkg-version":"0.10.1.3","component-name":"lib","available":[{"id":"lifted-async-0.10.1.3-83cf5de09b953f58e5801096270a0fc5d005a60d1c90f81216f25c636b060566","component-name":"lib","build-by-default":true}]},{"pkg-name":"lifted-async","pkg-version":"0.10.1.3","component-name":"test:regression-tests","available":["TargetNotLocal"]},{"pkg-name":"lifted-async","pkg-version":"0.10.1.3","component-name":"test:test-lifted-async","available":["TargetNotLocal"]},{"pkg-name":"lifted-async","pkg-version":"0.10.1.3","component-name":"bench:benchmark-lifted-async","available":["TargetNotLocal"]},{"pkg-name":"lifted-async","pkg-version":"0.10.1.3","component-name":"bench:benchmark-lifted-async-threaded","available":["TargetNotLocal"]},{"pkg-name":"lifted-base","pkg-version":"0.2.3.12","component-name":"lib","available":[{"id":"lifted-base-0.2.3.12-d676308f67e6ea842d5113b274f0d27bb940d5b6f46d966d107583274c238bb5","component-name":"lib","build-by-default":true}]},{"pkg-name":"lifted-base","pkg-version":"0.2.3.12","component-name":"test:test-lifted-base","available":["TargetNotLocal"]},{"pkg-name":"lifted-base","pkg-version":"0.2.3.12","component-name":"bench:bench-lifted-base","available":["TargetNotLocal"]},{"pkg-name":"memory","pkg-version":"0.15.0","component-name":"lib","available":[{"id":"memory-0.15.0-e3b790978092deb24c20e670f314f00f6280d43c1441412b7c11be54cd23a855","component-name":"lib","build-by-default":true}]},{"pkg-name":"memory","pkg-version":"0.15.0","component-name":"test:test-memory","available":["TargetNotLocal"]},{"pkg-name":"mime-types","pkg-version":"0.1.0.9","component-name":"lib","available":[{"id":"mime-types-0.1.0.9-6d101b38a5c1e1264b6a27339e11234fbbd759a5d3562d5310626611c3604e6a","component-name":"lib","build-by-default":true}]},{"pkg-name":"monad-control","pkg-version":"1.0.2.3","component-name":"lib","available":[{"id":"monad-control-1.0.2.3-15717da05dfc99ece4f412301d4ad426993cb1e971bd790b62b9b7cd65892c0b","component-name":"lib","build-by-default":true}]},{"pkg-name":"mono-traversable","pkg-version":"1.0.15.1","component-name":"lib","available":[{"id":"mono-traversable-1.0.15.1-14a7b01eb3da98ee8bec53e1a2c3325795947148555bfd08e601059e3f8ef800","component-name":"lib","build-by-default":true}]},{"pkg-name":"mono-traversable","pkg-version":"1.0.15.1","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"mono-traversable","pkg-version":"1.0.15.1","component-name":"bench:sorting","available":["TargetNotLocal"]},{"pkg-name":"mtl","pkg-version":"2.2.2","component-name":"lib","available":[{"id":"mtl-2.2.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"network","pkg-version":"3.1.2.1","component-name":"lib","available":[{"id":"network-3.1.2.1-6db674957a82e804f5cd1b8604faefe4d02b0888eca4d90642b7b8e588874014","component-name":"lib","build-by-default":true}]},{"pkg-name":"network","pkg-version":"3.1.2.1","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"network","pkg-version":"3.1.2.1","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"network-byte-order","pkg-version":"0.1.6","component-name":"lib","available":[{"id":"network-byte-order-0.1.6-56958e8e281dbc9e6cdcc1129b8ebeecd09fcefe9a6eab7f59bb0bd26dd6d6f8","component-name":"lib","build-by-default":true}]},{"pkg-name":"network-byte-order","pkg-version":"0.1.6","component-name":"test:doctest","available":["TargetNotLocal"]},{"pkg-name":"network-uri","pkg-version":"2.6.4.1","component-name":"lib","available":[{"id":"network-uri-2.6.4.1-5ef235b928a29ecc3adc1d005831c62dce98cd2facaab3ea93b098cddd1ce995","component-name":"lib","build-by-default":true}]},{"pkg-name":"network-uri","pkg-version":"2.6.4.1","component-name":"test:uri","available":["TargetNotLocal"]},{"pkg-name":"network-uri","pkg-version":"2.6.4.1","component-name":"bench:uri-bench","available":["TargetNotLocal"]},{"pkg-name":"old-locale","pkg-version":"1.0.0.7","component-name":"lib","available":[{"id":"old-locale-1.0.0.7-0b56be282c9d84e8a62244b3b072a0d01762b387596f58798264e4b9c6aa0b1c","component-name":"lib","build-by-default":true}]},{"pkg-name":"old-time","pkg-version":"1.1.0.3","component-name":"lib","available":[{"id":"old-time-1.1.0.3-dfe22a7c6d4d35e59baed241e72dc9c2daa94f91b4983c47fb8eae5a99b18922","component-name":"lib","build-by-default":true}]},{"pkg-name":"optparse-applicative","pkg-version":"0.15.1.0","component-name":"lib","available":[{"id":"optparse-applicative-0.15.1.0-ff69718b26c95902c84e69b0d38586ca2b71b8bb5566d63b9fcabab034f14315","component-name":"lib","build-by-default":true}]},{"pkg-name":"optparse-applicative","pkg-version":"0.15.1.0","component-name":"test:tests","available":["TargetNotLocal"]},{"pkg-name":"parallel","pkg-version":"3.2.2.0","component-name":"lib","available":[{"id":"parallel-3.2.2.0-ec2949e70412ce6ff7ffd865dd2d3b7cb720043a39b010d37a44ef3b76e4424d","component-name":"lib","build-by-default":true}]},{"pkg-name":"parsec","pkg-version":"3.1.14.0","component-name":"lib","available":[{"id":"parsec-3.1.14.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"pem","pkg-version":"0.2.4","component-name":"lib","available":[{"id":"pem-0.2.4-ce55be6cefac4d646278605f2a4d3a94535dd6ee2149d7186fb2a9b2834098e2","component-name":"lib","build-by-default":true}]},{"pkg-name":"pem","pkg-version":"0.2.4","component-name":"test:test-pem","available":["TargetNotLocal"]},{"pkg-name":"pretty","pkg-version":"1.1.3.6","component-name":"lib","available":[{"id":"pretty-1.1.3.6","component-name":"lib","build-by-default":true}]},{"pkg-name":"primitive","pkg-version":"0.7.1.0","component-name":"lib","available":[{"id":"primitive-0.7.1.0-7ccb0748f64fa9b4343f00f3d4c0f11f2cb114d7cdaf164ea91f4084bcecf2b4","component-name":"lib","build-by-default":true}]},{"pkg-name":"primitive","pkg-version":"0.7.1.0","component-name":"test:test-qc","available":["TargetNotLocal"]},{"pkg-name":"process","pkg-version":"1.6.13.2","component-name":"lib","available":[{"id":"process-1.6.13.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"profunctors","pkg-version":"5.6","component-name":"lib","available":[{"id":"profunctors-5.6-6fde5b754660999c4bdfb6d35878d4000620c3d338cda12a93bb9d35059f3397","component-name":"lib","build-by-default":true}]},{"pkg-name":"psqueues","pkg-version":"0.2.7.2","component-name":"lib","available":[{"id":"psqueues-0.2.7.2-db0c1fae7218798631412dfc6a6f21047ef8dfd74a6ff1624df380bb287b085f","component-name":"lib","build-by-default":true}]},{"pkg-name":"psqueues","pkg-version":"0.2.7.2","component-name":"test:psqueues-tests","available":["TargetNotLocal"]},{"pkg-name":"psqueues","pkg-version":"0.2.7.2","component-name":"bench:psqueues-benchmarks","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.0","component-name":"lib","available":[{"id":"random-1.2.0-2582a6283f6e8be75a7a3a45af494827ff1c10897473f915a522fd9a4b441210","component-name":"lib","build-by-default":true}]},{"pkg-name":"random","pkg-version":"1.2.0","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.0","component-name":"test:legacy-test","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.0","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.0","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.0","component-name":"bench:legacy-bench","available":["TargetNotLocal"]},{"pkg-name":"reflection","pkg-version":"2.1.6","component-name":"lib","available":[{"id":"reflection-2.1.6-e0014472389fc81f3e7fd7fd3c1cfe3f04370072826a8003cbb29e0a7fc8c50a","component-name":"lib","build-by-default":true}]},{"pkg-name":"reflection","pkg-version":"2.1.6","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"regex-base","pkg-version":"0.94.0.1","component-name":"lib","available":[{"id":"regex-base-0.94.0.1-3a17040d054766ab8dc57f26c7d65c9c0f8782a8ce82862d2e8d4da9aa36c4bd","component-name":"lib","build-by-default":true}]},{"pkg-name":"regex-posix","pkg-version":"0.96.0.0","component-name":"lib","available":[{"id":"regex-posix-0.96.0.0-6e5c96176f90239b1b35ea81399d2149d2bbf5bc0c0d85e6660a46b539cb7abb","component-name":"lib","build-by-default":true}]},{"pkg-name":"resourcet","pkg-version":"1.2.4.2","component-name":"lib","available":[{"id":"resourcet-1.2.4.2-302da70f53a381e3946d9bc3f2c181c3464035a3dd78edb509158b7de3de01cc","component-name":"lib","build-by-default":true}]},{"pkg-name":"resourcet","pkg-version":"1.2.4.2","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"safe","pkg-version":"0.3.19","component-name":"lib","available":[{"id":"safe-0.3.19-51e71c14211a5a289b16e0d6b07ca550bda815589f5bf3e7d68eb5d66dbd69d4","component-name":"lib","build-by-default":true}]},{"pkg-name":"safe","pkg-version":"0.3.19","component-name":"test:safe-test","available":["TargetNotLocal"]},{"pkg-name":"scientific","pkg-version":"0.3.6.2","component-name":"lib","available":[{"id":"scientific-0.3.6.2-42e3b56e032df0ce79f9062afa301c4cf62b7891d5bcc06b2adf3c10aaa3a378","component-name":"lib","build-by-default":true}]},{"pkg-name":"scientific","pkg-version":"0.3.6.2","component-name":"test:test-scientific","available":["TargetNotLocal"]},{"pkg-name":"scientific","pkg-version":"0.3.6.2","component-name":"bench:bench-scientific","available":["TargetNotLocal"]},{"pkg-name":"semigroupoids","pkg-version":"5.3.4","component-name":"lib","available":[{"id":"semigroupoids-5.3.4-149842f32a584b89e1316295da35aa131274d2e9c2c7302c87f39990b9e3c118","component-name":"lib","build-by-default":true}]},{"pkg-name":"semigroupoids","pkg-version":"5.3.4","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"semigroups","pkg-version":"0.19.1","component-name":"lib","available":[{"id":"semigroups-0.19.1-9fc2a2aad08381bf3b7b83a5a7a86b5f9c4de3e16843376dbd6cd99e824757e1","component-name":"lib","build-by-default":true}]},{"pkg-name":"shelly","pkg-version":"1.9.0","component-name":"lib","available":[{"id":"shelly-1.9.0-d6d8c7f447b6bd65c18b3be6927750eb9dfd02f79324a8f06ca3bfa0bb425079","component-name":"lib","build-by-default":true}]},{"pkg-name":"shelly","pkg-version":"1.9.0","component-name":"exe:Color","available":["TargetNotBuildable"]},{"pkg-name":"shelly","pkg-version":"1.9.0","component-name":"exe:drain","available":["TargetNotBuildable"]},{"pkg-name":"shelly","pkg-version":"1.9.0","component-name":"exe:run-handles","available":["TargetNotBuildable"]},{"pkg-name":"shelly","pkg-version":"1.9.0","component-name":"test:shelly-testsuite","available":["TargetNotLocal"]},{"pkg-name":"simple-sendfile","pkg-version":"0.2.30","component-name":"lib","available":[{"id":"simple-sendfile-0.2.30-582c15ed93e6db542d7c9ac4cc6c2f444258db9ec8bd7a0210a901e1a1cdcb65","component-name":"lib","build-by-default":true}]},{"pkg-name":"simple-sendfile","pkg-version":"0.2.30","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"split","pkg-version":"0.2.3.4","component-name":"lib","available":[{"id":"split-0.2.3.4-b35824015585af9ca2cfc77c94ab6a24b60b6ac2cac313cec0606c2533291814","component-name":"lib","build-by-default":true}]},{"pkg-name":"split","pkg-version":"0.2.3.4","component-name":"test:split-tests","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"lib","available":[{"id":"splitmix-0.1.0.3-d6f6b66e6617160e1a17af8ff83c4d20299913bc8d11f722313ea9e9a089a3d3","component-name":"lib","build-by-default":true}]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"test:examples","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"test:initialization","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"test:montecarlo-pi","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"test:montecarlo-pi-32","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"test:splitmix-dieharder","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"test:splitmix-tests","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"bench:comparison","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"bench:range","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.3","component-name":"bench:simple-sum","available":["TargetNotLocal"]},{"pkg-name":"stm","pkg-version":"2.5.0.1","component-name":"lib","available":[{"id":"stm-2.5.0.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"streaming-commons","pkg-version":"0.2.2.1","component-name":"lib","available":[{"id":"streaming-commons-0.2.2.1-942cb4328612adafa73367d11a898b63952d40a880d771224be522f99e9b4d7d","component-name":"lib","build-by-default":true}]},{"pkg-name":"streaming-commons","pkg-version":"0.2.2.1","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"streaming-commons","pkg-version":"0.2.2.1","component-name":"bench:builder-to-bytestring-io","available":["TargetNotLocal"]},{"pkg-name":"streaming-commons","pkg-version":"0.2.2.1","component-name":"bench:count-chars","available":["TargetNotLocal"]},{"pkg-name":"streaming-commons","pkg-version":"0.2.2.1","component-name":"bench:decode-memory-usage","available":["TargetNotLocal"]},{"pkg-name":"stringsearch","pkg-version":"0.3.6.6","component-name":"lib","available":[{"id":"stringsearch-0.3.6.6-ed3c625583d8ef2c2cbb8a855cd2444fedee837a8e8140f5a903278226083f8e","component-name":"lib","build-by-default":true}]},{"pkg-name":"syb","pkg-version":"0.7.2.1","component-name":"lib","available":[{"id":"syb-0.7.2.1-f17324f538cc1a70b6242a24980d699ca900c553769879889ca40466f83fd57f","component-name":"lib","build-by-default":true}]},{"pkg-name":"syb","pkg-version":"0.7.2.1","component-name":"test:unit-tests","available":["TargetNotLocal"]},{"pkg-name":"tagged","pkg-version":"0.8.6.1","component-name":"lib","available":[{"id":"tagged-0.8.6.1-90fe6ab77927b221fb709757ad97b1ec8b6385ae75970a39cb1a5fcfc832cffd","component-name":"lib","build-by-default":true}]},{"pkg-name":"tar","pkg-version":"0.5.1.1","component-name":"lib","available":[{"id":"tar-0.5.1.1-643c87cd04d43966ba086abf693a99a6c8e6a74b2250a8c6db6f078672b95893","component-name":"lib","build-by-default":true}]},{"pkg-name":"tar","pkg-version":"0.5.1.1","component-name":"test:properties","available":["TargetNotLocal"]},{"pkg-name":"tar","pkg-version":"0.5.1.1","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"template-haskell","pkg-version":"2.16.0.0","component-name":"lib","available":[{"id":"template-haskell-2.16.0.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"temporary","pkg-version":"1.3","component-name":"lib","available":[{"id":"temporary-1.3-ff789bf78c36599a0a16db6158f62be122deb703e96987b84a1d080b3218a979","component-name":"lib","build-by-default":true}]},{"pkg-name":"temporary","pkg-version":"1.3","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"terminfo","pkg-version":"0.4.1.4","component-name":"lib","available":[{"id":"terminfo-0.4.1.4","component-name":"lib","build-by-default":true}]},{"pkg-name":"test-framework","pkg-version":"0.8.2.0","component-name":"lib","available":[{"id":"test-framework-0.8.2.0-4acaaf8eda1287dd7e779b387dd505fd725d0ee0383eeb97d73df9fa7ee5eb34","component-name":"lib","build-by-default":true}]},{"pkg-name":"test-framework","pkg-version":"0.8.2.0","component-name":"test:test-framework-tests","available":["TargetNotLocal"]},{"pkg-name":"test-framework-hunit","pkg-version":"0.3.0.2","component-name":"lib","available":[{"id":"test-framework-hunit-0.3.0.2-251703d47b62042b244e7d589c2a4bc1754ecd3c68d7d25fa52563917e5fb486","component-name":"lib","build-by-default":true}]},{"pkg-name":"text","pkg-version":"1.2.4.1","component-name":"lib","available":[{"id":"text-1.2.4.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"th-abstraction","pkg-version":"0.3.2.0","component-name":"lib","available":[{"id":"th-abstraction-0.3.2.0-d7dbeb8154b6dd18f43d59e413543ac1bec4c700d695dccb3dc6268af1544009","component-name":"lib","build-by-default":true}]},{"pkg-name":"th-abstraction","pkg-version":"0.3.2.0","component-name":"test:unit-tests","available":["TargetNotLocal"]},{"pkg-name":"th-compat","pkg-version":"0.1.2","component-name":"lib","available":[{"id":"th-compat-0.1.2-f673eb08c16520585c802ecd381034ab8705dd899881810ed7fc99b2b45167db","component-name":"lib","build-by-default":true}]},{"pkg-name":"th-compat","pkg-version":"0.1.2","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"time","pkg-version":"1.9.3","component-name":"lib","available":[{"id":"time-1.9.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"time-compat","pkg-version":"1.9.5","component-name":"lib","available":[{"id":"time-compat-1.9.5-71a65c2deb18d6d8d92b409212320e2c85df8b72a793ab4e2eb7c477a23b71f4","component-name":"lib","build-by-default":true}]},{"pkg-name":"time-compat","pkg-version":"1.9.5","component-name":"test:instances","available":["TargetNotLocal"]},{"pkg-name":"time-compat","pkg-version":"1.9.5","component-name":"test:main","available":["TargetNotLocal"]},{"pkg-name":"time-manager","pkg-version":"0.0.0","component-name":"lib","available":[{"id":"time-manager-0.0.0-bc7a85c82be20473dfe915bd8d3f3d3c39f4329684c4a119a5da74bba91eb38c","component-name":"lib","build-by-default":true}]},{"pkg-name":"transformers","pkg-version":"0.5.6.2","component-name":"lib","available":[{"id":"transformers-0.5.6.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"transformers-base","pkg-version":"0.4.5.2","component-name":"lib","available":[{"id":"transformers-base-0.4.5.2-f59c3b08e18ebf1e05bdd152225473dbafc17b3afcdc67346a6635ed5b4de427","component-name":"lib","build-by-default":true}]},{"pkg-name":"transformers-compat","pkg-version":"0.6.6","component-name":"lib","available":[{"id":"transformers-compat-0.6.6-c13045e1ff52ee93041fb029a1d9e9a05c37a0cb700d2c921faf08c34edcaede","component-name":"lib","build-by-default":true}]},{"pkg-name":"type-equality","pkg-version":"1","component-name":"lib","available":[{"id":"type-equality-1-4cd1419c88ebdbd4cd0a28c94eb2a79dd5234fbd3edbd50a599c817080638d8c","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix","pkg-version":"2.7.2.2","component-name":"lib","available":[{"id":"unix-2.7.2.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix-compat","pkg-version":"0.5.3","component-name":"lib","available":[{"id":"unix-compat-0.5.3-2bc2837e6f4bbc1b7104bd912ca92ab1f2ad1e42c984992d69f66d4dc3a997dd","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix-time","pkg-version":"0.4.7","component-name":"lib","available":[{"id":"unix-time-0.4.7-327f5b87b2611e066655cbb58cf346c1d0142212ed35f6a6dd6f01879cb86dc4","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix-time","pkg-version":"0.4.7","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"unix-time","pkg-version":"0.4.7","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"unliftio-core","pkg-version":"0.2.0.1","component-name":"lib","available":[{"id":"unliftio-core-0.2.0.1-d0855bd29dffa1bf2bc5c121ed96f93f42e3ddc4c54f561bd3f7a186584466ac","component-name":"lib","build-by-default":true}]},{"pkg-name":"unordered-containers","pkg-version":"0.2.13.0","component-name":"lib","available":[{"id":"unordered-containers-0.2.13.0-35460b21e441aeebe83724b11caf0fabc4c79c49a4c3453dc1ec91e4ce589e47","component-name":"lib","build-by-default":true}]},{"pkg-name":"unordered-containers","pkg-version":"0.2.13.0","component-name":"test:hashmap-lazy-properties","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.13.0","component-name":"test:hashmap-strict-properties","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.13.0","component-name":"test:hashset-properties","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.13.0","component-name":"test:list-tests","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.13.0","component-name":"test:regressions","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.13.0","component-name":"test:strictness-properties","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.13.0","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"uuid-types","pkg-version":"1.0.4","component-name":"lib","available":[{"id":"uuid-types-1.0.4-6086ee179fe2f1ed9da5bd809a02f7629168918177bc5196b524120354539813","component-name":"lib","build-by-default":true}]},{"pkg-name":"uuid-types","pkg-version":"1.0.4","component-name":"test:testuuid","available":["TargetNotLocal"]},{"pkg-name":"vault","pkg-version":"0.3.1.5","component-name":"lib","available":[{"id":"vault-0.3.1.5-e6aaa3e9286a9fe1f03f6431c42c07e12b49138cf64435197da23c125d649f30","component-name":"lib","build-by-default":true}]},{"pkg-name":"vector","pkg-version":"0.12.2.0","component-name":"lib","available":[{"id":"vector-0.12.2.0-84be1736eb2fdcccd3f3255cdd99deab0bc6b8c8104c444c17df2676a325d9a1","component-name":"lib","build-by-default":true}]},{"pkg-name":"vector","pkg-version":"0.12.2.0","component-name":"test:vector-doctest","available":["TargetNotLocal"]},{"pkg-name":"vector","pkg-version":"0.12.2.0","component-name":"test:vector-tests-O0","available":["TargetNotLocal"]},{"pkg-name":"vector","pkg-version":"0.12.2.0","component-name":"test:vector-tests-O2","available":["TargetNotLocal"]},{"pkg-name":"vector-algorithms","pkg-version":"0.8.0.4","component-name":"lib","available":[{"id":"vector-algorithms-0.8.0.4-d44a9018bc6e936bbaccd8d7592d9f20d5027e9444ae406c591e0aa8b143babb","component-name":"lib","build-by-default":true}]},{"pkg-name":"vector-algorithms","pkg-version":"0.8.0.4","component-name":"test:properties","available":["TargetNotLocal"]},{"pkg-name":"vector-algorithms","pkg-version":"0.8.0.4","component-name":"bench:simple-bench","available":["TargetNotLocal"]},{"pkg-name":"void","pkg-version":"0.7.3","component-name":"lib","available":[{"id":"void-0.7.3-a42d1eef0f87c637011e4d9f1374cf8032d62a9528998a747d2eddaf6d987c86","component-name":"lib","build-by-default":true}]},{"pkg-name":"wai","pkg-version":"3.2.3","component-name":"lib","available":[{"id":"wai-3.2.3-f78cd8b8b3b0191ae95f0a17d9e4679af13a09b5426dd7a64a7c2ee96cde9059","component-name":"lib","build-by-default":true}]},{"pkg-name":"wai","pkg-version":"3.2.3","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"wai-app-static","pkg-version":"3.1.7.2","component-name":"lib","available":[{"id":"wai-app-static-3.1.7.2-063d791ea745dac9aae85ff14de9fe9c456f6e85653b4f9f97a90b8a1e8555df","component-name":"lib","build-by-default":true}]},{"pkg-name":"wai-app-static","pkg-version":"3.1.7.2","component-name":"exe:warp","available":[{"id":"wai-app-static-3.1.7.2-e-warp-9901da3d600430101d53709ca6d58b231800bd28ed46206a1afc0ca453f2378d","component-name":"exe:warp","build-by-default":true}]},{"pkg-name":"wai-app-static","pkg-version":"3.1.7.2","component-name":"test:runtests","available":["TargetNotLocal"]},{"pkg-name":"wai-extra","pkg-version":"3.0.32","component-name":"lib","available":[{"id":"wai-extra-3.0.32-2aba6dc4516932801d14dbedbc45c653eab5b878ceb83d48aa3355f2e092b6a6","component-name":"lib","build-by-default":true}]},{"pkg-name":"wai-extra","pkg-version":"3.0.32","component-name":"exe:example","available":["TargetNotBuildable"]},{"pkg-name":"wai-extra","pkg-version":"3.0.32","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"wai-logger","pkg-version":"2.3.6","component-name":"lib","available":[{"id":"wai-logger-2.3.6-f95a799adae8b044547c71c6c74079de223418e3a072b5d2b6481746fbb66c46","component-name":"lib","build-by-default":true}]},{"pkg-name":"wai-logger","pkg-version":"2.3.6","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"wai-websockets","pkg-version":"3.0.1.2","component-name":"lib","available":[{"id":"wai-websockets-3.0.1.2-ff20345d458ca8ad8918f900d7cc52c9d7f4edf34f54ea9426ed0152b4129d9a","component-name":"lib","build-by-default":true}]},{"pkg-name":"wai-websockets","pkg-version":"3.0.1.2","component-name":"exe:wai-websockets-example","available":[{"id":"wai-websockets-3.0.1.2-e-wai-websockets-example-32a164fba5a85343fd9f1541ccd83e246f2d36cbcb031f06d2979c0db7bb49a7","component-name":"exe:wai-websockets-example","build-by-default":true}]},{"pkg-name":"warp","pkg-version":"3.3.14","component-name":"lib","available":[{"id":"warp-3.3.14-e75ca651b306735e7a4c986568378b5ab2592061a7a8b739ff4742530de5cc2f","component-name":"lib","build-by-default":true}]},{"pkg-name":"warp","pkg-version":"3.3.14","component-name":"test:doctest","available":["TargetNotLocal"]},{"pkg-name":"warp","pkg-version":"3.3.14","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"warp","pkg-version":"3.3.14","component-name":"bench:parser","available":["TargetNotLocal"]},{"pkg-name":"webdriver","pkg-version":"0.9.0.1","component-name":"lib","available":[{"id":"webdriver-0.9.0.1-35a56a29edc76894542404eac80a7216f880803a2f4567121fc370db555d5d3e","component-name":"lib","build-by-default":true}]},{"pkg-name":"websockets","pkg-version":"0.12.7.2","component-name":"lib","available":[{"id":"websockets-0.12.7.2-9a73545fb032fca4a3ff32d85cc5c4b62eac54762308714d8f3022bba46aa4e0","component-name":"lib","build-by-default":true}]},{"pkg-name":"websockets","pkg-version":"0.12.7.2","component-name":"exe:websockets-autobahn","available":["TargetNotBuildable"]},{"pkg-name":"websockets","pkg-version":"0.12.7.2","component-name":"exe:websockets-example","available":["TargetNotBuildable"]},{"pkg-name":"websockets","pkg-version":"0.12.7.2","component-name":"test:websockets-tests","available":["TargetNotLocal"]},{"pkg-name":"websockets","pkg-version":"0.12.7.2","component-name":"bench:bench-mask","available":["TargetNotLocal"]},{"pkg-name":"wl-pprint-text","pkg-version":"1.2.0.1","component-name":"lib","available":[{"id":"wl-pprint-text-1.2.0.1-f65bf92b2ca9aa1c1aba70c2a50d26c1a0a57919fafc7d735fbaf8708f5bf560","component-name":"lib","build-by-default":true}]},{"pkg-name":"word8","pkg-version":"0.1.3","component-name":"lib","available":[{"id":"word8-0.1.3-a52b0b2e8eaf12d4065c5bb0feed18420e66828a5f860b7767d8b6a9bf6c7dca","component-name":"lib","build-by-default":true}]},{"pkg-name":"word8","pkg-version":"0.1.3","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"word8","pkg-version":"0.1.3","component-name":"bench:criterion","available":["TargetNotLocal"]},{"pkg-name":"x509","pkg-version":"1.7.5","component-name":"lib","available":[{"id":"x509-1.7.5-70029ef763fd15a3a0f57750c5952e47a961410c40c88681736543158773ba8a","component-name":"lib","build-by-default":true}]},{"pkg-name":"x509","pkg-version":"1.7.5","component-name":"test:test-x509","available":["TargetNotLocal"]},{"pkg-name":"xhtml","pkg-version":"3000.2.2.1","component-name":"lib","available":[{"id":"xhtml-3000.2.2.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"xml","pkg-version":"1.3.14","component-name":"lib","available":[{"id":"xml-1.3.14-1aebc396e1d8eed7019387ea5aaacd1f989a750252a8ba709d99c0557b7fbbf5","component-name":"lib","build-by-default":true}]},{"pkg-name":"yaml","pkg-version":"0.11.5.0","component-name":"lib","available":[{"id":"yaml-0.11.5.0-f343c7e162c8d325f1d496c33d87fe89cf5a20b66600d096d0bf1e902e6baa1a","component-name":"lib","build-by-default":true}]},{"pkg-name":"yaml","pkg-version":"0.11.5.0","component-name":"exe:examples","available":["TargetNotBuildable"]},{"pkg-name":"yaml","pkg-version":"0.11.5.0","component-name":"exe:json2yaml","available":["TargetNotBuildable"]},{"pkg-name":"yaml","pkg-version":"0.11.5.0","component-name":"exe:yaml2json","available":["TargetNotBuildable"]},{"pkg-name":"yaml","pkg-version":"0.11.5.0","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"zip-archive","pkg-version":"0.4.1","component-name":"lib","available":[{"id":"zip-archive-0.4.1-0407cfd03f1387943c6ee463976a39a402f94cc5ad054a470b8a7b44d9890ae3","component-name":"lib","build-by-default":true}]},{"pkg-name":"zip-archive","pkg-version":"0.4.1","component-name":"exe:zip-archive","available":["TargetNotBuildable"]},{"pkg-name":"zip-archive","pkg-version":"0.4.1","component-name":"test:test-zip-archive","available":["TargetNotLocal"]},{"pkg-name":"zlib","pkg-version":"0.6.2.3","component-name":"lib","available":[{"id":"zlib-0.6.2.3-a637f3112bea0ad58c129e9e214d7009d480609a743e2473280eb8404869d423","component-name":"lib","build-by-default":true}]},{"pkg-name":"zlib","pkg-version":"0.6.2.3","component-name":"test:tests","available":["TargetNotLocal"]}]} \ No newline at end of file diff --git a/materialized/ghcjs/happy/ghc8107/plan.json b/materialized/ghcjs/happy/ghc8107/plan.json new file mode 100644 index 0000000000..aeb0dba3c1 --- /dev/null +++ b/materialized/ghcjs/happy/ghc8107/plan.json @@ -0,0 +1 @@ +{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-8.10.7","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.14.3.0"]},{"type":"pre-existing","id":"base-4.14.3.0","pkg-name":"base","pkg-version":"4.14.3.0","depends":["ghc-prim-0.6.1","integer-gmp-1.0.3.0"]},{"type":"pre-existing","id":"containers-0.6.5.1","pkg-name":"containers","pkg-version":"0.6.5.1","depends":["array-0.5.4.0","base-4.14.3.0","deepseq-1.4.4.0"]},{"type":"pre-existing","id":"deepseq-1.4.4.0","pkg-name":"deepseq","pkg-version":"1.4.4.0","depends":["array-0.5.4.0","base-4.14.3.0","ghc-prim-0.6.1"]},{"type":"pre-existing","id":"ghc-prim-0.6.1","pkg-name":"ghc-prim","pkg-version":"0.6.1","depends":[]},{"type":"configured","id":"happy-1.19.12-inplace-happy","pkg-name":"happy","pkg-version":"1.19.12","flags":{"small_base":true},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/happy-1.19.12/x/happy","build-info":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/happy-1.19.12/x/happy/build-info.json","depends":["array-0.5.4.0","base-4.14.3.0","containers-0.6.5.1","mtl-2.2.2"],"exe-depends":[],"component-name":"exe:happy","bin-file":"./dist-newstyle/build/x86_64-linux/ghc-8.10.7/happy-1.19.12/x/happy/build/happy/happy"},{"type":"pre-existing","id":"integer-gmp-1.0.3.0","pkg-name":"integer-gmp","pkg-version":"1.0.3.0","depends":["ghc-prim-0.6.1"]},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.14.3.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.14.3.0","ghc-prim-0.6.1"]}],"targets":[{"pkg-name":"array","pkg-version":"0.5.4.0","component-name":"lib","available":[{"id":"array-0.5.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base","pkg-version":"4.14.3.0","component-name":"lib","available":[{"id":"base-4.14.3.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"containers","pkg-version":"0.6.5.1","component-name":"lib","available":[{"id":"containers-0.6.5.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"deepseq","pkg-version":"1.4.4.0","component-name":"lib","available":[{"id":"deepseq-1.4.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-prim","pkg-version":"0.6.1","component-name":"lib","available":[{"id":"ghc-prim-0.6.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"happy","pkg-version":"1.19.12","component-name":"exe:happy","available":[{"id":"happy-1.19.12-inplace-happy","component-name":"exe:happy","build-by-default":true}]},{"pkg-name":"happy","pkg-version":"1.19.12","component-name":"test:tests","available":["TargetDisabledByUser"]},{"pkg-name":"integer-gmp","pkg-version":"1.0.3.0","component-name":"lib","available":[{"id":"integer-gmp-1.0.3.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"mtl","pkg-version":"2.2.2","component-name":"lib","available":[{"id":"mtl-2.2.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"transformers","pkg-version":"0.5.6.2","component-name":"lib","available":[{"id":"transformers-0.5.6.2","component-name":"lib","build-by-default":true}]}]} \ No newline at end of file diff --git a/materialized/happy-1.20.0/plan.json b/materialized/happy-1.20.0/plan.json new file mode 100644 index 0000000000..20e629b835 --- /dev/null +++ b/materialized/happy-1.20.0/plan.json @@ -0,0 +1 @@ +{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-9.0.2","os":"linux","arch":"x86_64","install-plan":[{"type":"pre-existing","id":"array-0.5.4.0","pkg-name":"array","pkg-version":"0.5.4.0","depends":["base-4.15.1.0"]},{"type":"pre-existing","id":"base-4.15.1.0","pkg-name":"base","pkg-version":"4.15.1.0","depends":["ghc-bignum-1.1","ghc-prim-0.7.0"]},{"type":"pre-existing","id":"containers-0.6.4.1","pkg-name":"containers","pkg-version":"0.6.4.1","depends":["array-0.5.4.0","base-4.15.1.0","deepseq-1.4.5.0"]},{"type":"pre-existing","id":"deepseq-1.4.5.0","pkg-name":"deepseq","pkg-version":"1.4.5.0","depends":["array-0.5.4.0","base-4.15.1.0","ghc-prim-0.7.0"]},{"type":"pre-existing","id":"ghc-bignum-1.1","pkg-name":"ghc-bignum","pkg-version":"1.1","depends":["ghc-prim-0.7.0"]},{"type":"pre-existing","id":"ghc-prim-0.7.0","pkg-name":"ghc-prim","pkg-version":"0.7.0","depends":[]},{"type":"configured","id":"happy-1.20.0-inplace-happy","pkg-name":"happy","pkg-version":"1.20.0","flags":{},"style":"local","pkg-src":{"type":"local","path":"./."},"dist-dir":"./dist-newstyle/build/x86_64-linux/ghc-9.0.2/happy-1.20.0/x/happy","build-info":"./dist-newstyle/build/x86_64-linux/ghc-9.0.2/happy-1.20.0/x/happy/build-info.json","depends":["array-0.5.4.0","base-4.15.1.0","containers-0.6.4.1","mtl-2.2.2"],"exe-depends":[],"component-name":"exe:happy","bin-file":"./dist-newstyle/build/x86_64-linux/ghc-9.0.2/happy-1.20.0/x/happy/build/happy/happy"},{"type":"pre-existing","id":"mtl-2.2.2","pkg-name":"mtl","pkg-version":"2.2.2","depends":["base-4.15.1.0","transformers-0.5.6.2"]},{"type":"pre-existing","id":"transformers-0.5.6.2","pkg-name":"transformers","pkg-version":"0.5.6.2","depends":["base-4.15.1.0","ghc-prim-0.7.0"]}],"targets":[{"pkg-name":"array","pkg-version":"0.5.4.0","component-name":"lib","available":[{"id":"array-0.5.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base","pkg-version":"4.15.1.0","component-name":"lib","available":[{"id":"base-4.15.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"containers","pkg-version":"0.6.4.1","component-name":"lib","available":[{"id":"containers-0.6.4.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"deepseq","pkg-version":"1.4.5.0","component-name":"lib","available":[{"id":"deepseq-1.4.5.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-bignum","pkg-version":"1.1","component-name":"lib","available":[{"id":"ghc-bignum-1.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-prim","pkg-version":"0.7.0","component-name":"lib","available":[{"id":"ghc-prim-0.7.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"happy","pkg-version":"1.20.0","component-name":"exe:happy","available":[{"id":"happy-1.20.0-inplace-happy","component-name":"exe:happy","build-by-default":true}]},{"pkg-name":"happy","pkg-version":"1.20.0","component-name":"test:tests","available":["TargetDisabledByUser"]},{"pkg-name":"mtl","pkg-version":"2.2.2","component-name":"lib","available":[{"id":"mtl-2.2.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"transformers","pkg-version":"0.5.6.2","component-name":"lib","available":[{"id":"transformers-0.5.6.2","component-name":"lib","build-by-default":true}]}]} \ No newline at end of file From aa834401b920136f4d3178719abc53573af400e5 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 18 Sep 2024 15:38:00 +1200 Subject: [PATCH 045/206] Bump nixpkgs-unstable and ghc911 --- flake.lock | 6 +++--- lazy-inputs/ghc911/flake.lock | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/flake.lock b/flake.lock index 2b032447ed..aeff46e437 100644 --- a/flake.lock +++ b/flake.lock @@ -557,11 +557,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1726481836, - "narHash": "sha256-MWTBH4dd5zIz2iatDb8IkqSjIeFum9jAqkFxgHLdzO4=", + "lastModified": 1726583932, + "narHash": "sha256-zACxiQx8knB3F8+Ze+1BpiYrI+CbhxyWpcSID9kVhkQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "20f9370d5f588fb8c72e844c54511cab054b5f40", + "rev": "658e7223191d2598641d50ee4e898126768fe847", "type": "github" }, "original": { diff --git a/lazy-inputs/ghc911/flake.lock b/lazy-inputs/ghc911/flake.lock index 6c61054fb6..7362cb589e 100644 --- a/lazy-inputs/ghc911/flake.lock +++ b/lazy-inputs/ghc911/flake.lock @@ -3,11 +3,11 @@ "ghc911": { "flake": false, "locked": { - "lastModified": 1718926152, - "narHash": "sha256-/8JCzx83juIl0ZZ68sYsc2BxVNy4XPXaGRkLz6w535I=", + "lastModified": 1726585445, + "narHash": "sha256-IdwQBex4boY6s0Plj5+ixf36rfYSUyMdTWrztKvZH30=", "ref": "refs/heads/master", - "rev": "c8a8727ef67a3212abbf9f928bef67dfef276adf", - "revCount": 66999, + "rev": "7fd9e5e29ab54eb406880077463e8552e2ddd39a", + "revCount": 67238, "submodules": true, "type": "git", "url": "https://gitlab.haskell.org/ghc/ghc" From 5ce8dedf7ea193ecd7a2a468d7d7f095dac65dea Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 18 Sep 2024 15:57:03 +1200 Subject: [PATCH 046/206] Simplify bootPkgs --- overlays/bootstrap.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index fbc931e845..e76611cef8 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -1006,7 +1006,7 @@ in { ({config, pkgs, ...}: { compilerSelection = p: p.haskell.compiler; version = "1.19.12"; - inherit version ghcOverride index-state; + inherit ghcOverride index-state; materialized = ../materialized/bootstrap + "/${buildBootstrapper.compilerNixName}/happy-${version}"; }); hscolour = (final.haskell-nix.hackage-package From f309e8230b6ed7fcce8a93dd324bef72086541df Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 18 Sep 2024 15:58:03 +1200 Subject: [PATCH 047/206] Simplify bootPkgs --- overlays/bootstrap.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index e76611cef8..2dbb7923cd 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -1007,7 +1007,7 @@ in { compilerSelection = p: p.haskell.compiler; version = "1.19.12"; inherit ghcOverride index-state; - materialized = ../materialized/bootstrap + "/${buildBootstrapper.compilerNixName}/happy-${version}"; + materialized = ../materialized/bootstrap + "/${buildBootstrapper.compilerNixName}/happy-1.19.12"; }); hscolour = (final.haskell-nix.hackage-package ({config, pkgs, ...}: { From 366a923eb90812b4fec4a96822aeb3f2dc4c564c Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 19 Sep 2024 11:39:00 +1200 Subject: [PATCH 048/206] Update ghc911 --- lazy-inputs/ghc911/flake.lock | 8 ++++---- overlays/bootstrap.nix | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lazy-inputs/ghc911/flake.lock b/lazy-inputs/ghc911/flake.lock index 7362cb589e..1e883aec87 100644 --- a/lazy-inputs/ghc911/flake.lock +++ b/lazy-inputs/ghc911/flake.lock @@ -3,11 +3,11 @@ "ghc911": { "flake": false, "locked": { - "lastModified": 1726585445, - "narHash": "sha256-IdwQBex4boY6s0Plj5+ixf36rfYSUyMdTWrztKvZH30=", + "lastModified": 1726660620, + "narHash": "sha256-A+vKrnt0dC9mA6vIUjeAneo6oHL/5JHmnFw/zD2K/q0=", "ref": "refs/heads/master", - "rev": "7fd9e5e29ab54eb406880077463e8552e2ddd39a", - "revCount": 67238, + "rev": "35eb4f428ab72b712ea78d6ef86b956e321c3bb2", + "revCount": 67241, "submodules": true, "type": "git", "url": "https://gitlab.haskell.org/ghc/ghc" diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 2dbb7923cd..548c11c07c 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -81,7 +81,7 @@ in { # Try to avoid reordering the patches unless a patch is added or changed that # will be applied to most versions of the GHC anyway (reordering the patches # results in rebuilds of GHC and reduces sharing in /nix/store). - in always ./patches/ghc/dll-loader-8.4.2.patch # https://gitlab.haskell.org/ghc/ghc/merge_requests/949 -- open + in until "9.11" ./patches/ghc/dll-loader-8.4.2.patch # https://gitlab.haskell.org/ghc/ghc/merge_requests/949 -- open ++ until "9.2" ./patches/ghc/ghc-8.4.3-Cabal2201-no-hackage-tests.patch # ? ++ until "9.2" ./patches/ghc/cabal-host.patch # https://github.com/haskell/cabal/issues/5887 ++ fromUntil "9.2" "9.4" ./patches/ghc/ghc-9.2-cabal-host.patch # https://github.com/haskell/cabal/issues/5887 From e76e58972709d0b3fc5178240665f18db95b21ec Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 19 Sep 2024 18:49:17 +1200 Subject: [PATCH 049/206] Reduce the number of compilers tested --- ci.nix | 20 +++++++++----------- test/plugin/default.nix | 2 +- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/ci.nix b/ci.nix index 59727de473..b6346c086e 100644 --- a/ci.nix +++ b/ci.nix @@ -62,19 +62,17 @@ # from here (so that is no longer cached) also remove ./materialized/ghcXXX. # Update supported-ghc-versions.md to reflect any changes made here. nixpkgs.lib.optionalAttrs (nixpkgsName == "R2405") { - ghc94 = false; ghc96 = false; ghc98 = false; } // nixpkgs.lib.optionalAttrs (nixpkgsName == "unstable") { ghc810 = true; - ghc90 = false; - ghc92 = true; - ghc94 = true; + ghc92 = false; + ghc94 = false; ghc96 = true; - ghc96llvm = true; ghc98 = true; - ghc98llvm = true; + ghc98llvm = false; ghc910 = true; + ghc910llvm = true; ghc911 = true; }))); crossSystems = nixpkgsName: nixpkgs: compiler-nix-name: @@ -85,21 +83,21 @@ && (__match ".*llvm" compiler-nix-name == null) && ((system == "x86_64-linux" && !builtins.elem compiler-nix-name ["ghc884" "ghc902" "ghc928" "ghc948"]) || (system == "aarch64-linux" && !builtins.elem compiler-nix-name ["ghc884" "ghc902" "ghc928" "ghc948"]) - || (system == "x86_64-darwin" && !builtins.elem compiler-nix-name ["ghc884" "ghc902" "ghc928" "ghc948"]) - || (system == "aarch64-darwin" && !builtins.elem compiler-nix-name ["ghc884" "ghc902" "ghc928" "ghc948"]) + || (system == "x86_64-darwin" && !builtins.elem compiler-nix-name ["ghc884" "ghc902" "ghc928" "ghc948" "ghc966" "ghc982"]) + || (system == "aarch64-darwin" && !builtins.elem compiler-nix-name ["ghc884" "ghc902" "ghc928" "ghc948" "ghc966" "ghc982"]) )) { inherit (lib.systems.examples) ghcjs; } // lib.optionalAttrs ( (__match ".*llvm" compiler-nix-name == null) - && ((system == "x86_64-linux" && !builtins.elem compiler-nix-name ["ghc884" "ghc91120240620"]) # Including GHC HEAD here because the patches for rts/RtsSymbols.c no longer apply and mingwW64 GHC build fails without them + && ((system == "x86_64-linux" && !builtins.elem compiler-nix-name ["ghc884" "ghc902" "ghc928" "ghc91120240918"]) # Including GHC HEAD here because the patches for rts/RtsSymbols.c no longer apply and mingwW64 GHC build fails without them || (system == "x86_64-darwin" && builtins.elem compiler-nix-name []))) { # TODO add ghc versions when we have more darwin build capacity inherit (lib.systems.examples) mingwW64; } // lib.optionalAttrs (nixpkgsName == "unstable" && (__match ".*llvm" compiler-nix-name == null) - && ((system == "x86_64-linux" && !builtins.elem compiler-nix-name ["ghc884" "ghc8107" "ghc902" "ghc928"]) + && ((system == "x86_64-linux" && !builtins.elem compiler-nix-name ["ghc884" "ghc8107" "ghc902" "ghc928" "ghc948"]) || (system == "x86_64-darwin" && builtins.elem compiler-nix-name []))) { # TODO add ghc versions when we have more darwin build capacity inherit (lib.systems.examples) ucrt64; - } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc884"]) { + } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc884" "ghc902" "ghc928" "ghc948"]) { # Musl cross only works on linux # aarch64 cross only works on linux inherit (lib.systems.examples) musl64 aarch64-multiplatform; diff --git a/test/plugin/default.nix b/test/plugin/default.nix index a0ec112075..893e85de42 100644 --- a/test/plugin/default.nix +++ b/test/plugin/default.nix @@ -20,7 +20,7 @@ in recurseIntoAttrs { # Not sure why this breaks for ghc 8.10.7 meta.disabled = compiler-nix-name == "ghc8107" - || builtins.elem compiler-nix-name [ "ghc91120240620" ] + || builtins.elem compiler-nix-name [ "ghc91120240918" ] || stdenv.hostPlatform.isMusl || stdenv.hostPlatform.isGhcjs || stdenv.hostPlatform.isWindows From 915aaf4b0185bf4cb8916ba13d7165610ae854c9 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 19 Sep 2024 21:33:47 +1200 Subject: [PATCH 050/206] Bump llvm for ghc >=9.10 --- overlays/bootstrap.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 548c11c07c..fdb2e5a70c 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -832,8 +832,8 @@ in { }; inherit sphinx; - buildLlvmPackages = final.buildPackages.llvmPackages_12; - llvmPackages = final.llvmPackages_12; + buildLlvmPackages = final.buildPackages.llvmPackages_15; + llvmPackages = final.llvmPackages_15; src-spec.file = final.haskell-nix.sources.ghc9101; src-spec.version = "9.10.1"; @@ -868,8 +868,8 @@ in { }; inherit sphinx; - buildLlvmPackages = final.buildPackages.llvmPackages_12; - llvmPackages = final.llvmPackages_12; + buildLlvmPackages = final.buildPackages.llvmPackages_15; + llvmPackages = final.llvmPackages_15; src-spec.file = src; src-spec.version = version; From cac7369b85e68b89469ee1a72f9d860f15ca0304 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 19 Sep 2024 23:15:32 +1200 Subject: [PATCH 051/206] Update patch upper bounds --- overlays/bootstrap.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index fdb2e5a70c..2b816de04d 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -183,8 +183,8 @@ in { ++ onAarch64 (until "9.0" ./patches/ghc/ghc-8.10-better-symbol-addr-debug.patch) ++ onAarch64 (until "9.0" ./patches/ghc/ghc-8.10-aarch64-handle-none-rela.patch) ++ onWindows (until "9.0" ./patches/ghc/5b08e0c06e038448a63aa9bd7f163b23d824ba4b.patch) - ++ onAarch64 (from "9.0" ./patches/ghc/ghc-9.0-better-symbol-addr-debug.patch) - ++ onAarch64 (from "9.0" ./patches/ghc/ghc-9.0-aarch64-handle-none-rela.patch) + ++ onAarch64 (fromUntil "9.0" "9.11" ./patches/ghc/ghc-9.0-better-symbol-addr-debug.patch) + ++ onAarch64 (fromUntil "9.0" "9.11" ./patches/ghc/ghc-9.0-aarch64-handle-none-rela.patch) ++ onWindows (fromUntil "9.6.3" "9.6.4" ./patches/ghc/ghc-9.6-hadrian-splitsections.patch) ++ onWindows (fromUntil "9.8.1" "9.8.2" ./patches/ghc/ghc-9.6-hadrian-splitsections.patch) From b9150b021bf79f52abb161704428cf534df8e62d Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 20 Sep 2024 00:26:11 +1200 Subject: [PATCH 052/206] Include clang for useLLVM GHC --- compiler/ghc/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 414e20341a..679a689839 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -232,7 +232,7 @@ let if targetPlatform.isGhcjs then [ buildPackages.emscripten ] else if hostPlatform == buildPlatform - then [ targetPackages.stdenv.cc ] ++ lib.optional useLLVM llvmPackages.llvm + then [ targetPackages.stdenv.cc ] ++ lib.optionals useLLVM [llvmPackages.llvm llvmPackages.clang] else assert targetPlatform == hostPlatform; # build != host == target [ stdenv.cc ] ++ lib.optional useLLVM buildLlvmPackages.llvm; From a9e6f397699abcf71347a6f68fd2d9c53c13c6a6 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 20 Sep 2024 00:37:15 +1200 Subject: [PATCH 053/206] ifdLevel 1 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 333cbfd5b9..ced3c36cab 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 0; + ifdLevel = 1; runningHydraEvalTest = false; compiler = "ghc928"; config = import ./config.nix; From d8b5cc77abaec60eaed50a57892539db0b3a3edf Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 20 Sep 2024 09:47:44 +1200 Subject: [PATCH 054/206] Add materialized files --- .../ghc9101llvm-aarch64/base.nix | 34 ++++++++ .../ghc9101llvm-aarch64/deriveConstants.nix | 39 +++++++++ .../ghc9101llvm-aarch64/genprimopcode.nix | 40 +++++++++ .../ghc9101llvm-aarch64/ghc-bignum.nix | 37 +++++++++ .../ghc9101llvm-aarch64/ghc-boot.nix | 47 +++++++++++ .../ghc9101llvm-aarch64/ghc-heap.nix | 36 +++++++++ .../ghc9101llvm-aarch64/ghc-internal.nix | 49 +++++++++++ .../ghc9101llvm-aarch64/ghc-platform.nix | 31 +++++++ .../ghc9101llvm-aarch64/ghc-prim.nix | 47 +++++++++++ .../ghc9101llvm-aarch64/ghc.nix | 81 +++++++++++++++++++ .../ghc9101llvm-aarch64/ghci.nix | 45 +++++++++++ .../ghc9101llvm-aarch64/hpc.nix | 38 +++++++++ .../ghc9101llvm-aarch64/integer-gmp.nix | 36 +++++++++ .../ghc9101llvm-aarch64/iserv.nix | 41 ++++++++++ .../ghc9101llvm-aarch64/remote-iserv.nix | 36 +++++++++ .../ghc9101llvm-aarch64/template-haskell.nix | 36 +++++++++ .../ghc9101llvm/base.nix | 34 ++++++++ .../ghc9101llvm/deriveConstants.nix | 39 +++++++++ .../ghc9101llvm/genprimopcode.nix | 40 +++++++++ .../ghc9101llvm/ghc-bignum.nix | 37 +++++++++ .../ghc9101llvm/ghc-boot.nix | 47 +++++++++++ .../ghc9101llvm/ghc-heap.nix | 36 +++++++++ .../ghc9101llvm/ghc-internal.nix | 49 +++++++++++ .../ghc9101llvm/ghc-platform.nix | 31 +++++++ .../ghc9101llvm/ghc-prim.nix | 47 +++++++++++ .../ghc-boot-packages-nix/ghc9101llvm/ghc.nix | 81 +++++++++++++++++++ .../ghc9101llvm/ghci.nix | 45 +++++++++++ .../ghc-boot-packages-nix/ghc9101llvm/hpc.nix | 38 +++++++++ .../ghc9101llvm/integer-gmp.nix | 36 +++++++++ .../ghc9101llvm/iserv.nix | 41 ++++++++++ .../ghc9101llvm/remote-iserv.nix | 36 +++++++++ .../ghc9101llvm/template-haskell.nix | 36 +++++++++ 32 files changed, 1346 insertions(+) create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/base.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/deriveConstants.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/genprimopcode.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-bignum.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-boot.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-heap.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-internal.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-platform.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-prim.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghci.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/hpc.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/integer-gmp.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/iserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/remote-iserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/template-haskell.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm/base.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm/deriveConstants.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm/genprimopcode.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-bignum.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-boot.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-heap.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-internal.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-platform.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-prim.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm/ghc.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm/ghci.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm/hpc.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm/integer-gmp.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm/iserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm/remote-iserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc9101llvm/template-haskell.nix diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/base.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/base.nix new file mode 100644 index 0000000000..6587385f50 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/base.nix @@ -0,0 +1,34 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "base"; version = "4.20.0.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "Core Libraries Committee "; + author = ""; + homepage = ""; + url = ""; + synopsis = "Core data structures and operations"; + description = "Haskell's base library provides, among other things, core types (e.g. [Bool](\"Data.Bool\") and [Int](\"Data.Int\")),\ndata structures (e.g. [List](\"Data.List\"), [Tuple](\"Data.Tuple\") and [Maybe](\"Data.Maybe\")),\nthe [Exception](\"Control.Exception\") mechanism, and the [IO](\"System.IO\") & [Concurrency](\"Control.Concurrent\") operations.\nThe \"Prelude\" module, which is imported by default, exposes a curated set of types and functions from other modules.\n\nOther data structures like [Map](https://hackage.haskell.org/package/containers/docs/Data-Map.html),\n[Set](https://hackage.haskell.org/package/containers/docs/Data-Set.html) are available in the [containers](https://hackage.haskell.org/package/containers) library.\nTo work with textual data, use the [text](https://hackage.haskell.org/package/text/docs/Data-Text.html) library."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."ghc-internal" or (errorHandler.buildDepError "ghc-internal")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/deriveConstants.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/deriveConstants.nix new file mode 100644 index 0000000000..135cdd02f6 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/deriveConstants.nix @@ -0,0 +1,39 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "deriveConstants"; version = "0.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Derive header files containing various constants for the GHC build process"; + description = "This utility is responsible for generating a number of C header files\nneeded during the GHC build process. See @rts/include/ghc.mk@ in the GHC\nbuild system for details."; + buildType = "Simple"; + }; + components = { + exes = { + "deriveConstants" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."process" or (errorHandler.buildDepError "process")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/genprimopcode.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/genprimopcode.nix new file mode 100644 index 0000000000..49bbe516ba --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/genprimopcode.nix @@ -0,0 +1,40 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { build-tool-depends = true; }; + package = { + specVersion = "2.0"; + identifier = { name = "genprimopcode"; version = "0.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Generates various files implementing GHC's primitive operations."; + description = "This utility reads a textual description of GHC's primitive operations\n(@primops.txt.pp@) and produces a number of outputs. These include,\n\n* the @GHC.Prim@ module included in the @ghc-prim@ package.\n* the @GHC.PrimopWrappers@ module included in the @ghc-prim@ package.\n* an LaTeX document describing the primitive operations."; + buildType = "Simple"; + }; + components = { + exes = { + "genprimopcode" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + ]; + build-tools = pkgs.lib.optionals (flags.build-tool-depends) [ + (hsPkgs.pkgsBuildBuild.alex.components.exes.alex or (pkgs.pkgsBuildBuild.alex or (errorHandler.buildToolDepError "alex:alex"))) + (hsPkgs.pkgsBuildBuild.happy.components.exes.happy or (pkgs.pkgsBuildBuild.happy or (errorHandler.buildToolDepError "happy:happy"))) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-bignum.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-bignum.nix new file mode 100644 index 0000000000..46af6e0e9f --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-bignum.nix @@ -0,0 +1,37 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { native = false; ffi = false; gmp = false; check = false; }; + package = { + specVersion = "2.0"; + identifier = { name = "ghc-bignum"; version = "1.3"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = "Sylvain Henry"; + homepage = ""; + url = ""; + synopsis = "GHC BigNum library"; + description = "This package provides the low-level implementation of the standard\n'BigNat', 'Natural' and 'Integer' types."; + buildType = "Configure"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + ]; + buildable = (if !flags.native && !flags.gmp && !flags.ffi + then false + else true) && (if flags.native && (flags.gmp || flags.ffi) + then false + else true) && (if flags.gmp && flags.ffi then false else true); + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-boot.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-boot.nix new file mode 100644 index 0000000000..15e674919f --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-boot.nix @@ -0,0 +1,47 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-boot"; version = "9.10.1"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Shared functionality between GHC and its boot libraries"; + description = "This library is shared between GHC, ghc-pkg, and other boot\nlibraries.\n.\nA note about \"GHC.Unit.Database\": it only deals with the subset of\nthe package database that the compiler cares about: modules\npaths etc and not package metadata like description, authors\netc. It is thus not a library interface to ghc-pkg and is *not*\nsuitable for modifying GHC package databases.\n.\nThe package database format and this library are constructed in\nsuch a way that while ghc-pkg depends on Cabal, the GHC library\nand program do not have to depend on Cabal."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + ]; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghc-platform" or (errorHandler.buildDepError "ghc-platform")) + (hsPkgs."ghc-boot-th" or (errorHandler.buildDepError "ghc-boot-th")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-heap.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-heap.nix new file mode 100644 index 0000000000..4eeb9a331b --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-heap.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-heap"; version = "9.10.1"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Functions for walking GHC's heap"; + description = "This package provides functions for walking the GHC heap data structures\nand retrieving information about those data structures."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + ] ++ pkgs.lib.optional (compiler.isGhc && compiler.version.ge "9.9") (hsPkgs."ghc-internal" or (errorHandler.buildDepError "ghc-internal")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-internal.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-internal.nix new file mode 100644 index 0000000000..fe7b871e5a --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-internal.nix @@ -0,0 +1,49 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-internal"; version = "9.1001.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "Core Libraries Committee "; + author = ""; + homepage = ""; + url = ""; + synopsis = "Basic libraries"; + description = "This package contains the Standard Haskell \"Prelude\" and its support libraries,\nand a large collection of useful libraries ranging from data\nstructures to parsing combinators and debugging utilities."; + buildType = "Configure"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."ghc-bignum" or (errorHandler.buildDepError "ghc-bignum")) + ]; + libs = pkgs.lib.optionals (system.isWindows) [ + (pkgs."wsock32" or (errorHandler.sysDepError "wsock32")) + (pkgs."user32" or (errorHandler.sysDepError "user32")) + (pkgs."shell32" or (errorHandler.sysDepError "shell32")) + (pkgs."mingw32" or (errorHandler.sysDepError "mingw32")) + (pkgs."kernel32" or (errorHandler.sysDepError "kernel32")) + (pkgs."advapi32" or (errorHandler.sysDepError "advapi32")) + (pkgs."mingwex" or (errorHandler.sysDepError "mingwex")) + (pkgs."ws2_32" or (errorHandler.sysDepError "ws2_32")) + (pkgs."shlwapi" or (errorHandler.sysDepError "shlwapi")) + (pkgs."ole32" or (errorHandler.sysDepError "ole32")) + (pkgs."rpcrt4" or (errorHandler.sysDepError "rpcrt4")) + (pkgs."ntdll" or (errorHandler.sysDepError "ntdll")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-platform.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-platform.nix new file mode 100644 index 0000000000..9a99aece09 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-platform.nix @@ -0,0 +1,31 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-platform"; version = "0.1.0.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = "Rodrigo Mesquita"; + homepage = ""; + url = ""; + synopsis = "Platform information used by GHC and friends"; + description = ""; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ (hsPkgs."base" or (errorHandler.buildDepError "base")) ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-prim.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-prim.nix new file mode 100644 index 0000000000..546c5704d0 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc-prim.nix @@ -0,0 +1,47 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { need-atomic = false; }; + package = { + specVersion = "2.2"; + identifier = { name = "ghc-prim"; version = "0.11.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "GHC primitives"; + description = "This package contains the primitive types and operations supplied by GHC.\nIt is an internal package, only for the use of GHC developers.\nGHC users should not use it! If you do use it then expect\nbreaking changes at any time without warning. You should prefer\nto import @GHC.Exts@ from the @base@ package instead."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.process or (pkgs.pkgsBuildBuild.process or (errorHandler.setupDepError "process"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + ]; + }; + components = { + "library" = { + depends = [ (hsPkgs."rts" or (errorHandler.buildDepError "rts")) ]; + libs = (pkgs.lib.optionals (system.isWindows) [ + (pkgs."user32" or (errorHandler.sysDepError "user32")) + (pkgs."mingw32" or (errorHandler.sysDepError "mingw32")) + (pkgs."mingwex" or (errorHandler.sysDepError "mingwex")) + (pkgs."ucrt" or (errorHandler.sysDepError "ucrt")) + ] ++ pkgs.lib.optionals (system.isLinux) [ + (pkgs."c" or (errorHandler.sysDepError "c")) + (pkgs."m" or (errorHandler.sysDepError "m")) + ]) ++ pkgs.lib.optional (flags.need-atomic) (pkgs."atomic" or (errorHandler.sysDepError "atomic")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc.nix new file mode 100644 index 0000000000..177131f35c --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghc.nix @@ -0,0 +1,81 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { + internal-interpreter = false; + dynamic-system-linker = true; + build-tool-depends = true; + with-libzstd = false; + static-libzstd = false; + hadrian-stage0 = false; + }; + package = { + specVersion = "2.2"; + identifier = { name = "ghc"; version = "9.10.1"; }; + 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"; + 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.\n\nSee \nfor more information.\n\n__This package is not PVP-compliant.__\n\nThis package directly exposes GHC internals, which can and do change with\nevery release."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.process or (pkgs.pkgsBuildBuild.process or (errorHandler.setupDepError "process"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + (hsPkgs.pkgsBuildBuild.containers or (pkgs.pkgsBuildBuild.containers or (errorHandler.setupDepError "containers"))) + ]; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."process" or (errorHandler.buildDepError "process")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) + (hsPkgs."hpc" or (errorHandler.buildDepError "hpc")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + (hsPkgs."exceptions" or (errorHandler.buildDepError "exceptions")) + (hsPkgs."semaphore-compat" or (errorHandler.buildDepError "semaphore-compat")) + (hsPkgs."stm" or (errorHandler.buildDepError "stm")) + (hsPkgs."ghc-boot" or (errorHandler.buildDepError "ghc-boot")) + (hsPkgs."ghc-heap" or (errorHandler.buildDepError "ghc-heap")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ] ++ (if system.isWindows + then [ (hsPkgs."Win32" or (errorHandler.buildDepError "Win32")) ] + else [ (hsPkgs."unix" or (errorHandler.buildDepError "unix")) ]); + libs = pkgs.lib.optionals (flags.with-libzstd) (if flags.static-libzstd + then pkgs.lib.optional (!system.isOsx) (pkgs.":libzstd.a" or (errorHandler.sysDepError ":libzstd.a")) + else [ (pkgs."zstd" or (errorHandler.sysDepError "zstd")) ]); + build-tools = pkgs.lib.optionals (flags.build-tool-depends) [ + (hsPkgs.pkgsBuildBuild.alex.components.exes.alex or (pkgs.pkgsBuildBuild.alex or (errorHandler.buildToolDepError "alex:alex"))) + (hsPkgs.pkgsBuildBuild.happy.components.exes.happy or (pkgs.pkgsBuildBuild.happy or (errorHandler.buildToolDepError "happy:happy"))) + (hsPkgs.pkgsBuildBuild.genprimopcode.components.exes.genprimopcode or (pkgs.pkgsBuildBuild.genprimopcode or (errorHandler.buildToolDepError "genprimopcode:genprimopcode"))) + (hsPkgs.pkgsBuildBuild.deriveConstants.components.exes.deriveConstants or (pkgs.pkgsBuildBuild.deriveConstants or (errorHandler.buildToolDepError "deriveConstants:deriveConstants"))) + ]; + buildable = if flags.with-libzstd + then if flags.static-libzstd + then if system.isOsx then false else true + else true + else true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghci.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghci.nix new file mode 100644 index 0000000000..d709146815 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/ghci.nix @@ -0,0 +1,45 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { internal-interpreter = false; }; + package = { + specVersion = "1.10"; + identifier = { name = "ghci"; version = "9.10.1"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "The library supporting GHC's interactive interpreter"; + 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"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."ghc-boot" or (errorHandler.buildDepError "ghc-boot")) + (hsPkgs."ghc-heap" or (errorHandler.buildDepError "ghc-heap")) + (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/hpc.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/hpc.nix new file mode 100644 index 0000000000..f27cdbe473 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/hpc.nix @@ -0,0 +1,38 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "2.2"; + identifier = { name = "hpc"; version = "0.7.0.1"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = "Andy Gill"; + homepage = ""; + url = ""; + synopsis = "Code Coverage Library for Haskell"; + description = "This package provides the code coverage library for Haskell.\n\nSee for more\ninformation."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/integer-gmp.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/integer-gmp.nix new file mode 100644 index 0000000000..8594679a59 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/integer-gmp.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "2.0"; + identifier = { name = "integer-gmp"; version = "1.1"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "hvr@gnu.org"; + author = "Herbert Valerio Riedel"; + homepage = "https://www.haskell.org/ghc/"; + url = ""; + synopsis = "Integer library based on GMP"; + description = "This package used to provide an implementation of the standard 'Integer'\ntype based on the\n.\n\nIt is now deprecated in favor of the 'ghc-bignum' package.\n\nIts purpose is to provide backward compatibility for codes directly\ndepending on the `integer-gmp` package."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."ghc-bignum" or (errorHandler.buildDepError "ghc-bignum")) + (hsPkgs."ghc-internal" or (errorHandler.buildDepError "ghc-internal")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/iserv.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/iserv.nix new file mode 100644 index 0000000000..07aef2d361 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/iserv.nix @@ -0,0 +1,41 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "iserv"; version = "9.10.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "iserv allows GHC to delegate Template Haskell computations"; + description = "GHC can be provided with a path to the iserv binary with\n@-pgmi=/path/to/iserv-bin@, and will in combination with\n@-fexternal-interpreter@, compile Template Haskell though the\n@iserv-bin@ delegate. This is very similar to how ghcjs has been\ncompiling Template Haskell, by spawning a separate delegate (so\ncalled runner on the javascript vm) and evaluating the splices\nthere."; + buildType = "Simple"; + }; + components = { + exes = { + "iserv" = { + depends = [ + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/remote-iserv.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/remote-iserv.nix new file mode 100644 index 0000000000..69711f6e83 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/remote-iserv.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "remote-iserv"; version = "9.10.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "Moritz Angermann "; + author = "Moritz Angermann "; + homepage = ""; + url = ""; + synopsis = "iserv allows GHC to delegate Template Haskell computations"; + description = "This is a very simple remote runner for iserv, to be used together\nwith iserv-proxy. The foundamental idea is that this this wrapper\nstarts running the GHCi server on a given port to which iserv-proxy will\nthen connect."; + buildType = "Simple"; + }; + components = { + exes = { + "remote-iserv" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/template-haskell.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/template-haskell.nix new file mode 100644 index 0000000000..b975251e7e --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm-aarch64/template-haskell.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "template-haskell"; version = "2.22.0.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Support library for Template Haskell"; + description = "This package provides modules containing facilities for manipulating\nHaskell source code using Template Haskell.\n\nSee for more\ninformation."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-boot-th" or (errorHandler.buildDepError "ghc-boot-th")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."pretty" or (errorHandler.buildDepError "pretty")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm/base.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm/base.nix new file mode 100644 index 0000000000..6587385f50 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm/base.nix @@ -0,0 +1,34 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "base"; version = "4.20.0.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "Core Libraries Committee "; + author = ""; + homepage = ""; + url = ""; + synopsis = "Core data structures and operations"; + description = "Haskell's base library provides, among other things, core types (e.g. [Bool](\"Data.Bool\") and [Int](\"Data.Int\")),\ndata structures (e.g. [List](\"Data.List\"), [Tuple](\"Data.Tuple\") and [Maybe](\"Data.Maybe\")),\nthe [Exception](\"Control.Exception\") mechanism, and the [IO](\"System.IO\") & [Concurrency](\"Control.Concurrent\") operations.\nThe \"Prelude\" module, which is imported by default, exposes a curated set of types and functions from other modules.\n\nOther data structures like [Map](https://hackage.haskell.org/package/containers/docs/Data-Map.html),\n[Set](https://hackage.haskell.org/package/containers/docs/Data-Set.html) are available in the [containers](https://hackage.haskell.org/package/containers) library.\nTo work with textual data, use the [text](https://hackage.haskell.org/package/text/docs/Data-Text.html) library."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."ghc-internal" or (errorHandler.buildDepError "ghc-internal")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm/deriveConstants.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm/deriveConstants.nix new file mode 100644 index 0000000000..135cdd02f6 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm/deriveConstants.nix @@ -0,0 +1,39 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "deriveConstants"; version = "0.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Derive header files containing various constants for the GHC build process"; + description = "This utility is responsible for generating a number of C header files\nneeded during the GHC build process. See @rts/include/ghc.mk@ in the GHC\nbuild system for details."; + buildType = "Simple"; + }; + components = { + exes = { + "deriveConstants" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."process" or (errorHandler.buildDepError "process")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm/genprimopcode.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm/genprimopcode.nix new file mode 100644 index 0000000000..49bbe516ba --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm/genprimopcode.nix @@ -0,0 +1,40 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { build-tool-depends = true; }; + package = { + specVersion = "2.0"; + identifier = { name = "genprimopcode"; version = "0.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Generates various files implementing GHC's primitive operations."; + description = "This utility reads a textual description of GHC's primitive operations\n(@primops.txt.pp@) and produces a number of outputs. These include,\n\n* the @GHC.Prim@ module included in the @ghc-prim@ package.\n* the @GHC.PrimopWrappers@ module included in the @ghc-prim@ package.\n* an LaTeX document describing the primitive operations."; + buildType = "Simple"; + }; + components = { + exes = { + "genprimopcode" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + ]; + build-tools = pkgs.lib.optionals (flags.build-tool-depends) [ + (hsPkgs.pkgsBuildBuild.alex.components.exes.alex or (pkgs.pkgsBuildBuild.alex or (errorHandler.buildToolDepError "alex:alex"))) + (hsPkgs.pkgsBuildBuild.happy.components.exes.happy or (pkgs.pkgsBuildBuild.happy or (errorHandler.buildToolDepError "happy:happy"))) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-bignum.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-bignum.nix new file mode 100644 index 0000000000..46af6e0e9f --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-bignum.nix @@ -0,0 +1,37 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { native = false; ffi = false; gmp = false; check = false; }; + package = { + specVersion = "2.0"; + identifier = { name = "ghc-bignum"; version = "1.3"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = "Sylvain Henry"; + homepage = ""; + url = ""; + synopsis = "GHC BigNum library"; + description = "This package provides the low-level implementation of the standard\n'BigNat', 'Natural' and 'Integer' types."; + buildType = "Configure"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + ]; + buildable = (if !flags.native && !flags.gmp && !flags.ffi + then false + else true) && (if flags.native && (flags.gmp || flags.ffi) + then false + else true) && (if flags.gmp && flags.ffi then false else true); + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-boot.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-boot.nix new file mode 100644 index 0000000000..15e674919f --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-boot.nix @@ -0,0 +1,47 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-boot"; version = "9.10.1"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Shared functionality between GHC and its boot libraries"; + description = "This library is shared between GHC, ghc-pkg, and other boot\nlibraries.\n.\nA note about \"GHC.Unit.Database\": it only deals with the subset of\nthe package database that the compiler cares about: modules\npaths etc and not package metadata like description, authors\netc. It is thus not a library interface to ghc-pkg and is *not*\nsuitable for modifying GHC package databases.\n.\nThe package database format and this library are constructed in\nsuch a way that while ghc-pkg depends on Cabal, the GHC library\nand program do not have to depend on Cabal."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + ]; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghc-platform" or (errorHandler.buildDepError "ghc-platform")) + (hsPkgs."ghc-boot-th" or (errorHandler.buildDepError "ghc-boot-th")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-heap.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-heap.nix new file mode 100644 index 0000000000..4eeb9a331b --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-heap.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-heap"; version = "9.10.1"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Functions for walking GHC's heap"; + description = "This package provides functions for walking the GHC heap data structures\nand retrieving information about those data structures."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + ] ++ pkgs.lib.optional (compiler.isGhc && compiler.version.ge "9.9") (hsPkgs."ghc-internal" or (errorHandler.buildDepError "ghc-internal")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-internal.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-internal.nix new file mode 100644 index 0000000000..fe7b871e5a --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-internal.nix @@ -0,0 +1,49 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-internal"; version = "9.1001.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "Core Libraries Committee "; + author = ""; + homepage = ""; + url = ""; + synopsis = "Basic libraries"; + description = "This package contains the Standard Haskell \"Prelude\" and its support libraries,\nand a large collection of useful libraries ranging from data\nstructures to parsing combinators and debugging utilities."; + buildType = "Configure"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."ghc-bignum" or (errorHandler.buildDepError "ghc-bignum")) + ]; + libs = pkgs.lib.optionals (system.isWindows) [ + (pkgs."wsock32" or (errorHandler.sysDepError "wsock32")) + (pkgs."user32" or (errorHandler.sysDepError "user32")) + (pkgs."shell32" or (errorHandler.sysDepError "shell32")) + (pkgs."mingw32" or (errorHandler.sysDepError "mingw32")) + (pkgs."kernel32" or (errorHandler.sysDepError "kernel32")) + (pkgs."advapi32" or (errorHandler.sysDepError "advapi32")) + (pkgs."mingwex" or (errorHandler.sysDepError "mingwex")) + (pkgs."ws2_32" or (errorHandler.sysDepError "ws2_32")) + (pkgs."shlwapi" or (errorHandler.sysDepError "shlwapi")) + (pkgs."ole32" or (errorHandler.sysDepError "ole32")) + (pkgs."rpcrt4" or (errorHandler.sysDepError "rpcrt4")) + (pkgs."ntdll" or (errorHandler.sysDepError "ntdll")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-platform.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-platform.nix new file mode 100644 index 0000000000..9a99aece09 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-platform.nix @@ -0,0 +1,31 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-platform"; version = "0.1.0.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = "Rodrigo Mesquita"; + homepage = ""; + url = ""; + synopsis = "Platform information used by GHC and friends"; + description = ""; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ (hsPkgs."base" or (errorHandler.buildDepError "base")) ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-prim.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-prim.nix new file mode 100644 index 0000000000..546c5704d0 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc-prim.nix @@ -0,0 +1,47 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { need-atomic = false; }; + package = { + specVersion = "2.2"; + identifier = { name = "ghc-prim"; version = "0.11.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "GHC primitives"; + description = "This package contains the primitive types and operations supplied by GHC.\nIt is an internal package, only for the use of GHC developers.\nGHC users should not use it! If you do use it then expect\nbreaking changes at any time without warning. You should prefer\nto import @GHC.Exts@ from the @base@ package instead."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.process or (pkgs.pkgsBuildBuild.process or (errorHandler.setupDepError "process"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + ]; + }; + components = { + "library" = { + depends = [ (hsPkgs."rts" or (errorHandler.buildDepError "rts")) ]; + libs = (pkgs.lib.optionals (system.isWindows) [ + (pkgs."user32" or (errorHandler.sysDepError "user32")) + (pkgs."mingw32" or (errorHandler.sysDepError "mingw32")) + (pkgs."mingwex" or (errorHandler.sysDepError "mingwex")) + (pkgs."ucrt" or (errorHandler.sysDepError "ucrt")) + ] ++ pkgs.lib.optionals (system.isLinux) [ + (pkgs."c" or (errorHandler.sysDepError "c")) + (pkgs."m" or (errorHandler.sysDepError "m")) + ]) ++ pkgs.lib.optional (flags.need-atomic) (pkgs."atomic" or (errorHandler.sysDepError "atomic")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc.nix new file mode 100644 index 0000000000..177131f35c --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm/ghc.nix @@ -0,0 +1,81 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { + internal-interpreter = false; + dynamic-system-linker = true; + build-tool-depends = true; + with-libzstd = false; + static-libzstd = false; + hadrian-stage0 = false; + }; + package = { + specVersion = "2.2"; + identifier = { name = "ghc"; version = "9.10.1"; }; + 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"; + 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.\n\nSee \nfor more information.\n\n__This package is not PVP-compliant.__\n\nThis package directly exposes GHC internals, which can and do change with\nevery release."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.process or (pkgs.pkgsBuildBuild.process or (errorHandler.setupDepError "process"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + (hsPkgs.pkgsBuildBuild.containers or (pkgs.pkgsBuildBuild.containers or (errorHandler.setupDepError "containers"))) + ]; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."process" or (errorHandler.buildDepError "process")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) + (hsPkgs."hpc" or (errorHandler.buildDepError "hpc")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + (hsPkgs."exceptions" or (errorHandler.buildDepError "exceptions")) + (hsPkgs."semaphore-compat" or (errorHandler.buildDepError "semaphore-compat")) + (hsPkgs."stm" or (errorHandler.buildDepError "stm")) + (hsPkgs."ghc-boot" or (errorHandler.buildDepError "ghc-boot")) + (hsPkgs."ghc-heap" or (errorHandler.buildDepError "ghc-heap")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ] ++ (if system.isWindows + then [ (hsPkgs."Win32" or (errorHandler.buildDepError "Win32")) ] + else [ (hsPkgs."unix" or (errorHandler.buildDepError "unix")) ]); + libs = pkgs.lib.optionals (flags.with-libzstd) (if flags.static-libzstd + then pkgs.lib.optional (!system.isOsx) (pkgs.":libzstd.a" or (errorHandler.sysDepError ":libzstd.a")) + else [ (pkgs."zstd" or (errorHandler.sysDepError "zstd")) ]); + build-tools = pkgs.lib.optionals (flags.build-tool-depends) [ + (hsPkgs.pkgsBuildBuild.alex.components.exes.alex or (pkgs.pkgsBuildBuild.alex or (errorHandler.buildToolDepError "alex:alex"))) + (hsPkgs.pkgsBuildBuild.happy.components.exes.happy or (pkgs.pkgsBuildBuild.happy or (errorHandler.buildToolDepError "happy:happy"))) + (hsPkgs.pkgsBuildBuild.genprimopcode.components.exes.genprimopcode or (pkgs.pkgsBuildBuild.genprimopcode or (errorHandler.buildToolDepError "genprimopcode:genprimopcode"))) + (hsPkgs.pkgsBuildBuild.deriveConstants.components.exes.deriveConstants or (pkgs.pkgsBuildBuild.deriveConstants or (errorHandler.buildToolDepError "deriveConstants:deriveConstants"))) + ]; + buildable = if flags.with-libzstd + then if flags.static-libzstd + then if system.isOsx then false else true + else true + else true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm/ghci.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm/ghci.nix new file mode 100644 index 0000000000..d709146815 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm/ghci.nix @@ -0,0 +1,45 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { internal-interpreter = false; }; + package = { + specVersion = "1.10"; + identifier = { name = "ghci"; version = "9.10.1"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "The library supporting GHC's interactive interpreter"; + 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"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."ghc-boot" or (errorHandler.buildDepError "ghc-boot")) + (hsPkgs."ghc-heap" or (errorHandler.buildDepError "ghc-heap")) + (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm/hpc.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm/hpc.nix new file mode 100644 index 0000000000..f27cdbe473 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm/hpc.nix @@ -0,0 +1,38 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "2.2"; + identifier = { name = "hpc"; version = "0.7.0.1"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = "Andy Gill"; + homepage = ""; + url = ""; + synopsis = "Code Coverage Library for Haskell"; + description = "This package provides the code coverage library for Haskell.\n\nSee for more\ninformation."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm/integer-gmp.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm/integer-gmp.nix new file mode 100644 index 0000000000..8594679a59 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm/integer-gmp.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "2.0"; + identifier = { name = "integer-gmp"; version = "1.1"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "hvr@gnu.org"; + author = "Herbert Valerio Riedel"; + homepage = "https://www.haskell.org/ghc/"; + url = ""; + synopsis = "Integer library based on GMP"; + description = "This package used to provide an implementation of the standard 'Integer'\ntype based on the\n.\n\nIt is now deprecated in favor of the 'ghc-bignum' package.\n\nIts purpose is to provide backward compatibility for codes directly\ndepending on the `integer-gmp` package."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."ghc-bignum" or (errorHandler.buildDepError "ghc-bignum")) + (hsPkgs."ghc-internal" or (errorHandler.buildDepError "ghc-internal")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm/iserv.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm/iserv.nix new file mode 100644 index 0000000000..07aef2d361 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm/iserv.nix @@ -0,0 +1,41 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "iserv"; version = "9.10.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "iserv allows GHC to delegate Template Haskell computations"; + description = "GHC can be provided with a path to the iserv binary with\n@-pgmi=/path/to/iserv-bin@, and will in combination with\n@-fexternal-interpreter@, compile Template Haskell though the\n@iserv-bin@ delegate. This is very similar to how ghcjs has been\ncompiling Template Haskell, by spawning a separate delegate (so\ncalled runner on the javascript vm) and evaluating the splices\nthere."; + buildType = "Simple"; + }; + components = { + exes = { + "iserv" = { + depends = [ + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm/remote-iserv.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm/remote-iserv.nix new file mode 100644 index 0000000000..69711f6e83 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm/remote-iserv.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "remote-iserv"; version = "9.10.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "Moritz Angermann "; + author = "Moritz Angermann "; + homepage = ""; + url = ""; + synopsis = "iserv allows GHC to delegate Template Haskell computations"; + description = "This is a very simple remote runner for iserv, to be used together\nwith iserv-proxy. The foundamental idea is that this this wrapper\nstarts running the GHCi server on a given port to which iserv-proxy will\nthen connect."; + buildType = "Simple"; + }; + components = { + exes = { + "remote-iserv" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc9101llvm/template-haskell.nix b/materialized/ghc-boot-packages-nix/ghc9101llvm/template-haskell.nix new file mode 100644 index 0000000000..b975251e7e --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc9101llvm/template-haskell.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "template-haskell"; version = "2.22.0.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Support library for Template Haskell"; + description = "This package provides modules containing facilities for manipulating\nHaskell source code using Template Haskell.\n\nSee for more\ninformation."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-boot-th" or (errorHandler.buildDepError "ghc-boot-th")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."pretty" or (errorHandler.buildDepError "pretty")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } From 852d6c7f9701164228c30c730c9b027958b76d0d Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 20 Sep 2024 09:54:50 +1200 Subject: [PATCH 055/206] Disable haskell-gi-overloading (it's too slow to build) --- test/gi-gtk/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/gi-gtk/default.nix b/test/gi-gtk/default.nix index 7567264cff..aebd4c552b 100644 --- a/test/gi-gtk/default.nix +++ b/test/gi-gtk/default.nix @@ -8,6 +8,8 @@ let inherit compiler-nix-name evalPackages; src = testSrc "gi-gtk"; cabalProjectLocal = builtins.readFile ../cabal.project.local + '' + -- The overloading feature of haskell-gi makes build times very long + constraints: haskell-gi-overloading ==0.0 if impl(ghc >=9.11) constraints: filepath source ''; From 2a3d7f2443eb06b72bce3bd5e7277e4aa465c380 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 20 Sep 2024 10:14:49 +1200 Subject: [PATCH 056/206] Update patch upper bound --- overlays/bootstrap.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 2b816de04d..0125b188f6 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -126,7 +126,7 @@ in { ++ onWindows (fromUntil "9.6.3" "9.11" ./patches/ghc/ghc-9.8-hadrian-win-cross.patch) # support R_X86_64_PC64 (ELF constant 24) - IMAGE_REL_AMD64_SREL32 (PE constant 14), which seems to appear with 9.6 more frequently, and # results in "unhandled PEi386 relocation type 14". - ++ onWindows (fromUntil "9.4.1" "9.12" ./patches/ghc/win-reloc-x86_64-pc64.patch) + ++ onWindows (fromUntil "9.4.1" "9.11" ./patches/ghc/win-reloc-x86_64-pc64.patch) # ++ onWindows (fromUntil "9.4.1" "9.10" ./patches/ghc/Win32-depends-on-mingwex.patch) # if the host system provides ucrt (e.g. wine with ucrtbase.dll), we may end up linking against symbols from ucrtbase, instead of msvcrt, # thus leading to broken code. E.g. the handles we create and hand to wine will all be busted, because they come from one and are processed From 26e6735b58c5f6d43cce413f05800bb9096257c6 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 20 Sep 2024 13:00:21 +1200 Subject: [PATCH 057/206] ifdLevel 2 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index ced3c36cab..62ae19c1e0 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 1; + ifdLevel = 2; runningHydraEvalTest = false; compiler = "ghc928"; config = import ./config.nix; From 663ae4f8e6d7c48c4fc8730c24d816b9968759d9 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 20 Sep 2024 23:18:30 +1200 Subject: [PATCH 058/206] Fixes for GHC HEAD --- lib/call-cabal-project-to-nix.nix | 76 ++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/lib/call-cabal-project-to-nix.nix b/lib/call-cabal-project-to-nix.nix index dde71b0b18..f51b870b9a 100644 --- a/lib/call-cabal-project-to-nix.nix +++ b/lib/call-cabal-project-to-nix.nix @@ -396,6 +396,7 @@ let # GHCJS 8.10 does not have these "Cabal-syntax" "exceptions" + "file-io" "ghc" "ghc-bignum" "ghc-experimental" @@ -422,6 +423,79 @@ let evalPackages.jq ]; } (let varname = x: builtins.replaceStrings ["-"] ["_"] x; in '' + PACKAGE_VERSION=${ghc.version} + ProjectVersion=${ghc.version} + + # The following logic is from GHC m4/setup_project_version.m4 + + # Split PACKAGE_VERSION into (possibly empty) parts + VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/^\([^.]*\)\(\.\{0,1\}\(.*\)\)$/\1'/` + VERSION_TMP=`echo $PACKAGE_VERSION | sed 's/^\([^.]*\)\(\.\{0,1\}\(.*\)\)$/\3'/` + VERSION_MINOR=`echo $VERSION_TMP | sed 's/^\([^.]*\)\(\.\{0,1\}\(.*\)\)$/\1'/` + ProjectPatchLevel=`echo $VERSION_TMP | sed 's/^\([^.]*\)\(\.\{0,1\}\(.*\)\)$/\3'/` + + # Calculate project version as an integer, using 2 digits for minor version + case $VERSION_MINOR in + ?) ProjectVersionInt=''${VERSION_MAJOR}0''${VERSION_MINOR} ;; + ??) ProjectVersionInt=''${VERSION_MAJOR}''${VERSION_MINOR} ;; + *) echo bad minor version in $PACKAGE_VERSION; exit 1 ;; + esac + # AC_SUBST([ProjectVersionInt]) + + # The project patchlevel is zero unless stated otherwise + test -z "$ProjectPatchLevel" && ProjectPatchLevel=0 + + # Save split version of ProjectPatchLevel + ProjectPatchLevel1=`echo $ProjectPatchLevel | sed 's/^\([^.]*\)\(\.\{0,1\}\(.*\)\)$/\1/'` + ProjectPatchLevel2=`echo $ProjectPatchLevel | sed 's/^\([^.]*\)\(\.\{0,1\}\(.*\)\)$/\3/'` + + # The project patchlevel1/2 is zero unless stated otherwise + test -z "$ProjectPatchLevel1" && ProjectPatchLevel1=0 + test -z "$ProjectPatchLevel2" && ProjectPatchLevel2=0 + + # AC_SUBST([ProjectPatchLevel1]) + # AC_SUBST([ProjectPatchLevel2]) + + # Remove dots from the patch level; this allows us to have versions like 6.4.1.20050508 + ProjectPatchLevel=`echo $ProjectPatchLevel | sed 's/\.//'` + + # AC_SUBST([ProjectPatchLevel]) + + # The version of the GHC package changes every day, since the + # patchlevel is the current date. We don't want to force + # recompilation of the entire compiler when this happens, so for + # GHC HEAD we omit the patchlevel from the package version number. + # + # The ProjectPatchLevel1 > 20000000 iff GHC HEAD. If it's for a stable + # release like 7.10.1 or for a release candidate such as 7.10.1.20141224 + # then we don't omit the patchlevel components. + + ProjectVersionMunged="$ProjectVersion" + if test "$ProjectPatchLevel1" -gt 20000000; then + ProjectVersionMunged="''${VERSION_MAJOR}.''${VERSION_MINOR}" + fi + # AC_SUBST([ProjectVersionMunged]) + + # The version used for libraries tightly coupled with GHC (e.g. + # ghc-internal) which need a major version bump for every minor/patchlevel + # GHC version. + # Example: for GHC=9.10.1, ProjectVersionForLib=9.1001 + # + # Just like with project version munged, we don't want to use the + # patchlevel version which changes every day, so if using GHC HEAD, the + # patchlevel = 00. + case $VERSION_MINOR in + ?) ProjectVersionForLibUpperHalf=''${VERSION_MAJOR}.0''${VERSION_MINOR} ;; + ??) ProjectVersionForLibUpperHalf=''${VERSION_MAJOR}.''${VERSION_MINOR} ;; + *) echo bad minor version in $PACKAGE_VERSION; exit 1 ;; + esac + # GHC HEAD uses patch level version > 20000000 + case $ProjectPatchLevel1 in + ?) ProjectVersionForLib=''${ProjectVersionForLibUpperHalf}0''${ProjectPatchLevel1} ;; + ??) ProjectVersionForLib=''${ProjectVersionForLibUpperHalf}''${ProjectPatchLevel1} ;; + *) ProjectVersionForLib=''${ProjectVersionForLibUpperHalf}00 + esac + PKGS="" ${pkgs.lib.concatStrings (builtins.map (name: '' @@ -441,7 +515,7 @@ let fi if [[ "$cabal_file" != "" ]]; then fixed_cabal_file=$(mktemp) - cat $cabal_file | sed -e 's/@ProjectVersionMunged@/${ghc.version}/g' -e 's/default: *@[A-Za-z0-9]*@/default: False/g' -e 's/@Suffix@//g' > $fixed_cabal_file + cat $cabal_file | sed -e "s/@ProjectVersionMunged@/$ProjectVersionMunged/g" -e "s/@ProjectVersionForLib@/$ProjectVersionForLib/g" -e 's/default: *@[A-Za-z0-9]*@/default: False/g' -e 's/@Suffix@//g' > $fixed_cabal_file json_cabal_file=$(mktemp) cabal2json $fixed_cabal_file > $json_cabal_file From 2f22c3135c7e0d3a8ee6c67312c0ee504731a2a9 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sat, 21 Sep 2024 10:47:25 +1200 Subject: [PATCH 059/206] ifdLevel 3 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 62ae19c1e0..15ee49425d 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 2; + ifdLevel = 3; runningHydraEvalTest = false; compiler = "ghc928"; config = import ./config.nix; From 7600b7ff43807da4141fb99abcf264320a6c762f Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sat, 21 Sep 2024 22:00:50 +1200 Subject: [PATCH 060/206] Fixes for GHC HEAD --- lib/load-cabal-plan.nix | 3 ++- test/cabal.project.local | 9 ++++++++- test/call-cabal-project-to-nix/default.nix | 13 +++++++++---- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/lib/load-cabal-plan.nix b/lib/load-cabal-plan.nix index 39407838f2..5cab78138d 100644 --- a/lib/load-cabal-plan.nix +++ b/lib/load-cabal-plan.nix @@ -92,7 +92,8 @@ in { } // pkgs.lib.optionalAttrs (p.pkg-src.type or "" == "source-repo") { # Replace the source repository packages with versions created when # parsing the `cabal.project` file. - src = pkgs.lib.lists.elemAt callProjectResults.sourceRepos (pkgs.lib.strings.toInt p.pkg-src.source-repo.location) + "/${p.pkg-src.source-repo.subdir}"; + src = pkgs.lib.lists.elemAt callProjectResults.sourceRepos (pkgs.lib.strings.toInt p.pkg-src.source-repo.location) + + pkgs.lib.optionalString (p.pkg-src.source-repo.subdir != ".") "/${p.pkg-src.source-repo.subdir}"; } // pkgs.lib.optionalAttrs (cabal2nix ? package-description-override && p.pkg-version == cabal2nix.package.identifier.version) { # Use the `.cabal` file from the `Cabal2Nix` if it for the matching # version of the package (the one in the plan). diff --git a/test/cabal.project.local b/test/cabal.project.local index 0ef494c263..3adc2626ba 100644 --- a/test/cabal.project.local +++ b/test/cabal.project.local @@ -14,6 +14,13 @@ allow-newer: hsc2hs:* if impl(ghc >=9.10.1) extra-packages: process +if impl(ghc >=9.11) + source-repository-package + type: git + location: https://github.com/hamishmack/extra.git + tag: 3cced868b7f270acb90b7064d34e2d4c5952ca48 + --sha256: sha256-e2JHNRvkpws18dWmc+RUPWEESX+LV9W0u25dCG2e8ws= + repository head.hackage.ghc.haskell.org url: https://ghc.gitlab.haskell.org/head.hackage/ secure: True @@ -22,7 +29,7 @@ repository head.hackage.ghc.haskell.org f76d08be13e9a61a377a85e2fb63f4c5435d40f8feb3e12eb05905edb8cdea89 26021a13b401500c8eb2761ca95c61f2d625bfef951b939a8124ed12ecf07329 7541f32a4ccca4f97aea3b22f5e593ba2c0267546016b992dfadcd2fe944e55d - --sha256: sha256-yyYXGnFwUr6MaUEXz6odRv+IJMCmAZioN5dz3LbY1n4= + --sha256: sha256-Z4NrYC11bsuJp4IPy6cRoFQ03wLAPEaejM9Y52n4EHk= repository ghcjs-overlay url: https://raw.githubusercontent.com/input-output-hk/hackage-overlay-ghcjs/d37efd733666d090bf1c83bf7d5f9cb71b1dacc1 diff --git a/test/call-cabal-project-to-nix/default.nix b/test/call-cabal-project-to-nix/default.nix index 44662853d1..40423c8b07 100644 --- a/test/call-cabal-project-to-nix/default.nix +++ b/test/call-cabal-project-to-nix/default.nix @@ -1,4 +1,4 @@ -{ stdenv, lib, buildPackages, mkCabalProjectPkgSet, callCabalProjectToNix, importAndFilterProject, recurseIntoAttrs, haskellLib, testSrc, compiler-nix-name, evalPackages }: +{ stdenv, lib, buildPackages, mkCabalProjectPkgSet, callCabalProjectToNix, loadCabalPlan, recurseIntoAttrs, haskellLib, testSrc, compiler-nix-name, evalPackages }: with lib; @@ -15,11 +15,16 @@ let ''; }; pkgSet = mkCabalProjectPkgSet { - plan-pkgs = importAndFilterProject { - inherit (callProjectResults) projectNix sourceRepos src; + plan-pkgs = loadCabalPlan { + inherit callProjectResults; + selectedCompiler = buildPackages.haskell-nix.compiler.${compiler-nix-name}; }; + inherit compiler-nix-name; inherit (callProjectResults) extra-hackages; - modules = [{ inherit evalPackages; }]; + modules = [{ + inherit evalPackages; + compiler.nix-name = compiler-nix-name; + }]; }; packages = pkgSet.config.hsPkgs; From caec44be77d24077d90b08be7deb7ba0c1c2e94b Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 23 Sep 2024 11:49:58 +1200 Subject: [PATCH 061/206] Fix supported-languages for GHC HEAD --- lib/supported-languages.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/supported-languages.nix b/lib/supported-languages.nix index 58748ab6e1..ee5ba8f194 100644 --- a/lib/supported-languages.nix +++ b/lib/supported-languages.nix @@ -308,5 +308,9 @@ evalPackages.writeTextFile { ${pkgs.lib.optionalString (builtins.compareVersions ghc.version "9.11" >=0) '' OrPatterns NoOrPatterns + MultilineStrings + NoMultilineStrings + NamedDefaults + NoNamedDefaults ''}''; } From d55ec23d1bac0364a289305316bbbf312b12300e Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 23 Sep 2024 13:09:20 +1200 Subject: [PATCH 062/206] More fixes for GHC HEAD --- test/cabal-simple/default.nix | 7 +++++-- test/cabal.project.local | 15 +++++---------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/test/cabal-simple/default.nix b/test/cabal-simple/default.nix index 9fd0b7e42a..c98578cfe6 100644 --- a/test/cabal-simple/default.nix +++ b/test/cabal-simple/default.nix @@ -31,8 +31,11 @@ in recurseIntoAttrs { # Used for testing externally with nix-shell (../tests.sh). test-shell = (project.shellFor { - tools = { cabal = { cabalProjectLocal = builtins.readFile ../cabal.project.local; }; }; - withHoogle = !__elem compiler-nix-name ["ghc901" "ghc902" "ghc921" "ghc922" "ghc923" "ghc924" "ghc925" "ghc926" "ghc927"]; + tools = { + cabal = { cabalProjectLocal = builtins.readFile ../cabal.project.local; }; + hoogle = { cabalProjectLocal = builtins.readFile ../cabal.project.local; }; + }; + withHoogle = true; }).overrideAttrs (_: _: { meta = rec { platforms = lib.platforms.all; diff --git a/test/cabal.project.local b/test/cabal.project.local index 3adc2626ba..db3a1f6521 100644 --- a/test/cabal.project.local +++ b/test/cabal.project.local @@ -7,6 +7,8 @@ if impl(ghc>=9.10.1) if impl(ghc > 9.11) allow-newer: *:containers, *:time constraints: base-compat >=0.14.0, aeson >=2.2.1.0 + -- From https://ghc.gitlab.haskell.org/head.hackage/cabal.constraints + constraints: extra ==1.7.14 -- This prevents hsc2hs from causing old versions of packages from being added to plan.json allow-newer: hsc2hs:* @@ -14,13 +16,6 @@ allow-newer: hsc2hs:* if impl(ghc >=9.10.1) extra-packages: process -if impl(ghc >=9.11) - source-repository-package - type: git - location: https://github.com/hamishmack/extra.git - tag: 3cced868b7f270acb90b7064d34e2d4c5952ca48 - --sha256: sha256-e2JHNRvkpws18dWmc+RUPWEESX+LV9W0u25dCG2e8ws= - repository head.hackage.ghc.haskell.org url: https://ghc.gitlab.haskell.org/head.hackage/ secure: True @@ -29,14 +24,14 @@ repository head.hackage.ghc.haskell.org f76d08be13e9a61a377a85e2fb63f4c5435d40f8feb3e12eb05905edb8cdea89 26021a13b401500c8eb2761ca95c61f2d625bfef951b939a8124ed12ecf07329 7541f32a4ccca4f97aea3b22f5e593ba2c0267546016b992dfadcd2fe944e55d - --sha256: sha256-Z4NrYC11bsuJp4IPy6cRoFQ03wLAPEaejM9Y52n4EHk= + --sha256: sha256-VFRuIfs3k6nyLVvT445wFRDy+bpcy1LVmLCMg1Oo/uE= repository ghcjs-overlay - url: https://raw.githubusercontent.com/input-output-hk/hackage-overlay-ghcjs/d37efd733666d090bf1c83bf7d5f9cb71b1dacc1 + url: https://raw.githubusercontent.com/input-output-hk/hackage-overlay-ghcjs/01ecad22c0a72e3c5a49262357cf0b062892d87f secure: True root-keys: key-threshold: 0 - --sha256: sha256-6I5mu1QFdvWFm6jWOUMKGm3VHvB7vSqiBjjHgAZJReo= + --sha256: sha256-BjyXYh6oS4wE1iHlY/7as7vkmjxFOXzK6nOYzbzjQrM= if os(ghcjs) extra-packages: ghci From c20f0c015ca01b2d287f4751626946f1867f5c1e Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 23 Sep 2024 17:43:09 +1200 Subject: [PATCH 063/206] Possible fix for plugin failure on aarch64-darwin --- compiler/ghc/default.nix | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 679a689839..0ff2b458b6 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -362,14 +362,8 @@ let # Sometimes we have to dispatch between the bintools wrapper and the unwrapped # derivation for certain tools depending on the platform. bintoolsFor = { - # GHC needs install_name_tool on all darwin platforms. On aarch64-darwin it is - # part of the bintools wrapper (due to codesigning requirements), but not on - # x86_64-darwin. - install_name_tool = - if stdenv.targetPlatform.isAarch64 - then targetCC.bintools - else targetCC.bintools.bintools; - # Same goes for strip. + # GHC needs install_name_tool on all darwin platforms. + install_name_tool = targetCC.bintools.bintools; strip = # TODO(@sternenseemann): also use wrapper if linker == "bfd" or "gold" if stdenv.targetPlatform.isAarch64 From 7ac6c38d4161378b1fe1b09ec0aec60b92e257e3 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 24 Sep 2024 09:18:55 +1200 Subject: [PATCH 064/206] ifdLevel 0 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 15ee49425d..333cbfd5b9 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 3; + ifdLevel = 0; runningHydraEvalTest = false; compiler = "ghc928"; config = import ./config.nix; From b0c2fb31a757e472a5718fc8dffe046140292976 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 24 Sep 2024 09:28:00 +1200 Subject: [PATCH 065/206] ifdLevel 3 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 333cbfd5b9..15ee49425d 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 0; + ifdLevel = 3; runningHydraEvalTest = false; compiler = "ghc928"; config = import ./config.nix; From 7a225bc64476bb0ba2f1b967bd189524286881d9 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 24 Sep 2024 14:16:34 +1200 Subject: [PATCH 066/206] Add emar and emranlib to ghc js builds --- compiler/ghc/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 0ff2b458b6..8af70ecc68 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -401,7 +401,9 @@ stdenv.mkDerivation (rec { export CC="${targetCC}/bin/emcc" export CXX="${targetCC}/bin/em++" export LD="${targetCC}/bin/emcc" + export AR="${targetCC}/bin/emar" export NM="${targetCC}/share/emscripten/emnm" + export RANLIB="${targetCC}/bin/emranlib" export EM_CACHE=$(mktemp -d) mv config.sub.ghcjs config.sub '' From de5afd71b584302792a377281f0bf132c9d01ca0 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 24 Sep 2024 14:17:04 +1200 Subject: [PATCH 067/206] Fix `repo-tar` downloads --- lib/load-cabal-plan.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/load-cabal-plan.nix b/lib/load-cabal-plan.nix index 5cab78138d..a4ac61a05d 100644 --- a/lib/load-cabal-plan.nix +++ b/lib/load-cabal-plan.nix @@ -94,6 +94,11 @@ in { # parsing the `cabal.project` file. src = pkgs.lib.lists.elemAt callProjectResults.sourceRepos (pkgs.lib.strings.toInt p.pkg-src.source-repo.location) + pkgs.lib.optionalString (p.pkg-src.source-repo.subdir != ".") "/${p.pkg-src.source-repo.subdir}"; + } // pkgs.lib.optionalAttrs (p.pkg-src.type or "" == "repo-tar") { + src = pkgs.fetchurl { + url = p.pkg-src.repo.uri + "${pkgs.lib.optionalString (!pkgs.lib.hasSuffix "/" p.pkg-src.repo.uri) "/"}package/${p.pkg-name}-${p.pkg-version}.tar.gz"; + sha256 = p.pkg-src-sha256; + }; } // pkgs.lib.optionalAttrs (cabal2nix ? package-description-override && p.pkg-version == cabal2nix.package.identifier.version) { # Use the `.cabal` file from the `Cabal2Nix` if it for the matching # version of the package (the one in the plan). From 4e41959d88cbcbf3adb97e61f8f5dec50dbf89b3 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 24 Sep 2024 15:02:11 +1200 Subject: [PATCH 068/206] Fix `repo-tar` downloads --- lib/load-cabal-plan.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/load-cabal-plan.nix b/lib/load-cabal-plan.nix index a4ac61a05d..14ba6db55a 100644 --- a/lib/load-cabal-plan.nix +++ b/lib/load-cabal-plan.nix @@ -95,10 +95,10 @@ in { src = pkgs.lib.lists.elemAt callProjectResults.sourceRepos (pkgs.lib.strings.toInt p.pkg-src.source-repo.location) + pkgs.lib.optionalString (p.pkg-src.source-repo.subdir != ".") "/${p.pkg-src.source-repo.subdir}"; } // pkgs.lib.optionalAttrs (p.pkg-src.type or "" == "repo-tar") { - src = pkgs.fetchurl { + src = pkgs.lib.mkDefault (pkgs.fetchurl { url = p.pkg-src.repo.uri + "${pkgs.lib.optionalString (!pkgs.lib.hasSuffix "/" p.pkg-src.repo.uri) "/"}package/${p.pkg-name}-${p.pkg-version}.tar.gz"; sha256 = p.pkg-src-sha256; - }; + }); } // pkgs.lib.optionalAttrs (cabal2nix ? package-description-override && p.pkg-version == cabal2nix.package.identifier.version) { # Use the `.cabal` file from the `Cabal2Nix` if it for the matching # version of the package (the one in the plan). From 431caa527f65b64cf6e29212dd44289e6eefa61c Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 24 Sep 2024 17:19:30 +1200 Subject: [PATCH 069/206] More fixes for ghc HEAD --- test/js-template-haskell/default.nix | 3 ++- test/shell-for-setup-deps/default.nix | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/test/js-template-haskell/default.nix b/test/js-template-haskell/default.nix index 1348f75a59..423ed3dd40 100644 --- a/test/js-template-haskell/default.nix +++ b/test/js-template-haskell/default.nix @@ -7,7 +7,8 @@ let project = project' { inherit compiler-nix-name evalPackages; src = testSrc "js-template-haskell"; - cabalProjectLocal = '' + cabalProjectLocal = builtins.readFile ../cabal.project.local + + '' if arch(javascript) extra-packages: ghci constraints: ghcjs installed diff --git a/test/shell-for-setup-deps/default.nix b/test/shell-for-setup-deps/default.nix index 9e7f228ce8..6bf7214373 100644 --- a/test/shell-for-setup-deps/default.nix +++ b/test/shell-for-setup-deps/default.nix @@ -10,7 +10,8 @@ let }; env = project.shellFor { - withHoogle = !__elem compiler-nix-name ["ghc901" "ghc902" "ghc921" "ghc922" "ghc923" "ghc924" "ghc925" "ghc926" "ghc927"]; + tools.hoogle = { cabalProjectLocal = builtins.readFile ../cabal.project.local; }; + withHoogle = true; }; in recurseIntoAttrs ({ From 6886c43de10fd306d582a4cb7dc9b87ab2c3035c Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 24 Sep 2024 19:13:14 +1200 Subject: [PATCH 070/206] Fix for GHC 9.6 JS backend --- compiler/ghc/default.nix | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 8af70ecc68..ef2c6b34b5 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -397,16 +397,26 @@ stdenv.mkDerivation (rec { done '' # Use emscripten and the `config.sub` saved by `postPatch` - + lib.optionalString (targetPlatform.isGhcjs) '' + + lib.optionalString (targetPlatform.isGhcjs) ('' export CC="${targetCC}/bin/emcc" export CXX="${targetCC}/bin/em++" export LD="${targetCC}/bin/emcc" - export AR="${targetCC}/bin/emar" - export NM="${targetCC}/share/emscripten/emnm" - export RANLIB="${targetCC}/bin/emranlib" + '' + ( + # Including AR and RANLIB here breaks tests.js-template-haskell for GHC 9.6 + # `LLVM ERROR: malformed uleb128, extends past end` + if builtins.compareVersions ghc-version "9.8" >= 0 + then '' + export AR="${targetCC}/bin/emar" + export NM="${targetCC}/share/emscripten/emnm" + export RANLIB="${targetCC}/bin/emranlib" + '' + else '' + export NM="${targetCC}/share/emscripten/emnm" + '' + ) + '' export EM_CACHE=$(mktemp -d) mv config.sub.ghcjs config.sub - '' + '') # GHC is a bit confused on its cross terminology, as these would normally be # the *host* tools. + lib.optionalString (!targetPlatform.isGhcjs) ('' From 8956daa3713d001c04060465c9ddafd0515453ac Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 24 Sep 2024 20:05:50 +1200 Subject: [PATCH 071/206] Fix for GHC HEAD JS --- modules/install-plan/non-reinstallable.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/install-plan/non-reinstallable.nix b/modules/install-plan/non-reinstallable.nix index b454634b40..2e92bbd39f 100644 --- a/modules/install-plan/non-reinstallable.nix +++ b/modules/install-plan/non-reinstallable.nix @@ -6,7 +6,7 @@ "ghc-internal"] ++ lib.optionals (pkgs.stdenv.hostPlatform.isGhcjs) ([ # ghci and its dependencies - "ghci" "binary" "bytestring" "containers" "template-haskell" "array" "deepseq" "filepath" "ghc-boot" "ghc-boot-th" "ghc-heap" "transformers" "unix" "directory" "time" "ghc-platform" "os-string"] + "ghci" "binary" "bytestring" "containers" "template-haskell" "array" "deepseq" "file-io" "filepath" "ghc-boot" "ghc-boot-th" "ghc-heap" "transformers" "unix" "directory" "time" "ghc-platform" "os-string"] ++ lib.optionals (builtins.compareVersions config.compiler.version "8.11" < 0) [ "ghcjs-prim" "ghcjs-th"]); -} \ No newline at end of file +} From 209c2cd386f13ce6133ce23ab729fc5e8482f08a Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 25 Sep 2024 16:53:56 +1200 Subject: [PATCH 072/206] fix syntax errors --- overlays/bootstrap.nix | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 95ba8fbb08..3b62f70cb1 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -220,17 +220,17 @@ in { && (final.stdenv.targetPlatform.isAarch64 || final.stdenv.targetPlatform.is32bit)) (fromUntil "9.6.1" "9.11" ./patches/ghc/iserv-syms.patch) ++ onAndroid (until "9.0" ./patches/ghc/ghc-8.10.7-weak-symbols-2.patch) - ++ onDarwin (onAarch64 (until "9.0" ./patches/ghc/ghc-8.10.7-rts-aarch64-darwin.patch) - ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10-android.patch) - ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-android-bionic-symbols.patch) - ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-bionic-libc.patch) - ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-cross-dont-build-stage2-tools.patch) + ++ onDarwin (onAarch64 (until "9.0" ./patches/ghc/ghc-8.10.7-rts-aarch64-darwin.patch)) + ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10-android.patch)) + ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-android-bionic-symbols.patch)) + ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-bionic-libc.patch)) + ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-cross-dont-build-stage2-tools.patch)) ++ onAndroid (fromUntil "9.0" "9.8"./patches/ghc/ghc-9.6-hadrian-android.patch) ++ onMusl (onAarch64 (fromUntil "9.0" "9.8" ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch)) ++ on32bit (from "9.0" ./patches/ghc/ghc-9.6-32bit-cmm.patch) # this one is to allow linking extra symbols from iserv. # This one will lead to segv's on darwin, when calling `strlen` during lookupStrHashTable. `strlen` ends up being called with 0x0. - ++ final.lib.optionls ( + ++ final.lib.optionals ( (final.stdenv.targetPlatform.isAndroid || final.stdenv.targetPlatform.isLinux) && (final.stdenv.targetPlatform.isAarch64 || final.stdenv.targetPlatform.is32bit)) (fromUntil "9.6.1" "9.10" ./patches/ghc/iserv-syms.patch) From dd3ecbbef3398622ae996dd9a40814bf5d8950b0 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 26 Sep 2024 16:47:31 +1200 Subject: [PATCH 073/206] ifdLevel 0 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 15ee49425d..333cbfd5b9 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 3; + ifdLevel = 0; runningHydraEvalTest = false; compiler = "ghc928"; config = import ./config.nix; From aec1d0b9fa43fbbb04d617008ef2616f3d04045d Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 27 Sep 2024 10:23:26 +1200 Subject: [PATCH 074/206] Disable darwin on hydra for now. --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 333cbfd5b9..ad58e7bdbd 100644 --- a/flake.nix +++ b/flake.nix @@ -91,7 +91,7 @@ callFlake = import flake-compat; ifdLevel = 0; - runningHydraEvalTest = false; + runningHydraEvalTest = true; compiler = "ghc928"; config = import ./config.nix; From 6b879fe29448e3998f73550ea879b06a0842f20f Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 27 Sep 2024 10:23:54 +1200 Subject: [PATCH 075/206] ifdLevel 1 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index ad58e7bdbd..50b9f7da31 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 0; + ifdLevel = 1; runningHydraEvalTest = true; compiler = "ghc928"; config = import ./config.nix; From 0395359720e8109b4e7b1e4148cdf5f1498406e9 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 27 Sep 2024 10:28:41 +1200 Subject: [PATCH 076/206] ifdLevel 2 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 50b9f7da31..34fe7bcdef 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 1; + ifdLevel = 2; runningHydraEvalTest = true; compiler = "ghc928"; config = import ./config.nix; From ff5049a13f4c8cc2f8133dcd0ee0de4a9d0f7593 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 27 Sep 2024 10:29:09 +1200 Subject: [PATCH 077/206] ifdLevel 3 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 34fe7bcdef..84f6872e86 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 2; + ifdLevel = 3; runningHydraEvalTest = true; compiler = "ghc928"; config = import ./config.nix; From 226e097f39d3ad15be4e5833d6538fedaa8f1e0c Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 27 Sep 2024 13:51:07 +1200 Subject: [PATCH 078/206] Fix eval --- compiler/ghc/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 57cc0f6195..82eea15145 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -733,7 +733,7 @@ stdenv.mkDerivation (rec { --replace 'dynamic-library-dirs:' 'dynamic-library-dirs: ${libcxx}/lib' find . -name 'system*.conf*' cat mk/system-cxx-std-lib-1.0.conf - '' + lib.optionalString (installStage1 && stdenv.targetPlatform.isNativeMusl) '' + '' + lib.optionalString (installStage1 && haskell-nix.haskellLib.isNativeMusl) '' substituteInPlace hadrian/cfg/system.config \ --replace 'cross-compiling = YES' \ 'cross-compiling = NO' @@ -823,7 +823,7 @@ stdenv.mkDerivation (rec { --replace 'dynamic-library-dirs:' 'dynamic-library-dirs: ${libcxx}/lib' find . -name 'system*.conf*' cat mk/system-cxx-std-lib-1.0.conf - '' + lib.optionalString (installStage1 && stdenv.targetPlatform.isNativeMusl) '' + '' + lib.optionalString (installStage1 && haskell-nix.haskellLib.isNativeMusl) '' substituteInPlace hadrian/cfg/system.config \ --replace 'cross-compiling = YES' \ 'cross-compiling = NO' From bf96421e3be68b3d2fc5e4432ec4858f0f542f82 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 27 Sep 2024 16:49:23 +1200 Subject: [PATCH 079/206] Fix patches --- overlays/bootstrap.nix | 1 - overlays/mingw_w64.nix | 2 -- 2 files changed, 3 deletions(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 3b62f70cb1..490d055662 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -234,7 +234,6 @@ in { (final.stdenv.targetPlatform.isAndroid || final.stdenv.targetPlatform.isLinux) && (final.stdenv.targetPlatform.isAarch64 || final.stdenv.targetPlatform.is32bit)) (fromUntil "9.6.1" "9.10" ./patches/ghc/iserv-syms.patch) - ++ onWindows (from "9.4" ./patches/ghc/ghc-9.6-fix-code-symbol-jumps.patch) ++ onAndroid (fromUntil "9.6.3" "9.10" ./patches/ghc/ghc-9.6-iog.patch) ++ on32bit (fromUntil "9.6" "9.12" ./patches/ghc/ghc-9.6-genapply-cross-arch.patch) ++ onAndroid (fromUntil "9.6" "9.9" ./patches/ghc/ghc-9.6-debug-secno.patch) diff --git a/overlays/mingw_w64.nix b/overlays/mingw_w64.nix index fa794a357a..a309a8d10e 100644 --- a/overlays/mingw_w64.nix +++ b/overlays/mingw_w64.nix @@ -39,8 +39,6 @@ let REMOTE_ISERV=$(mktemp -d) ln -s ${interpreter.override { - patches = [ ./patches/iserv-proxy-keep-cafs.patch ] - ; enableDebugRTS = true; setupBuildFlags = ["--ghc-option=-optl-Wl,--disable-dynamicbase,--disable-high-entropy-va,--image-base=0x400000" ]; }}/bin/* $REMOTE_ISERV From 4eaf4b57d6d3f7e073793b2c494d9e0f05601859 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 27 Sep 2024 17:08:07 +1200 Subject: [PATCH 080/206] Fix patches --- overlays/linux-cross.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/overlays/linux-cross.nix b/overlays/linux-cross.nix index c4068c98f0..1fc2c8864d 100644 --- a/overlays/linux-cross.nix +++ b/overlays/linux-cross.nix @@ -50,8 +50,7 @@ let (>&2 echo "---> Starting ${interpreter.exeName} on port $PORT") ${qemu}/bin/qemu-${qemuSuffix} ${interpreter.override ({ - patches = lib.optional (builtins.compareVersions interpreter.version "9.0" > 0) ./patches/iserv-proxy-keep-cafs.patch - ++ lib.optional (builtins.compareVersions interpreter.version "9.0" > 0 && hostPlatform.isAndroid && hostPlatform.isAarch32) ./patches/iserv-proxy-interpreter-9.3-android32.patch + patches = lib.optional (builtins.compareVersions interpreter.version "9.0" > 0 && hostPlatform.isAndroid && hostPlatform.isAarch32) ./patches/iserv-proxy-interpreter-9.3-android32.patch ++ lib.optional (builtins.compareVersions interpreter.version "9.0" > 0 && hostPlatform.isAndroid && hostPlatform.isAarch64) ./patches/iserv-proxy-interpreter-9.3-android.patch ; } // lib.optionalAttrs hostPlatform.isAndroid { From 502db1605432c451502532f7720405ee75db4065 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 27 Sep 2024 17:12:16 +1200 Subject: [PATCH 081/206] ifdLevel 0 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 84f6872e86..ad58e7bdbd 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 3; + ifdLevel = 0; runningHydraEvalTest = true; compiler = "ghc928"; config = import ./config.nix; From 79350f931c6e8bd56980a199a9c8610d16ba3ed5 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 27 Sep 2024 17:15:07 +1200 Subject: [PATCH 082/206] ifdLevel 1 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index ad58e7bdbd..50b9f7da31 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 0; + ifdLevel = 1; runningHydraEvalTest = true; compiler = "ghc928"; config = import ./config.nix; From 48fae4a4048307cc6445915a8d49ea3d98c314eb Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 27 Sep 2024 17:15:35 +1200 Subject: [PATCH 083/206] ifdLevel 2 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 50b9f7da31..34fe7bcdef 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 1; + ifdLevel = 2; runningHydraEvalTest = true; compiler = "ghc928"; config = import ./config.nix; From 885c20727f84a448c39b9fef8758e2b6a81d4612 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 27 Sep 2024 17:18:08 +1200 Subject: [PATCH 084/206] ifdLevel 3 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 34fe7bcdef..84f6872e86 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 2; + ifdLevel = 3; runningHydraEvalTest = true; compiler = "ghc928"; config = import ./config.nix; From 79a06064381a4fe3a767b924ebe95f05803297d1 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 27 Sep 2024 22:11:38 +1200 Subject: [PATCH 085/206] Add upper bound for patch --- overlays/bootstrap.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 490d055662..7842a83a90 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -227,7 +227,7 @@ in { ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-cross-dont-build-stage2-tools.patch)) ++ onAndroid (fromUntil "9.0" "9.8"./patches/ghc/ghc-9.6-hadrian-android.patch) ++ onMusl (onAarch64 (fromUntil "9.0" "9.8" ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch)) - ++ on32bit (from "9.0" ./patches/ghc/ghc-9.6-32bit-cmm.patch) + ++ on32bit (fromUntil "9.0" "9.4" ./patches/ghc/ghc-9.6-32bit-cmm.patch) # this one is to allow linking extra symbols from iserv. # This one will lead to segv's on darwin, when calling `strlen` during lookupStrHashTable. `strlen` ends up being called with 0x0. ++ final.lib.optionals ( From d828c0bf3b6c938c81f6f525dce4021edb41562e Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 27 Sep 2024 22:18:35 +1200 Subject: [PATCH 086/206] Add ArchX86 and ArchRISCV64 --- lib/call-cabal-project-to-nix.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/call-cabal-project-to-nix.nix b/lib/call-cabal-project-to-nix.nix index 3a97ef6558..6f0f5e5739 100644 --- a/lib/call-cabal-project-to-nix.nix +++ b/lib/call-cabal-project-to-nix.nix @@ -342,6 +342,10 @@ let echo ',("target arch","${ if pkgs.stdenv.targetPlatform.isx86_64 then "ArchX86_64" + else if pkgs.stdenv.targetPlatform.isx86 + then "ArchX86" + else if pkgs.stdenv.targetPlatform.isRiscV64 + then "ArchRISCV64" else if pkgs.stdenv.targetPlatform.isAarch64 then "ArchAArch64" else if pkgs.stdenv.targetPlatform.isJavaScript From cac3cf75b8ad74ea4b8ec4a8f0f45065c598829c Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sat, 28 Sep 2024 00:02:15 +1200 Subject: [PATCH 087/206] Fix logic for iserv-syms.patch --- overlays/bootstrap.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 7842a83a90..103f29dbf7 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -215,8 +215,7 @@ in { # This one will lead to segv's on darwin, when calling `strlen` during lookupStrHashTable. `strlen` ends up being called with 0x0. # This patch will allow adding additional symbols to iserv, instead of having to patch them into GHC all the time. ++ final.lib.optionals ( - final.stdenv.targetPlatform != final.stdenv.hostPlatform - && (final.stdenv.targetPlatform.isAndroid || final.stdenv.targetPlatform.isLinux) + (final.stdenv.targetPlatform.isAndroid || final.stdenv.targetPlatform.isLinux) && (final.stdenv.targetPlatform.isAarch64 || final.stdenv.targetPlatform.is32bit)) (fromUntil "9.6.1" "9.11" ./patches/ghc/iserv-syms.patch) ++ onAndroid (until "9.0" ./patches/ghc/ghc-8.10.7-weak-symbols-2.patch) From 106a506632c3e0189408859d94f6108508be7e07 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sat, 28 Sep 2024 00:06:48 +1200 Subject: [PATCH 088/206] Fix logic for iserv-syms.patch --- overlays/bootstrap.nix | 6 ------ 1 file changed, 6 deletions(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 103f29dbf7..0730024b80 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -227,12 +227,6 @@ in { ++ onAndroid (fromUntil "9.0" "9.8"./patches/ghc/ghc-9.6-hadrian-android.patch) ++ onMusl (onAarch64 (fromUntil "9.0" "9.8" ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch)) ++ on32bit (fromUntil "9.0" "9.4" ./patches/ghc/ghc-9.6-32bit-cmm.patch) - # this one is to allow linking extra symbols from iserv. - # This one will lead to segv's on darwin, when calling `strlen` during lookupStrHashTable. `strlen` ends up being called with 0x0. - ++ final.lib.optionals ( - (final.stdenv.targetPlatform.isAndroid || final.stdenv.targetPlatform.isLinux) - && (final.stdenv.targetPlatform.isAarch64 || final.stdenv.targetPlatform.is32bit)) - (fromUntil "9.6.1" "9.10" ./patches/ghc/iserv-syms.patch) ++ onAndroid (fromUntil "9.6.3" "9.10" ./patches/ghc/ghc-9.6-iog.patch) ++ on32bit (fromUntil "9.6" "9.12" ./patches/ghc/ghc-9.6-genapply-cross-arch.patch) ++ onAndroid (fromUntil "9.6" "9.9" ./patches/ghc/ghc-9.6-debug-secno.patch) From 6c3161057f0278c85e9f9522187970a039fc184b Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sat, 28 Sep 2024 10:29:52 +1200 Subject: [PATCH 089/206] Remove old patch. Latest upstream GHC >9.6 have a better one. --- overlays/bootstrap.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 0730024b80..9fc6b8c250 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -228,7 +228,6 @@ in { ++ onMusl (onAarch64 (fromUntil "9.0" "9.8" ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch)) ++ on32bit (fromUntil "9.0" "9.4" ./patches/ghc/ghc-9.6-32bit-cmm.patch) ++ onAndroid (fromUntil "9.6.3" "9.10" ./patches/ghc/ghc-9.6-iog.patch) - ++ on32bit (fromUntil "9.6" "9.12" ./patches/ghc/ghc-9.6-genapply-cross-arch.patch) ++ onAndroid (fromUntil "9.6" "9.9" ./patches/ghc/ghc-9.6-debug-secno.patch) ++ onAndroid (on32bit (fromUntil "9.6" "9.9"./patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch)) From 52ebca36fdc857db8f7aa066a7d6f107f6d958c5 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 30 Sep 2024 11:32:22 +1300 Subject: [PATCH 090/206] ifdLevel 0 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 15ee49425d..333cbfd5b9 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 3; + ifdLevel = 0; runningHydraEvalTest = false; compiler = "ghc928"; config = import ./config.nix; From a70f5ad478c2c0cf32704d34d776093fefdbd83f Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 30 Sep 2024 12:01:36 +1300 Subject: [PATCH 091/206] ifdLevel 1 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 333cbfd5b9..ced3c36cab 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 0; + ifdLevel = 1; runningHydraEvalTest = false; compiler = "ghc928"; config = import ./config.nix; From b139433ff6a1c22889545366bda6d898c2b86fcb Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 30 Sep 2024 16:06:36 +1300 Subject: [PATCH 092/206] Fix hadrian strip patch --- overlays/bootstrap.nix | 3 +- .../ghc/ghc-9.8-hadrian-strip-cmd.patch | 55 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 overlays/patches/ghc/ghc-9.8-hadrian-strip-cmd.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 9fc6b8c250..4d88254db8 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -225,7 +225,8 @@ in { ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-bionic-libc.patch)) ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-cross-dont-build-stage2-tools.patch)) ++ onAndroid (fromUntil "9.0" "9.8"./patches/ghc/ghc-9.6-hadrian-android.patch) - ++ onMusl (onAarch64 (fromUntil "9.0" "9.8" ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch)) + ++ onMusl (onAarch64 (fromUntil "9.4" "9.8" ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch)) + ++ onMusl (onAarch64 (fromUntil "9.8" "9.12" ./patches/ghc/ghc-9.8-hadrian-strip-cmd.patch)) ++ on32bit (fromUntil "9.0" "9.4" ./patches/ghc/ghc-9.6-32bit-cmm.patch) ++ onAndroid (fromUntil "9.6.3" "9.10" ./patches/ghc/ghc-9.6-iog.patch) ++ onAndroid (fromUntil "9.6" "9.9" ./patches/ghc/ghc-9.6-debug-secno.patch) diff --git a/overlays/patches/ghc/ghc-9.8-hadrian-strip-cmd.patch b/overlays/patches/ghc/ghc-9.8-hadrian-strip-cmd.patch new file mode 100644 index 0000000000..e6dc4079e5 --- /dev/null +++ b/overlays/patches/ghc/ghc-9.8-hadrian-strip-cmd.patch @@ -0,0 +1,55 @@ +diff --git a/hadrian/cfg/system.config.in b/hadrian/cfg/system.config.in +index 4912673869..85b5c58c2a 100644 +--- a/hadrian/cfg/system.config.in ++++ b/hadrian/cfg/system.config.in +@@ -18,6 +18,7 @@ merge-objects = @MergeObjsCmd@ + system-merge-objects = @LD_STAGE0@ + objdump = @ObjdumpCmd@ + ranlib = @REAL_RANLIB_CMD@ ++strip = @StripCmd@ + sphinx-build = @SPHINXBUILD@ + system-ar = @AR_STAGE0@ + system-cc = @CC_STAGE0@ +diff --git a/hadrian/src/Oracles/Setting.hs b/hadrian/src/Oracles/Setting.hs +index a0f639d325..55f9a2f902 100644 +--- a/hadrian/src/Oracles/Setting.hs ++++ b/hadrian/src/Oracles/Setting.hs +@@ -73,6 +73,7 @@ data Setting = BuildArch + | ProjectPatchLevel + | ProjectPatchLevel1 + | ProjectPatchLevel2 ++ | Strip + | SystemGhc + | TargetArch + | TargetOs +@@ -176,6 +177,7 @@ setting key = lookupSystemConfig $ case key of + ProjectPatchLevel -> "project-patch-level" + ProjectPatchLevel1 -> "project-patch-level1" + ProjectPatchLevel2 -> "project-patch-level2" ++ Strip -> "strip" + SystemGhc -> "system-ghc" + TargetArch -> "target-arch" + TargetArmVersion -> "target-arm-version" +diff --git a/hadrian/src/Settings/Builders/Cabal.hs b/hadrian/src/Settings/Builders/Cabal.hs +index 75eb78ccd8..6904c973d4 100644 +--- a/hadrian/src/Settings/Builders/Cabal.hs ++++ b/hadrian/src/Settings/Builders/Cabal.hs +@@ -85,15 +85,11 @@ commonCabalArgs :: Stage -> Args + commonCabalArgs stage = do + verbosity <- expr getVerbosity + pkg <- getPackage ++ strip <- getSetting Strip + package_id <- expr $ pkgUnitId stage pkg + let prefix = "${pkgroot}" ++ (if windowsHost then "" else "/..") +- mconcat [ -- Don't strip libraries when cross compiling. +- -- TODO: We need to set @--with-strip=(stripCmdPath :: Action FilePath)@, +- -- and if it's @:@ disable stripping as well. As it is now, I believe +- -- we might have issues with stripping on Windows, as I can't see a +- -- consumer of 'stripCmdPath'. +- -- TODO: See https://github.com/snowleopard/hadrian/issues/549. +- flag CrossCompiling ? pure [ "--disable-executable-stripping" ++ mconcat [ notStage0 ? strip /= "" ? pure [ "--with-strip=" ++ strip ] ++ , flag CrossCompiling ? pure [ "--disable-executable-stripping" + , "--disable-library-stripping" ] + -- We don't want to strip the debug RTS + , S.package rts ? pure [ "--disable-executable-stripping" From 8f2754f895f62ce9f6f9cb29738f1aaeb6e4d903 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 30 Sep 2024 16:14:38 +1300 Subject: [PATCH 093/206] Fix hadrian strip patch --- overlays/bootstrap.nix | 5 +- .../ghc/ghc-9.10-hadrian-strip-cmd.patch | 55 +++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 overlays/patches/ghc/ghc-9.10-hadrian-strip-cmd.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 4d88254db8..1522e4c9f9 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -225,8 +225,9 @@ in { ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-bionic-libc.patch)) ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-cross-dont-build-stage2-tools.patch)) ++ onAndroid (fromUntil "9.0" "9.8"./patches/ghc/ghc-9.6-hadrian-android.patch) - ++ onMusl (onAarch64 (fromUntil "9.4" "9.8" ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch)) - ++ onMusl (onAarch64 (fromUntil "9.8" "9.12" ./patches/ghc/ghc-9.8-hadrian-strip-cmd.patch)) + ++ onMusl (onAarch64 (fromUntil "9.4" "9.8" ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch)) + ++ onMusl (onAarch64 (fromUntil "9.8" "9.10" ./patches/ghc/ghc-9.8-hadrian-strip-cmd.patch)) + ++ onMusl (onAarch64 (fromUntil "9.10" "9.12" ./patches/ghc/ghc-9.10-hadrian-strip-cmd.patch)) ++ on32bit (fromUntil "9.0" "9.4" ./patches/ghc/ghc-9.6-32bit-cmm.patch) ++ onAndroid (fromUntil "9.6.3" "9.10" ./patches/ghc/ghc-9.6-iog.patch) ++ onAndroid (fromUntil "9.6" "9.9" ./patches/ghc/ghc-9.6-debug-secno.patch) diff --git a/overlays/patches/ghc/ghc-9.10-hadrian-strip-cmd.patch b/overlays/patches/ghc/ghc-9.10-hadrian-strip-cmd.patch new file mode 100644 index 0000000000..523f05328b --- /dev/null +++ b/overlays/patches/ghc/ghc-9.10-hadrian-strip-cmd.patch @@ -0,0 +1,55 @@ +diff --git a/hadrian/cfg/system.config.in b/hadrian/cfg/system.config.in +index e8e6076f9a..e748ca514d 100644 +--- a/hadrian/cfg/system.config.in ++++ b/hadrian/cfg/system.config.in +@@ -13,6 +13,7 @@ cc = @CC@ + happy = @HappyCmd@ + make = @MakeCmd@ + objdump = @ObjdumpCmd@ ++strip = @StripCmd@ + sphinx-build = @SPHINXBUILD@ + system-ghc = @WithGhc@ + system-ghc-pkg = @GhcPkgCmd@ +diff --git a/hadrian/src/Oracles/Setting.hs b/hadrian/src/Oracles/Setting.hs +index b20b023173..881c122885 100644 +--- a/hadrian/src/Oracles/Setting.hs ++++ b/hadrian/src/Oracles/Setting.hs +@@ -69,6 +69,7 @@ data Setting = CursesIncludeDir + | ProjectPatchLevel + | ProjectPatchLevel1 + | ProjectPatchLevel2 ++ | Strip + | SystemGhc + | TargetPlatformFull + | BourneShell +@@ -125,6 +126,7 @@ setting key = lookupSystemConfig $ case key of + ProjectPatchLevel -> "project-patch-level" + ProjectPatchLevel1 -> "project-patch-level1" + ProjectPatchLevel2 -> "project-patch-level2" ++ Strip -> "strip" + SystemGhc -> "system-ghc" + TargetPlatformFull -> "target-platform-full" + BourneShell -> "bourne-shell" +diff --git a/hadrian/src/Settings/Builders/Cabal.hs b/hadrian/src/Settings/Builders/Cabal.hs +index 3e83bb5634..241f8a51ef 100644 +--- a/hadrian/src/Settings/Builders/Cabal.hs ++++ b/hadrian/src/Settings/Builders/Cabal.hs +@@ -84,15 +84,11 @@ cabalSetupArgs = builder (Cabal Setup) ? do + commonCabalArgs :: Stage -> Args + commonCabalArgs stage = do + pkg <- getPackage ++ strip <- getSetting Strip + package_id <- expr $ pkgUnitId stage pkg + let prefix = "${pkgroot}" ++ (if windowsHost then "" else "/..") +- mconcat [ -- Don't strip libraries when cross compiling. +- -- TODO: We need to set @--with-strip=(stripCmdPath :: Action FilePath)@, +- -- and if it's @:@ disable stripping as well. As it is now, I believe +- -- we might have issues with stripping on Windows, as I can't see a +- -- consumer of 'stripCmdPath'. +- -- TODO: See https://github.com/snowleopard/hadrian/issues/549. +- flag CrossCompiling ? pure [ "--disable-executable-stripping" ++ mconcat [ notStage0 ? strip /= "" ? pure [ "--with-strip=" ++ strip ] ++ , flag CrossCompiling ? pure [ "--disable-executable-stripping" + , "--disable-library-stripping" ] + -- We don't want to strip the debug RTS + , S.package rts ? pure [ "--disable-executable-stripping" From 4692b1a1407f7854c932b018ca10d108c89a78fd Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 30 Sep 2024 18:25:09 +1300 Subject: [PATCH 094/206] Fix haddock (now that isNativeMusl works correctly) --- builder/ghc-for-component-wrapper.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/ghc-for-component-wrapper.nix b/builder/ghc-for-component-wrapper.nix index 454b946b27..dee214d7d8 100644 --- a/builder/ghc-for-component-wrapper.nix +++ b/builder/ghc-for-component-wrapper.nix @@ -23,7 +23,7 @@ let libDir = "$wrappedGhc/${configFiles.libDir}"; docDir = "$wrappedGhc/share/doc/ghc/html"; # For musl we can use haddock from the buildGHC - haddock = if stdenv.hostPlatform.isLinux && stdenv.targetPlatform.isMusl && !haskellLib.isNativeMusl + haddock = if stdenv.targetPlatform.isMusl then ghc.buildGHC else ghc; From 173edcc4157f54a6f1dcce99fa1fd9ef60527903 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 30 Sep 2024 18:38:30 +1300 Subject: [PATCH 095/206] Fix haddock (now that isNativeMusl works correctly) --- builder/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/default.nix b/builder/default.nix index 6a029e8964..98c1b977c5 100644 --- a/builder/default.nix +++ b/builder/default.nix @@ -68,7 +68,7 @@ let let haskellPackages = { # For musl we can use haddock from the buildGHC - ghc = if stdenv.hostPlatform.isLinux && stdenv.targetPlatform.isMusl && !haskellLib.isNativeMusl + ghc = if stdenv.targetPlatform.isMusl then ghc.buildGHC else ghc; inherit packages hoogle; From 076782fcc8f06e5a5f377849d7c8648b17e3cee5 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 30 Sep 2024 19:34:10 +1300 Subject: [PATCH 096/206] Avoid building source-pins on hackage (just make sure the components needed are present). --- overlays/haskell.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/overlays/haskell.nix b/overlays/haskell.nix index 267632d06d..8332ec839d 100644 --- a/overlays/haskell.nix +++ b/overlays/haskell.nix @@ -1075,7 +1075,9 @@ final: prev: { roots' = compiler-nix-name: ifdLevel: final.recurseIntoAttrs ({ # Things that require no IFD to build - inherit (final.buildPackages.haskell-nix) source-pins; + source-pin-hackage = hackageSrc; + source-pin-stackage = stackageSrc; + source-pin-haskell-nix = final.path; # Double buildPackages is intentional, # see comment in lib/default.nix for details. # Using buildPackages rather than evalPackages so both darwin and linux From 321acd915908bd725fcfb7b8a6f146ef41d4017f Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 30 Sep 2024 21:11:02 +1300 Subject: [PATCH 097/206] ifdLevel 2 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index ced3c36cab..62ae19c1e0 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 1; + ifdLevel = 2; runningHydraEvalTest = false; compiler = "ghc928"; config = import ./config.nix; From ecabb6e0368273cfbbbbadaf024fd162b16dc731 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 30 Sep 2024 21:41:55 +1300 Subject: [PATCH 098/206] Fix for native musl builds --- builder/ghc-for-component-wrapper.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/ghc-for-component-wrapper.nix b/builder/ghc-for-component-wrapper.nix index dee214d7d8..bf007ab853 100644 --- a/builder/ghc-for-component-wrapper.nix +++ b/builder/ghc-for-component-wrapper.nix @@ -125,7 +125,7 @@ let done '' - + lib.optionalString (stdenv.targetPlatform.isMusl && !haskellLib.isNativeMusl && builtins.compareVersions ghc.version "9.9" >0) '' + + lib.optionalString (stdenv.targetPlatform.isMusl && builtins.compareVersions ghc.version "9.9" >0) '' ln -s $wrappedGhc/bin/${ghcCommand}-iserv $wrappedGhc/bin/ghc-iserv ln -s $wrappedGhc/bin/${ghcCommand}-iserv-prof $wrappedGhc/bin/ghc-iserv-prof '' From 922ec59a557643ff305a381ffd25bb8a2b64c289 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 30 Sep 2024 23:17:04 +1300 Subject: [PATCH 099/206] ifdLevel 3 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 62ae19c1e0..15ee49425d 100644 --- a/flake.nix +++ b/flake.nix @@ -90,7 +90,7 @@ let callFlake = import flake-compat; - ifdLevel = 2; + ifdLevel = 3; runningHydraEvalTest = false; compiler = "ghc928"; config = import ./config.nix; From 4b883cf298bd6db38feec620ce9668e730027e0d Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 1 Oct 2024 12:45:22 +1300 Subject: [PATCH 100/206] Add musl32 and android tests --- ci.nix | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/ci.nix b/ci.nix index b6346c086e..7f3fff04b2 100644 --- a/ci.nix +++ b/ci.nix @@ -66,8 +66,8 @@ ghc98 = false; } // nixpkgs.lib.optionalAttrs (nixpkgsName == "unstable") { ghc810 = true; - ghc92 = false; - ghc94 = false; + ghc92 = true; + ghc94 = true; ghc96 = true; ghc98 = true; ghc98llvm = false; @@ -81,30 +81,30 @@ let lib = nixpkgs.lib; in lib.optionalAttrs (nixpkgsName == "unstable" && (__match ".*llvm" compiler-nix-name == null) - && ((system == "x86_64-linux" && !builtins.elem compiler-nix-name ["ghc884" "ghc902" "ghc928" "ghc948"]) - || (system == "aarch64-linux" && !builtins.elem compiler-nix-name ["ghc884" "ghc902" "ghc928" "ghc948"]) - || (system == "x86_64-darwin" && !builtins.elem compiler-nix-name ["ghc884" "ghc902" "ghc928" "ghc948" "ghc966" "ghc982"]) - || (system == "aarch64-darwin" && !builtins.elem compiler-nix-name ["ghc884" "ghc902" "ghc928" "ghc948" "ghc966" "ghc982"]) + && ((system == "x86_64-linux" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948"]) + || (system == "aarch64-linux" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948"]) + || (system == "x86_64-darwin" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948" "ghc966" "ghc982"]) + || (system == "aarch64-darwin" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948" "ghc966" "ghc982"]) )) { inherit (lib.systems.examples) ghcjs; } // lib.optionalAttrs ( (__match ".*llvm" compiler-nix-name == null) - && ((system == "x86_64-linux" && !builtins.elem compiler-nix-name ["ghc884" "ghc902" "ghc928" "ghc91120240918"]) # Including GHC HEAD here because the patches for rts/RtsSymbols.c no longer apply and mingwW64 GHC build fails without them + && ((system == "x86_64-linux" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc91120240918"]) # Including GHC HEAD here because the patches for rts/RtsSymbols.c no longer apply and mingwW64 GHC build fails without them || (system == "x86_64-darwin" && builtins.elem compiler-nix-name []))) { # TODO add ghc versions when we have more darwin build capacity inherit (lib.systems.examples) mingwW64; } // lib.optionalAttrs (nixpkgsName == "unstable" && (__match ".*llvm" compiler-nix-name == null) - && ((system == "x86_64-linux" && !builtins.elem compiler-nix-name ["ghc884" "ghc8107" "ghc902" "ghc928" "ghc948"]) + && ((system == "x86_64-linux" && !builtins.elem compiler-nix-name ["ghc8107" "ghc902" "ghc928" "ghc948"]) || (system == "x86_64-darwin" && builtins.elem compiler-nix-name []))) { # TODO add ghc versions when we have more darwin build capacity inherit (lib.systems.examples) ucrt64; - } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc884" "ghc902" "ghc928" "ghc948"]) { + } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable") { # Musl cross only works on linux # aarch64 cross only works on linux - inherit (lib.systems.examples) musl64 aarch64-multiplatform; - } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && builtins.elem compiler-nix-name ["ghc927" "ghc928"]) { + inherit (lib.systems.examples) musl32 musl64 aarch64-multiplatform aarch64-android armv7a-android-prebuilt; + } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc8107" "ghc902"]) { # TODO fix this for the compilers we build with hadrian (ghc >=9.4) inherit (lib.systems.examples) aarch64-multiplatform-musl; - } // lib.optionalAttrs (system == "aarch64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc884" "ghc8107" "ghc902"]) { + } // lib.optionalAttrs (system == "aarch64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc8107" "ghc902"]) { inherit (lib.systems.examples) aarch64-multiplatform-musl; }; isDisabled = d: d.meta.disabled or false; From 4f04b861574b65fa2f9b15b1313c5d7256c96841 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 1 Oct 2024 14:57:05 +1300 Subject: [PATCH 101/206] Add AArch32 to call-cabal-project-to-nix.nix --- lib/call-cabal-project-to-nix.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/call-cabal-project-to-nix.nix b/lib/call-cabal-project-to-nix.nix index 6f0f5e5739..fbda651eff 100644 --- a/lib/call-cabal-project-to-nix.nix +++ b/lib/call-cabal-project-to-nix.nix @@ -348,6 +348,8 @@ let then "ArchRISCV64" else if pkgs.stdenv.targetPlatform.isAarch64 then "ArchAArch64" + else if pkgs.stdenv.targetPlatform.isAarch32 + then "ArchAArch32" else if pkgs.stdenv.targetPlatform.isJavaScript then "ArchJavaScript" else throw "Unknown target arch ${pkgs.stdenv.targetPlatform.config}" From df06075d7793b3d8063d38f8ef5d665eb1f624a3 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 2 Oct 2024 17:29:45 +1300 Subject: [PATCH 102/206] Update iserv-proxy patches --- .../patches/iserv-proxy-interpreter-9.3-android.patch | 9 ++++++--- .../patches/iserv-proxy-interpreter-9.3-android32.patch | 9 ++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/overlays/patches/iserv-proxy-interpreter-9.3-android.patch b/overlays/patches/iserv-proxy-interpreter-9.3-android.patch index 12f3dda3fe..ec106c1e69 100644 --- a/overlays/patches/iserv-proxy-interpreter-9.3-android.patch +++ b/overlays/patches/iserv-proxy-interpreter-9.3-android.patch @@ -324,14 +324,17 @@ index 0000000..d447895 +} \ No newline at end of file diff --git a/iserv-proxy.cabal b/iserv-proxy.cabal -index a0eeaeb..a146108 100644 +index 5f1449a..328b000 100644 --- a/iserv-proxy.cabal +++ b/iserv-proxy.cabal -@@ -103,6 +103,7 @@ Executable iserv-proxy +@@ -106,9 +106,7 @@ Executable iserv-proxy-interpreter -- We need to pass -fkeep-cafs to ensure that the interpreter retains CAFs -- Iserv and GHC do something similar. ghc-options: -fkeep-cafs +- -- no idea how to check for musl :-/ +- if os(linux) && arch(aarch64) +- c-sources: cbits/symbols.aarch64-musl.c + c-sources: cbits/symbols.c + Build-Depends: base >= 4 && < 5, iserv-proxy - diff --git a/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch b/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch index 7aeba03e07..f91fbb7978 100644 --- a/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch +++ b/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch @@ -453,14 +453,17 @@ index 0000000..9974c73 +} \ No newline at end of file diff --git a/iserv-proxy.cabal b/iserv-proxy.cabal -index eca2047..51a125b 100644 +index 5f1449a..328b000 100644 --- a/iserv-proxy.cabal +++ b/iserv-proxy.cabal -@@ -104,6 +104,7 @@ Executable iserv-proxy-interpreter +@@ -106,9 +106,7 @@ Executable iserv-proxy-interpreter -- We need to pass -fkeep-cafs to ensure that the interpreter retains CAFs -- Iserv and GHC do something similar. ghc-options: -fkeep-cafs +- -- no idea how to check for musl :-/ +- if os(linux) && arch(aarch64) +- c-sources: cbits/symbols.aarch64-musl.c + c-sources: cbits/symbols.c + Build-Depends: base >= 4 && < 5, iserv-proxy - From 8e088347e4fb5f534bca5237369c772d3eeab6c8 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 2 Oct 2024 17:31:30 +1300 Subject: [PATCH 103/206] Fix duplication of patch in overlays/bootstrap.nix --- overlays/bootstrap.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 1522e4c9f9..61a0c06712 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -231,7 +231,6 @@ in { ++ on32bit (fromUntil "9.0" "9.4" ./patches/ghc/ghc-9.6-32bit-cmm.patch) ++ onAndroid (fromUntil "9.6.3" "9.10" ./patches/ghc/ghc-9.6-iog.patch) ++ onAndroid (fromUntil "9.6" "9.9" ./patches/ghc/ghc-9.6-debug-secno.patch) - ++ onAndroid (on32bit (fromUntil "9.6" "9.9"./patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch)) # Allow loading static external plugins into cross compilers ++ onCross (fromUntil "9.6.1" "9.11" ./patches/ghc/5c80a27488acfe3610ddfcb99a1e961002e386d0.patch) From a090d4efbae3b60979875c6346feaef8796c9e44 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 3 Oct 2024 13:25:20 +1300 Subject: [PATCH 104/206] Add missing materialized file --- materialized/spdx-3.25.0/licenses.json | 8360 ++++++++++++++++++++++++ 1 file changed, 8360 insertions(+) create mode 100644 materialized/spdx-3.25.0/licenses.json diff --git a/materialized/spdx-3.25.0/licenses.json b/materialized/spdx-3.25.0/licenses.json new file mode 100644 index 0000000000..6c1a1e1337 --- /dev/null +++ b/materialized/spdx-3.25.0/licenses.json @@ -0,0 +1,8360 @@ +{ + "licenseListVersion": "3.25.0", + "licenses": [ + { + "reference": "https://spdx.org/licenses/0BSD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/0BSD.json", + "referenceNumber": 582, + "name": "BSD Zero Clause License", + "licenseId": "0BSD", + "seeAlso": [ + "http://landley.net/toybox/license.html", + "https://opensource.org/licenses/0BSD" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/3D-Slicer-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/3D-Slicer-1.0.json", + "referenceNumber": 466, + "name": "3D Slicer License v1.0", + "licenseId": "3D-Slicer-1.0", + "seeAlso": [ + "https://slicer.org/LICENSE", + "https://github.com/Slicer/Slicer/blob/main/License.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AAL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AAL.json", + "referenceNumber": 252, + "name": "Attribution Assurance License", + "licenseId": "AAL", + "seeAlso": [ + "https://opensource.org/licenses/attribution" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Abstyles.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Abstyles.json", + "referenceNumber": 456, + "name": "Abstyles License", + "licenseId": "Abstyles", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Abstyles" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AdaCore-doc.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AdaCore-doc.json", + "referenceNumber": 355, + "name": "AdaCore Doc License", + "licenseId": "AdaCore-doc", + "seeAlso": [ + "https://github.com/AdaCore/xmlada/blob/master/docs/index.rst", + "https://github.com/AdaCore/gnatcoll-core/blob/master/docs/index.rst", + "https://github.com/AdaCore/gnatcoll-db/blob/master/docs/index.rst" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Adobe-2006.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Adobe-2006.json", + "referenceNumber": 128, + "name": "Adobe Systems Incorporated Source Code License Agreement", + "licenseId": "Adobe-2006", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/AdobeLicense" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Adobe-Display-PostScript.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Adobe-Display-PostScript.json", + "referenceNumber": 433, + "name": "Adobe Display PostScript License", + "licenseId": "Adobe-Display-PostScript", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/xserver/-/blob/master/COPYING?ref_type\u003dheads#L752" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Adobe-Glyph.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Adobe-Glyph.json", + "referenceNumber": 125, + "name": "Adobe Glyph List License", + "licenseId": "Adobe-Glyph", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MIT#AdobeGlyph" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Adobe-Utopia.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Adobe-Utopia.json", + "referenceNumber": 495, + "name": "Adobe Utopia Font License", + "licenseId": "Adobe-Utopia", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/font/adobe-utopia-100dpi/-/blob/master/COPYING?ref_type\u003dheads" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ADSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ADSL.json", + "referenceNumber": 560, + "name": "Amazon Digital Services License", + "licenseId": "ADSL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/AmazonDigitalServicesLicense" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AFL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AFL-1.1.json", + "referenceNumber": 14, + "name": "Academic Free License v1.1", + "licenseId": "AFL-1.1", + "seeAlso": [ + "http://opensource.linux-mirror.org/licenses/afl-1.1.txt", + "http://wayback.archive.org/web/20021004124254/http://www.opensource.org/licenses/academic.php" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AFL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AFL-1.2.json", + "referenceNumber": 622, + "name": "Academic Free License v1.2", + "licenseId": "AFL-1.2", + "seeAlso": [ + "http://opensource.linux-mirror.org/licenses/afl-1.2.txt", + "http://wayback.archive.org/web/20021204204652/http://www.opensource.org/licenses/academic.php" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AFL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AFL-2.0.json", + "referenceNumber": 559, + "name": "Academic Free License v2.0", + "licenseId": "AFL-2.0", + "seeAlso": [ + "http://wayback.archive.org/web/20060924134533/http://www.opensource.org/licenses/afl-2.0.txt" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AFL-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AFL-2.1.json", + "referenceNumber": 570, + "name": "Academic Free License v2.1", + "licenseId": "AFL-2.1", + "seeAlso": [ + "http://opensource.linux-mirror.org/licenses/afl-2.1.txt" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AFL-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AFL-3.0.json", + "referenceNumber": 332, + "name": "Academic Free License v3.0", + "licenseId": "AFL-3.0", + "seeAlso": [ + "http://www.rosenlaw.com/AFL3.0.htm", + "https://opensource.org/licenses/afl-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Afmparse.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Afmparse.json", + "referenceNumber": 163, + "name": "Afmparse License", + "licenseId": "Afmparse", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Afmparse" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AGPL-1.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/AGPL-1.0.json", + "referenceNumber": 657, + "name": "Affero General Public License v1.0", + "licenseId": "AGPL-1.0", + "seeAlso": [ + "http://www.affero.org/oagpl.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AGPL-1.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AGPL-1.0-only.json", + "referenceNumber": 142, + "name": "Affero General Public License v1.0 only", + "licenseId": "AGPL-1.0-only", + "seeAlso": [ + "http://www.affero.org/oagpl.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AGPL-1.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AGPL-1.0-or-later.json", + "referenceNumber": 155, + "name": "Affero General Public License v1.0 or later", + "licenseId": "AGPL-1.0-or-later", + "seeAlso": [ + "http://www.affero.org/oagpl.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AGPL-3.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/AGPL-3.0.json", + "referenceNumber": 70, + "name": "GNU Affero General Public License v3.0", + "licenseId": "AGPL-3.0", + "seeAlso": [ + "https://www.gnu.org/licenses/agpl.txt", + "https://opensource.org/licenses/AGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AGPL-3.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AGPL-3.0-only.json", + "referenceNumber": 330, + "name": "GNU Affero General Public License v3.0 only", + "licenseId": "AGPL-3.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/agpl.txt", + "https://opensource.org/licenses/AGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AGPL-3.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AGPL-3.0-or-later.json", + "referenceNumber": 366, + "name": "GNU Affero General Public License v3.0 or later", + "licenseId": "AGPL-3.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/agpl.txt", + "https://opensource.org/licenses/AGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Aladdin.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Aladdin.json", + "referenceNumber": 557, + "name": "Aladdin Free Public License", + "licenseId": "Aladdin", + "seeAlso": [ + "http://pages.cs.wisc.edu/~ghost/doc/AFPL/6.01/Public.htm" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/AMD-newlib.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AMD-newlib.json", + "referenceNumber": 340, + "name": "AMD newlib License", + "licenseId": "AMD-newlib", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dnewlib-cygwin.git;a\u003dblob;f\u003dnewlib/libc/sys/a29khif/_close.S;h\u003d04f52ae00de1dafbd9055ad8d73c5c697a3aae7f;hb\u003dHEAD" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AMDPLPA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AMDPLPA.json", + "referenceNumber": 467, + "name": "AMD\u0027s plpa_map.c License", + "licenseId": "AMDPLPA", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/AMD_plpa_map_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AML.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AML.json", + "referenceNumber": 299, + "name": "Apple MIT License", + "licenseId": "AML", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Apple_MIT_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AML-glslang.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AML-glslang.json", + "referenceNumber": 567, + "name": "AML glslang variant License", + "licenseId": "AML-glslang", + "seeAlso": [ + "https://github.com/KhronosGroup/glslang/blob/main/LICENSE.txt#L949", + "https://docs.omniverse.nvidia.com/install-guide/latest/common/licenses.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AMPAS.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AMPAS.json", + "referenceNumber": 414, + "name": "Academy of Motion Picture Arts and Sciences BSD", + "licenseId": "AMPAS", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/BSD#AMPASBSD" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ANTLR-PD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ANTLR-PD.json", + "referenceNumber": 460, + "name": "ANTLR Software Rights Notice", + "licenseId": "ANTLR-PD", + "seeAlso": [ + "http://www.antlr2.org/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ANTLR-PD-fallback.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ANTLR-PD-fallback.json", + "referenceNumber": 65, + "name": "ANTLR Software Rights Notice with license fallback", + "licenseId": "ANTLR-PD-fallback", + "seeAlso": [ + "http://www.antlr2.org/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/any-OSI.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/any-OSI.json", + "referenceNumber": 310, + "name": "Any OSI License", + "licenseId": "any-OSI", + "seeAlso": [ + "https://metacpan.org/pod/Exporter::Tidy#LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Apache-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Apache-1.0.json", + "referenceNumber": 250, + "name": "Apache License 1.0", + "licenseId": "Apache-1.0", + "seeAlso": [ + "http://www.apache.org/licenses/LICENSE-1.0" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Apache-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Apache-1.1.json", + "referenceNumber": 288, + "name": "Apache License 1.1", + "licenseId": "Apache-1.1", + "seeAlso": [ + "http://apache.org/licenses/LICENSE-1.1", + "https://opensource.org/licenses/Apache-1.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Apache-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Apache-2.0.json", + "referenceNumber": 143, + "name": "Apache License 2.0", + "licenseId": "Apache-2.0", + "seeAlso": [ + "https://www.apache.org/licenses/LICENSE-2.0", + "https://opensource.org/licenses/Apache-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/APAFML.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APAFML.json", + "referenceNumber": 636, + "name": "Adobe Postscript AFM License", + "licenseId": "APAFML", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/AdobePostscriptAFM" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/APL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APL-1.0.json", + "referenceNumber": 85, + "name": "Adaptive Public License 1.0", + "licenseId": "APL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/APL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/App-s2p.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/App-s2p.json", + "referenceNumber": 238, + "name": "App::s2p License", + "licenseId": "App-s2p", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/App-s2p" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/APSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APSL-1.0.json", + "referenceNumber": 335, + "name": "Apple Public Source License 1.0", + "licenseId": "APSL-1.0", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Apple_Public_Source_License_1.0" + ], + "isOsiApproved": true, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/APSL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APSL-1.1.json", + "referenceNumber": 308, + "name": "Apple Public Source License 1.1", + "licenseId": "APSL-1.1", + "seeAlso": [ + "http://www.opensource.apple.com/source/IOSerialFamily/IOSerialFamily-7/APPLE_LICENSE" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/APSL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APSL-1.2.json", + "referenceNumber": 280, + "name": "Apple Public Source License 1.2", + "licenseId": "APSL-1.2", + "seeAlso": [ + "http://www.samurajdata.se/opensource/mirror/licenses/apsl.php" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/APSL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APSL-2.0.json", + "referenceNumber": 592, + "name": "Apple Public Source License 2.0", + "licenseId": "APSL-2.0", + "seeAlso": [ + "http://www.opensource.apple.com/license/apsl/" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Arphic-1999.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Arphic-1999.json", + "referenceNumber": 32, + "name": "Arphic Public License", + "licenseId": "Arphic-1999", + "seeAlso": [ + "http://ftp.gnu.org/gnu/non-gnu/chinese-fonts-truetype/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Artistic-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Artistic-1.0.json", + "referenceNumber": 138, + "name": "Artistic License 1.0", + "licenseId": "Artistic-1.0", + "seeAlso": [ + "https://opensource.org/licenses/Artistic-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/Artistic-1.0-cl8.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Artistic-1.0-cl8.json", + "referenceNumber": 353, + "name": "Artistic License 1.0 w/clause 8", + "licenseId": "Artistic-1.0-cl8", + "seeAlso": [ + "https://opensource.org/licenses/Artistic-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Artistic-1.0-Perl.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Artistic-1.0-Perl.json", + "referenceNumber": 660, + "name": "Artistic License 1.0 (Perl)", + "licenseId": "Artistic-1.0-Perl", + "seeAlso": [ + "http://dev.perl.org/licenses/artistic.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Artistic-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Artistic-2.0.json", + "referenceNumber": 277, + "name": "Artistic License 2.0", + "licenseId": "Artistic-2.0", + "seeAlso": [ + "http://www.perlfoundation.org/artistic_license_2_0", + "https://www.perlfoundation.org/artistic-license-20.html", + "https://opensource.org/licenses/artistic-license-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ASWF-Digital-Assets-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ASWF-Digital-Assets-1.0.json", + "referenceNumber": 166, + "name": "ASWF Digital Assets License version 1.0", + "licenseId": "ASWF-Digital-Assets-1.0", + "seeAlso": [ + "https://github.com/AcademySoftwareFoundation/foundation/blob/main/digital_assets/aswf_digital_assets_license_v1.0.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ASWF-Digital-Assets-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ASWF-Digital-Assets-1.1.json", + "referenceNumber": 29, + "name": "ASWF Digital Assets License 1.1", + "licenseId": "ASWF-Digital-Assets-1.1", + "seeAlso": [ + "https://github.com/AcademySoftwareFoundation/foundation/blob/main/digital_assets/aswf_digital_assets_license_v1.1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Baekmuk.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Baekmuk.json", + "referenceNumber": 380, + "name": "Baekmuk License", + "licenseId": "Baekmuk", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:Baekmuk?rd\u003dLicensing/Baekmuk" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Bahyph.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Bahyph.json", + "referenceNumber": 368, + "name": "Bahyph License", + "licenseId": "Bahyph", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Bahyph" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Barr.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Barr.json", + "referenceNumber": 195, + "name": "Barr License", + "licenseId": "Barr", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Barr" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/bcrypt-Solar-Designer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/bcrypt-Solar-Designer.json", + "referenceNumber": 478, + "name": "bcrypt Solar Designer License", + "licenseId": "bcrypt-Solar-Designer", + "seeAlso": [ + "https://github.com/bcrypt-ruby/bcrypt-ruby/blob/master/ext/mri/crypt_blowfish.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Beerware.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Beerware.json", + "referenceNumber": 616, + "name": "Beerware License", + "licenseId": "Beerware", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Beerware", + "https://people.freebsd.org/~phk/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Bitstream-Charter.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Bitstream-Charter.json", + "referenceNumber": 455, + "name": "Bitstream Charter Font License", + "licenseId": "Bitstream-Charter", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Charter#License_Text", + "https://raw.githubusercontent.com/blackhole89/notekit/master/data/fonts/Charter%20license.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Bitstream-Vera.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Bitstream-Vera.json", + "referenceNumber": 370, + "name": "Bitstream Vera Font License", + "licenseId": "Bitstream-Vera", + "seeAlso": [ + "https://web.archive.org/web/20080207013128/http://www.gnome.org/fonts/", + "https://docubrain.com/sites/default/files/licenses/bitstream-vera.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BitTorrent-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BitTorrent-1.0.json", + "referenceNumber": 106, + "name": "BitTorrent Open Source License v1.0", + "licenseId": "BitTorrent-1.0", + "seeAlso": [ + "http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/licenses/BitTorrent?r1\u003d1.1\u0026r2\u003d1.1.1.1\u0026diff_format\u003ds" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BitTorrent-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BitTorrent-1.1.json", + "referenceNumber": 541, + "name": "BitTorrent Open Source License v1.1", + "licenseId": "BitTorrent-1.1", + "seeAlso": [ + "http://directory.fsf.org/wiki/License:BitTorrentOSL1.1" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/blessing.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/blessing.json", + "referenceNumber": 359, + "name": "SQLite Blessing", + "licenseId": "blessing", + "seeAlso": [ + "https://www.sqlite.org/src/artifact/e33a4df7e32d742a?ln\u003d4-9", + "https://sqlite.org/src/artifact/df5091916dbb40e6" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BlueOak-1.0.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BlueOak-1.0.0.json", + "referenceNumber": 606, + "name": "Blue Oak Model License 1.0.0", + "licenseId": "BlueOak-1.0.0", + "seeAlso": [ + "https://blueoakcouncil.org/license/1.0.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Boehm-GC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Boehm-GC.json", + "referenceNumber": 127, + "name": "Boehm-Demers-Weiser GC License", + "licenseId": "Boehm-GC", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:MIT#Another_Minimal_variant_(found_in_libatomic_ops)", + "https://github.com/uim/libgcroots/blob/master/COPYING", + "https://github.com/ivmai/libatomic_ops/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Borceux.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Borceux.json", + "referenceNumber": 571, + "name": "Borceux license", + "licenseId": "Borceux", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Borceux" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Brian-Gladman-2-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Brian-Gladman-2-Clause.json", + "referenceNumber": 416, + "name": "Brian Gladman 2-Clause License", + "licenseId": "Brian-Gladman-2-Clause", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L140-L156", + "https://web.mit.edu/kerberos/krb5-1.21/doc/mitK5license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Brian-Gladman-3-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Brian-Gladman-3-Clause.json", + "referenceNumber": 290, + "name": "Brian Gladman 3-Clause License", + "licenseId": "Brian-Gladman-3-Clause", + "seeAlso": [ + "https://github.com/SWI-Prolog/packages-clib/blob/master/sha1/brg_endian.h" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-1-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-1-Clause.json", + "referenceNumber": 419, + "name": "BSD 1-Clause License", + "licenseId": "BSD-1-Clause", + "seeAlso": [ + "https://svnweb.freebsd.org/base/head/include/ifaddrs.h?revision\u003d326823" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause.json", + "referenceNumber": 229, + "name": "BSD 2-Clause \"Simplified\" License", + "licenseId": "BSD-2-Clause", + "seeAlso": [ + "https://opensource.org/licenses/BSD-2-Clause" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-Darwin.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-Darwin.json", + "referenceNumber": 296, + "name": "BSD 2-Clause - Ian Darwin variant", + "licenseId": "BSD-2-Clause-Darwin", + "seeAlso": [ + "https://github.com/file/file/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-first-lines.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-first-lines.json", + "referenceNumber": 217, + "name": "BSD 2-Clause - first lines requirement", + "licenseId": "BSD-2-Clause-first-lines", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L664-L690", + "https://web.mit.edu/kerberos/krb5-1.21/doc/mitK5license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-FreeBSD.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-FreeBSD.json", + "referenceNumber": 564, + "name": "BSD 2-Clause FreeBSD License", + "licenseId": "BSD-2-Clause-FreeBSD", + "seeAlso": [ + "http://www.freebsd.org/copyright/freebsd-license.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-NetBSD.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-NetBSD.json", + "referenceNumber": 376, + "name": "BSD 2-Clause NetBSD License", + "licenseId": "BSD-2-Clause-NetBSD", + "seeAlso": [ + "http://www.netbsd.org/about/redistribution.html#default" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-Patent.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-Patent.json", + "referenceNumber": 4, + "name": "BSD-2-Clause Plus Patent License", + "licenseId": "BSD-2-Clause-Patent", + "seeAlso": [ + "https://opensource.org/licenses/BSDplusPatent" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-Views.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-Views.json", + "referenceNumber": 514, + "name": "BSD 2-Clause with views sentence", + "licenseId": "BSD-2-Clause-Views", + "seeAlso": [ + "http://www.freebsd.org/copyright/freebsd-license.html", + "https://people.freebsd.org/~ivoras/wine/patch-wine-nvidia.sh", + "https://github.com/protegeproject/protege/blob/master/license.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause.json", + "referenceNumber": 584, + "name": "BSD 3-Clause \"New\" or \"Revised\" License", + "licenseId": "BSD-3-Clause", + "seeAlso": [ + "https://opensource.org/licenses/BSD-3-Clause", + "https://www.eclipse.org/org/documents/edl-v10.php" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-acpica.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-acpica.json", + "referenceNumber": 341, + "name": "BSD 3-Clause acpica variant", + "licenseId": "BSD-3-Clause-acpica", + "seeAlso": [ + "https://github.com/acpica/acpica/blob/master/source/common/acfileio.c#L119" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-Attribution.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Attribution.json", + "referenceNumber": 71, + "name": "BSD with attribution", + "licenseId": "BSD-3-Clause-Attribution", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/BSD_with_Attribution" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-Clear.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Clear.json", + "referenceNumber": 253, + "name": "BSD 3-Clause Clear License", + "licenseId": "BSD-3-Clause-Clear", + "seeAlso": [ + "http://labs.metacarta.com/license-explanation.html#license" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-flex.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-flex.json", + "referenceNumber": 52, + "name": "BSD 3-Clause Flex variant", + "licenseId": "BSD-3-Clause-flex", + "seeAlso": [ + "https://github.com/westes/flex/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-HP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-HP.json", + "referenceNumber": 215, + "name": "Hewlett-Packard BSD variant license", + "licenseId": "BSD-3-Clause-HP", + "seeAlso": [ + "https://github.com/zdohnal/hplip/blob/master/COPYING#L939" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-LBNL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-LBNL.json", + "referenceNumber": 301, + "name": "Lawrence Berkeley National Labs BSD variant license", + "licenseId": "BSD-3-Clause-LBNL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/LBNLBSD" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-Modification.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Modification.json", + "referenceNumber": 47, + "name": "BSD 3-Clause Modification", + "licenseId": "BSD-3-Clause-Modification", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:BSD#Modification_Variant" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Military-License.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Military-License.json", + "referenceNumber": 615, + "name": "BSD 3-Clause No Military License", + "licenseId": "BSD-3-Clause-No-Military-License", + "seeAlso": [ + "https://gitlab.syncad.com/hive/dhive/-/blob/master/LICENSE", + "https://github.com/greymass/swift-eosio/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License.json", + "referenceNumber": 647, + "name": "BSD 3-Clause No Nuclear License", + "licenseId": "BSD-3-Clause-No-Nuclear-License", + "seeAlso": [ + "http://download.oracle.com/otn-pub/java/licenses/bsd.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License-2014.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License-2014.json", + "referenceNumber": 377, + "name": "BSD 3-Clause No Nuclear License 2014", + "licenseId": "BSD-3-Clause-No-Nuclear-License-2014", + "seeAlso": [ + "https://java.net/projects/javaeetutorial/pages/BerkeleyLicense" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-Warranty.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-Warranty.json", + "referenceNumber": 54, + "name": "BSD 3-Clause No Nuclear Warranty", + "licenseId": "BSD-3-Clause-No-Nuclear-Warranty", + "seeAlso": [ + "https://jogamp.org/git/?p\u003dgluegen.git;a\u003dblob_plain;f\u003dLICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-Open-MPI.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Open-MPI.json", + "referenceNumber": 633, + "name": "BSD 3-Clause Open MPI variant", + "licenseId": "BSD-3-Clause-Open-MPI", + "seeAlso": [ + "https://www.open-mpi.org/community/license.php", + "http://www.netlib.org/lapack/LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-Sun.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Sun.json", + "referenceNumber": 270, + "name": "BSD 3-Clause Sun Microsystems", + "licenseId": "BSD-3-Clause-Sun", + "seeAlso": [ + "https://github.com/xmlark/msv/blob/b9316e2f2270bc1606952ea4939ec87fbba157f3/xsdlib/src/main/java/com/sun/msv/datatype/regexp/InternalImpl.java" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-4-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-4-Clause.json", + "referenceNumber": 470, + "name": "BSD 4-Clause \"Original\" or \"Old\" License", + "licenseId": "BSD-4-Clause", + "seeAlso": [ + "http://directory.fsf.org/wiki/License:BSD_4Clause" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-4-Clause-Shortened.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-4-Clause-Shortened.json", + "referenceNumber": 220, + "name": "BSD 4 Clause Shortened", + "licenseId": "BSD-4-Clause-Shortened", + "seeAlso": [ + "https://metadata.ftp-master.debian.org/changelogs//main/a/arpwatch/arpwatch_2.1a15-7_copyright" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-4-Clause-UC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-4-Clause-UC.json", + "referenceNumber": 175, + "name": "BSD-4-Clause (University of California-Specific)", + "licenseId": "BSD-4-Clause-UC", + "seeAlso": [ + "http://www.freebsd.org/copyright/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-4.3RENO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-4.3RENO.json", + "referenceNumber": 361, + "name": "BSD 4.3 RENO License", + "licenseId": "BSD-4.3RENO", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dbinutils-gdb.git;a\u003dblob;f\u003dlibiberty/strcasecmp.c;h\u003d131d81c2ce7881fa48c363dc5bf5fb302c61ce0b;hb\u003dHEAD", + "https://git.openldap.org/openldap/openldap/-/blob/master/COPYRIGHT#L55-63" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-4.3TAHOE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-4.3TAHOE.json", + "referenceNumber": 46, + "name": "BSD 4.3 TAHOE License", + "licenseId": "BSD-4.3TAHOE", + "seeAlso": [ + "https://github.com/389ds/389-ds-base/blob/main/ldap/include/sysexits-compat.h#L15", + "https://git.savannah.gnu.org/cgit/indent.git/tree/doc/indent.texi?id\u003da74c6b4ee49397cf330b333da1042bffa60ed14f#n1788" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Advertising-Acknowledgement.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Advertising-Acknowledgement.json", + "referenceNumber": 297, + "name": "BSD Advertising Acknowledgement License", + "licenseId": "BSD-Advertising-Acknowledgement", + "seeAlso": [ + "https://github.com/python-excel/xlrd/blob/master/LICENSE#L33" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Attribution-HPND-disclaimer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Attribution-HPND-disclaimer.json", + "referenceNumber": 86, + "name": "BSD with Attribution and HPND disclaimer", + "licenseId": "BSD-Attribution-HPND-disclaimer", + "seeAlso": [ + "https://github.com/cyrusimap/cyrus-sasl/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Inferno-Nettverk.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Inferno-Nettverk.json", + "referenceNumber": 89, + "name": "BSD-Inferno-Nettverk", + "licenseId": "BSD-Inferno-Nettverk", + "seeAlso": [ + "https://www.inet.no/dante/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Protection.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Protection.json", + "referenceNumber": 394, + "name": "BSD Protection License", + "licenseId": "BSD-Protection", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/BSD_Protection_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Source-beginning-file.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Source-beginning-file.json", + "referenceNumber": 378, + "name": "BSD Source Code Attribution - beginning of file variant", + "licenseId": "BSD-Source-beginning-file", + "seeAlso": [ + "https://github.com/lattera/freebsd/blob/master/sys/cam/cam.c#L4" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Source-Code.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Source-Code.json", + "referenceNumber": 605, + "name": "BSD Source Code Attribution", + "licenseId": "BSD-Source-Code", + "seeAlso": [ + "https://github.com/robbiehanson/CocoaHTTPServer/blob/master/LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Systemics.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Systemics.json", + "referenceNumber": 327, + "name": "Systemics BSD variant license", + "licenseId": "BSD-Systemics", + "seeAlso": [ + "https://metacpan.org/release/DPARIS/Crypt-DES-2.07/source/COPYRIGHT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Systemics-W3Works.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Systemics-W3Works.json", + "referenceNumber": 427, + "name": "Systemics W3Works BSD variant license", + "licenseId": "BSD-Systemics-W3Works", + "seeAlso": [ + "https://metacpan.org/release/DPARIS/Crypt-Blowfish-2.14/source/COPYRIGHT#L7" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSL-1.0.json", + "referenceNumber": 334, + "name": "Boost Software License 1.0", + "licenseId": "BSL-1.0", + "seeAlso": [ + "http://www.boost.org/LICENSE_1_0.txt", + "https://opensource.org/licenses/BSL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BUSL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BUSL-1.1.json", + "referenceNumber": 285, + "name": "Business Source License 1.1", + "licenseId": "BUSL-1.1", + "seeAlso": [ + "https://mariadb.com/bsl11/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/bzip2-1.0.5.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/bzip2-1.0.5.json", + "referenceNumber": 574, + "name": "bzip2 and libbzip2 License v1.0.5", + "licenseId": "bzip2-1.0.5", + "seeAlso": [ + "https://sourceware.org/bzip2/1.0.5/bzip2-manual-1.0.5.html", + "http://bzip.org/1.0.5/bzip2-manual-1.0.5.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/bzip2-1.0.6.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/bzip2-1.0.6.json", + "referenceNumber": 534, + "name": "bzip2 and libbzip2 License v1.0.6", + "licenseId": "bzip2-1.0.6", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dbzip2.git;a\u003dblob;f\u003dLICENSE;hb\u003dbzip2-1.0.6", + "http://bzip.org/1.0.5/bzip2-manual-1.0.5.html", + "https://sourceware.org/cgit/valgrind/tree/mpi/libmpiwrap.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/C-UDA-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/C-UDA-1.0.json", + "referenceNumber": 162, + "name": "Computational Use of Data Agreement v1.0", + "licenseId": "C-UDA-1.0", + "seeAlso": [ + "https://github.com/microsoft/Computational-Use-of-Data-Agreement/blob/master/C-UDA-1.0.md", + "https://cdla.dev/computational-use-of-data-agreement-v1-0/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CAL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CAL-1.0.json", + "referenceNumber": 99, + "name": "Cryptographic Autonomy License 1.0", + "licenseId": "CAL-1.0", + "seeAlso": [ + "http://cryptographicautonomylicense.com/license-text.html", + "https://opensource.org/licenses/CAL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CAL-1.0-Combined-Work-Exception.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CAL-1.0-Combined-Work-Exception.json", + "referenceNumber": 333, + "name": "Cryptographic Autonomy License 1.0 (Combined Work Exception)", + "licenseId": "CAL-1.0-Combined-Work-Exception", + "seeAlso": [ + "http://cryptographicautonomylicense.com/license-text.html", + "https://opensource.org/licenses/CAL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Caldera.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Caldera.json", + "referenceNumber": 528, + "name": "Caldera License", + "licenseId": "Caldera", + "seeAlso": [ + "http://www.lemis.com/grog/UNIX/ancient-source-all.pdf" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Caldera-no-preamble.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Caldera-no-preamble.json", + "referenceNumber": 233, + "name": "Caldera License (without preamble)", + "licenseId": "Caldera-no-preamble", + "seeAlso": [ + "https://github.com/apache/apr/blob/trunk/LICENSE#L298C6-L298C29" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Catharon.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Catharon.json", + "referenceNumber": 337, + "name": "Catharon License", + "licenseId": "Catharon", + "seeAlso": [ + "https://github.com/scummvm/scummvm/blob/v2.8.0/LICENSES/CatharonLicense.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CATOSL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CATOSL-1.1.json", + "referenceNumber": 134, + "name": "Computer Associates Trusted Open Source License 1.1", + "licenseId": "CATOSL-1.1", + "seeAlso": [ + "https://opensource.org/licenses/CATOSL-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CC-BY-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-1.0.json", + "referenceNumber": 415, + "name": "Creative Commons Attribution 1.0 Generic", + "licenseId": "CC-BY-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by/1.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-2.0.json", + "referenceNumber": 428, + "name": "Creative Commons Attribution 2.0 Generic", + "licenseId": "CC-BY-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by/2.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-2.5.json", + "referenceNumber": 573, + "name": "Creative Commons Attribution 2.5 Generic", + "licenseId": "CC-BY-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by/2.5/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-2.5-AU.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-2.5-AU.json", + "referenceNumber": 388, + "name": "Creative Commons Attribution 2.5 Australia", + "licenseId": "CC-BY-2.5-AU", + "seeAlso": [ + "https://creativecommons.org/licenses/by/2.5/au/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0.json", + "referenceNumber": 132, + "name": "Creative Commons Attribution 3.0 Unported", + "licenseId": "CC-BY-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-AT.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-AT.json", + "referenceNumber": 25, + "name": "Creative Commons Attribution 3.0 Austria", + "licenseId": "CC-BY-3.0-AT", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/at/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-AU.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-AU.json", + "referenceNumber": 392, + "name": "Creative Commons Attribution 3.0 Australia", + "licenseId": "CC-BY-3.0-AU", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/au/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-DE.json", + "referenceNumber": 21, + "name": "Creative Commons Attribution 3.0 Germany", + "licenseId": "CC-BY-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-IGO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-IGO.json", + "referenceNumber": 596, + "name": "Creative Commons Attribution 3.0 IGO", + "licenseId": "CC-BY-3.0-IGO", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/igo/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-NL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-NL.json", + "referenceNumber": 157, + "name": "Creative Commons Attribution 3.0 Netherlands", + "licenseId": "CC-BY-3.0-NL", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/nl/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-US.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-US.json", + "referenceNumber": 395, + "name": "Creative Commons Attribution 3.0 United States", + "licenseId": "CC-BY-3.0-US", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/us/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-4.0.json", + "referenceNumber": 435, + "name": "Creative Commons Attribution 4.0 International", + "licenseId": "CC-BY-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by/4.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-1.0.json", + "referenceNumber": 641, + "name": "Creative Commons Attribution Non Commercial 1.0 Generic", + "licenseId": "CC-BY-NC-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/1.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-2.0.json", + "referenceNumber": 91, + "name": "Creative Commons Attribution Non Commercial 2.0 Generic", + "licenseId": "CC-BY-NC-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/2.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-2.5.json", + "referenceNumber": 465, + "name": "Creative Commons Attribution Non Commercial 2.5 Generic", + "licenseId": "CC-BY-NC-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/2.5/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-3.0.json", + "referenceNumber": 234, + "name": "Creative Commons Attribution Non Commercial 3.0 Unported", + "licenseId": "CC-BY-NC-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/3.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-3.0-DE.json", + "referenceNumber": 354, + "name": "Creative Commons Attribution Non Commercial 3.0 Germany", + "licenseId": "CC-BY-NC-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-4.0.json", + "referenceNumber": 53, + "name": "Creative Commons Attribution Non Commercial 4.0 International", + "licenseId": "CC-BY-NC-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/4.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-1.0.json", + "referenceNumber": 88, + "name": "Creative Commons Attribution Non Commercial No Derivatives 1.0 Generic", + "licenseId": "CC-BY-NC-ND-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd-nc/1.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-2.0.json", + "referenceNumber": 426, + "name": "Creative Commons Attribution Non Commercial No Derivatives 2.0 Generic", + "licenseId": "CC-BY-NC-ND-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/2.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-2.5.json", + "referenceNumber": 441, + "name": "Creative Commons Attribution Non Commercial No Derivatives 2.5 Generic", + "licenseId": "CC-BY-NC-ND-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/2.5/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-3.0.json", + "referenceNumber": 304, + "name": "Creative Commons Attribution Non Commercial No Derivatives 3.0 Unported", + "licenseId": "CC-BY-NC-ND-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/3.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-DE.json", + "referenceNumber": 121, + "name": "Creative Commons Attribution Non Commercial No Derivatives 3.0 Germany", + "licenseId": "CC-BY-NC-ND-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-IGO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-IGO.json", + "referenceNumber": 171, + "name": "Creative Commons Attribution Non Commercial No Derivatives 3.0 IGO", + "licenseId": "CC-BY-NC-ND-3.0-IGO", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/3.0/igo/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-4.0.json", + "referenceNumber": 183, + "name": "Creative Commons Attribution Non Commercial No Derivatives 4.0 International", + "licenseId": "CC-BY-NC-ND-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-1.0.json", + "referenceNumber": 501, + "name": "Creative Commons Attribution Non Commercial Share Alike 1.0 Generic", + "licenseId": "CC-BY-NC-SA-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/1.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0.json", + "referenceNumber": 358, + "name": "Creative Commons Attribution Non Commercial Share Alike 2.0 Generic", + "licenseId": "CC-BY-NC-SA-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/2.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-DE.json", + "referenceNumber": 260, + "name": "Creative Commons Attribution Non Commercial Share Alike 2.0 Germany", + "licenseId": "CC-BY-NC-SA-2.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/2.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-FR.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-FR.json", + "referenceNumber": 158, + "name": "Creative Commons Attribution-NonCommercial-ShareAlike 2.0 France", + "licenseId": "CC-BY-NC-SA-2.0-FR", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/2.0/fr/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-UK.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-UK.json", + "referenceNumber": 33, + "name": "Creative Commons Attribution Non Commercial Share Alike 2.0 England and Wales", + "licenseId": "CC-BY-NC-SA-2.0-UK", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/2.0/uk/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.5.json", + "referenceNumber": 222, + "name": "Creative Commons Attribution Non Commercial Share Alike 2.5 Generic", + "licenseId": "CC-BY-NC-SA-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/2.5/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-3.0.json", + "referenceNumber": 255, + "name": "Creative Commons Attribution Non Commercial Share Alike 3.0 Unported", + "licenseId": "CC-BY-NC-SA-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/3.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-DE.json", + "referenceNumber": 525, + "name": "Creative Commons Attribution Non Commercial Share Alike 3.0 Germany", + "licenseId": "CC-BY-NC-SA-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-IGO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-IGO.json", + "referenceNumber": 244, + "name": "Creative Commons Attribution Non Commercial Share Alike 3.0 IGO", + "licenseId": "CC-BY-NC-SA-3.0-IGO", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/3.0/igo/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-4.0.json", + "referenceNumber": 513, + "name": "Creative Commons Attribution Non Commercial Share Alike 4.0 International", + "licenseId": "CC-BY-NC-SA-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-1.0.json", + "referenceNumber": 474, + "name": "Creative Commons Attribution No Derivatives 1.0 Generic", + "licenseId": "CC-BY-ND-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/1.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-2.0.json", + "referenceNumber": 356, + "name": "Creative Commons Attribution No Derivatives 2.0 Generic", + "licenseId": "CC-BY-ND-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/2.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-2.5.json", + "referenceNumber": 259, + "name": "Creative Commons Attribution No Derivatives 2.5 Generic", + "licenseId": "CC-BY-ND-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/2.5/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-3.0.json", + "referenceNumber": 527, + "name": "Creative Commons Attribution No Derivatives 3.0 Unported", + "licenseId": "CC-BY-ND-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/3.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-3.0-DE.json", + "referenceNumber": 214, + "name": "Creative Commons Attribution No Derivatives 3.0 Germany", + "licenseId": "CC-BY-ND-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-4.0.json", + "referenceNumber": 481, + "name": "Creative Commons Attribution No Derivatives 4.0 International", + "licenseId": "CC-BY-ND-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/4.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-1.0.json", + "referenceNumber": 588, + "name": "Creative Commons Attribution Share Alike 1.0 Generic", + "licenseId": "CC-BY-SA-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/1.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.0.json", + "referenceNumber": 180, + "name": "Creative Commons Attribution Share Alike 2.0 Generic", + "licenseId": "CC-BY-SA-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/2.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-2.0-UK.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.0-UK.json", + "referenceNumber": 385, + "name": "Creative Commons Attribution Share Alike 2.0 England and Wales", + "licenseId": "CC-BY-SA-2.0-UK", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/2.0/uk/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-2.1-JP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.1-JP.json", + "referenceNumber": 17, + "name": "Creative Commons Attribution Share Alike 2.1 Japan", + "licenseId": "CC-BY-SA-2.1-JP", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/2.1/jp/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.5.json", + "referenceNumber": 607, + "name": "Creative Commons Attribution Share Alike 2.5 Generic", + "licenseId": "CC-BY-SA-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/2.5/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0.json", + "referenceNumber": 26, + "name": "Creative Commons Attribution Share Alike 3.0 Unported", + "licenseId": "CC-BY-SA-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/3.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-3.0-AT.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0-AT.json", + "referenceNumber": 398, + "name": "Creative Commons Attribution Share Alike 3.0 Austria", + "licenseId": "CC-BY-SA-3.0-AT", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/3.0/at/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0-DE.json", + "referenceNumber": 120, + "name": "Creative Commons Attribution Share Alike 3.0 Germany", + "licenseId": "CC-BY-SA-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-3.0-IGO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0-IGO.json", + "referenceNumber": 519, + "name": "Creative Commons Attribution-ShareAlike 3.0 IGO", + "licenseId": "CC-BY-SA-3.0-IGO", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/3.0/igo/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-4.0.json", + "referenceNumber": 13, + "name": "Creative Commons Attribution Share Alike 4.0 International", + "licenseId": "CC-BY-SA-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/4.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CC-PDDC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-PDDC.json", + "referenceNumber": 169, + "name": "Creative Commons Public Domain Dedication and Certification", + "licenseId": "CC-PDDC", + "seeAlso": [ + "https://creativecommons.org/licenses/publicdomain/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC0-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC0-1.0.json", + "referenceNumber": 491, + "name": "Creative Commons Zero v1.0 Universal", + "licenseId": "CC0-1.0", + "seeAlso": [ + "https://creativecommons.org/publicdomain/zero/1.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CDDL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDDL-1.0.json", + "referenceNumber": 185, + "name": "Common Development and Distribution License 1.0", + "licenseId": "CDDL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/cddl1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CDDL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDDL-1.1.json", + "referenceNumber": 476, + "name": "Common Development and Distribution License 1.1", + "licenseId": "CDDL-1.1", + "seeAlso": [ + "http://glassfish.java.net/public/CDDL+GPL_1_1.html", + "https://javaee.github.io/glassfish/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CDL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDL-1.0.json", + "referenceNumber": 305, + "name": "Common Documentation License 1.0", + "licenseId": "CDL-1.0", + "seeAlso": [ + "http://www.opensource.apple.com/cdl/", + "https://fedoraproject.org/wiki/Licensing/Common_Documentation_License", + "https://www.gnu.org/licenses/license-list.html#ACDL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CDLA-Permissive-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDLA-Permissive-1.0.json", + "referenceNumber": 386, + "name": "Community Data License Agreement Permissive 1.0", + "licenseId": "CDLA-Permissive-1.0", + "seeAlso": [ + "https://cdla.io/permissive-1-0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CDLA-Permissive-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDLA-Permissive-2.0.json", + "referenceNumber": 590, + "name": "Community Data License Agreement Permissive 2.0", + "licenseId": "CDLA-Permissive-2.0", + "seeAlso": [ + "https://cdla.dev/permissive-2-0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CDLA-Sharing-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDLA-Sharing-1.0.json", + "referenceNumber": 190, + "name": "Community Data License Agreement Sharing 1.0", + "licenseId": "CDLA-Sharing-1.0", + "seeAlso": [ + "https://cdla.io/sharing-1-0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CECILL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-1.0.json", + "referenceNumber": 625, + "name": "CeCILL Free Software License Agreement v1.0", + "licenseId": "CECILL-1.0", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL_V1-fr.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CECILL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-1.1.json", + "referenceNumber": 326, + "name": "CeCILL Free Software License Agreement v1.1", + "licenseId": "CECILL-1.1", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL_V1.1-US.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CECILL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-2.0.json", + "referenceNumber": 463, + "name": "CeCILL Free Software License Agreement v2.0", + "licenseId": "CECILL-2.0", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL_V2-en.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CECILL-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-2.1.json", + "referenceNumber": 170, + "name": "CeCILL Free Software License Agreement v2.1", + "licenseId": "CECILL-2.1", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CECILL-B.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-B.json", + "referenceNumber": 196, + "name": "CeCILL-B Free Software License Agreement", + "licenseId": "CECILL-B", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CECILL-C.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-C.json", + "referenceNumber": 178, + "name": "CeCILL-C Free Software License Agreement", + "licenseId": "CECILL-C", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CERN-OHL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CERN-OHL-1.1.json", + "referenceNumber": 148, + "name": "CERN Open Hardware Licence v1.1", + "licenseId": "CERN-OHL-1.1", + "seeAlso": [ + "https://www.ohwr.org/project/licenses/wikis/cern-ohl-v1.1" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CERN-OHL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CERN-OHL-1.2.json", + "referenceNumber": 651, + "name": "CERN Open Hardware Licence v1.2", + "licenseId": "CERN-OHL-1.2", + "seeAlso": [ + "https://www.ohwr.org/project/licenses/wikis/cern-ohl-v1.2" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CERN-OHL-P-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CERN-OHL-P-2.0.json", + "referenceNumber": 543, + "name": "CERN Open Hardware Licence Version 2 - Permissive", + "licenseId": "CERN-OHL-P-2.0", + "seeAlso": [ + "https://www.ohwr.org/project/cernohl/wikis/Documents/CERN-OHL-version-2" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CERN-OHL-S-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CERN-OHL-S-2.0.json", + "referenceNumber": 396, + "name": "CERN Open Hardware Licence Version 2 - Strongly Reciprocal", + "licenseId": "CERN-OHL-S-2.0", + "seeAlso": [ + "https://www.ohwr.org/project/cernohl/wikis/Documents/CERN-OHL-version-2" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CERN-OHL-W-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CERN-OHL-W-2.0.json", + "referenceNumber": 614, + "name": "CERN Open Hardware Licence Version 2 - Weakly Reciprocal", + "licenseId": "CERN-OHL-W-2.0", + "seeAlso": [ + "https://www.ohwr.org/project/cernohl/wikis/Documents/CERN-OHL-version-2" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CFITSIO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CFITSIO.json", + "referenceNumber": 568, + "name": "CFITSIO License", + "licenseId": "CFITSIO", + "seeAlso": [ + "https://heasarc.gsfc.nasa.gov/docs/software/fitsio/c/f_user/node9.html", + "https://heasarc.gsfc.nasa.gov/docs/software/ftools/fv/doc/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/check-cvs.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/check-cvs.json", + "referenceNumber": 324, + "name": "check-cvs License", + "licenseId": "check-cvs", + "seeAlso": [ + "http://cvs.savannah.gnu.org/viewvc/cvs/ccvs/contrib/check_cvs.in?revision\u003d1.1.4.3\u0026view\u003dmarkup\u0026pathrev\u003dcvs1-11-23#l2" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/checkmk.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/checkmk.json", + "referenceNumber": 464, + "name": "Checkmk License", + "licenseId": "checkmk", + "seeAlso": [ + "https://github.com/libcheck/check/blob/master/checkmk/checkmk.in" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ClArtistic.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ClArtistic.json", + "referenceNumber": 230, + "name": "Clarified Artistic License", + "licenseId": "ClArtistic", + "seeAlso": [ + "http://gianluca.dellavedova.org/2011/01/03/clarified-artistic-license/", + "http://www.ncftp.com/ncftp/doc/LICENSE.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Clips.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Clips.json", + "referenceNumber": 424, + "name": "Clips License", + "licenseId": "Clips", + "seeAlso": [ + "https://github.com/DrItanium/maya/blob/master/LICENSE.CLIPS" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CMU-Mach.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CMU-Mach.json", + "referenceNumber": 73, + "name": "CMU Mach License", + "licenseId": "CMU-Mach", + "seeAlso": [ + "https://www.cs.cmu.edu/~410/licenses.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CMU-Mach-nodoc.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CMU-Mach-nodoc.json", + "referenceNumber": 8, + "name": "CMU Mach - no notices-in-documentation variant", + "licenseId": "CMU-Mach-nodoc", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L718-L728", + "https://web.mit.edu/kerberos/krb5-1.21/doc/mitK5license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CNRI-Jython.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CNRI-Jython.json", + "referenceNumber": 293, + "name": "CNRI Jython License", + "licenseId": "CNRI-Jython", + "seeAlso": [ + "http://www.jython.org/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CNRI-Python.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CNRI-Python.json", + "referenceNumber": 402, + "name": "CNRI Python License", + "licenseId": "CNRI-Python", + "seeAlso": [ + "https://opensource.org/licenses/CNRI-Python" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CNRI-Python-GPL-Compatible.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CNRI-Python-GPL-Compatible.json", + "referenceNumber": 224, + "name": "CNRI Python Open Source GPL Compatible License Agreement", + "licenseId": "CNRI-Python-GPL-Compatible", + "seeAlso": [ + "http://www.python.org/download/releases/1.6.1/download_win/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/COIL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/COIL-1.0.json", + "referenceNumber": 345, + "name": "Copyfree Open Innovation License", + "licenseId": "COIL-1.0", + "seeAlso": [ + "https://coil.apotheon.org/plaintext/01.0.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Community-Spec-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Community-Spec-1.0.json", + "referenceNumber": 56, + "name": "Community Specification License 1.0", + "licenseId": "Community-Spec-1.0", + "seeAlso": [ + "https://github.com/CommunitySpecification/1.0/blob/master/1._Community_Specification_License-v1.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Condor-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Condor-1.1.json", + "referenceNumber": 77, + "name": "Condor Public License v1.1", + "licenseId": "Condor-1.1", + "seeAlso": [ + "http://research.cs.wisc.edu/condor/license.html#condor", + "http://web.archive.org/web/20111123062036/http://research.cs.wisc.edu/condor/license.html#condor" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/copyleft-next-0.3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/copyleft-next-0.3.0.json", + "referenceNumber": 322, + "name": "copyleft-next 0.3.0", + "licenseId": "copyleft-next-0.3.0", + "seeAlso": [ + "https://github.com/copyleft-next/copyleft-next/blob/master/Releases/copyleft-next-0.3.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/copyleft-next-0.3.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/copyleft-next-0.3.1.json", + "referenceNumber": 403, + "name": "copyleft-next 0.3.1", + "licenseId": "copyleft-next-0.3.1", + "seeAlso": [ + "https://github.com/copyleft-next/copyleft-next/blob/master/Releases/copyleft-next-0.3.1" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Cornell-Lossless-JPEG.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Cornell-Lossless-JPEG.json", + "referenceNumber": 98, + "name": "Cornell Lossless JPEG License", + "licenseId": "Cornell-Lossless-JPEG", + "seeAlso": [ + "https://android.googlesource.com/platform/external/dng_sdk/+/refs/heads/master/source/dng_lossless_jpeg.cpp#16", + "https://www.mssl.ucl.ac.uk/~mcrw/src/20050920/proto.h", + "https://gitlab.freedesktop.org/libopenraw/libopenraw/blob/master/lib/ljpegdecompressor.cpp#L32" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CPAL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CPAL-1.0.json", + "referenceNumber": 548, + "name": "Common Public Attribution License 1.0", + "licenseId": "CPAL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/CPAL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CPL-1.0.json", + "referenceNumber": 114, + "name": "Common Public License 1.0", + "licenseId": "CPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/CPL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CPOL-1.02.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CPOL-1.02.json", + "referenceNumber": 6, + "name": "Code Project Open License 1.02", + "licenseId": "CPOL-1.02", + "seeAlso": [ + "http://www.codeproject.com/info/cpol10.aspx" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/Cronyx.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Cronyx.json", + "referenceNumber": 649, + "name": "Cronyx License", + "licenseId": "Cronyx", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/font/alias/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/font/cronyx-cyrillic/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/font/misc-cyrillic/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/font/screen-cyrillic/-/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Crossword.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Crossword.json", + "referenceNumber": 593, + "name": "Crossword License", + "licenseId": "Crossword", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Crossword" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CrystalStacker.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CrystalStacker.json", + "referenceNumber": 241, + "name": "CrystalStacker License", + "licenseId": "CrystalStacker", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:CrystalStacker?rd\u003dLicensing/CrystalStacker" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CUA-OPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CUA-OPL-1.0.json", + "referenceNumber": 409, + "name": "CUA Office Public License v1.0", + "licenseId": "CUA-OPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/CUA-OPL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Cube.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Cube.json", + "referenceNumber": 141, + "name": "Cube License", + "licenseId": "Cube", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Cube" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/curl.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/curl.json", + "referenceNumber": 602, + "name": "curl License", + "licenseId": "curl", + "seeAlso": [ + "https://github.com/bagder/curl/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/cve-tou.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/cve-tou.json", + "referenceNumber": 656, + "name": "Common Vulnerability Enumeration ToU License", + "licenseId": "cve-tou", + "seeAlso": [ + "https://www.cve.org/Legal/TermsOfUse" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/D-FSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/D-FSL-1.0.json", + "referenceNumber": 116, + "name": "Deutsche Freie Software Lizenz", + "licenseId": "D-FSL-1.0", + "seeAlso": [ + "http://www.dipp.nrw.de/d-fsl/lizenzen/", + "http://www.dipp.nrw.de/d-fsl/index_html/lizenzen/de/D-FSL-1_0_de.txt", + "http://www.dipp.nrw.de/d-fsl/index_html/lizenzen/en/D-FSL-1_0_en.txt", + "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl", + "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/deutsche-freie-software-lizenz", + "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/german-free-software-license", + "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/D-FSL-1_0_de.txt/at_download/file", + "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/D-FSL-1_0_en.txt/at_download/file" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DEC-3-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DEC-3-Clause.json", + "referenceNumber": 512, + "name": "DEC 3-Clause License", + "licenseId": "DEC-3-Clause", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/xserver/-/blob/master/COPYING?ref_type\u003dheads#L239" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/diffmark.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/diffmark.json", + "referenceNumber": 480, + "name": "diffmark license", + "licenseId": "diffmark", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/diffmark" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DL-DE-BY-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DL-DE-BY-2.0.json", + "referenceNumber": 84, + "name": "Data licence Germany – attribution – version 2.0", + "licenseId": "DL-DE-BY-2.0", + "seeAlso": [ + "https://www.govdata.de/dl-de/by-2-0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DL-DE-ZERO-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DL-DE-ZERO-2.0.json", + "referenceNumber": 522, + "name": "Data licence Germany – zero – version 2.0", + "licenseId": "DL-DE-ZERO-2.0", + "seeAlso": [ + "https://www.govdata.de/dl-de/zero-2-0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DOC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DOC.json", + "referenceNumber": 646, + "name": "DOC License", + "licenseId": "DOC", + "seeAlso": [ + "http://www.cs.wustl.edu/~schmidt/ACE-copying.html", + "https://www.dre.vanderbilt.edu/~schmidt/ACE-copying.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DocBook-Schema.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DocBook-Schema.json", + "referenceNumber": 153, + "name": "DocBook Schema License", + "licenseId": "DocBook-Schema", + "seeAlso": [ + "https://github.com/docbook/xslt10-stylesheets/blob/efd62655c11cc8773708df7a843613fa1e932bf8/xsl/assembly/schema/docbook51b7.rnc" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DocBook-XML.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DocBook-XML.json", + "referenceNumber": 493, + "name": "DocBook XML License", + "licenseId": "DocBook-XML", + "seeAlso": [ + "https://github.com/docbook/xslt10-stylesheets/blob/efd62655c11cc8773708df7a843613fa1e932bf8/xsl/COPYING#L27" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Dotseqn.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Dotseqn.json", + "referenceNumber": 533, + "name": "Dotseqn License", + "licenseId": "Dotseqn", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Dotseqn" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DRL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DRL-1.0.json", + "referenceNumber": 410, + "name": "Detection Rule License 1.0", + "licenseId": "DRL-1.0", + "seeAlso": [ + "https://github.com/Neo23x0/sigma/blob/master/LICENSE.Detection.Rules.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DRL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DRL-1.1.json", + "referenceNumber": 268, + "name": "Detection Rule License 1.1", + "licenseId": "DRL-1.1", + "seeAlso": [ + "https://github.com/SigmaHQ/Detection-Rule-License/blob/6ec7fbde6101d101b5b5d1fcb8f9b69fbc76c04a/LICENSE.Detection.Rules.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DSDP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DSDP.json", + "referenceNumber": 164, + "name": "DSDP License", + "licenseId": "DSDP", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/DSDP" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/dtoa.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/dtoa.json", + "referenceNumber": 263, + "name": "David M. Gay dtoa License", + "licenseId": "dtoa", + "seeAlso": [ + "https://github.com/SWI-Prolog/swipl-devel/blob/master/src/os/dtoa.c", + "https://sourceware.org/git/?p\u003dnewlib-cygwin.git;a\u003dblob;f\u003dnewlib/libc/stdlib/mprec.h;hb\u003dHEAD" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/dvipdfm.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/dvipdfm.json", + "referenceNumber": 61, + "name": "dvipdfm License", + "licenseId": "dvipdfm", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/dvipdfm" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ECL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ECL-1.0.json", + "referenceNumber": 264, + "name": "Educational Community License v1.0", + "licenseId": "ECL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/ECL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/ECL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ECL-2.0.json", + "referenceNumber": 363, + "name": "Educational Community License v2.0", + "licenseId": "ECL-2.0", + "seeAlso": [ + "https://opensource.org/licenses/ECL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/eCos-2.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/eCos-2.0.json", + "referenceNumber": 298, + "name": "eCos license version 2.0", + "licenseId": "eCos-2.0", + "seeAlso": [ + "https://www.gnu.org/licenses/ecos-license.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/EFL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EFL-1.0.json", + "referenceNumber": 137, + "name": "Eiffel Forum License v1.0", + "licenseId": "EFL-1.0", + "seeAlso": [ + "http://www.eiffel-nice.org/license/forum.txt", + "https://opensource.org/licenses/EFL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/EFL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EFL-2.0.json", + "referenceNumber": 447, + "name": "Eiffel Forum License v2.0", + "licenseId": "EFL-2.0", + "seeAlso": [ + "http://www.eiffel-nice.org/license/eiffel-forum-license-2.html", + "https://opensource.org/licenses/EFL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/eGenix.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/eGenix.json", + "referenceNumber": 348, + "name": "eGenix.com Public License 1.1.0", + "licenseId": "eGenix", + "seeAlso": [ + "http://www.egenix.com/products/eGenix.com-Public-License-1.1.0.pdf", + "https://fedoraproject.org/wiki/Licensing/eGenix.com_Public_License_1.1.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Elastic-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Elastic-2.0.json", + "referenceNumber": 404, + "name": "Elastic License 2.0", + "licenseId": "Elastic-2.0", + "seeAlso": [ + "https://www.elastic.co/licensing/elastic-license", + "https://github.com/elastic/elasticsearch/blob/master/licenses/ELASTIC-LICENSE-2.0.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Entessa.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Entessa.json", + "referenceNumber": 198, + "name": "Entessa Public License v1.0", + "licenseId": "Entessa", + "seeAlso": [ + "https://opensource.org/licenses/Entessa" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/EPICS.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EPICS.json", + "referenceNumber": 532, + "name": "EPICS Open License", + "licenseId": "EPICS", + "seeAlso": [ + "https://epics.anl.gov/license/open.php" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/EPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EPL-1.0.json", + "referenceNumber": 115, + "name": "Eclipse Public License 1.0", + "licenseId": "EPL-1.0", + "seeAlso": [ + "http://www.eclipse.org/legal/epl-v10.html", + "https://opensource.org/licenses/EPL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/EPL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EPL-2.0.json", + "referenceNumber": 282, + "name": "Eclipse Public License 2.0", + "licenseId": "EPL-2.0", + "seeAlso": [ + "https://www.eclipse.org/legal/epl-2.0", + "https://www.opensource.org/licenses/EPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ErlPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ErlPL-1.1.json", + "referenceNumber": 530, + "name": "Erlang Public License v1.1", + "licenseId": "ErlPL-1.1", + "seeAlso": [ + "http://www.erlang.org/EPLICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/etalab-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/etalab-2.0.json", + "referenceNumber": 129, + "name": "Etalab Open License 2.0", + "licenseId": "etalab-2.0", + "seeAlso": [ + "https://github.com/DISIC/politique-de-contribution-open-source/blob/master/LICENSE.pdf", + "https://raw.githubusercontent.com/DISIC/politique-de-contribution-open-source/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/EUDatagrid.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EUDatagrid.json", + "referenceNumber": 393, + "name": "EU DataGrid Software License", + "licenseId": "EUDatagrid", + "seeAlso": [ + "http://eu-datagrid.web.cern.ch/eu-datagrid/license.html", + "https://opensource.org/licenses/EUDatagrid" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/EUPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EUPL-1.0.json", + "referenceNumber": 389, + "name": "European Union Public License 1.0", + "licenseId": "EUPL-1.0", + "seeAlso": [ + "http://ec.europa.eu/idabc/en/document/7330.html", + "http://ec.europa.eu/idabc/servlets/Doc027f.pdf?id\u003d31096" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/EUPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EUPL-1.1.json", + "referenceNumber": 503, + "name": "European Union Public License 1.1", + "licenseId": "EUPL-1.1", + "seeAlso": [ + "https://joinup.ec.europa.eu/software/page/eupl/licence-eupl", + "https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/eupl1.1.-licence-en_0.pdf", + "https://opensource.org/licenses/EUPL-1.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/EUPL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EUPL-1.2.json", + "referenceNumber": 12, + "name": "European Union Public License 1.2", + "licenseId": "EUPL-1.2", + "seeAlso": [ + "https://joinup.ec.europa.eu/page/eupl-text-11-12", + "https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/eupl_v1.2_en.pdf", + "https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/2020-03/EUPL-1.2%20EN.txt", + "https://joinup.ec.europa.eu/sites/default/files/inline-files/EUPL%20v1_2%20EN(1).txt", + "http://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri\u003dCELEX:32017D0863", + "https://opensource.org/licenses/EUPL-1.2" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Eurosym.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Eurosym.json", + "referenceNumber": 621, + "name": "Eurosym License", + "licenseId": "Eurosym", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Eurosym" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Fair.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Fair.json", + "referenceNumber": 258, + "name": "Fair License", + "licenseId": "Fair", + "seeAlso": [ + "https://web.archive.org/web/20150926120323/http://fairlicense.org/", + "https://opensource.org/licenses/Fair" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/FBM.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FBM.json", + "referenceNumber": 626, + "name": "Fuzzy Bitmap License", + "licenseId": "FBM", + "seeAlso": [ + "https://github.com/SWI-Prolog/packages-xpce/blob/161a40cd82004f731ba48024f9d30af388a7edf5/src/img/gifwrite.c#L21-L26" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FDK-AAC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FDK-AAC.json", + "referenceNumber": 344, + "name": "Fraunhofer FDK AAC Codec Library", + "licenseId": "FDK-AAC", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/FDK-AAC", + "https://directory.fsf.org/wiki/License:Fdk" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Ferguson-Twofish.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Ferguson-Twofish.json", + "referenceNumber": 362, + "name": "Ferguson Twofish License", + "licenseId": "Ferguson-Twofish", + "seeAlso": [ + "https://github.com/wernerd/ZRTPCPP/blob/6b3cd8e6783642292bad0c21e3e5e5ce45ff3e03/cryptcommon/twofish.c#L113C3-L127" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Frameworx-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Frameworx-1.0.json", + "referenceNumber": 188, + "name": "Frameworx Open License 1.0", + "licenseId": "Frameworx-1.0", + "seeAlso": [ + "https://opensource.org/licenses/Frameworx-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/FreeBSD-DOC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FreeBSD-DOC.json", + "referenceNumber": 151, + "name": "FreeBSD Documentation License", + "licenseId": "FreeBSD-DOC", + "seeAlso": [ + "https://www.freebsd.org/copyright/freebsd-doc-license/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FreeImage.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FreeImage.json", + "referenceNumber": 232, + "name": "FreeImage Public License v1.0", + "licenseId": "FreeImage", + "seeAlso": [ + "http://freeimage.sourceforge.net/freeimage-license.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FSFAP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FSFAP.json", + "referenceNumber": 436, + "name": "FSF All Permissive License", + "licenseId": "FSFAP", + "seeAlso": [ + "https://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/FSFAP-no-warranty-disclaimer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FSFAP-no-warranty-disclaimer.json", + "referenceNumber": 547, + "name": "FSF All Permissive License (without Warranty)", + "licenseId": "FSFAP-no-warranty-disclaimer", + "seeAlso": [ + "https://git.savannah.gnu.org/cgit/wget.git/tree/util/trunc.c?h\u003dv1.21.3\u0026id\u003d40747a11e44ced5a8ac628a41f879ced3e2ebce9#n6" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FSFUL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FSFUL.json", + "referenceNumber": 2, + "name": "FSF Unlimited License", + "licenseId": "FSFUL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FSFULLR.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FSFULLR.json", + "referenceNumber": 508, + "name": "FSF Unlimited License (with License Retention)", + "licenseId": "FSFULLR", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FSFULLRWD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FSFULLRWD.json", + "referenceNumber": 640, + "name": "FSF Unlimited License (With License Retention and Warranty Disclaimer)", + "licenseId": "FSFULLRWD", + "seeAlso": [ + "https://lists.gnu.org/archive/html/autoconf/2012-04/msg00061.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FTL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FTL.json", + "referenceNumber": 249, + "name": "Freetype Project License", + "licenseId": "FTL", + "seeAlso": [ + "http://freetype.fis.uniroma2.it/FTL.TXT", + "http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/docs/FTL.TXT", + "http://gitlab.freedesktop.org/freetype/freetype/-/raw/master/docs/FTL.TXT" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Furuseth.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Furuseth.json", + "referenceNumber": 273, + "name": "Furuseth License", + "licenseId": "Furuseth", + "seeAlso": [ + "https://git.openldap.org/openldap/openldap/-/blob/master/COPYRIGHT?ref_type\u003dheads#L39-51" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/fwlw.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/fwlw.json", + "referenceNumber": 50, + "name": "fwlw License", + "licenseId": "fwlw", + "seeAlso": [ + "https://mirrors.nic.cz/tex-archive/macros/latex/contrib/fwlw/README" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GCR-docs.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GCR-docs.json", + "referenceNumber": 272, + "name": "Gnome GCR Documentation License", + "licenseId": "GCR-docs", + "seeAlso": [ + "https://github.com/GNOME/gcr/blob/master/docs/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GD.json", + "referenceNumber": 624, + "name": "GD License", + "licenseId": "GD", + "seeAlso": [ + "https://libgd.github.io/manuals/2.3.0/files/license-txt.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1.json", + "referenceNumber": 177, + "name": "GNU Free Documentation License v1.1", + "licenseId": "GFDL-1.1", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-invariants-only.json", + "referenceNumber": 216, + "name": "GNU Free Documentation License v1.1 only - invariants", + "licenseId": "GFDL-1.1-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-invariants-or-later.json", + "referenceNumber": 57, + "name": "GNU Free Documentation License v1.1 or later - invariants", + "licenseId": "GFDL-1.1-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-no-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-no-invariants-only.json", + "referenceNumber": 38, + "name": "GNU Free Documentation License v1.1 only - no invariants", + "licenseId": "GFDL-1.1-no-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-no-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-no-invariants-or-later.json", + "referenceNumber": 289, + "name": "GNU Free Documentation License v1.1 or later - no invariants", + "licenseId": "GFDL-1.1-no-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-only.json", + "referenceNumber": 654, + "name": "GNU Free Documentation License v1.1 only", + "licenseId": "GFDL-1.1-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-or-later.json", + "referenceNumber": 569, + "name": "GNU Free Documentation License v1.1 or later", + "licenseId": "GFDL-1.1-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2.json", + "referenceNumber": 235, + "name": "GNU Free Documentation License v1.2", + "licenseId": "GFDL-1.2", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-invariants-only.json", + "referenceNumber": 461, + "name": "GNU Free Documentation License v1.2 only - invariants", + "licenseId": "GFDL-1.2-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-invariants-or-later.json", + "referenceNumber": 391, + "name": "GNU Free Documentation License v1.2 or later - invariants", + "licenseId": "GFDL-1.2-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-no-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-no-invariants-only.json", + "referenceNumber": 187, + "name": "GNU Free Documentation License v1.2 only - no invariants", + "licenseId": "GFDL-1.2-no-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-no-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-no-invariants-or-later.json", + "referenceNumber": 240, + "name": "GNU Free Documentation License v1.2 or later - no invariants", + "licenseId": "GFDL-1.2-no-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-only.json", + "referenceNumber": 302, + "name": "GNU Free Documentation License v1.2 only", + "licenseId": "GFDL-1.2-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-or-later.json", + "referenceNumber": 562, + "name": "GNU Free Documentation License v1.2 or later", + "licenseId": "GFDL-1.2-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3.json", + "referenceNumber": 60, + "name": "GNU Free Documentation License v1.3", + "licenseId": "GFDL-1.3", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-invariants-only.json", + "referenceNumber": 184, + "name": "GNU Free Documentation License v1.3 only - invariants", + "licenseId": "GFDL-1.3-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-invariants-or-later.json", + "referenceNumber": 346, + "name": "GNU Free Documentation License v1.3 or later - invariants", + "licenseId": "GFDL-1.3-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-no-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-no-invariants-only.json", + "referenceNumber": 59, + "name": "GNU Free Documentation License v1.3 only - no invariants", + "licenseId": "GFDL-1.3-no-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-no-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-no-invariants-or-later.json", + "referenceNumber": 281, + "name": "GNU Free Documentation License v1.3 or later - no invariants", + "licenseId": "GFDL-1.3-no-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-only.json", + "referenceNumber": 642, + "name": "GNU Free Documentation License v1.3 only", + "licenseId": "GFDL-1.3-only", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-or-later.json", + "referenceNumber": 494, + "name": "GNU Free Documentation License v1.3 or later", + "licenseId": "GFDL-1.3-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Giftware.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Giftware.json", + "referenceNumber": 618, + "name": "Giftware License", + "licenseId": "Giftware", + "seeAlso": [ + "http://liballeg.org/license.html#allegro-4-the-giftware-license" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GL2PS.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GL2PS.json", + "referenceNumber": 231, + "name": "GL2PS License", + "licenseId": "GL2PS", + "seeAlso": [ + "http://www.geuz.org/gl2ps/COPYING.GL2PS" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Glide.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Glide.json", + "referenceNumber": 620, + "name": "3dfx Glide License", + "licenseId": "Glide", + "seeAlso": [ + "http://www.users.on.net/~triforce/glidexp/COPYING.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Glulxe.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Glulxe.json", + "referenceNumber": 429, + "name": "Glulxe License", + "licenseId": "Glulxe", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Glulxe" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GLWTPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GLWTPL.json", + "referenceNumber": 154, + "name": "Good Luck With That Public License", + "licenseId": "GLWTPL", + "seeAlso": [ + "https://github.com/me-shaon/GLWTPL/commit/da5f6bc734095efbacb442c0b31e33a65b9d6e85" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/gnuplot.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/gnuplot.json", + "referenceNumber": 271, + "name": "gnuplot License", + "licenseId": "gnuplot", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Gnuplot" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-1.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-1.0.json", + "referenceNumber": 365, + "name": "GNU General Public License v1.0 only", + "licenseId": "GPL-1.0", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-1.0+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-1.0+.json", + "referenceNumber": 66, + "name": "GNU General Public License v1.0 or later", + "licenseId": "GPL-1.0+", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-1.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-1.0-only.json", + "referenceNumber": 563, + "name": "GNU General Public License v1.0 only", + "licenseId": "GPL-1.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-1.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-1.0-or-later.json", + "referenceNumber": 558, + "name": "GNU General Public License v1.0 or later", + "licenseId": "GPL-1.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0.json", + "referenceNumber": 613, + "name": "GNU General Public License v2.0 only", + "licenseId": "GPL-2.0", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "https://opensource.org/licenses/GPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0+.json", + "referenceNumber": 83, + "name": "GNU General Public License v2.0 or later", + "licenseId": "GPL-2.0+", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "https://opensource.org/licenses/GPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-only.json", + "referenceNumber": 483, + "name": "GNU General Public License v2.0 only", + "licenseId": "GPL-2.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt", + "https://opensource.org/licenses/GPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-or-later.json", + "referenceNumber": 349, + "name": "GNU General Public License v2.0 or later", + "licenseId": "GPL-2.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "https://opensource.org/licenses/GPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-with-autoconf-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-autoconf-exception.json", + "referenceNumber": 475, + "name": "GNU General Public License v2.0 w/Autoconf exception", + "licenseId": "GPL-2.0-with-autoconf-exception", + "seeAlso": [ + "http://ac-archive.sourceforge.net/doc/copyright.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-with-bison-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-bison-exception.json", + "referenceNumber": 492, + "name": "GNU General Public License v2.0 w/Bison exception", + "licenseId": "GPL-2.0-with-bison-exception", + "seeAlso": [ + "http://git.savannah.gnu.org/cgit/bison.git/tree/data/yacc.c?id\u003d193d7c7054ba7197b0789e14965b739162319b5e#n141" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-with-classpath-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-classpath-exception.json", + "referenceNumber": 144, + "name": "GNU General Public License v2.0 w/Classpath exception", + "licenseId": "GPL-2.0-with-classpath-exception", + "seeAlso": [ + "https://www.gnu.org/software/classpath/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-with-font-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-font-exception.json", + "referenceNumber": 579, + "name": "GNU General Public License v2.0 w/Font exception", + "licenseId": "GPL-2.0-with-font-exception", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-faq.html#FontException" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-with-GCC-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-GCC-exception.json", + "referenceNumber": 449, + "name": "GNU General Public License v2.0 w/GCC Runtime Library exception", + "licenseId": "GPL-2.0-with-GCC-exception", + "seeAlso": [ + "https://gcc.gnu.org/git/?p\u003dgcc.git;a\u003dblob;f\u003dgcc/libgcc1.c;h\u003d762f5143fc6eed57b6797c82710f3538aa52b40b;hb\u003dcb143a3ce4fb417c68f5fa2691a1b1b1053dfba9#l10" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0.json", + "referenceNumber": 434, + "name": "GNU General Public License v3.0 only", + "licenseId": "GPL-3.0", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-3.0-standalone.html", + "https://opensource.org/licenses/GPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0+.json", + "referenceNumber": 586, + "name": "GNU General Public License v3.0 or later", + "licenseId": "GPL-3.0+", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-3.0-standalone.html", + "https://opensource.org/licenses/GPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0-only.json", + "referenceNumber": 42, + "name": "GNU General Public License v3.0 only", + "licenseId": "GPL-3.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-3.0-standalone.html", + "https://opensource.org/licenses/GPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0-or-later.json", + "referenceNumber": 269, + "name": "GNU General Public License v3.0 or later", + "licenseId": "GPL-3.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-3.0-standalone.html", + "https://opensource.org/licenses/GPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0-with-autoconf-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0-with-autoconf-exception.json", + "referenceNumber": 200, + "name": "GNU General Public License v3.0 w/Autoconf exception", + "licenseId": "GPL-3.0-with-autoconf-exception", + "seeAlso": [ + "https://www.gnu.org/licenses/autoconf-exception-3.0.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0-with-GCC-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0-with-GCC-exception.json", + "referenceNumber": 546, + "name": "GNU General Public License v3.0 w/GCC Runtime Library exception", + "licenseId": "GPL-3.0-with-GCC-exception", + "seeAlso": [ + "https://www.gnu.org/licenses/gcc-exception-3.1.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Graphics-Gems.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Graphics-Gems.json", + "referenceNumber": 437, + "name": "Graphics Gems License", + "licenseId": "Graphics-Gems", + "seeAlso": [ + "https://github.com/erich666/GraphicsGems/blob/master/LICENSE.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/gSOAP-1.3b.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/gSOAP-1.3b.json", + "referenceNumber": 658, + "name": "gSOAP Public License v1.3b", + "licenseId": "gSOAP-1.3b", + "seeAlso": [ + "http://www.cs.fsu.edu/~engelen/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/gtkbook.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/gtkbook.json", + "referenceNumber": 397, + "name": "gtkbook License", + "licenseId": "gtkbook", + "seeAlso": [ + "https://github.com/slogan621/gtkbook", + "https://github.com/oetiker/rrdtool-1.x/blob/master/src/plbasename.c#L8-L11" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Gutmann.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Gutmann.json", + "referenceNumber": 103, + "name": "Gutmann License", + "licenseId": "Gutmann", + "seeAlso": [ + "https://www.cs.auckland.ac.nz/~pgut001/dumpasn1.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HaskellReport.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HaskellReport.json", + "referenceNumber": 357, + "name": "Haskell Language Report License", + "licenseId": "HaskellReport", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Haskell_Language_Report_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/hdparm.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/hdparm.json", + "referenceNumber": 351, + "name": "hdparm License", + "licenseId": "hdparm", + "seeAlso": [ + "https://github.com/Distrotech/hdparm/blob/4517550db29a91420fb2b020349523b1b4512df2/LICENSE.TXT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HIDAPI.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HIDAPI.json", + "referenceNumber": 318, + "name": "HIDAPI License", + "licenseId": "HIDAPI", + "seeAlso": [ + "https://github.com/signal11/hidapi/blob/master/LICENSE-orig.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Hippocratic-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Hippocratic-2.1.json", + "referenceNumber": 425, + "name": "Hippocratic License 2.1", + "licenseId": "Hippocratic-2.1", + "seeAlso": [ + "https://firstdonoharm.dev/version/2/1/license.html", + "https://github.com/EthicalSource/hippocratic-license/blob/58c0e646d64ff6fbee275bfe2b9492f914e3ab2a/LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HP-1986.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HP-1986.json", + "referenceNumber": 477, + "name": "Hewlett-Packard 1986 License", + "licenseId": "HP-1986", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dnewlib-cygwin.git;a\u003dblob;f\u003dnewlib/libc/machine/hppa/memchr.S;h\u003d1cca3e5e8867aa4bffef1f75a5c1bba25c0c441e;hb\u003dHEAD#l2" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HP-1989.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HP-1989.json", + "referenceNumber": 653, + "name": "Hewlett-Packard 1989 License", + "licenseId": "HP-1989", + "seeAlso": [ + "https://github.com/bleargh45/Data-UUID/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND.json", + "referenceNumber": 75, + "name": "Historical Permission Notice and Disclaimer", + "licenseId": "HPND", + "seeAlso": [ + "https://opensource.org/licenses/HPND", + "http://lists.opensource.org/pipermail/license-discuss_lists.opensource.org/2002-November/006304.html" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/HPND-DEC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-DEC.json", + "referenceNumber": 597, + "name": "Historical Permission Notice and Disclaimer - DEC variant", + "licenseId": "HPND-DEC", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/app/xkbcomp/-/blob/master/COPYING?ref_type\u003dheads#L69" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-doc.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-doc.json", + "referenceNumber": 384, + "name": "Historical Permission Notice and Disclaimer - documentation variant", + "licenseId": "HPND-doc", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/lib/libxext/-/blob/master/COPYING?ref_type\u003dheads#L185-197", + "https://gitlab.freedesktop.org/xorg/lib/libxtst/-/blob/master/COPYING?ref_type\u003dheads#L70-77" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-doc-sell.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-doc-sell.json", + "referenceNumber": 648, + "name": "Historical Permission Notice and Disclaimer - documentation sell variant", + "licenseId": "HPND-doc-sell", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/lib/libxtst/-/blob/master/COPYING?ref_type\u003dheads#L108-117", + "https://gitlab.freedesktop.org/xorg/lib/libxext/-/blob/master/COPYING?ref_type\u003dheads#L153-162" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-export-US.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-export-US.json", + "referenceNumber": 551, + "name": "HPND with US Government export control warning", + "licenseId": "HPND-export-US", + "seeAlso": [ + "https://www.kermitproject.org/ck90.html#source" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-export-US-acknowledgement.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-export-US-acknowledgement.json", + "referenceNumber": 661, + "name": "HPND with US Government export control warning and acknowledgment", + "licenseId": "HPND-export-US-acknowledgement", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L831-L852", + "https://web.mit.edu/kerberos/krb5-1.21/doc/mitK5license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-export-US-modify.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-export-US-modify.json", + "referenceNumber": 119, + "name": "HPND with US Government export control warning and modification rqmt", + "licenseId": "HPND-export-US-modify", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L1157-L1182", + "https://github.com/pythongssapi/k5test/blob/v0.10.3/K5TEST-LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-export2-US.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-export2-US.json", + "referenceNumber": 450, + "name": "HPND with US Government export control and 2 disclaimers", + "licenseId": "HPND-export2-US", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L111-L133", + "https://web.mit.edu/kerberos/krb5-1.21/doc/mitK5license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-Fenneberg-Livingston.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-Fenneberg-Livingston.json", + "referenceNumber": 643, + "name": "Historical Permission Notice and Disclaimer - Fenneberg-Livingston variant", + "licenseId": "HPND-Fenneberg-Livingston", + "seeAlso": [ + "https://github.com/FreeRADIUS/freeradius-client/blob/master/COPYRIGHT#L32", + "https://github.com/radcli/radcli/blob/master/COPYRIGHT#L34" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-INRIA-IMAG.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-INRIA-IMAG.json", + "referenceNumber": 583, + "name": "Historical Permission Notice and Disclaimer - INRIA-IMAG variant", + "licenseId": "HPND-INRIA-IMAG", + "seeAlso": [ + "https://github.com/ppp-project/ppp/blob/master/pppd/ipv6cp.c#L75-L83" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-Intel.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-Intel.json", + "referenceNumber": 20, + "name": "Historical Permission Notice and Disclaimer - Intel variant", + "licenseId": "HPND-Intel", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dnewlib-cygwin.git;a\u003dblob;f\u003dnewlib/libc/machine/i960/memcpy.S;hb\u003dHEAD" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-Kevlin-Henney.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-Kevlin-Henney.json", + "referenceNumber": 637, + "name": "Historical Permission Notice and Disclaimer - Kevlin Henney variant", + "licenseId": "HPND-Kevlin-Henney", + "seeAlso": [ + "https://github.com/mruby/mruby/blob/83d12f8d52522cdb7c8cc46fad34821359f453e6/mrbgems/mruby-dir/src/Win/dirent.c#L127-L140" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-Markus-Kuhn.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-Markus-Kuhn.json", + "referenceNumber": 172, + "name": "Historical Permission Notice and Disclaimer - Markus Kuhn variant", + "licenseId": "HPND-Markus-Kuhn", + "seeAlso": [ + "https://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c", + "https://sourceware.org/git/?p\u003dbinutils-gdb.git;a\u003dblob;f\u003dreadline/readline/support/wcwidth.c;h\u003d0f5ec995796f4813abbcf4972aec0378ab74722a;hb\u003dHEAD#l55" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-merchantability-variant.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-merchantability-variant.json", + "referenceNumber": 572, + "name": "Historical Permission Notice and Disclaimer - merchantability variant", + "licenseId": "HPND-merchantability-variant", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dnewlib-cygwin.git;a\u003dblob;f\u003dnewlib/libc/misc/fini.c;hb\u003dHEAD" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-MIT-disclaimer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-MIT-disclaimer.json", + "referenceNumber": 609, + "name": "Historical Permission Notice and Disclaimer with MIT disclaimer", + "licenseId": "HPND-MIT-disclaimer", + "seeAlso": [ + "https://metacpan.org/release/NLNETLABS/Net-DNS-SEC-1.22/source/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-Netrek.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-Netrek.json", + "referenceNumber": 126, + "name": "Historical Permission Notice and Disclaimer - Netrek variant", + "licenseId": "HPND-Netrek", + "seeAlso": [], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-Pbmplus.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-Pbmplus.json", + "referenceNumber": 242, + "name": "Historical Permission Notice and Disclaimer - Pbmplus variant", + "licenseId": "HPND-Pbmplus", + "seeAlso": [ + "https://sourceforge.net/p/netpbm/code/HEAD/tree/super_stable/netpbm.c#l8" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-sell-MIT-disclaimer-xserver.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-sell-MIT-disclaimer-xserver.json", + "referenceNumber": 160, + "name": "Historical Permission Notice and Disclaimer - sell xserver variant with MIT disclaimer", + "licenseId": "HPND-sell-MIT-disclaimer-xserver", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/xserver/-/blob/master/COPYING?ref_type\u003dheads#L1781" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-sell-regexpr.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-sell-regexpr.json", + "referenceNumber": 44, + "name": "Historical Permission Notice and Disclaimer - sell regexpr variant", + "licenseId": "HPND-sell-regexpr", + "seeAlso": [ + "https://gitlab.com/bacula-org/bacula/-/blob/Branch-11.0/bacula/LICENSE-FOSS?ref_type\u003dheads#L245" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-sell-variant.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-sell-variant.json", + "referenceNumber": 485, + "name": "Historical Permission Notice and Disclaimer - sell variant", + "licenseId": "HPND-sell-variant", + "seeAlso": [ + "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/net/sunrpc/auth_gss/gss_generic_token.c?h\u003dv4.19" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-sell-variant-MIT-disclaimer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-sell-variant-MIT-disclaimer.json", + "referenceNumber": 430, + "name": "HPND sell variant with MIT disclaimer", + "licenseId": "HPND-sell-variant-MIT-disclaimer", + "seeAlso": [ + "https://github.com/sigmavirus24/x11-ssh-askpass/blob/master/README" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-sell-variant-MIT-disclaimer-rev.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-sell-variant-MIT-disclaimer-rev.json", + "referenceNumber": 10, + "name": "HPND sell variant with MIT disclaimer - reverse", + "licenseId": "HPND-sell-variant-MIT-disclaimer-rev", + "seeAlso": [ + "https://github.com/sigmavirus24/x11-ssh-askpass/blob/master/dynlist.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-UC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-UC.json", + "referenceNumber": 423, + "name": "Historical Permission Notice and Disclaimer - University of California variant", + "licenseId": "HPND-UC", + "seeAlso": [ + "https://core.tcl-lang.org/tk/file?name\u003dcompat/unistd.h" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-UC-export-US.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-UC-export-US.json", + "referenceNumber": 82, + "name": "Historical Permission Notice and Disclaimer - University of California, US export warning", + "licenseId": "HPND-UC-export-US", + "seeAlso": [ + "https://github.com/RTimothyEdwards/magic/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HTMLTIDY.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HTMLTIDY.json", + "referenceNumber": 439, + "name": "HTML Tidy License", + "licenseId": "HTMLTIDY", + "seeAlso": [ + "https://github.com/htacg/tidy-html5/blob/next/README/LICENSE.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/IBM-pibs.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IBM-pibs.json", + "referenceNumber": 604, + "name": "IBM PowerPC Initialization and Boot Software", + "licenseId": "IBM-pibs", + "seeAlso": [ + "http://git.denx.de/?p\u003du-boot.git;a\u003dblob;f\u003darch/powerpc/cpu/ppc4xx/miiphy.c;h\u003d297155fdafa064b955e53e9832de93bfb0cfb85b;hb\u003d9fab4bf4cc077c21e43941866f3f2c196f28670d" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ICU.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ICU.json", + "referenceNumber": 375, + "name": "ICU License", + "licenseId": "ICU", + "seeAlso": [ + "http://source.icu-project.org/repos/icu/icu/trunk/license.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/IEC-Code-Components-EULA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IEC-Code-Components-EULA.json", + "referenceNumber": 18, + "name": "IEC Code Components End-user licence agreement", + "licenseId": "IEC-Code-Components-EULA", + "seeAlso": [ + "https://www.iec.ch/webstore/custserv/pdf/CC-EULA.pdf", + "https://www.iec.ch/CCv1", + "https://www.iec.ch/copyright" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/IJG.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IJG.json", + "referenceNumber": 374, + "name": "Independent JPEG Group License", + "licenseId": "IJG", + "seeAlso": [ + "http://dev.w3.org/cvsweb/Amaya/libjpeg/Attic/README?rev\u003d1.2" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/IJG-short.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IJG-short.json", + "referenceNumber": 152, + "name": "Independent JPEG Group License - short", + "licenseId": "IJG-short", + "seeAlso": [ + "https://sourceforge.net/p/xmedcon/code/ci/master/tree/libs/ljpg/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ImageMagick.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ImageMagick.json", + "referenceNumber": 608, + "name": "ImageMagick License", + "licenseId": "ImageMagick", + "seeAlso": [ + "http://www.imagemagick.org/script/license.php" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/iMatix.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/iMatix.json", + "referenceNumber": 645, + "name": "iMatix Standard Function Library Agreement", + "licenseId": "iMatix", + "seeAlso": [ + "http://legacy.imatix.com/html/sfl/sfl4.htm#license" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Imlib2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Imlib2.json", + "referenceNumber": 96, + "name": "Imlib2 License", + "licenseId": "Imlib2", + "seeAlso": [ + "http://trac.enlightenment.org/e/browser/trunk/imlib2/COPYING", + "https://git.enlightenment.org/legacy/imlib2.git/tree/COPYING" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Info-ZIP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Info-ZIP.json", + "referenceNumber": 451, + "name": "Info-ZIP License", + "licenseId": "Info-ZIP", + "seeAlso": [ + "http://www.info-zip.org/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Inner-Net-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Inner-Net-2.0.json", + "referenceNumber": 58, + "name": "Inner Net License v2.0", + "licenseId": "Inner-Net-2.0", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Inner_Net_License", + "https://sourceware.org/git/?p\u003dglibc.git;a\u003dblob;f\u003dLICENSES;h\u003d530893b1dc9ea00755603c68fb36bd4fc38a7be8;hb\u003dHEAD#l207" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Intel.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Intel.json", + "referenceNumber": 316, + "name": "Intel Open Source License", + "licenseId": "Intel", + "seeAlso": [ + "https://opensource.org/licenses/Intel" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Intel-ACPI.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Intel-ACPI.json", + "referenceNumber": 309, + "name": "Intel ACPI Software License Agreement", + "licenseId": "Intel-ACPI", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Intel_ACPI_Software_License_Agreement" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Interbase-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Interbase-1.0.json", + "referenceNumber": 665, + "name": "Interbase Public License v1.0", + "licenseId": "Interbase-1.0", + "seeAlso": [ + "https://web.archive.org/web/20060319014854/http://info.borland.com/devsupport/interbase/opensource/IPL.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/IPA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IPA.json", + "referenceNumber": 237, + "name": "IPA Font License", + "licenseId": "IPA", + "seeAlso": [ + "https://opensource.org/licenses/IPA" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/IPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IPL-1.0.json", + "referenceNumber": 443, + "name": "IBM Public License v1.0", + "licenseId": "IPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/IPL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ISC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ISC.json", + "referenceNumber": 131, + "name": "ISC License", + "licenseId": "ISC", + "seeAlso": [ + "https://www.isc.org/licenses/", + "https://www.isc.org/downloads/software-support-policy/isc-license/", + "https://opensource.org/licenses/ISC" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ISC-Veillard.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ISC-Veillard.json", + "referenceNumber": 554, + "name": "ISC Veillard variant", + "licenseId": "ISC-Veillard", + "seeAlso": [ + "https://raw.githubusercontent.com/GNOME/libxml2/4c2e7c651f6c2f0d1a74f350cbda95f7df3e7017/hash.c", + "https://github.com/GNOME/libxml2/blob/master/dict.c", + "https://sourceforge.net/p/ctrio/git/ci/master/tree/README" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Jam.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Jam.json", + "referenceNumber": 338, + "name": "Jam License", + "licenseId": "Jam", + "seeAlso": [ + "https://www.boost.org/doc/libs/1_35_0/doc/html/jam.html", + "https://web.archive.org/web/20160330173339/https://swarm.workshop.perforce.com/files/guest/perforce_software/jam/src/README" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/JasPer-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/JasPer-2.0.json", + "referenceNumber": 591, + "name": "JasPer License", + "licenseId": "JasPer-2.0", + "seeAlso": [ + "http://www.ece.uvic.ca/~mdadams/jasper/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/JPL-image.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/JPL-image.json", + "referenceNumber": 343, + "name": "JPL Image Use Policy", + "licenseId": "JPL-image", + "seeAlso": [ + "https://www.jpl.nasa.gov/jpl-image-use-policy" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/JPNIC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/JPNIC.json", + "referenceNumber": 117, + "name": "Japan Network Information Center License", + "licenseId": "JPNIC", + "seeAlso": [ + "https://gitlab.isc.org/isc-projects/bind9/blob/master/COPYRIGHT#L366" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/JSON.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/JSON.json", + "referenceNumber": 174, + "name": "JSON License", + "licenseId": "JSON", + "seeAlso": [ + "http://www.json.org/license.html" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/Kastrup.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Kastrup.json", + "referenceNumber": 181, + "name": "Kastrup License", + "licenseId": "Kastrup", + "seeAlso": [ + "https://ctan.math.utah.edu/ctan/tex-archive/macros/generic/kastrup/binhex.dtx" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Kazlib.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Kazlib.json", + "referenceNumber": 197, + "name": "Kazlib License", + "licenseId": "Kazlib", + "seeAlso": [ + "http://git.savannah.gnu.org/cgit/kazlib.git/tree/except.c?id\u003d0062df360c2d17d57f6af19b0e444c51feb99036" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Knuth-CTAN.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Knuth-CTAN.json", + "referenceNumber": 22, + "name": "Knuth CTAN License", + "licenseId": "Knuth-CTAN", + "seeAlso": [ + "https://ctan.org/license/knuth" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LAL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LAL-1.2.json", + "referenceNumber": 261, + "name": "Licence Art Libre 1.2", + "licenseId": "LAL-1.2", + "seeAlso": [ + "http://artlibre.org/licence/lal/licence-art-libre-12/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LAL-1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LAL-1.3.json", + "referenceNumber": 526, + "name": "Licence Art Libre 1.3", + "licenseId": "LAL-1.3", + "seeAlso": [ + "https://artlibre.org/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Latex2e.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Latex2e.json", + "referenceNumber": 3, + "name": "Latex2e License", + "licenseId": "Latex2e", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Latex2e" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Latex2e-translated-notice.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Latex2e-translated-notice.json", + "referenceNumber": 104, + "name": "Latex2e with translated notice permission", + "licenseId": "Latex2e-translated-notice", + "seeAlso": [ + "https://git.savannah.gnu.org/cgit/indent.git/tree/doc/indent.texi?id\u003da74c6b4ee49397cf330b333da1042bffa60ed14f#n74" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Leptonica.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Leptonica.json", + "referenceNumber": 221, + "name": "Leptonica License", + "licenseId": "Leptonica", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Leptonica" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.0.json", + "referenceNumber": 81, + "name": "GNU Library General Public License v2 only", + "licenseId": "LGPL-2.0", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.0+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.0+.json", + "referenceNumber": 265, + "name": "GNU Library General Public License v2 or later", + "licenseId": "LGPL-2.0+", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.0-only.json", + "referenceNumber": 517, + "name": "GNU Library General Public License v2 only", + "licenseId": "LGPL-2.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.0-or-later.json", + "referenceNumber": 458, + "name": "GNU Library General Public License v2 or later", + "licenseId": "LGPL-2.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.1.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.1.json", + "referenceNumber": 659, + "name": "GNU Lesser General Public License v2.1 only", + "licenseId": "LGPL-2.1", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "https://opensource.org/licenses/LGPL-2.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.1+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.1+.json", + "referenceNumber": 69, + "name": "GNU Lesser General Public License v2.1 or later", + "licenseId": "LGPL-2.1+", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "https://opensource.org/licenses/LGPL-2.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.1-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.1-only.json", + "referenceNumber": 524, + "name": "GNU Lesser General Public License v2.1 only", + "licenseId": "LGPL-2.1-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "https://opensource.org/licenses/LGPL-2.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.1-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.1-or-later.json", + "referenceNumber": 336, + "name": "GNU Lesser General Public License v2.1 or later", + "licenseId": "LGPL-2.1-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "https://opensource.org/licenses/LGPL-2.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-3.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-3.0.json", + "referenceNumber": 381, + "name": "GNU Lesser General Public License v3.0 only", + "licenseId": "LGPL-3.0", + "seeAlso": [ + "https://www.gnu.org/licenses/lgpl-3.0-standalone.html", + "https://www.gnu.org/licenses/lgpl+gpl-3.0.txt", + "https://opensource.org/licenses/LGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-3.0+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-3.0+.json", + "referenceNumber": 303, + "name": "GNU Lesser General Public License v3.0 or later", + "licenseId": "LGPL-3.0+", + "seeAlso": [ + "https://www.gnu.org/licenses/lgpl-3.0-standalone.html", + "https://www.gnu.org/licenses/lgpl+gpl-3.0.txt", + "https://opensource.org/licenses/LGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-3.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-3.0-only.json", + "referenceNumber": 225, + "name": "GNU Lesser General Public License v3.0 only", + "licenseId": "LGPL-3.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/lgpl-3.0-standalone.html", + "https://www.gnu.org/licenses/lgpl+gpl-3.0.txt", + "https://opensource.org/licenses/LGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-3.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-3.0-or-later.json", + "referenceNumber": 411, + "name": "GNU Lesser General Public License v3.0 or later", + "licenseId": "LGPL-3.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/lgpl-3.0-standalone.html", + "https://www.gnu.org/licenses/lgpl+gpl-3.0.txt", + "https://opensource.org/licenses/LGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPLLR.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPLLR.json", + "referenceNumber": 87, + "name": "Lesser General Public License For Linguistic Resources", + "licenseId": "LGPLLR", + "seeAlso": [ + "http://www-igm.univ-mlv.fr/~unitex/lgpllr.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Libpng.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Libpng.json", + "referenceNumber": 531, + "name": "libpng License", + "licenseId": "Libpng", + "seeAlso": [ + "http://www.libpng.org/pub/png/src/libpng-LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/libpng-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/libpng-2.0.json", + "referenceNumber": 149, + "name": "PNG Reference Library version 2", + "licenseId": "libpng-2.0", + "seeAlso": [ + "http://www.libpng.org/pub/png/src/libpng-LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/libselinux-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/libselinux-1.0.json", + "referenceNumber": 320, + "name": "libselinux public domain notice", + "licenseId": "libselinux-1.0", + "seeAlso": [ + "https://github.com/SELinuxProject/selinux/blob/master/libselinux/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/libtiff.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/libtiff.json", + "referenceNumber": 24, + "name": "libtiff License", + "licenseId": "libtiff", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/libtiff" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/libutil-David-Nugent.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/libutil-David-Nugent.json", + "referenceNumber": 662, + "name": "libutil David Nugent License", + "licenseId": "libutil-David-Nugent", + "seeAlso": [ + "http://web.mit.edu/freebsd/head/lib/libutil/login_ok.3", + "https://cgit.freedesktop.org/libbsd/tree/man/setproctitle.3bsd" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LiLiQ-P-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LiLiQ-P-1.1.json", + "referenceNumber": 150, + "name": "Licence Libre du Québec – Permissive version 1.1", + "licenseId": "LiLiQ-P-1.1", + "seeAlso": [ + "https://forge.gouv.qc.ca/licence/fr/liliq-v1-1/", + "http://opensource.org/licenses/LiLiQ-P-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LiLiQ-R-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LiLiQ-R-1.1.json", + "referenceNumber": 203, + "name": "Licence Libre du Québec – Réciprocité version 1.1", + "licenseId": "LiLiQ-R-1.1", + "seeAlso": [ + "https://www.forge.gouv.qc.ca/participez/licence-logicielle/licence-libre-du-quebec-liliq-en-francais/licence-libre-du-quebec-reciprocite-liliq-r-v1-1/", + "http://opensource.org/licenses/LiLiQ-R-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LiLiQ-Rplus-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LiLiQ-Rplus-1.1.json", + "referenceNumber": 314, + "name": "Licence Libre du Québec – Réciprocité forte version 1.1", + "licenseId": "LiLiQ-Rplus-1.1", + "seeAlso": [ + "https://www.forge.gouv.qc.ca/participez/licence-logicielle/licence-libre-du-quebec-liliq-en-francais/licence-libre-du-quebec-reciprocite-forte-liliq-r-v1-1/", + "http://opensource.org/licenses/LiLiQ-Rplus-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Linux-man-pages-1-para.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Linux-man-pages-1-para.json", + "referenceNumber": 577, + "name": "Linux man-pages - 1 paragraph", + "licenseId": "Linux-man-pages-1-para", + "seeAlso": [ + "https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/man2/getcpu.2#n4" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Linux-man-pages-copyleft.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Linux-man-pages-copyleft.json", + "referenceNumber": 213, + "name": "Linux man-pages Copyleft", + "licenseId": "Linux-man-pages-copyleft", + "seeAlso": [ + "https://www.kernel.org/doc/man-pages/licenses.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Linux-man-pages-copyleft-2-para.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Linux-man-pages-copyleft-2-para.json", + "referenceNumber": 352, + "name": "Linux man-pages Copyleft - 2 paragraphs", + "licenseId": "Linux-man-pages-copyleft-2-para", + "seeAlso": [ + "https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/man2/move_pages.2#n5", + "https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/man2/migrate_pages.2#n8" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Linux-man-pages-copyleft-var.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Linux-man-pages-copyleft-var.json", + "referenceNumber": 186, + "name": "Linux man-pages Copyleft Variant", + "licenseId": "Linux-man-pages-copyleft-var", + "seeAlso": [ + "https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/man2/set_mempolicy.2#n5" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Linux-OpenIB.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Linux-OpenIB.json", + "referenceNumber": 278, + "name": "Linux Kernel Variant of OpenIB.org license", + "licenseId": "Linux-OpenIB", + "seeAlso": [ + "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/infiniband/core/sa.h" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LOOP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LOOP.json", + "referenceNumber": 521, + "name": "Common Lisp LOOP License", + "licenseId": "LOOP", + "seeAlso": [ + "https://gitlab.com/embeddable-common-lisp/ecl/-/blob/develop/src/lsp/loop.lsp", + "http://git.savannah.gnu.org/cgit/gcl.git/tree/gcl/lsp/gcl_loop.lsp?h\u003dVersion_2_6_13pre", + "https://sourceforge.net/p/sbcl/sbcl/ci/master/tree/src/code/loop.lisp", + "https://github.com/cl-adams/adams/blob/master/LICENSE.md", + "https://github.com/blakemcbride/eclipse-lisp/blob/master/lisp/loop.lisp", + "https://gitlab.common-lisp.net/cmucl/cmucl/-/blob/master/src/code/loop.lisp" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LPD-document.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPD-document.json", + "referenceNumber": 561, + "name": "LPD Documentation License", + "licenseId": "LPD-document", + "seeAlso": [ + "https://github.com/Cyan4973/xxHash/blob/dev/doc/xxhash_spec.md", + "https://www.ietf.org/rfc/rfc1952.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPL-1.0.json", + "referenceNumber": 267, + "name": "Lucent Public License Version 1.0", + "licenseId": "LPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/LPL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LPL-1.02.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPL-1.02.json", + "referenceNumber": 122, + "name": "Lucent Public License v1.02", + "licenseId": "LPL-1.02", + "seeAlso": [ + "http://plan9.bell-labs.com/plan9/license.html", + "https://opensource.org/licenses/LPL-1.02" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LPPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPPL-1.0.json", + "referenceNumber": 133, + "name": "LaTeX Project Public License v1.0", + "licenseId": "LPPL-1.0", + "seeAlso": [ + "http://www.latex-project.org/lppl/lppl-1-0.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LPPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPPL-1.1.json", + "referenceNumber": 284, + "name": "LaTeX Project Public License v1.1", + "licenseId": "LPPL-1.1", + "seeAlso": [ + "http://www.latex-project.org/lppl/lppl-1-1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LPPL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPPL-1.2.json", + "referenceNumber": 407, + "name": "LaTeX Project Public License v1.2", + "licenseId": "LPPL-1.2", + "seeAlso": [ + "http://www.latex-project.org/lppl/lppl-1-2.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LPPL-1.3a.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPPL-1.3a.json", + "referenceNumber": 510, + "name": "LaTeX Project Public License v1.3a", + "licenseId": "LPPL-1.3a", + "seeAlso": [ + "http://www.latex-project.org/lppl/lppl-1-3a.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LPPL-1.3c.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPPL-1.3c.json", + "referenceNumber": 300, + "name": "LaTeX Project Public License v1.3c", + "licenseId": "LPPL-1.3c", + "seeAlso": [ + "http://www.latex-project.org/lppl/lppl-1-3c.txt", + "https://opensource.org/licenses/LPPL-1.3c" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/lsof.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/lsof.json", + "referenceNumber": 76, + "name": "lsof License", + "licenseId": "lsof", + "seeAlso": [ + "https://github.com/lsof-org/lsof/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Lucida-Bitmap-Fonts.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Lucida-Bitmap-Fonts.json", + "referenceNumber": 383, + "name": "Lucida Bitmap Fonts License", + "licenseId": "Lucida-Bitmap-Fonts", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/font/bh-100dpi/-/blob/master/COPYING?ref_type\u003dheads" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LZMA-SDK-9.11-to-9.20.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LZMA-SDK-9.11-to-9.20.json", + "referenceNumber": 239, + "name": "LZMA SDK License (versions 9.11 to 9.20)", + "licenseId": "LZMA-SDK-9.11-to-9.20", + "seeAlso": [ + "https://www.7-zip.org/sdk.html", + "https://sourceforge.net/projects/sevenzip/files/LZMA%20SDK/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LZMA-SDK-9.22.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LZMA-SDK-9.22.json", + "referenceNumber": 600, + "name": "LZMA SDK License (versions 9.22 and beyond)", + "licenseId": "LZMA-SDK-9.22", + "seeAlso": [ + "https://www.7-zip.org/sdk.html", + "https://sourceforge.net/projects/sevenzip/files/LZMA%20SDK/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Mackerras-3-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Mackerras-3-Clause.json", + "referenceNumber": 540, + "name": "Mackerras 3-Clause License", + "licenseId": "Mackerras-3-Clause", + "seeAlso": [ + "https://github.com/ppp-project/ppp/blob/master/pppd/chap_ms.c#L6-L28" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Mackerras-3-Clause-acknowledgment.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Mackerras-3-Clause-acknowledgment.json", + "referenceNumber": 176, + "name": "Mackerras 3-Clause - acknowledgment variant", + "licenseId": "Mackerras-3-Clause-acknowledgment", + "seeAlso": [ + "https://github.com/ppp-project/ppp/blob/master/pppd/auth.c#L6-L28" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/magaz.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/magaz.json", + "referenceNumber": 93, + "name": "magaz License", + "licenseId": "magaz", + "seeAlso": [ + "https://mirrors.nic.cz/tex-archive/macros/latex/contrib/magaz/magaz.tex" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/mailprio.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/mailprio.json", + "referenceNumber": 292, + "name": "mailprio License", + "licenseId": "mailprio", + "seeAlso": [ + "https://fossies.org/linux/sendmail/contrib/mailprio" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MakeIndex.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MakeIndex.json", + "referenceNumber": 552, + "name": "MakeIndex License", + "licenseId": "MakeIndex", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MakeIndex" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Martin-Birgmeier.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Martin-Birgmeier.json", + "referenceNumber": 364, + "name": "Martin Birgmeier License", + "licenseId": "Martin-Birgmeier", + "seeAlso": [ + "https://github.com/Perl/perl5/blob/blead/util.c#L6136" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/McPhee-slideshow.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/McPhee-slideshow.json", + "referenceNumber": 511, + "name": "McPhee Slideshow License", + "licenseId": "McPhee-slideshow", + "seeAlso": [ + "https://mirror.las.iastate.edu/tex-archive/graphics/metapost/contrib/macros/slideshow/slideshow.mp" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/metamail.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/metamail.json", + "referenceNumber": 325, + "name": "metamail License", + "licenseId": "metamail", + "seeAlso": [ + "https://github.com/Dual-Life/mime-base64/blob/master/Base64.xs#L12" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Minpack.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Minpack.json", + "referenceNumber": 634, + "name": "Minpack License", + "licenseId": "Minpack", + "seeAlso": [ + "http://www.netlib.org/minpack/disclaimer", + "https://gitlab.com/libeigen/eigen/-/blob/master/COPYING.MINPACK" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MirOS.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MirOS.json", + "referenceNumber": 202, + "name": "The MirOS Licence", + "licenseId": "MirOS", + "seeAlso": [ + "https://opensource.org/licenses/MirOS" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/MIT.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT.json", + "referenceNumber": 601, + "name": "MIT License", + "licenseId": "MIT", + "seeAlso": [ + "https://opensource.org/license/mit/" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/MIT-0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-0.json", + "referenceNumber": 587, + "name": "MIT No Attribution", + "licenseId": "MIT-0", + "seeAlso": [ + "https://github.com/aws/mit-0", + "https://romanrm.net/mit-zero", + "https://github.com/awsdocs/aws-cloud9-user-guide/blob/master/LICENSE-SAMPLECODE" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/MIT-advertising.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-advertising.json", + "referenceNumber": 39, + "name": "Enlightenment License (e16)", + "licenseId": "MIT-advertising", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MIT_With_Advertising" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-CMU.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-CMU.json", + "referenceNumber": 36, + "name": "CMU License", + "licenseId": "MIT-CMU", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:MIT?rd\u003dLicensing/MIT#CMU_Style", + "https://github.com/python-pillow/Pillow/blob/fffb426092c8db24a5f4b6df243a8a3c01fb63cd/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-enna.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-enna.json", + "referenceNumber": 207, + "name": "enna License", + "licenseId": "MIT-enna", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MIT#enna" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-feh.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-feh.json", + "referenceNumber": 146, + "name": "feh License", + "licenseId": "MIT-feh", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MIT#feh" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-Festival.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-Festival.json", + "referenceNumber": 431, + "name": "MIT Festival Variant", + "licenseId": "MIT-Festival", + "seeAlso": [ + "https://github.com/festvox/flite/blob/master/COPYING", + "https://github.com/festvox/speech_tools/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-Khronos-old.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-Khronos-old.json", + "referenceNumber": 68, + "name": "MIT Khronos - old variant", + "licenseId": "MIT-Khronos-old", + "seeAlso": [ + "https://github.com/KhronosGroup/SPIRV-Cross/blob/main/LICENSES/LicenseRef-KhronosFreeUse.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-Modern-Variant.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-Modern-Variant.json", + "referenceNumber": 92, + "name": "MIT License Modern Variant", + "licenseId": "MIT-Modern-Variant", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:MIT#Modern_Variants", + "https://ptolemy.berkeley.edu/copyright.htm", + "https://pirlwww.lpl.arizona.edu/resources/guide/software/PerlTk/Tixlic.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/MIT-open-group.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-open-group.json", + "referenceNumber": 520, + "name": "MIT Open Group variant", + "licenseId": "MIT-open-group", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/app/iceauth/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/app/xvinfo/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/app/xsetroot/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/app/xauth/-/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-testregex.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-testregex.json", + "referenceNumber": 578, + "name": "MIT testregex Variant", + "licenseId": "MIT-testregex", + "seeAlso": [ + "https://github.com/dotnet/runtime/blob/55e1ac7c07df62c4108d4acedf78f77574470ce5/src/libraries/System.Text.RegularExpressions/tests/FunctionalTests/AttRegexTests.cs#L12-L28" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-Wu.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-Wu.json", + "referenceNumber": 156, + "name": "MIT Tom Wu Variant", + "licenseId": "MIT-Wu", + "seeAlso": [ + "https://github.com/chromium/octane/blob/master/crypto.js" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MITNFA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MITNFA.json", + "referenceNumber": 650, + "name": "MIT +no-false-attribs license", + "licenseId": "MITNFA", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MITNFA" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MMIXware.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MMIXware.json", + "referenceNumber": 444, + "name": "MMIXware License", + "licenseId": "MMIXware", + "seeAlso": [ + "https://gitlab.lrz.de/mmix/mmixware/-/blob/master/boilerplate.w" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Motosoto.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Motosoto.json", + "referenceNumber": 31, + "name": "Motosoto License", + "licenseId": "Motosoto", + "seeAlso": [ + "https://opensource.org/licenses/Motosoto" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/MPEG-SSG.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MPEG-SSG.json", + "referenceNumber": 323, + "name": "MPEG Software Simulation", + "licenseId": "MPEG-SSG", + "seeAlso": [ + "https://sourceforge.net/p/netpbm/code/HEAD/tree/super_stable/converter/ppm/ppmtompeg/jrevdct.c#l1189" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/mpi-permissive.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/mpi-permissive.json", + "referenceNumber": 459, + "name": "mpi Permissive License", + "licenseId": "mpi-permissive", + "seeAlso": [ + "https://sources.debian.org/src/openmpi/4.1.0-10/ompi/debuggers/msgq_interface.h/?hl\u003d19#L19" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/mpich2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/mpich2.json", + "referenceNumber": 448, + "name": "mpich2 License", + "licenseId": "mpich2", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MIT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MPL-1.0.json", + "referenceNumber": 248, + "name": "Mozilla Public License 1.0", + "licenseId": "MPL-1.0", + "seeAlso": [ + "http://www.mozilla.org/MPL/MPL-1.0.html", + "https://opensource.org/licenses/MPL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/MPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MPL-1.1.json", + "referenceNumber": 219, + "name": "Mozilla Public License 1.1", + "licenseId": "MPL-1.1", + "seeAlso": [ + "http://www.mozilla.org/MPL/MPL-1.1.html", + "https://opensource.org/licenses/MPL-1.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/MPL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MPL-2.0.json", + "referenceNumber": 147, + "name": "Mozilla Public License 2.0", + "licenseId": "MPL-2.0", + "seeAlso": [ + "https://www.mozilla.org/MPL/2.0/", + "https://opensource.org/licenses/MPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/MPL-2.0-no-copyleft-exception.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MPL-2.0-no-copyleft-exception.json", + "referenceNumber": 529, + "name": "Mozilla Public License 2.0 (no copyleft exception)", + "licenseId": "MPL-2.0-no-copyleft-exception", + "seeAlso": [ + "https://www.mozilla.org/MPL/2.0/", + "https://opensource.org/licenses/MPL-2.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/mplus.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/mplus.json", + "referenceNumber": 553, + "name": "mplus Font License", + "licenseId": "mplus", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:Mplus?rd\u003dLicensing/mplus" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MS-LPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MS-LPL.json", + "referenceNumber": 412, + "name": "Microsoft Limited Public License", + "licenseId": "MS-LPL", + "seeAlso": [ + "https://www.openhub.net/licenses/mslpl", + "https://github.com/gabegundy/atlserver/blob/master/License.txt", + "https://en.wikipedia.org/wiki/Shared_Source_Initiative#Microsoft_Limited_Public_License_(Ms-LPL)" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MS-PL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MS-PL.json", + "referenceNumber": 360, + "name": "Microsoft Public License", + "licenseId": "MS-PL", + "seeAlso": [ + "http://www.microsoft.com/opensource/licenses.mspx", + "https://opensource.org/licenses/MS-PL" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/MS-RL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MS-RL.json", + "referenceNumber": 212, + "name": "Microsoft Reciprocal License", + "licenseId": "MS-RL", + "seeAlso": [ + "http://www.microsoft.com/opensource/licenses.mspx", + "https://opensource.org/licenses/MS-RL" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/MTLL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MTLL.json", + "referenceNumber": 610, + "name": "Matrix Template Library License", + "licenseId": "MTLL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Matrix_Template_Library_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MulanPSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MulanPSL-1.0.json", + "referenceNumber": 236, + "name": "Mulan Permissive Software License, Version 1", + "licenseId": "MulanPSL-1.0", + "seeAlso": [ + "https://license.coscl.org.cn/MulanPSL/", + "https://github.com/yuwenlong/longphp/blob/25dfb70cc2a466dc4bb55ba30901cbce08d164b5/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MulanPSL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MulanPSL-2.0.json", + "referenceNumber": 523, + "name": "Mulan Permissive Software License, Version 2", + "licenseId": "MulanPSL-2.0", + "seeAlso": [ + "https://license.coscl.org.cn/MulanPSL2" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Multics.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Multics.json", + "referenceNumber": 462, + "name": "Multics License", + "licenseId": "Multics", + "seeAlso": [ + "https://opensource.org/licenses/Multics" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Mup.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Mup.json", + "referenceNumber": 515, + "name": "Mup License", + "licenseId": "Mup", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Mup" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NAIST-2003.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NAIST-2003.json", + "referenceNumber": 118, + "name": "Nara Institute of Science and Technology License (2003)", + "licenseId": "NAIST-2003", + "seeAlso": [ + "https://enterprise.dejacode.com/licenses/public/naist-2003/#license-text", + "https://github.com/nodejs/node/blob/4a19cc8947b1bba2b2d27816ec3d0edf9b28e503/LICENSE#L343" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NASA-1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NASA-1.3.json", + "referenceNumber": 488, + "name": "NASA Open Source Agreement 1.3", + "licenseId": "NASA-1.3", + "seeAlso": [ + "http://ti.arc.nasa.gov/opensource/nosa/", + "https://opensource.org/licenses/NASA-1.3" + ], + "isOsiApproved": true, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/Naumen.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Naumen.json", + "referenceNumber": 400, + "name": "Naumen Public License", + "licenseId": "Naumen", + "seeAlso": [ + "https://opensource.org/licenses/Naumen" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/NBPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NBPL-1.0.json", + "referenceNumber": 168, + "name": "Net Boolean Public License v1", + "licenseId": "NBPL-1.0", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d37b4b3f6cc4bf34e1d3dec61e69914b9819d8894" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NCBI-PD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NCBI-PD.json", + "referenceNumber": 599, + "name": "NCBI Public Domain Notice", + "licenseId": "NCBI-PD", + "seeAlso": [ + "https://github.com/ncbi/sra-tools/blob/e8e5b6af4edc460156ad9ce5902d0779cffbf685/LICENSE", + "https://github.com/ncbi/datasets/blob/0ea4cd16b61e5b799d9cc55aecfa016d6c9bd2bf/LICENSE.md", + "https://github.com/ncbi/gprobe/blob/de64d30fee8b4c4013094d7d3139ea89b5dd1ace/LICENSE", + "https://github.com/ncbi/egapx/blob/08930b9dec0c69b2d1a05e5153c7b95ef0a3eb0f/LICENSE", + "https://github.com/ncbi/datasets/blob/master/LICENSE.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NCGL-UK-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NCGL-UK-2.0.json", + "referenceNumber": 130, + "name": "Non-Commercial Government Licence", + "licenseId": "NCGL-UK-2.0", + "seeAlso": [ + "http://www.nationalarchives.gov.uk/doc/non-commercial-government-licence/version/2/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NCL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NCL.json", + "referenceNumber": 516, + "name": "NCL Source Code License", + "licenseId": "NCL", + "seeAlso": [ + "https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/src/modules/module-filter-chain/pffft.c?ref_type\u003dheads#L1-52" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NCSA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NCSA.json", + "referenceNumber": 652, + "name": "University of Illinois/NCSA Open Source License", + "licenseId": "NCSA", + "seeAlso": [ + "http://otm.illinois.edu/uiuc_openSource", + "https://opensource.org/licenses/NCSA" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Net-SNMP.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/Net-SNMP.json", + "referenceNumber": 469, + "name": "Net-SNMP License", + "licenseId": "Net-SNMP", + "seeAlso": [ + "http://net-snmp.sourceforge.net/about/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NetCDF.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NetCDF.json", + "referenceNumber": 189, + "name": "NetCDF license", + "licenseId": "NetCDF", + "seeAlso": [ + "http://www.unidata.ucar.edu/software/netcdf/copyright.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Newsletr.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Newsletr.json", + "referenceNumber": 499, + "name": "Newsletr License", + "licenseId": "Newsletr", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Newsletr" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NGPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NGPL.json", + "referenceNumber": 167, + "name": "Nethack General Public License", + "licenseId": "NGPL", + "seeAlso": [ + "https://opensource.org/licenses/NGPL" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/NICTA-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NICTA-1.0.json", + "referenceNumber": 486, + "name": "NICTA Public Software License, Version 1.0", + "licenseId": "NICTA-1.0", + "seeAlso": [ + "https://opensource.apple.com/source/mDNSResponder/mDNSResponder-320.10/mDNSPosix/nss_ReadMe.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NIST-PD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NIST-PD.json", + "referenceNumber": 194, + "name": "NIST Public Domain Notice", + "licenseId": "NIST-PD", + "seeAlso": [ + "https://github.com/tcheneau/simpleRPL/blob/e645e69e38dd4e3ccfeceb2db8cba05b7c2e0cd3/LICENSE.txt", + "https://github.com/tcheneau/Routing/blob/f09f46fcfe636107f22f2c98348188a65a135d98/README.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NIST-PD-fallback.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NIST-PD-fallback.json", + "referenceNumber": 223, + "name": "NIST Public Domain Notice with license fallback", + "licenseId": "NIST-PD-fallback", + "seeAlso": [ + "https://github.com/usnistgov/jsip/blob/59700e6926cbe96c5cdae897d9a7d2656b42abe3/LICENSE", + "https://github.com/usnistgov/fipy/blob/86aaa5c2ba2c6f1be19593c5986071cf6568cc34/LICENSE.rst" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NIST-Software.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NIST-Software.json", + "referenceNumber": 251, + "name": "NIST Software License", + "licenseId": "NIST-Software", + "seeAlso": [ + "https://github.com/open-quantum-safe/liboqs/blob/40b01fdbb270f8614fde30e65d30e9da18c02393/src/common/rand/rand_nist.c#L1-L15" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NLOD-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NLOD-1.0.json", + "referenceNumber": 294, + "name": "Norwegian Licence for Open Government Data (NLOD) 1.0", + "licenseId": "NLOD-1.0", + "seeAlso": [ + "http://data.norge.no/nlod/en/1.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NLOD-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NLOD-2.0.json", + "referenceNumber": 566, + "name": "Norwegian Licence for Open Government Data (NLOD) 2.0", + "licenseId": "NLOD-2.0", + "seeAlso": [ + "http://data.norge.no/nlod/en/2.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NLPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NLPL.json", + "referenceNumber": 367, + "name": "No Limit Public License", + "licenseId": "NLPL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/NLPL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Nokia.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Nokia.json", + "referenceNumber": 145, + "name": "Nokia Open Source License", + "licenseId": "Nokia", + "seeAlso": [ + "https://opensource.org/licenses/nokia" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/NOSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NOSL.json", + "referenceNumber": 254, + "name": "Netizen Open Source License", + "licenseId": "NOSL", + "seeAlso": [ + "http://bits.netizen.com.au/licenses/NOSL/nosl.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Noweb.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Noweb.json", + "referenceNumber": 30, + "name": "Noweb License", + "licenseId": "Noweb", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Noweb" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NPL-1.0.json", + "referenceNumber": 211, + "name": "Netscape Public License v1.0", + "licenseId": "NPL-1.0", + "seeAlso": [ + "http://www.mozilla.org/MPL/NPL/1.0/" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/NPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NPL-1.1.json", + "referenceNumber": 595, + "name": "Netscape Public License v1.1", + "licenseId": "NPL-1.1", + "seeAlso": [ + "http://www.mozilla.org/MPL/NPL/1.1/" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/NPOSL-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NPOSL-3.0.json", + "referenceNumber": 664, + "name": "Non-Profit Open Software License 3.0", + "licenseId": "NPOSL-3.0", + "seeAlso": [ + "https://opensource.org/licenses/NOSL3.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/NRL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NRL.json", + "referenceNumber": 113, + "name": "NRL License", + "licenseId": "NRL", + "seeAlso": [ + "http://web.mit.edu/network/isakmp/nrllicense.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NTP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NTP.json", + "referenceNumber": 390, + "name": "NTP License", + "licenseId": "NTP", + "seeAlso": [ + "https://opensource.org/licenses/NTP" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/NTP-0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NTP-0.json", + "referenceNumber": 64, + "name": "NTP No Attribution", + "licenseId": "NTP-0", + "seeAlso": [ + "https://github.com/tytso/e2fsprogs/blob/master/lib/et/et_name.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Nunit.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/Nunit.json", + "referenceNumber": 27, + "name": "Nunit License", + "licenseId": "Nunit", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Nunit" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/O-UDA-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/O-UDA-1.0.json", + "referenceNumber": 161, + "name": "Open Use of Data Agreement v1.0", + "licenseId": "O-UDA-1.0", + "seeAlso": [ + "https://github.com/microsoft/Open-Use-of-Data-Agreement/blob/v1.0/O-UDA-1.0.md", + "https://cdla.dev/open-use-of-data-agreement-v1-0/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OAR.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OAR.json", + "referenceNumber": 100, + "name": "OAR License", + "licenseId": "OAR", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dnewlib-cygwin.git;a\u003dblob;f\u003dnewlib/libc/string/strsignal.c;hb\u003dHEAD#l35" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OCCT-PL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OCCT-PL.json", + "referenceNumber": 408, + "name": "Open CASCADE Technology Public License", + "licenseId": "OCCT-PL", + "seeAlso": [ + "http://www.opencascade.com/content/occt-public-license" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OCLC-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OCLC-2.0.json", + "referenceNumber": 468, + "name": "OCLC Research Public License 2.0", + "licenseId": "OCLC-2.0", + "seeAlso": [ + "http://www.oclc.org/research/activities/software/license/v2final.htm", + "https://opensource.org/licenses/OCLC-2.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/ODbL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ODbL-1.0.json", + "referenceNumber": 611, + "name": "Open Data Commons Open Database License v1.0", + "licenseId": "ODbL-1.0", + "seeAlso": [ + "http://www.opendatacommons.org/licenses/odbl/1.0/", + "https://opendatacommons.org/licenses/odbl/1-0/" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ODC-By-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ODC-By-1.0.json", + "referenceNumber": 15, + "name": "Open Data Commons Attribution License v1.0", + "licenseId": "ODC-By-1.0", + "seeAlso": [ + "https://opendatacommons.org/licenses/by/1.0/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OFFIS.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFFIS.json", + "referenceNumber": 418, + "name": "OFFIS License", + "licenseId": "OFFIS", + "seeAlso": [ + "https://sourceforge.net/p/xmedcon/code/ci/master/tree/libs/dicom/README" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OFL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.0.json", + "referenceNumber": 603, + "name": "SIL Open Font License 1.0", + "licenseId": "OFL-1.0", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL10_web" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OFL-1.0-no-RFN.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.0-no-RFN.json", + "referenceNumber": 545, + "name": "SIL Open Font License 1.0 with no Reserved Font Name", + "licenseId": "OFL-1.0-no-RFN", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL10_web" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OFL-1.0-RFN.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.0-RFN.json", + "referenceNumber": 446, + "name": "SIL Open Font License 1.0 with Reserved Font Name", + "licenseId": "OFL-1.0-RFN", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL10_web" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OFL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.1.json", + "referenceNumber": 0, + "name": "SIL Open Font License 1.1", + "licenseId": "OFL-1.1", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL_web", + "https://opensource.org/licenses/OFL-1.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OFL-1.1-no-RFN.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.1-no-RFN.json", + "referenceNumber": 110, + "name": "SIL Open Font License 1.1 with no Reserved Font Name", + "licenseId": "OFL-1.1-no-RFN", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL_web", + "https://opensource.org/licenses/OFL-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OFL-1.1-RFN.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.1-RFN.json", + "referenceNumber": 90, + "name": "SIL Open Font License 1.1 with Reserved Font Name", + "licenseId": "OFL-1.1-RFN", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL_web", + "https://opensource.org/licenses/OFL-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OGC-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGC-1.0.json", + "referenceNumber": 504, + "name": "OGC Software License, Version 1.0", + "licenseId": "OGC-1.0", + "seeAlso": [ + "https://www.ogc.org/ogc/software/1.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGDL-Taiwan-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGDL-Taiwan-1.0.json", + "referenceNumber": 23, + "name": "Taiwan Open Government Data License, version 1.0", + "licenseId": "OGDL-Taiwan-1.0", + "seeAlso": [ + "https://data.gov.tw/license" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGL-Canada-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGL-Canada-2.0.json", + "referenceNumber": 40, + "name": "Open Government Licence - Canada", + "licenseId": "OGL-Canada-2.0", + "seeAlso": [ + "https://open.canada.ca/en/open-government-licence-canada" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGL-UK-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGL-UK-1.0.json", + "referenceNumber": 497, + "name": "Open Government Licence v1.0", + "licenseId": "OGL-UK-1.0", + "seeAlso": [ + "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/1/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGL-UK-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGL-UK-2.0.json", + "referenceNumber": 556, + "name": "Open Government Licence v2.0", + "licenseId": "OGL-UK-2.0", + "seeAlso": [ + "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/2/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGL-UK-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGL-UK-3.0.json", + "referenceNumber": 585, + "name": "Open Government Licence v3.0", + "licenseId": "OGL-UK-3.0", + "seeAlso": [ + "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGTSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGTSL.json", + "referenceNumber": 97, + "name": "Open Group Test Suite License", + "licenseId": "OGTSL", + "seeAlso": [ + "http://www.opengroup.org/testing/downloads/The_Open_Group_TSL.txt", + "https://opensource.org/licenses/OGTSL" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OLDAP-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-1.1.json", + "referenceNumber": 420, + "name": "Open LDAP Public License v1.1", + "licenseId": "OLDAP-1.1", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d806557a5ad59804ef3a44d5abfbe91d706b0791f" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-1.2.json", + "referenceNumber": 487, + "name": "Open LDAP Public License v1.2", + "licenseId": "OLDAP-1.2", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d42b0383c50c299977b5893ee695cf4e486fb0dc7" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-1.3.json", + "referenceNumber": 627, + "name": "Open LDAP Public License v1.3", + "licenseId": "OLDAP-1.3", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003de5f8117f0ce088d0bd7a8e18ddf37eaa40eb09b1" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-1.4.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-1.4.json", + "referenceNumber": 45, + "name": "Open LDAP Public License v1.4", + "licenseId": "OLDAP-1.4", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dc9f95c2f3f2ffb5e0ae55fe7388af75547660941" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.0.json", + "referenceNumber": 537, + "name": "Open LDAP Public License v2.0 (or possibly 2.0A and 2.0B)", + "licenseId": "OLDAP-2.0", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dcbf50f4e1185a21abd4c0a54d3f4341fe28f36ea" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.0.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.0.1.json", + "referenceNumber": 179, + "name": "Open LDAP Public License v2.0.1", + "licenseId": "OLDAP-2.0.1", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003db6d68acd14e51ca3aab4428bf26522aa74873f0e" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.1.json", + "referenceNumber": 342, + "name": "Open LDAP Public License v2.1", + "licenseId": "OLDAP-2.1", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003db0d176738e96a0d3b9f85cb51e140a86f21be715" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.2.json", + "referenceNumber": 347, + "name": "Open LDAP Public License v2.2", + "licenseId": "OLDAP-2.2", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d470b0c18ec67621c85881b2733057fecf4a1acc3" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.2.1.json", + "referenceNumber": 208, + "name": "Open LDAP Public License v2.2.1", + "licenseId": "OLDAP-2.2.1", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d4bc786f34b50aa301be6f5600f58a980070f481e" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.2.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.2.2.json", + "referenceNumber": 312, + "name": "Open LDAP Public License 2.2.2", + "licenseId": "OLDAP-2.2.2", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003ddf2cc1e21eb7c160695f5b7cffd6296c151ba188" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.3.json", + "referenceNumber": 276, + "name": "Open LDAP Public License v2.3", + "licenseId": "OLDAP-2.3", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dd32cf54a32d581ab475d23c810b0a7fbaf8d63c3" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.4.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.4.json", + "referenceNumber": 108, + "name": "Open LDAP Public License v2.4", + "licenseId": "OLDAP-2.4", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dcd1284c4a91a8a380d904eee68d1583f989ed386" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.5.json", + "referenceNumber": 518, + "name": "Open LDAP Public License v2.5", + "licenseId": "OLDAP-2.5", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d6852b9d90022e8593c98205413380536b1b5a7cf" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.6.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.6.json", + "referenceNumber": 275, + "name": "Open LDAP Public License v2.6", + "licenseId": "OLDAP-2.6", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d1cae062821881f41b73012ba816434897abf4205" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.7.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.7.json", + "referenceNumber": 79, + "name": "Open LDAP Public License v2.7", + "licenseId": "OLDAP-2.7", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d47c2415c1df81556eeb39be6cad458ef87c534a2" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.8.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.8.json", + "referenceNumber": 72, + "name": "Open LDAP Public License v2.8", + "licenseId": "OLDAP-2.8", + "seeAlso": [ + "http://www.openldap.org/software/release/license.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OLFL-1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLFL-1.3.json", + "referenceNumber": 204, + "name": "Open Logistics Foundation License Version 1.3", + "licenseId": "OLFL-1.3", + "seeAlso": [ + "https://openlogisticsfoundation.org/licenses/", + "https://opensource.org/license/olfl-1-3/" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OML.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OML.json", + "referenceNumber": 505, + "name": "Open Market License", + "licenseId": "OML", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Open_Market_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OpenPBS-2.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OpenPBS-2.3.json", + "referenceNumber": 159, + "name": "OpenPBS v2.3 Software License", + "licenseId": "OpenPBS-2.3", + "seeAlso": [ + "https://github.com/adaptivecomputing/torque/blob/master/PBS_License.txt", + "https://www.mcs.anl.gov/research/projects/openpbs/PBS_License.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OpenSSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OpenSSL.json", + "referenceNumber": 445, + "name": "OpenSSL License", + "licenseId": "OpenSSL", + "seeAlso": [ + "http://www.openssl.org/source/license.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OpenSSL-standalone.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OpenSSL-standalone.json", + "referenceNumber": 635, + "name": "OpenSSL License - standalone", + "licenseId": "OpenSSL-standalone", + "seeAlso": [ + "https://library.netapp.com/ecm/ecm_download_file/ECMP1196395", + "https://hstechdocs.helpsystems.com/manuals/globalscape/archive/cuteftp6/open_ssl_license_agreement.htm" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OpenVision.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OpenVision.json", + "referenceNumber": 589, + "name": "OpenVision License", + "licenseId": "OpenVision", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L66-L98", + "https://web.mit.edu/kerberos/krb5-1.21/doc/mitK5license.html", + "https://fedoraproject.org/wiki/Licensing:MIT#OpenVision_Variant" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OPL-1.0.json", + "referenceNumber": 80, + "name": "Open Public License v1.0", + "licenseId": "OPL-1.0", + "seeAlso": [ + "http://old.koalateam.com/jackaroo/OPL_1_0.TXT", + "https://fedoraproject.org/wiki/Licensing/Open_Public_License" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/OPL-UK-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OPL-UK-3.0.json", + "referenceNumber": 19, + "name": "United Kingdom Open Parliament Licence v3.0", + "licenseId": "OPL-UK-3.0", + "seeAlso": [ + "https://www.parliament.uk/site-information/copyright-parliament/open-parliament-licence/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OPUBL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OPUBL-1.0.json", + "referenceNumber": 266, + "name": "Open Publication License v1.0", + "licenseId": "OPUBL-1.0", + "seeAlso": [ + "http://opencontent.org/openpub/", + "https://www.debian.org/opl", + "https://www.ctan.org/license/opl" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OSET-PL-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSET-PL-2.1.json", + "referenceNumber": 307, + "name": "OSET Public License version 2.1", + "licenseId": "OSET-PL-2.1", + "seeAlso": [ + "http://www.osetfoundation.org/public-license", + "https://opensource.org/licenses/OPL-2.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSL-1.0.json", + "referenceNumber": 306, + "name": "Open Software License 1.0", + "licenseId": "OSL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/OSL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OSL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSL-1.1.json", + "referenceNumber": 111, + "name": "Open Software License 1.1", + "licenseId": "OSL-1.1", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/OSL1.1" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OSL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSL-2.0.json", + "referenceNumber": 457, + "name": "Open Software License 2.0", + "licenseId": "OSL-2.0", + "seeAlso": [ + "http://web.archive.org/web/20041020171434/http://www.rosenlaw.com/osl2.0.html" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OSL-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSL-2.1.json", + "referenceNumber": 247, + "name": "Open Software License 2.1", + "licenseId": "OSL-2.1", + "seeAlso": [ + "http://web.archive.org/web/20050212003940/http://www.rosenlaw.com/osl21.htm", + "https://opensource.org/licenses/OSL-2.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OSL-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSL-3.0.json", + "referenceNumber": 432, + "name": "Open Software License 3.0", + "licenseId": "OSL-3.0", + "seeAlso": [ + "https://web.archive.org/web/20120101081418/http://rosenlaw.com:80/OSL3.0.htm", + "https://opensource.org/licenses/OSL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/PADL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PADL.json", + "referenceNumber": 43, + "name": "PADL License", + "licenseId": "PADL", + "seeAlso": [ + "https://git.openldap.org/openldap/openldap/-/blob/master/libraries/libldap/os-local.c?ref_type\u003dheads#L19-23" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Parity-6.0.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Parity-6.0.0.json", + "referenceNumber": 49, + "name": "The Parity Public License 6.0.0", + "licenseId": "Parity-6.0.0", + "seeAlso": [ + "https://paritylicense.com/versions/6.0.0.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Parity-7.0.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Parity-7.0.0.json", + "referenceNumber": 482, + "name": "The Parity Public License 7.0.0", + "licenseId": "Parity-7.0.0", + "seeAlso": [ + "https://paritylicense.com/versions/7.0.0.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/PDDL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PDDL-1.0.json", + "referenceNumber": 210, + "name": "Open Data Commons Public Domain Dedication \u0026 License 1.0", + "licenseId": "PDDL-1.0", + "seeAlso": [ + "http://opendatacommons.org/licenses/pddl/1.0/", + "https://opendatacommons.org/licenses/pddl/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/PHP-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PHP-3.0.json", + "referenceNumber": 580, + "name": "PHP License v3.0", + "licenseId": "PHP-3.0", + "seeAlso": [ + "http://www.php.net/license/3_0.txt", + "https://opensource.org/licenses/PHP-3.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/PHP-3.01.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PHP-3.01.json", + "referenceNumber": 594, + "name": "PHP License v3.01", + "licenseId": "PHP-3.01", + "seeAlso": [ + "http://www.php.net/license/3_01.txt" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Pixar.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Pixar.json", + "referenceNumber": 619, + "name": "Pixar License", + "licenseId": "Pixar", + "seeAlso": [ + "https://github.com/PixarAnimationStudios/OpenSubdiv/raw/v3_5_0/LICENSE.txt", + "https://graphics.pixar.com/opensubdiv/docs/license.html", + "https://github.com/PixarAnimationStudios/OpenSubdiv/blob/v3_5_0/opensubdiv/version.cpp#L2-L22" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/pkgconf.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/pkgconf.json", + "referenceNumber": 16, + "name": "pkgconf License", + "licenseId": "pkgconf", + "seeAlso": [ + "https://github.com/pkgconf/pkgconf/blob/master/cli/main.c#L8" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Plexus.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Plexus.json", + "referenceNumber": 442, + "name": "Plexus Classworlds License", + "licenseId": "Plexus", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Plexus_Classworlds_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/pnmstitch.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/pnmstitch.json", + "referenceNumber": 502, + "name": "pnmstitch License", + "licenseId": "pnmstitch", + "seeAlso": [ + "https://sourceforge.net/p/netpbm/code/HEAD/tree/super_stable/editor/pnmstitch.c#l2" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/PolyForm-Noncommercial-1.0.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PolyForm-Noncommercial-1.0.0.json", + "referenceNumber": 575, + "name": "PolyForm Noncommercial License 1.0.0", + "licenseId": "PolyForm-Noncommercial-1.0.0", + "seeAlso": [ + "https://polyformproject.org/licenses/noncommercial/1.0.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/PolyForm-Small-Business-1.0.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PolyForm-Small-Business-1.0.0.json", + "referenceNumber": 9, + "name": "PolyForm Small Business License 1.0.0", + "licenseId": "PolyForm-Small-Business-1.0.0", + "seeAlso": [ + "https://polyformproject.org/licenses/small-business/1.0.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/PostgreSQL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PostgreSQL.json", + "referenceNumber": 94, + "name": "PostgreSQL License", + "licenseId": "PostgreSQL", + "seeAlso": [ + "http://www.postgresql.org/about/licence", + "https://opensource.org/licenses/PostgreSQL" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/PPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PPL.json", + "referenceNumber": 454, + "name": "Peer Production License", + "licenseId": "PPL", + "seeAlso": [ + "https://wiki.p2pfoundation.net/Peer_Production_License", + "http://www.networkcultures.org/_uploads/%233notebook_telekommunist.pdf" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/PSF-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PSF-2.0.json", + "referenceNumber": 62, + "name": "Python Software Foundation License 2.0", + "licenseId": "PSF-2.0", + "seeAlso": [ + "https://opensource.org/licenses/Python-2.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/psfrag.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/psfrag.json", + "referenceNumber": 279, + "name": "psfrag License", + "licenseId": "psfrag", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/psfrag" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/psutils.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/psutils.json", + "referenceNumber": 387, + "name": "psutils License", + "licenseId": "psutils", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/psutils" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Python-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Python-2.0.json", + "referenceNumber": 498, + "name": "Python License 2.0", + "licenseId": "Python-2.0", + "seeAlso": [ + "https://opensource.org/licenses/Python-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Python-2.0.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Python-2.0.1.json", + "referenceNumber": 453, + "name": "Python License 2.0.1", + "licenseId": "Python-2.0.1", + "seeAlso": [ + "https://www.python.org/download/releases/2.0.1/license/", + "https://docs.python.org/3/license.html", + "https://github.com/python/cpython/blob/main/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/python-ldap.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/python-ldap.json", + "referenceNumber": 422, + "name": "Python ldap License", + "licenseId": "python-ldap", + "seeAlso": [ + "https://github.com/python-ldap/python-ldap/blob/main/LICENCE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Qhull.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Qhull.json", + "referenceNumber": 123, + "name": "Qhull License", + "licenseId": "Qhull", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Qhull" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/QPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/QPL-1.0.json", + "referenceNumber": 329, + "name": "Q Public License 1.0", + "licenseId": "QPL-1.0", + "seeAlso": [ + "http://doc.qt.nokia.com/3.3/license.html", + "https://opensource.org/licenses/QPL-1.0", + "https://doc.qt.io/archives/3.3/license.html" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/QPL-1.0-INRIA-2004.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/QPL-1.0-INRIA-2004.json", + "referenceNumber": 479, + "name": "Q Public License 1.0 - INRIA 2004 variant", + "licenseId": "QPL-1.0-INRIA-2004", + "seeAlso": [ + "https://github.com/maranget/hevea/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/radvd.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/radvd.json", + "referenceNumber": 182, + "name": "radvd License", + "licenseId": "radvd", + "seeAlso": [ + "https://github.com/radvd-project/radvd/blob/master/COPYRIGHT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Rdisc.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Rdisc.json", + "referenceNumber": 101, + "name": "Rdisc License", + "licenseId": "Rdisc", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Rdisc_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/RHeCos-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RHeCos-1.1.json", + "referenceNumber": 373, + "name": "Red Hat eCos Public License v1.1", + "licenseId": "RHeCos-1.1", + "seeAlso": [ + "http://ecos.sourceware.org/old-license.html" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/RPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RPL-1.1.json", + "referenceNumber": 369, + "name": "Reciprocal Public License 1.1", + "licenseId": "RPL-1.1", + "seeAlso": [ + "https://opensource.org/licenses/RPL-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/RPL-1.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RPL-1.5.json", + "referenceNumber": 102, + "name": "Reciprocal Public License 1.5", + "licenseId": "RPL-1.5", + "seeAlso": [ + "https://opensource.org/licenses/RPL-1.5" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/RPSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RPSL-1.0.json", + "referenceNumber": 663, + "name": "RealNetworks Public Source License v1.0", + "licenseId": "RPSL-1.0", + "seeAlso": [ + "https://helixcommunity.org/content/rpsl", + "https://opensource.org/licenses/RPSL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/RSA-MD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RSA-MD.json", + "referenceNumber": 139, + "name": "RSA Message-Digest License", + "licenseId": "RSA-MD", + "seeAlso": [ + "http://www.faqs.org/rfcs/rfc1321.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/RSCPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RSCPL.json", + "referenceNumber": 405, + "name": "Ricoh Source Code Public License", + "licenseId": "RSCPL", + "seeAlso": [ + "http://wayback.archive.org/web/20060715140826/http://www.risource.org/RPL/RPL-1.0A.shtml", + "https://opensource.org/licenses/RSCPL" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Ruby.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Ruby.json", + "referenceNumber": 192, + "name": "Ruby License", + "licenseId": "Ruby", + "seeAlso": [ + "https://www.ruby-lang.org/en/about/license.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Ruby-pty.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Ruby-pty.json", + "referenceNumber": 473, + "name": "Ruby pty extension license", + "licenseId": "Ruby-pty", + "seeAlso": [ + "https://github.com/ruby/ruby/blob/9f6deaa6888a423720b4b127b5314f0ad26cc2e6/ext/pty/pty.c#L775-L786", + "https://github.com/ruby/ruby/commit/0a64817fb80016030c03518fb9459f63c11605ea#diff-ef5fa30838d6d0cecad9e675cc50b24628cfe2cb277c346053fafcc36c91c204", + "https://github.com/ruby/ruby/commit/0a64817fb80016030c03518fb9459f63c11605ea#diff-fedf217c1ce44bda01f0a678d3ff8b198bed478754d699c527a698ad933979a0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SAX-PD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SAX-PD.json", + "referenceNumber": 205, + "name": "Sax Public Domain Notice", + "licenseId": "SAX-PD", + "seeAlso": [ + "http://www.saxproject.org/copying.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SAX-PD-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SAX-PD-2.0.json", + "referenceNumber": 209, + "name": "Sax Public Domain Notice 2.0", + "licenseId": "SAX-PD-2.0", + "seeAlso": [ + "http://www.saxproject.org/copying.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Saxpath.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Saxpath.json", + "referenceNumber": 67, + "name": "Saxpath License", + "licenseId": "Saxpath", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Saxpath_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SCEA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SCEA.json", + "referenceNumber": 617, + "name": "SCEA Shared Source License", + "licenseId": "SCEA", + "seeAlso": [ + "http://research.scea.com/scea_shared_source_license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SchemeReport.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SchemeReport.json", + "referenceNumber": 472, + "name": "Scheme Language Report License", + "licenseId": "SchemeReport", + "seeAlso": [], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Sendmail.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Sendmail.json", + "referenceNumber": 135, + "name": "Sendmail License", + "licenseId": "Sendmail", + "seeAlso": [ + "http://www.sendmail.com/pdfs/open_source/sendmail_license.pdf", + "https://web.archive.org/web/20160322142305/https://www.sendmail.com/pdfs/open_source/sendmail_license.pdf" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Sendmail-8.23.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Sendmail-8.23.json", + "referenceNumber": 226, + "name": "Sendmail License 8.23", + "licenseId": "Sendmail-8.23", + "seeAlso": [ + "https://www.proofpoint.com/sites/default/files/sendmail-license.pdf", + "https://web.archive.org/web/20181003101040/https://www.proofpoint.com/sites/default/files/sendmail-license.pdf" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SGI-B-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SGI-B-1.0.json", + "referenceNumber": 631, + "name": "SGI Free Software License B v1.0", + "licenseId": "SGI-B-1.0", + "seeAlso": [ + "http://oss.sgi.com/projects/FreeB/SGIFreeSWLicB.1.0.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SGI-B-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SGI-B-1.1.json", + "referenceNumber": 48, + "name": "SGI Free Software License B v1.1", + "licenseId": "SGI-B-1.1", + "seeAlso": [ + "http://oss.sgi.com/projects/FreeB/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SGI-B-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SGI-B-2.0.json", + "referenceNumber": 193, + "name": "SGI Free Software License B v2.0", + "licenseId": "SGI-B-2.0", + "seeAlso": [ + "http://oss.sgi.com/projects/FreeB/SGIFreeSWLicB.2.0.pdf" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/SGI-OpenGL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SGI-OpenGL.json", + "referenceNumber": 565, + "name": "SGI OpenGL License", + "licenseId": "SGI-OpenGL", + "seeAlso": [ + "https://gitlab.freedesktop.org/mesa/glw/-/blob/master/README?ref_type\u003dheads" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SGP4.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SGP4.json", + "referenceNumber": 291, + "name": "SGP4 Permission Notice", + "licenseId": "SGP4", + "seeAlso": [ + "https://celestrak.org/publications/AIAA/2006-6753/faq.php" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SHL-0.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SHL-0.5.json", + "referenceNumber": 623, + "name": "Solderpad Hardware License v0.5", + "licenseId": "SHL-0.5", + "seeAlso": [ + "https://solderpad.org/licenses/SHL-0.5/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SHL-0.51.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SHL-0.51.json", + "referenceNumber": 34, + "name": "Solderpad Hardware License, Version 0.51", + "licenseId": "SHL-0.51", + "seeAlso": [ + "https://solderpad.org/licenses/SHL-0.51/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SimPL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SimPL-2.0.json", + "referenceNumber": 630, + "name": "Simple Public License 2.0", + "licenseId": "SimPL-2.0", + "seeAlso": [ + "https://opensource.org/licenses/SimPL-2.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/SISSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SISSL.json", + "referenceNumber": 655, + "name": "Sun Industry Standards Source License v1.1", + "licenseId": "SISSL", + "seeAlso": [ + "http://www.openoffice.org/licenses/sissl_license.html", + "https://opensource.org/licenses/SISSL" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/SISSL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SISSL-1.2.json", + "referenceNumber": 401, + "name": "Sun Industry Standards Source License v1.2", + "licenseId": "SISSL-1.2", + "seeAlso": [ + "http://gridscheduler.sourceforge.net/Gridengine_SISSL_license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SL.json", + "referenceNumber": 632, + "name": "SL License", + "licenseId": "SL", + "seeAlso": [ + "https://github.com/mtoyoda/sl/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Sleepycat.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Sleepycat.json", + "referenceNumber": 283, + "name": "Sleepycat License", + "licenseId": "Sleepycat", + "seeAlso": [ + "https://opensource.org/licenses/Sleepycat" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/SMLNJ.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SMLNJ.json", + "referenceNumber": 413, + "name": "Standard ML of New Jersey License", + "licenseId": "SMLNJ", + "seeAlso": [ + "https://www.smlnj.org/license.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/SMPPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SMPPL.json", + "referenceNumber": 321, + "name": "Secure Messaging Protocol Public License", + "licenseId": "SMPPL", + "seeAlso": [ + "https://github.com/dcblake/SMP/blob/master/Documentation/License.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SNIA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SNIA.json", + "referenceNumber": 41, + "name": "SNIA Public License 1.1", + "licenseId": "SNIA", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/SNIA_Public_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/snprintf.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/snprintf.json", + "referenceNumber": 507, + "name": "snprintf License", + "licenseId": "snprintf", + "seeAlso": [ + "https://github.com/openssh/openssh-portable/blob/master/openbsd-compat/bsd-snprintf.c#L2" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/softSurfer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/softSurfer.json", + "referenceNumber": 496, + "name": "softSurfer License", + "licenseId": "softSurfer", + "seeAlso": [ + "https://github.com/mm2/Little-CMS/blob/master/src/cmssm.c#L207", + "https://fedoraproject.org/wiki/Licensing/softSurfer" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Soundex.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Soundex.json", + "referenceNumber": 1, + "name": "Soundex License", + "licenseId": "Soundex", + "seeAlso": [ + "https://metacpan.org/release/RJBS/Text-Soundex-3.05/source/Soundex.pm#L3-11" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Spencer-86.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Spencer-86.json", + "referenceNumber": 257, + "name": "Spencer License 86", + "licenseId": "Spencer-86", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Henry_Spencer_Reg-Ex_Library_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Spencer-94.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Spencer-94.json", + "referenceNumber": 228, + "name": "Spencer License 94", + "licenseId": "Spencer-94", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Henry_Spencer_Reg-Ex_Library_License", + "https://metacpan.org/release/KNOK/File-MMagic-1.30/source/COPYING#L28" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Spencer-99.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Spencer-99.json", + "referenceNumber": 287, + "name": "Spencer License 99", + "licenseId": "Spencer-99", + "seeAlso": [ + "http://www.opensource.apple.com/source/tcl/tcl-5/tcl/generic/regfronts.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SPL-1.0.json", + "referenceNumber": 576, + "name": "Sun Public License v1.0", + "licenseId": "SPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/SPL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ssh-keyscan.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ssh-keyscan.json", + "referenceNumber": 78, + "name": "ssh-keyscan License", + "licenseId": "ssh-keyscan", + "seeAlso": [ + "https://github.com/openssh/openssh-portable/blob/master/LICENCE#L82" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SSH-OpenSSH.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SSH-OpenSSH.json", + "referenceNumber": 536, + "name": "SSH OpenSSH license", + "licenseId": "SSH-OpenSSH", + "seeAlso": [ + "https://github.com/openssh/openssh-portable/blob/1b11ea7c58cd5c59838b5fa574cd456d6047b2d4/LICENCE#L10" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SSH-short.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SSH-short.json", + "referenceNumber": 438, + "name": "SSH short notice", + "licenseId": "SSH-short", + "seeAlso": [ + "https://github.com/openssh/openssh-portable/blob/1b11ea7c58cd5c59838b5fa574cd456d6047b2d4/pathnames.h", + "http://web.mit.edu/kolya/.f/root/athena.mit.edu/sipb.mit.edu/project/openssh/OldFiles/src/openssh-2.9.9p2/ssh-add.1", + "https://joinup.ec.europa.eu/svn/lesoll/trunk/italc/lib/src/dsa_key.cpp" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SSLeay-standalone.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SSLeay-standalone.json", + "referenceNumber": 421, + "name": "SSLeay License - standalone", + "licenseId": "SSLeay-standalone", + "seeAlso": [ + "https://www.tq-group.com/filedownloads/files/software-license-conditions/OriginalSSLeay/OriginalSSLeay.pdf" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SSPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SSPL-1.0.json", + "referenceNumber": 295, + "name": "Server Side Public License, v 1", + "licenseId": "SSPL-1.0", + "seeAlso": [ + "https://www.mongodb.com/licensing/server-side-public-license" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/StandardML-NJ.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/StandardML-NJ.json", + "referenceNumber": 201, + "name": "Standard ML of New Jersey License", + "licenseId": "StandardML-NJ", + "seeAlso": [ + "https://www.smlnj.org/license.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/SugarCRM-1.1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SugarCRM-1.1.3.json", + "referenceNumber": 11, + "name": "SugarCRM Public License v1.1.3", + "licenseId": "SugarCRM-1.1.3", + "seeAlso": [ + "http://www.sugarcrm.com/crm/SPL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Sun-PPP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Sun-PPP.json", + "referenceNumber": 313, + "name": "Sun PPP License", + "licenseId": "Sun-PPP", + "seeAlso": [ + "https://github.com/ppp-project/ppp/blob/master/pppd/eap.c#L7-L16" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Sun-PPP-2000.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Sun-PPP-2000.json", + "referenceNumber": 489, + "name": "Sun PPP License (2000)", + "licenseId": "Sun-PPP-2000", + "seeAlso": [ + "https://github.com/ppp-project/ppp/blob/master/modules/ppp_ahdlc.c#L7-L19" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SunPro.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SunPro.json", + "referenceNumber": 440, + "name": "SunPro License", + "licenseId": "SunPro", + "seeAlso": [ + "https://github.com/freebsd/freebsd-src/blob/main/lib/msun/src/e_acosh.c", + "https://github.com/freebsd/freebsd-src/blob/main/lib/msun/src/e_lgammal.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SWL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SWL.json", + "referenceNumber": 331, + "name": "Scheme Widget Library (SWL) Software License Agreement", + "licenseId": "SWL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/SWL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/swrule.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/swrule.json", + "referenceNumber": 206, + "name": "swrule License", + "licenseId": "swrule", + "seeAlso": [ + "https://ctan.math.utah.edu/ctan/tex-archive/macros/generic/misc/swrule.sty" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Symlinks.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Symlinks.json", + "referenceNumber": 136, + "name": "Symlinks License", + "licenseId": "Symlinks", + "seeAlso": [ + "https://www.mail-archive.com/debian-bugs-rc@lists.debian.org/msg11494.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TAPR-OHL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TAPR-OHL-1.0.json", + "referenceNumber": 317, + "name": "TAPR Open Hardware License v1.0", + "licenseId": "TAPR-OHL-1.0", + "seeAlso": [ + "https://www.tapr.org/OHL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TCL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TCL.json", + "referenceNumber": 644, + "name": "TCL/TK License", + "licenseId": "TCL", + "seeAlso": [ + "http://www.tcl.tk/software/tcltk/license.html", + "https://fedoraproject.org/wiki/Licensing/TCL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TCP-wrappers.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TCP-wrappers.json", + "referenceNumber": 245, + "name": "TCP Wrappers License", + "licenseId": "TCP-wrappers", + "seeAlso": [ + "http://rc.quest.com/topics/openssh/license.php#tcpwrappers" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TermReadKey.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TermReadKey.json", + "referenceNumber": 37, + "name": "TermReadKey License", + "licenseId": "TermReadKey", + "seeAlso": [ + "https://github.com/jonathanstowe/TermReadKey/blob/master/README#L9-L10" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TGPPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TGPPL-1.0.json", + "referenceNumber": 112, + "name": "Transitive Grace Period Public Licence 1.0", + "licenseId": "TGPPL-1.0", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/TGPPL", + "https://tahoe-lafs.org/trac/tahoe-lafs/browser/trunk/COPYING.TGPPL.rst" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/threeparttable.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/threeparttable.json", + "referenceNumber": 319, + "name": "threeparttable License", + "licenseId": "threeparttable", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Threeparttable" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TMate.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TMate.json", + "referenceNumber": 509, + "name": "TMate Open Source License", + "licenseId": "TMate", + "seeAlso": [ + "http://svnkit.com/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TORQUE-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TORQUE-1.1.json", + "referenceNumber": 105, + "name": "TORQUE v2.5+ Software License v1.1", + "licenseId": "TORQUE-1.1", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/TORQUEv1.1" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TOSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TOSL.json", + "referenceNumber": 107, + "name": "Trusster Open Source License", + "licenseId": "TOSL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/TOSL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TPDL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TPDL.json", + "referenceNumber": 124, + "name": "Time::ParseDate License", + "licenseId": "TPDL", + "seeAlso": [ + "https://metacpan.org/pod/Time::ParseDate#LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TPL-1.0.json", + "referenceNumber": 490, + "name": "THOR Public License 1.0", + "licenseId": "TPL-1.0", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:ThorPublicLicense" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TTWL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TTWL.json", + "referenceNumber": 35, + "name": "Text-Tabs+Wrap License", + "licenseId": "TTWL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/TTWL", + "https://github.com/ap/Text-Tabs/blob/master/lib.modern/Text/Tabs.pm#L148" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TTYP0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TTYP0.json", + "referenceNumber": 542, + "name": "TTYP0 License", + "licenseId": "TTYP0", + "seeAlso": [ + "https://people.mpi-inf.mpg.de/~uwe/misc/uw-ttyp0/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TU-Berlin-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TU-Berlin-1.0.json", + "referenceNumber": 372, + "name": "Technische Universitaet Berlin License 1.0", + "licenseId": "TU-Berlin-1.0", + "seeAlso": [ + "https://github.com/swh/ladspa/blob/7bf6f3799fdba70fda297c2d8fd9f526803d9680/gsm/COPYRIGHT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TU-Berlin-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TU-Berlin-2.0.json", + "referenceNumber": 246, + "name": "Technische Universitaet Berlin License 2.0", + "licenseId": "TU-Berlin-2.0", + "seeAlso": [ + "https://github.com/CorsixTH/deps/blob/fd339a9f526d1d9c9f01ccf39e438a015da50035/licences/libgsm.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Ubuntu-font-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Ubuntu-font-1.0.json", + "referenceNumber": 191, + "name": "Ubuntu Font Licence v1.0", + "licenseId": "Ubuntu-font-1.0", + "seeAlso": [ + "https://ubuntu.com/legal/font-licence", + "https://assets.ubuntu.com/v1/81e5605d-ubuntu-font-licence-1.0.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/UCAR.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/UCAR.json", + "referenceNumber": 452, + "name": "UCAR License", + "licenseId": "UCAR", + "seeAlso": [ + "https://github.com/Unidata/UDUNITS-2/blob/master/COPYRIGHT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/UCL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/UCL-1.0.json", + "referenceNumber": 550, + "name": "Upstream Compatibility License v1.0", + "licenseId": "UCL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/UCL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/ulem.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ulem.json", + "referenceNumber": 399, + "name": "ulem License", + "licenseId": "ulem", + "seeAlso": [ + "https://mirrors.ctan.org/macros/latex/contrib/ulem/README" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/UMich-Merit.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/UMich-Merit.json", + "referenceNumber": 581, + "name": "Michigan/Merit Networks License", + "licenseId": "UMich-Merit", + "seeAlso": [ + "https://github.com/radcli/radcli/blob/master/COPYRIGHT#L64" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Unicode-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Unicode-3.0.json", + "referenceNumber": 262, + "name": "Unicode License v3", + "licenseId": "Unicode-3.0", + "seeAlso": [ + "https://www.unicode.org/license.txt" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Unicode-DFS-2015.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Unicode-DFS-2015.json", + "referenceNumber": 328, + "name": "Unicode License Agreement - Data Files and Software (2015)", + "licenseId": "Unicode-DFS-2015", + "seeAlso": [ + "https://web.archive.org/web/20151224134844/http://unicode.org/copyright.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Unicode-DFS-2016.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Unicode-DFS-2016.json", + "referenceNumber": 484, + "name": "Unicode License Agreement - Data Files and Software (2016)", + "licenseId": "Unicode-DFS-2016", + "seeAlso": [ + "https://www.unicode.org/license.txt", + "http://web.archive.org/web/20160823201924/http://www.unicode.org/copyright.html#License", + "http://www.unicode.org/copyright.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Unicode-TOU.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Unicode-TOU.json", + "referenceNumber": 628, + "name": "Unicode Terms of Use", + "licenseId": "Unicode-TOU", + "seeAlso": [ + "http://web.archive.org/web/20140704074106/http://www.unicode.org/copyright.html", + "http://www.unicode.org/copyright.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/UnixCrypt.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/UnixCrypt.json", + "referenceNumber": 95, + "name": "UnixCrypt License", + "licenseId": "UnixCrypt", + "seeAlso": [ + "https://foss.heptapod.net/python-libs/passlib/-/blob/branch/stable/LICENSE#L70", + "https://opensource.apple.com/source/JBoss/JBoss-737/jboss-all/jetty/src/main/org/mortbay/util/UnixCrypt.java.auto.html", + "https://archive.eclipse.org/jetty/8.0.1.v20110908/xref/org/eclipse/jetty/http/security/UnixCrypt.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Unlicense.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Unlicense.json", + "referenceNumber": 218, + "name": "The Unlicense", + "licenseId": "Unlicense", + "seeAlso": [ + "https://unlicense.org/" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/UPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/UPL-1.0.json", + "referenceNumber": 5, + "name": "Universal Permissive License v1.0", + "licenseId": "UPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/UPL" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/URT-RLE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/URT-RLE.json", + "referenceNumber": 165, + "name": "Utah Raster Toolkit Run Length Encoded License", + "licenseId": "URT-RLE", + "seeAlso": [ + "https://sourceforge.net/p/netpbm/code/HEAD/tree/super_stable/converter/other/pnmtorle.c", + "https://sourceforge.net/p/netpbm/code/HEAD/tree/super_stable/converter/other/rletopnm.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Vim.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Vim.json", + "referenceNumber": 549, + "name": "Vim License", + "licenseId": "Vim", + "seeAlso": [ + "http://vimdoc.sourceforge.net/htmldoc/uganda.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/VOSTROM.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/VOSTROM.json", + "referenceNumber": 544, + "name": "VOSTROM Public License for Open Source", + "licenseId": "VOSTROM", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/VOSTROM" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/VSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/VSL-1.0.json", + "referenceNumber": 109, + "name": "Vovida Software License v1.0", + "licenseId": "VSL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/VSL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/W3C.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/W3C.json", + "referenceNumber": 28, + "name": "W3C Software Notice and License (2002-12-31)", + "licenseId": "W3C", + "seeAlso": [ + "http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231.html", + "https://opensource.org/licenses/W3C" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/W3C-19980720.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/W3C-19980720.json", + "referenceNumber": 629, + "name": "W3C Software Notice and License (1998-07-20)", + "licenseId": "W3C-19980720", + "seeAlso": [ + "http://www.w3.org/Consortium/Legal/copyright-software-19980720.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/W3C-20150513.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/W3C-20150513.json", + "referenceNumber": 315, + "name": "W3C Software Notice and Document License (2015-05-13)", + "licenseId": "W3C-20150513", + "seeAlso": [ + "https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document", + "https://www.w3.org/copyright/software-license-2015/", + "https://www.w3.org/copyright/software-license-2023/" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/w3m.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/w3m.json", + "referenceNumber": 379, + "name": "w3m License", + "licenseId": "w3m", + "seeAlso": [ + "https://github.com/tats/w3m/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Watcom-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Watcom-1.0.json", + "referenceNumber": 612, + "name": "Sybase Open Watcom Public License 1.0", + "licenseId": "Watcom-1.0", + "seeAlso": [ + "https://opensource.org/licenses/Watcom-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/Widget-Workshop.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Widget-Workshop.json", + "referenceNumber": 256, + "name": "Widget Workshop License", + "licenseId": "Widget-Workshop", + "seeAlso": [ + "https://github.com/novnc/noVNC/blob/master/core/crypto/des.js#L24" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Wsuipa.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Wsuipa.json", + "referenceNumber": 199, + "name": "Wsuipa License", + "licenseId": "Wsuipa", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Wsuipa" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/WTFPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/WTFPL.json", + "referenceNumber": 173, + "name": "Do What The F*ck You Want To Public License", + "licenseId": "WTFPL", + "seeAlso": [ + "http://www.wtfpl.net/about/", + "http://sam.zoy.org/wtfpl/COPYING" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/wxWindows.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/wxWindows.json", + "referenceNumber": 350, + "name": "wxWindows Library License", + "licenseId": "wxWindows", + "seeAlso": [ + "https://opensource.org/licenses/WXwindows" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/X11.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/X11.json", + "referenceNumber": 274, + "name": "X11 License", + "licenseId": "X11", + "seeAlso": [ + "http://www.xfree86.org/3.3.6/COPYRIGHT2.html#3" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/X11-distribute-modifications-variant.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/X11-distribute-modifications-variant.json", + "referenceNumber": 286, + "name": "X11 License Distribution Modification Variant", + "licenseId": "X11-distribute-modifications-variant", + "seeAlso": [ + "https://github.com/mirror/ncurses/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/X11-swapped.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/X11-swapped.json", + "referenceNumber": 7, + "name": "X11 swapped final paragraphs", + "licenseId": "X11-swapped", + "seeAlso": [ + "https://github.com/fedeinthemix/chez-srfi/blob/master/srfi/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Xdebug-1.03.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Xdebug-1.03.json", + "referenceNumber": 471, + "name": "Xdebug License v 1.03", + "licenseId": "Xdebug-1.03", + "seeAlso": [ + "https://github.com/xdebug/xdebug/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Xerox.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Xerox.json", + "referenceNumber": 417, + "name": "Xerox License", + "licenseId": "Xerox", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Xerox" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Xfig.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Xfig.json", + "referenceNumber": 63, + "name": "Xfig License", + "licenseId": "Xfig", + "seeAlso": [ + "https://github.com/Distrotech/transfig/blob/master/transfig/transfig.c", + "https://fedoraproject.org/wiki/Licensing:MIT#Xfig_Variant", + "https://sourceforge.net/p/mcj/xfig/ci/master/tree/src/Makefile.am" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/XFree86-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/XFree86-1.1.json", + "referenceNumber": 311, + "name": "XFree86 License 1.1", + "licenseId": "XFree86-1.1", + "seeAlso": [ + "http://www.xfree86.org/current/LICENSE4.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/xinetd.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/xinetd.json", + "referenceNumber": 406, + "name": "xinetd License", + "licenseId": "xinetd", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Xinetd_License" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/xkeyboard-config-Zinoviev.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/xkeyboard-config-Zinoviev.json", + "referenceNumber": 55, + "name": "xkeyboard-config Zinoviev License", + "licenseId": "xkeyboard-config-Zinoviev", + "seeAlso": [ + "https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/blob/master/COPYING?ref_type\u003dheads#L178" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/xlock.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/xlock.json", + "referenceNumber": 140, + "name": "xlock License", + "licenseId": "xlock", + "seeAlso": [ + "https://fossies.org/linux/tiff/contrib/ras/ras2tif.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Xnet.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Xnet.json", + "referenceNumber": 639, + "name": "X.Net License", + "licenseId": "Xnet", + "seeAlso": [ + "https://opensource.org/licenses/Xnet" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/xpp.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/xpp.json", + "referenceNumber": 243, + "name": "XPP License", + "licenseId": "xpp", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/xpp" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/XSkat.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/XSkat.json", + "referenceNumber": 535, + "name": "XSkat License", + "licenseId": "XSkat", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/XSkat_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/xzoom.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/xzoom.json", + "referenceNumber": 339, + "name": "xzoom License", + "licenseId": "xzoom", + "seeAlso": [ + "https://metadata.ftp-master.debian.org/changelogs//main/x/xzoom/xzoom_0.3-27_copyright" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/YPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/YPL-1.0.json", + "referenceNumber": 506, + "name": "Yahoo! Public License v1.0", + "licenseId": "YPL-1.0", + "seeAlso": [ + "http://www.zimbra.com/license/yahoo_public_license_1.0.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/YPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/YPL-1.1.json", + "referenceNumber": 538, + "name": "Yahoo! Public License v1.1", + "licenseId": "YPL-1.1", + "seeAlso": [ + "http://www.zimbra.com/license/yahoo_public_license_1.1.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Zed.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zed.json", + "referenceNumber": 500, + "name": "Zed License", + "licenseId": "Zed", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Zed" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Zeeff.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zeeff.json", + "referenceNumber": 382, + "name": "Zeeff License", + "licenseId": "Zeeff", + "seeAlso": [ + "ftp://ftp.tin.org/pub/news/utils/newsx/newsx-1.6.tar.gz" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Zend-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zend-2.0.json", + "referenceNumber": 51, + "name": "Zend License v2.0", + "licenseId": "Zend-2.0", + "seeAlso": [ + "https://web.archive.org/web/20130517195954/http://www.zend.com/license/2_00.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Zimbra-1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zimbra-1.3.json", + "referenceNumber": 555, + "name": "Zimbra Public License v1.3", + "licenseId": "Zimbra-1.3", + "seeAlso": [ + "http://web.archive.org/web/20100302225219/http://www.zimbra.com/license/zimbra-public-license-1-3.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Zimbra-1.4.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zimbra-1.4.json", + "referenceNumber": 227, + "name": "Zimbra Public License v1.4", + "licenseId": "Zimbra-1.4", + "seeAlso": [ + "http://www.zimbra.com/legal/zimbra-public-license-1-4" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Zlib.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zlib.json", + "referenceNumber": 74, + "name": "zlib License", + "licenseId": "Zlib", + "seeAlso": [ + "http://www.zlib.net/zlib_license.html", + "https://opensource.org/licenses/Zlib" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/zlib-acknowledgement.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/zlib-acknowledgement.json", + "referenceNumber": 371, + "name": "zlib/libpng License with Acknowledgement", + "licenseId": "zlib-acknowledgement", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/ZlibWithAcknowledgement" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ZPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ZPL-1.1.json", + "referenceNumber": 598, + "name": "Zope Public License 1.1", + "licenseId": "ZPL-1.1", + "seeAlso": [ + "http://old.zope.org/Resources/License/ZPL-1.1" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ZPL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ZPL-2.0.json", + "referenceNumber": 539, + "name": "Zope Public License 2.0", + "licenseId": "ZPL-2.0", + "seeAlso": [ + "http://old.zope.org/Resources/License/ZPL-2.0", + "https://opensource.org/licenses/ZPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ZPL-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ZPL-2.1.json", + "referenceNumber": 638, + "name": "Zope Public License 2.1", + "licenseId": "ZPL-2.1", + "seeAlso": [ + "http://old.zope.org/Resources/ZPL/" + ], + "isOsiApproved": true, + "isFsfLibre": true + } + ], + "releaseDate": "2024-08-19" +} \ No newline at end of file From 2145cdb5ae67792c5d2057209c3079340ae63b57 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 3 Oct 2024 14:48:09 +1300 Subject: [PATCH 105/206] Remove patch already in 9.2.8 --- overlays/bootstrap.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 61a0c06712..d558eb7d8d 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -96,8 +96,6 @@ in { # See https://github.com/input-output-hk/haskell.nix/issues/1027 ++ onAarch32 (until "9.2" ./patches/ghc/ghc-8.10-3434-armv7a.patch) ++ onAarch64 (until "9.2" ./patches/ghc/ghc-8.10-3434.patch) - ++ onAarch64 (fromUntil "9.2.1" "9.4" ./patches/ghc/ghc-9.2-3434.patch) - ++ onAndroid (fromUntil "9.2.1" "9.4" ./patches/ghc/ghc-9.2-3434.patch) ++ until "9.4" ./patches/ghc/ghc-acrt-iob-func.patch ++ until "9.2" ./patches/ghc/ghc-mprotect-nonzero-len.patch From 159fb663723cecc0fa2f32fe80530ac4b0a5a7c0 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 3 Oct 2024 14:49:16 +1300 Subject: [PATCH 106/206] Build android compilers with nixpkgs 24.05 --- ci.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ci.nix b/ci.nix index 7f3fff04b2..67ba68d7f6 100644 --- a/ci.nix +++ b/ci.nix @@ -64,6 +64,7 @@ nixpkgs.lib.optionalAttrs (nixpkgsName == "R2405") { ghc96 = false; ghc98 = false; + ghc910 = true; } // nixpkgs.lib.optionalAttrs (nixpkgsName == "unstable") { ghc810 = true; ghc92 = true; @@ -100,7 +101,9 @@ } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable") { # Musl cross only works on linux # aarch64 cross only works on linux - inherit (lib.systems.examples) musl32 musl64 aarch64-multiplatform aarch64-android armv7a-android-prebuilt; + inherit (lib.systems.examples) musl32 musl64 aarch64-multiplatform; + } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "R2405") { + inherit (lib.systems.examples) aarch64-android armv7a-android-prebuilt; } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc8107" "ghc902"]) { # TODO fix this for the compilers we build with hadrian (ghc >=9.4) inherit (lib.systems.examples) aarch64-multiplatform-musl; From a1e0b300ef2c53999e832127fc58acfd6f393e4b Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 3 Oct 2024 16:16:44 +1300 Subject: [PATCH 107/206] Fix gi-gtk test --- test/gi-gtk/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/gi-gtk/default.nix b/test/gi-gtk/default.nix index aebd4c552b..665d3dfb86 100644 --- a/test/gi-gtk/default.nix +++ b/test/gi-gtk/default.nix @@ -8,6 +8,8 @@ let inherit compiler-nix-name evalPackages; src = testSrc "gi-gtk"; cabalProjectLocal = builtins.readFile ../cabal.project.local + '' + -- haskell-gi 0.26.12 breaks gi-gtkpixbuf + index-state: 2024-09-30T00:00:00Z -- The overloading feature of haskell-gi makes build times very long constraints: haskell-gi-overloading ==0.0 if impl(ghc >=9.11) From 057a33ca0b7abfa292d5e0e34d8cb095ae303e14 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 14 Oct 2024 23:05:59 +1300 Subject: [PATCH 108/206] Fix eval --- test/gi-gtk/default.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/gi-gtk/default.nix b/test/gi-gtk/default.nix index 665d3dfb86..e7a03292bb 100644 --- a/test/gi-gtk/default.nix +++ b/test/gi-gtk/default.nix @@ -29,7 +29,9 @@ in recurseIntoAttrs rec { # error: incompatible pointer to integer conversion assigning to 'ffi_arg' (aka 'unsigned long') from 'HsPtr' (aka 'void *') [-Wint-conversion] || builtins.elem compiler-nix-name ["ghc8107" "ghc902" "ghc928" "ghc948"] && stdenv.hostPlatform.isAarch64 # Cross compilation to aarch64 is also broken - || stdenv.hostPlatform.isAarch64 && !stdenv.buildPlatform.isAarch64; + || stdenv.hostPlatform.isAarch64 && !stdenv.buildPlatform.isAarch64 + # glu is marked ase broken for isAndroid + || stdenv.hostPlatform.isAndroid; ifdInputs = { inherit (project) plan-nix; From ee588ac25d3305fed5ebd546e20fb3ddccab4ef2 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 14 Oct 2024 23:31:48 +1300 Subject: [PATCH 109/206] Try aarch64-android-prebuilt --- ci.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci.nix b/ci.nix index 4223b5e3d7..ca8c779167 100644 --- a/ci.nix +++ b/ci.nix @@ -102,8 +102,8 @@ # Musl cross only works on linux # aarch64 cross only works on linux inherit (lib.systems.examples) musl32 musl64 aarch64-multiplatform; - } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "R2405" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948"]) { - inherit (lib.systems.examples) aarch64-android armv7a-android-prebuilt; + } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948"]) { + inherit (lib.systems.examples) aarch64-android-prebuilt armv7a-android-prebuilt; } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc8107" "ghc902"]) { # TODO fix this for the compilers we build with hadrian (ghc >=9.4) inherit (lib.systems.examples) aarch64-multiplatform-musl; From 21ef26b57377a69b8aa88658f69d762f7290342a Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 12 Nov 2024 01:15:24 +1300 Subject: [PATCH 110/206] ifdLevel 1 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 4d7a252e95..c9235935ae 100644 --- a/flake.nix +++ b/flake.nix @@ -83,7 +83,7 @@ let callFlake = import flake-compat; - ifdLevel = 3; + ifdLevel = 1; runningHydraEvalTest = false; defaultCompiler = "ghc928"; config = import ./config.nix; From e7ea82c36ae4c074cbdaeca8a2cf8c72a1dc7d8a Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 12 Nov 2024 16:27:35 +1300 Subject: [PATCH 111/206] Disable ncurses on android for now --- compiler/ghc/default.nix | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 4189fcb2b8..e70903ca46 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -191,7 +191,7 @@ let # `--with` flags for libraries needed for RTS linker configureFlags = [ "--datadir=$doc/share/doc/ghc" - ] ++ lib.optionals (!targetPlatform.isGhcjs) ["--with-curses-includes=${targetPackages.ncurses.dev}/include" "--with-curses-libraries=${targetPackages.ncurses.out}/lib" + ] ++ lib.optionals (!targetPlatform.isGhcjs && !targetPlatform.isAndroid) ["--with-curses-includes=${targetPackages.ncurses.dev}/include" "--with-curses-libraries=${targetPackages.ncurses.out}/lib" ] ++ lib.optionals (targetLibffi != null && !targetPlatform.isGhcjs) ["--with-system-libffi" "--with-ffi-includes=${targetLibffi.dev}/include" "--with-ffi-libraries=${targetLibffi.out}/lib" ] ++ lib.optionals (!enableIntegerSimple && !targetPlatform.isGhcjs) [ "--with-gmp-includes=${targetGmp.dev}/include" "--with-gmp-libraries=${targetGmp.out}/lib" @@ -225,13 +225,11 @@ let ; # Splicer will pull out correct variations - libDeps = platform: lib.optional (enableTerminfo && !targetPlatform.isGhcjs) [ targetPackages.ncurses targetPackages.ncurses.dev ] + libDeps = platform: lib.optional (enableTerminfo && !targetPlatform.isGhcjs && !targetPlatform.isAndroid) [ targetPackages.ncurses targetPackages.ncurses.dev ] ++ lib.optional (!targetPlatform.isGhcjs) targetLibffi ++ lib.optional (!enableIntegerSimple && !targetPlatform.isGhcjs) gmp ++ lib.optional (platform.libc != "glibc" && !targetPlatform.isWindows) libiconv ++ lib.optional (enableNUMA && platform.isLinux && !platform.isAarch32 && !platform.isAndroid) numactl - # Even with terminfo disabled some older ghc cross arm and windows compilers do not build unless `ncurses` is found and they seem to want the buildPlatform version - ++ lib.optional (!enableTerminfo && haskell-nix.haskellLib.isCrossTarget && (stdenv.targetPlatform.isAarch64 || stdenv.targetPlatform.isWindows) && builtins.compareVersions ghc-version "8.10" < 0) ncurses.dev ++ lib.optional enableDWARF (lib.getLib elfutils); toolsForTarget = From 7a139ccfb2dfbdd231475b2e40b1ebf509086a10 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 13 Nov 2024 15:14:38 +1300 Subject: [PATCH 112/206] Fix patch --- overlays/bootstrap.nix | 3 +- overlays/patches/ghc/ghc-9.8.3-iog.patch | 356 +++++++++++++++++++++++ 2 files changed, 358 insertions(+), 1 deletion(-) create mode 100644 overlays/patches/ghc/ghc-9.8.3-iog.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 2db51b1e3d..6cc481e950 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -230,7 +230,8 @@ in { ++ onMusl (onAarch64 (fromUntil "9.8" "9.10" ./patches/ghc/ghc-9.8-hadrian-strip-cmd.patch)) ++ onMusl (onAarch64 (fromUntil "9.10" "9.12" ./patches/ghc/ghc-9.10-hadrian-strip-cmd.patch)) ++ on32bit (fromUntil "9.0" "9.4" ./patches/ghc/ghc-9.6-32bit-cmm.patch) - ++ onAndroid (fromUntil "9.6.3" "9.10" ./patches/ghc/ghc-9.6-iog.patch) + ++ onAndroid (fromUntil "9.6.3" "9.8.3" ./patches/ghc/ghc-9.6-iog.patch) + ++ onAndroid (fromUntil "9.8.3" "9.10" ./patches/ghc/ghc-9.8.3-iog.patch) ++ onAndroid (fromUntil "9.6" "9.9" ./patches/ghc/ghc-9.6-debug-secno.patch) # Allow loading static external plugins into cross compilers diff --git a/overlays/patches/ghc/ghc-9.8.3-iog.patch b/overlays/patches/ghc/ghc-9.8.3-iog.patch new file mode 100644 index 0000000000..8f2df690c4 --- /dev/null +++ b/overlays/patches/ghc/ghc-9.8.3-iog.patch @@ -0,0 +1,356 @@ +diff --git a/rts/Linker.c b/rts/Linker.c +index 1f229f8173..7f954702a3 100644 +--- a/rts/Linker.c ++++ b/rts/Linker.c +@@ -273,7 +273,7 @@ int ghciInsertSymbolTable( + RtsSymbolInfo *pinfo = lookupStrHashTable(table, key); + if (!pinfo) /* new entry */ + { +- pinfo = stgMallocBytes(sizeof (*pinfo), "ghciInsertToSymbolTable"); ++ pinfo = stgCallocBytes(1, sizeof (*pinfo), "ghciInsertToSymbolTable"); + pinfo->value = data; + pinfo->owner = owner; + pinfo->strength = strength; +@@ -1203,7 +1203,7 @@ mkOc( ObjectType type, pathchar *path, char *image, int imageSize, + + + IF_DEBUG(linker, debugBelch("mkOc: %" PATH_FMT "\n", path)); +- oc = stgMallocBytes(sizeof(ObjectCode), "mkOc(oc)"); ++ oc = stgCallocBytes(1, sizeof(ObjectCode), "mkOc(oc)"); + + oc->info = NULL; + oc->type = type; +@@ -1223,7 +1223,7 @@ mkOc( ObjectType type, pathchar *path, char *image, int imageSize, + oc->fileName = pathdup(path); + + if (archiveMemberName) { +- oc->archiveMemberName = stgMallocBytes( (pathlen(archiveMemberName)+1) * pathsize, ++ oc->archiveMemberName = stgCallocBytes(1, (pathlen(archiveMemberName)+1) * pathsize, + "loadObj" ); + pathcopy(oc->archiveMemberName, archiveMemberName); + } else { +@@ -1380,12 +1380,12 @@ preloadObjectFile (pathchar *path) + // reading the file, and then we misalign image on purpose so + // that the actual sections end up aligned again. + misalignment = machoGetMisalignment(f); +- image = stgMallocBytes(fileSize + misalignment, "loadObj(image)"); ++ image = stgCallocBytes(1, fileSize + misalignment, "loadObj(image)"); + image += misalignment; + + # else /* !defined(darwin_HOST_OS) */ + +- image = stgMallocBytes(fileSize, "loadObj(image)"); ++ image = stgCallocBytes(1, fileSize, "loadObj(image)"); + + #endif /* !defined(darwin_HOST_OS) */ + +@@ -1678,6 +1678,8 @@ static HsInt resolveObjs_ (void) + IF_DEBUG(linker, debugBelch("resolveObjs: start\n")); + + for (ObjectCode *oc = objects; oc; oc = oc->next) { ++ if(oc->status == OBJECT_RESOLVED) ++ continue; + int r = ocTryLoad(oc); + if (!r) { + errorBelch("Could not load Object Code %" PATH_FMT ".\n", OC_INFORMATIVE_FILENAME(oc)); +@@ -1806,7 +1808,7 @@ void + addProddableBlock ( ObjectCode* oc, void* start, int size ) + { + ProddableBlock* pb +- = stgMallocBytes(sizeof(ProddableBlock), "addProddableBlock"); ++ = stgCallocBytes(1,sizeof(ProddableBlock), "addProddableBlock"); + + IF_DEBUG(linker, debugBelch("addProddableBlock: %p %p %d\n", oc, start, size)); + ASSERT(size > 0); +diff --git a/rts/LinkerInternals.h b/rts/LinkerInternals.h +index e6098aa2b0..4b8992e817 100644 +--- a/rts/LinkerInternals.h ++++ b/rts/LinkerInternals.h +@@ -299,6 +299,10 @@ struct _ObjectCode { + int n_segments; + Segment *segments; + ++ // COMMON section ++ void * common_mem; ++ unsigned long common_size; ++ + // + // Garbage collection fields + // +diff --git a/rts/RtsUtils.c b/rts/RtsUtils.c +index 4cac10ba15..fe0d8ca40e 100644 +--- a/rts/RtsUtils.c ++++ b/rts/RtsUtils.c +@@ -104,6 +104,11 @@ stgCallocBytes (size_t count, size_t size, char *msg) + rtsConfig.mallocFailHook((W_) count*size, msg); + stg_exit(EXIT_INTERNAL_ERROR); + } ++ // If we run under qemu with jemalloc, calloc is not guaranteed ++ // to zero memory. ++ // - https://giters.com/jemalloc/jemalloc/issues/1844 ++ // - https://lists.nongnu.org/archive/html/qemu-devel/2020-05/msg03119.html ++ memset(space, 0, count*size); + return space; + } + +diff --git a/rts/linker/Elf.c b/rts/linker/Elf.c +index d181450190..1ad05fc286 100644 +--- a/rts/linker/Elf.c ++++ b/rts/linker/Elf.c +@@ -307,6 +307,15 @@ ocInit_ELF(ObjectCode * oc) + } + } + } ++ if(NULL != oc->common_mem) { ++#if RTS_LINKER_USE_MMAP ++ munmap(oc->common_mem, oc->common_size); ++#else ++ stgFree(oc->common_mem); ++#endif ++ } ++ oc->common_mem = NULL; ++ oc->common_size = 0; + } + + void +@@ -963,14 +972,17 @@ ocGetNames_ELF ( ObjectCode* oc ) + for (size_t j = 0; j < symTab->n_symbols; j++) { + ElfSymbol *symbol = &symTab->symbols[j]; + if (SHN_COMMON == symTab->symbols[j].elf_sym->st_shndx) { +- common_size += symbol->elf_sym->st_size; ++ // st_value holds the alignment. Adding alignment always ++ // should give us some wiggle room to get alignment right. ++ common_size += symbol->elf_sym->st_size + symbol->elf_sym->st_value; + } + } + } +- void * common_mem = NULL; ++ oc->common_mem = NULL; ++ oc->common_size = common_size; + if(common_size > 0) { +- common_mem = mmapAnonForLinker(common_size); +- if (common_mem == NULL) { ++ oc->common_mem = mmapAnonForLinker(common_size); ++ if (oc->common_mem == NULL) { + barf("ocGetNames_ELF: Failed to allocate memory for SHN_COMMONs"); + } + } +@@ -1011,9 +1023,10 @@ ocGetNames_ELF ( ObjectCode* oc ) + if (shndx == SHN_COMMON) { + isLocal = false; + CHECK(common_used < common_size); +- CHECK(common_mem); +- symbol->addr = (void*)((uintptr_t)common_mem + common_used); +- common_used += symbol->elf_sym->st_size; ++ CHECK(oc->common_mem); ++ int alignment = symbol->elf_sym->st_value-1; ++ symbol->addr = (void*)(((uintptr_t)oc->common_mem + common_used + alignment) & ~alignment); ++ common_used = (uintptr_t)symbol->addr - (uintptr_t)oc->common_mem + symbol->elf_sym->st_size; + CHECK(common_used <= common_size); + + IF_DEBUG(linker_verbose, +@@ -1027,7 +1040,9 @@ ocGetNames_ELF ( ObjectCode* oc ) + || ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK + ) + /* and not an undefined symbol */ +- && shndx != SHN_UNDEF ++ && (shndx != SHN_UNDEF ++ /* unless it's weak */ ++ || (shndx == SHN_UNDEF && ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK)) + /* and not in a "special section" */ + && (shndx < SHN_LORESERVE + #if defined(SHN_XINDEX) +@@ -1054,6 +1069,14 @@ ocGetNames_ELF ( ObjectCode* oc ) + (intptr_t) oc->sections[secno].start + + (intptr_t) symbol->elf_sym->st_value); + CHECK(symbol->addr != 0x0); ++ if(shndx == SHN_UNDEF && ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK) { ++ symbol->addr = NULL; ++ } else { ++ symbol->addr = (SymbolAddr*)( ++ (intptr_t) oc->sections[secno].start + ++ (intptr_t) symbol->elf_sym->st_value); ++ CHECK(symbol->addr != 0x0); ++ } + if (ELF_ST_BIND(symbol->elf_sym->st_info) == STB_LOCAL) { + isLocal = true; + isWeak = false; +@@ -1065,42 +1088,20 @@ ocGetNames_ELF ( ObjectCode* oc ) + isWeak = ELF_ST_BIND(symbol->elf_sym->st_info) + == STB_WEAK; + } +- } +- +- SymType sym_type; +- if (ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_FUNC) { +- sym_type = SYM_TYPE_CODE; ++ } else if (ELF_ST_BIND(symbol->elf_sym->st_info) == STB_WEAK ++ && shndx == SHN_UNDEF ++ && (ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_FUNC ++ || ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_OBJECT ++ || ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_NOTYPE)) { ++ symbol->addr = NULL; ++ isLocal = false; ++ isWeak = true; + } else { +- sym_type = SYM_TYPE_DATA; +- } +- +- /* And the decision is ... */ +- +- if (symbol->addr != NULL) { +- CHECK(nm != NULL); +- /* Acquire! */ +- if (!isLocal) { +- +- if (isWeak == HS_BOOL_TRUE) { +- setWeakSymbol(oc, nm); +- } +- if (!ghciInsertSymbolTable(oc->fileName, symhash, +- nm, symbol->addr, isWeak, sym_type, oc) +- ) { +- goto fail; +- } +- oc->symbols[curSymbol].name = nm; +- oc->symbols[curSymbol].addr = symbol->addr; +- oc->symbols[curSymbol].type = sym_type; +- curSymbol++; +- } +- } else { +- /* Skip. */ ++ /* Skip. */ + IF_DEBUG(linker_verbose, + debugBelch("skipping `%s'\n", + nm) + ); +- + /* + debugBelch( + "skipping bind = %d, type = %d, secno = %d `%s'\n", +@@ -1110,7 +1111,34 @@ ocGetNames_ELF ( ObjectCode* oc ) + nm + ); + */ ++ continue; + } ++ ++ SymType sym_type; ++ if (ELF_ST_TYPE(symbol->elf_sym->st_info) == STT_FUNC) { ++ sym_type = SYM_TYPE_CODE; ++ } else { ++ sym_type = SYM_TYPE_DATA; ++ } ++ ++ /* And the decision is ... */ ++ CHECK(nm != NULL); ++ /* Acquire! */ ++ if (!isLocal) { ++ ++ if (isWeak == HS_BOOL_TRUE) { ++ setWeakSymbol(oc, nm); ++ } ++ if (!ghciInsertSymbolTable(oc->fileName, symhash, ++ nm, symbol->addr, isWeak, sym_type, oc) ++ ) { ++ goto fail; ++ } ++ oc->symbols[curSymbol].name = nm; ++ oc->symbols[curSymbol].addr = symbol->addr; ++ oc->symbols[curSymbol].type = sym_type; ++ curSymbol++; ++ } + } + } + } +diff --git a/rts/linker/elf_plt.c b/rts/linker/elf_plt.c +index 5c6ef8ed44..314d49cbc6 100644 +--- a/rts/linker/elf_plt.c ++++ b/rts/linker/elf_plt.c +@@ -1,4 +1,5 @@ + #include "Rts.h" ++#include "RtsUtils.h" + #include "elf_plt.h" + + #include +@@ -51,7 +52,7 @@ makeStub(Section * section, + void* * addr, + uint8_t flags) { + +- Stub * s = calloc(1, sizeof(Stub)); ++ Stub * s = stgCallocBytes(1, sizeof(Stub), "makeStub"); + ASSERT(s != NULL); + s->target = *addr; + s->flags = flags; +diff --git a/rts/linker/elf_plt_aarch64.c b/rts/linker/elf_plt_aarch64.c +index 11354a63db..6b27a2c73d 100644 +--- a/rts/linker/elf_plt_aarch64.c ++++ b/rts/linker/elf_plt_aarch64.c +@@ -25,6 +25,7 @@ const size_t stubSizeAarch64 = 5 * 4; + */ + bool needStubForRelAarch64(Elf_Rel * rel) { + switch(ELF64_R_TYPE(rel->r_info)) { ++ case COMPAT_R_AARCH64_CONDBR19: + case COMPAT_R_AARCH64_CALL26: + case COMPAT_R_AARCH64_JUMP26: + return true; +@@ -34,6 +35,7 @@ bool needStubForRelAarch64(Elf_Rel * rel) { + } + bool needStubForRelaAarch64(Elf_Rela * rela) { + switch(ELF64_R_TYPE(rela->r_info)) { ++ case COMPAT_R_AARCH64_CONDBR19: + case COMPAT_R_AARCH64_CALL26: + case COMPAT_R_AARCH64_JUMP26: + return true; +diff --git a/rts/linker/elf_reloc_aarch64.c b/rts/linker/elf_reloc_aarch64.c +index 51d7178094..dc0724c4f1 100644 +--- a/rts/linker/elf_reloc_aarch64.c ++++ b/rts/linker/elf_reloc_aarch64.c +@@ -105,8 +105,24 @@ encodeAddendAarch64(Section * section, Elf_Rel * rel, int64_t addend) { + break; + } + /* - control flow relocations */ ++ case COMPAT_R_AARCH64_CONDBR19: { /* relocate b.* ... */ ++ // 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ++ // 0 1 0 1 0 1 0 0 [ imm19 ... ++ // ++ // 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ++ // ... imm19 ] 0 [ cond ] ++ CHECK(isInt64(19+2, addend)); /* X in range */ ++ *(inst_t *)P = (*(inst_t *)P & 0xff00001f) ++ | ((uint32_t)(addend << (5-2)) & 0x00ffffe0); ++ break; ++ } + case COMPAT_R_AARCH64_JUMP26: /* relocate b ... */ + case COMPAT_R_AARCH64_CALL26: { /* relocate bl ... */ ++ // 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ++ // 0|1 0 0 1 0 1 [ imm26 ... ++ ++ // 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 ++ // ... imm26 ] + CHECK(isInt64(26+2, addend)); /* X in range */ + *(inst_t *)P = (*(inst_t *)P & 0xfc000000) /* keep upper 6 (32-6) + * bits */ +@@ -222,6 +238,23 @@ computeAddend(Section * section, Elf_Rel * rel, + case COMPAT_R_AARCH64_ADD_ABS_LO12_NC: + /* type: static, class: aarch64, op: S + A */ + return (S + A) & 0xfff; ++ case COMPAT_R_AARCH64_CONDBR19: { ++ int64_t V = S + A - P; ++ if(!isInt64(19+2, V)) { ++ /* need a stub */ ++ /* check if we already have that stub */ ++ if(findStub(section, (void**)&S, 0)) { ++ /* did not find it. Crete a new stub. */ ++ if(makeStub(section, (void**)&S, 0)) { ++ abort(/* could not find or make stub */); ++ } ++ } ++ ++ V = S + A -P; ++ assert(isInt64(19+2, V)); ++ } ++ return V; ++ } + case COMPAT_R_AARCH64_JUMP26: + case COMPAT_R_AARCH64_CALL26: { + // S+A-P From 4eae1c13d941232a500acee9abf298ee2596b1d5 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 22 Nov 2024 18:10:20 +1300 Subject: [PATCH 113/206] Use aarch64-android (not prebuilt) --- ci.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci.nix b/ci.nix index fc2eb1eabe..f36604f59e 100644 --- a/ci.nix +++ b/ci.nix @@ -104,7 +104,7 @@ # aarch64 cross only works on linux inherit (lib.systems.examples) musl32 musl64 aarch64-multiplatform; } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948"]) { - inherit (lib.systems.examples) aarch64-android-prebuilt armv7a-android-prebuilt; + inherit (lib.systems.examples) aarch64-android armv7a-android-prebuilt; } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc8107" "ghc902"]) { # TODO fix this for the compilers we build with hadrian (ghc >=9.4) inherit (lib.systems.examples) aarch64-multiplatform-musl; From a6ad46d7614cdfbd8629c97f0a0c8f8b5f19964c Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sat, 23 Nov 2024 11:04:53 +1300 Subject: [PATCH 114/206] Fixes for armv7a --- compiler/ghc/default.nix | 2 +- overlays/bootstrap.nix | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index e70903ca46..bb46d590f3 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -236,7 +236,7 @@ let if targetPlatform.isGhcjs then [ buildPackages.emscripten ] else if hostPlatform == buildPlatform - then [ targetPackages.stdenv.cc ] ++ lib.optionals useLLVM [llvmPackages.llvm llvmPackages.clang] + then [ targetPackages.stdenv.cc ] ++ lib.optional useLLVM llvmPackages.llvm else assert targetPlatform == hostPlatform; # build != host == target [ stdenv.cc ] ++ lib.optional useLLVM buildLlvmPackages.llvm; diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 6cc481e950..e85facf2f9 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -204,6 +204,7 @@ in { ++ onWindows (fromUntil "9.8" "9.8.2" ./patches/ghc/ghc-9.6-fix-code-symbol-jumps.patch) # this one is to allow linking extra symbols from iserv. # ++ fromUntil "9.6.1" "9.10" ./patches/ghc/iserv-syms.patch + ++ on32bit (fromUntil "9.6" "9.14" ./patches/ghc/ghc-9.6-genapply-cross-arch.patch) # Fix the bad fixups: https://gitlab.haskell.org/ghc/ghc/-/commit/2adc050857a9c1b992040fbfd55fbe65b2851b19 ++ onAarch64 (fromUntil "9.6" "9.6.4" ./patches/ghc/2adc050857a9c1b992040fbfd55fbe65b2851b19.patch) @@ -229,7 +230,7 @@ in { ++ onMusl (onAarch64 (fromUntil "9.4" "9.8" ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch)) ++ onMusl (onAarch64 (fromUntil "9.8" "9.10" ./patches/ghc/ghc-9.8-hadrian-strip-cmd.patch)) ++ onMusl (onAarch64 (fromUntil "9.10" "9.12" ./patches/ghc/ghc-9.10-hadrian-strip-cmd.patch)) - ++ on32bit (fromUntil "9.0" "9.4" ./patches/ghc/ghc-9.6-32bit-cmm.patch) + ++ on32bit (fromUntil "9.0" "9.14" ./patches/ghc/ghc-9.6-32bit-cmm.patch) ++ onAndroid (fromUntil "9.6.3" "9.8.3" ./patches/ghc/ghc-9.6-iog.patch) ++ onAndroid (fromUntil "9.8.3" "9.10" ./patches/ghc/ghc-9.8.3-iog.patch) ++ onAndroid (fromUntil "9.6" "9.9" ./patches/ghc/ghc-9.6-debug-secno.patch) @@ -889,8 +890,8 @@ in { }; inherit sphinx; - buildLlvmPackages = final.buildPackages.llvmPackages_15; - llvmPackages = final.llvmPackages_15; + buildLlvmPackages = final.buildPackages.xllvmPackages_18; + llvmPackages = final.xllvmPackages_18; src-spec.file = final.haskell-nix.sources.ghc9101; src-spec.version = "9.10.1"; From 467f0ecb927e5a4a446533155acd3c102861c998 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sat, 23 Nov 2024 11:50:32 +1300 Subject: [PATCH 115/206] Fixes for armv7a --- overlays/bootstrap.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index e85facf2f9..a64437aea7 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -890,8 +890,8 @@ in { }; inherit sphinx; - buildLlvmPackages = final.buildPackages.xllvmPackages_18; - llvmPackages = final.xllvmPackages_18; + buildLlvmPackages = final.buildPackages.llvmPackages_15; + llvmPackages = final.llvmPackages_15; src-spec.file = final.haskell-nix.sources.ghc9101; src-spec.version = "9.10.1"; From 646e64bd38c284a8e50eaa5da3ad9fefcf07128f Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 25 Nov 2024 23:54:19 +1300 Subject: [PATCH 116/206] Fix ghc-9.6-32bit-cmm.patch bounds --- overlays/bootstrap.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index a64437aea7..4524c1107c 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -230,7 +230,8 @@ in { ++ onMusl (onAarch64 (fromUntil "9.4" "9.8" ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch)) ++ onMusl (onAarch64 (fromUntil "9.8" "9.10" ./patches/ghc/ghc-9.8-hadrian-strip-cmd.patch)) ++ onMusl (onAarch64 (fromUntil "9.10" "9.12" ./patches/ghc/ghc-9.10-hadrian-strip-cmd.patch)) - ++ on32bit (fromUntil "9.0" "9.14" ./patches/ghc/ghc-9.6-32bit-cmm.patch) + ++ on32bit (fromUntil "9.0" "9.4.8" ./patches/ghc/ghc-9.6-32bit-cmm.patch) + ++ on32bit (fromUntil "9.6" "9.6.4" ./patches/ghc/ghc-9.6-32bit-cmm.patch) ++ onAndroid (fromUntil "9.6.3" "9.8.3" ./patches/ghc/ghc-9.6-iog.patch) ++ onAndroid (fromUntil "9.8.3" "9.10" ./patches/ghc/ghc-9.8.3-iog.patch) ++ onAndroid (fromUntil "9.6" "9.9" ./patches/ghc/ghc-9.6-debug-secno.patch) From 5928eca49ced90e8e9ad82ce5f4371630e41b454 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 26 Nov 2024 02:17:00 +1300 Subject: [PATCH 117/206] Fix genapply patch bound --- overlays/bootstrap.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 4524c1107c..3aedf6e9b3 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -204,7 +204,7 @@ in { ++ onWindows (fromUntil "9.8" "9.8.2" ./patches/ghc/ghc-9.6-fix-code-symbol-jumps.patch) # this one is to allow linking extra symbols from iserv. # ++ fromUntil "9.6.1" "9.10" ./patches/ghc/iserv-syms.patch - ++ on32bit (fromUntil "9.6" "9.14" ./patches/ghc/ghc-9.6-genapply-cross-arch.patch) + ++ on32bit (fromUntil "9.6" "9.6.5" ./patches/ghc/ghc-9.6-genapply-cross-arch.patch) # Fix the bad fixups: https://gitlab.haskell.org/ghc/ghc/-/commit/2adc050857a9c1b992040fbfd55fbe65b2851b19 ++ onAarch64 (fromUntil "9.6" "9.6.4" ./patches/ghc/2adc050857a9c1b992040fbfd55fbe65b2851b19.patch) From 770b95f452ca010cb449f8ec35b621a7adf55513 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 26 Nov 2024 12:25:02 +1300 Subject: [PATCH 118/206] Try Android SDK version 26 --- overlays/android.nix | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/overlays/android.nix b/overlays/android.nix index 488ebada37..0e264f881e 100644 --- a/overlays/android.nix +++ b/overlays/android.nix @@ -1,4 +1,18 @@ -_final: prev: prev.lib.optionalAttrs prev.stdenv.hostPlatform.isAndroid ({ +_final: prev: { + pkgsCross = prev.pkgsCross // { + aarch64-android = import prev.path { + inherit system; + inherit (prev) overlays; + crossSystem = prev.lib.systems.examples.aarch64-android // { sdkVer = "26"; }; + }; + armv7a-android-prebuilt = import prev.path { + inherit system; + inherit (prev) overlays; + crossSystem = prev.lib.systems.examples.armv7a-android-prebuilt // { sdkVer = "26"; }; + }; + }; +} // prev.lib.optionalAttrs prev.stdenv.hostPlatform.isAndroid ({ + # we really only want the static one. libiconv = (prev.libiconv.override { enableStatic = true; enableShared = false; }).overrideAttrs(_: { hardeningDisable = [ "fortify" "stackprotector" "format" ]; From bc9ba011d50392aea92cca6bbf19aa971a0e970c Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 26 Nov 2024 13:30:33 +1300 Subject: [PATCH 119/206] Try Android SDK version 26 --- overlays/android.nix | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/overlays/android.nix b/overlays/android.nix index 0e264f881e..59638b779f 100644 --- a/overlays/android.nix +++ b/overlays/android.nix @@ -1,14 +1,21 @@ _final: prev: { + # Use android SDK version 26 pkgsCross = prev.pkgsCross // { aarch64-android = import prev.path { inherit system; inherit (prev) overlays; - crossSystem = prev.lib.systems.examples.aarch64-android // { sdkVer = "26"; }; + crossSystem = prev.lib.systems.examples.aarch64-android // { + sdkVer = "26"; # Old name for old nixpkgs + androidSdkVersion = "26"; + }; }; armv7a-android-prebuilt = import prev.path { inherit system; inherit (prev) overlays; - crossSystem = prev.lib.systems.examples.armv7a-android-prebuilt // { sdkVer = "26"; }; + crossSystem = prev.lib.systems.examples.armv7a-android-prebuilt // { + sdkVer = "26"; # Old name for old nixpkgs + androidSdkVersion = "26"; + }; }; }; } // prev.lib.optionalAttrs prev.stdenv.hostPlatform.isAndroid ({ From 9af775a08090d2434ebe52f32fcfe392cd1312e2 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 26 Nov 2024 13:47:58 +1300 Subject: [PATCH 120/206] Try Android SDK version 26 --- overlays/android.nix | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/overlays/android.nix b/overlays/android.nix index 59638b779f..57912cdf4b 100644 --- a/overlays/android.nix +++ b/overlays/android.nix @@ -2,16 +2,14 @@ _final: prev: { # Use android SDK version 26 pkgsCross = prev.pkgsCross // { aarch64-android = import prev.path { - inherit system; - inherit (prev) overlays; + inherit (prev) system overlays; crossSystem = prev.lib.systems.examples.aarch64-android // { sdkVer = "26"; # Old name for old nixpkgs androidSdkVersion = "26"; }; }; armv7a-android-prebuilt = import prev.path { - inherit system; - inherit (prev) overlays; + inherit (prev) system overlays; crossSystem = prev.lib.systems.examples.armv7a-android-prebuilt // { sdkVer = "26"; # Old name for old nixpkgs androidSdkVersion = "26"; From 989066b742b4423b0a2483f6b1c5b9a59619e50d Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 26 Nov 2024 16:37:07 +1300 Subject: [PATCH 121/206] Use small address space --- overlays/android.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/overlays/android.nix b/overlays/android.nix index 57912cdf4b..e1bdb97ab5 100644 --- a/overlays/android.nix +++ b/overlays/android.nix @@ -4,14 +4,12 @@ _final: prev: { aarch64-android = import prev.path { inherit (prev) system overlays; crossSystem = prev.lib.systems.examples.aarch64-android // { - sdkVer = "26"; # Old name for old nixpkgs androidSdkVersion = "26"; }; }; armv7a-android-prebuilt = import prev.path { inherit (prev) system overlays; crossSystem = prev.lib.systems.examples.armv7a-android-prebuilt // { - sdkVer = "26"; # Old name for old nixpkgs androidSdkVersion = "26"; }; }; From 821f72ab34cb7927fea163d5c6860fd517c656ba Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 26 Nov 2024 16:38:21 +1300 Subject: [PATCH 122/206] Use small address space --- compiler/ghc/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index bb46d590f3..17ca403430 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -62,7 +62,7 @@ let self = , # Whether to disable the large address space allocator # necessary fix for iOS: https://www.reddit.com/r/haskell/comments/4ttdz1/building_an_osxi386_to_iosarm64_cross_compiler/d5qvd67/ - disableLargeAddressSpace ? stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64 + disableLargeAddressSpace ? stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64 || stdenv.targetPlatform.isAndroid , useLdGold ? # might be better check to see if cc is clang/llvm? From fac5029228f159e5beaebda7294de31919852467 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 27 Nov 2024 01:35:13 +1300 Subject: [PATCH 123/206] androidNdkVersion = "24" --- overlays/android.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/overlays/android.nix b/overlays/android.nix index e1bdb97ab5..50a3751aeb 100644 --- a/overlays/android.nix +++ b/overlays/android.nix @@ -5,12 +5,14 @@ _final: prev: { inherit (prev) system overlays; crossSystem = prev.lib.systems.examples.aarch64-android // { androidSdkVersion = "26"; + androidNdkVersion = "24"; }; }; armv7a-android-prebuilt = import prev.path { inherit (prev) system overlays; crossSystem = prev.lib.systems.examples.armv7a-android-prebuilt // { androidSdkVersion = "26"; + androidNdkVersion = "24"; }; }; }; From 1d689dffdbdcd3333b7636324a8f2dcdd6961cbf Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 27 Nov 2024 17:54:33 +1300 Subject: [PATCH 124/206] Fix android sdk/ndk pins so they work for ci.nix --- overlays/android.nix | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/overlays/android.nix b/overlays/android.nix index 50a3751aeb..7a7c869542 100644 --- a/overlays/android.nix +++ b/overlays/android.nix @@ -1,18 +1,16 @@ -_final: prev: { +final: prev: { # Use android SDK version 26 - pkgsCross = prev.pkgsCross // { - aarch64-android = import prev.path { - inherit (prev) system overlays; - crossSystem = prev.lib.systems.examples.aarch64-android // { - androidSdkVersion = "26"; - androidNdkVersion = "24"; - }; - }; - armv7a-android-prebuilt = import prev.path { - inherit (prev) system overlays; - crossSystem = prev.lib.systems.examples.armv7a-android-prebuilt // { - androidSdkVersion = "26"; - androidNdkVersion = "24"; + lib = prev.lib // { + systems = prev.lib.systems // { + examples = prev.lib.systems.examples // { + aarch64-android = prev.lib.systems.examples.aarch64-android // { + androidSdkVersion = "26"; + androidNdkVersion = "24"; + }; + armv7a-android-prebuilt = prev.lib.systems.examples.armv7a-android-prebuilt // { + androidSdkVersion = "26"; + androidNdkVersion = "24"; + }; }; }; }; From f1309bbdda59ee6502f751c02bf957907b03a78c Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 28 Nov 2024 15:29:04 +1300 Subject: [PATCH 125/206] Add missing casts --- overlays/patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/overlays/patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch b/overlays/patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch index cd02ae8291..d767074b9c 100644 --- a/overlays/patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch +++ b/overlays/patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch @@ -8,7 +8,7 @@ index 4d0c978..96a9d60 100644 symbol->name); - return EXIT_FAILURE; + // return EXIT_FAILURE; -+ symbol->addr = 0xDEADBEEF; ++ symbol->addr = (void*)0xDEADBEEF; } } } else { @@ -20,7 +20,7 @@ index 2356818..727e845 100644 "See top entry above.\n", lbl); IF_DEBUG(linker, printLoadedObjects()); fflush(stderr); -+ r = 0xDEADBEEF; ++ r = (void*)0xDEADBEEF; } if (!runPendingInitializers()) { From 821ad3b312ae687713e9cddca4816618550665a0 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sat, 30 Nov 2024 01:17:20 +1300 Subject: [PATCH 126/206] Add preBuild to set CFLAGS --- compiler/ghc/default.nix | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 17ca403430..9c54386adc 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -781,7 +781,7 @@ stdenv.mkDerivation (rec { dontStrip = true; dontPatchELF = true; noAuditTmpdir = true; -} // lib.optionalAttrs (stdenv.buildPlatform.isDarwin || stdenv.targetPlatform.isWindows) { +} // { # ghc install on macOS wants to run `xattr -r -c` # The macOS version fails because it wants python 2. # The nix version of xattr does not support those args. @@ -805,6 +805,11 @@ stdenv.mkDerivation (rec { if [[ -f rts/win32/ThrIOManager.c ]]; then substituteInPlace rts/win32/ThrIOManager.c --replace rts\\OSThreads.h rts/OSThreads.h fi + '' + + lib.optionalString (targetPlatform.isAndroid && targetPlatform.isAarch32) '' + export NIX_CFLAGS_COMPILE_${ + lib.replaceStrings ["-" "."] ["_" "_"] stdenv.targetPlatform.config + }+=" -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16" ''; # Same hack as 'preBuild' preInstall = lib.optionalString stdenv.buildPlatform.isDarwin '' @@ -827,6 +832,7 @@ stdenv.mkDerivation (rec { 'cross-compiling = NO' ''; buildPhase = '' + runHook preBuild ${hadrian}/bin/hadrian ${hadrianArgs} '' + lib.optionalString (installStage1 && !stdenv.targetPlatform.isGhcjs && builtins.compareVersions ghc-version "9.8" < 0) '' ${hadrian}/bin/hadrian ${hadrianArgs} stage1:lib:libiserv @@ -841,6 +847,8 @@ stdenv.mkDerivation (rec { mv $exe ${targetPrefix}$exe done popd + '' + '' + runHook postBuild ''; # Hadrian's installation only works for native compilers, and is broken for cross compilers. From 689d5bcf99c8e96ea86c182262c30ffd3e3cd9f0 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sat, 30 Nov 2024 11:11:50 +1300 Subject: [PATCH 127/206] Better fix? --- compiler/ghc/default.nix | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 9c54386adc..29b05841e9 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -347,6 +347,10 @@ let # disableLargeAddress space conditional on iOS = true. + lib.optionalString (stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64) " '*.*.ghc.c.opts += -optc-mcpu=apple-a7 -optc-march=armv8-a+norcpc'" + + lib.optionalString (targetPlatform.isAndroid && targetPlatform.isAarch32) + " '*.*.ghc.c.opts += -optc-march=armv7-a -optc-mfloat-abi=softfp -optc-mfpu=vfpv3-d16'" + + lib.optionalString (targetPlatform.isAndroid && targetPlatform.isAarch64) + " '*.*.ghc.c.opts += -optc-march=armv8-a'" # For GHC versions in the 9.x range that don't support the +native_bignum flavour transformer yet + lib.optionalString ((enableNativeBignum && !hadrianHasNativeBignumFlavour)) " --bignum=native" @@ -805,11 +809,6 @@ stdenv.mkDerivation (rec { if [[ -f rts/win32/ThrIOManager.c ]]; then substituteInPlace rts/win32/ThrIOManager.c --replace rts\\OSThreads.h rts/OSThreads.h fi - '' - + lib.optionalString (targetPlatform.isAndroid && targetPlatform.isAarch32) '' - export NIX_CFLAGS_COMPILE_${ - lib.replaceStrings ["-" "."] ["_" "_"] stdenv.targetPlatform.config - }+=" -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16" ''; # Same hack as 'preBuild' preInstall = lib.optionalString stdenv.buildPlatform.isDarwin '' From d6ad31de331c59267de34940fc95ac4bf7eb7841 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sat, 30 Nov 2024 11:26:38 +1300 Subject: [PATCH 128/206] Better fix? --- compiler/ghc/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 29b05841e9..e24dafd7cb 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -348,9 +348,9 @@ let + lib.optionalString (stdenv.targetPlatform.isDarwin && stdenv.targetPlatform.isAarch64) " '*.*.ghc.c.opts += -optc-mcpu=apple-a7 -optc-march=armv8-a+norcpc'" + lib.optionalString (targetPlatform.isAndroid && targetPlatform.isAarch32) - " '*.*.ghc.c.opts += -optc-march=armv7-a -optc-mfloat-abi=softfp -optc-mfpu=vfpv3-d16'" + " 'stage1.*.ghc.c.opts += -optc-march=armv7-a -optc-mfloat-abi=softfp -optc-mfpu=vfpv3-d16'" + lib.optionalString (targetPlatform.isAndroid && targetPlatform.isAarch64) - " '*.*.ghc.c.opts += -optc-march=armv8-a'" + " 'stage1.*.ghc.c.opts += -optc-march=armv8-a'" # For GHC versions in the 9.x range that don't support the +native_bignum flavour transformer yet + lib.optionalString ((enableNativeBignum && !hadrianHasNativeBignumFlavour)) " --bignum=native" From f666fdf628e92a1e98a279152121f5c59e8ae6a0 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 3 Dec 2024 11:03:30 +1300 Subject: [PATCH 129/206] Support Cabal calling configure with "--host=arm-android" --- overlays/bootstrap.nix | 1 + .../patches/ghc/ghc-9.8-android-convert-os.patch | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 overlays/patches/ghc/ghc-9.8-android-convert-os.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 3aedf6e9b3..3b8bf98703 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -235,6 +235,7 @@ in { ++ onAndroid (fromUntil "9.6.3" "9.8.3" ./patches/ghc/ghc-9.6-iog.patch) ++ onAndroid (fromUntil "9.8.3" "9.10" ./patches/ghc/ghc-9.8.3-iog.patch) ++ onAndroid (fromUntil "9.6" "9.9" ./patches/ghc/ghc-9.6-debug-secno.patch) + ++ onAndroid (from "9.8.1" ./patches/ghc/ghc-9.8-android-convert-os.patch) # Allow loading static external plugins into cross compilers ++ onCross (fromUntil "9.6.1" "9.11" ./patches/ghc/5c80a27488acfe3610ddfcb99a1e961002e386d0.patch) diff --git a/overlays/patches/ghc/ghc-9.8-android-convert-os.patch b/overlays/patches/ghc/ghc-9.8-android-convert-os.patch new file mode 100644 index 0000000000..bdbf1db0ac --- /dev/null +++ b/overlays/patches/ghc/ghc-9.8-android-convert-os.patch @@ -0,0 +1,13 @@ +diff --git a/m4/ghc_convert_os.m4 b/m4/ghc_convert_os.m4 +index 586b33d09b..275bd997eb 100644 +--- a/m4/ghc_convert_os.m4 ++++ b/m4/ghc_convert_os.m4 +@@ -10,7 +10,7 @@ AC_DEFUN([GHC_CONVERT_OS],[ + ios|watchos|tvos) + $3="ios" + ;; +- linux-android*) ++ linux-android*|android) + $3="linux-android" + ;; + linux-*|linux) From a158ea60f0a4e9c22e79d45680e68872c6699ee0 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 3 Dec 2024 12:36:13 +1300 Subject: [PATCH 130/206] Fix ghc 9.8 --- overlays/bootstrap.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 3b8bf98703..e12d33c123 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -226,7 +226,7 @@ in { ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-android-bionic-symbols.patch)) ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-bionic-libc.patch)) ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-cross-dont-build-stage2-tools.patch)) - ++ onAndroid (fromUntil "9.0" "9.8"./patches/ghc/ghc-9.6-hadrian-android.patch) + ++ onAndroid (fromUntil "9.0" "9.10" ./patches/ghc/ghc-9.6-hadrian-android.patch) ++ onMusl (onAarch64 (fromUntil "9.4" "9.8" ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch)) ++ onMusl (onAarch64 (fromUntil "9.8" "9.10" ./patches/ghc/ghc-9.8-hadrian-strip-cmd.patch)) ++ onMusl (onAarch64 (fromUntil "9.10" "9.12" ./patches/ghc/ghc-9.10-hadrian-strip-cmd.patch)) From 1293f272098cf0ccbe733771fd62e66ab6b140bb Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 3 Dec 2024 12:43:21 +1300 Subject: [PATCH 131/206] Fix for ghc >9.10 --- overlays/bootstrap.nix | 1 + overlays/patches/ghc/ghc-9.10-hadrian-android.patch | 10 ++++++++++ 2 files changed, 11 insertions(+) create mode 100644 overlays/patches/ghc/ghc-9.10-hadrian-android.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index e12d33c123..f7e2af24fc 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -227,6 +227,7 @@ in { ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-bionic-libc.patch)) ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-cross-dont-build-stage2-tools.patch)) ++ onAndroid (fromUntil "9.0" "9.10" ./patches/ghc/ghc-9.6-hadrian-android.patch) + ++ onAndroid (from "9.10" ./patches/ghc/ghc-9.10-hadrian-android.patch) ++ onMusl (onAarch64 (fromUntil "9.4" "9.8" ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch)) ++ onMusl (onAarch64 (fromUntil "9.8" "9.10" ./patches/ghc/ghc-9.8-hadrian-strip-cmd.patch)) ++ onMusl (onAarch64 (fromUntil "9.10" "9.12" ./patches/ghc/ghc-9.10-hadrian-strip-cmd.patch)) diff --git a/overlays/patches/ghc/ghc-9.10-hadrian-android.patch b/overlays/patches/ghc/ghc-9.10-hadrian-android.patch new file mode 100644 index 0000000000..4200269d94 --- /dev/null +++ b/overlays/patches/ghc/ghc-9.10-hadrian-android.patch @@ -0,0 +1,10 @@ +diff --git a/hadrian/src/Hadrian/Haskell/Cabal.hs b/hadrian/src/Hadrian/Haskell/Cabal.hs +index 17249efd79..ff6cc57949 100644 +--- a/hadrian/src/Hadrian/Haskell/Cabal.hs ++++ b/hadrian/src/Hadrian/Haskell/Cabal.hs +@@ -84,5 +84,6 @@ cabalOsString "mingw32" = "windows" + cabalOsString "darwin" = "osx" + cabalOsString "solaris2" = "solaris" + cabalOsString "gnu" = "hurd" ++cabalOsString "linux_android" = "android" + cabalOsString other = other From 378ddb5e97dd41488b246e3f7fcc8474967c9863 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 3 Dec 2024 13:56:35 +1300 Subject: [PATCH 132/206] Fix patch error --- overlays/patches/ghc/ghc-8.10-android.patch | 3 --- 1 file changed, 3 deletions(-) diff --git a/overlays/patches/ghc/ghc-8.10-android.patch b/overlays/patches/ghc/ghc-8.10-android.patch index c251e4c5b1..fd499548d1 100644 --- a/overlays/patches/ghc/ghc-8.10-android.patch +++ b/overlays/patches/ghc/ghc-8.10-android.patch @@ -230,9 +230,6 @@ index bd21243..e3bd3cb 100644 return EXIT_SUCCESS; } -diff --git a/utils/check-sphinx/dist/.doctrees/environment.pickle b/utils/check-sphinx/dist/.doctrees/environment.pickle -index 98df77f..a7b10a7 100644 -Binary files a/utils/check-sphinx/dist/.doctrees/environment.pickle and b/utils/check-sphinx/dist/.doctrees/environment.pickle differ diff --git a/utils/genapply/Main.hs b/utils/genapply/Main.hs index 8c194f1..24514e1 100644 --- a/utils/genapply/Main.hs From 91dade089311c591d347064f4f46be0eb4cf0257 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 4 Dec 2024 00:48:46 +1300 Subject: [PATCH 133/206] Possible fix for aarch64 android --- overlays/android.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overlays/android.nix b/overlays/android.nix index 7a7c869542..93c1c2dde0 100644 --- a/overlays/android.nix +++ b/overlays/android.nix @@ -4,7 +4,7 @@ final: prev: { systems = prev.lib.systems // { examples = prev.lib.systems.examples // { aarch64-android = prev.lib.systems.examples.aarch64-android // { - androidSdkVersion = "26"; + androidSdkVersion = "269"; androidNdkVersion = "24"; }; armv7a-android-prebuilt = prev.lib.systems.examples.armv7a-android-prebuilt // { From 5915b86a1895c533e943e002f9de4a951d170814 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 4 Dec 2024 16:01:01 +1300 Subject: [PATCH 134/206] Fix patches for GHC 8.10 --- overlays/bootstrap.nix | 8 +- ...s-support-for-Hidden-symbols-android.patch | 233 ++++++++++++++++++ 2 files changed, 239 insertions(+), 2 deletions(-) create mode 100644 overlays/patches/ghc/ghc-8.10-0006-Adds-support-for-Hidden-symbols-android.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index f7e2af24fc..1878e404fc 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -271,8 +271,12 @@ in { ++ fromUntil "9.8" "9.9" ./patches/ghc/docs-sphinx-7-ghc98.patch # These two patches are needed for libblst, which has now hidden symbols, which the linker doesn't know how to deal with. - ++ until "9.0" ./patches/ghc/ghc-8.10-0006-Adds-support-for-Hidden-symbols.patch - ++ until "9.0" ./patches/ghc/ghc-8.10-0006-Adds-support-for-Hidden-symbols-2.patch + ++ ( + if final.stdenv.targetPlatform.isAndroid + then until "9.0" ./patches/ghc/ghc-8.10-0006-Adds-support-for-Hidden-symbols-android.patch + else until "9.0" ./patches/ghc/ghc-8.10-0006-Adds-support-for-Hidden-symbols.patch + ++ until "9.0" ./patches/ghc/ghc-8.10-0006-Adds-support-for-Hidden-symbols-2.patch + ) ++ onWindowsOrMusl (fromUntil "9.6" "9.7" ./patches/ghc/ghc-9.6-0006-Adds-support-for-Hidden-symbols.patch) ++ onWindowsOrMusl (fromUntil "9.8.2" "9.11" ./patches/ghc/ghc-9.6-0006-Adds-support-for-Hidden-symbols.patch) ++ onWindowsOrMusl (fromUntil "9.6" "9.7" ./patches/ghc/ghc-9.6-0006-Adds-support-for-Hidden-symbols-2.patch) diff --git a/overlays/patches/ghc/ghc-8.10-0006-Adds-support-for-Hidden-symbols-android.patch b/overlays/patches/ghc/ghc-8.10-0006-Adds-support-for-Hidden-symbols-android.patch new file mode 100644 index 0000000000..69bba7d9c7 --- /dev/null +++ b/overlays/patches/ghc/ghc-8.10-0006-Adds-support-for-Hidden-symbols-android.patch @@ -0,0 +1,233 @@ +diff --git a/rts/Linker.c b/rts/Linker.c +index 3428a010da..6eb43be959 100644 +--- a/rts/Linker.c ++++ b/rts/Linker.c +@@ -267,9 +267,12 @@ int ghciInsertSymbolTable( + HashTable *table, + const SymbolName* key, + SymbolAddr* data, +- HsBool weak, ++ int flags, + ObjectCode *owner) + { ++ HsBool weak = flags & 1; ++ HsBool hidden = flags & 2; ++ + RtsSymbolInfo *pinfo = lookupStrHashTable(table, key); + if (!pinfo) /* new entry */ + { +@@ -277,6 +280,7 @@ int ghciInsertSymbolTable( + pinfo->value = data; + pinfo->owner = owner; + pinfo->weak = weak; ++ pinfo->hidden = hidden; + insertStrHashTable(table, key, pinfo); + return 1; + } +@@ -340,11 +344,22 @@ int ghciInsertSymbolTable( + call this function again to trigger the duplicate error. */ + return 1; + } ++ else if(pinfo->hidden && !hidden) ++ { ++ /* The existing symbol is hidden, let's replace it */ ++ pinfo->value = data; ++ pinfo->owner = owner; ++ pinfo->weak = weak; + ++ pinfo->hidden = hidden; ++ return 1; ++ } + pathchar* archiveName = NULL; + debugBelch( + "GHC runtime linker: fatal error: I found a duplicate definition for symbol\n" + " %s\n" ++ " new symbol is hidden: %d\n" ++ " old symbol is hidden: %d\n" + "whilst processing object file\n" + " %" PATH_FMT "\n" + "The symbol was previously defined in\n" +@@ -355,6 +370,8 @@ int ghciInsertSymbolTable( + " * An incorrect `package.conf' entry, causing some object to be\n" + " loaded twice.\n", + (char*)key, ++ hidden ? 1 : 0, ++ pinfo->hidden ? 1 : 0, + obj_name, + pinfo->owner == NULL ? WSTR("(GHCi built-in symbols)") : + pinfo->owner->archiveMemberName ? archiveName = mkPath(pinfo->owner->archiveMemberName) +@@ -451,7 +468,7 @@ initLinker_ (int retain_cafs) + for (sym = rtsSyms; sym->lbl != NULL; sym++) { + if (! ghciInsertSymbolTable(WSTR("(GHCi built-in symbols)"), + symhash, sym->lbl, sym->addr, +- sym->weak, NULL)) { ++ sym->weak | (HS_BOOL_FALSE << 1), NULL)) { + barf("ghciInsertSymbolTable failed"); + } + IF_DEBUG(linker, debugBelch("initLinker: inserting rts symbol %s, %p\n", sym->lbl, sym->addr)); +@@ -463,7 +480,7 @@ initLinker_ (int retain_cafs) + use an arbitrary (hopefully unique) address here. + */ + if (! ghciInsertSymbolTable(WSTR("(GHCi special symbols)"), +- symhash, "__dso_handle", (void *)0x12345687, HS_BOOL_FALSE, NULL)) { ++ symhash, "__dso_handle", (void *)0x12345687, HS_BOOL_FALSE | (HS_BOOL_FALSE << 1), NULL)) { + barf("ghciInsertSymbolTable failed"); + } + +@@ -471,7 +488,7 @@ initLinker_ (int retain_cafs) + if (! ghciInsertSymbolTable(WSTR("(GHCi built-in symbols)"), symhash, + MAYBE_LEADING_UNDERSCORE_STR("newCAF"), + retain_cafs ? newRetainedCAF : newGCdCAF, +- HS_BOOL_FALSE, NULL)) { ++ HS_BOOL_FALSE | (HS_BOOL_FALSE << 1), NULL)) { + barf("ghciInsertSymbolTable failed"); + } + +@@ -844,8 +861,8 @@ HsBool removeLibrarySearchPath(HsPtr dll_path_index) + */ + HsInt insertSymbol(pathchar* obj_name, SymbolName* key, SymbolAddr* data) + { +- return ghciInsertSymbolTable(obj_name, symhash, key, data, HS_BOOL_FALSE, +- NULL); ++ return ghciInsertSymbolTable(obj_name, symhash, key, data, ++ HS_BOOL_FALSE | (HS_BOOL_FALSE << 1), NULL); + } + + /* ----------------------------------------------------------------------------- +@@ -1696,7 +1713,8 @@ int ocTryLoad (ObjectCode* oc) { + if ( symbol.name + && !ghciInsertSymbolTable(oc->fileName, symhash, symbol.name, + symbol.addr, +- isSymbolWeak(oc, symbol.name), oc)) { ++ isSymbolWeak(oc, symbol.name) | (HS_BOOL_FALSE << 1), ++ oc)) { + return 0; + } + } +diff --git a/rts/LinkerInternals.h b/rts/LinkerInternals.h +index a846bf5ca7..acba66828b 100644 +--- a/rts/LinkerInternals.h ++++ b/rts/LinkerInternals.h +@@ -310,6 +310,7 @@ typedef struct _RtsSymbolInfo { + SymbolAddr* value; + ObjectCode *owner; + HsBool weak; ++ HsBool hidden; + } RtsSymbolInfo; + + void exitLinker( void ); +@@ -337,7 +338,7 @@ int ghciInsertSymbolTable( + HashTable *table, + const SymbolName* key, + SymbolAddr* data, +- HsBool weak, ++ int flags, + ObjectCode *owner); + + /* Lock-free version of lookupSymbol. When 'dependent' is not NULL, adds it as a +diff --git a/rts/linker/Elf.c b/rts/linker/Elf.c +index c3f9110509..5bf7f00f31 100644 +--- a/rts/linker/Elf.c ++++ b/rts/linker/Elf.c +@@ -1013,7 +1013,9 @@ ocGetNames_ELF ( ObjectCode* oc ) + setWeakSymbol(oc, nm); + } + if (!ghciInsertSymbolTable(oc->fileName, symhash, +- nm, symbol->addr, isWeak, oc)) { ++ nm, symbol->addr, ++ isWeak | ((ELF_ST_VISIBILITY(symbol->elf_sym->st_other) == STV_HIDDEN) << 1), ++ oc)) { + goto fail; + } + oc->symbols[curSymbol++].name = nm; +diff --git a/rts/linker/ElfTypes.h b/rts/linker/ElfTypes.h +index e5333d71a7..0a8e44a076 100644 +--- a/rts/linker/ElfTypes.h ++++ b/rts/linker/ElfTypes.h +@@ -32,6 +32,9 @@ + #define Elf_Sym Elf64_Sym + #define Elf_Rel Elf64_Rel + #define Elf_Rela Elf64_Rela ++#if !defined(ELF_ST_VISIBILITY) ++#define ELF_ST_VISIBILITY ELF64_ST_VISIBILITY ++#endif + #if !defined(ELF_ST_TYPE) + #define ELF_ST_TYPE ELF64_ST_TYPE + #endif +@@ -56,6 +59,9 @@ + #define Elf_Sym Elf32_Sym + #define Elf_Rel Elf32_Rel + #define Elf_Rela Elf32_Rela ++#if !defined(ELF_ST_VISIBILITY) ++#define ELF_ST_VISIBILITY ELF32_ST_VISIBILITY ++#endif /* ELF_ST_VISIBILITY */ + #if !defined(ELF_ST_TYPE) + #define ELF_ST_TYPE ELF32_ST_TYPE + #endif /* ELF_ST_TYPE */ +diff --git a/rts/linker/MachO.c b/rts/linker/MachO.c +index 00b0dce04c..d63369972d 100644 +--- a/rts/linker/MachO.c ++++ b/rts/linker/MachO.c +@@ -1336,7 +1336,7 @@ ocGetNames_MachO(ObjectCode* oc) + , symhash + , nm + , addr +- , HS_BOOL_FALSE ++ , HS_BOOL_FALSE | (HS_BOOL_FALSE << 1) + , oc); + + oc->symbols[curSymbol].name = nm; +@@ -1376,7 +1376,7 @@ ocGetNames_MachO(ObjectCode* oc) + + IF_DEBUG(linker, debugBelch("ocGetNames_MachO: inserting common symbol: %s\n", nm)); + ghciInsertSymbolTable(oc->fileName, symhash, nm, +- (void*)commonCounter, HS_BOOL_FALSE, oc); ++ (void*)commonCounter, HS_BOOL_FALSE | (HS_BOOL_FALSE << 1), oc); + oc->symbols[curSymbol].name = nm; + oc->symbols[curSymbol].addr = oc->info->macho_symbols[i].addr; + curSymbol++; +diff --git a/rts/linker/PEi386.c b/rts/linker/PEi386.c +index c73d858d52..74b7fd1009 100644 +--- a/rts/linker/PEi386.c ++++ b/rts/linker/PEi386.c +@@ -292,7 +292,7 @@ const void* __rts_iob_func = (void*)&__acrt_iob_func; + void initLinker_PEi386() + { + if (!ghciInsertSymbolTable(WSTR("(GHCi/Ld special symbols)"), +- symhash, "__image_base__", __image_base, HS_BOOL_TRUE, NULL)) { ++ symhash, "__image_base__", __image_base, HS_BOOL_TRUE | (HS_BOOL_FALSE << 1), NULL)) { + barf("ghciInsertSymbolTable failed"); + } + +@@ -1533,7 +1533,7 @@ ocGetNames_PEi386 ( ObjectCode* oc ) + sname = strdup (sname); + addr = strdup (addr); + if (!ghciInsertSymbolTable(oc->fileName, symhash, sname, +- addr, false, oc)) { ++ addr, HS_BOOL_FALSE | (HS_BOOL_FALSE << 1), oc)) { + releaseOcInfo (oc); + stgFree (oc->image); + oc->image = NULL; +@@ -1751,7 +1751,9 @@ ocGetNames_PEi386 ( ObjectCode* oc ) + stgFree(tmp); + sname = strdup (sname); + if (!ghciInsertSymbolTable(oc->fileName, symhash, sname, +- addr, false, oc)) ++ addr, ++ HS_BOOL_FALSE | ((secNumber == IMAGE_SYM_UNDEFINED) << 1), ++ oc)) + return false; + + break; +@@ -1768,9 +1770,9 @@ ocGetNames_PEi386 ( ObjectCode* oc ) + if (isWeak) { + setWeakSymbol(oc, sname); + } +- + if (! ghciInsertSymbolTable(oc->fileName, symhash, sname, addr, +- isWeak, oc)) ++ isWeak | ((secNumber == IMAGE_SYM_UNDEFINED) << 1), ++ oc)) + return false; + } else { + /* We're skipping the symbol, but if we ever load this From 9e161b97f9ad4904abaca9e22eb1286594b85d44 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 4 Dec 2024 17:23:41 +1300 Subject: [PATCH 135/206] Try aarch64-android-prebuilt --- ci.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci.nix b/ci.nix index f36604f59e..fc2eb1eabe 100644 --- a/ci.nix +++ b/ci.nix @@ -104,7 +104,7 @@ # aarch64 cross only works on linux inherit (lib.systems.examples) musl32 musl64 aarch64-multiplatform; } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948"]) { - inherit (lib.systems.examples) aarch64-android armv7a-android-prebuilt; + inherit (lib.systems.examples) aarch64-android-prebuilt armv7a-android-prebuilt; } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc8107" "ghc902"]) { # TODO fix this for the compilers we build with hadrian (ghc >=9.4) inherit (lib.systems.examples) aarch64-multiplatform-musl; From 837523e5322e7916e2e0a71ae1e1895832073e1e Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 10 Dec 2024 13:50:48 +1300 Subject: [PATCH 136/206] Include clang --- compiler/ghc/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 1a5708b2aa..9591df28a2 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -236,7 +236,7 @@ let if targetPlatform.isGhcjs then [ buildPackages.emscripten ] else if hostPlatform == buildPlatform - then [ targetPackages.stdenv.cc ] ++ lib.optional useLLVM llvmPackages.llvm + then [ targetPackages.stdenv.cc ] ++ lib.optionals useLLVM [llvmPackages.llvm llvmPackages.clang] else assert targetPlatform == hostPlatform; # build != host == target [ stdenv.cc ] ++ lib.optional useLLVM buildLlvmPackages.llvm; From 134d69a22302232217d26d323aa9141f74944440 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 10 Dec 2024 17:25:45 +1300 Subject: [PATCH 137/206] Don't include clang for prebuilt android --- compiler/ghc/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 9591df28a2..18782b3be8 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -236,7 +236,7 @@ let if targetPlatform.isGhcjs then [ buildPackages.emscripten ] else if hostPlatform == buildPlatform - then [ targetPackages.stdenv.cc ] ++ lib.optionals useLLVM [llvmPackages.llvm llvmPackages.clang] + then [ targetPackages.stdenv.cc ] ++ lib.optionals useLLVM ([llvmPackages.llvm] ++ lib.optional (!targetPlatform.useAndroidPrebuilt) llvmPackages.clang) else assert targetPlatform == hostPlatform; # build != host == target [ stdenv.cc ] ++ lib.optional useLLVM buildLlvmPackages.llvm; From 87ac69daf3f5f7538fadc53b6400d6c8a0f195a0 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 19 Dec 2024 16:16:47 +1300 Subject: [PATCH 138/206] Set `LLVMAS` --- compiler/ghc/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 18782b3be8..78070e8cfb 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -463,6 +463,7 @@ stdenv.mkDerivation (rec { '' + lib.optionalString useLLVM '' export LLC="${llvmPackages.llvm}/bin/llc" export OPT="${llvmPackages.llvm}/bin/opt" + export LLVMAS="${llvmPackages.llvm}/bin/llvm-as" '' + lib.optionalString (!stdenv.isDarwin) '' export NIX_LDFLAGS+=" -rpath $out/lib/${targetPrefix}ghc-${ghc-version}" '' + lib.optionalString stdenv.isDarwin '' From 6758658fe9dec55a5a776c9b3a185fc2699d04c0 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 19 Dec 2024 16:43:40 +1300 Subject: [PATCH 139/206] Setting LLVMAS to `llvm-as` did not help --- compiler/ghc/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 78070e8cfb..18782b3be8 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -463,7 +463,6 @@ stdenv.mkDerivation (rec { '' + lib.optionalString useLLVM '' export LLC="${llvmPackages.llvm}/bin/llc" export OPT="${llvmPackages.llvm}/bin/opt" - export LLVMAS="${llvmPackages.llvm}/bin/llvm-as" '' + lib.optionalString (!stdenv.isDarwin) '' export NIX_LDFLAGS+=" -rpath $out/lib/${targetPrefix}ghc-${ghc-version}" '' + lib.optionalString stdenv.isDarwin '' From 09bc75daf8e8ab9ca1a15f8ef531c1aa073d209c Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 19 Dec 2024 17:51:59 +1300 Subject: [PATCH 140/206] Set `LLVMAS` the same as `CC` --- compiler/ghc/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 18782b3be8..2c93f1049c 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -463,6 +463,7 @@ stdenv.mkDerivation (rec { '' + lib.optionalString useLLVM '' export LLC="${llvmPackages.llvm}/bin/llc" export OPT="${llvmPackages.llvm}/bin/opt" + export LLVMAS="${targetCC}/bin/${targetCC.targetPrefix}cc" '' + lib.optionalString (!stdenv.isDarwin) '' export NIX_LDFLAGS+=" -rpath $out/lib/${targetPrefix}ghc-${ghc-version}" '' + lib.optionalString stdenv.isDarwin '' From 79c3370662acd3b77a5d4c2a2986fd65408d6c80 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 20 Dec 2024 00:08:35 +1300 Subject: [PATCH 141/206] Relax llvm max version --- overlays/bootstrap.nix | 1 + .../ghc/ghc-9.10-relax-llvm-max-version.patch | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 overlays/patches/ghc/ghc-9.10-relax-llvm-max-version.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index b9a4c14161..5a7eb1b111 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -229,6 +229,7 @@ in { ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10.7-cross-dont-build-stage2-tools.patch)) ++ onAndroid (fromUntil "9.0" "9.10" ./patches/ghc/ghc-9.6-hadrian-android.patch) ++ onAndroid (from "9.10" ./patches/ghc/ghc-9.10-hadrian-android.patch) + ++ onAndroid (fromUntil "9.10" "9.11" ./patches/ghc/ghc-9.10-relax-llvm-max-version.patch) ++ onMusl (onAarch64 (fromUntil "9.4" "9.8" ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch)) ++ onMusl (onAarch64 (fromUntil "9.8" "9.10" ./patches/ghc/ghc-9.8-hadrian-strip-cmd.patch)) ++ onMusl (onAarch64 (fromUntil "9.10" "9.12" ./patches/ghc/ghc-9.10-hadrian-strip-cmd.patch)) diff --git a/overlays/patches/ghc/ghc-9.10-relax-llvm-max-version.patch b/overlays/patches/ghc/ghc-9.10-relax-llvm-max-version.patch new file mode 100644 index 0000000000..e8df35f802 --- /dev/null +++ b/overlays/patches/ghc/ghc-9.10-relax-llvm-max-version.patch @@ -0,0 +1,13 @@ +diff --git a/configure.ac b/configure.ac +index 1bf37789c7..3f91701dbe 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -492,7 +492,7 @@ AC_SUBST(InstallNameToolCmd) + # versions of LLVM simultaneously, but that stopped working around + # 3.5/3.6 release of LLVM. + LlvmMinVersion=13 # inclusive +-LlvmMaxVersion=16 # not inclusive ++LlvmMaxVersion=18 # not inclusive + AC_SUBST([LlvmMinVersion]) + AC_SUBST([LlvmMaxVersion]) + From ea25d0b09ee46373d259c4bbe89731bdd950af12 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 20 Dec 2024 01:17:49 +1300 Subject: [PATCH 142/206] Try with llvm version bound relaxed, but without LLVMAS env var --- compiler/ghc/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/compiler/ghc/default.nix b/compiler/ghc/default.nix index 2c93f1049c..18782b3be8 100644 --- a/compiler/ghc/default.nix +++ b/compiler/ghc/default.nix @@ -463,7 +463,6 @@ stdenv.mkDerivation (rec { '' + lib.optionalString useLLVM '' export LLC="${llvmPackages.llvm}/bin/llc" export OPT="${llvmPackages.llvm}/bin/opt" - export LLVMAS="${targetCC}/bin/${targetCC.targetPrefix}cc" '' + lib.optionalString (!stdenv.isDarwin) '' export NIX_LDFLAGS+=" -rpath $out/lib/${targetPrefix}ghc-${ghc-version}" '' + lib.optionalString stdenv.isDarwin '' From 08efe5b3b97d17748771d902955ac469d00f7dfa Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 20 Dec 2024 13:56:50 +1300 Subject: [PATCH 143/206] Define ELF64_ST_VISIBILITY and ELF32_ST_VISIBILITY for android --- overlays/bootstrap.nix | 1 + ...c-define-undefined-elf-st-visibility.patch | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 overlays/patches/ghc/ghc-define-undefined-elf-st-visibility.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 5a7eb1b111..2399c0c687 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -230,6 +230,7 @@ in { ++ onAndroid (fromUntil "9.0" "9.10" ./patches/ghc/ghc-9.6-hadrian-android.patch) ++ onAndroid (from "9.10" ./patches/ghc/ghc-9.10-hadrian-android.patch) ++ onAndroid (fromUntil "9.10" "9.11" ./patches/ghc/ghc-9.10-relax-llvm-max-version.patch) + ++ onAndroid (from "9.12" ./patches/ghc/ghc-define-undefined-elf-st-visibility.patch) ++ onMusl (onAarch64 (fromUntil "9.4" "9.8" ./patches/ghc/ghc-9.6-hadrian-strip-cmd.patch)) ++ onMusl (onAarch64 (fromUntil "9.8" "9.10" ./patches/ghc/ghc-9.8-hadrian-strip-cmd.patch)) ++ onMusl (onAarch64 (fromUntil "9.10" "9.12" ./patches/ghc/ghc-9.10-hadrian-strip-cmd.patch)) diff --git a/overlays/patches/ghc/ghc-define-undefined-elf-st-visibility.patch b/overlays/patches/ghc/ghc-define-undefined-elf-st-visibility.patch new file mode 100644 index 0000000000..bd3b3ea604 --- /dev/null +++ b/overlays/patches/ghc/ghc-define-undefined-elf-st-visibility.patch @@ -0,0 +1,24 @@ +diff --git a/rts/linker/ElfTypes.h b/rts/linker/ElfTypes.h +index f5e2f819d9..7f75087738 100644 +--- a/rts/linker/ElfTypes.h ++++ b/rts/linker/ElfTypes.h +@@ -33,6 +33,9 @@ + #define Elf_Sym Elf64_Sym + #define Elf_Rel Elf64_Rel + #define Elf_Rela Elf64_Rela ++#if !defined(ELF64_ST_VISIBILITY) ++#define ELF64_ST_VISIBILITY(o) ((o)&0x3) ++#endif + #if !defined(ELF_ST_VISIBILITY) + #define ELF_ST_VISIBILITY ELF64_ST_VISIBILITY + #endif +@@ -60,6 +63,9 @@ + #define Elf_Sym Elf32_Sym + #define Elf_Rel Elf32_Rel + #define Elf_Rela Elf32_Rela ++#if !defined(ELF32_ST_VISIBILITY) ++#define ELF32_ST_VISIBILITY(o) ((o)&0x3) ++#endif + #if !defined(ELF_ST_VISIBILITY) + #define ELF_ST_VISIBILITY ELF32_ST_VISIBILITY + #endif /* ELF_ST_VISIBILITY */ From e951f77d27bcfec52bb0bbb394699cd452afe98a Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sat, 21 Dec 2024 00:23:18 +1300 Subject: [PATCH 144/206] ifdLevel 2 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index c9235935ae..eafbf034cb 100644 --- a/flake.nix +++ b/flake.nix @@ -83,7 +83,7 @@ let callFlake = import flake-compat; - ifdLevel = 1; + ifdLevel = 2; runningHydraEvalTest = false; defaultCompiler = "ghc928"; config = import ./config.nix; From 917ce146396e4a63af1677217290daff76bb93e1 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sat, 21 Dec 2024 01:45:51 +1300 Subject: [PATCH 145/206] ifdLevel 3 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index eafbf034cb..4d7a252e95 100644 --- a/flake.nix +++ b/flake.nix @@ -83,7 +83,7 @@ let callFlake = import flake-compat; - ifdLevel = 2; + ifdLevel = 3; runningHydraEvalTest = false; defaultCompiler = "ghc928"; config = import ./config.nix; From f50a7c57d3e04c09b2e8aa311e9783e74e6cc70a Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 10 Jan 2025 00:49:04 +1300 Subject: [PATCH 146/206] ifdLevel 2 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 4d7a252e95..eafbf034cb 100644 --- a/flake.nix +++ b/flake.nix @@ -83,7 +83,7 @@ let callFlake = import flake-compat; - ifdLevel = 3; + ifdLevel = 2; runningHydraEvalTest = false; defaultCompiler = "ghc928"; config = import ./config.nix; From df4a23401f356440e7a642b066a880f26cd04dcd Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sat, 11 Jan 2025 17:28:57 +1300 Subject: [PATCH 147/206] ifdLevel 3 --- flake.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index eafbf034cb..4d7a252e95 100644 --- a/flake.nix +++ b/flake.nix @@ -83,7 +83,7 @@ let callFlake = import flake-compat; - ifdLevel = 2; + ifdLevel = 3; runningHydraEvalTest = false; defaultCompiler = "ghc928"; config = import ./config.nix; From 17f43a2c3032ae59589cb33aa1adb2c357980b17 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 13 Jan 2025 17:09:40 +1300 Subject: [PATCH 148/206] Fix for android ioctl issue --- overlays/patches/iserv-proxy-interpreter-9.3-android.patch | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/overlays/patches/iserv-proxy-interpreter-9.3-android.patch b/overlays/patches/iserv-proxy-interpreter-9.3-android.patch index ec106c1e69..eb12c63761 100644 --- a/overlays/patches/iserv-proxy-interpreter-9.3-android.patch +++ b/overlays/patches/iserv-proxy-interpreter-9.3-android.patch @@ -3,7 +3,8 @@ new file mode 100644 index 0000000..d447895 --- /dev/null +++ b/cbits/symbols.c -@@ -0,0 +1,318 @@ +@@ -0,0 +1,319 @@ ++#define BIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD +#include +#include +#include From 2f4016e82519adc6acd619940ad6be2817ae76db Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 13 Jan 2025 17:51:29 +1300 Subject: [PATCH 149/206] Skip running tests for aarch64-android --- overlays/linux-cross.nix | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/overlays/linux-cross.nix b/overlays/linux-cross.nix index 1fc2c8864d..863aedf547 100644 --- a/overlays/linux-cross.nix +++ b/overlays/linux-cross.nix @@ -74,11 +74,23 @@ let ++ lib.optionals hostPlatform.isAarch32 (map (opt: "--gcc-option=" + opt) [ "-fno-pic" "-fno-plt" ]) # Also for GHC #15275 ++ lib.optionals hostPlatform.isAarch64 ["--gcc-option=-fPIC"]; + + # Wrapper to output a warning for aarch64 Android + qemuNotSupportedWarning = writeShellScriptBin "warning-wrapper" '' + echo "Warning: Running aarch64 Android apps on Linux using qemu is not supported." >&2 + ''; + + # Wrapper for qemu testing qemuTestWrapper = writeShellScriptBin "test-wrapper" '' set -euo pipefail ${qemu}/bin/qemu-${qemuSuffix} $@* - ''; - testWrapper = lib.optional isLinuxCross "${qemuTestWrapper}/bin/test-wrapper"; + ''; + + # Choose the appropriate test wrapper + testWrapper = lib.optional isLinuxCross + (if hostPlatform.isAndroid && hostPlatform.isAarch64 + then "${qemuNotSupportedWarning}/bin/warning-wrapper" + else "${qemuTestWrapper}/bin/test-wrapper"); enableShared = lib.mkDefault (!isLinuxCross); From 055d278de92f0709820ed9415e63fbced074b976 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 13 Jan 2025 17:55:11 +1300 Subject: [PATCH 150/206] Same problem for armv7a --- overlays/linux-cross.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/overlays/linux-cross.nix b/overlays/linux-cross.nix index 863aedf547..cb302aa7d9 100644 --- a/overlays/linux-cross.nix +++ b/overlays/linux-cross.nix @@ -75,9 +75,9 @@ let # Also for GHC #15275 ++ lib.optionals hostPlatform.isAarch64 ["--gcc-option=-fPIC"]; - # Wrapper to output a warning for aarch64 Android + # Wrapper to output a warning for Android qemuNotSupportedWarning = writeShellScriptBin "warning-wrapper" '' - echo "Warning: Running aarch64 Android apps on Linux using qemu is not supported." >&2 + echo "Warning: Running Android apps on Linux using qemu is not supported." >&2 ''; # Wrapper for qemu testing @@ -88,7 +88,7 @@ let # Choose the appropriate test wrapper testWrapper = lib.optional isLinuxCross - (if hostPlatform.isAndroid && hostPlatform.isAarch64 + (if hostPlatform.isAndroid then "${qemuNotSupportedWarning}/bin/warning-wrapper" else "${qemuTestWrapper}/bin/test-wrapper"); From f6b9990542ccd7bbdbebd78f83ef673549b02d79 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 14 Jan 2025 01:03:52 +1300 Subject: [PATCH 151/206] Fixes from aarch64 android --- .../patches/iserv-proxy-interpreter-9.3-android.patch | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/overlays/patches/iserv-proxy-interpreter-9.3-android.patch b/overlays/patches/iserv-proxy-interpreter-9.3-android.patch index eb12c63761..380698c571 100644 --- a/overlays/patches/iserv-proxy-interpreter-9.3-android.patch +++ b/overlays/patches/iserv-proxy-interpreter-9.3-android.patch @@ -3,7 +3,7 @@ new file mode 100644 index 0000000..d447895 --- /dev/null +++ b/cbits/symbols.c -@@ -0,0 +1,319 @@ +@@ -0,0 +1,327 @@ +#define BIONIC_IOCTL_NO_SIGNEDNESS_OVERLOAD +#include +#include @@ -69,6 +69,9 @@ index 0000000..d447895 +extern void __subtf3(void); +extern void __trunctfdf2(void); + ++extern void flock(void); ++extern void times(void); ++ +#define MISSING_FUN(f) void (f)(void) { printf("Unknown call to `%s'\n", #f); exit(1); } + +MISSING_FUN(c_format_unix_time) @@ -174,6 +177,7 @@ index 0000000..d447895 + SYM(stdout), + SYM(strftime), + SYM(utimes), ++ SYM(times), + SYM(setenv), + SYM(fpathconf), + SYM(exit), @@ -231,6 +235,7 @@ index 0000000..d447895 + SYM(openat),SYM(__open_2), + // string.h + SYM(strerror), ++ SYM(strerror_r), + SYM(strcmp), + SYM(memchr),SYM(strcpy),SYM(strchr),SYM(strncpy),SYM(strrchr), + SYM(strcat),SYM(strncmp),SYM(strdup), @@ -267,6 +272,7 @@ index 0000000..d447895 + SYM(fprintf), + SYM(vfprintf), + SYM(fopen), SYM(fclose), ++ SYM(flock), + SYM(getegid),SYM(getgid), + SYM(getpwent), + SYM(getgrent), @@ -284,6 +290,7 @@ index 0000000..d447895 + SYM(ferror), + SYM(fflush), + SYM(fgets),SYM(fputc),SYM(fputs), ++ SYM(puts), + SYM(fseek),SYM(ftell), + SYM(sscanf), + SYM(shutdown), @@ -317,6 +324,7 @@ index 0000000..d447895 + SYM(__multf3), + SYM(__subtf3), + SYM(__trunctfdf2), ++ SYM(getrusage), + { 0, 0, STRENGTH_NORMAL, 1 } /* sentinel */ +}; + From 4ec882a1777b339a68f7f083335a684f8182ea91 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 14 Jan 2025 01:23:18 +1300 Subject: [PATCH 152/206] Fixes from armv7a android --- .../iserv-proxy-interpreter-9.3-android32.patch | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch b/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch index f91fbb7978..46b20c378b 100644 --- a/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch +++ b/overlays/patches/iserv-proxy-interpreter-9.3-android32.patch @@ -3,7 +3,7 @@ new file mode 100644 index 0000000..9974c73 --- /dev/null +++ b/cbits/symbols.c -@@ -0,0 +1,447 @@ +@@ -0,0 +1,456 @@ +#include +#include +#include @@ -167,6 +167,9 @@ index 0000000..9974c73 +extern void mmap64(void); +extern void mremap(void); +extern void readlink(void); ++extern void flock(void); ++extern void times(void); ++extern void getrusage(void); + +#define MISSING_FUN(f) void (f)(void) { printf("Unknown call to %s\n", #f); exit(1); } + @@ -237,6 +240,7 @@ index 0000000..9974c73 + SYM(raise), + SYM(strcmp), + SYM(strerror), ++ SYM(setenv), + SYM(unsetenv), + SYM(waitpid), + SYM(dup2), @@ -445,6 +449,11 @@ index 0000000..9974c73 + SYM(mmap64), + SYM(mremap), + SYM(readlink), ++ SYM(times), ++ SYM(strerror_r), ++ SYM(flock), ++ SYM(puts), ++ SYM(getrusage), + { 0, 0, STRENGTH_NORMAL, 1 } /* sentinel */ +}; + From dbbff45eaabbc305dfd36ad9605648bf6ee570d6 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 10 Feb 2025 12:07:09 +1300 Subject: [PATCH 153/206] Test android on nixpkgs 24.11 --- ci.nix | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/ci.nix b/ci.nix index 325f60c558..0aa3d9ad59 100644 --- a/ci.nix +++ b/ci.nix @@ -58,9 +58,10 @@ # from here (so that is no longer cached) also remove ./materialized/ghcXXX. # Update supported-ghc-versions.md to reflect any changes made here. nixpkgs.lib.optionalAttrs (nixpkgsName == "R2411") { - # TODO perhaps these - # ghc96 = false; - # ghc98 = false; + ghc96 = true; + ghc98 = true; + ghc910 = true; + ghc9121 = true; } // nixpkgs.lib.optionalAttrs (nixpkgsName == "unstable") { ghc96 = true; ghc98 = true; @@ -83,8 +84,8 @@ || (system == "aarch64-darwin" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948" "ghc966" "ghc982" "ghc983" "ghc984"]) )) { inherit (lib.systems.examples) ghcjs; - } // lib.optionalAttrs ( - (__match ".*llvm" compiler-nix-name == null) + } // lib.optionalAttrs (nixpkgsName == "unstable" + && (__match ".*llvm" compiler-nix-name == null) && ((system == "x86_64-linux" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc966"]) # Not sure why GHC 9.6.6 TH code now wants `log1pf` || (system == "x86_64-darwin" && builtins.elem compiler-nix-name []))) { # TODO add ghc versions when we have more darwin build capacity inherit (lib.systems.examples) mingwW64; @@ -97,7 +98,7 @@ # Musl cross only works on linux # aarch64 cross only works on linux inherit (lib.systems.examples) musl32 musl64 aarch64-multiplatform; - } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948"]) { + } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "R2411" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948"]) { inherit (lib.systems.examples) aarch64-android-prebuilt armv7a-android-prebuilt; } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc8107" "ghc902"]) { # TODO fix this for the compilers we build with hadrian (ghc >=9.4) From c05e75120a1a84789cc30e4df934a881397d53b8 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 11 Feb 2025 14:51:24 +1300 Subject: [PATCH 154/206] musl fix --- flake.lock | 6 +++--- overlays/linux-cross.nix | 6 +----- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/flake.lock b/flake.lock index 4fd6ca4fe2..914ddf73ec 100644 --- a/flake.lock +++ b/flake.lock @@ -339,11 +339,11 @@ "iserv-proxy": { "flake": false, "locked": { - "lastModified": 1717479972, - "narHash": "sha256-7vE3RQycHI1YT9LHJ1/fUaeln2vIpYm6Mmn8FTpYeVo=", + "lastModified": 1739237905, + "narHash": "sha256-OCeEI92yuNFXOCZdhImrzPa3DgMqantxlbq5VA43o/w=", "owner": "stable-haskell", "repo": "iserv-proxy", - "rev": "2ed34002247213fc435d0062350b91bab920626e", + "rev": "3890af9b0881dd63cbae805cdbf4f0c610e02085", "type": "github" }, "original": { diff --git a/overlays/linux-cross.nix b/overlays/linux-cross.nix index cb302aa7d9..b49bbc62ed 100644 --- a/overlays/linux-cross.nix +++ b/overlays/linux-cross.nix @@ -49,11 +49,7 @@ let PORT=$((5000 + $RANDOM % 5000)) (>&2 echo "---> Starting ${interpreter.exeName} on port $PORT") ${qemu}/bin/qemu-${qemuSuffix} ${interpreter.override - ({ - patches = lib.optional (builtins.compareVersions interpreter.version "9.0" > 0 && hostPlatform.isAndroid && hostPlatform.isAarch32) ./patches/iserv-proxy-interpreter-9.3-android32.patch - ++ lib.optional (builtins.compareVersions interpreter.version "9.0" > 0 && hostPlatform.isAndroid && hostPlatform.isAarch64) ./patches/iserv-proxy-interpreter-9.3-android.patch - ; - } // lib.optionalAttrs hostPlatform.isAndroid { + (lib.optionalAttrs hostPlatform.isAndroid { setupBuildFlags = ["--ghc-option=-optl-static" ] ++ lib.optional hostPlatform.isAarch32 "--ghc-option=-optl-no-pie"; enableDebugRTS = true; })}/bin/${interpreter.exeName} tmp $PORT $ISERV_ARGS & From b46d9d2e09a99cfb667d92b76d3fc418c05625d9 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 11 Feb 2025 16:12:45 +1300 Subject: [PATCH 155/206] Fix musl64 unlit not found issue --- builder/ghc-for-component-wrapper.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builder/ghc-for-component-wrapper.nix b/builder/ghc-for-component-wrapper.nix index 1849e3626d..7d3c821250 100644 --- a/builder/ghc-for-component-wrapper.nix +++ b/builder/ghc-for-component-wrapper.nix @@ -125,7 +125,7 @@ let done '' - + lib.optionalString (stdenv.targetPlatform.isMusl && !haskellLib.isNativeMusl && builtins.compareVersions ghc.version "9.9" >0) '' + + lib.optionalString (haskellLib.isNativeMusl && builtins.compareVersions ghc.version "9.9" >0) '' ln -s $wrappedGhc/bin/${targetPrefix}unlit $wrappedGhc/bin/unlit ln -s $wrappedGhc/bin/${ghcCommand}-iserv $wrappedGhc/bin/ghc-iserv ln -s $wrappedGhc/bin/${ghcCommand}-iserv-prof $wrappedGhc/bin/ghc-iserv-prof From 39dc765baddb7a4d6d0e9e3b72b1e284bf65c606 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 11 Feb 2025 16:22:15 +1300 Subject: [PATCH 156/206] nix flake update iserv-proxy --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 914ddf73ec..4d42cbbdf8 100644 --- a/flake.lock +++ b/flake.lock @@ -339,11 +339,11 @@ "iserv-proxy": { "flake": false, "locked": { - "lastModified": 1739237905, - "narHash": "sha256-OCeEI92yuNFXOCZdhImrzPa3DgMqantxlbq5VA43o/w=", + "lastModified": 1739244093, + "narHash": "sha256-vUfp2fBG9dR0mT6jaD2pev41sCZfr3jcT8g9estsHlY=", "owner": "stable-haskell", "repo": "iserv-proxy", - "rev": "3890af9b0881dd63cbae805cdbf4f0c610e02085", + "rev": "756f4552822b70e077f7f7121f4439db250588a0", "type": "github" }, "original": { From 1270c3a33bdadef8d3c169a5d1bacad66d820ff6 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 11 Feb 2025 16:40:28 +1300 Subject: [PATCH 157/206] nix flake update nixpkgs-2411 --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 4d42cbbdf8..addb88687c 100644 --- a/flake.lock +++ b/flake.lock @@ -403,11 +403,11 @@ }, "nixpkgs-2411": { "locked": { - "lastModified": 1737255904, - "narHash": "sha256-r3fxHvh+M/mBgCZXOACzRFPsJdix2QSsKazb7VCXXo0=", + "lastModified": 1739151041, + "narHash": "sha256-uNszcul7y++oBiyYXjHEDw/AHeLNp8B6pyWOB+RLA/4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "eacdab35066b0bb1c9413c96898e326b76398a81", + "rev": "94792ab2a6beaec81424445bf917ca2556fbeade", "type": "github" }, "original": { From bd50b99f6ebd09743e136144a658f5c253a29eb6 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 12 Feb 2025 10:39:33 +1300 Subject: [PATCH 158/206] nix flake update iserv-proxy --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index addb88687c..a44253ca98 100644 --- a/flake.lock +++ b/flake.lock @@ -339,11 +339,11 @@ "iserv-proxy": { "flake": false, "locked": { - "lastModified": 1739244093, - "narHash": "sha256-vUfp2fBG9dR0mT6jaD2pev41sCZfr3jcT8g9estsHlY=", + "lastModified": 1739309910, + "narHash": "sha256-aSl3mxch3Mi5zrYPDOTLVXIm3CCZafB8FGRHrcl7CKI=", "owner": "stable-haskell", "repo": "iserv-proxy", - "rev": "756f4552822b70e077f7f7121f4439db250588a0", + "rev": "9095fc6606ab946a6eb49d77b5065aae1d81da1b", "type": "github" }, "original": { From 7ac058efe89b07877b7f05d7b5893386d4def1d8 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 12 Feb 2025 13:28:47 +1300 Subject: [PATCH 159/206] Disable x86_64-darwin.R2411 tests (strangely broken) --- ci.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ci.nix b/ci.nix index 0aa3d9ad59..00a1e33caf 100644 --- a/ci.nix +++ b/ci.nix @@ -18,8 +18,9 @@ # short names for nixpkgs versions nixpkgsVersions = { - "R2411" = inputs.nixpkgs-2411; "unstable" = inputs.nixpkgs-unstable; + } // lib.optionalAttrs (system != "x86_64-darwin") { + "R2411" = inputs.nixpkgs-2411; }; nixpkgsArgs = { From b4a2506297238d162a17cdec9b1b694e11b4976b Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sat, 15 Feb 2025 01:30:53 +1300 Subject: [PATCH 160/206] Add patch to load archive script See https://gitlab.haskell.org/ghc/ghc/-/issues/16130 --- overlays/bootstrap.nix | 4 + ...hc-9.12-static-linker-script-support.patch | 193 ++++++++++++++++++ ...ghc-9.6-static-linker-script-support.patch | 193 ++++++++++++++++++ 3 files changed, 390 insertions(+) create mode 100644 overlays/patches/ghc/ghc-9.12-static-linker-script-support.patch create mode 100644 overlays/patches/ghc/ghc-9.6-static-linker-script-support.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 177f2e34aa..21ff2812ef 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -312,6 +312,10 @@ in { # See https://gitlab.haskell.org/ghc/ghc/-/merge_requests/12586 ++ onWindows (fromUntil "9.6.6" "9.12" ./patches/ghc/ghc-win32-io-manager-compilation.patch) + + # See https://gitlab.haskell.org/ghc/ghc/-/issues/16130 + ++ onAndroid (fromUntil "9.6.6" "9.12" ./patches/ghc/ghc-9.6-static-linker-script-support.patch) + ++ onAndroid (from "9.12.1" ./patches/ghc/ghc-9.12-static-linker-script-support.patch) ; in ({ ghc8107 = traceWarnOld "8.10" (final.callPackage ../compiler/ghc { diff --git a/overlays/patches/ghc/ghc-9.12-static-linker-script-support.patch b/overlays/patches/ghc/ghc-9.12-static-linker-script-support.patch new file mode 100644 index 0000000000..d68c1755f4 --- /dev/null +++ b/overlays/patches/ghc/ghc-9.12-static-linker-script-support.patch @@ -0,0 +1,193 @@ +diff --git a/compiler/GHC/Linker/Static.hs b/compiler/GHC/Linker/Static.hs +index bf9ecd08ac..2a7e09f2c0 100644 +--- a/compiler/GHC/Linker/Static.hs ++++ b/compiler/GHC/Linker/Static.hs +@@ -33,6 +33,8 @@ import GHC.Linker.Static.Utils + import GHC.Driver.Config.Linker + import GHC.Driver.Session + ++import qualified GHC.Data.ShortText as ST ++ + import System.FilePath + import System.Directory + import Control.Monad +@@ -291,11 +293,9 @@ linkStaticLib logger dflags unit_env o_files dep_units = do + | otherwise + = filter ((/= rtsUnitId) . unitId) pkg_cfgs_init + +- archives <- concatMapM (collectArchives namever ways_) pkg_cfgs +- +- ar <- foldl mappend +- <$> (Archive <$> mapM loadObj modules) +- <*> mapM loadAr archives ++ arFromArchives <- mconcat <$> mapM (loadArchives namever ways_) pkg_cfgs ++ arFromObjects <- Archive <$> mapM loadObj modules ++ let ar = arFromObjects `mappend` arFromArchives + + if toolSettings_ldIsGnuLd (toolSettings dflags) + then writeGNUAr output_fn $ afilter (not . isGNUSymdef) ar +@@ -303,3 +303,18 @@ linkStaticLib logger dflags unit_env o_files dep_units = do + + -- run ranlib over the archive. write*Ar does *not* create the symbol index. + runRanlib logger dflags [GHC.SysTools.FileOption "" output_fn] ++ ++loadArchives :: GhcNameVersion -> Ways -> UnitInfo -> IO Archive ++loadArchives namever ways pc = loadArchivesFromLibs libs ++ where ++ libs = unitHsLibs namever ways pc ++ map ST.unpack (unitExtDepLibsSys pc) ++ loadArchivesFromLibs :: [LibName] -> IO Archive ++ loadArchivesFromLibs libs = do ++ arPaths <- collectArchivesFromLibs namever ways pc libs ++ fmap mconcat $ forM arPaths $ \arPath -> do ++ arOrScript <- loadArchiveOrScript arPath ++ case arOrScript of ++ Ar ar -> return ar ++ ImplicitLinkerScript linkerScript -> ++ case linkerScript of ++ INPUT libNames -> loadArchivesFromLibs libNames +\ No newline at end of file +diff --git a/compiler/GHC/Linker/Unit.hs b/compiler/GHC/Linker/Unit.hs +index 652a515b48..2cc05ba9cc 100644 +--- a/compiler/GHC/Linker/Unit.hs ++++ b/compiler/GHC/Linker/Unit.hs +@@ -3,7 +3,7 @@ + module GHC.Linker.Unit + ( UnitLinkOpts (..) + , collectLinkOpts +- , collectArchives ++ , collectArchivesFromLibs + , getUnitLinkOpts + , getLibs + ) +@@ -47,13 +47,12 @@ collectLinkOpts namever ways ps = UnitLinkOpts + , otherFlags = concatMap (map ST.unpack . unitLinkerOptions) ps + } + +-collectArchives :: GhcNameVersion -> Ways -> UnitInfo -> IO [FilePath] +-collectArchives namever ways pc = ++collectArchivesFromLibs :: GhcNameVersion -> Ways -> UnitInfo -> [String] -> IO [FilePath] ++collectArchivesFromLibs namever ways pc libs = + filterM doesFileExist [ searchPath ("lib" ++ lib ++ ".a") + | searchPath <- searchPaths + , lib <- libs ] + where searchPaths = ordNub . filter notNull . libraryDirsForWay ways $ pc +- libs = unitHsLibs namever ways pc ++ map ST.unpack (unitExtDepLibsSys pc) + + -- | Either the 'unitLibraryDirs' or 'unitLibraryDynDirs' as appropriate for the way. + libraryDirsForWay :: Ways -> UnitInfo -> [String] +diff --git a/compiler/GHC/SysTools/Ar.hs b/compiler/GHC/SysTools/Ar.hs +index adba60b53c..351103fd4c 100644 +--- a/compiler/GHC/SysTools/Ar.hs ++++ b/compiler/GHC/SysTools/Ar.hs +@@ -20,11 +20,15 @@ of libtool across different platforms. + module GHC.SysTools.Ar + (ArchiveEntry(..) + ,Archive(..) ++ ,ArchiveOrScript(..) ++ ,LinkerScript(..) ++ ,LibName + ,afilter + + ,parseAr + + ,loadAr ++ ,loadArchiveOrScript + ,loadObj + ,writeBSDAr + ,writeGNUAr +@@ -45,6 +49,7 @@ import Control.Applicative + import qualified Data.ByteString as B + import qualified Data.ByteString.Char8 as C + import qualified Data.ByteString.Lazy as L ++import qualified Text.ParserCombinators.ReadP as R + #if !defined(mingw32_HOST_OS) + import qualified System.Posix.Files as POSIX + #endif +@@ -230,6 +235,68 @@ putGNUArch (Archive as) = do + processEntries = + uncurry (:) . mapAccumL processEntry (ArchiveEntry "//" 0 0 0 0 0 mempty) + ++-- | Some systems have archives that are not really archives but contain so ++-- called linker scripts. These scripts contain textual commands to the ++-- linker. This data type represents this choice between an actual archive or ++-- implicit linker script. ++-- ++-- See: https://sourceware.org/binutils/docs/ld/Implicit-Linker-Scripts.html#Implicit-Linker-Scripts ++data ArchiveOrScript = Ar Archive | ImplicitLinkerScript LinkerScript ++ deriving (Eq, Show) ++ ++-- | An AST for a linker script. ++-- ++-- At the moment this AST only supports linker scripts of the form: ++-- ++-- @INPUT(-lc++_static -lc++abi)@ ++-- ++-- Since this is exactly what is used in @nixpkgs@ for @libc++.a@. ++-- ++-- For more information on linker scripts see: ++-- https://sourceware.org/binutils/docs/ld/Scripts.html ++data LinkerScript = INPUT [LibName] ++ deriving (Eq, Show) ++ ++-- | Name of a library to link with. ++-- ++-- This is everything after the @-l@ prefix. ++type LibName = String ++ ++linkerScriptReadP :: R.ReadP LinkerScript ++linkerScriptReadP = skipSpaceChars *> inputReadP <* R.skipSpaces ++ where ++ inputReadP :: R.ReadP LinkerScript ++ inputReadP = fmap INPUT $ R.between (symbol "INPUT(") (symbol ")") $ ++ R.sepBy libReadP sep <* skipSpaceChars ++ where ++ libReadP :: R.ReadP LibName ++ libReadP = R.string "-l" *> R.many1 (R.satisfy isLibNameChar) ++ where ++ isLibNameChar c = c /= ')' && c /= ',' && c /= ' ' ++ ++ sep :: R.ReadP () ++ sep = R.char ' ' *> skipSpaceChars ++ ++ symbol :: String -> R.ReadP () ++ symbol str = R.string str *> skipSpaceChars ++ ++ skipSpaceChars :: R.ReadP () ++ skipSpaceChars = do ++ s <- R.look ++ skip s ++ where ++ skip (' ':s) = do _ <- R.get; skip s ++ skip _ = do return () ++ ++parseArOrScript :: B.ByteString -> Either (ByteOffset, String) ArchiveOrScript ++parseArOrScript bs = ++ case runGetOrFail getArch $ L.fromChunks $ pure bs of ++ Left (_, pos, msg) -> ++ case R.readP_to_S linkerScriptReadP $ C.unpack bs of ++ [(linkerScript, "")] -> Right $ ImplicitLinkerScript linkerScript ++ _ -> Left (pos, msg) ++ Right (_, _, ar) -> Right $ Ar ar ++ + parseAr :: B.ByteString -> Archive + parseAr = runGet getArch . L.fromChunks . pure + +@@ -240,6 +307,18 @@ writeGNUAr fp = L.writeFile fp . runPut . putGNUArch + loadAr :: FilePath -> IO Archive + loadAr fp = parseAr <$> B.readFile fp + ++loadArchiveOrScript :: FilePath -> IO ArchiveOrScript ++loadArchiveOrScript fp = do ++ bs <- B.readFile fp ++ case parseArOrScript bs of ++ Left (pos, msg) -> ++ error $ ++ "Error while decoding archive: " <> fp <> ++ " is neither an archive because decoding failed at position " <> ++ show pos <> " with error " <> msg <> ++ ", nor is it an implicit linker script!" ++ Right arOrScript -> return arOrScript ++ + loadObj :: FilePath -> IO ArchiveEntry + loadObj fp = do + payload <- B.readFile fp diff --git a/overlays/patches/ghc/ghc-9.6-static-linker-script-support.patch b/overlays/patches/ghc/ghc-9.6-static-linker-script-support.patch new file mode 100644 index 0000000000..0d6b98296d --- /dev/null +++ b/overlays/patches/ghc/ghc-9.6-static-linker-script-support.patch @@ -0,0 +1,193 @@ +diff --git a/compiler/GHC/Linker/Static.hs b/compiler/GHC/Linker/Static.hs +index aa51a2b7d6..04ae43cdae 100644 +--- a/compiler/GHC/Linker/Static.hs ++++ b/compiler/GHC/Linker/Static.hs +@@ -32,6 +32,8 @@ import GHC.Linker.Static.Utils + import GHC.Driver.Config.Linker + import GHC.Driver.Session + ++import qualified GHC.Data.ShortText as ST ++ + import System.FilePath + import System.Directory + import Control.Monad +@@ -294,11 +296,9 @@ linkStaticLib logger dflags unit_env o_files dep_units = do + | otherwise + = filter ((/= rtsUnitId) . unitId) pkg_cfgs_init + +- archives <- concatMapM (collectArchives namever ways_) pkg_cfgs +- +- ar <- foldl mappend +- <$> (Archive <$> mapM loadObj modules) +- <*> mapM loadAr archives ++ arFromArchives <- mconcat <$> mapM (loadArchives namever ways_) pkg_cfgs ++ arFromObjects <- Archive <$> mapM loadObj modules ++ let ar = arFromObjects `mappend` arFromArchives + + if toolSettings_ldIsGnuLd (toolSettings dflags) + then writeGNUAr output_fn $ afilter (not . isGNUSymdef) ar +@@ -306,3 +306,18 @@ linkStaticLib logger dflags unit_env o_files dep_units = do + + -- run ranlib over the archive. write*Ar does *not* create the symbol index. + runRanlib logger dflags [GHC.SysTools.FileOption "" output_fn] ++ ++loadArchives :: GhcNameVersion -> Ways -> UnitInfo -> IO Archive ++loadArchives namever ways pc = loadArchivesFromLibs libs ++ where ++ libs = unitHsLibs namever ways pc ++ map ST.unpack (unitExtDepLibsSys pc) ++ loadArchivesFromLibs :: [LibName] -> IO Archive ++ loadArchivesFromLibs libs = do ++ arPaths <- collectArchivesFromLibs namever ways pc libs ++ fmap mconcat $ forM arPaths $ \arPath -> do ++ arOrScript <- loadArchiveOrScript arPath ++ case arOrScript of ++ Ar ar -> return ar ++ ImplicitLinkerScript linkerScript -> ++ case linkerScript of ++ INPUT libNames -> loadArchivesFromLibs libNames +\ No newline at end of file +diff --git a/compiler/GHC/Linker/Unit.hs b/compiler/GHC/Linker/Unit.hs +index 6965edd707..7266bd0082 100644 +--- a/compiler/GHC/Linker/Unit.hs ++++ b/compiler/GHC/Linker/Unit.hs +@@ -2,7 +2,7 @@ + -- | Linking Haskell units + module GHC.Linker.Unit + ( collectLinkOpts +- , collectArchives ++ , collectArchivesFromLibs + , getUnitLinkOpts + , getLibs + ) +@@ -39,13 +39,12 @@ collectLinkOpts namever ways ps = + concatMap (map ST.unpack . unitLinkerOptions) ps + ) + +-collectArchives :: GhcNameVersion -> Ways -> UnitInfo -> IO [FilePath] +-collectArchives namever ways pc = ++collectArchivesFromLibs :: GhcNameVersion -> Ways -> UnitInfo -> [String] -> IO [FilePath] ++collectArchivesFromLibs namever ways pc libs = + filterM doesFileExist [ searchPath ("lib" ++ lib ++ ".a") + | searchPath <- searchPaths + , lib <- libs ] + where searchPaths = ordNub . filter notNull . libraryDirsForWay ways $ pc +- libs = unitHsLibs namever ways pc ++ map ST.unpack (unitExtDepLibsSys pc) + + -- | Either the 'unitLibraryDirs' or 'unitLibraryDynDirs' as appropriate for the way. + libraryDirsForWay :: Ways -> UnitInfo -> [String] +diff --git a/compiler/GHC/SysTools/Ar.hs b/compiler/GHC/SysTools/Ar.hs +index adba60b53c..351103fd4c 100644 +--- a/compiler/GHC/SysTools/Ar.hs ++++ b/compiler/GHC/SysTools/Ar.hs +@@ -20,11 +20,15 @@ of libtool across different platforms. + module GHC.SysTools.Ar + (ArchiveEntry(..) + ,Archive(..) ++ ,ArchiveOrScript(..) ++ ,LinkerScript(..) ++ ,LibName + ,afilter + + ,parseAr + + ,loadAr ++ ,loadArchiveOrScript + ,loadObj + ,writeBSDAr + ,writeGNUAr +@@ -45,6 +49,7 @@ import Control.Applicative + import qualified Data.ByteString as B + import qualified Data.ByteString.Char8 as C + import qualified Data.ByteString.Lazy as L ++import qualified Text.ParserCombinators.ReadP as R + #if !defined(mingw32_HOST_OS) + import qualified System.Posix.Files as POSIX + #endif +@@ -230,6 +235,68 @@ putGNUArch (Archive as) = do + processEntries = + uncurry (:) . mapAccumL processEntry (ArchiveEntry "//" 0 0 0 0 0 mempty) + ++-- | Some systems have archives that are not really archives but contain so ++-- called linker scripts. These scripts contain textual commands to the ++-- linker. This data type represents this choice between an actual archive or ++-- implicit linker script. ++-- ++-- See: https://sourceware.org/binutils/docs/ld/Implicit-Linker-Scripts.html#Implicit-Linker-Scripts ++data ArchiveOrScript = Ar Archive | ImplicitLinkerScript LinkerScript ++ deriving (Eq, Show) ++ ++-- | An AST for a linker script. ++-- ++-- At the moment this AST only supports linker scripts of the form: ++-- ++-- @INPUT(-lc++_static -lc++abi)@ ++-- ++-- Since this is exactly what is used in @nixpkgs@ for @libc++.a@. ++-- ++-- For more information on linker scripts see: ++-- https://sourceware.org/binutils/docs/ld/Scripts.html ++data LinkerScript = INPUT [LibName] ++ deriving (Eq, Show) ++ ++-- | Name of a library to link with. ++-- ++-- This is everything after the @-l@ prefix. ++type LibName = String ++ ++linkerScriptReadP :: R.ReadP LinkerScript ++linkerScriptReadP = skipSpaceChars *> inputReadP <* R.skipSpaces ++ where ++ inputReadP :: R.ReadP LinkerScript ++ inputReadP = fmap INPUT $ R.between (symbol "INPUT(") (symbol ")") $ ++ R.sepBy libReadP sep <* skipSpaceChars ++ where ++ libReadP :: R.ReadP LibName ++ libReadP = R.string "-l" *> R.many1 (R.satisfy isLibNameChar) ++ where ++ isLibNameChar c = c /= ')' && c /= ',' && c /= ' ' ++ ++ sep :: R.ReadP () ++ sep = R.char ' ' *> skipSpaceChars ++ ++ symbol :: String -> R.ReadP () ++ symbol str = R.string str *> skipSpaceChars ++ ++ skipSpaceChars :: R.ReadP () ++ skipSpaceChars = do ++ s <- R.look ++ skip s ++ where ++ skip (' ':s) = do _ <- R.get; skip s ++ skip _ = do return () ++ ++parseArOrScript :: B.ByteString -> Either (ByteOffset, String) ArchiveOrScript ++parseArOrScript bs = ++ case runGetOrFail getArch $ L.fromChunks $ pure bs of ++ Left (_, pos, msg) -> ++ case R.readP_to_S linkerScriptReadP $ C.unpack bs of ++ [(linkerScript, "")] -> Right $ ImplicitLinkerScript linkerScript ++ _ -> Left (pos, msg) ++ Right (_, _, ar) -> Right $ Ar ar ++ + parseAr :: B.ByteString -> Archive + parseAr = runGet getArch . L.fromChunks . pure + +@@ -240,6 +307,18 @@ writeGNUAr fp = L.writeFile fp . runPut . putGNUArch + loadAr :: FilePath -> IO Archive + loadAr fp = parseAr <$> B.readFile fp + ++loadArchiveOrScript :: FilePath -> IO ArchiveOrScript ++loadArchiveOrScript fp = do ++ bs <- B.readFile fp ++ case parseArOrScript bs of ++ Left (pos, msg) -> ++ error $ ++ "Error while decoding archive: " <> fp <> ++ " is neither an archive because decoding failed at position " <> ++ show pos <> " with error " <> msg <> ++ ", nor is it an implicit linker script!" ++ Right arOrScript -> return arOrScript ++ + loadObj :: FilePath -> IO ArchiveEntry + loadObj fp = do + payload <- B.readFile fp From f0b04dcf66c8057a23907c4f03c459d7f484aa19 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sat, 15 Feb 2025 01:32:50 +1300 Subject: [PATCH 161/206] Fix for libsodium on android --- test/exe-dlls/default.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/exe-dlls/default.nix b/test/exe-dlls/default.nix index 6d7a7ba475..ad0bf31e7c 100644 --- a/test/exe-dlls/default.nix +++ b/test/exe-dlls/default.nix @@ -8,7 +8,10 @@ let inherit compiler-nix-name evalPackages; src = testSrc "exe-dlls"; cabalProjectLocal = builtins.readFile ../cabal.project.local; - modules = import ../modules.nix; + modules = import ../modules.nix ++ optional stdenv.hostPlatform.isAndroid { + packages.libsodium.configureFlags = [ "--c2hs-option=--cppopts=-D_Null_unspecified=" ]; + packages.libsodium.components.library.hardeningDisable = ["fortify"]; + }; }; packages = project.hsPkgs; From 5d4645759bd88224bb01217626e11176de401258 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sat, 15 Feb 2025 09:54:49 +1300 Subject: [PATCH 162/206] Move libsodium fix to test/modules.nix --- test/exe-dlls/default.nix | 5 +---- test/modules.nix | 8 +++++++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/test/exe-dlls/default.nix b/test/exe-dlls/default.nix index ad0bf31e7c..6d7a7ba475 100644 --- a/test/exe-dlls/default.nix +++ b/test/exe-dlls/default.nix @@ -8,10 +8,7 @@ let inherit compiler-nix-name evalPackages; src = testSrc "exe-dlls"; cabalProjectLocal = builtins.readFile ../cabal.project.local; - modules = import ../modules.nix ++ optional stdenv.hostPlatform.isAndroid { - packages.libsodium.configureFlags = [ "--c2hs-option=--cppopts=-D_Null_unspecified=" ]; - packages.libsodium.components.library.hardeningDisable = ["fortify"]; - }; + modules = import ../modules.nix; }; packages = project.hsPkgs; diff --git a/test/modules.nix b/test/modules.nix index 83b100fcfc..abe19e0dcb 100644 --- a/test/modules.nix +++ b/test/modules.nix @@ -1,4 +1,10 @@ [{ # See https://github.com/haskell-cryptography/HsOpenSSL/issues/95 packages.HsOpenSSL.ghcOptions = ["-optc=-Wno-incompatible-pointer-types"]; -}] +} + +({pkgs, lib, ...}: lib.mkIf pkgs.stdenv.hostPlatform.isAndroid { + packages.libsodium.configureFlags = [ "--c2hs-option=--cppopts=-D_Null_unspecified=" ]; + packages.libsodium.components.library.hardeningDisable = ["fortify"]; +}) +] From 581e381144aafa0194e38c716ce71657d95291c1 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 17 Feb 2025 15:38:33 +1300 Subject: [PATCH 163/206] Fix darwin builds for nixpkgs 24.11 --- ci.nix | 1 - modules/configuration-nix.nix | 35 ++++++++++++++++++++++------------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/ci.nix b/ci.nix index 00a1e33caf..e806760e91 100644 --- a/ci.nix +++ b/ci.nix @@ -19,7 +19,6 @@ # short names for nixpkgs versions nixpkgsVersions = { "unstable" = inputs.nixpkgs-unstable; - } // lib.optionalAttrs (system != "x86_64-darwin") { "R2411" = inputs.nixpkgs-2411; }; diff --git a/modules/configuration-nix.nix b/modules/configuration-nix.nix index 6660182120..c7195f1703 100644 --- a/modules/configuration-nix.nix +++ b/modules/configuration-nix.nix @@ -3,7 +3,7 @@ # package sets out of this repo. Ideally, this file is only used for # fixing things that are broken due to the Nix infrastructure. -{ pkgs, config, ... }: +{ pkgs, lib, config, ... }: let fromUntil = from: until: patch: { version }: if builtins.compareVersions version from >= 0 @@ -35,9 +35,9 @@ in addPackageKeys { # These packages have `license: LGPL` in their .cabal file, but # do not specify the version. Setting the version here on # examination of the license files included in the packages. - packages.hscolour.package.license = pkgs.lib.mkForce "LGPL-2.1-only"; - packages.cpphs.package.license = pkgs.lib.mkForce "LGPL-2.1-only"; - packages.polyparse.package.license = pkgs.lib.mkForce "LGPL-2.1-only"; + packages.hscolour.package.license = lib.mkForce "LGPL-2.1-only"; + packages.cpphs.package.license = lib.mkForce "LGPL-2.1-only"; + packages.polyparse.package.license = lib.mkForce "LGPL-2.1-only"; # These two patches are needed by GHCJS packages.Cabal.patches = [ @@ -63,14 +63,14 @@ in addPackageKeys { # # We now expose genprimopcode and deriveConstants from ghc directly (this is not in line with # with upstream ghc) to be able to re-build lib:ghc. - packages.ghc.components.library.build-tools = pkgs.lib.mkForce ( - pkgs.lib.optionals (__compareVersions config.hsPkgs.ghc.identifier.version "9.4.1" > 0) [ + packages.ghc.components.library.build-tools = lib.mkForce ( + lib.optionals (__compareVersions config.hsPkgs.ghc.identifier.version "9.4.1" > 0) [ (config.hsPkgs.buildPackages.alex.components.exes.alex or pkgs.buildPackages.alex) (config.hsPkgs.buildPackages.happy.components.exes.happy or pkgs.buildPackages.happy) ]); # Remove dependency on hsc2hs (hsc2hs should be in ghc derivation) - packages.mintty.components.library.build-tools = pkgs.lib.mkForce []; + packages.mintty.components.library.build-tools = lib.mkForce []; packages.ghc-lib-parser.patches = [ (fromUntil "8.10.0.0" "9.2" ../overlays/patches/ghc-lib-parser-8.10-global-unique-counters-in-rts.patch) @@ -86,7 +86,7 @@ in addPackageKeys { # See https://github.com/input-output-hk/haskell.nix/issues/1455 # This is a work around to make `ghcide` and `haskell-language-server` build with the unboxed tuple patch. - packages.ghcide = pkgs.lib.mkIf (__elem config.compiler.nix-name [ + packages.ghcide = lib.mkIf (__elem config.compiler.nix-name [ # Work out if we have applied the unboxed tupple patch in overlays/bootstrap.nix "ghc8101" "ghc8102" "ghc8103" "ghc8104" "ghc8105" "ghc8106" "ghc8107" "ghc810420210212" ]) { @@ -97,7 +97,7 @@ in addPackageKeys { (fromUntil "2.2.0.0" "2.3.0.0" ../patches/ghcide-2.2-unboxed-tuple-fix-issue-1455.patch) ] # This is needed for a patch only applied to ghc810420210212 - ++ pkgs.lib.optional (__elem config.compiler.nix-name [ + ++ lib.optional (__elem config.compiler.nix-name [ "ghc810420210212" ]) (from "1.7.0.0" ../patches/ghcide-1.7-plutus-ghc.patch); flags = { @@ -119,9 +119,9 @@ in addPackageKeys { (fromUntil "0.9.1" "0.9.2" ../patches/languge-c-int128.patch) ]; - packages.discount.components.library.libs = pkgs.lib.mkForce [ pkgs.discount ]; + packages.discount.components.library.libs = lib.mkForce [ pkgs.discount ]; - packages.llvm-hs.components.library.build-tools = pkgs.lib.mkForce [ + packages.llvm-hs.components.library.build-tools = lib.mkForce [ (fromUntil "5.0.0" "6" pkgs.llvmPackages_5.llvm) (fromUntil "6.0.0" "7" pkgs.llvmPackages_6.llvm) (fromUntil "7.0.0" "8" pkgs.llvmPackages_7.llvm) @@ -185,7 +185,7 @@ in addPackageKeys { # https://gitlab.haskell.org/ghc/ghc/-/issues/23392 # Using -j1 works around the issue. packages.gi-gtk.components.library.ghcOptions = - pkgs.lib.optional ( + lib.optional ( builtins.compareVersions config.compiler.version "9.6.1" >= 0 && builtins.compareVersions config.compiler.version "9.9" < 0) "-j1"; @@ -193,5 +193,14 @@ in addPackageKeys { # text package to fail with: # error: inlining failed in call to ‘always_inline’ ‘void* memcpy(void*, const void*, size_t)’: target specific option mismatch packages.text.components.library.hardeningDisable = - pkgs.lib.optionals pkgs.stdenv.hostPlatform.isMusl ["fortify"]; + lib.optionals pkgs.stdenv.hostPlatform.isMusl ["fortify"]; + + # error: use of undeclared identifier 'IP_RECVTOS' + # for whatever reason nixpkgs 24.11 defines x86_64-darwin + # to be sdk-10.12.2, and aarch64-darwin to be sdk-11. + # nixpkgs 25.05 will drop sdk-10.12, and unify aarch64 and x86 at last. + packages.network.components.library.libs = lib.mkIf (pkgs.stdenv.hostPlatform.isDarwin && lib.versionOlder pkgs.apple-sdk.version "11") [ + pkgs.apple-sdk_11 + (pkgs.darwinMinVersionHook "11.0") + ]; } From 8fd9d41efa3b08aad9a2eca19737b7dfa796fb54 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 20 Feb 2025 16:19:09 +1300 Subject: [PATCH 164/206] nix flake update iserv-proxy --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 7481e6bf7a..c1bd919fb8 100644 --- a/flake.lock +++ b/flake.lock @@ -339,11 +339,11 @@ "iserv-proxy": { "flake": false, "locked": { - "lastModified": 1739309910, - "narHash": "sha256-aSl3mxch3Mi5zrYPDOTLVXIm3CCZafB8FGRHrcl7CKI=", + "lastModified": 1740021487, + "narHash": "sha256-UcQZu+XiE/7lMxQoqJZc4eBGQDWxA/la0HvgbNamQ4g=", "owner": "stable-haskell", "repo": "iserv-proxy", - "rev": "9095fc6606ab946a6eb49d77b5065aae1d81da1b", + "rev": "b9711cc1ce1c70de4c5d3483eb3a8193c41e71ee", "type": "github" }, "original": { From 0fffbb621ca3a91fe11699b47d88b17c7710d884 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 21 Feb 2025 15:46:30 +1300 Subject: [PATCH 165/206] Move iserv-proxy-interpreter overrides into overlays/haskell.nix --- overlays/armv6l-linux.nix | 2 +- overlays/haskell.nix | 14 ++++++++++++-- overlays/linux-cross.nix | 9 +++------ overlays/mingw_w64.nix | 9 +++------ overlays/windows.nix | 2 +- 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/overlays/armv6l-linux.nix b/overlays/armv6l-linux.nix index f093753c99..e2df3cdaf5 100644 --- a/overlays/armv6l-linux.nix +++ b/overlays/armv6l-linux.nix @@ -18,7 +18,7 @@ final: prev: inherit (pkgs) gmp; # iserv-proxy needs to come from the buildPackages, as it needs to run on the # build host. - inherit (final.haskell-nix.iserv-proxy-exes.${config.compiler.nix-name}) iserv-proxy iserv-proxy-interpreter; + inherit (final.haskell-nix.iserv-proxy-exes.${config.compiler.nix-name}) iserv-proxy iserv-proxy-interpreter iserv-proxy-interpreter-prof; } // { # we can perform testing of cross compiled test-suites by using wine. # Therefore let's enable doCrossCheck here! diff --git a/overlays/haskell.nix b/overlays/haskell.nix index 5f272b331b..ce38e1f9f4 100644 --- a/overlays/haskell.nix +++ b/overlays/haskell.nix @@ -1056,10 +1056,20 @@ final: prev: { allow-newer: *:base, *:bytestring ''; })).hsPkgs.iserv-proxy.components.exes; - in { + in rec { # We need the proxy for the build system and the interpreter for the target inherit (exes final.pkgsBuildBuild) iserv-proxy; - inherit (exes final) iserv-proxy-interpreter; + iserv-proxy-interpreter = (exes final).iserv-proxy-interpreter.override + (lib.optionalAttrs hostPlatform.isAndroid { + setupBuildFlags = ["--ghc-option=-optl-static" ] ++ lib.optional hostPlatform.isAarch32 "--ghc-option=-optl-no-pie"; + enableDebugRTS = true; + } // lib.optionalAttrs hostPlatform.isWindows { + setupBuildFlags = ["--ghc-option=-optl-Wl,--disable-dynamicbase,--disable-high-entropy-va,--image-base=0x400000" ]; + enableDebugRTS = true; + }); + iserv-proxy-interpreter-prof = iserv-proxy-interpreter.override { + enableProfiling = true; + }; }) final.haskell-nix.compiler; # Add this to your tests to make all the dependencies of haskell.nix diff --git a/overlays/linux-cross.nix b/overlays/linux-cross.nix index b49bbc62ed..241c0b6999 100644 --- a/overlays/linux-cross.nix +++ b/overlays/linux-cross.nix @@ -6,6 +6,7 @@ , qemuSuffix ? (haskellLib.qemuByHostPlatform hostPlatform) , iserv-proxy , iserv-proxy-interpreter +, iserv-proxy-interpreter-prof , gmp , buildPlatform , hostPlatform @@ -36,7 +37,7 @@ let let interpreter = if enableProfiling - then iserv-proxy-interpreter.override { inherit enableProfiling; } + then iserv-proxy-interpreter-prof else iserv-proxy-interpreter; in writeShellScriptBin ("iserv-wrapper" + lib.optionalString enableProfiling "-prof") '' @@ -48,11 +49,7 @@ let unset configureFlags PORT=$((5000 + $RANDOM % 5000)) (>&2 echo "---> Starting ${interpreter.exeName} on port $PORT") - ${qemu}/bin/qemu-${qemuSuffix} ${interpreter.override - (lib.optionalAttrs hostPlatform.isAndroid { - setupBuildFlags = ["--ghc-option=-optl-static" ] ++ lib.optional hostPlatform.isAarch32 "--ghc-option=-optl-no-pie"; - enableDebugRTS = true; - })}/bin/${interpreter.exeName} tmp $PORT $ISERV_ARGS & + ${qemu}/bin/qemu-${qemuSuffix} ${interpreter}/bin/${interpreter.exeName} tmp $PORT $ISERV_ARGS & (>&2 echo "---| ${interpreter.exeName} should have started on $PORT") RISERV_PID="$!" ${iserv-proxy}/bin/iserv-proxy $@ 127.0.0.1 "$PORT" $PROXY_ARGS diff --git a/overlays/mingw_w64.nix b/overlays/mingw_w64.nix index a309a8d10e..7cfc744723 100644 --- a/overlays/mingw_w64.nix +++ b/overlays/mingw_w64.nix @@ -6,6 +6,7 @@ , mingw_w64_pthreads , iserv-proxy , iserv-proxy-interpreter +, iserv-proxy-interpreter-prof , gmp , hostPlatform , symlinkJoin @@ -18,7 +19,7 @@ let let interpreter = if enableProfiling - then iserv-proxy-interpreter.override { inherit enableProfiling; } + then iserv-proxy-interpreter-prof else iserv-proxy-interpreter; no-load-call = lib.optionalString (interpreter.exeName != "remote-iserv.exe") "--no-load-call"; in @@ -37,11 +38,7 @@ let PORT=$((5000 + $RANDOM % 5000)) (>&2 echo "---> Starting ${interpreter.exeName} on port $PORT") REMOTE_ISERV=$(mktemp -d) - ln -s ${interpreter.override - { - enableDebugRTS = true; - setupBuildFlags = ["--ghc-option=-optl-Wl,--disable-dynamicbase,--disable-high-entropy-va,--image-base=0x400000" ]; - }}/bin/* $REMOTE_ISERV + ln -s ${interpreter}/bin/* $REMOTE_ISERV # See coment in comp-builder.nix for where this comes from and why it's here # TODO use `LINK_DLL_FOLDERS` here once it is in all the nixpkgs we want to support. for p in $pkgsHostTargetAsString; do diff --git a/overlays/windows.nix b/overlays/windows.nix index 3df413b940..d95c6e268a 100644 --- a/overlays/windows.nix +++ b/overlays/windows.nix @@ -50,7 +50,7 @@ final: prev: inherit (pkgs.pkgsBuildBuild) symlinkJoin; # iserv-proxy needs to come from the buildPackages, as it needs to run on the # build host. - inherit (final.haskell-nix.iserv-proxy-exes.${config.compiler.nix-name}) iserv-proxy iserv-proxy-interpreter; + inherit (final.haskell-nix.iserv-proxy-exes.${config.compiler.nix-name}) iserv-proxy iserv-proxy-interpreter iserv-prox-interpreter-prof; } // { # we can perform testing of cross compiled test-suites by using wine. # Therefore let's enable doCrossCheck here! From eaa095ad0adebf79de846ba932add1520c35474f Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 21 Feb 2025 16:08:24 +1300 Subject: [PATCH 166/206] Move iserv-proxy-interpreter overrides into overlays/haskell.nix --- overlays/haskell.nix | 6 +++--- overlays/windows.nix | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/overlays/haskell.nix b/overlays/haskell.nix index ce38e1f9f4..625c5f8713 100644 --- a/overlays/haskell.nix +++ b/overlays/haskell.nix @@ -1060,10 +1060,10 @@ final: prev: { # We need the proxy for the build system and the interpreter for the target inherit (exes final.pkgsBuildBuild) iserv-proxy; iserv-proxy-interpreter = (exes final).iserv-proxy-interpreter.override - (lib.optionalAttrs hostPlatform.isAndroid { - setupBuildFlags = ["--ghc-option=-optl-static" ] ++ lib.optional hostPlatform.isAarch32 "--ghc-option=-optl-no-pie"; + (final.lib.optionalAttrs final.stdenv.hostPlatform.isAndroid { + setupBuildFlags = ["--ghc-option=-optl-static" ] ++ final.lib.optional final.stdenv.hostPlatform.isAarch32 "--ghc-option=-optl-no-pie"; enableDebugRTS = true; - } // lib.optionalAttrs hostPlatform.isWindows { + } // final.lib.optionalAttrs final.stdenv.hostPlatform.isWindows { setupBuildFlags = ["--ghc-option=-optl-Wl,--disable-dynamicbase,--disable-high-entropy-va,--image-base=0x400000" ]; enableDebugRTS = true; }); diff --git a/overlays/windows.nix b/overlays/windows.nix index d95c6e268a..a1891268f3 100644 --- a/overlays/windows.nix +++ b/overlays/windows.nix @@ -50,7 +50,7 @@ final: prev: inherit (pkgs.pkgsBuildBuild) symlinkJoin; # iserv-proxy needs to come from the buildPackages, as it needs to run on the # build host. - inherit (final.haskell-nix.iserv-proxy-exes.${config.compiler.nix-name}) iserv-proxy iserv-proxy-interpreter iserv-prox-interpreter-prof; + inherit (final.haskell-nix.iserv-proxy-exes.${config.compiler.nix-name}) iserv-proxy iserv-proxy-interpreter iserv-proxy-interpreter-prof; } // { # we can perform testing of cross compiled test-suites by using wine. # Therefore let's enable doCrossCheck here! From 540b8a2f3d99a62100036cbfe2132db9d4fa756d Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 24 Feb 2025 16:45:14 +1300 Subject: [PATCH 167/206] nix flake update iserv-proxy --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index c1bd919fb8..2de7ec1c7a 100644 --- a/flake.lock +++ b/flake.lock @@ -339,11 +339,11 @@ "iserv-proxy": { "flake": false, "locked": { - "lastModified": 1740021487, - "narHash": "sha256-UcQZu+XiE/7lMxQoqJZc4eBGQDWxA/la0HvgbNamQ4g=", + "lastModified": 1740368650, + "narHash": "sha256-b1hQn/oaC0WPIVBgflKhdLmInRUCk7HLLYSsE0LUX7w=", "owner": "stable-haskell", "repo": "iserv-proxy", - "rev": "b9711cc1ce1c70de4c5d3483eb3a8193c41e71ee", + "rev": "89ae671b116c2797c485815af7837e71fba96312", "type": "github" }, "original": { From de27fe3d19a7c737bc874462b730353d75028392 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 24 Feb 2025 17:02:29 +1300 Subject: [PATCH 168/206] Disable musl32 tests (unhandled ELF relocation(Rel) type 10) --- test/annotations/default.nix | 4 +++- test/js-template-haskell/default.nix | 4 +++- test/th-dlls/default.nix | 2 ++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/test/annotations/default.nix b/test/annotations/default.nix index b41a6b1bd8..3082edbdd6 100644 --- a/test/annotations/default.nix +++ b/test/annotations/default.nix @@ -11,7 +11,9 @@ let in recurseIntoAttrs { meta.disabled = stdenv.hostPlatform.isGhcjs # Failed to lookup symbol: __aarch64_swp8_acq_rel - || (builtins.elem compiler-nix-name ["ghc947" "ghc948"] && haskellLib.isCrossHost && stdenv.hostPlatform.isAarch64); + || (builtins.elem compiler-nix-name ["ghc947" "ghc948"] && haskellLib.isCrossHost && stdenv.hostPlatform.isAarch64) + # unhandled ELF relocation(Rel) type 10 + || (stdenv.hostPlatform.isMusl && stdenv.hostPlatform.isx86_32); ifdInputs = { inherit (project) plan-nix; }; diff --git a/test/js-template-haskell/default.nix b/test/js-template-haskell/default.nix index c5663e8ad4..b3cd2ee65d 100644 --- a/test/js-template-haskell/default.nix +++ b/test/js-template-haskell/default.nix @@ -24,7 +24,9 @@ in recurseIntoAttrs { }; meta.disabled = stdenv.buildPlatform != stdenv.hostPlatform && stdenv.hostPlatform.isAarch64 - || builtins.elem compiler-nix-name ["ghc91320241204"]; + || builtins.elem compiler-nix-name ["ghc91320241204"] + # unhandled ELF relocation(Rel) type 10 + || (stdenv.hostPlatform.isMusl && stdenv.hostPlatform.isx86_32); build = packages.js-template-haskell.components.library; check = packages.js-template-haskell.checks.test; diff --git a/test/th-dlls/default.nix b/test/th-dlls/default.nix index 38366f462f..f150173412 100644 --- a/test/th-dlls/default.nix +++ b/test/th-dlls/default.nix @@ -26,6 +26,8 @@ in recurseIntoAttrs { || (builtins.elem compiler-nix-name ["ghc947" "ghc948"] && haskellLib.isCrossHost && stdenv.hostPlatform.isAarch64) # We have been unable to get windows cross compilation of th-orphans to work for GHC 8.10 using the latest nixpkgs || (compiler-nix-name == "ghc8107" && stdenv.hostPlatform.isWindows) + # unhandled ELF relocation(Rel) type 10 + || (stdenv.hostPlatform.isMusl && stdenv.hostPlatform.isx86_32) ; ifdInputs = { From 3feaab06f4bb80af5f4f211f7adc963ded9a57c5 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 25 Feb 2025 17:37:30 +1300 Subject: [PATCH 169/206] Add to fix resolveArchive for libiserv --- ...hc-9.12-static-linker-script-support.patch | 49 +++++++++++++++++++ ...ghc-9.6-static-linker-script-support.patch | 49 +++++++++++++++++++ 2 files changed, 98 insertions(+) diff --git a/overlays/patches/ghc/ghc-9.12-static-linker-script-support.patch b/overlays/patches/ghc/ghc-9.12-static-linker-script-support.patch index d68c1755f4..01b728ad5f 100644 --- a/overlays/patches/ghc/ghc-9.12-static-linker-script-support.patch +++ b/overlays/patches/ghc/ghc-9.12-static-linker-script-support.patch @@ -191,3 +191,52 @@ index adba60b53c..351103fd4c 100644 loadObj :: FilePath -> IO ArchiveEntry loadObj fp = do payload <- B.readFile fp +diff --git a/compiler/GHC/Linker/Loader.hs b/compiler/GHC/Linker/Loader.hs +index 5cb73b1..99e7d01 100644 +--- a/compiler/GHC/Linker/Loader.hs ++++ b/compiler/GHC/Linker/Loader.hs +@@ -61,6 +61,7 @@ import GHC.ByteCode.Asm + import GHC.ByteCode.Types + + import GHC.SysTools ++import GHC.SysTools.Ar (loadArchiveOrScript, ArchiveOrScript(..), LinkerScript(..)) + + import GHC.Types.Basic + import GHC.Types.Name +@@ -1151,7 +1152,7 @@ loadPackage interp hsc_env pkg + #endif + objs = [ obj | Objects objs <- classifieds + , obj <- objs ] +- archs = [ arch | Archive arch <- classifieds ] ++ archPaths = [ arch | Archive arch <- classifieds ] + + -- Add directories to library search paths + let dll_paths = map takeDirectory known_dlls +@@ -1175,7 +1176,8 @@ loadPackage interp hsc_env pkg + -- Ordering isn't important here, because we do one final link + -- step to resolve everything. + mapM_ (loadObj interp) objs +- mapM_ (loadArchive interp) archs ++ resolvedArchives <- resolveArchives interp hsc_env dirs_env gcc_paths archPaths ++ mapM_ (loadArchive interp) resolvedArchives + + maybePutStr logger "linking ... " + ok <- resolveObjs interp +@@ -1194,6 +1196,16 @@ loadPackage interp hsc_env pkg + <> pprUnitInfoForUser pkg <> text "'" + in throwGhcExceptionIO (InstallationError (showSDoc dflags errmsg)) + ++resolveArchives :: Interp -> HscEnv -> [FilePath] -> [FilePath] -> [FilePath] -> IO [FilePath] ++resolveArchives interp hsc_env dirs_env gcc_paths paths = fmap concat $ forM paths $ \path -> do ++ arOrScript <- loadArchiveOrScript path ++ case arOrScript of ++ Ar _ -> return [path] ++ ImplicitLinkerScript (INPUT libs) -> do ++ classifiedLibs <- mapM (locateLib interp hsc_env False dirs_env gcc_paths) libs ++ let resolvedPaths = [arch | Archive arch <- classifiedLibs] ++ resolveArchives interp hsc_env dirs_env gcc_paths resolvedPaths ++ + {- + Note [Crash early load_dyn and locateLib] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + diff --git a/overlays/patches/ghc/ghc-9.6-static-linker-script-support.patch b/overlays/patches/ghc/ghc-9.6-static-linker-script-support.patch index 0d6b98296d..58e7981dba 100644 --- a/overlays/patches/ghc/ghc-9.6-static-linker-script-support.patch +++ b/overlays/patches/ghc/ghc-9.6-static-linker-script-support.patch @@ -191,3 +191,52 @@ index adba60b53c..351103fd4c 100644 loadObj :: FilePath -> IO ArchiveEntry loadObj fp = do payload <- B.readFile fp +diff --git a/compiler/GHC/Linker/Loader.hs b/compiler/GHC/Linker/Loader.hs +index 5cb73b1..99e7d01 100644 +--- a/compiler/GHC/Linker/Loader.hs ++++ b/compiler/GHC/Linker/Loader.hs +@@ -61,6 +61,7 @@ import GHC.ByteCode.Asm + import GHC.ByteCode.Types + + import GHC.SysTools ++import GHC.SysTools.Ar (loadArchiveOrScript, ArchiveOrScript(..), LinkerScript(..)) + + import GHC.Types.Basic + import GHC.Types.Name +@@ -1151,7 +1152,7 @@ loadPackage interp hsc_env pkg + #endif + objs = [ obj | Objects objs <- classifieds + , obj <- objs ] +- archs = [ arch | Archive arch <- classifieds ] ++ archPaths = [ arch | Archive arch <- classifieds ] + + -- Add directories to library search paths + let dll_paths = map takeDirectory known_dlls +@@ -1175,7 +1176,8 @@ loadPackage interp hsc_env pkg + -- Ordering isn't important here, because we do one final link + -- step to resolve everything. + mapM_ (loadObj interp) objs +- mapM_ (loadArchive interp) archs ++ resolvedArchives <- resolveArchives interp hsc_env dirs_env gcc_paths archPaths ++ mapM_ (loadArchive interp) resolvedArchives + + maybePutStr logger "linking ... " + ok <- resolveObjs interp +@@ -1194,6 +1196,16 @@ loadPackage interp hsc_env pkg + <> pprUnitInfoForUser pkg <> text "'" + in throwGhcExceptionIO (InstallationError (showSDoc dflags errmsg)) + ++resolveArchives :: Interp -> HscEnv -> [FilePath] -> [FilePath] -> [FilePath] -> IO [FilePath] ++resolveArchives interp hsc_env dirs_env gcc_paths paths = fmap concat $ forM paths $ \path -> do ++ arOrScript <- loadArchiveOrScript path ++ case arOrScript of ++ Ar _ -> return [path] ++ ImplicitLinkerScript (INPUT libs) -> do ++ classifiedLibs <- mapM (locateLib interp hsc_env False dirs_env gcc_paths) libs ++ let resolvedPaths = [arch | Archive arch <- classifiedLibs] ++ resolveArchives interp hsc_env dirs_env gcc_paths resolvedPaths ++ + {- + Note [Crash early load_dyn and locateLib] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + From 1c5a1fcb1785fa99be0f5ffd3f27f669b6a9844c Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 27 Feb 2025 12:01:53 +1300 Subject: [PATCH 170/206] nix flake update iserv-proxy --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 2de7ec1c7a..8d4d913c63 100644 --- a/flake.lock +++ b/flake.lock @@ -339,11 +339,11 @@ "iserv-proxy": { "flake": false, "locked": { - "lastModified": 1740368650, - "narHash": "sha256-b1hQn/oaC0WPIVBgflKhdLmInRUCk7HLLYSsE0LUX7w=", + "lastModified": 1740610869, + "narHash": "sha256-XkP9SoqrrMAFf5lnr0dYi0p+cnIrd28yPVwnZ6Vyde4=", "owner": "stable-haskell", "repo": "iserv-proxy", - "rev": "89ae671b116c2797c485815af7837e71fba96312", + "rev": "531768c4be723e00eddb140ed76f433855d19809", "type": "github" }, "original": { From 99765109af78163a31e6b1e5fa2dbad973915fc5 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 27 Feb 2025 17:43:09 +1300 Subject: [PATCH 171/206] nix flake update iserv-proxy --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 8d4d913c63..d93bce3e13 100644 --- a/flake.lock +++ b/flake.lock @@ -339,11 +339,11 @@ "iserv-proxy": { "flake": false, "locked": { - "lastModified": 1740610869, - "narHash": "sha256-XkP9SoqrrMAFf5lnr0dYi0p+cnIrd28yPVwnZ6Vyde4=", + "lastModified": 1740631337, + "narHash": "sha256-g5qmmoiaPqsoK9hdqdX7EuuhFAtG8f5xLLkrYdNzC3o=", "owner": "stable-haskell", "repo": "iserv-proxy", - "rev": "531768c4be723e00eddb140ed76f433855d19809", + "rev": "8cc5d879c5c6bf56cb316199fcdb191dcce24b3d", "type": "github" }, "original": { From 646b189c3f7aae8d80e0e6078899a788cdcbcd8f Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 27 Feb 2025 23:16:32 +1300 Subject: [PATCH 172/206] nix flake update iserv-proxy --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index d93bce3e13..c28f081f09 100644 --- a/flake.lock +++ b/flake.lock @@ -339,11 +339,11 @@ "iserv-proxy": { "flake": false, "locked": { - "lastModified": 1740631337, - "narHash": "sha256-g5qmmoiaPqsoK9hdqdX7EuuhFAtG8f5xLLkrYdNzC3o=", + "lastModified": 1740651346, + "narHash": "sha256-DRTbAD9KRJR/6X5rHgq1cL23oZ2XTpSVlKnTNUOOnoM=", "owner": "stable-haskell", "repo": "iserv-proxy", - "rev": "8cc5d879c5c6bf56cb316199fcdb191dcce24b3d", + "rev": "d469d00f527f6e63f3c8327f8fe7732b26324684", "type": "github" }, "original": { From dae4da9ae9b9468ee1aee012ce5508b324133493 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 28 Feb 2025 23:23:00 +1300 Subject: [PATCH 173/206] Overlay to avoid issue that will be fixed by https://github.com/NixOS/nixpkgs/pull/385722 --- overlays/android.nix | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/overlays/android.nix b/overlays/android.nix index 93c1c2dde0..46b460e7d9 100644 --- a/overlays/android.nix +++ b/overlays/android.nix @@ -55,4 +55,20 @@ final: prev: { # We also link iserv against the static libs, so that we have a fully static # android (bionic/linux) iserv we can execute on glibc/linux. bionic = prev.bionic.override { enableStatic = true; enableShared = true; }; -}) +}) // +# See https://github.com/NixOS/nixpkgs/pull/385722 +builtins.mapAttrs (name: ndkPkg: ndkPkg // { + clang = ndkPkg.clang.override (oldAttrs: prev.lib.optionalAttrs (oldAttrs ? extraBuildCommands) { + extraBuildCommands = builtins.replaceStrings ["-target arm-linux-androideabi"] ["-target armv7a-linux-androideabi"] oldAttrs.extraBuildCommands; + }); +}) { + inherit (prev) + androidndkPkgs + androidndkPkgs_21 + androidndkPkgs_23 + androidndkPkgs_23b + androidndkPkgs_24 + androidndkPkgs_25 + androidndkPkgs_26 + androidndkPkgs_30; +} From 01b282cde7a50fb3f883997fe210660aa46d3900 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 3 Mar 2025 13:12:15 +1300 Subject: [PATCH 174/206] nix flake update iserv-proxy --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index c28f081f09..55a77410b0 100644 --- a/flake.lock +++ b/flake.lock @@ -339,11 +339,11 @@ "iserv-proxy": { "flake": false, "locked": { - "lastModified": 1740651346, - "narHash": "sha256-DRTbAD9KRJR/6X5rHgq1cL23oZ2XTpSVlKnTNUOOnoM=", + "lastModified": 1740960641, + "narHash": "sha256-1MGro0qk/fjjuPGZMbTUAd+y+I9tAnzDJWZHNWZt1PY=", "owner": "stable-haskell", "repo": "iserv-proxy", - "rev": "d469d00f527f6e63f3c8327f8fe7732b26324684", + "rev": "a438f0cf56eb445da30f2eb28bbebcbc3dbaa9e5", "type": "github" }, "original": { From ffabaa753df1ff11f9b10fc3120e05ea2e57afe0 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 3 Mar 2025 22:31:36 +1300 Subject: [PATCH 175/206] Add COMPAT_R_ARM_PREL31 patch to fix TH for armv6a android --- overlays/bootstrap.nix | 2 ++ .../patches/ghc/ghc-9.6-COMPAT_R_ARM_PREL31.patch | 13 +++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 overlays/patches/ghc/ghc-9.6-COMPAT_R_ARM_PREL31.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 21ff2812ef..42d9a88199 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -316,6 +316,8 @@ in { # See https://gitlab.haskell.org/ghc/ghc/-/issues/16130 ++ onAndroid (fromUntil "9.6.6" "9.12" ./patches/ghc/ghc-9.6-static-linker-script-support.patch) ++ onAndroid (from "9.12.1" ./patches/ghc/ghc-9.12-static-linker-script-support.patch) + + ++ onAndroid (from "9.6" ./patches/ghc/ghc-9.6-COMPAT_R_ARM_PREL31.patch) ; in ({ ghc8107 = traceWarnOld "8.10" (final.callPackage ../compiler/ghc { diff --git a/overlays/patches/ghc/ghc-9.6-COMPAT_R_ARM_PREL31.patch b/overlays/patches/ghc/ghc-9.6-COMPAT_R_ARM_PREL31.patch new file mode 100644 index 0000000000..9368c827df --- /dev/null +++ b/overlays/patches/ghc/ghc-9.6-COMPAT_R_ARM_PREL31.patch @@ -0,0 +1,13 @@ +diff --git a/rts/linker/Elf.c b/rts/linker/Elf.c +index 007daedb2f..0555abac72 100644 +--- a/rts/linker/Elf.c ++++ b/rts/linker/Elf.c +@@ -1295,6 +1295,7 @@ do_Elf_Rel_relocations ( ObjectCode* oc, char* ehdrC, + break; + + case COMPAT_R_ARM_REL32: /* ((S + A) | T) – P */ ++ case COMPAT_R_ARM_PREL31: + *(Elf32_Word *)P += S; + *(Elf32_Word *)P |= T; + *(Elf32_Word *)P -= P; + From 35ba3d92742f47b4206b1ba6fbe100afdff617b7 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 4 Mar 2025 10:53:06 +1300 Subject: [PATCH 176/206] nix flake update iserv-proxy --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 55a77410b0..d61b24ad2a 100644 --- a/flake.lock +++ b/flake.lock @@ -339,11 +339,11 @@ "iserv-proxy": { "flake": false, "locked": { - "lastModified": 1740960641, - "narHash": "sha256-1MGro0qk/fjjuPGZMbTUAd+y+I9tAnzDJWZHNWZt1PY=", + "lastModified": 1741038762, + "narHash": "sha256-XHFmwlZwBsLiuQF4KZ+1GB3IqEkWFAEuvOQAmyovAE4=", "owner": "stable-haskell", "repo": "iserv-proxy", - "rev": "a438f0cf56eb445da30f2eb28bbebcbc3dbaa9e5", + "rev": "0a34e4604d9f37dd25d8f034a484848a6f5586e7", "type": "github" }, "original": { From a85dd00ff4d26c1eb56b324ff51856a601b1db63 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 4 Mar 2025 11:11:36 +1300 Subject: [PATCH 177/206] Disable plugin test for armv7 --- test/plugin/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/plugin/default.nix b/test/plugin/default.nix index a20d95964c..8ae62b519a 100644 --- a/test/plugin/default.nix +++ b/test/plugin/default.nix @@ -24,6 +24,7 @@ in recurseIntoAttrs { || stdenv.hostPlatform.isMusl || stdenv.hostPlatform.isGhcjs || stdenv.hostPlatform.isWindows - || (haskellLib.isCrossHost && stdenv.hostPlatform.isAarch64); + || (haskellLib.isCrossHost && stdenv.hostPlatform.isAarch64) + || (haskellLib.isCrossHost && stdenv.hostPlatform.isArmv7); build = packages.test.components.library; } From 3e79bf1aa24d5dacbb3ccb4c355bab9161cfbd6e Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 4 Mar 2025 12:00:44 +1300 Subject: [PATCH 178/206] Enable tests that should pass --- test/cabal-simple-debug/default.nix | 2 +- test/ghcjs-overlay/default.nix | 1 - test/js-template-haskell/default.nix | 3 +-- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/test/cabal-simple-debug/default.nix b/test/cabal-simple-debug/default.nix index 9344f08a54..7b02425276 100644 --- a/test/cabal-simple-debug/default.nix +++ b/test/cabal-simple-debug/default.nix @@ -15,7 +15,7 @@ let in recurseIntoAttrs { # DWARF only works on linux with GHC 8.10.2 and newer # GHC 9.2.1 disabled because of https://github.com/input-output-hk/haskell.nix/issues/1332 - meta.disabled = __elem compiler-nix-name ["ghc865" "ghc884" "ghc921" "ghc922" "ghc923" "ghc924" "ghc925" "ghc926" "ghc927"] + meta.disabled = __elem compiler-nix-name ["ghc921" "ghc922" "ghc923" "ghc924" "ghc925" "ghc926" "ghc927"] || !stdenv.hostPlatform.isLinux || haskellLib.isCrossHost || stdenv.hostPlatform.isMusl || stdenv.hostPlatform.isAarch64 || lib.hasSuffix "llvm" compiler-nix-name; ifdInputs = { diff --git a/test/ghcjs-overlay/default.nix b/test/ghcjs-overlay/default.nix index 37ce2e06c7..0f3a874b1b 100644 --- a/test/ghcjs-overlay/default.nix +++ b/test/ghcjs-overlay/default.nix @@ -41,7 +41,6 @@ in recurseIntoAttrs { touch $out ''; meta.platforms = platforms.all; - meta.disabled = haskellLib.isCrossHost && stdenv.hostPlatform.isAarch64; passthru = { inherit project; }; diff --git a/test/js-template-haskell/default.nix b/test/js-template-haskell/default.nix index b3cd2ee65d..fdee28233b 100644 --- a/test/js-template-haskell/default.nix +++ b/test/js-template-haskell/default.nix @@ -23,8 +23,7 @@ in recurseIntoAttrs { inherit (project) plan-nix; }; - meta.disabled = stdenv.buildPlatform != stdenv.hostPlatform && stdenv.hostPlatform.isAarch64 - || builtins.elem compiler-nix-name ["ghc91320241204"] + meta.disabled = builtins.elem compiler-nix-name ["ghc91320241204"] # unhandled ELF relocation(Rel) type 10 || (stdenv.hostPlatform.isMusl && stdenv.hostPlatform.isx86_32); From 3321fca5844e144db265cb5dabfe3c813354bed5 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 4 Mar 2025 12:01:12 +1300 Subject: [PATCH 179/206] Disable shell-for for armv7 --- test/plugin/default.nix | 3 +-- test/shell-for/default.nix | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/test/plugin/default.nix b/test/plugin/default.nix index 8ae62b519a..ae64225d96 100644 --- a/test/plugin/default.nix +++ b/test/plugin/default.nix @@ -24,7 +24,6 @@ in recurseIntoAttrs { || stdenv.hostPlatform.isMusl || stdenv.hostPlatform.isGhcjs || stdenv.hostPlatform.isWindows - || (haskellLib.isCrossHost && stdenv.hostPlatform.isAarch64) - || (haskellLib.isCrossHost && stdenv.hostPlatform.isArmv7); + || (haskellLib.isCrossHost && (stdenv.hostPlatform.isAarch64 || stdenv.hostPlatform.isAarch32)); build = packages.test.components.library; } diff --git a/test/shell-for/default.nix b/test/shell-for/default.nix index 966beba5b6..11bad7dbae 100644 --- a/test/shell-for/default.nix +++ b/test/shell-for/default.nix @@ -56,7 +56,7 @@ in recurseIntoAttrs { meta.disabled = stdenv.hostPlatform.isMusl || stdenv.hostPlatform.isGhcjs || stdenv.hostPlatform.isWindows - || (haskellLib.isCrossHost && stdenv.hostPlatform.isAarch64); + || (haskellLib.isCrossHost && (stdenv.hostPlatform.isAarch64 || stdenv.hostPlatform.isAarch32)); inherit env envPkga envDefault; run = stdenv.mkDerivation { name = "shell-for-test"; From aa16b94f5651c7611c7abdb0e8dbbccc7925499c Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 4 Mar 2025 12:09:27 +1300 Subject: [PATCH 180/206] nix flake update iserv-proxy --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index d61b24ad2a..9f9e190eeb 100644 --- a/flake.lock +++ b/flake.lock @@ -339,11 +339,11 @@ "iserv-proxy": { "flake": false, "locked": { - "lastModified": 1741038762, - "narHash": "sha256-XHFmwlZwBsLiuQF4KZ+1GB3IqEkWFAEuvOQAmyovAE4=", + "lastModified": 1741043326, + "narHash": "sha256-DG527PWVUNVtH2uD4cBv5CcLUmKjD1Spxby53nOXbP4=", "owner": "stable-haskell", "repo": "iserv-proxy", - "rev": "0a34e4604d9f37dd25d8f034a484848a6f5586e7", + "rev": "49648aa3c0fae09959bb62deaa57b0a10c1d40f8", "type": "github" }, "original": { From 8db5299e7b9afd07dbf81117e500d733d61648bf Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Tue, 4 Mar 2025 18:48:56 +1300 Subject: [PATCH 181/206] nix flake update iserv-proxy --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 9f9e190eeb..d0d5fbea1e 100644 --- a/flake.lock +++ b/flake.lock @@ -339,11 +339,11 @@ "iserv-proxy": { "flake": false, "locked": { - "lastModified": 1741043326, - "narHash": "sha256-DG527PWVUNVtH2uD4cBv5CcLUmKjD1Spxby53nOXbP4=", + "lastModified": 1741067185, + "narHash": "sha256-quPETRKVtfC/xUvBkDSSm6YRrdYd9fXUgIV5FLnSc5M=", "owner": "stable-haskell", "repo": "iserv-proxy", - "rev": "49648aa3c0fae09959bb62deaa57b0a10c1d40f8", + "rev": "7ebe2356a005d4237d10df8793a0b61b467bcf32", "type": "github" }, "original": { From 85513d77250ec06dfcac87e51c2ee7c4a8cbef28 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 5 Mar 2025 22:02:08 +1300 Subject: [PATCH 182/206] Exclude libc.a from loadArchive for android --- flake.lock | 6 +++--- overlays/bootstrap.nix | 1 + overlays/patches/ghc/ghc-9.10-ignore-libc.patch | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 overlays/patches/ghc/ghc-9.10-ignore-libc.patch diff --git a/flake.lock b/flake.lock index d0d5fbea1e..0423084202 100644 --- a/flake.lock +++ b/flake.lock @@ -339,11 +339,11 @@ "iserv-proxy": { "flake": false, "locked": { - "lastModified": 1741067185, - "narHash": "sha256-quPETRKVtfC/xUvBkDSSm6YRrdYd9fXUgIV5FLnSc5M=", + "lastModified": 1741165220, + "narHash": "sha256-jybiRBFnoA8O6qGg1QVFU2LV4NWCm2xkCwn5Vtr1I48=", "owner": "stable-haskell", "repo": "iserv-proxy", - "rev": "7ebe2356a005d4237d10df8793a0b61b467bcf32", + "rev": "7bd7f5b144f07e6d65297af2ab89743e4472d94d", "type": "github" }, "original": { diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 42d9a88199..84ae8f6c46 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -318,6 +318,7 @@ in { ++ onAndroid (from "9.12.1" ./patches/ghc/ghc-9.12-static-linker-script-support.patch) ++ onAndroid (from "9.6" ./patches/ghc/ghc-9.6-COMPAT_R_ARM_PREL31.patch) + ++ onAndroid (from "9.10" ./patches/ghc/ghc-9.10-ignore-libc.patch) ; in ({ ghc8107 = traceWarnOld "8.10" (final.callPackage ../compiler/ghc { diff --git a/overlays/patches/ghc/ghc-9.10-ignore-libc.patch b/overlays/patches/ghc/ghc-9.10-ignore-libc.patch new file mode 100644 index 0000000000..234bdbf092 --- /dev/null +++ b/overlays/patches/ghc/ghc-9.10-ignore-libc.patch @@ -0,0 +1,17 @@ +diff --git a/rts/linker/LoadArchive.c b/rts/linker/LoadArchive.c +index 3c35a029a4..55d78160f5 100644 +--- a/rts/linker/LoadArchive.c ++++ b/rts/linker/LoadArchive.c +@@ -261,6 +261,12 @@ HsInt loadArchive_ (pathchar *path) + DEBUG_LOG("start\n"); + DEBUG_LOG("Loading archive `%" PATH_FMT "'\n", path); + ++ if (endsWithPath(path, "/libc.a")) { ++ IF_DEBUG(linker, ++ debugBelch("ignoring libc.a file %" PATH_FMT "\n", path)); ++ return 1; /* success */ ++ } ++ + /* Check that we haven't already loaded this archive. + Ignore requests to load multiple times */ + if (isAlreadyLoaded(path)) { From 8e0d34870ffe783a5206478d374ae57d4ebb4760 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Wed, 5 Mar 2025 23:12:46 +1300 Subject: [PATCH 183/206] nix flake update iserv-proxy --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 0423084202..4d67f84833 100644 --- a/flake.lock +++ b/flake.lock @@ -339,11 +339,11 @@ "iserv-proxy": { "flake": false, "locked": { - "lastModified": 1741165220, - "narHash": "sha256-jybiRBFnoA8O6qGg1QVFU2LV4NWCm2xkCwn5Vtr1I48=", + "lastModified": 1741169524, + "narHash": "sha256-tQd9XupbpJhcv+1uPVZK6A5GuUxNYiOHXfP9UTAoP/E=", "owner": "stable-haskell", "repo": "iserv-proxy", - "rev": "7bd7f5b144f07e6d65297af2ab89743e4472d94d", + "rev": "c26dafb7b6549b9ba32aef4021e16abb7f21b8e0", "type": "github" }, "original": { From 4ac5dfea39810f2168c433dad94e1f5bde81f481 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 6 Mar 2025 11:19:56 +1300 Subject: [PATCH 184/206] Disable tests of llvm backend for musl32 (seems broken) --- ci.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ci.nix b/ci.nix index 1df273b8fe..e04e7feeb6 100644 --- a/ci.nix +++ b/ci.nix @@ -97,7 +97,10 @@ } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948"]) { # Musl cross only works on linux # aarch64 cross only works on linux - inherit (lib.systems.examples) musl32 musl64 aarch64-multiplatform; + inherit (lib.systems.examples) musl64 aarch64-multiplatform; + } // lib.optionalAttrs (__match ".*llvm" compiler-nix-name == null && system == "x86_64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948"]) { + # Out llvm versions of GHC seem to break for musl32 + inherit (lib.systems.examples) musl32; } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "R2411" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948"]) { inherit (lib.systems.examples) aarch64-android-prebuilt armv7a-android-prebuilt; } // lib.optionalAttrs (system == "x86_64-linux" && nixpkgsName == "unstable" && !builtins.elem compiler-nix-name ["ghc8107" "ghc902"]) { From ab68554730f445f9c60b2cc5280b4df6577ba55f Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 6 Mar 2025 16:16:45 +1300 Subject: [PATCH 185/206] Use static linking for android tests --- lib/check.nix | 7 +++++-- overlays/linux-cross.nix | 10 +--------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/lib/check.nix b/lib/check.nix index 81a0047dd1..6471d6401e 100644 --- a/lib/check.nix +++ b/lib/check.nix @@ -1,7 +1,10 @@ { stdenv, lib, haskellLib, buildPackages }: -let self = drv: +let self = drvOrig: let + # Work around problem running dynamicially linked Android executables with qemu. + drv = drvOrig.override (lib.optionalAttrs stdenv.hostPlatform.isAndroid { setupBuildFlags = ["--ghc-option=-optl-static" ]; }); + component = drv.config; # This derivation can be used to execute test component. @@ -65,4 +68,4 @@ in stdenv.mkDerivation (( } // lib.optionalAttrs (drv ? LOCALE_ARCHIVE) { inherit (drv) LOCALE_ARCHIVE; } ); -in self \ No newline at end of file +in self diff --git a/overlays/linux-cross.nix b/overlays/linux-cross.nix index 241c0b6999..d674140fe1 100644 --- a/overlays/linux-cross.nix +++ b/overlays/linux-cross.nix @@ -68,11 +68,6 @@ let # Also for GHC #15275 ++ lib.optionals hostPlatform.isAarch64 ["--gcc-option=-fPIC"]; - # Wrapper to output a warning for Android - qemuNotSupportedWarning = writeShellScriptBin "warning-wrapper" '' - echo "Warning: Running Android apps on Linux using qemu is not supported." >&2 - ''; - # Wrapper for qemu testing qemuTestWrapper = writeShellScriptBin "test-wrapper" '' set -euo pipefail @@ -80,10 +75,7 @@ let ''; # Choose the appropriate test wrapper - testWrapper = lib.optional isLinuxCross - (if hostPlatform.isAndroid - then "${qemuNotSupportedWarning}/bin/warning-wrapper" - else "${qemuTestWrapper}/bin/test-wrapper"); + testWrapper = lib.optional isLinuxCross "${qemuTestWrapper}/bin/test-wrapper"; enableShared = lib.mkDefault (!isLinuxCross); From 9e7ddaf8dc4ab46a68eca74926c7190bc9faf1ab Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 6 Mar 2025 17:41:07 +1300 Subject: [PATCH 186/206] Make `.profiled` and `.dwarf` overridable --- builder/comp-builder.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/builder/comp-builder.nix b/builder/comp-builder.nix index 39a915372b..bcb4b861bb 100644 --- a/builder/comp-builder.nix +++ b/builder/comp-builder.nix @@ -385,8 +385,8 @@ let inherit (package.identifier) version; nativeBuildInputs = [shellWrappers.drv] ++ attrs.nativeBuildInputs; }); - profiled = self (drvArgs // { enableLibraryProfiling = true; }); - dwarf = self (drvArgs // { enableDWARF = true; }); + profiled = lib.makeOverridable self (drvArgs // { enableLibraryProfiling = true; }); + dwarf = lib.makeOverridable self (drvArgs // { enableDWARF = true; }); } // lib.optionalAttrs (haskellLib.isLibrary componentId || haskellLib.isTest componentId) ({ inherit haddock; inherit (haddock) haddockDir; # This is null if `doHaddock = false` From 39ba09258a90537a2b72140725a8166fea4c1deb Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 6 Mar 2025 17:50:47 +1300 Subject: [PATCH 187/206] Fix cabal-simple-prof test --- test/cabal-simple-prof/default.nix | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test/cabal-simple-prof/default.nix b/test/cabal-simple-prof/default.nix index ac747f4887..4e7e4f93e1 100644 --- a/test/cabal-simple-prof/default.nix +++ b/test/cabal-simple-prof/default.nix @@ -25,6 +25,9 @@ let inherit modules; }; + exe = (project.getComponent "cabal-simple:exe:cabal-simple") + .override (lib.optionalAttrs stdenv.hostPlatform.isAndroid { setupBuildFlags = ["--ghc-option=-optl-static" ]; }); + in recurseIntoAttrs { # This test seeems to be broken on 8.6 and 8.8 and ghcjs meta.disabled = compiler-nix-name == "ghc865" || compiler-nix-name == "ghc884" || stdenv.hostPlatform.isGhcjs; @@ -35,7 +38,7 @@ in recurseIntoAttrs { name = "cabal-simple-prof-test"; buildCommand = '' - exe="${(project.getComponent "cabal-simple:exe:cabal-simple").exePath}" + exe="${exe.exePath}" size=$(command stat --format '%s' "$exe") printf "size of executable $exe is $size. \n" >& 2 @@ -45,7 +48,7 @@ in recurseIntoAttrs { # Curiosity: cross compilers prodcing profiling with `+RTS -p -h` lead to the following cryptic message: # cabal-simple: invalid heap profile option: -h* # Hence we pass `-hc`. - ${toString (project.getComponent "cabal-simple:exe:cabal-simple").config.testWrapper} $exe +RTS -p -hc + ${toString exe.config.testWrapper} $exe +RTS -p -hc touch $out ''; From 263a010fd971ddd649b00fa0ac71b323f85a3b41 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 13 Mar 2025 00:04:40 +1300 Subject: [PATCH 188/206] Add ghc96X --- ci.nix | 3 ++- lazy-inputs/default.nix | 1 + lazy-inputs/ghc912X/flake.lock | 8 +++--- lazy-inputs/ghc96X/flake.lock | 30 +++++++++++++++++++++ lazy-inputs/ghc96X/flake.nix | 12 +++++++++ overlays/bootstrap.nix | 49 +++++++++++++++++++++++++--------- 6 files changed, 85 insertions(+), 18 deletions(-) create mode 100644 lazy-inputs/ghc96X/flake.lock create mode 100644 lazy-inputs/ghc96X/flake.nix diff --git a/ci.nix b/ci.nix index e04e7feeb6..2ad9ca87cd 100644 --- a/ci.nix +++ b/ci.nix @@ -63,7 +63,8 @@ ghc910 = true; ghc9121 = true; } // nixpkgs.lib.optionalAttrs (nixpkgsName == "unstable") { - ghc96 = true; + ghc96 = false; + ghc96X = true; ghc98 = true; ghc98llvm = false; ghc910 = true; diff --git a/lazy-inputs/default.nix b/lazy-inputs/default.nix index a1b1f446bc..1e626d0335 100644 --- a/lazy-inputs/default.nix +++ b/lazy-inputs/default.nix @@ -29,6 +29,7 @@ in { inherit ((callFlake { pkgs = final; src = ./ghc964; }).defaultNix) ghc964; inherit ((callFlake { pkgs = final; src = ./ghc965; }).defaultNix) ghc965; inherit ((callFlake { pkgs = final; src = ./ghc966; }).defaultNix) ghc966; + inherit ((callFlake { pkgs = final; src = ./ghc96X; }).defaultNix) ghc96X; inherit ((callFlake { pkgs = final; src = ./ghc981; }).defaultNix) ghc981; inherit ((callFlake { pkgs = final; src = ./ghc982; }).defaultNix) ghc982; inherit ((callFlake { pkgs = final; src = ./ghc983; }).defaultNix) ghc983; diff --git a/lazy-inputs/ghc912X/flake.lock b/lazy-inputs/ghc912X/flake.lock index 9b29a431ef..e3ba39af8b 100644 --- a/lazy-inputs/ghc912X/flake.lock +++ b/lazy-inputs/ghc912X/flake.lock @@ -3,11 +3,11 @@ "ghc912X": { "flake": false, "locked": { - "lastModified": 1734278290, - "narHash": "sha256-oSiGEkiQlkmCr7qsFUJ9qpwsU4AumOIpFn6zN4ByMNg=", + "lastModified": 1739998238, + "narHash": "sha256-CgmWnocb0K2fy89koME7H2tTFEOhjxZ9G+C+PQDKoZA=", "ref": "ghc-9.12", - "rev": "daf659b6e3c8f2a84100fbee797cd9d457c00df5", - "revCount": 67524, + "rev": "a73d6c7f5d18dc6b5366a9b87a899978fadfb2ab", + "revCount": 67541, "submodules": true, "type": "git", "url": "https://gitlab.haskell.org/ghc/ghc" diff --git a/lazy-inputs/ghc96X/flake.lock b/lazy-inputs/ghc96X/flake.lock new file mode 100644 index 0000000000..ee8f170a5a --- /dev/null +++ b/lazy-inputs/ghc96X/flake.lock @@ -0,0 +1,30 @@ +{ + "nodes": { + "ghc96X": { + "flake": false, + "locked": { + "lastModified": 1740624264, + "narHash": "sha256-2gLt3yKMnddXHepwi97eYUs9O+PycsS7nRI0yOtycKw=", + "ref": "ghc-9.6", + "rev": "2b22b6ae69c94e721fde8af0108eb0feed97cc82", + "revCount": 61113, + "submodules": true, + "type": "git", + "url": "https://gitlab.haskell.org/ghc/ghc" + }, + "original": { + "ref": "ghc-9.6", + "submodules": true, + "type": "git", + "url": "https://gitlab.haskell.org/ghc/ghc" + } + }, + "root": { + "inputs": { + "ghc96X": "ghc96X" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/lazy-inputs/ghc96X/flake.nix b/lazy-inputs/ghc96X/flake.nix new file mode 100644 index 0000000000..1b973d0649 --- /dev/null +++ b/lazy-inputs/ghc96X/flake.nix @@ -0,0 +1,12 @@ +{ + description = "Lazy Input for Haskell.nix"; + + inputs = { + ghc96X = { + flake = false; + url = "git+https://gitlab.haskell.org/ghc/ghc?ref=ghc-9.6&submodules=1"; + }; + }; + + outputs = inputs: inputs; +} diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 84ae8f6c46..73ae310a2c 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -14,6 +14,7 @@ let "9.12" = "9.12.1"; }; gitInputs = { + ghc96X = "9.6.7"; ghc912X = "9.12.1"; ghc913 = "9.13"; }; @@ -168,8 +169,9 @@ in { ++ onWindows (fromUntil "9.0" "9.4" ./patches/ghc/ghc-9.0-windres-invocation.patch) ++ onWindows (from "9.12" ./patches/ghc/ghc-9.12-windows-rts-symbols.patch) ++ fromUntil "9.4.5" "9.4.9" ./patches/ghc/ghc-9.4.5-include-order-fix.patch - ++ fromUntil "9.6.2" "9.8" ./patches/ghc/ghc-9.4.5-include-order-fix.patch - ++ fromUntil "9.6.1" "9.9.20231203" ./patches/ghc/MR10116.patch + ++ fromUntil "9.6.2" "9.6.7" ./patches/ghc/ghc-9.4.5-include-order-fix.patch + ++ fromUntil "9.6.1" "9.6.7" ./patches/ghc/MR10116.patch + ++ fromUntil "9.8.1" "9.9.20231203" ./patches/ghc/MR10116.patch ++ onNative (fromUntil "9.4.1" "9.6" ./patches/ghc/hadrian-build-deriveConstants-genprimopcode-ghc94.patch) ++ onNative (fromUntil "9.6.1" "9.14" ./patches/ghc/hadrian-build-deriveConstants-genprimopcode.patch) ++ onGhcjs (fromUntil "9.6.1" "9.6.3" ./patches/ghc/ghc-9.6-Merge-libiserv-with-ghci.patch) @@ -199,7 +201,8 @@ in { ++ onAarch64 (until "9.0" ./patches/ghc/ghc-8.10-aarch64-handle-none-rela.patch) ++ onWindows (until "9.0" ./patches/ghc/5b08e0c06e038448a63aa9bd7f163b23d824ba4b.patch) ++ onAarch64 (fromUntil "9.0" "9.11" ./patches/ghc/ghc-9.0-better-symbol-addr-debug.patch) - ++ onAarch64 (fromUntil "9.0" "9.8.3" ./patches/ghc/ghc-9.0-aarch64-handle-none-rela.patch) + ++ onAarch64 (fromUntil "9.0" "9.6.7" ./patches/ghc/ghc-9.0-aarch64-handle-none-rela.patch) + ++ onAarch64 (fromUntil "9.8" "9.8.3" ./patches/ghc/ghc-9.0-aarch64-handle-none-rela.patch) ++ onAarch64 (fromUntil "9.10" "9.11" ./patches/ghc/ghc-9.0-aarch64-handle-none-rela.patch) ++ onWindows (fromUntil "9.6.3" "9.6.4" ./patches/ghc/ghc-9.6-hadrian-splitsections.patch) @@ -258,27 +261,33 @@ in { && final.stdenv.targetPlatform.is32bit || final.stdenv.targetPlatform.isMusl) (until "9.11" ./patches/ghc/ghc-9.6-missing-symbols-deadbeef.patch) - ++ onAarch64Musl (fromUntil "9.6" "9.8.3" ./patches/ghc/ghc-9.6-linker-pool-allocator.patch) + ++ onAarch64Musl (fromUntil "9.6" "9.6.7" ./patches/ghc/ghc-9.6-linker-pool-allocator.patch) + ++ onAarch64Musl (fromUntil "9.8" "9.8.3" ./patches/ghc/ghc-9.6-linker-pool-allocator.patch) ++ onAarch64Musl (fromUntil "9.10" "9.11" ./patches/ghc/ghc-9.6-linker-pool-allocator.patch) - ++ onAarch64Musl (fromUntil "9.6" "9.8.3" ./patches/ghc/ghc-9.6-linker-pool-allocator-2.patch) + ++ onAarch64Musl (fromUntil "9.6" "9.6.7" ./patches/ghc/ghc-9.6-linker-pool-allocator-2.patch) + ++ onAarch64Musl (fromUntil "9.8" "9.8.3" ./patches/ghc/ghc-9.6-linker-pool-allocator-2.patch) ++ onAarch64Musl (fromUntil "9.10" "9.11" ./patches/ghc/ghc-9.6-linker-pool-allocator-2.patch) ++ onMusl (fromUntil "9.6" "9.8" ./patches/ghc/ghc-9.6-0001-Refactor-IServ.hs.patch) - ++ onMusl (fromUntil "9.6" "9.8.3" ./patches/ghc/ghc-9.6-0002-Drop-spurious-8-byte-offset-from-elf_plt.patch) + ++ onMusl (fromUntil "9.6" "9.6.7" ./patches/ghc/ghc-9.6-0002-Drop-spurious-8-byte-offset-from-elf_plt.patch) + ++ onMusl (fromUntil "9.8" "9.8.3" ./patches/ghc/ghc-9.6-0002-Drop-spurious-8-byte-offset-from-elf_plt.patch) ++ onMusl (fromUntil "9.10" "9.11" ./patches/ghc/ghc-9.6-0002-Drop-spurious-8-byte-offset-from-elf_plt.patch) - ++ onAarch64Musl (fromUntil "9.6" "9.8.3" ./patches/ghc/ghc-9.6-0003-Better-pool-alignment.-We-still-hardcode-section-ali.patch) + ++ onAarch64Musl (fromUntil "9.6" "9.6.7" ./patches/ghc/ghc-9.6-0003-Better-pool-alignment.-We-still-hardcode-section-ali.patch) + ++ onAarch64Musl (fromUntil "9.8" "9.8.3" ./patches/ghc/ghc-9.6-0003-Better-pool-alignment.-We-still-hardcode-section-ali.patch) ++ onAarch64Musl (fromUntil "9.10" "9.11" ./patches/ghc/ghc-9.6-0003-Better-pool-alignment.-We-still-hardcode-section-ali.patch) - ++ onAarch64Musl (fromUntil "9.6" "9.8.3" ./patches/ghc/ghc-9.6-0007-fixup-Better-pool-alignment.-We-still-hardcode-secti.patch) + ++ onAarch64Musl (fromUntil "9.6" "9.6.7" ./patches/ghc/ghc-9.6-0007-fixup-Better-pool-alignment.-We-still-hardcode-secti.patch) + ++ onAarch64Musl (fromUntil "9.8" "9.8.3" ./patches/ghc/ghc-9.6-0007-fixup-Better-pool-alignment.-We-still-hardcode-secti.patch) ++ onAarch64Musl (fromUntil "9.10" "9.11" ./patches/ghc/ghc-9.6-0007-fixup-Better-pool-alignment.-We-still-hardcode-secti.patch) - ++ onAarch64Musl (fromUntil "9.6" "9.8.3" ./patches/ghc/ghc-9.6-0008-pool-improvements.patch) + ++ onAarch64Musl (fromUntil "9.6" "9.6.7" ./patches/ghc/ghc-9.6-0008-pool-improvements.patch) + ++ onAarch64Musl (fromUntil "9.8" "9.8.3" ./patches/ghc/ghc-9.6-0008-pool-improvements.patch) ++ onAarch64Musl (fromUntil "9.10" "9.11" ./patches/ghc/ghc-9.6-0008-pool-improvements.patch) # these two are abit questionable. They are pretty rough, and assume static binary as well as posix. # onMusl (fromUntil "9.6" "9.11" ./patches/ghc/ghc-9.6-0004-ghcidladdr.patch) # onMusl (fromUntil "9.6" "9.11" ./patches/ghc/ghc-9.6-0005-Better-interpreter-debugging.-Needs-ghcidladdr.patch) # Fix docs/users_guide/rtd-theme/layout.html to work with sphinx 7 - ++ fromUntil "9.0" "9.8" ./patches/ghc/docs-sphinx-7.patch - ++ fromUntil "9.8" "9.9" ./patches/ghc/docs-sphinx-7-ghc98.patch + ++ fromUntil "9.0" "9.6.7" ./patches/ghc/docs-sphinx-7.patch + ++ fromUntil "9.6.7" "9.9" ./patches/ghc/docs-sphinx-7-ghc98.patch # These two patches are needed for libblst, which has now hidden symbols, which the linker doesn't know how to deal with. ++ ( @@ -997,7 +1006,7 @@ in { compiler-nix-name = versionToNixName version; in { name = compiler-nix-name; - value = final.callPackage ../compiler/ghc { + value = final.callPackage ../compiler/ghc ({ extra-passthru = { buildGHC = final.buildPackages.haskell-nix.compiler.${compiler-nix-name}; }; bootPkgs = bootPkgsGhc94 // { @@ -1030,7 +1039,21 @@ in { ghc-patches = ghc-patches version; ghc-version-date = version-date; ghc-commit-id = src.rev; - }; + } // final.lib.optionalAttrs (builtins.compareVersions version "9.7" <0) { + bootPkgs = bootPkgsGhc94 // { + ghc = if final.stdenv.buildPlatform != final.stdenv.targetPlatform + then final.buildPackages.buildPackages.haskell-nix.compiler.ghc966 + else final.buildPackages.buildPackages.haskell.compiler.ghc966 + or final.buildPackages.buildPackages.haskell.compiler.ghc965 + or final.buildPackages.buildPackages.haskell.compiler.ghc964 + or final.buildPackages.buildPackages.haskell.compiler.ghc963 + or final.buildPackages.buildPackages.haskell.compiler.ghc962 + or final.buildPackages.buildPackages.haskell.compiler.ghc945 + or final.buildPackages.buildPackages.haskell.compiler.ghc944; + }; + buildLlvmPackages = final.buildPackages.llvmPackages_12; + llvmPackages = final.llvmPackages_12; + }); }) gitInputs)) // final.lib.optionalAttrs (final.stdenv.targetPlatform.isGhcjs or false) ( if final.stdenv.hostPlatform.isGhcjs From 7521ca87942dc297247348caf51d7fcf42df717a Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 13 Mar 2025 11:42:32 +1300 Subject: [PATCH 189/206] Update JS-implement-TH-support.patch --- overlays/bootstrap.nix | 3 +- .../ghc-9.6.7-JS-implement-TH-support.patch | 3661 +++++++++++++++++ 2 files changed, 3663 insertions(+), 1 deletion(-) create mode 100644 overlays/patches/ghc/ghc-9.6.7-JS-implement-TH-support.patch diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 73ae310a2c..7f7e181b19 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -178,7 +178,8 @@ in { ++ onGhcjs (fromUntil "9.6.3" "9.8" ./patches/ghc/ghc-9.6.3-Merge-libiserv-with-ghci.patch) ++ onGhcjs (fromUntil "9.6.1" "9.8" ./patches/ghc/ghc-9.6-Assorted-changes-to-avoid-head-tail.patch) ++ onGhcjs (fromUntil "9.6.1" "9.6.3" ./patches/ghc/ghc-9.6-JS-implement-TH-support.patch) - ++ onGhcjs (fromUntil "9.6.3" "9.8" ./patches/ghc/ghc-9.6.3-JS-implement-TH-support.patch) + ++ onGhcjs (fromUntil "9.6.3" "9.6.7" ./patches/ghc/ghc-9.6.3-JS-implement-TH-support.patch) + ++ onGhcjs (fromUntil "9.6.7" "9.8" ./patches/ghc/ghc-9.6.7-JS-implement-TH-support.patch) ++ fromUntil "9.8.1" "9.8.2" ./patches/ghc/ghc-9.8-cabal-c-soures-fix.patch ++ fromUntil "9.6.3" "9.6.5" ./patches/ghc/ghc-9.6.3-Cabal-9384.patch ++ fromUntil "9.8.1" "9.8.3" ./patches/ghc/ghc-9.6.3-Cabal-9384.patch diff --git a/overlays/patches/ghc/ghc-9.6.7-JS-implement-TH-support.patch b/overlays/patches/ghc/ghc-9.6.7-JS-implement-TH-support.patch new file mode 100644 index 0000000000..64aba4ceb6 --- /dev/null +++ b/overlays/patches/ghc/ghc-9.6.7-JS-implement-TH-support.patch @@ -0,0 +1,3661 @@ +diff --git a/compiler/GHC.hs b/compiler/GHC.hs +index 211c8dc9a2..30d6d6b014 100644 +--- a/compiler/GHC.hs ++++ b/compiler/GHC.hs +@@ -1,3 +1,4 @@ ++{-# LANGUAGE MultiWayIf #-} + {-# LANGUAGE CPP #-} + {-# LANGUAGE NondecreasingIndentation, ScopedTypeVariables #-} + {-# LANGUAGE TupleSections, NamedFieldPuns #-} +@@ -316,6 +317,7 @@ import GHC.Driver.Backend + import GHC.Driver.Config.Finder (initFinderOpts) + import GHC.Driver.Config.Parser (initParserOpts) + import GHC.Driver.Config.Logger (initLogFlags) ++import GHC.Driver.Config.StgToJS (initStgToJSConfig) + import GHC.Driver.Config.Diagnostic + import GHC.Driver.Main + import GHC.Driver.Make +@@ -675,8 +677,10 @@ setTopSessionDynFlags dflags = do + logger <- getLogger + + -- Interpreter +- interp <- if gopt Opt_ExternalInterpreter dflags +- then do ++ interp <- if ++ -- external interpreter ++ | gopt Opt_ExternalInterpreter dflags ++ -> do + let + prog = pgm_i dflags ++ flavour + profiled = ways dflags `hasWay` WayProf +@@ -698,10 +702,31 @@ setTopSessionDynFlags dflags = do + , iservConfHook = createIservProcessHook (hsc_hooks hsc_env) + , iservConfTrace = tr + } +- s <- liftIO $ newMVar IServPending ++ s <- liftIO $ newMVar InterpPending ++ loader <- liftIO Loader.uninitializedLoader ++ return (Just (Interp (ExternalInterp (ExtIServ (ExtInterpState conf s))) loader)) ++ ++ -- JavaScript interpreter ++ | ArchJavaScript <- platformArch (targetPlatform dflags) ++ -> do ++ s <- liftIO $ newMVar InterpPending + loader <- liftIO Loader.uninitializedLoader +- return (Just (Interp (ExternalInterp conf (IServ s)) loader)) +- else ++ let cfg = JSInterpConfig ++ { jsInterpNodeConfig = defaultNodeJsSettings ++ , jsInterpScript = topDir dflags "ghc-interp.js" ++ , jsInterpTmpFs = hsc_tmpfs hsc_env ++ , jsInterpTmpDir = tmpDir dflags ++ , jsInterpLogger = hsc_logger hsc_env ++ , jsInterpCodegenCfg = initStgToJSConfig dflags ++ , jsInterpUnitEnv = hsc_unit_env hsc_env ++ , jsInterpFinderOpts = initFinderOpts dflags ++ , jsInterpFinderCache = hsc_FC hsc_env ++ } ++ return (Just (Interp (ExternalInterp (ExtJS (ExtInterpState cfg s))) loader)) ++ ++ -- Internal interpreter ++ | otherwise ++ -> + #if defined(HAVE_INTERNAL_INTERPRETER) + do + loader <- liftIO Loader.uninitializedLoader +diff --git a/compiler/GHC/Driver/Main.hs b/compiler/GHC/Driver/Main.hs +index 651f9bf8a2..24bfd5dfc4 100644 +--- a/compiler/GHC/Driver/Main.hs ++++ b/compiler/GHC/Driver/Main.hs +@@ -140,9 +140,10 @@ import GHC.Driver.Hooks + import GHC.Driver.GenerateCgIPEStub (generateCgIPEStub, lookupEstimatedTicks) + + import GHC.Runtime.Context +-import GHC.Runtime.Interpreter ( addSptEntry ) ++import GHC.Runtime.Interpreter ++import GHC.Runtime.Interpreter.JS + import GHC.Runtime.Loader ( initializePlugins ) +-import GHCi.RemoteTypes ( ForeignHValue ) ++import GHCi.RemoteTypes + import GHC.ByteCode.Types + + import GHC.Linker.Loader +@@ -156,6 +157,9 @@ import GHC.HsToCore + + import GHC.StgToByteCode ( byteCodeGen ) + import GHC.StgToJS ( stgToJS ) ++import GHC.StgToJS.Ids ++import GHC.StgToJS.Types ++import GHC.JS.Syntax + + import GHC.IfaceToCore ( typecheckIface, typecheckWholeCoreBindings ) + +@@ -172,7 +176,6 @@ import GHC.Core + import GHC.Core.Lint.Interactive ( interactiveInScope ) + import GHC.Core.Tidy ( tidyExpr ) + import GHC.Core.Type ( Type, Kind ) +-import GHC.Core.Multiplicity + import GHC.Core.Utils ( exprType ) + import GHC.Core.ConLike + import GHC.Core.Opt.Pipeline +@@ -201,7 +204,6 @@ import GHC.Stg.Pipeline ( stg2stg, StgCgInfos ) + + import GHC.Builtin.Utils + import GHC.Builtin.Names +-import GHC.Builtin.Uniques ( mkPseudoUniqueE ) + + import qualified GHC.StgToCmm as StgToCmm ( codeGen ) + import GHC.StgToCmm.Types (CmmCgInfos (..), ModuleLFInfos) +@@ -230,7 +232,7 @@ import GHC.Types.Id + import GHC.Types.SourceError + import GHC.Types.SafeHaskell + import GHC.Types.ForeignStubs +-import GHC.Types.Var.Env ( emptyTidyEnv ) ++import GHC.Types.Var.Env ( mkEmptyTidyEnv ) + import GHC.Types.Error + import GHC.Types.Fixity.Env + import GHC.Types.CostCentre +@@ -243,6 +245,8 @@ import GHC.Types.Name.Reader + import GHC.Types.Name.Ppr + import GHC.Types.TyThing + import GHC.Types.HpcInfo ++import GHC.Types.Unique.Supply (uniqFromMask) ++import GHC.Types.Unique (getKey) + + import GHC.Utils.Fingerprint ( Fingerprint ) + import GHC.Utils.Panic +@@ -289,6 +293,7 @@ import GHC.Stg.InferTags.TagSig (seqTagSig) + import GHC.StgToCmm.Utils (IPEStats) + import GHC.Types.Unique.FM + import GHC.Cmm.Config (CmmConfig) ++import GHC.Types.Unique.DFM + + + {- ********************************************************************** +@@ -2157,31 +2162,6 @@ doCodeGen hsc_env this_mod denv data_tycons + + return $ Stream.mapM dump2 pipeline_stream + +-myCoreToStgExpr :: Logger -> DynFlags -> InteractiveContext +- -> Bool +- -> Module -> ModLocation -> CoreExpr +- -> IO ( Id +- , [CgStgTopBinding] +- , InfoTableProvMap +- , CollectedCCs +- , StgCgInfos ) +-myCoreToStgExpr logger dflags ictxt for_bytecode this_mod ml prepd_expr = do +- {- Create a temporary binding (just because myCoreToStg needs a +- binding for the stg2stg step) -} +- let bco_tmp_id = mkSysLocal (fsLit "BCO_toplevel") +- (mkPseudoUniqueE 0) +- ManyTy +- (exprType prepd_expr) +- (stg_binds, prov_map, collected_ccs, stg_cg_infos) <- +- myCoreToStg logger +- dflags +- ictxt +- for_bytecode +- this_mod +- ml +- [NonRec bco_tmp_id prepd_expr] +- return (bco_tmp_id, stg_binds, prov_map, collected_ccs, stg_cg_infos) +- + myCoreToStg :: Logger -> DynFlags -> InteractiveContext + -> Bool + -> Module -> ModLocation -> CoreProgram +@@ -2562,56 +2542,117 @@ hscCompileCoreExpr hsc_env loc expr = + Just h -> h hsc_env loc expr + + hscCompileCoreExpr' :: HscEnv -> SrcSpan -> CoreExpr -> IO (ForeignHValue, [Linkable], PkgsLoaded) +-hscCompileCoreExpr' hsc_env srcspan ds_expr +- = do { {- Simplify it -} +- -- Question: should we call SimpleOpt.simpleOptExpr here instead? +- -- It is, well, simpler, and does less inlining etc. +- let dflags = hsc_dflags hsc_env +- ; let logger = hsc_logger hsc_env +- ; let ic = hsc_IC hsc_env +- ; let unit_env = hsc_unit_env hsc_env +- ; let simplify_expr_opts = initSimplifyExprOpts dflags ic +- ; simpl_expr <- simplifyExpr logger (ue_eps unit_env) simplify_expr_opts ds_expr +- +- {- Tidy it (temporary, until coreSat does cloning) -} +- ; let tidy_expr = tidyExpr emptyTidyEnv simpl_expr +- +- {- Prepare for codegen -} +- ; cp_cfg <- initCorePrepConfig hsc_env +- ; prepd_expr <- corePrepExpr +- logger cp_cfg +- tidy_expr +- +- {- Lint if necessary -} +- ; lintInteractiveExpr (text "hscCompileExpr") hsc_env prepd_expr +- ; let iNTERACTIVELoc = ModLocation{ ml_hs_file = Nothing, +- ml_hi_file = panic "hscCompileCoreExpr':ml_hi_file", +- ml_obj_file = panic "hscCompileCoreExpr':ml_obj_file", +- ml_dyn_obj_file = panic "hscCompileCoreExpr': ml_obj_file", +- ml_dyn_hi_file = panic "hscCompileCoreExpr': ml_dyn_hi_file", +- ml_hie_file = panic "hscCompileCoreExpr':ml_hie_file" } +- +- ; let ictxt = hsc_IC hsc_env +- ; (binding_id, stg_expr, _, _, _stg_cg_info) <- +- myCoreToStgExpr logger +- dflags +- ictxt +- True +- (icInteractiveModule ictxt) +- iNTERACTIVELoc +- prepd_expr +- +- {- Convert to BCOs -} +- ; bcos <- byteCodeGen hsc_env +- (icInteractiveModule ictxt) +- stg_expr +- [] Nothing +- +- {- load it -} +- ; (fv_hvs, mods_needed, units_needed) <- loadDecls (hscInterp hsc_env) hsc_env srcspan bcos +- {- Get the HValue for the root -} +- ; return (expectJust "hscCompileCoreExpr'" +- $ lookup (idName binding_id) fv_hvs, mods_needed, units_needed) } ++hscCompileCoreExpr' hsc_env srcspan ds_expr = do ++ {- Simplify it -} ++ -- Question: should we call SimpleOpt.simpleOptExpr here instead? ++ -- It is, well, simpler, and does less inlining etc. ++ let dflags = hsc_dflags hsc_env ++ let logger = hsc_logger hsc_env ++ let ic = hsc_IC hsc_env ++ let unit_env = hsc_unit_env hsc_env ++ let simplify_expr_opts = initSimplifyExprOpts dflags ic ++ ++ simpl_expr <- simplifyExpr logger (ue_eps unit_env) simplify_expr_opts ds_expr ++ ++ -- Create a unique temporary binding ++ -- ++ -- The id has to be exported for the JS backend. This isn't required for the ++ -- byte-code interpreter but it does no harm to always do it. ++ u <- uniqFromMask 'I' ++ let binding_name = mkSystemVarName u (fsLit ("BCO_toplevel")) ++ let binding_id = mkExportedVanillaId binding_name (exprType simpl_expr) ++ ++ {- Tidy it (temporary, until coreSat does cloning) -} ++ let tidy_occ_env = initTidyOccEnv [occName binding_id] ++ let tidy_env = mkEmptyTidyEnv tidy_occ_env ++ let tidy_expr = tidyExpr tidy_env simpl_expr ++ ++ {- Prepare for codegen -} ++ cp_cfg <- initCorePrepConfig hsc_env ++ prepd_expr <- corePrepExpr ++ logger cp_cfg ++ tidy_expr ++ ++ {- Lint if necessary -} ++ lintInteractiveExpr (text "hscCompileExpr") hsc_env prepd_expr ++ let this_loc = ModLocation{ ml_hs_file = Nothing, ++ ml_hi_file = panic "hscCompileCoreExpr':ml_hi_file", ++ ml_obj_file = panic "hscCompileCoreExpr':ml_obj_file", ++ ml_dyn_obj_file = panic "hscCompileCoreExpr': ml_obj_file", ++ ml_dyn_hi_file = panic "hscCompileCoreExpr': ml_dyn_hi_file", ++ ml_hie_file = panic "hscCompileCoreExpr':ml_hie_file" } ++ ++ let ictxt = (hsc_IC hsc_env) { ++ ic_mod_index = getKey u ++ -- Ensure module uniqueness ("GhciNNNN") by reusing the unique ++ -- we've used for the binding. If ic_mod_index was mutable, we ++ -- would simply bump it here after its use. ++ -- ++ -- This uniqueness is needed by the JS linker. Without it we ++ -- break the 1-2-1 relationship between modules and object ++ -- files, i.e. we get different object files for the same module ++ -- End the linker doesn't support this. ++ } ++ let this_mod = icInteractiveModule ictxt ++ let for_bytecode = True ++ ++ (stg_binds, _prov_map, _collected_ccs, _stg_cg_infos) <- ++ myCoreToStg logger ++ dflags ++ ictxt ++ for_bytecode ++ this_mod ++ this_loc ++ [NonRec binding_id prepd_expr] ++ ++ let interp = hscInterp hsc_env ++ let tmpfs = hsc_tmpfs hsc_env ++ let tmp_dir = tmpDir dflags ++ ++ case interp of ++ Interp (ExternalInterp (ExtJS i)) _ -> do ++ let js_config = initStgToJSConfig dflags ++ foreign_stubs = NoStubs ++ spt_entries = mempty ++ cost_centre_info = mempty ++ ++ -- codegen into object file whose path is in out_obj ++ out_obj <- newTempName logger tmpfs tmp_dir TFL_CurrentModule "o" ++ stgToJS logger js_config stg_binds this_mod spt_entries foreign_stubs cost_centre_info out_obj ++ ++ let TxtI id_sym = makeIdentForId binding_id Nothing IdPlain this_mod ++ -- link code containing binding "id_sym = expr", using id_sym as root ++ withJSInterp i $ \inst -> do ++ let roots = mkExportedModFuns this_mod [id_sym] ++ jsLinkObject logger tmpfs tmp_dir js_config unit_env inst out_obj roots ++ ++ -- look up "id_sym" closure and create a StablePtr (HValue) from it ++ href <- lookupClosure interp (unpackFS id_sym) >>= \case ++ Nothing -> pprPanic "Couldn't find just linked TH closure" (ppr id_sym) ++ Just r -> pure r ++ ++ binding_fref <- withJSInterp i $ \inst -> ++ mkForeignRef href (freeReallyRemoteRef inst href) ++ ++ -- FIXME: LoaderState doesn't make sense for the JS linker ++ -- The state is maintained in the interpreter instance (jsLinkState field) ++ let linkables = mempty ++ let loaded_pkgs = emptyUDFM ++ ++ return (castForeignRef binding_fref, linkables, loaded_pkgs) ++ ++ _ -> do ++ {- Convert to BCOs -} ++ bcos <- byteCodeGen hsc_env ++ this_mod ++ stg_binds ++ [] Nothing ++ ++ {- load it -} ++ (fv_hvs, mods_needed, units_needed) <- loadDecls interp hsc_env srcspan bcos ++ {- Get the HValue for the root -} ++ return (expectJust "hscCompileCoreExpr'" ++ $ lookup (idName binding_id) fv_hvs, mods_needed, units_needed) + + + {- ********************************************************************** +diff --git a/compiler/GHC/Driver/Pipeline.hs b/compiler/GHC/Driver/Pipeline.hs +index a036334b04..801b9a021d 100644 +--- a/compiler/GHC/Driver/Pipeline.hs ++++ b/compiler/GHC/Driver/Pipeline.hs +@@ -111,8 +111,6 @@ import GHC.Types.SourceError + + import GHC.Unit + import GHC.Unit.Env +---import GHC.Unit.Finder +---import GHC.Unit.State + import GHC.Unit.Module.ModSummary + import GHC.Unit.Module.ModIface + import GHC.Unit.Module.Deps +diff --git a/compiler/GHC/Runtime/Interpreter.hs b/compiler/GHC/Runtime/Interpreter.hs +index 843c7ff463..466d60d29a 100644 +--- a/compiler/GHC/Runtime/Interpreter.hs ++++ b/compiler/GHC/Runtime/Interpreter.hs +@@ -3,6 +3,8 @@ + {-# LANGUAGE RecordWildCards #-} + {-# LANGUAGE ScopedTypeVariables #-} + {-# LANGUAGE TupleSections #-} ++{-# LANGUAGE LambdaCase #-} ++{-# LANGUAGE RankNTypes #-} + + -- | Interacting with the iserv interpreter, whether it is running on an + -- external process or in the current process. +@@ -47,22 +49,30 @@ module GHC.Runtime.Interpreter + , resolveObjs + , findSystemLibrary + +- -- * Lower-level API using messages +- , interpCmd, Message(..), withIServ, withIServ_ ++ , interpCmd ++ , withExtInterp ++ , withExtInterpStatus ++ , withIServ ++ , withJSInterp + , stopInterp +- , iservCall, readIServ, writeIServ + , purgeLookupSymbolCache ++ , freeReallyRemoteRef + , freeHValueRefs + , mkFinalizedHValue + , wormhole, wormholeRef + , fromEvalResult ++ ++ -- * Reexport for convenience ++ , Message (..) ++ , module GHC.Runtime.Interpreter.Process + ) where + + import GHC.Prelude + +-import GHC.IO (catchException) +- + import GHC.Runtime.Interpreter.Types ++import GHC.Runtime.Interpreter.JS ++import GHC.Runtime.Interpreter.Process ++import GHC.Runtime.Utils + import GHCi.Message + import GHCi.RemoteTypes + import GHCi.ResolvedBCO +@@ -98,7 +108,7 @@ import GHC.Platform.Ways + import Control.Concurrent + import Control.Monad + import Control.Monad.IO.Class +-import Control.Monad.Catch as MC (mask, onException) ++import Control.Monad.Catch as MC (mask) + import Data.Binary + import Data.Binary.Put + import Data.ByteString (ByteString) +@@ -108,19 +118,6 @@ import Data.IORef + import Foreign hiding (void) + import qualified GHC.Exts.Heap as Heap + import GHC.Stack.CCS (CostCentre,CostCentreStack) +-import System.Exit +-import GHC.IO.Handle.Types (Handle) +-#if defined(mingw32_HOST_OS) +-import Foreign.C +-import GHC.IO.Handle.FD (fdToHandle) +-# if defined(__IO_MANAGER_WINIO__) +-import GHC.IO.SubSystem (()) +-import GHC.IO.Handle.Windows (handleToHANDLE) +-import GHC.Event.Windows (associateHandle') +-# endif +-#else +-import System.Posix as Posix +-#endif + import System.Directory + import System.Process + import GHC.Conc (pseq, par) +@@ -199,10 +196,20 @@ interpCmd interp msg = case interpInstance interp of + #if defined(HAVE_INTERNAL_INTERPRETER) + InternalInterp -> run msg -- Just run it directly + #endif +- ExternalInterp c i -> withIServ_ c i $ \iserv -> ++ ExternalInterp ext -> withExtInterp ext $ \inst -> + uninterruptibleMask_ $ -- Note [uninterruptibleMask_ and interpCmd] +- iservCall iserv msg ++ sendMessage inst msg ++ + ++withExtInterp :: ExceptionMonad m => ExtInterp -> (forall d. ExtInterpInstance d -> m a) -> m a ++withExtInterp ext action = case ext of ++ ExtJS i -> withJSInterp i action ++ ExtIServ i -> withIServ i action ++ ++withExtInterpStatus :: ExtInterp -> (forall d. ExtInterpStatusVar d -> m a) -> m a ++withExtInterpStatus ext action = case ext of ++ ExtJS i -> action (interpStatus i) ++ ExtIServ i -> action (interpStatus i) + + -- Note [uninterruptibleMask_ and interpCmd] + -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@@ -217,37 +224,51 @@ interpCmd interp msg = case interpInstance interp of + -- Overloaded because this is used from TcM as well as IO. + withIServ + :: (ExceptionMonad m) +- => IServConfig -> IServ -> (IServInstance -> m (IServInstance, a)) -> m a +-withIServ conf (IServ mIServState) action = +- MC.mask $ \restore -> do +- state <- liftIO $ takeMVar mIServState +- +- iserv <- case state of +- -- start the external iserv process if we haven't done so yet +- IServPending -> +- liftIO (spawnIServ conf) +- `MC.onException` (liftIO $ putMVar mIServState state) +- +- IServRunning inst -> return inst +- +- +- let iserv' = iserv{ iservPendingFrees = [] } +- +- (iserv'',a) <- (do +- -- free any ForeignHValues that have been garbage collected. +- liftIO $ when (not (null (iservPendingFrees iserv))) $ +- iservCall iserv (FreeHValueRefs (iservPendingFrees iserv)) +- -- run the inner action +- restore $ action iserv') +- `MC.onException` (liftIO $ putMVar mIServState (IServRunning iserv')) +- liftIO $ putMVar mIServState (IServRunning iserv'') +- return a +- +-withIServ_ +- :: (MonadIO m, ExceptionMonad m) +- => IServConfig -> IServ -> (IServInstance -> m a) -> m a +-withIServ_ conf iserv action = withIServ conf iserv $ \inst -> +- (inst,) <$> action inst ++ => IServ -> (ExtInterpInstance () -> m a) -> m a ++withIServ (ExtInterpState cfg mstate) action = do ++ inst <- spawnInterpMaybe cfg spawnIServ mstate ++ action inst ++ ++-- | Spawn JS interpreter if it isn't already running and execute the given action ++-- ++-- Update the interpreter state. ++withJSInterp :: ExceptionMonad m => JSInterp -> (ExtInterpInstance JSInterpExtra -> m a) -> m a ++withJSInterp (ExtInterpState cfg mstate) action = do ++ inst <- spawnInterpMaybe cfg spawnJSInterp mstate ++ action inst ++ ++-- | Spawn an interpreter if not already running according to the status in the ++-- MVar. Update the status, free pending heap references, and return the ++-- interpreter instance. ++-- ++-- This function is generic to support both the native external interpreter and ++-- the JS one. ++spawnInterpMaybe :: ExceptionMonad m => cfg -> (cfg -> IO (ExtInterpInstance d)) -> ExtInterpStatusVar d -> m (ExtInterpInstance d) ++spawnInterpMaybe cfg spawn mstatus = do ++ inst <- liftIO $ modifyMVarMasked mstatus $ \case ++ -- start the external iserv process if we haven't done so yet ++ InterpPending -> do ++ inst <- spawn cfg ++ pure (InterpRunning inst, inst) ++ ++ InterpRunning inst -> do ++ pure (InterpRunning inst, inst) ++ ++ -- free any ForeignRef that have been garbage collected. ++ pending_frees <- liftIO $ swapMVar (instPendingFrees inst) [] ++ liftIO $ when (not (null (pending_frees))) $ ++ sendMessage inst (FreeHValueRefs pending_frees) ++ ++ -- run the inner action ++ pure inst ++ ++withExtInterpMaybe ++ :: (ExceptionMonad m) ++ => ExtInterp -> (forall d. Maybe (ExtInterpInstance d) -> m a) -> m a ++withExtInterpMaybe ext action = withExtInterpStatus ext $ \mstate -> do ++ liftIO (readMVar mstate) >>= \case ++ InterpPending {} -> action Nothing -- already shut down or never launched ++ InterpRunning inst -> action (Just inst) + + -- ----------------------------------------------------------------------------- + -- Wrappers around messages +@@ -454,24 +475,27 @@ lookupSymbol interp str = case interpInstance interp of + InternalInterp -> fmap fromRemotePtr <$> run (LookupSymbol (unpackFS str)) + #endif + +- ExternalInterp c i -> withIServ c i $ \iserv -> do +- -- Profiling of GHCi showed a lot of time and allocation spent +- -- making cross-process LookupSymbol calls, so I added a GHC-side +- -- cache which sped things up quite a lot. We have to be careful +- -- to purge this cache when unloading code though. +- let cache = iservLookupSymbolCache iserv +- case lookupUFM cache str of +- Just p -> return (iserv, Just p) +- Nothing -> do +- m <- uninterruptibleMask_ $ +- iservCall iserv (LookupSymbol (unpackFS str)) +- case m of +- Nothing -> return (iserv, Nothing) +- Just r -> do +- let p = fromRemotePtr r +- cache' = addToUFM cache str p +- iserv' = iserv {iservLookupSymbolCache = cache'} +- return (iserv', Just p) ++ ExternalInterp ext -> case ext of ++ ExtIServ i -> withIServ i $ \inst -> do ++ -- Profiling of GHCi showed a lot of time and allocation spent ++ -- making cross-process LookupSymbol calls, so I added a GHC-side ++ -- cache which sped things up quite a lot. We have to be careful ++ -- to purge this cache when unloading code though. ++ cache <- readMVar (instLookupSymbolCache inst) ++ case lookupUFM cache str of ++ Just p -> return (Just p) ++ Nothing -> do ++ m <- uninterruptibleMask_ $ ++ sendMessage inst (LookupSymbol (unpackFS str)) ++ case m of ++ Nothing -> return Nothing ++ Just r -> do ++ let p = fromRemotePtr r ++ cache' = addToUFM cache str p ++ modifyMVar_ (instLookupSymbolCache inst) (const (pure cache')) ++ return (Just p) ++ ++ ExtJS {} -> pprPanic "lookupSymbol not supported by the JS interpreter" (ppr str) + + lookupClosure :: Interp -> String -> IO (Maybe HValueRef) + lookupClosure interp str = +@@ -482,12 +506,9 @@ purgeLookupSymbolCache interp = case interpInstance interp of + #if defined(HAVE_INTERNAL_INTERPRETER) + InternalInterp -> pure () + #endif +- ExternalInterp _ (IServ mstate) -> +- modifyMVar_ mstate $ \state -> pure $ case state of +- IServPending -> state +- IServRunning iserv -> IServRunning +- (iserv { iservLookupSymbolCache = emptyUFM }) +- ++ ExternalInterp ext -> withExtInterpMaybe ext $ \case ++ Nothing -> pure () -- interpreter stopped, nothing to do ++ Just inst -> modifyMVar_ (instLookupSymbolCache inst) (const (pure emptyUFM)) + + -- | loadDLL loads a dynamic library using the OS's native linker + -- (i.e. dlopen() on Unix, LoadLibrary() on Windows). It takes either +@@ -537,56 +558,35 @@ resolveObjs interp = successIf <$> interpCmd interp ResolveObjs + findSystemLibrary :: Interp -> String -> IO (Maybe String) + findSystemLibrary interp str = interpCmd interp (FindSystemLibrary str) + +- + -- ----------------------------------------------------------------------------- +--- Raw calls and messages +- +--- | Send a 'Message' and receive the response from the iserv process +-iservCall :: Binary a => IServInstance -> Message a -> IO a +-iservCall iserv msg = +- remoteCall (iservPipe iserv) msg +- `catchException` \(e :: SomeException) -> handleIServFailure iserv e +- +--- | Read a value from the iserv process +-readIServ :: IServInstance -> Get a -> IO a +-readIServ iserv get = +- readPipe (iservPipe iserv) get +- `catchException` \(e :: SomeException) -> handleIServFailure iserv e +- +--- | Send a value to the iserv process +-writeIServ :: IServInstance -> Put -> IO () +-writeIServ iserv put = +- writePipe (iservPipe iserv) put +- `catchException` \(e :: SomeException) -> handleIServFailure iserv e +- +-handleIServFailure :: IServInstance -> SomeException -> IO a +-handleIServFailure iserv e = do +- let proc = iservProcess iserv +- ex <- getProcessExitCode proc +- case ex of +- Just (ExitFailure n) -> +- throwIO (InstallationError ("ghc-iserv terminated (" ++ show n ++ ")")) +- _ -> do +- terminateProcess proc +- _ <- waitForProcess proc +- throw e ++-- IServ specific calls and messages + + -- | Spawn an external interpreter +-spawnIServ :: IServConfig -> IO IServInstance ++spawnIServ :: IServConfig -> IO (ExtInterpInstance ()) + spawnIServ conf = do + iservConfTrace conf + let createProc = fromMaybe (\cp -> do { (_,_,_,ph) <- createProcess cp + ; return ph }) + (iservConfHook conf) + (ph, rh, wh) <- runWithPipes createProc (iservConfProgram conf) ++ [] + (iservConfOpts conf) + lo_ref <- newIORef Nothing +- return $ IServInstance +- { iservPipe = Pipe { pipeRead = rh, pipeWrite = wh, pipeLeftovers = lo_ref } +- , iservProcess = ph +- , iservLookupSymbolCache = emptyUFM +- , iservPendingFrees = [] +- } ++ let pipe = Pipe { pipeRead = rh, pipeWrite = wh, pipeLeftovers = lo_ref } ++ let process = InterpProcess ++ { interpHandle = ph ++ , interpPipe = pipe ++ } ++ ++ pending_frees <- newMVar [] ++ lookup_cache <- newMVar emptyUFM ++ let inst = ExtInterpInstance ++ { instProcess = process ++ , instPendingFrees = pending_frees ++ , instLookupSymbolCache = lookup_cache ++ , instExtra = () ++ } ++ pure inst + + -- | Stop the interpreter + stopInterp :: Interp -> IO () +@@ -594,76 +594,16 @@ stopInterp interp = case interpInstance interp of + #if defined(HAVE_INTERNAL_INTERPRETER) + InternalInterp -> pure () + #endif +- ExternalInterp _ (IServ mstate) -> ++ ExternalInterp ext -> withExtInterpStatus ext $ \mstate -> do + MC.mask $ \_restore -> modifyMVar_ mstate $ \state -> do + case state of +- IServPending -> pure state -- already stopped +- IServRunning i -> do +- ex <- getProcessExitCode (iservProcess i) ++ InterpPending -> pure state -- already stopped ++ InterpRunning i -> do ++ ex <- getProcessExitCode (interpHandle (instProcess i)) + if isJust ex + then pure () +- else iservCall i Shutdown +- pure IServPending +- +-runWithPipes :: (CreateProcess -> IO ProcessHandle) +- -> FilePath -> [String] -> IO (ProcessHandle, Handle, Handle) +-#if defined(mingw32_HOST_OS) +-foreign import ccall "io.h _close" +- c__close :: CInt -> IO CInt +- +-foreign import ccall unsafe "io.h _get_osfhandle" +- _get_osfhandle :: CInt -> IO CInt +- +-runWithPipesPOSIX :: (CreateProcess -> IO ProcessHandle) +- -> FilePath -> [String] -> IO (ProcessHandle, Handle, Handle) +-runWithPipesPOSIX createProc prog opts = do +- (rfd1, wfd1) <- createPipeFd -- we read on rfd1 +- (rfd2, wfd2) <- createPipeFd -- we write on wfd2 +- wh_client <- _get_osfhandle wfd1 +- rh_client <- _get_osfhandle rfd2 +- let args = show wh_client : show rh_client : opts +- ph <- createProc (proc prog args) +- rh <- mkHandle rfd1 +- wh <- mkHandle wfd2 +- return (ph, rh, wh) +- where mkHandle :: CInt -> IO Handle +- mkHandle fd = (fdToHandle fd) `Ex.onException` (c__close fd) +- +-# if defined (__IO_MANAGER_WINIO__) +-runWithPipesNative :: (CreateProcess -> IO ProcessHandle) +- -> FilePath -> [String] -> IO (ProcessHandle, Handle, Handle) +-runWithPipesNative createProc prog opts = do +- (rh, wfd1) <- createPipe -- we read on rfd1 +- (rfd2, wh) <- createPipe -- we write on wfd2 +- wh_client <- handleToHANDLE wfd1 +- rh_client <- handleToHANDLE rfd2 +- -- Associate the handle with the current manager +- -- but don't touch the ones we're passing to the child +- -- since it needs to register the handle with its own manager. +- associateHandle' =<< handleToHANDLE rh +- associateHandle' =<< handleToHANDLE wh +- let args = show wh_client : show rh_client : opts +- ph <- createProc (proc prog args) +- return (ph, rh, wh) +- +-runWithPipes = runWithPipesPOSIX runWithPipesNative +-# else +-runWithPipes = runWithPipesPOSIX +-# endif +-#else +-runWithPipes createProc prog opts = do +- (rfd1, wfd1) <- Posix.createPipe -- we read on rfd1 +- (rfd2, wfd2) <- Posix.createPipe -- we write on wfd2 +- setFdOption rfd1 CloseOnExec True +- setFdOption wfd2 CloseOnExec True +- let args = show wfd1 : show rfd2 : opts +- ph <- createProc (proc prog args) +- closeFd wfd1 +- closeFd rfd2 +- rh <- fdToHandle rfd1 +- wh <- fdToHandle wfd2 +- return (ph, rh, wh) +-#endif ++ else sendMessage i Shutdown ++ pure InterpPending + + -- ----------------------------------------------------------------------------- + {- Note [External GHCi pointers] +@@ -680,10 +620,10 @@ we cannot use this to refer to things in the external process. + RemoteRef + --------- + +-RemoteRef is a StablePtr to a heap-resident value. When +--fexternal-interpreter is used, this value resides in the external +-process's heap. RemoteRefs are mostly used to send pointers in +-messages between GHC and iserv. ++RemoteRef is a StablePtr to a heap-resident value. When -fexternal-interpreter ++or the JS interpreter is used, this value resides in the external process's ++heap. RemoteRefs are mostly used to send pointers in messages between GHC and ++iserv. + + A RemoteRef must be explicitly freed when no longer required, using + freeHValueRefs, or by attaching a finalizer with mkForeignHValue. +@@ -709,20 +649,18 @@ principle it would probably be ok, but it seems less hairy this way. + -- 'RemoteRef' when it is no longer referenced. + mkFinalizedHValue :: Interp -> RemoteRef a -> IO (ForeignRef a) + mkFinalizedHValue interp rref = do +- let hvref = toHValueRef rref +- +- free <- case interpInstance interp of ++ case interpInstance interp of + #if defined(HAVE_INTERNAL_INTERPRETER) +- InternalInterp -> return (freeRemoteRef hvref) ++ InternalInterp -> mkForeignRef rref (freeRemoteRef rref) + #endif +- ExternalInterp _ (IServ i) -> return $ modifyMVar_ i $ \state -> +- case state of +- IServPending {} -> pure state -- already shut down +- IServRunning inst -> do +- let !inst' = inst {iservPendingFrees = hvref:iservPendingFrees inst} +- pure (IServRunning inst') ++ ExternalInterp ext -> withExtInterpMaybe ext $ \case ++ Nothing -> mkForeignRef rref (pure ()) -- nothing to do, interpreter already stopped ++ Just inst -> mkForeignRef rref (freeReallyRemoteRef inst rref) + +- mkForeignRef rref free ++freeReallyRemoteRef :: ExtInterpInstance d -> RemoteRef a -> IO () ++freeReallyRemoteRef inst rref = ++ -- add to the list of HValues to free ++ modifyMVar_ (instPendingFrees inst) (\xs -> pure (castRemoteRef rref : xs)) + + + freeHValueRefs :: Interp -> [HValueRef] -> IO () +@@ -772,7 +710,9 @@ interpreterProfiled interp = case interpInstance interp of + #if defined(HAVE_INTERNAL_INTERPRETER) + InternalInterp -> hostIsProfiled + #endif +- ExternalInterp c _ -> iservConfProfiled c ++ ExternalInterp ext -> case ext of ++ ExtIServ i -> iservConfProfiled (interpConfig i) ++ ExtJS {} -> False -- we don't support profiling yet in the JS backend + + -- | Interpreter uses Dynamic way + interpreterDynamic :: Interp -> Bool +@@ -780,4 +720,6 @@ interpreterDynamic interp = case interpInstance interp of + #if defined(HAVE_INTERNAL_INTERPRETER) + InternalInterp -> hostIsDynamic + #endif +- ExternalInterp c _ -> iservConfDynamic c ++ ExternalInterp ext -> case ext of ++ ExtIServ i -> iservConfDynamic (interpConfig i) ++ ExtJS {} -> False -- dynamic doesn't make sense for JS +diff --git a/compiler/GHC/Runtime/Interpreter/JS.hs b/compiler/GHC/Runtime/Interpreter/JS.hs +new file mode 100644 +index 0000000000..2016eb4458 +--- /dev/null ++++ b/compiler/GHC/Runtime/Interpreter/JS.hs +@@ -0,0 +1,391 @@ ++{-# LANGUAGE GADTs #-} ++{-# LANGUAGE TupleSections #-} ++{-# LANGUAGE BlockArguments #-} ++{-# LANGUAGE LambdaCase #-} ++ ++-- | JavaScript interpreter ++-- ++-- The JS interpreter works as follows: ++-- ++-- ghc-interp.js is a simple JS script used to bootstrap the external ++-- interpreter server (iserv) that is written in Haskell. This script waits for ++-- commands on stdin: ++-- LOAD foo.js -- load a JS file in the current JS environment ++-- RUN_SERVER -- execute h$main(h$ghciZCGHCiziServerzidefaultServer) ++-- (entry point of the interpreter server) ++-- ++-- On the GHC side, when we need the interpreter we do the following: ++-- ++-- 1. spawn nodejs with $topdir/ghc-interp.js script ++-- 2. link the JS rts and send a LOAD command to load it ++-- 3. link iserv (i.e. use GHCi.Server.defaultServer as root) and LOAD it ++-- 4. send a RUN_SERVER command to execute the JS iserv ++-- ++-- From this moment on, everything happens as with the native iserv, using a ++-- pipe for communication, with the following differences: ++-- ++-- - the JS iserv only supports the LoadObj linking command which has been ++-- repurposed to load a JS source file. The JS iserv doesn't deal with ++-- libraries (.a) and with object files (.o). The linker state is maintained on ++-- the GHC side and GHC only sends the appropriate chunks of JS code to link. ++-- ++-- - the JS iserv doesn't support ByteCode (i.e. it doesn't support CreateBCOs ++-- messages). JS iserv clients should use the usual JS compilation pipeline and ++-- send JS code instead. See GHC.Driver.Main.hscCompileCoreExpr for an example. ++-- ++-- GHC keeps track of JS blocks (JS unit of linking corresponding to top-level ++-- binding groups) that have already been linked by the JS interpreter. It only ++-- links new ones when necessary, using the JS linker incremental link plan ++-- feature. ++-- ++-- Note that the JS interpreter isn't subject to staging issues: we can use it ++-- in a Stage1 GHC. ++-- ++module GHC.Runtime.Interpreter.JS ++ ( spawnJSInterp ++ , jsLinkRts ++ , jsLinkInterp ++ , jsLinkObject ++ , jsLinkObjects ++ , jsLoadFile ++ , jsRunServer ++ -- * Reexported for convenience ++ , mkExportedModFuns ++ ) ++where ++ ++import GHC.Prelude ++import GHC.Runtime.Interpreter.Types ++import GHC.Runtime.Interpreter.Process ++import GHC.Runtime.Utils ++import GHCi.Message ++ ++import GHC.StgToJS.Linker.Types ++import GHC.StgToJS.Linker.Linker ++import GHC.StgToJS.Types ++import GHC.StgToJS.Object ++ ++import GHC.Unit.Env ++import GHC.Unit.Types ++import GHC.Unit.State ++ ++import GHC.Utils.Logger ++import GHC.Utils.TmpFs ++import GHC.Utils.Panic ++import GHC.Utils.Error (logInfo) ++import GHC.Utils.Outputable (text) ++import GHC.Data.FastString ++import GHC.Types.Unique.FM ++ ++import Control.Concurrent ++import Control.Monad ++ ++import System.Process ++import System.IO ++import System.FilePath ++ ++import Data.IORef ++import qualified Data.Set as Set ++import qualified Data.ByteString as B ++ ++import Foreign.C.String ++ ++--------------------------------------------------------- ++-- Running node ++--------------------------------------------------------- ++ ++-- | Start NodeJS interactively with "ghc-interp.js" script loaded in ++startTHRunnerProcess :: FilePath -> NodeJsSettings -> IO (Handle,InterpProcess) ++startTHRunnerProcess interp_js settings = do ++ interp_in <- newIORef undefined ++ ++ let createProc cp = do ++ let cp' = cp ++ { std_in = CreatePipe ++ , std_out = Inherit ++ , std_err = Inherit ++ } ++ (mb_in, _mb_out, _mb_err, hdl) <- createProcess cp' ++ -- we can't directly return stdin for the process given the current ++ -- implementation of runWithPipes. So we just use an IORef for this... ++ case mb_in of ++ Nothing -> panic "startTHRunnerProcess: expected stdin for interpreter" ++ Just i -> writeIORef interp_in i ++ return hdl ++ ++ (hdl, rh, wh) <- runWithPipes createProc (nodeProgram settings) ++ [interp_js] ++ (nodeExtraArgs settings) ++ std_in <- readIORef interp_in ++ ++ lo_ref <- newIORef Nothing ++ let pipe = Pipe { pipeRead = rh, pipeWrite = wh, pipeLeftovers = lo_ref } ++ let proc = InterpProcess ++ { interpHandle = hdl ++ , interpPipe = pipe ++ } ++ pure (std_in, proc) ++ ++-- | Spawn a JS interpreter ++-- ++-- Run NodeJS with "ghc-interp.js" loaded in. Then load GHCi.Server and its deps ++-- (including the rts) and run GHCi.Server.defaultServer. ++spawnJSInterp :: JSInterpConfig -> IO (ExtInterpInstance JSInterpExtra) ++spawnJSInterp cfg = do ++ let logger= jsInterpLogger cfg ++ when (logVerbAtLeast logger 2) $ ++ logInfo logger (text "Spawning JS interpreter") ++ ++ let tmpfs = jsInterpTmpFs cfg ++ tmp_dir = jsInterpTmpDir cfg ++ logger = jsInterpLogger cfg ++ codegen_cfg = jsInterpCodegenCfg cfg ++ unit_env = jsInterpUnitEnv cfg ++ finder_opts = jsInterpFinderOpts cfg ++ finder_cache = jsInterpFinderCache cfg ++ ++ (std_in, proc) <- startTHRunnerProcess (jsInterpScript cfg) (jsInterpNodeConfig cfg) ++ ++ js_state <- newMVar (JSState ++ { jsLinkState = emptyLinkPlan ++ , jsServerStarted = False ++ }) ++ ++ -- get the unit-id of the ghci package. We need this to load the ++ -- interpreter code. ++ ghci_unit_id <- case lookupPackageName (ue_units unit_env) (PackageName (fsLit "ghci")) of ++ Nothing -> cmdLineErrorIO "JS interpreter: couldn't find \"ghci\" package" ++ Just i -> pure i ++ ++ let extra = JSInterpExtra ++ { instStdIn = std_in ++ , instJSState = js_state ++ , instFinderCache = finder_cache ++ , instFinderOpts = finder_opts ++ , instGhciUnitId = ghci_unit_id ++ } ++ ++ pending_frees <- newMVar [] ++ lookup_cache <- newMVar emptyUFM ++ let inst = ExtInterpInstance ++ { instProcess = proc ++ , instPendingFrees = pending_frees ++ , instLookupSymbolCache = lookup_cache ++ , instExtra = extra ++ } ++ ++ -- link rts and its deps ++ jsLinkRts logger tmpfs tmp_dir codegen_cfg unit_env inst ++ ++ -- link interpreter and its deps ++ jsLinkInterp logger tmpfs tmp_dir codegen_cfg unit_env inst ++ ++ -- run interpreter main loop ++ jsRunServer inst ++ ++ pure inst ++ ++ ++ ++--------------------------------------------------------- ++-- Interpreter commands ++--------------------------------------------------------- ++ ++-- | Link JS RTS ++jsLinkRts :: Logger -> TmpFs -> TempDir -> StgToJSConfig -> UnitEnv -> ExtInterpInstance JSInterpExtra -> IO () ++jsLinkRts logger tmpfs tmp_dir cfg unit_env inst = do ++ let link_cfg = JSLinkConfig ++ { lcNoStats = True -- we don't need the stats ++ , lcNoRts = False -- we need the RTS ++ , lcCombineAll = False -- we don't need the combined all.js, we'll link each part independently below ++ , lcForeignRefs = False -- we don't need foreign references ++ , lcNoJSExecutables = True -- we don't need executables ++ , lcNoHsMain = True -- nor HsMain ++ } ++ ++ -- link the RTS and its dependencies (things it uses from `base`, etc.) ++ let link_spec = LinkSpec ++ { lks_unit_ids = [rtsUnitId, baseUnitId, primUnitId] ++ , lks_obj_files = mempty ++ , lks_obj_root_filter = const False ++ , lks_extra_roots = mempty ++ , lks_extra_js = mempty ++ } ++ ++ let finder_opts = instFinderOpts (instExtra inst) ++ finder_cache = instFinderCache (instExtra inst) ++ ++ link_plan <- computeLinkDependencies cfg unit_env link_spec finder_opts finder_cache ++ jsLinkPlan logger tmpfs tmp_dir link_cfg cfg inst link_plan ++ ++-- | Link JS interpreter ++jsLinkInterp :: Logger -> TmpFs -> TempDir -> StgToJSConfig -> UnitEnv -> ExtInterpInstance JSInterpExtra -> IO () ++jsLinkInterp logger tmpfs tmp_dir cfg unit_env inst = do ++ ++ let link_cfg = JSLinkConfig ++ { lcNoStats = True -- we don't need the stats ++ , lcNoRts = True -- we don't need the RTS ++ , lcCombineAll = False -- we don't need the combined all.js, we'll link each part independently below ++ , lcForeignRefs = False -- we don't need foreign references ++ , lcNoJSExecutables = True -- we don't need executables ++ , lcNoHsMain = True -- nor HsMain ++ } ++ ++ let is_root _ = True -- FIXME: we shouldn't consider every function as a root ++ ++ let ghci_unit_id = instGhciUnitId (instExtra inst) ++ ++ -- compute unit dependencies of ghc_unit_id ++ let unit_map = unitInfoMap (ue_units unit_env) ++ dep_units <- mayThrowUnitErr $ closeUnitDeps unit_map [(ghci_unit_id,Nothing)] ++ let units = dep_units ++ [ghci_unit_id] ++ ++ -- indicate that our root function is GHCi.Server.defaultServer ++ let root_deps = Set.fromList $ mkExportedFuns ghci_unit_id (fsLit "GHCi.Server") [fsLit "defaultServer"] ++ ++ -- link the interpreter and its dependencies ++ let link_spec = LinkSpec ++ { lks_unit_ids = units ++ , lks_obj_files = mempty ++ , lks_obj_root_filter = is_root ++ , lks_extra_roots = root_deps ++ , lks_extra_js = mempty ++ } ++ ++ let finder_cache = instFinderCache (instExtra inst) ++ finder_opts = instFinderOpts (instExtra inst) ++ ++ link_plan <- computeLinkDependencies cfg unit_env link_spec finder_opts finder_cache ++ ++ jsLinkPlan logger tmpfs tmp_dir link_cfg cfg inst link_plan ++ ++ ++-- | Link object files ++jsLinkObjects :: Logger -> TmpFs -> TempDir -> StgToJSConfig -> UnitEnv -> ExtInterpInstance JSInterpExtra -> [FilePath] -> (ExportedFun -> Bool) -> IO () ++jsLinkObjects logger tmpfs tmp_dir cfg unit_env inst objs is_root = do ++ let link_cfg = JSLinkConfig ++ { lcNoStats = True -- we don't need the stats ++ , lcNoRts = True -- we don't need the RTS (already linked) ++ , lcCombineAll = False -- we don't need the combined all.js, we'll link each part independently below ++ , lcForeignRefs = False -- we don't need foreign references ++ , lcNoJSExecutables = True -- we don't need executables ++ , lcNoHsMain = True -- nor HsMain ++ } ++ ++ let units = preloadUnits (ue_units unit_env) ++ ++ [thUnitId] -- don't forget TH which is an implicit dep ++ ++ -- compute dependencies ++ let link_spec = LinkSpec ++ { lks_unit_ids = units ++ , lks_obj_files = fmap ObjFile objs ++ , lks_obj_root_filter = is_root ++ , lks_extra_roots = mempty ++ , lks_extra_js = mempty ++ } ++ ++ let finder_opts = instFinderOpts (instExtra inst) ++ finder_cache = instFinderCache (instExtra inst) ++ ++ link_plan <- computeLinkDependencies cfg unit_env link_spec finder_opts finder_cache ++ ++ -- link ++ jsLinkPlan logger tmpfs tmp_dir link_cfg cfg inst link_plan ++ ++ ++ ++-- | Link an object file using the given functions as roots ++jsLinkObject :: Logger -> TmpFs -> TempDir -> StgToJSConfig -> UnitEnv -> ExtInterpInstance JSInterpExtra -> FilePath -> [ExportedFun] -> IO () ++jsLinkObject logger tmpfs tmp_dir cfg unit_env inst obj roots = do ++ let is_root f = Set.member f (Set.fromList roots) ++ let objs = [obj] ++ jsLinkObjects logger tmpfs tmp_dir cfg unit_env inst objs is_root ++ ++ ++-- | Link the given link plan ++-- ++-- Perform incremental linking by removing what is already linked from the plan ++jsLinkPlan :: Logger -> TmpFs -> TempDir -> JSLinkConfig -> StgToJSConfig -> ExtInterpInstance JSInterpExtra -> LinkPlan -> IO () ++jsLinkPlan logger tmpfs tmp_dir link_cfg cfg inst link_plan = do ++ ---------------------------------------------------------------- ++ -- Get already linked stuff and compute incremental plan ++ ---------------------------------------------------------------- ++ ++ old_plan <- jsLinkState <$> readMVar (instJSState (instExtra inst)) ++ ++ -- compute new plan discarding what's already linked ++ let (diff_plan, total_plan) = incrementLinkPlan old_plan link_plan ++ ++ ---------------------------------------------------------------- ++ -- Generate JS code for the incremental plan ++ ---------------------------------------------------------------- ++ ++ tmp_out <- newTempSubDir logger tmpfs tmp_dir ++ void $ jsLink link_cfg cfg logger tmp_out diff_plan ++ ++ -- Code has been linked into the following files: ++ -- - generated rts from tmp_out/rts.js (depends on link options) ++ -- - raw js files from tmp_out/lib.js ++ -- - Haskell generated JS from tmp_out/out.js ++ ++ -- We need to combine at least rts.js and lib.js for the RTS because they ++ -- depend on each other. We might as well combine them all, so that's what we ++ -- do. ++ let filenames ++ | lcNoRts link_cfg = ["lib.js", "out.js"] ++ | otherwise = ["rts.js", "lib.js", "out.js"] ++ let files = map (tmp_out ) filenames ++ let all_js = tmp_out "all.js" ++ let all_files = all_js : files ++ withBinaryFile all_js WriteMode $ \h -> do ++ let cpy i = B.readFile i >>= B.hPut h ++ mapM_ cpy files ++ ++ -- add files to clean ++ addFilesToClean tmpfs TFL_CurrentModule all_files ++ ++ ---------------------------------------------------------------- ++ -- Link JS code ++ ---------------------------------------------------------------- ++ ++ -- linking JS code depends on the phase we're in: ++ -- - during in the initialization phase, we send a LoadFile message to the ++ -- JS server; ++ -- - once the Haskell server is started, we send a LoadObj message to the ++ -- Haskell server. ++ server_started <- jsServerStarted <$> readMVar (instJSState (instExtra inst)) ++ if server_started ++ then sendMessageNoResponse inst $ LoadObj all_js ++ else jsLoadFile inst all_js ++ ++ ---------------------------------------------------------------- ++ -- update linker state ++ ---------------------------------------------------------------- ++ modifyMVar_ (instJSState (instExtra inst)) $ \state -> pure state { jsLinkState = total_plan } ++ ++ ++-- | Send a command to the JS interpreter ++jsSendCommand :: ExtInterpInstance JSInterpExtra -> String -> IO () ++jsSendCommand inst cmd = send_cmd cmd ++ where ++ extra = instExtra inst ++ handle = instStdIn extra ++ send_cmd s = do ++ withCStringLen s \(p,n) -> hPutBuf handle p n ++ hFlush handle ++ ++-- | Load a JS file in the interpreter ++jsLoadFile :: ExtInterpInstance JSInterpExtra -> FilePath -> IO () ++jsLoadFile inst path = jsSendCommand inst ("LOAD " ++ path ++ "\n") ++ ++-- | Run JS server ++jsRunServer :: ExtInterpInstance JSInterpExtra -> IO () ++jsRunServer inst = do ++ let ghci_unit_id = instGhciUnitId (instExtra inst) ++ let zghci_unit_id = zString (zEncodeFS (unitIdFS ghci_unit_id)) ++ ++ -- Run `GHCi.Server.defaultServer` ++ jsSendCommand inst ("RUN_SERVER " ++ zghci_unit_id ++ "\n") ++ ++ -- indicate that the Haskell server is now started ++ modifyMVar_ (instJSState (instExtra inst)) $ \state -> pure state { jsServerStarted = True } +diff --git a/compiler/GHC/Runtime/Interpreter/Process.hs b/compiler/GHC/Runtime/Interpreter/Process.hs +new file mode 100644 +index 0000000000..a93d00d7bc +--- /dev/null ++++ b/compiler/GHC/Runtime/Interpreter/Process.hs +@@ -0,0 +1,102 @@ ++module GHC.Runtime.Interpreter.Process ++ ( ++ -- * Low-level API ++ callInterpProcess ++ , readInterpProcess ++ , writeInterpProcess ++ ++ -- * Message API ++ , Message(..) ++ , DelayedResponse (..) ++ , sendMessage ++ , sendMessageNoResponse ++ , sendMessageDelayedResponse ++ , sendAnyValue ++ , receiveAnyValue ++ , receiveDelayedResponse ++ , receiveTHMessage ++ ++ ) ++where ++ ++import GHC.Prelude ++ ++import GHC.Runtime.Interpreter.Types ++import GHCi.Message ++ ++import GHC.IO (catchException) ++import GHC.Utils.Panic ++import GHC.Utils.Exception as Ex ++ ++import Data.Binary ++import System.Exit ++import System.Process ++ ++data DelayedResponse a = DelayedResponse ++ ++-- | Send a message to the interpreter process that doesn't expect a response ++sendMessageNoResponse :: ExtInterpInstance d -> Message () -> IO () ++sendMessageNoResponse i m = writeInterpProcess (instProcess i) (putMessage m) ++ ++-- | Send a message to the interpreter that excepts a response ++sendMessage :: Binary a => ExtInterpInstance d -> Message a -> IO a ++sendMessage i m = callInterpProcess (instProcess i) m ++ ++-- | Send a message to the interpreter process whose response is expected later ++-- ++-- This is useful to avoid forgetting to receive the value and to ensure that ++-- the type of the response isn't lost. Use receiveDelayedResponse to read it. ++sendMessageDelayedResponse :: ExtInterpInstance d -> Message a -> IO (DelayedResponse a) ++sendMessageDelayedResponse i m = do ++ writeInterpProcess (instProcess i) (putMessage m) ++ pure DelayedResponse ++ ++-- | Send any value ++sendAnyValue :: Binary a => ExtInterpInstance d -> a -> IO () ++sendAnyValue i m = writeInterpProcess (instProcess i) (put m) ++ ++-- | Expect a value to be received ++receiveAnyValue :: ExtInterpInstance d -> Get a -> IO a ++receiveAnyValue i get = readInterpProcess (instProcess i) get ++ ++-- | Expect a delayed result to be received now ++receiveDelayedResponse :: Binary a => ExtInterpInstance d -> DelayedResponse a -> IO a ++receiveDelayedResponse i DelayedResponse = readInterpProcess (instProcess i) get ++ ++-- | Expect a value to be received ++receiveTHMessage :: ExtInterpInstance d -> IO THMsg ++receiveTHMessage i = receiveAnyValue i getTHMessage ++ ++ ++-- ----------------------------------------------------------------------------- ++-- Low-level API ++ ++-- | Send a 'Message' and receive the response from the interpreter process ++callInterpProcess :: Binary a => InterpProcess -> Message a -> IO a ++callInterpProcess i msg = ++ remoteCall (interpPipe i) msg ++ `catchException` \(e :: SomeException) -> handleInterpProcessFailure i e ++ ++-- | Read a value from the interpreter process ++readInterpProcess :: InterpProcess -> Get a -> IO a ++readInterpProcess i get = ++ readPipe (interpPipe i) get ++ `catchException` \(e :: SomeException) -> handleInterpProcessFailure i e ++ ++-- | Send a value to the interpreter process ++writeInterpProcess :: InterpProcess -> Put -> IO () ++writeInterpProcess i put = ++ writePipe (interpPipe i) put ++ `catchException` \(e :: SomeException) -> handleInterpProcessFailure i e ++ ++handleInterpProcessFailure :: InterpProcess -> SomeException -> IO a ++handleInterpProcessFailure i e = do ++ let hdl = interpHandle i ++ ex <- getProcessExitCode hdl ++ case ex of ++ Just (ExitFailure n) -> ++ throwIO (InstallationError ("External interpreter terminated (" ++ show n ++ ")")) ++ _ -> do ++ terminateProcess hdl ++ _ <- waitForProcess hdl ++ throw e +diff --git a/compiler/GHC/Runtime/Interpreter/Types.hs b/compiler/GHC/Runtime/Interpreter/Types.hs +index e1b33198d0..962c21491f 100644 +--- a/compiler/GHC/Runtime/Interpreter/Types.hs ++++ b/compiler/GHC/Runtime/Interpreter/Types.hs +@@ -4,10 +4,22 @@ + module GHC.Runtime.Interpreter.Types + ( Interp(..) + , InterpInstance(..) +- , IServ(..) +- , IServInstance(..) ++ , InterpProcess (..) ++ , ExtInterp (..) ++ , ExtInterpStatusVar ++ , ExtInterpInstance (..) ++ , ExtInterpState (..) ++ , InterpStatus(..) ++ -- * IServ ++ , IServ + , IServConfig(..) +- , IServState(..) ++ -- * JSInterp ++ , JSInterp ++ , JSInterpExtra (..) ++ , JSInterpConfig (..) ++ , JSState (..) ++ , NodeJsSettings (..) ++ , defaultNodeJsSettings + ) + where + +@@ -20,8 +32,17 @@ import GHC.Types.Unique.FM + import GHC.Data.FastString ( FastString ) + import Foreign + ++import GHC.Utils.TmpFs ++import GHC.Utils.Logger ++import GHC.Unit.Env ++import GHC.Unit.Types ++import GHC.StgToJS.Types ++import GHC.StgToJS.Linker.Types ++ + import Control.Concurrent + import System.Process ( ProcessHandle, CreateProcess ) ++import System.IO ++import GHC.Unit.Finder.Types (FinderCache, FinderOpts) + + -- | Interpreter + data Interp = Interp +@@ -32,24 +53,40 @@ data Interp = Interp + -- ^ Interpreter loader + } + +- + data InterpInstance +- = ExternalInterp !IServConfig !IServ -- ^ External interpreter ++ = ExternalInterp !ExtInterp -- ^ External interpreter + #if defined(HAVE_INTERNAL_INTERPRETER) +- | InternalInterp -- ^ Internal interpreter ++ | InternalInterp -- ^ Internal interpreter + #endif + ++data ExtInterp ++ = ExtIServ !IServ ++ | ExtJS !JSInterp ++ + -- | External interpreter + -- + -- The external interpreter is spawned lazily (on first use) to avoid slowing + -- down sessions that don't require it. The contents of the MVar reflects the + -- state of the interpreter (running or not). +-newtype IServ = IServ (MVar IServState) ++data ExtInterpState cfg details = ExtInterpState ++ { interpConfig :: !cfg ++ , interpStatus :: !(ExtInterpStatusVar details) ++ } ++ ++type ExtInterpStatusVar d = MVar (InterpStatus (ExtInterpInstance d)) ++ ++type IServ = ExtInterpState IServConfig () ++type JSInterp = ExtInterpState JSInterpConfig JSInterpExtra + +--- | State of an external interpreter +-data IServState +- = IServPending -- ^ Not spawned yet +- | IServRunning !IServInstance -- ^ Running ++data InterpProcess = InterpProcess ++ { interpPipe :: !Pipe -- ^ Pipe to communicate with the server ++ , interpHandle :: !ProcessHandle -- ^ Process handle of the server ++ } ++ ++-- | Status of an external interpreter ++data InterpStatus inst ++ = InterpPending -- ^ Not spawned yet ++ | InterpRunning !inst -- ^ Running + + -- | Configuration needed to spawn an external interpreter + data IServConfig = IServConfig +@@ -61,14 +98,66 @@ data IServConfig = IServConfig + , iservConfTrace :: IO () -- ^ Trace action executed after spawn + } + +--- | External interpreter instance +-data IServInstance = IServInstance +- { iservPipe :: !Pipe +- , iservProcess :: !ProcessHandle +- , iservLookupSymbolCache :: !(UniqFM FastString (Ptr ())) +- , iservPendingFrees :: ![HValueRef] ++-- | Common field between native external interpreter and the JS one ++data ExtInterpInstance c = ExtInterpInstance ++ { instProcess :: {-# UNPACK #-} !InterpProcess ++ -- ^ External interpreter process and its pipe (communication channel) ++ ++ , instPendingFrees :: !(MVar [HValueRef]) + -- ^ Values that need to be freed before the next command is sent. +- -- Threads can append values to this list asynchronously (by modifying the +- -- IServ state MVar). ++ -- Finalizers for ForeignRefs can append values to this list ++ -- asynchronously. ++ ++ , instLookupSymbolCache :: !(MVar (UniqFM FastString (Ptr ()))) ++ -- ^ LookupSymbol cache ++ ++ , instExtra :: !c ++ -- ^ Instance specific extra fields ++ } ++ ++------------------------ ++-- JS Stuff ++------------------------ ++ ++data JSInterpExtra = JSInterpExtra ++ { instStdIn :: !Handle -- ^ Stdin for the process ++ , instFinderCache :: !FinderCache ++ , instFinderOpts :: !FinderOpts ++ , instJSState :: !(MVar JSState) -- ^ Mutable state ++ , instGhciUnitId :: !UnitId -- ^ GHCi unit-id ++ } ++ ++data JSState = JSState ++ { jsLinkState :: !LinkPlan -- ^ Linker state of the interpreter ++ , jsServerStarted :: !Bool -- ^ Is the Haskell server started? ++ } ++ ++-- | NodeJs configuration ++data NodeJsSettings = NodeJsSettings ++ { nodeProgram :: FilePath -- ^ location of node.js program ++ , nodePath :: Maybe FilePath -- ^ value of NODE_PATH environment variable (search path for Node modules; GHCJS used to provide some) ++ , nodeExtraArgs :: [String] -- ^ extra arguments to pass to node.js ++ , nodeKeepAliveMaxMem :: Integer -- ^ keep node.js (TH, GHCJSi) processes alive if they don't use more than this ++ } ++ ++defaultNodeJsSettings :: NodeJsSettings ++defaultNodeJsSettings = NodeJsSettings ++ { nodeProgram = "node" ++ , nodePath = Nothing ++ , nodeExtraArgs = [] ++ , nodeKeepAliveMaxMem = 536870912 ++ } ++ ++ ++data JSInterpConfig = JSInterpConfig ++ { jsInterpNodeConfig :: !NodeJsSettings -- ^ NodeJS settings ++ , jsInterpScript :: !FilePath -- ^ Path to "ghc-interp.js" script ++ , jsInterpTmpFs :: !TmpFs ++ , jsInterpTmpDir :: !TempDir ++ , jsInterpLogger :: !Logger ++ , jsInterpCodegenCfg :: !StgToJSConfig ++ , jsInterpUnitEnv :: !UnitEnv ++ , jsInterpFinderOpts :: !FinderOpts ++ , jsInterpFinderCache :: !FinderCache + } + +diff --git a/compiler/GHC/Runtime/Utils.hs b/compiler/GHC/Runtime/Utils.hs +new file mode 100644 +index 0000000000..083d592990 +--- /dev/null ++++ b/compiler/GHC/Runtime/Utils.hs +@@ -0,0 +1,84 @@ ++{-# LANGUAGE CPP #-} ++ ++module GHC.Runtime.Utils ++ ( runWithPipes ++ ) ++where ++ ++import GHC.Prelude ++ ++#if defined(mingw32_HOST_OS) ++import Foreign.C ++import GHC.IO.Handle.FD (fdToHandle) ++import GHC.Utils.Exception as Ex ++# if defined(__IO_MANAGER_WINIO__) ++import GHC.IO.SubSystem (()) ++import GHC.IO.Handle.Windows (handleToHANDLE) ++import GHC.Event.Windows (associateHandle') ++# endif ++#else ++import System.Posix as Posix ++#endif ++import System.Process ++import System.IO ++ ++runWithPipes :: (CreateProcess -> IO ProcessHandle) ++ -> FilePath -> [String] -> [String] -> IO (ProcessHandle, Handle, Handle) ++#if defined(mingw32_HOST_OS) ++foreign import ccall "io.h _close" ++ c__close :: CInt -> IO CInt ++ ++foreign import ccall unsafe "io.h _get_osfhandle" ++ _get_osfhandle :: CInt -> IO CInt ++ ++runWithPipesPOSIX :: (CreateProcess -> IO ProcessHandle) ++ -> FilePath -> [String] -> [String] -> IO (ProcessHandle, Handle, Handle) ++runWithPipesPOSIX createProc prog pre_opts opts = do ++ (rfd1, wfd1) <- createPipeFd -- we read on rfd1 ++ (rfd2, wfd2) <- createPipeFd -- we write on wfd2 ++ wh_client <- _get_osfhandle wfd1 ++ rh_client <- _get_osfhandle rfd2 ++ let args = pre_opts ++ (show wh_client : show rh_client : opts) ++ ph <- createProc (proc prog args) ++ rh <- mkHandle rfd1 ++ wh <- mkHandle wfd2 ++ return (ph, rh, wh) ++ where mkHandle :: CInt -> IO Handle ++ mkHandle fd = (fdToHandle fd) `Ex.onException` (c__close fd) ++ ++# if defined (__IO_MANAGER_WINIO__) ++runWithPipesNative :: (CreateProcess -> IO ProcessHandle) ++ -> FilePath -> [String] -> [String] -> IO (ProcessHandle, Handle, Handle) ++runWithPipesNative createProc prog pre_opts opts = do ++ (rh, wfd1) <- createPipe -- we read on rfd1 ++ (rfd2, wh) <- createPipe -- we write on wfd2 ++ wh_client <- handleToHANDLE wfd1 ++ rh_client <- handleToHANDLE rfd2 ++ -- Associate the handle with the current manager ++ -- but don't touch the ones we're passing to the child ++ -- since it needs to register the handle with its own manager. ++ associateHandle' =<< handleToHANDLE rh ++ associateHandle' =<< handleToHANDLE wh ++ let args = pre_opts ++ (show wh_client : show rh_client : opts) ++ ph <- createProc (proc prog args) ++ return (ph, rh, wh) ++ ++runWithPipes = runWithPipesPOSIX runWithPipesNative ++# else ++runWithPipes = runWithPipesPOSIX ++# endif ++#else ++runWithPipes createProc prog pre_opts opts = do ++ (rfd1, wfd1) <- Posix.createPipe -- we read on rfd1 ++ (rfd2, wfd2) <- Posix.createPipe -- we write on wfd2 ++ setFdOption rfd1 CloseOnExec True ++ setFdOption wfd2 CloseOnExec True ++ let args = pre_opts ++ (show wfd1 : show rfd2 : opts) ++ ph <- createProc (proc prog args) ++ closeFd wfd1 ++ closeFd rfd2 ++ rh <- fdToHandle rfd1 ++ wh <- fdToHandle wfd2 ++ return (ph, rh, wh) ++#endif ++ +diff --git a/compiler/GHC/StgToJS/CodeGen.hs b/compiler/GHC/StgToJS/CodeGen.hs +index 7703398aea..9bf0f7e0ec 100644 +--- a/compiler/GHC/StgToJS/CodeGen.hs ++++ b/compiler/GHC/StgToJS/CodeGen.hs +@@ -90,11 +90,11 @@ stgToJS logger config stg_binds0 this_mod spt_entries foreign_stubs cccs output_ + -- Doc to dump when -ddump-js is enabled + when (logHasDumpFlag logger Opt_D_dump_js) $ do + putDumpFileMaybe logger Opt_D_dump_js "JavaScript code" FormatJS +- $ vcat (fmap (docToSDoc . jsToDoc . oiStat . luObjUnit) lus) ++ $ vcat (fmap (docToSDoc . jsToDoc . oiStat . luObjBlock) lus) + + -- Write the object file + bh <- openBinMem (4 * 1024 * 1000) -- a bit less than 4kB +- Object.putObject bh (moduleName this_mod) deps (map luObjUnit lus) ++ Object.putObject bh (moduleName this_mod) deps (map luObjBlock lus) + + createDirectoryIfMissing True (takeDirectory output_fn) + writeBinMem bh output_fn +@@ -137,7 +137,7 @@ genUnits m ss spt_entries foreign_stubs = do + jsSaturate (Just $ modulePrefix m 1) + $ mconcat (reverse glbl) <> staticInit) + let syms = [moduleGlobalSymbol m] +- let oi = ObjUnit ++ let oi = ObjBlock + { oiSymbols = syms + , oiClInfo = [] + , oiStatic = [] +@@ -147,7 +147,7 @@ genUnits m ss spt_entries foreign_stubs = do + , oiFImports = [] + } + let lu = LinkableUnit +- { luObjUnit = oi ++ { luObjBlock = oi + , luIdExports = [] + , luOtherExports = syms + , luIdDeps = [] +@@ -169,7 +169,7 @@ genUnits m ss spt_entries foreign_stubs = do + + let syms = [moduleExportsSymbol m] + let raw = utf8EncodeByteString $ renderWithContext defaultSDocContext f_c +- let oi = ObjUnit ++ let oi = ObjBlock + { oiSymbols = syms + , oiClInfo = [] + , oiStatic = [] +@@ -179,7 +179,7 @@ genUnits m ss spt_entries foreign_stubs = do + , oiFImports = [] + } + let lu = LinkableUnit +- { luObjUnit = oi ++ { luObjBlock = oi + , luIdExports = [] + , luOtherExports = syms + , luIdDeps = [] +@@ -210,7 +210,7 @@ genUnits m ss spt_entries foreign_stubs = do + let stat = jsSaturate (Just $ modulePrefix m n) body + let ids = [bnd] + syms <- (\(TxtI i) -> [i]) <$> identForId bnd +- let oi = ObjUnit ++ let oi = ObjBlock + { oiSymbols = syms + , oiClInfo = [] + , oiStatic = si +@@ -220,7 +220,7 @@ genUnits m ss spt_entries foreign_stubs = do + , oiFImports = [] + } + let lu = LinkableUnit +- { luObjUnit = oi ++ { luObjBlock = oi + , luIdExports = ids + , luOtherExports = [] + , luIdDeps = [] +@@ -248,7 +248,7 @@ genUnits m ss spt_entries foreign_stubs = do + jsSaturate (Just $ modulePrefix m n) + $ mconcat (reverse extraTl) <> tl + syms <- mapM (fmap (\(TxtI i) -> i) . identForId) topDeps +- let oi = ObjUnit ++ let oi = ObjBlock + { oiSymbols = syms + , oiClInfo = ci + , oiStatic = si +@@ -258,7 +258,7 @@ genUnits m ss spt_entries foreign_stubs = do + , oiFImports = fRefs + } + let lu = LinkableUnit +- { luObjUnit = oi ++ { luObjBlock = oi + , luIdExports = topDeps + , luOtherExports = [] + , luIdDeps = allDeps +diff --git a/compiler/GHC/StgToJS/Deps.hs b/compiler/GHC/StgToJS/Deps.hs +index 2947736590..5d2964335c 100644 +--- a/compiler/GHC/StgToJS/Deps.hs ++++ b/compiler/GHC/StgToJS/Deps.hs +@@ -22,7 +22,7 @@ where + + import GHC.Prelude + +-import GHC.StgToJS.Object as Object ++import GHC.StgToJS.Object + import GHC.StgToJS.Types + import GHC.StgToJS.Ids + +@@ -56,9 +56,9 @@ import Control.Monad.Trans.Class + import Control.Monad.Trans.State + + data DependencyDataCache = DDC +- { ddcModule :: !(Word64Map Unit) -- ^ Unique Module -> Unit +- , ddcId :: !(Word64Map Object.ExportedFun) -- ^ Unique Id -> Object.ExportedFun (only to other modules) +- , ddcOther :: !(Map OtherSymb Object.ExportedFun) ++ { ddcModule :: !(Word64Map Unit) -- ^ Unique Module -> Unit ++ , ddcId :: !(Word64Map ExportedFun) -- ^ Unique Id -> ExportedFun (only to other modules) ++ , ddcOther :: !(Map OtherSymb ExportedFun) + } + + -- | Generate module dependency data +@@ -69,24 +69,16 @@ genDependencyData + :: HasDebugCallStack + => Module + -> [LinkableUnit] +- -> G Object.Deps ++ -> G BlockInfo + genDependencyData mod units = do +- -- [(blockindex, blockdeps, required, exported)] + ds <- evalStateT (mapM (uncurry oneDep) blocks) + (DDC WM.empty WM.empty M.empty) +- return $ Object.Deps +- { depsModule = mod +- , depsRequired = IS.fromList [ n | (n, _, True, _) <- ds ] +- , depsHaskellExported = M.fromList $ (\(n,_,_,es) -> map (,n) es) =<< ds +- , depsBlocks = listArray (0, length blocks-1) (map (\(_,deps,_,_) -> deps) ds) ++ return $ BlockInfo ++ { bi_module = mod ++ , bi_must_link = IS.fromList [ n | (n, _, True, _) <- ds ] ++ , bi_exports = M.fromList $ (\(n,_,_,es) -> map (,n) es) =<< ds ++ , bi_block_deps = listArray (0, length blocks-1) (map (\(_,deps,_,_) -> deps) ds) + } +- -- XXX +- -- return $ BlockInfo +- -- { bi_module = mod +- -- , bi_must_link = IS.fromList [ n | (n, _, True, _) <- ds ] +- -- , bi_exports = M.fromList $ (\(n,_,_,es) -> map (,n) es) =<< ds +- -- , bi_block_deps = listArray (0, length blocks-1) (map (\(_,deps,_,_) -> deps) ds) +- -- } + where + -- Id -> Block + unitIdExports :: UniqFM Id Int +@@ -107,7 +99,7 @@ genDependencyData mod units = do + -- generate the list of exports and set of dependencies for one unit + oneDep :: LinkableUnit + -> Int +- -> StateT DependencyDataCache G (Int, Object.BlockDeps, Bool, [Object.ExportedFun]) ++ -> StateT DependencyDataCache G (Int, BlockDeps, Bool, [ExportedFun]) + oneDep (LinkableUnit _ idExports otherExports idDeps pseudoIdDeps otherDeps req _frefs) n = do + (edi, bdi) <- partitionEithers <$> mapM (lookupIdFun n) idDeps + (edo, bdo) <- partitionEithers <$> mapM lookupOtherFun otherDeps +@@ -115,9 +107,10 @@ genDependencyData mod units = do + expi <- mapM lookupExportedId (filter isExportedId idExports) + expo <- mapM lookupExportedOther otherExports + -- fixme thin deps, remove all transitive dependencies! +- let bdeps = Object.BlockDeps +- (IS.toList . IS.fromList . filter (/=n) $ bdi++bdo++bdp) +- (S.toList . S.fromList $ edi++edo++edp) ++ let bdeps = BlockDeps ++ { blockBlockDeps = IS.toList . IS.fromList . filter (/=n) $ bdi++bdo++bdp ++ , blockFunDeps = S.toList . S.fromList $ edi++edo++edp ++ } + return (n, bdeps, req, expi++expo) + + idModule :: Id -> Maybe Module +@@ -125,7 +118,7 @@ genDependencyData mod units = do + guard (m /= mod) >> return m + + lookupPseudoIdFun :: Int -> Unique +- -> StateT DependencyDataCache G (Either Object.ExportedFun Int) ++ -> StateT DependencyDataCache G (Either ExportedFun Int) + lookupPseudoIdFun _n u = + case lookupUFM_Directly unitIdExports u of + Just k -> return (Right k) +@@ -138,14 +131,14 @@ genDependencyData mod units = do + -- assumes function is internal to the current block if it's + -- from teh current module and not in the unitIdExports map. + lookupIdFun :: Int -> Id +- -> StateT DependencyDataCache G (Either Object.ExportedFun Int) ++ -> StateT DependencyDataCache G (Either ExportedFun Int) + lookupIdFun n i = case lookupUFM unitIdExports i of + Just k -> return (Right k) + Nothing -> case idModule i of + Nothing -> return (Right n) + Just m -> + let k = getKey . getUnique $ i +- addEntry :: StateT DependencyDataCache G Object.ExportedFun ++ addEntry :: StateT DependencyDataCache G ExportedFun + addEntry = do + (TxtI idTxt) <- lift (identForId i) + lookupExternalFun (Just k) (OtherSymb m idTxt) +@@ -157,7 +150,7 @@ genDependencyData mod units = do + + -- get the function for an OtherSymb from the cache, add it if necessary + lookupOtherFun :: OtherSymb +- -> StateT DependencyDataCache G (Either Object.ExportedFun Int) ++ -> StateT DependencyDataCache G (Either ExportedFun Int) + lookupOtherFun od@(OtherSymb m idTxt) = + case M.lookup od unitOtherExports of + Just n -> return (Right n) +@@ -165,22 +158,22 @@ genDependencyData mod units = do + Nothing -> Left <$> (maybe (lookupExternalFun Nothing od) return =<< + gets (M.lookup od . ddcOther)) + +- lookupExportedId :: Id -> StateT DependencyDataCache G Object.ExportedFun ++ lookupExportedId :: Id -> StateT DependencyDataCache G ExportedFun + lookupExportedId i = do + (TxtI idTxt) <- lift (identForId i) + lookupExternalFun (Just . getKey . getUnique $ i) (OtherSymb mod idTxt) + +- lookupExportedOther :: FastString -> StateT DependencyDataCache G Object.ExportedFun ++ lookupExportedOther :: FastString -> StateT DependencyDataCache G ExportedFun + lookupExportedOther = lookupExternalFun Nothing . OtherSymb mod + + -- lookup a dependency to another module, add to the id cache if there's + -- an id key, otherwise add to other cache + lookupExternalFun :: Maybe Word64 +- -> OtherSymb -> StateT DependencyDataCache G Object.ExportedFun ++ -> OtherSymb -> StateT DependencyDataCache G ExportedFun + lookupExternalFun mbIdKey od@(OtherSymb m idTxt) = do + let mk = getKey . getUnique $ m + mpk = moduleUnit m +- exp_fun = Object.ExportedFun m (LexicalFastString idTxt) ++ exp_fun = ExportedFun m (LexicalFastString idTxt) + addCache = do + ms <- gets ddcModule + let !cache' = WM.insert mk mpk ms +diff --git a/compiler/GHC/StgToJS/Linker/Linker.hs b/compiler/GHC/StgToJS/Linker/Linker.hs +index 0739c73204..d44627f405 100644 +--- a/compiler/GHC/StgToJS/Linker/Linker.hs ++++ b/compiler/GHC/StgToJS/Linker/Linker.hs +@@ -21,7 +21,17 @@ + + module GHC.StgToJS.Linker.Linker + ( jsLinkBinary ++ , jsLink + , embedJsFile ++ , staticInitStat ++ , staticDeclStat ++ , mkExportedFuns ++ , mkExportedModFuns ++ , computeLinkDependencies ++ , LinkSpec (..) ++ , LinkPlan (..) ++ , emptyLinkPlan ++ , incrementLinkPlan + ) + where + +@@ -38,6 +48,7 @@ import GHC.SysTools.Cpp + import GHC.SysTools + + import GHC.Linker.Static.Utils (exeFileName) ++import GHC.Linker.Types (Unlinked(..), linkableUnlinked) + + import GHC.StgToJS.Linker.Types + import GHC.StgToJS.Linker.Utils +@@ -51,7 +62,7 @@ import GHC.StgToJS.Closure + + import GHC.Unit.State + import GHC.Unit.Env +-import GHC.Unit.Home ++import GHC.Unit.Home.ModInfo + import GHC.Unit.Types + import GHC.Unit.Module (moduleStableString) + +@@ -71,23 +82,17 @@ import qualified GHC.SysTools.Ar as Ar + import qualified GHC.Data.ShortText as ST + import GHC.Data.FastString + +-import Control.Concurrent.MVar + import Control.Monad + + import Data.Array + import qualified Data.ByteString as B + import qualified Data.ByteString.Char8 as BC +-import qualified Data.ByteString.Lazy.Char8 as BLC + import qualified Data.ByteString.Lazy as BL + import qualified Data.ByteString as BS + import Data.Function (on) +-import Data.IntSet (IntSet) + import qualified Data.IntSet as IS + import Data.IORef +-import Data.List ( partition, nub, intercalate, sort +- , groupBy, intersperse, +- ) +-import qualified Data.List.NonEmpty as NE ++import Data.List ( nub, intercalate, groupBy, intersperse, sortBy) + import Data.Map.Strict (Map) + import qualified Data.Map.Strict as M + import Data.Maybe +@@ -105,6 +110,10 @@ import System.Directory ( createDirectoryIfMissing + , getPermissions + ) + ++import GHC.Unit.Finder.Types ++import GHC.Unit.Finder (findObjectLinkableMaybe, initFinderCache, findHomeModule) ++import GHC.Driver.Config.Finder (initFinderOpts) ++ + data LinkerStats = LinkerStats + { bytesPerModule :: !(Map Module Word64) -- ^ number of bytes linked per module + , packedMetaDataSize :: !Word64 -- ^ number of bytes for metadata +@@ -125,7 +134,7 @@ jsLinkBinary + -> [FilePath] + -> [UnitId] + -> IO () +-jsLinkBinary lc_cfg cfg js_srcs logger dflags u_env objs dep_pkgs ++jsLinkBinary lc_cfg cfg js_srcs logger dflags unit_env objs dep_units + | lcNoJSExecutables lc_cfg = return () + | otherwise = do + -- additional objects to link are passed as FileOption ldInputs... +@@ -135,47 +144,59 @@ jsLinkBinary lc_cfg cfg js_srcs logger dflags u_env objs dep_pkgs + let + objs' = map ObjFile (objs ++ cmdline_js_objs) + js_srcs' = js_srcs ++ cmdline_js_srcs +- isRoot _ = True ++ is_root _ = True -- FIXME: we shouldn't consider every function as a root, ++ -- but only the program entry point (main), either the ++ -- generated one or coming from an object + exe = jsExeFileName dflags + +- void $ link lc_cfg cfg logger u_env exe mempty dep_pkgs objs' js_srcs' isRoot mempty ++ -- compute dependencies ++ let link_spec = LinkSpec ++ { lks_unit_ids = dep_units ++ , lks_obj_files = objs' ++ , lks_obj_root_filter = is_root ++ , lks_extra_roots = mempty ++ , lks_extra_js = js_srcs' ++ } ++ ++ -- XXX we should probably get this from the HscEnv instead? ++ finder_cache <- initFinderCache ++ ++ let finder_opts = initFinderOpts dflags ++ ++ link_plan <- computeLinkDependencies cfg unit_env link_spec finder_opts finder_cache ++ ++ void $ jsLink lc_cfg cfg logger exe link_plan + + -- | link and write result to disk (jsexe directory) +-link :: JSLinkConfig ++jsLink ++ :: JSLinkConfig + -> StgToJSConfig + -> Logger +- -> UnitEnv + -> FilePath -- ^ output file/directory +- -> [FilePath] -- ^ include path for home package +- -> [UnitId] -- ^ packages to link +- -> [LinkedObj] -- ^ the object files we're linking +- -> [FilePath] -- ^ extra js files to include +- -> (ExportedFun -> Bool) -- ^ functions from the objects to use as roots (include all their deps) +- -> Set ExportedFun -- ^ extra symbols to link in ++ -> LinkPlan + -> IO () +-link lc_cfg cfg logger unit_env out _include units objFiles jsFiles isRootFun extraStaticDeps = do ++jsLink lc_cfg cfg logger out link_plan = do + + -- create output directory + createDirectoryIfMissing False out + ++ when (logVerbAtLeast logger 2) $ ++ logInfo logger $ hang (text "jsLink:") 2 (ppr link_plan) ++ + ------------------------------------------------------------- + -- link all Haskell code (program + dependencies) into out.js + +- -- compute dependencies +- (dep_map, dep_units, all_deps, _rts_wired_functions, dep_archives) +- <- computeLinkDependencies cfg logger out unit_env units objFiles extraStaticDeps isRootFun +- +- -- retrieve code for dependencies +- mods <- collectDeps dep_map dep_units all_deps ++ -- retrieve code for Haskell dependencies ++ mods <- collectModuleCodes link_plan + + -- LTO + rendering of JS code + link_stats <- withBinaryFile (out "out.js") WriteMode $ \h -> +- renderLinker h mods jsFiles ++ renderLinker h mods (lkp_extra_js link_plan) + + ------------------------------------------------------------- + + -- dump foreign references file (.frefs) +- unless (lcOnlyOut lc_cfg) $ do ++ when (lcForeignRefs lc_cfg) $ do + let frefsFile = "out.frefs" + -- frefs = concatMap mc_frefs mods + jsonFrefs = mempty -- FIXME: toJson frefs +@@ -191,12 +212,11 @@ link lc_cfg cfg logger unit_env out _include units objFiles jsFiles isRootFun ex + + -- link generated RTS parts into rts.js + unless (lcNoRts lc_cfg) $ do +- BL.writeFile (out "rts.js") ( BLC.pack rtsDeclsText +- <> BLC.pack (rtsText cfg)) ++ BL.writeFile (out "rts.js") (generatedRTS cfg) + + -- link dependencies' JS files into lib.js + withBinaryFile (out "lib.js") WriteMode $ \h -> do +- forM_ dep_archives $ \archive_file -> do ++ forM_ (lkp_archives link_plan) $ \archive_file -> do + Ar.Archive entries <- Ar.loadAr archive_file + forM_ entries $ \entry -> do + case getJsArchiveEntry entry of +@@ -205,47 +225,96 @@ link lc_cfg cfg logger unit_env out _include units objFiles jsFiles isRootFun ex + B.hPut h bs + hPutChar h '\n' + +- -- link everything together into all.js +- when (generateAllJs lc_cfg) $ do ++ -- link everything together into a runnable all.js ++ -- only if we link a complete application, ++ -- no incremental linking and no skipped parts ++ when (lcCombineAll lc_cfg && not (lcNoRts lc_cfg)) $ do + _ <- combineFiles lc_cfg out + writeHtml out + writeRunMain out + writeRunner lc_cfg out + writeExterns out + ++data LinkSpec = LinkSpec ++ { lks_unit_ids :: [UnitId] ++ ++ , lks_obj_files :: [LinkedObj] ++ ++ , lks_obj_root_filter :: ExportedFun -> Bool ++ -- ^ Predicate for exported functions in objects to declare as root ++ ++ , lks_extra_roots :: Set ExportedFun ++ -- ^ Extra root functions from loaded units ++ ++ , lks_extra_js :: [FilePath] ++ -- ^ Extra JS files to link ++ } ++ ++instance Outputable LinkSpec where ++ ppr s = hang (text "LinkSpec") 2 $ vcat ++ [ hcat [text "Unit ids: ", ppr (lks_unit_ids s)] ++ , hcat [text "Object files:", ppr (lks_obj_files s)] ++ , text "Object root filter: " ++ , hcat [text "Extra roots: ", ppr (lks_extra_roots s)] ++ , hang (text "Extra JS:") 2 (vcat (fmap text (lks_extra_js s))) ++ ] ++ ++emptyLinkPlan :: LinkPlan ++emptyLinkPlan = LinkPlan ++ { lkp_block_info = mempty ++ , lkp_dep_blocks = mempty ++ , lkp_archives = mempty ++ , lkp_extra_js = mempty ++ } ++ ++-- | Given a `base` link plan (assumed to be already linked) and a `new` link ++-- plan, compute `(diff, total)` link plans. ++-- ++-- - `diff` is the incremental link plan to get from `base` to `total` ++-- - `total` is the total link plan as if `base` and `new` were linked at once ++incrementLinkPlan :: LinkPlan -> LinkPlan -> (LinkPlan, LinkPlan) ++incrementLinkPlan base new = (diff,total) ++ where ++ total = LinkPlan ++ { lkp_block_info = M.union (lkp_block_info base) (lkp_block_info new) ++ , lkp_dep_blocks = S.union (lkp_dep_blocks base) (lkp_dep_blocks new) ++ , lkp_archives = S.union (lkp_archives base) (lkp_archives new) ++ , lkp_extra_js = S.union (lkp_extra_js base) (lkp_extra_js new) ++ } ++ diff = LinkPlan ++ { lkp_block_info = lkp_block_info new -- block info from "new" contains all we need to load new blocks ++ , lkp_dep_blocks = S.difference (lkp_dep_blocks new) (lkp_dep_blocks base) ++ , lkp_archives = S.difference (lkp_archives new) (lkp_archives base) ++ , lkp_extra_js = S.difference (lkp_extra_js new) (lkp_extra_js base) ++ } ++ + + computeLinkDependencies + :: StgToJSConfig +- -> Logger +- -> String + -> UnitEnv +- -> [UnitId] +- -> [LinkedObj] +- -> Set ExportedFun +- -> (ExportedFun -> Bool) +- -> IO (Map Module (Deps, DepsLocation), [UnitId], Set LinkableUnit, Set ExportedFun, [FilePath]) +-computeLinkDependencies cfg logger target unit_env units objFiles extraStaticDeps isRootFun = do +- +- (objDepsMap, objRequiredUnits) <- loadObjDeps objFiles +- +- let roots = S.fromList . filter isRootFun $ concatMap (M.keys . depsHaskellExported . fst) (M.elems objDepsMap) +- rootMods = map (moduleNameString . moduleName . NE.head) . NE.group . sort . map funModule . S.toList $ roots +- objPkgs = map moduleUnitId $ nub (M.keys objDepsMap) +- +- when (logVerbAtLeast logger 2) $ void $ do +- compilationProgressMsg logger $ hcat +- [ text "Linking ", text target, text " (", text (intercalate "," rootMods), char ')' ] +- compilationProgressMsg logger $ hcat +- [ text "objDepsMap ", ppr objDepsMap ] +- compilationProgressMsg logger $ hcat +- [ text "objFiles ", ppr objFiles ] ++ -> LinkSpec ++ -> FinderOpts ++ -> FinderCache ++ -> IO LinkPlan ++computeLinkDependencies cfg unit_env link_spec finder_opts finder_cache = do ++ ++ let units = lks_unit_ids link_spec ++ let obj_files = lks_obj_files link_spec ++ let extra_roots = lks_extra_roots link_spec ++ let obj_is_root = lks_obj_root_filter link_spec ++ ++ (objs_block_info, objs_required_blocks) <- loadObjBlockInfo obj_files ++ ++ let obj_roots = S.fromList . filter obj_is_root $ concatMap (M.keys . bi_exports . lbi_info) (M.elems objs_block_info) ++ obj_units = map moduleUnitId $ nub (M.keys objs_block_info) + + let (rts_wired_units, rts_wired_functions) = rtsDeps units + + -- all the units we want to link together, without their dependencies + let root_units = filter (/= mainUnitId) ++ $ filter (/= interactiveUnitId) + $ nub +- $ rts_wired_units ++ reverse objPkgs ++ reverse units ++ $ rts_wired_units ++ reverse obj_units ++ reverse units + + -- all the units we want to link together, including their dependencies, + -- preload units, and backpack instantiations +@@ -254,26 +323,72 @@ computeLinkDependencies cfg logger target unit_env units objFiles extraStaticDep + let all_units = fmap unitId all_units_infos + + dep_archives <- getPackageArchives cfg unit_env all_units +- env <- newGhcjsEnv +- (archsDepsMap, archsRequiredUnits) <- loadArchiveDeps env dep_archives +- +- when (logVerbAtLeast logger 2) $ +- logInfo logger $ hang (text "Linking with archives:") 2 (vcat (fmap text dep_archives)) ++ (archives_block_info, archives_required_blocks) <- loadArchiveBlockInfo dep_archives + + -- compute dependencies +- let dep_units = all_units ++ [homeUnitId (ue_unsafeHomeUnit $ unit_env)] +- dep_map = objDepsMap `M.union` archsDepsMap +- excluded_units = S.empty +- dep_fun_roots = roots `S.union` rts_wired_functions `S.union` extraStaticDeps +- dep_unit_roots = archsRequiredUnits ++ objRequiredUnits +- +- all_deps <- getDeps (fmap fst dep_map) excluded_units dep_fun_roots dep_unit_roots +- +- when (logVerbAtLeast logger 2) $ +- logInfo logger $ hang (text "Units to link:") 2 (vcat (fmap ppr dep_units)) +- -- logInfo logger $ hang (text "All deps:") 2 (vcat (fmap ppr (S.toList all_deps))) ++ let block_info = objs_block_info `M.union` archives_block_info ++ dep_fun_roots = obj_roots `S.union` rts_wired_functions `S.union` extra_roots ++ ++ -- read transitive dependencies ++ new_required_blocks_var <- newIORef [] ++ let load_info mod = do ++ -- Adapted from the tangled code in GHC.Linker.Loader.getLinkDeps. ++ linkable <- case lookupHugByModule mod (ue_home_unit_graph unit_env) of ++ Nothing -> ++ -- It's not in the HPT because we are in one shot mode, ++ -- so use the Finder to get a ModLocation... ++ case ue_homeUnit unit_env of ++ Nothing -> pprPanic "getDeps: No home-unit: " (pprModule mod) ++ Just home_unit -> do ++ mb_stuff <- findHomeModule finder_cache finder_opts home_unit (moduleName mod) ++ case mb_stuff of ++ Found loc mod -> found loc mod ++ _ -> pprPanic "getDeps: Couldn't find home-module: " (pprModule mod) ++ where ++ found loc mod = do { ++ mb_lnk <- findObjectLinkableMaybe mod loc ; ++ case mb_lnk of { ++ Nothing -> pprPanic "getDeps: Couldn't find linkable for module: " (pprModule mod) ; ++ Just lnk -> pure lnk ++ }} ++ ++ Just mod_info -> case homeModInfoObject mod_info of ++ Nothing -> pprPanic "getDeps: Couldn't find object file for home-module: " (pprModule mod) ++ Just lnk -> pure lnk ++ ++ case linkableUnlinked linkable of ++ [DotO p] -> do ++ (bis, req_b) <- loadObjBlockInfo [ObjFile p] ++ -- Store new required blocks in IORef ++ modifyIORef new_required_blocks_var ((++) req_b) ++ case M.lookup mod bis of ++ Nothing -> pprPanic "getDeps: Didn't load any block info for home-module: " (pprModule mod) ++ Just bi -> pure bi ++ ul -> pprPanic "getDeps: Unrecognized linkable for home-module: " ++ (vcat [ pprModule mod ++ , ppr ul]) ++ ++ -- required blocks have no dependencies, so don't have to use them as roots in ++ -- the traversal ++ (updated_block_info, transitive_deps) <- getDeps block_info load_info dep_fun_roots mempty ++ ++ new_required_blocks <- readIORef new_required_blocks_var ++ let required_blocks = S.fromList $ mconcat ++ [ archives_required_blocks ++ , objs_required_blocks ++ , new_required_blocks ++ ] ++ ++ let all_deps = S.union transitive_deps required_blocks ++ ++ let plan = LinkPlan ++ { lkp_block_info = updated_block_info ++ , lkp_dep_blocks = all_deps ++ , lkp_archives = S.fromList dep_archives ++ , lkp_extra_js = S.fromList (lks_extra_js link_spec) ++ } + +- return (dep_map, dep_units, all_deps, rts_wired_functions, dep_archives) ++ return plan + + + -- | Compiled module +@@ -300,9 +415,9 @@ data CompactedModuleCode = CompactedModuleCode + renderLinker + :: Handle + -> [ModuleCode] -- ^ linked code per module +- -> [FilePath] -- ^ additional JS files ++ -> Set FilePath -- ^ additional JS files + -> IO LinkerStats +-renderLinker h mods jsFiles = do ++renderLinker h mods js_files = do + + -- link modules + let (compacted_mods, meta) = linkModules mods +@@ -336,7 +451,7 @@ renderLinker h mods jsFiles = do + mapM_ (putBS . cmc_exports) compacted_mods + + -- explicit additional JS files +- mapM_ (\i -> B.readFile i >>= putBS) jsFiles ++ mapM_ (\i -> B.readFile i >>= putBS) (S.toList js_files) + + -- stats + let link_stats = LinkerStats +@@ -469,99 +584,147 @@ writeExterns :: FilePath -> IO () + writeExterns out = writeFile (out "all.js.externs") + $ unpackFS rtsExterns + +--- | get all dependencies for a given set of roots +-getDeps :: Map Module Deps -- ^ loaded deps +- -> Set LinkableUnit -- ^ don't link these blocks +- -> Set ExportedFun -- ^ start here +- -> [LinkableUnit] -- ^ and also link these +- -> IO (Set LinkableUnit) +-getDeps loaded_deps base fun startlu = go' S.empty (S.fromList startlu) (S.toList fun) ++-- | Get all block dependencies for a given set of roots ++-- ++-- Returns the update block info map and the blocks. ++getDeps :: Map Module LocatedBlockInfo -- ^ Block info per module ++ -> (Module -> IO LocatedBlockInfo) -- ^ Used to load block info if missing ++ -> Set ExportedFun -- ^ start here ++ -> Set BlockRef -- ^ and also link these ++ -> IO (Map Module LocatedBlockInfo, Set BlockRef) ++getDeps init_infos load_info root_funs root_blocks = traverse_funs init_infos S.empty root_blocks (S.toList root_funs) + where +- go :: Set LinkableUnit +- -> Set LinkableUnit +- -> IO (Set LinkableUnit) +- go result open = case S.minView open of +- Nothing -> return result +- Just (lu@(lmod,n), open') -> +- case M.lookup lmod loaded_deps of +- Nothing -> pprPanic "getDeps.go: object file not loaded for: " (pprModule lmod) +- Just (Deps _ _ _ b) -> +- let block = b!n +- result' = S.insert lu result +- in go' result' +- (addOpen result' open' $ +- map (lmod,) (blockBlockDeps block)) (blockFunDeps block) +- +- go' :: Set LinkableUnit +- -> Set LinkableUnit +- -> [ExportedFun] +- -> IO (Set LinkableUnit) +- go' result open [] = go result open +- go' result open (f:fs) = +- let key = funModule f +- in case M.lookup key loaded_deps of +- Nothing -> pprPanic "getDeps.go': object file not loaded for: " $ pprModule key +- Just (Deps _m _r e _b) -> +- let lun :: Int +- lun = fromMaybe (pprPanic "exported function not found: " $ ppr f) +- (M.lookup f e) +- lu = (key, lun) +- in go' result (addOpen result open [lu]) fs +- +- addOpen :: Set LinkableUnit -> Set LinkableUnit -> [LinkableUnit] +- -> Set LinkableUnit +- addOpen result open newUnits = +- let alreadyLinked s = S.member s result || +- S.member s open || +- S.member s base +- in open `S.union` S.fromList (filter (not . alreadyLinked) newUnits) ++ -- A block may depend on: ++ -- 1. other blocks from the same module ++ -- 2. exported functions from another module ++ -- ++ -- Process: ++ -- 1. We use the BlockInfos to find the block corresponding to every ++ -- exported root functions. ++ -- ++ -- 2. We had these blocks to the set of root_blocks if they aren't already ++ -- added to the result. ++ -- ++ -- 3. Then we traverse the root_blocks to find their dependencies and we ++ -- add them to root_blocks (if they aren't already added to the result) and ++ -- to root_funs. ++ -- ++ -- 4. back to 1 ++ ++ lookup_info infos mod = case M.lookup mod infos of ++ Just info -> pure (infos, lbi_info info) ++ Nothing -> do ++ -- load info and update cache with it ++ info <- load_info mod ++ pure (M.insert mod info infos, lbi_info info) ++ ++ traverse_blocks ++ :: Map Module LocatedBlockInfo ++ -> Set BlockRef ++ -> Set BlockRef ++ -> IO (Map Module LocatedBlockInfo, Set BlockRef) ++ traverse_blocks infos result open = case S.minView open of ++ Nothing -> return (infos, result) ++ Just (ref, open') -> do ++ let mod = block_ref_mod ref ++ !(infos',info) <- lookup_info infos mod ++ let block = bi_block_deps info ! block_ref_idx ref ++ result' = S.insert ref result ++ to_block_ref i = BlockRef ++ { block_ref_mod = mod ++ , block_ref_idx = i ++ } ++ traverse_funs infos' result' ++ (addOpen result' open' $ ++ map to_block_ref (blockBlockDeps block)) (blockFunDeps block) ++ ++ traverse_funs ++ :: Map Module LocatedBlockInfo ++ -> Set BlockRef ++ -> Set BlockRef ++ -> [ExportedFun] ++ -> IO (Map Module LocatedBlockInfo, Set BlockRef) ++ traverse_funs infos result open = \case ++ [] -> traverse_blocks infos result open ++ (f:fs) -> do ++ let mod = funModule f ++ -- lookup module block info for the module that exports the function ++ !(infos',info) <- lookup_info infos mod ++ -- lookup block index associated to the function in the block info ++ case M.lookup f (bi_exports info) of ++ Nothing -> pprPanic "exported function not found: " $ ppr f ++ Just idx -> do ++ let fun_block_ref = BlockRef ++ { block_ref_mod = mod ++ , block_ref_idx = idx ++ } ++ -- always add the module "global block" when we link a module ++ let global_block_ref = BlockRef ++ { block_ref_mod = mod ++ , block_ref_idx = 0 ++ } ++ traverse_funs infos' result (addOpen result open [fun_block_ref,global_block_ref]) fs ++ ++ -- extend the open block set with new blocks that are not already in the ++ -- result block set nor in the open block set. ++ addOpen ++ :: Set BlockRef ++ -> Set BlockRef ++ -> [BlockRef] ++ -> Set BlockRef ++ addOpen result open new_blocks = ++ let alreadyLinked s = S.member s result || S.member s open ++ in open `S.union` S.fromList (filter (not . alreadyLinked) new_blocks) + + -- | collect dependencies for a set of roots +-collectDeps :: Map Module (Deps, DepsLocation) -- ^ Dependency map +- -> [UnitId] -- ^ packages, code linked in this order +- -> Set LinkableUnit -- ^ All dependencides +- -> IO [ModuleCode] +-collectDeps mod_deps packages all_deps = do +- +- -- read ghc-prim first, since we depend on that for static initialization +- let packages' = uncurry (++) $ partition (== primUnitId) (nub packages) +- +- units_by_module :: Map Module IntSet +- units_by_module = M.fromListWith IS.union $ +- map (\(m,n) -> (m, IS.singleton n)) (S.toList all_deps) +- +- mod_deps_bypkg :: Map UnitId [(Deps, DepsLocation)] +- mod_deps_bypkg = M.fromListWith (++) +- (map (\(m,v) -> (moduleUnitId m,[v])) (M.toList mod_deps)) +- ++collectModuleCodes :: LinkPlan -> IO [ModuleCode] ++collectModuleCodes link_plan = do ++ ++ let block_info = lkp_block_info link_plan ++ let blocks = lkp_dep_blocks link_plan ++ ++ -- we're going to load all the blocks. Instead of doing this randomly, we ++ -- group them by module first. ++ let module_blocks :: Map Module BlockIds ++ module_blocks = M.fromListWith IS.union $ ++ map (\ref -> (block_ref_mod ref, IS.singleton (block_ref_idx ref))) (S.toList blocks) ++ ++ -- GHCJS had this comment: "read ghc-prim first, since we depend on that for ++ -- static initialization". Not sure if it's still true as we haven't ported ++ -- the compactor yet. Still we sort to read ghc-prim blocks first just in ++ -- case. ++ let pred x = moduleUnitId (fst x) == primUnitId ++ cmp x y = case (pred x, pred y) of ++ (True,False) -> LT ++ (False,True) -> GT ++ (True,True) -> EQ ++ (False,False) -> EQ ++ ++ sorted_module_blocks :: [(Module,BlockIds)] ++ sorted_module_blocks = sortBy cmp (M.toList module_blocks) ++ ++ -- load blocks + ar_state <- emptyArchiveState +- fmap (catMaybes . concat) . forM packages' $ \pkg -> +- mapM (uncurry $ extractDeps ar_state units_by_module) +- (fromMaybe [] $ M.lookup pkg mod_deps_bypkg) +- +-extractDeps :: ArchiveState +- -> Map Module IntSet +- -> Deps +- -> DepsLocation +- -> IO (Maybe ModuleCode) +-extractDeps ar_state units deps loc = +- case M.lookup mod units of +- Nothing -> return Nothing +- Just mod_units -> Just <$> do +- let selector n _ = fromIntegral n `IS.member` mod_units || isGlobalUnit (fromIntegral n) +- case loc of +- ObjectFile fp -> do +- us <- readObjectUnits fp selector +- pure (collectCode us) +- ArchiveFile a -> do +- obj <- readArObject ar_state mod a +- us <- getObjectUnits obj selector +- pure (collectCode us) +- InMemory _n obj -> do +- us <- getObjectUnits obj selector +- pure (collectCode us) ++ forM sorted_module_blocks $ \(mod,bids) -> do ++ case M.lookup mod block_info of ++ Nothing -> pprPanic "collectModuleCodes: couldn't find block info for module" (ppr mod) ++ Just lbi -> extractBlocks ar_state lbi bids ++ ++extractBlocks :: ArchiveState -> LocatedBlockInfo -> BlockIds -> IO ModuleCode ++extractBlocks ar_state lbi blocks = do ++ case lbi_loc lbi of ++ ObjectFile fp -> do ++ us <- readObjectBlocks fp blocks ++ pure (collectCode us) ++ ArchiveFile a -> do ++ obj <- readArObject ar_state mod a ++ us <- getObjectBlocks obj blocks ++ pure (collectCode us) ++ InMemory _n obj -> do ++ us <- getObjectBlocks obj blocks ++ pure (collectCode us) + where +- mod = depsModule deps ++ mod = bi_module (lbi_info lbi) + newline = BC.pack "\n" + mk_exports = mconcat . intersperse newline . filter (not . BS.null) . map oiRaw + mk_js_code = mconcat . map oiStat +@@ -693,40 +856,32 @@ mkPrimFuns = mkExportedFuns primUnitId + -- | Given a @UnitId@, a module name, and a set of symbols in the module, + -- package these into an @ExportedFun@. + mkExportedFuns :: UnitId -> FastString -> [FastString] -> [ExportedFun] +-mkExportedFuns uid mod_name symbols = map mk_fun symbols ++mkExportedFuns uid mod_name symbols = mkExportedModFuns mod names + where + mod = mkModule (RealUnit (Definite uid)) (mkModuleNameFS mod_name) +- mk_fun sym = ExportedFun mod (LexicalFastString (mkJsSymbol True mod sym)) ++ names = map (mkJsSymbol True mod) symbols ++ ++-- | Given a @Module@ and a set of symbols in the module, package these into an ++-- @ExportedFun@. ++mkExportedModFuns :: Module -> [FastString] -> [ExportedFun] ++mkExportedModFuns mod symbols = map mk_fun symbols ++ where ++ mk_fun sym = ExportedFun mod (LexicalFastString sym) + + -- | read all dependency data from the to-be-linked files +-loadObjDeps :: [LinkedObj] -- ^ object files to link +- -> IO (Map Module (Deps, DepsLocation), [LinkableUnit]) +-loadObjDeps objs = (prepareLoadedDeps . catMaybes) <$> mapM readDepsFromObj objs ++loadObjBlockInfo :: [LinkedObj] -- ^ object files to link ++ -> IO (Map Module LocatedBlockInfo, [BlockRef]) ++loadObjBlockInfo objs = (prepareLoadedDeps . catMaybes) <$> mapM readBlockInfoFromObj objs + + -- | Load dependencies for the Linker from Ar +-loadArchiveDeps :: GhcjsEnv +- -> [FilePath] +- -> IO ( Map Module (Deps, DepsLocation) +- , [LinkableUnit] +- ) +-loadArchiveDeps env archives = modifyMVar (linkerArchiveDeps env) $ \m -> +- case M.lookup archives' m of +- Just r -> return (m, r) +- Nothing -> loadArchiveDeps' archives >>= \r -> return (M.insert archives' r m, r) +- where +- archives' = S.fromList archives +- +-loadArchiveDeps' :: [FilePath] +- -> IO ( Map Module (Deps, DepsLocation) +- , [LinkableUnit] +- ) +-loadArchiveDeps' archives = do ++loadArchiveBlockInfo :: [FilePath] -> IO (Map Module LocatedBlockInfo, [BlockRef]) ++loadArchiveBlockInfo archives = do + archDeps <- forM archives $ \file -> do + (Ar.Archive entries) <- Ar.loadAr file + catMaybes <$> mapM (readEntry file) entries + return (prepareLoadedDeps $ concat archDeps) + where +- readEntry :: FilePath -> Ar.ArchiveEntry -> IO (Maybe (Deps, DepsLocation)) ++ readEntry :: FilePath -> Ar.ArchiveEntry -> IO (Maybe LocatedBlockInfo) + readEntry ar_file ar_entry = do + let bs = Ar.filedata ar_entry + bh <- unsafeUnpackBinBuffer bs +@@ -734,8 +889,8 @@ loadArchiveDeps' archives = do + Left _ -> pure Nothing -- not a valid object entry + Right mod_name -> do + obj <- getObjectBody bh mod_name +- let !deps = objDeps obj +- pure $ Just (deps, ArchiveFile ar_file) ++ let !info = objBlockInfo obj ++ pure $ Just (LocatedBlockInfo (ArchiveFile ar_file) info) + + -- | Predicate to check that an entry in Ar is a JS source + -- and to return it without its header +@@ -765,29 +920,32 @@ jsHeaderLength = B.length jsHeader + + + +-prepareLoadedDeps :: [(Deps, DepsLocation)] +- -> ( Map Module (Deps, DepsLocation) +- , [LinkableUnit] +- ) +-prepareLoadedDeps deps = +- let req = concatMap (requiredUnits . fst) deps +- depsMap = M.fromList $ map (\d -> (depsModule (fst d), d)) deps +- in (depsMap, req) ++prepareLoadedDeps :: [LocatedBlockInfo] ++ -> (Map Module LocatedBlockInfo, [BlockRef]) ++prepareLoadedDeps lbis = (module_blocks, must_link) ++ where ++ must_link = concatMap (requiredBlocks . lbi_info) lbis ++ module_blocks = M.fromList $ map (\d -> (bi_module (lbi_info d), d)) lbis + +-requiredUnits :: Deps -> [LinkableUnit] +-requiredUnits d = map (depsModule d,) (IS.toList $ depsRequired d) ++requiredBlocks :: BlockInfo -> [BlockRef] ++requiredBlocks d = map mk_block_ref (IS.toList $ bi_must_link d) ++ where ++ mk_block_ref i = BlockRef ++ { block_ref_mod = bi_module d ++ , block_ref_idx = i ++ } + +--- | read dependencies from an object that might have already been into memory ++-- | read block info from an object that might have already been into memory + -- pulls in all Deps from an archive +-readDepsFromObj :: LinkedObj -> IO (Maybe (Deps, DepsLocation)) +-readDepsFromObj = \case ++readBlockInfoFromObj :: LinkedObj -> IO (Maybe LocatedBlockInfo) ++readBlockInfoFromObj = \case + ObjLoaded name obj -> do +- let !deps = objDeps obj +- pure $ Just (deps,InMemory name obj) ++ let !info = objBlockInfo obj ++ pure $ Just (LocatedBlockInfo (InMemory name obj) info) + ObjFile file -> do +- readObjectDeps file >>= \case ++ readObjectBlockInfo file >>= \case + Nothing -> pure Nothing +- Just deps -> pure $ Just (deps,ObjectFile file) ++ Just info -> pure $ Just (LocatedBlockInfo (ObjectFile file) info) + + + -- | Embed a JS file into a .o file +diff --git a/compiler/GHC/StgToJS/Linker/Types.hs b/compiler/GHC/StgToJS/Linker/Types.hs +index 9e1714fc00..7f4cc683b9 100644 +--- a/compiler/GHC/StgToJS/Linker/Types.hs ++++ b/compiler/GHC/StgToJS/Linker/Types.hs +@@ -2,8 +2,6 @@ + {-# LANGUAGE PartialTypeSignatures #-} + {-# LANGUAGE LambdaCase #-} + +-{-# OPTIONS_GHC -Wno-orphans #-} -- for Ident's Binary instance +- + ----------------------------------------------------------------------------- + -- | + -- Module : GHC.StgToJS.Linker.Types +@@ -19,26 +17,21 @@ + ----------------------------------------------------------------------------- + + module GHC.StgToJS.Linker.Types +- ( GhcjsEnv (..) +- , newGhcjsEnv +- , JSLinkConfig (..) ++ ( JSLinkConfig (..) + , defaultJSLinkConfig +- , generateAllJs + , LinkedObj (..) +- , LinkableUnit ++ , LinkPlan (..) + ) + where + + import GHC.StgToJS.Object + + import GHC.Unit.Types +-import GHC.Utils.Outputable (hsep,Outputable(..),text,ppr) ++import GHC.Utils.Outputable (hsep,Outputable(..),text,ppr, hang, IsDoc (vcat), IsLine (hcat)) + + import Data.Map.Strict (Map) +-import qualified Data.Map.Strict as M + import Data.Set (Set) +- +-import Control.Concurrent.MVar ++import qualified Data.Set as S + + import System.IO + +@@ -49,35 +42,53 @@ import Prelude + -------------------------------------------------------------------------------- + + data JSLinkConfig = JSLinkConfig +- { lcNoJSExecutables :: Bool +- , lcNoHsMain :: Bool +- , lcOnlyOut :: Bool +- , lcNoRts :: Bool +- , lcNoStats :: Bool ++ { lcNoJSExecutables :: !Bool -- ^ Dont' build JS executables ++ , lcNoHsMain :: !Bool -- ^ Don't generate Haskell main entry ++ , lcNoRts :: !Bool -- ^ Don't dump the generated RTS ++ , lcNoStats :: !Bool -- ^ Disable .stats file generation ++ , lcForeignRefs :: !Bool -- ^ Dump .frefs (foreign references) files ++ , lcCombineAll :: !Bool -- ^ Generate all.js (combined js) + wrappers + } + +--- | we generate a runnable all.js only if we link a complete application, +--- no incremental linking and no skipped parts +-generateAllJs :: JSLinkConfig -> Bool +-generateAllJs s = not (lcOnlyOut s) && not (lcNoRts s) +- ++-- | Default linker configuration + defaultJSLinkConfig :: JSLinkConfig + defaultJSLinkConfig = JSLinkConfig + { lcNoJSExecutables = False + , lcNoHsMain = False +- , lcOnlyOut = False + , lcNoRts = False + , lcNoStats = False ++ , lcCombineAll = True ++ , lcForeignRefs = True + } + ++data LinkPlan = LinkPlan ++ { lkp_block_info :: Map Module LocatedBlockInfo ++ -- ^ Block information ++ ++ , lkp_dep_blocks :: Set BlockRef ++ -- ^ Blocks to link ++ ++ , lkp_archives :: Set FilePath ++ -- ^ Archives to load JS sources from ++ ++ , lkp_extra_js :: Set FilePath ++ -- ^ Extra JS files to link ++ } ++ ++instance Outputable LinkPlan where ++ ppr s = hang (text "LinkPlan") 2 $ vcat ++ -- Hidden because it's too verbose and it's not really part of the ++ -- plan, just meta info used to retrieve actual block contents ++ -- [ hcat [ text "Block info: ", ppr (lkp_block_info s)] ++ [ hcat [ text "Blocks: ", ppr (S.size (lkp_dep_blocks s))] ++ , hang (text "JS files from archives:") 2 (vcat (fmap text (S.toList (lkp_archives s)))) ++ , hang (text "Extra JS:") 2 (vcat (fmap text (S.toList (lkp_extra_js s)))) ++ ] ++ + -------------------------------------------------------------------------------- + -- Linker Environment + -------------------------------------------------------------------------------- + +--- | A @LinkableUnit@ is a pair of a module and the index of the block in the +--- object file +-type LinkableUnit = (Module, Int) +- + -- | An object file that's either already in memory (with name) or on disk + data LinkedObj + = ObjFile FilePath -- ^ load from this file +@@ -87,15 +98,3 @@ instance Outputable LinkedObj where + ppr = \case + ObjFile fp -> hsep [text "ObjFile", text fp] + ObjLoaded s o -> hsep [text "ObjLoaded", text s, ppr (objModuleName o)] +- +-data GhcjsEnv = GhcjsEnv +- { linkerArchiveDeps :: MVar (Map (Set FilePath) +- (Map Module (Deps, DepsLocation) +- , [LinkableUnit] +- ) +- ) +- } +- +--- | return a fresh @GhcjsEnv@ +-newGhcjsEnv :: IO GhcjsEnv +-newGhcjsEnv = GhcjsEnv <$> newMVar M.empty +diff --git a/compiler/GHC/StgToJS/Object.hs b/compiler/GHC/StgToJS/Object.hs +index f75d27e20b..575acd0507 100644 +--- a/compiler/GHC/StgToJS/Object.hs ++++ b/compiler/GHC/StgToJS/Object.hs +@@ -46,14 +46,20 @@ module GHC.StgToJS.Object + , getObjectBody + , getObject + , readObject +- , getObjectUnits +- , readObjectUnits +- , readObjectDeps +- , isGlobalUnit ++ , getObjectBlocks ++ , readObjectBlocks ++ , readObjectBlockInfo ++ , isGlobalBlock + , isJsObjectFile + , Object(..) + , IndexEntry(..) +- , Deps (..), BlockDeps (..), DepsLocation (..) ++ , LocatedBlockInfo (..) ++ , BlockInfo (..) ++ , BlockDeps (..) ++ , BlockLocation (..) ++ , BlockId ++ , BlockIds ++ , BlockRef (..) + , ExportedFun (..) + ) + where +@@ -96,63 +102,75 @@ data Object = Object + { objModuleName :: !ModuleName + -- ^ name of the module + , objHandle :: !BinHandle +- -- ^ BinHandle that can be used to read the ObjUnits +- , objPayloadOffset :: !(Bin ObjUnit) ++ -- ^ BinHandle that can be used to read the ObjBlocks ++ , objPayloadOffset :: !(Bin ObjBlock) + -- ^ Offset of the payload (units) +- , objDeps :: !Deps +- -- ^ Dependencies ++ , objBlockInfo :: !BlockInfo ++ -- ^ Information about blocks + , objIndex :: !Index +- -- ^ The Index, serialed unit indices and their linkable units ++ -- ^ Block index: symbols per block and block offset in the object file + } + + type BlockId = Int + type BlockIds = IntSet + +--- | dependencies for a single module +-data Deps = Deps +- { depsModule :: !Module +- -- ^ module +- , depsRequired :: !BlockIds ++-- | Information about blocks (linkable units) ++data BlockInfo = BlockInfo ++ { bi_module :: !Module ++ -- ^ Module they were generated from ++ , bi_must_link :: !BlockIds + -- ^ blocks that always need to be linked when this object is loaded (e.g. + -- everything that contains initializer code or foreign exports) +- , depsHaskellExported :: !(Map ExportedFun BlockId) ++ , bi_exports :: !(Map ExportedFun BlockId) + -- ^ exported Haskell functions -> block +- , depsBlocks :: !(Array BlockId BlockDeps) +- -- ^ info about each block ++ , bi_block_deps :: !(Array BlockId BlockDeps) ++ -- ^ dependencies of each block + } + +-instance Outputable Deps where ++data LocatedBlockInfo = LocatedBlockInfo ++ { lbi_loc :: !BlockLocation -- ^ Where to find the blocks ++ , lbi_info :: !BlockInfo -- ^ Block information ++ } ++ ++instance Outputable BlockInfo where + ppr d = vcat +- [ hcat [ text "module: ", pprModule (depsModule d) ] +- , hcat [ text "exports: ", ppr (M.keys (depsHaskellExported d)) ] ++ [ hcat [ text "module: ", pprModule (bi_module d) ] ++ , hcat [ text "exports: ", ppr (M.keys (bi_exports d)) ] + ] + +--- | Where are the dependencies +-data DepsLocation ++-- | Where are the blocks ++data BlockLocation + = ObjectFile FilePath -- ^ In an object file at path + | ArchiveFile FilePath -- ^ In a Ar file at path + | InMemory String Object -- ^ In memory + +-instance Outputable DepsLocation where ++instance Outputable BlockLocation where + ppr = \case + ObjectFile fp -> hsep [text "ObjectFile", text fp] + ArchiveFile fp -> hsep [text "ArchiveFile", text fp] + InMemory s o -> hsep [text "InMemory", text s, ppr (objModuleName o)] + ++-- | A @BlockRef@ is a pair of a module and the index of the block in the ++-- object file ++data BlockRef = BlockRef ++ { block_ref_mod :: !Module -- ^ Module ++ , block_ref_idx :: !BlockId -- ^ Block index in the object file ++ } ++ deriving (Eq,Ord) ++ + data BlockDeps = BlockDeps +- { blockBlockDeps :: [Int] -- ^ dependencies on blocks in this object ++ { blockBlockDeps :: [BlockId] -- ^ dependencies on blocks in this object + , blockFunDeps :: [ExportedFun] -- ^ dependencies on exported symbols in other objects + -- , blockForeignExported :: [ExpFun] + -- , blockForeignImported :: [ForeignRef] + } + +-{- | we use the convention that the first unit (0) is a module-global +- unit that's always included when something from the module +- is loaded. everything in a module implicitly depends on the +- global block. the global unit itself can't have dependencies +- -} +-isGlobalUnit :: Int -> Bool +-isGlobalUnit n = n == 0 ++-- | we use the convention that the first block (0) is a module-global block ++-- that's always included when something from the module is loaded. everything ++-- in a module implicitly depends on the global block. The global block itself ++-- can't have dependencies ++isGlobalBlock :: BlockId -> Bool ++isGlobalBlock n = n == 0 + + -- | Exported Functions + data ExportedFun = ExportedFun +@@ -166,10 +184,10 @@ instance Outputable ExportedFun where + , hcat [ text "symbol: ", ppr f ] + ] + +--- | Write an ObjUnit, except for the top level symbols which are stored in the ++-- | Write an ObjBlock, except for the top level symbols which are stored in the + -- index +-putObjUnit :: BinHandle -> ObjUnit -> IO () +-putObjUnit bh (ObjUnit _syms b c d e f g) = do ++putObjBlock :: BinHandle -> ObjBlock -> IO () ++putObjBlock bh (ObjBlock _syms b c d e f g) = do + put_ bh b + put_ bh c + lazyPut bh d +@@ -177,17 +195,17 @@ putObjUnit bh (ObjUnit _syms b c d e f g) = do + put_ bh f + put_ bh g + +--- | Read an ObjUnit and associate it to the given symbols (that must have been ++-- | Read an ObjBlock and associate it to the given symbols (that must have been + -- read from the index) +-getObjUnit :: [FastString] -> BinHandle -> IO ObjUnit +-getObjUnit syms bh = do ++getObjBlock :: [FastString] -> BinHandle -> IO ObjBlock ++getObjBlock syms bh = do + b <- get bh + c <- get bh + d <- lazyGet bh + e <- get bh + f <- get bh + g <- get bh +- pure $ ObjUnit ++ pure $ ObjBlock + { oiSymbols = syms + , oiClInfo = b + , oiStatic = c +@@ -203,12 +221,12 @@ getObjUnit syms bh = do + magic :: String + magic = "GHCJSOBJ" + +--- | Serialized unit indexes and their exported symbols +--- (the first unit is module-global) ++-- | Serialized block indexes and their exported symbols ++-- (the first block is module-global) + type Index = [IndexEntry] + data IndexEntry = IndexEntry +- { idxSymbols :: ![FastString] -- ^ Symbols exported by a unit +- , idxOffset :: !(Bin ObjUnit) -- ^ Offset of the unit in the object file ++ { idxSymbols :: ![FastString] -- ^ Symbols exported by a block ++ , idxOffset :: !(Bin ObjBlock) -- ^ Offset of the block in the object file + } + + +@@ -221,8 +239,8 @@ data IndexEntry = IndexEntry + putObject + :: BinHandle + -> ModuleName -- ^ module +- -> Deps -- ^ dependencies +- -> [ObjUnit] -- ^ linkable units and their symbols ++ -> BlockInfo -- ^ block infos ++ -> [ObjBlock] -- ^ linkable units and their symbols + -> IO () + putObject bh mod_name deps os = do + forM_ magic (putByte bh . fromIntegral . ord) +@@ -243,7 +261,7 @@ putObject bh mod_name deps os = do + idx <- forM os $ \o -> do + p <- tellBin bh_fs + -- write units without their symbols +- putObjUnit bh_fs o ++ putObjBlock bh_fs o + -- return symbols and offset to store in the index + pure (oiSymbols o,p) + pure idx +@@ -295,15 +313,15 @@ getObjectBody bh0 mod_name = do + dict <- forwardGet bh0 (getDictionary bh0) + let bh = setUserData bh0 $ noUserData { ud_get_fs = getDictFastString dict } + +- deps <- get bh +- idx <- forwardGet bh (get bh) ++ block_info <- get bh ++ idx <- forwardGet bh (get bh) + payload_pos <- tellBin bh + + pure $ Object + { objModuleName = mod_name + , objHandle = bh + , objPayloadOffset = payload_pos +- , objDeps = deps ++ , objBlockInfo = block_info + , objIndex = idx + } + +@@ -322,31 +340,31 @@ readObject file = do + bh <- readBinMem file + getObject bh + +--- | Reads only the part necessary to get the dependencies +-readObjectDeps :: FilePath -> IO (Maybe Deps) +-readObjectDeps file = do ++-- | Reads only the part necessary to get the block info ++readObjectBlockInfo :: FilePath -> IO (Maybe BlockInfo) ++readObjectBlockInfo file = do + bh <- readBinMem file + getObject bh >>= \case +- Just obj -> pure $! Just $! objDeps obj ++ Just obj -> pure $! Just $! objBlockInfo obj + Nothing -> pure Nothing + +--- | Get units in the object file, using the given filtering function +-getObjectUnits :: Object -> (Word -> IndexEntry -> Bool) -> IO [ObjUnit] +-getObjectUnits obj pred = mapMaybeM read_entry (zip (objIndex obj) [0..]) ++-- | Get blocks in the object file, using the given filtering function ++getObjectBlocks :: Object -> BlockIds -> IO [ObjBlock] ++getObjectBlocks obj bids = mapMaybeM read_entry (zip (objIndex obj) [0..]) + where + bh = objHandle obj +- read_entry (e@(IndexEntry syms offset),i) +- | pred i e = do ++ read_entry (IndexEntry syms offset,i) ++ | IS.member i bids = do + seekBin bh offset +- Just <$> getObjUnit syms bh ++ Just <$> getObjBlock syms bh + | otherwise = pure Nothing + +--- | Read units in the object file, using the given filtering function +-readObjectUnits :: FilePath -> (Word -> IndexEntry -> Bool) -> IO [ObjUnit] +-readObjectUnits file pred = do ++-- | Read blocks in the object file, using the given filtering function ++readObjectBlocks :: FilePath -> BlockIds -> IO [ObjBlock] ++readObjectBlocks file bids = do + readObject file >>= \case + Nothing -> pure [] +- Just obj -> getObjectUnits obj pred ++ Just obj -> getObjectBlocks obj bids + + + -------------------------------------------------------------------------------- +@@ -378,13 +396,13 @@ instance Binary IndexEntry where + put_ bh (IndexEntry a b) = put_ bh a >> put_ bh b + get bh = IndexEntry <$> get bh <*> get bh + +-instance Binary Deps where +- put_ bh (Deps m r e b) = do ++instance Binary BlockInfo where ++ put_ bh (BlockInfo m r e b) = do + put_ bh m + put_ bh (map toI32 $ IS.toList r) + put_ bh (map (\(x,y) -> (x, toI32 y)) $ M.toList e) + put_ bh (elems b) +- get bh = Deps <$> get bh ++ get bh = BlockInfo <$> get bh + <*> (IS.fromList . map fromI32 <$> get bh) + <*> (M.fromList . map (\(x,y) -> (x, fromI32 y)) <$> get bh) + <*> ((\xs -> listArray (0, length xs - 1) xs) <$> get bh) +diff --git a/compiler/GHC/StgToJS/Rts/Rts.hs b/compiler/GHC/StgToJS/Rts/Rts.hs +index 55e1a3f312..6209f0bce4 100644 +--- a/compiler/GHC/StgToJS/Rts/Rts.hs ++++ b/compiler/GHC/StgToJS/Rts/Rts.hs +@@ -47,6 +47,7 @@ import Data.Array + import Data.Monoid + import Data.Char (toLower, toUpper) + import qualified Data.Bits as Bits ++import qualified Data.ByteString.Lazy.Char8 as BLC + + -- | The garbageCollector resets registers and result variables. + garbageCollector :: JStat +@@ -356,6 +357,10 @@ rtsDecls = jsSaturate (Just "h$RTSD") $ + , declRegs + , declRets] + ++-- | Get the generated part of the RTS ++generatedRTS :: StgToJSConfig -> BLC.ByteString ++generatedRTS cfg = BLC.pack rtsDeclsText <> BLC.pack (rtsText cfg) ++ + -- | print the embedded RTS to a String + rtsText :: StgToJSConfig -> String + rtsText = show . pretty . rts +diff --git a/compiler/GHC/StgToJS/Types.hs b/compiler/GHC/StgToJS/Types.hs +index 0984dd791a..cba79b5eaa 100644 +--- a/compiler/GHC/StgToJS/Types.hs ++++ b/compiler/GHC/StgToJS/Types.hs +@@ -302,9 +302,9 @@ data ForeignJSRef = ForeignJSRef + , foreignRefResult :: !FastString + } deriving stock (Generic) + +--- | data used to generate one ObjUnit in our object file ++-- | data used to generate one ObjBlock in our object file + data LinkableUnit = LinkableUnit +- { luObjUnit :: ObjUnit -- ^ serializable unit info ++ { luObjBlock :: ObjBlock -- ^ serializable unit info + , luIdExports :: [Id] -- ^ exported names from haskell identifiers + , luOtherExports :: [FastString] -- ^ other exports + , luIdDeps :: [Id] -- ^ identifiers this unit depends on +@@ -315,7 +315,7 @@ data LinkableUnit = LinkableUnit + } + + -- | one toplevel block in the object file +-data ObjUnit = ObjUnit ++data ObjBlock = ObjBlock + { oiSymbols :: ![FastString] -- ^ toplevel symbols (stored in index) + , oiClInfo :: ![ClosureInfo] -- ^ closure information of all closures in block + , oiStatic :: ![StaticInfo] -- ^ static closure data +diff --git a/compiler/GHC/Tc/Gen/Splice.hs b/compiler/GHC/Tc/Gen/Splice.hs +index 5cf69c0dfe..227765d43c 100644 +--- a/compiler/GHC/Tc/Gen/Splice.hs ++++ b/compiler/GHC/Tc/Gen/Splice.hs +@@ -155,6 +155,7 @@ import qualified Data.Map as Map + import Data.Typeable ( typeOf, Typeable, TypeRep, typeRep ) + import Data.Data (Data) + import Data.Proxy ( Proxy (..) ) ++import Data.IORef + import GHC.Parser.HaddockLex (lexHsDoc) + import GHC.Parser (parseIdentifier) + import GHC.Rename.Doc (rnHsDoc) +@@ -1058,6 +1059,7 @@ runRemoteModFinalizers (ThModFinalizers finRefs) = do + withForeignRefs (x : xs) f = withForeignRef x $ \r -> + withForeignRefs xs $ \rs -> f (r : rs) + interp <- tcGetInterp ++ + case interpInstance interp of + #if defined(HAVE_INTERNAL_INTERPRETER) + InternalInterp -> do +@@ -1065,17 +1067,18 @@ runRemoteModFinalizers (ThModFinalizers finRefs) = do + runQuasi $ sequence_ qs + #endif + +- ExternalInterp conf iserv -> withIServ_ conf iserv $ \i -> do ++ ExternalInterp ext -> withExtInterp ext $ \inst -> do + tcg <- getGblEnv + th_state <- readTcRef (tcg_th_remote_state tcg) + case th_state of + Nothing -> return () -- TH was not started, nothing to do + Just fhv -> do +- liftIO $ withForeignRef fhv $ \st -> ++ r <- liftIO $ withForeignRef fhv $ \st -> + withForeignRefs finRefs $ \qrefs -> +- writeIServ i (putMessage (RunModFinalizers st qrefs)) +- () <- runRemoteTH i [] +- readQResult i ++ sendMessageDelayedResponse inst (RunModFinalizers st qrefs) ++ () <- runRemoteTH inst [] ++ qr <- liftIO $ receiveDelayedResponse inst r ++ checkQResult qr + + runQResult + :: (a -> String) +@@ -1691,37 +1694,40 @@ runTH ty fhv = do + return r + #endif + +- ExternalInterp conf iserv -> ++ ExternalInterp ext -> withExtInterp ext $ \inst -> do + -- Run it on the server. For an overview of how TH works with + -- Remote GHCi, see Note [Remote Template Haskell] in + -- libraries/ghci/GHCi/TH.hs. +- withIServ_ conf iserv $ \i -> do +- rstate <- getTHState i +- loc <- TH.qLocation +- liftIO $ +- withForeignRef rstate $ \state_hv -> +- withForeignRef fhv $ \q_hv -> +- writeIServ i (putMessage (RunTH state_hv q_hv ty (Just loc))) +- runRemoteTH i [] +- bs <- readQResult i +- return $! runGet get (LB.fromStrict bs) ++ rstate <- getTHState inst ++ loc <- TH.qLocation ++ -- run a remote TH request ++ r <- liftIO $ ++ withForeignRef rstate $ \state_hv -> ++ withForeignRef fhv $ \q_hv -> ++ sendMessageDelayedResponse inst (RunTH state_hv q_hv ty (Just loc)) ++ -- respond to requests from the interpreter ++ runRemoteTH inst [] ++ -- get the final result ++ qr <- liftIO $ receiveDelayedResponse inst r ++ bs <- checkQResult qr ++ return $! runGet get (LB.fromStrict bs) + + + -- | communicate with a remotely-running TH computation until it finishes. + -- See Note [Remote Template Haskell] in libraries/ghci/GHCi/TH.hs. + runRemoteTH +- :: IServInstance ++ :: ExtInterpInstance d + -> [Messages TcRnMessage] -- saved from nested calls to qRecover + -> TcM () +-runRemoteTH iserv recovers = do +- THMsg msg <- liftIO $ readIServ iserv getTHMessage ++runRemoteTH inst recovers = do ++ THMsg msg <- liftIO $ receiveTHMessage inst + case msg of + RunTHDone -> return () + StartRecover -> do -- Note [TH recover with -fexternal-interpreter] + v <- getErrsVar + msgs <- readTcRef v + writeTcRef v emptyMessages +- runRemoteTH iserv (msgs : recovers) ++ runRemoteTH inst (msgs : recovers) + EndRecover caught_error -> do + let (prev_msgs, rest) = case recovers of + [] -> panic "EndRecover" +@@ -1732,16 +1738,15 @@ runRemoteTH iserv recovers = do + writeTcRef v $ if caught_error + then prev_msgs + else mkMessages warn_msgs `unionMessages` prev_msgs +- runRemoteTH iserv rest ++ runRemoteTH inst rest + _other -> do + r <- handleTHMessage msg +- liftIO $ writeIServ iserv (put r) +- runRemoteTH iserv recovers ++ liftIO $ sendAnyValue inst r ++ runRemoteTH inst recovers + +--- | Read a value of type QResult from the iserv +-readQResult :: Binary a => IServInstance -> TcM a +-readQResult i = do +- qr <- liftIO $ readIServ i get ++-- | Check a QResult ++checkQResult :: QResult a -> TcM a ++checkQResult qr = + case qr of + QDone a -> return a + QException str -> liftIO $ throwIO (ErrorCall str) +@@ -1788,17 +1793,18 @@ Back in GHC, when we receive: + -- + -- The TH state is stored in tcg_th_remote_state in the TcGblEnv. + -- +-getTHState :: IServInstance -> TcM (ForeignRef (IORef QState)) +-getTHState i = do +- tcg <- getGblEnv +- th_state <- readTcRef (tcg_th_remote_state tcg) +- case th_state of +- Just rhv -> return rhv +- Nothing -> do +- interp <- tcGetInterp +- fhv <- liftIO $ mkFinalizedHValue interp =<< iservCall i StartTH +- writeTcRef (tcg_th_remote_state tcg) (Just fhv) +- return fhv ++getTHState :: ExtInterpInstance d -> TcM (ForeignRef (IORef QState)) ++getTHState inst = do ++ th_state_var <- tcg_th_remote_state <$> getGblEnv ++ liftIO $ do ++ th_state <- readIORef th_state_var ++ case th_state of ++ Just rhv -> return rhv ++ Nothing -> do ++ rref <- sendMessage inst StartTH ++ fhv <- mkForeignRef rref (freeReallyRemoteRef inst rref) ++ writeIORef th_state_var (Just fhv) ++ return fhv + + wrapTHResult :: TcM a -> TcM (THResult a) + wrapTHResult tcm = do +diff --git a/compiler/ghc.cabal.in b/compiler/ghc.cabal.in +index 8cb5b2a952..d8fba4308f 100644 +--- a/compiler/ghc.cabal.in ++++ b/compiler/ghc.cabal.in +@@ -602,8 +602,11 @@ Library + GHC.Runtime.Heap.Inspect + GHC.Runtime.Heap.Layout + GHC.Runtime.Interpreter ++ GHC.Runtime.Interpreter.JS ++ GHC.Runtime.Interpreter.Process + GHC.Runtime.Interpreter.Types + GHC.Runtime.Loader ++ GHC.Runtime.Utils + GHC.Settings + GHC.Settings.Config + GHC.Settings.Constants +diff --git a/ghc-interp.js b/ghc-interp.js +new file mode 100644 +index 0000000000..6e4e4d7201 +--- /dev/null ++++ b/ghc-interp.js +@@ -0,0 +1,99 @@ ++/* ++ GHC JS Interpreter ++ ++ Read commands on stdin (ending with \n): ++ LOAD foo.js : load foo.js file ++ RUN_SERVER ghci_unit_id : run ghci_unit_id:GHCi.Server.defaultServer ++ ++ Once the Haskell server is started with RUN_SERVER, the JS server no longer ++ reads commands on stdin. Everything must go through the Haskell server (which ++ uses pipes for communication) ++*/ ++ ++var h$THfs = require('fs'); ++var h$THvm = require('vm'); ++ ++function h$debug_log(s) { ++ // uncomment the following line to enable some debug messages ++ // console.log("[JS interpreter] " + s); ++} ++ ++// load and exec JS file ++function h$loadJS(path) { ++ h$debug_log("Loading file: " + path); ++ var data = h$THfs.readFileSync(path); ++ const script = new h$THvm.Script(data); ++ script.runInThisContext(); ++} ++ ++// Lookup a static closure by its name ++function h$lookupClosure(v) { ++ h$debug_log("Looking up closure: " + v); ++ const r = eval(v); ++ h$debug_log(" -> Result: " + r); ++ if (!r) return 0; ++ // a RemoteRef is just the offset of a stable pointer ++ return h$makeStablePtr(r); ++} ++ ++// give access to these functions to the dynamically linked code ++globalThis.h$loadJS = h$loadJS; ++globalThis.h$lookupClosure = h$lookupClosure; ++global.require = require; ++global.module = module; ++ ++ ++function h$initInterp() { ++ h$debug_log("Welcome to GHC's JS interpreter"); ++ ++ function stdin_end() { ++ h$debug_log('GHC disconnected: goodbye.'); ++ process.exit(1); ++ }; ++ ++ // read until we find '\n' ++ // Accumulate bytes in "bytes" array ++ let bytes = []; ++ let decoder = new TextDecoder('utf8'); ++ ++ function stdin_readable() { ++ // read until we find '\n' ++ while (null !== (bs = process.stdin.read(1))) { ++ let b = bs[0]; ++ switch(b) { ++ case 10: // `\n` found. `bytes` must contain a command ++ let cmd = decoder.decode(new Uint8Array(bytes)); ++ bytes = []; ++ // we only supports 2 commands: LOAD, RUN_SERVER ++ if (cmd.startsWith("LOAD ")) { ++ h$loadJS(cmd.slice(5)); ++ } ++ else if (cmd.startsWith("RUN_SERVER ")) { ++ let uid = cmd.slice(11); ++ let root = eval("h$" + uid + "ZCGHCiziServerzidefaultServer"); ++ // remove listeners ++ process.stdin.removeListener('end', stdin_end); ++ process.stdin.removeListener('readable', stdin_readable); ++ // run the server ++ h$debug_log("Run server"); ++ h$main(root); ++ // break the loop ++ return; ++ } ++ else { ++ console.log("[JS interpreter] Invalid command received: " + cmd); ++ process.exit(1); ++ } ++ break; ++ default: ++ bytes.push(b); ++ } ++ } ++ }; ++ ++ // read commands on STDIN ++ process.stdin.on('end', stdin_end); ++ process.stdin.on('readable', stdin_readable); ++} ++ ++h$initInterp(); +diff --git a/hadrian/src/Base.hs b/hadrian/src/Base.hs +index 3fcc3bb3c6..00746ed085 100644 +--- a/hadrian/src/Base.hs ++++ b/hadrian/src/Base.hs +@@ -123,6 +123,7 @@ ghcLibDeps stage iplace = do + ps <- mapM (\f -> stageLibPath stage <&> (-/- f)) + [ "llvm-targets" + , "llvm-passes" ++ , "ghc-interp.js" + , "settings" + ] + cxxStdLib <- systemCxxStdLibConfPath (PackageDbLoc stage iplace) +diff --git a/hadrian/src/Rules/Generate.hs b/hadrian/src/Rules/Generate.hs +index 921253f2de..6110dc117a 100644 +--- a/hadrian/src/Rules/Generate.hs ++++ b/hadrian/src/Rules/Generate.hs +@@ -197,6 +197,7 @@ copyRules = do + prefix -/- "ghci-usage.txt" <~ return "driver" + prefix -/- "llvm-targets" <~ return "." + prefix -/- "llvm-passes" <~ return "." ++ prefix -/- "ghc-interp.js" <~ return "." + prefix -/- "template-hsc.h" <~ return (pkgPath hsc2hs -/- "data") + + prefix -/- "html/**" <~ return "utils/haddock/haddock-api/resources" +diff --git a/libraries/base/System/Posix/Internals.hs b/libraries/base/System/Posix/Internals.hs +index e4b45532b6..bd3d4db8ca 100644 +--- a/libraries/base/System/Posix/Internals.hs ++++ b/libraries/base/System/Posix/Internals.hs +@@ -139,10 +139,10 @@ ioe_unknownfiletype = IOError Nothing UnsupportedOperation "fdType" + Nothing + + fdGetMode :: FD -> IO IOMode +-#if defined(mingw32_HOST_OS) ++#if defined(mingw32_HOST_OS) || defined(javascript_HOST_ARCH) + fdGetMode _ = do + -- We don't have a way of finding out which flags are set on FDs +- -- on Windows, so make a handle that thinks that anything goes. ++ -- on Windows/JS, so make a handle that thinks that anything goes. + let flags = o_RDWR + #else + fdGetMode fd = do +diff --git a/libraries/base/jsbits/base.js b/libraries/base/jsbits/base.js +index 5b60d060e3..1613e3b676 100644 +--- a/libraries/base/jsbits/base.js ++++ b/libraries/base/jsbits/base.js +@@ -450,6 +450,15 @@ function h$base_c_s_isdir(mode) { + function h$base_c_s_isfifo(mode) { + return 0; + } ++function h$base_c_fcntl_read(fd,cmd) { ++ return -1; ++} ++function h$base_c_fcntl_write(fd,cmd,value) { ++ return -1; ++} ++function h$base_c_fcntl_lock(fd,cmd,ptr,ptr_o) { ++ return -1; ++} + + #ifndef GHCJS_BROWSER + function h$base_fillStat(fs, b, off) { +diff --git a/libraries/ghci/GHCi/RemoteTypes.hs b/libraries/ghci/GHCi/RemoteTypes.hs +index bbd7d32bed..77b663b2c4 100644 +--- a/libraries/ghci/GHCi/RemoteTypes.hs ++++ b/libraries/ghci/GHCi/RemoteTypes.hs +@@ -8,14 +8,29 @@ + -- compiler/GHC/Runtime/Interpreter.hs. + -- + module GHCi.RemoteTypes +- ( RemotePtr(..), toRemotePtr, fromRemotePtr, castRemotePtr ++ ( -- * Remote pointer ++ RemotePtr(..) ++ , toRemotePtr ++ , fromRemotePtr ++ , castRemotePtr ++ -- * RemoteRef: reference to some heap object (potentially remote) ++ , RemoteRef (..) ++ , mkRemoteRef ++ , localRef ++ , freeRemoteRef ++ , castRemoteRef ++ -- * ForeignRef: RemoteRef with a finalizer ++ , ForeignRef ++ , mkForeignRef ++ , withForeignRef ++ , finalizeForeignRef ++ , castForeignRef ++ , unsafeForeignRefToRemoteRef ++ -- * HValue + , HValue(..) +- , RemoteRef, mkRemoteRef, localRef, freeRemoteRef +- , HValueRef, toHValueRef +- , ForeignRef, mkForeignRef, withForeignRef ++ , HValueRef + , ForeignHValue +- , unsafeForeignRefToRemoteRef, finalizeForeignRef +- ) where ++) where + + import Prelude -- See note [Why do we import Prelude here?] + import Control.DeepSeq +@@ -23,7 +38,6 @@ import Data.Word + import Foreign hiding (newForeignPtr) + import Foreign.Concurrent + import Data.Binary +-import Unsafe.Coerce + import GHC.Exts + import GHC.ForeignPtr + +@@ -52,23 +66,28 @@ deriving instance Binary (RemotePtr a) + deriving instance NFData (RemotePtr a) + + -- ----------------------------------------------------------------------------- +--- HValueRef ++-- HValue: alias for Any + + newtype HValue = HValue Any + + instance Show HValue where + show _ = "" + +--- | A reference to a remote value. These are allocated and freed explicitly. ++-- For convenience ++type HValueRef = RemoteRef HValue ++type ForeignHValue = ForeignRef HValue ++ ++-- ----------------------------------------------------------------------------- ++-- RemoteRef: pointer to a Heap object ++ ++-- | A reference to a heap object. Potentially in a remote heap! ++-- These are allocated and freed explicitly. + newtype RemoteRef a = RemoteRef (RemotePtr ()) + deriving (Show, Binary) + + -- We can discard type information if we want +-toHValueRef :: RemoteRef a -> RemoteRef HValue +-toHValueRef = unsafeCoerce +- +--- For convenience +-type HValueRef = RemoteRef HValue ++castRemoteRef :: RemoteRef a -> RemoteRef b ++castRemoteRef = coerce + + -- | Make a reference to a local value that we can send remotely. + -- This reference will keep the value that it refers to alive until +@@ -78,34 +97,33 @@ mkRemoteRef a = do + sp <- newStablePtr a + return $! RemoteRef (toRemotePtr (castStablePtrToPtr sp)) + +--- | Convert an HValueRef to an HValue. Should only be used if the HValue +--- originated in this process. ++-- | Convert a RemoteRef to its carried type. Should only be used if the ++-- RemoteRef originated in this process. + localRef :: RemoteRef a -> IO a + localRef (RemoteRef w) = + deRefStablePtr (castPtrToStablePtr (fromRemotePtr w)) + +--- | Release an HValueRef that originated in this process ++-- | Release a RemoteRef that originated in this process + freeRemoteRef :: RemoteRef a -> IO () + freeRemoteRef (RemoteRef w) = + freeStablePtr (castPtrToStablePtr (fromRemotePtr w)) + +--- | An HValueRef with a finalizer ++-- | An RemoteRef with a finalizer + newtype ForeignRef a = ForeignRef (ForeignPtr ()) + + instance NFData (ForeignRef a) where + rnf x = x `seq` () + +-type ForeignHValue = ForeignRef HValue + + -- | Create a 'ForeignRef' from a 'RemoteRef'. The finalizer +--- should arrange to call 'freeHValueRef' on the 'HValueRef'. (since ++-- should arrange to call 'freeRemoteRef' on the 'RemoteRef'. (since + -- this function needs to be called in the process that created the +--- 'HValueRef', it cannot be called directly from the finalizer). ++-- 'RemoteRef', it cannot be called directly from the finalizer). + mkForeignRef :: RemoteRef a -> IO () -> IO (ForeignRef a) + mkForeignRef (RemoteRef hvref) finalizer = + ForeignRef <$> newForeignPtr (fromRemotePtr hvref) finalizer + +--- | Use a 'ForeignHValue' ++-- | Use a 'ForeignRef' + withForeignRef :: ForeignRef a -> (RemoteRef a -> IO b) -> IO b + withForeignRef (ForeignRef fp) f = + withForeignPtr fp (f . RemoteRef . toRemotePtr) +@@ -116,3 +134,6 @@ unsafeForeignRefToRemoteRef (ForeignRef fp) = + + finalizeForeignRef :: ForeignRef a -> IO () + finalizeForeignRef (ForeignRef fp) = finalizeForeignPtr fp ++ ++castForeignRef :: ForeignRef a -> ForeignRef b ++castForeignRef = coerce +diff --git a/libraries/ghci/GHCi/Run.hs b/libraries/ghci/GHCi/Run.hs +index fae2ac07f5..2074445270 100644 +--- a/libraries/ghci/GHCi/Run.hs ++++ b/libraries/ghci/GHCi/Run.hs +@@ -1,5 +1,5 @@ + {-# LANGUAGE GADTs, RecordWildCards, MagicHash, ScopedTypeVariables, CPP, +- UnboxedTuples #-} ++ UnboxedTuples, LambdaCase #-} + {-# OPTIONS_GHC -fno-warn-name-shadowing #-} + + -- | +@@ -13,8 +13,14 @@ module GHCi.Run + ) where + + import Prelude -- See note [Why do we import Prelude here?] ++ ++#if !defined(javascript_HOST_ARCH) + import GHCi.CreateBCO + import GHCi.InfoTable ++import Data.Binary ++import Data.Binary.Get ++#endif ++ + import GHCi.FFI + import GHCi.Message + import GHCi.ObjLink +@@ -27,8 +33,6 @@ import Control.Concurrent + import Control.DeepSeq + import Control.Exception + import Control.Monad +-import Data.Binary +-import Data.Binary.Get + import Data.ByteString (ByteString) + import qualified Data.ByteString.Unsafe as B + import GHC.Exts +@@ -49,19 +53,36 @@ foreign import ccall "revertCAFs" rts_revertCAFs :: IO () + + run :: Message a -> IO a + run m = case m of ++#if defined(javascript_HOST_ARCH) ++ LoadObj p -> withCString p loadJS ++ InitLinker -> notSupportedJS m ++ LoadDLL {} -> notSupportedJS m ++ LoadArchive {} -> notSupportedJS m ++ UnloadObj {} -> notSupportedJS m ++ AddLibrarySearchPath {} -> notSupportedJS m ++ RemoveLibrarySearchPath {} -> notSupportedJS m ++ MkConInfoTable {} -> notSupportedJS m ++ ResolveObjs -> notSupportedJS m ++ FindSystemLibrary {} -> notSupportedJS m ++ CreateBCOs {} -> notSupportedJS m ++ LookupClosure str -> lookupJSClosure str ++#else + InitLinker -> initObjLinker RetainCAFs +- RtsRevertCAFs -> rts_revertCAFs +- LookupSymbol str -> fmap toRemotePtr <$> lookupSymbol str +- LookupClosure str -> lookupClosure str + LoadDLL str -> loadDLL str + LoadArchive str -> loadArchive str + LoadObj str -> loadObj str + UnloadObj str -> unloadObj str + AddLibrarySearchPath str -> toRemotePtr <$> addLibrarySearchPath str + RemoveLibrarySearchPath ptr -> removeLibrarySearchPath (fromRemotePtr ptr) ++ MkConInfoTable tc ptrs nptrs tag ptrtag desc -> ++ toRemotePtr <$> mkConInfoTable tc ptrs nptrs tag ptrtag desc + ResolveObjs -> resolveObjs + FindSystemLibrary str -> findSystemLibrary str + CreateBCOs bcos -> createBCOs (concatMap (runGet get) bcos) ++ LookupClosure str -> lookupClosure str ++#endif ++ RtsRevertCAFs -> rts_revertCAFs ++ LookupSymbol str -> fmap toRemotePtr <$> lookupSymbol str + FreeHValueRefs rs -> mapM_ freeRemoteRef rs + AddSptEntry fpr r -> localRef r >>= sptAddEntry fpr + EvalStmt opts r -> evalStmt opts r +@@ -90,15 +111,38 @@ run m = case m of + MallocStrings bss -> mapM mkString0 bss + PrepFFI conv args res -> toRemotePtr <$> prepForeignCall conv args res + FreeFFI p -> freeForeignCallInfo (fromRemotePtr p) +- MkConInfoTable tc ptrs nptrs tag ptrtag desc -> +- toRemotePtr <$> mkConInfoTable tc ptrs nptrs tag ptrtag desc + StartTH -> startTH + GetClosure ref -> do + clos <- Heap.getClosureData =<< localRef ref + mapM (\(Heap.Box x) -> mkRemoteRef (HValue x)) clos + Seq ref -> doSeq ref + ResumeSeq ref -> resumeSeq ref +- _other -> error "GHCi.Run.run" ++ ++ Shutdown -> unexpectedMessage m ++ RunTH {} -> unexpectedMessage m ++ RunModFinalizers {} -> unexpectedMessage m ++ ++unexpectedMessage :: Message a -> b ++unexpectedMessage m = error ("GHCi.Run.Run: unexpected message: " ++ show m) ++ ++#if defined(javascript_HOST_ARCH) ++foreign import javascript "((ptr,off) => globalThis.h$loadJS(h$decodeUtf8z(ptr,off)))" loadJS :: CString -> IO () ++ ++foreign import javascript "((ptr,off) => globalThis.h$lookupClosure(h$decodeUtf8z(ptr,off)))" lookupJSClosure# :: CString -> State# RealWorld -> (# State# RealWorld, Int# #) ++ ++lookupJSClosure' :: String -> IO Int ++lookupJSClosure' str = withCString str $ \cstr -> IO (\s -> ++ case lookupJSClosure# cstr s of ++ (# s', r #) -> (# s', I# r #)) ++ ++lookupJSClosure :: String -> IO (Maybe HValueRef) ++lookupJSClosure str = lookupJSClosure' str >>= \case ++ 0 -> pure Nothing ++ r -> pure (Just (RemoteRef (RemotePtr (fromIntegral r)))) ++ ++notSupportedJS :: Message a -> b ++notSupportedJS m = error ("Message not supported with the JavaScript interpreter: " ++ show m) ++#endif + + evalStmt :: EvalOpts -> EvalExpr HValueRef -> IO (EvalStatus [HValueRef]) + evalStmt opts expr = do +diff --git a/libraries/ghci/ghci.cabal.in b/libraries/ghci/ghci.cabal.in +index 700b7d62ea..ce7dc10a3e 100644 +--- a/libraries/ghci/ghci.cabal.in ++++ b/libraries/ghci/ghci.cabal.in +@@ -50,7 +50,6 @@ library + if flag(internal-interpreter) + CPP-Options: -DHAVE_INTERNAL_INTERPRETER + exposed-modules: +- GHCi.InfoTable + GHCi.Run + GHCi.CreateBCO + GHCi.ObjLink +@@ -59,6 +58,10 @@ library + GHCi.TH + GHCi.Server + ++ if !arch(javascript) ++ exposed-modules: ++ GHCi.InfoTable ++ + exposed-modules: + GHCi.BreakArray + GHCi.BinaryArray +diff --git a/libraries/template-haskell/tests/all.T b/libraries/template-haskell/tests/all.T +index 48f05c64fa..6fb09fc3c7 100644 +--- a/libraries/template-haskell/tests/all.T ++++ b/libraries/template-haskell/tests/all.T +@@ -1,3 +1,3 @@ + # difficult to test TH with profiling, because we have to build twice +-test('dataToExpQUnit', [omit_ways(prof_ways), req_interp], compile, ['-v0']) +-test('pragCompletePpr', [omit_ways(prof_ways), req_interp], compile_and_run, ['']) ++test('dataToExpQUnit', [omit_ways(prof_ways), req_th], compile, ['-v0']) ++test('pragCompletePpr', [omit_ways(prof_ways), req_th], compile_and_run, ['']) From ab1d91434e97292dc14e3bb7b0df1e2db6809ff8 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 13 Mar 2025 12:01:10 +1300 Subject: [PATCH 190/206] Skip windows patch now in 9.6 branch --- overlays/bootstrap.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 7f7e181b19..46f3d48617 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -137,7 +137,8 @@ in { ++ onWindows (fromUntil "9.6.3" "9.11" ./patches/ghc/ghc-9.8-hadrian-win-cross.patch) # support R_X86_64_PC64 (ELF constant 24) - IMAGE_REL_AMD64_SREL32 (PE constant 14), which seems to appear with 9.6 more frequently, and # results in "unhandled PEi386 relocation type 14". - ++ onWindows (fromUntil "9.4.1" "9.8.3" ./patches/ghc/win-reloc-x86_64-pc64.patch) + ++ onWindows (fromUntil "9.4.1" "9.6.7" ./patches/ghc/win-reloc-x86_64-pc64.patch) + ++ onWindows (fromUntil "9.8.1" "9.8.3" ./patches/ghc/win-reloc-x86_64-pc64.patch) ++ onWindows (fromUntil "9.10" "9.11" ./patches/ghc/win-reloc-x86_64-pc64.patch) # ++ onWindows (fromUntil "9.4.1" "9.10" ./patches/ghc/Win32-depends-on-mingwex.patch) # if the host system provides ucrt (e.g. wine with ucrtbase.dll), we may end up linking against symbols from ucrtbase, instead of msvcrt, From 70fc76339479d557221491e810770b64e47909b9 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 13 Mar 2025 12:42:35 +1300 Subject: [PATCH 191/206] Update patch --- overlays/patches/ghc/ghc-9.6.7-JS-implement-TH-support.patch | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/overlays/patches/ghc/ghc-9.6.7-JS-implement-TH-support.patch b/overlays/patches/ghc/ghc-9.6.7-JS-implement-TH-support.patch index 64aba4ceb6..e710e4dd0e 100644 --- a/overlays/patches/ghc/ghc-9.6.7-JS-implement-TH-support.patch +++ b/overlays/patches/ghc/ghc-9.6.7-JS-implement-TH-support.patch @@ -119,7 +119,7 @@ index 651f9bf8a2..24bfd5dfc4 100644 import GHC.Types.Name.Ppr import GHC.Types.TyThing import GHC.Types.HpcInfo -+import GHC.Types.Unique.Supply (uniqFromMask) ++import GHC.Types.Unique.Supply (uniqFromTag) +import GHC.Types.Unique (getKey) import GHC.Utils.Fingerprint ( Fingerprint ) @@ -234,7 +234,7 @@ index 651f9bf8a2..24bfd5dfc4 100644 + -- + -- The id has to be exported for the JS backend. This isn't required for the + -- byte-code interpreter but it does no harm to always do it. -+ u <- uniqFromMask 'I' ++ u <- uniqFromTag 'I' + let binding_name = mkSystemVarName u (fsLit ("BCO_toplevel")) + let binding_id = mkExportedVanillaId binding_name (exprType simpl_expr) + From 9843757d333f04a439cb744e252eee71fce08581 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 13 Mar 2025 16:13:15 +1300 Subject: [PATCH 192/206] Fix for ghcjs --- overlays/patches/ghc/ghc-9.6.7-JS-implement-TH-support.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overlays/patches/ghc/ghc-9.6.7-JS-implement-TH-support.patch b/overlays/patches/ghc/ghc-9.6.7-JS-implement-TH-support.patch index e710e4dd0e..32a6482a38 100644 --- a/overlays/patches/ghc/ghc-9.6.7-JS-implement-TH-support.patch +++ b/overlays/patches/ghc/ghc-9.6.7-JS-implement-TH-support.patch @@ -259,7 +259,7 @@ index 651f9bf8a2..24bfd5dfc4 100644 + ml_hie_file = panic "hscCompileCoreExpr':ml_hie_file" } + + let ictxt = (hsc_IC hsc_env) { -+ ic_mod_index = getKey u ++ ic_mod_index = fromIntegral (getKey u) + -- Ensure module uniqueness ("GhciNNNN") by reusing the unique + -- we've used for the binding. If ic_mod_index was mutable, we + -- would simply bump it here after its use. From a90444e2d11fc2e4f9123df17ac5fbb106ee972a Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 13 Mar 2025 16:16:00 +1300 Subject: [PATCH 193/206] Use hls master branch for testing hls --- build.nix | 11 ++++++++--- flake.lock | 23 ++++++++++++++++++++--- flake.nix | 1 + test/haskell-language-server/cabal.nix | 12 ++++++++---- 4 files changed, 37 insertions(+), 10 deletions(-) diff --git a/build.nix b/build.nix index d9f0790cf0..6939a16517 100644 --- a/build.nix +++ b/build.nix @@ -57,10 +57,15 @@ in rec { inherit evalPackages; src = pkgs.haskell-nix.sources."hls-2.2"; }; - } // pkgs.lib.optionalAttrs (ghcFromTo "9.0" "9.8.3" || ghcFromTo "9.10" "9.11") { - "hls-29" = tool compiler-nix-name "haskell-language-server" { + } // pkgs.lib.optionalAttrs (ghcFromTo "9.0" "9.11") { + "hls" = tool compiler-nix-name "haskell-language-server" { inherit evalPackages; - src = pkgs.haskell-nix.sources."hls-2.9"; + src = pkgs.haskell-nix.sources.hls; + cabalProjectLocal = '' + if impl(ghc >=9.6.7) && impl(ghc <9.7) || impl(ghc >=9.8.3) + constraints: ghc-lib-parser >=9.8.4 + allow-older: ghc-lib-parser:filepath + ''; }; }) ); diff --git a/flake.lock b/flake.lock index 965524a8d6..1009929ad5 100644 --- a/flake.lock +++ b/flake.lock @@ -150,6 +150,22 @@ "type": "github" } }, + "hls": { + "flake": false, + "locked": { + "lastModified": 1741604408, + "narHash": "sha256-tuq3+Ip70yu89GswZ7DSINBpwRprnWnl6xDYnS4GOsc=", + "owner": "haskell", + "repo": "haskell-language-server", + "rev": "682d6894c94087da5e566771f25311c47e145359", + "type": "github" + }, + "original": { + "owner": "haskell", + "repo": "haskell-language-server", + "type": "github" + } + }, "hls-1.10": { "flake": false, "locked": { @@ -306,11 +322,11 @@ "hls-2.9": { "flake": false, "locked": { - "lastModified": 1720003792, - "narHash": "sha256-qnDx8Pk0UxtoPr7BimEsAZh9g2WuTuMB/kGqnmdryKs=", + "lastModified": 1719993701, + "narHash": "sha256-wy348++MiMm/xwtI9M3vVpqj2qfGgnDcZIGXw8sF1sA=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "0c1817cb2babef0765e4e72dd297c013e8e3d12b", + "rev": "90319a7e62ab93ab65a95f8f2bcf537e34dae76a", "type": "github" }, "original": { @@ -461,6 +477,7 @@ "ghc-8.6.5-iohk": "ghc-8.6.5-iohk", "hackage": "hackage", "hackage-for-stackage": "hackage-for-stackage", + "hls": "hls", "hls-1.10": "hls-1.10", "hls-2.0": "hls-2.0", "hls-2.2": "hls-2.2", diff --git a/flake.nix b/flake.nix index e803b54be0..24d0689fac 100644 --- a/flake.nix +++ b/flake.nix @@ -19,6 +19,7 @@ "hls-2.7" = { url = "github:haskell/haskell-language-server/2.7.0.0"; flake = false; }; "hls-2.8" = { url = "github:haskell/haskell-language-server/2.8.0.0"; flake = false; }; "hls-2.9" = { url = "github:haskell/haskell-language-server/2.9.0.1"; flake = false; }; + "hls" = { url = "github:haskell/haskell-language-server"; flake = false; }; hackage = { url = "github:input-output-hk/hackage.nix"; flake = false; diff --git a/test/haskell-language-server/cabal.nix b/test/haskell-language-server/cabal.nix index f2894dab3f..3d1e5c378b 100644 --- a/test/haskell-language-server/cabal.nix +++ b/test/haskell-language-server/cabal.nix @@ -1,10 +1,15 @@ -{ stdenv, testSrc, haskell-nix, compiler-nix-name, evalPackages, recurseIntoAttrs, buildPackages }: +{ lib, stdenv, testSrc, haskell-nix, compiler-nix-name, evalPackages, recurseIntoAttrs, buildPackages }: let project = haskell-nix.cabalProject' { inherit compiler-nix-name evalPackages; name = "haskell-language-server"; - src = haskell-nix.sources."hls-2.9"; + src = haskell-nix.sources.hls; configureArgs = "--disable-benchmarks --disable-tests"; # This makes cabalProject' more like the `tool` function + cabalProjectLocal = '' + if impl(ghc >=9.6.7) && impl(ghc <9.7) || impl(ghc >=9.8.3) + constraints: ghc-lib-parser >=9.8.4 + allow-older: ghc-lib-parser:filepath + ''; }; in recurseIntoAttrs { ifdInputs = { @@ -16,6 +21,5 @@ in recurseIntoAttrs { meta.disabled = stdenv.hostPlatform != stdenv.buildPlatform || __compareVersions buildPackages.haskell-nix.compiler.${compiler-nix-name}.version "9.0.1" < 0 - || __compareVersions buildPackages.haskell-nix.compiler.${compiler-nix-name}.version "9.11.0" >= 0 - || __elem compiler-nix-name ["ghc983" "ghc984"]; + || __compareVersions buildPackages.haskell-nix.compiler.${compiler-nix-name}.version "9.11.0" >= 0; } From 1c38a3728e5381f9cb3d639dca66b8bd031459bf Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 13 Mar 2025 17:46:37 +1300 Subject: [PATCH 194/206] Add materialized files --- .../ghc96720250227/base.nix | 49 +++++++ .../ghc96720250227/deriveConstants.nix | 39 ++++++ .../ghc96720250227/genprimopcode.nix | 40 ++++++ .../ghc96720250227/ghc-bignum.nix | 37 ++++++ .../ghc96720250227/ghc-boot.nix | 46 +++++++ .../ghc96720250227/ghc-heap.nix | 36 ++++++ .../ghc96720250227/ghc-prim.nix | 47 +++++++ .../ghc96720250227/ghc.nix | 69 ++++++++++ .../ghc96720250227/ghci.nix | 45 +++++++ .../ghc96720250227/hpc.nix | 38 ++++++ .../ghc96720250227/integer-gmp.nix | 35 +++++ .../ghc96720250227/iserv.nix | 42 ++++++ .../ghc96720250227/libiserv.nix | 38 ++++++ .../ghc96720250227/remote-iserv.nix | 36 ++++++ .../ghc96720250227/template-haskell.nix | 36 ++++++ .../ghc96720250227llvm/base.nix | 49 +++++++ .../ghc96720250227llvm/deriveConstants.nix | 39 ++++++ .../ghc96720250227llvm/genprimopcode.nix | 40 ++++++ .../ghc96720250227llvm/ghc-bignum.nix | 37 ++++++ .../ghc96720250227llvm/ghc-boot.nix | 46 +++++++ .../ghc96720250227llvm/ghc-heap.nix | 36 ++++++ .../ghc96720250227llvm/ghc-prim.nix | 47 +++++++ .../ghc96720250227llvm/ghc.nix | 69 ++++++++++ .../ghc96720250227llvm/ghci.nix | 45 +++++++ .../ghc96720250227llvm/hpc.nix | 38 ++++++ .../ghc96720250227llvm/integer-gmp.nix | 35 +++++ .../ghc96720250227llvm/iserv.nix | 42 ++++++ .../ghc96720250227llvm/libiserv.nix | 38 ++++++ .../ghc96720250227llvm/remote-iserv.nix | 36 ++++++ .../ghc96720250227llvm/template-haskell.nix | 36 ++++++ .../hadrian/cabal-files/Cabal-syntax.nix | 12 +- .../hadrian/cabal-files/Cabal.nix | 16 +-- .../hadrian/cabal-files/directory.nix | 66 ++++++++++ .../hadrian/cabal-files/file-io.nix | 120 ++++++++++++++++++ .../hadrian/cabal-files/process.nix | 50 ++++++++ .../ghc964/hadrian-ghc96/hadrian/default.nix | 12 +- materialized/ghc964/hadrian-ghc96/plan.json | 2 +- .../default.nix | 10 -- 38 files changed, 1523 insertions(+), 31 deletions(-) create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227/base.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227/deriveConstants.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227/genprimopcode.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227/ghc-bignum.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227/ghc-boot.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227/ghc-heap.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227/ghc-prim.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227/ghc.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227/ghci.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227/hpc.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227/integer-gmp.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227/iserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227/libiserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227/remote-iserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227/template-haskell.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm/base.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm/deriveConstants.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm/genprimopcode.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc-bignum.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc-boot.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc-heap.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc-prim.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghci.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm/hpc.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm/integer-gmp.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm/iserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm/libiserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm/remote-iserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm/template-haskell.nix create mode 100644 materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/directory.nix create mode 100644 materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/file-io.nix create mode 100644 materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/process.nix diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227/base.nix b/materialized/ghc-boot-packages-nix/ghc96720250227/base.nix new file mode 100644 index 0000000000..1f649a4341 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227/base.nix @@ -0,0 +1,49 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "base"; version = "4.18.3.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "Core Libraries Committee "; + author = ""; + homepage = ""; + url = ""; + synopsis = "Core data structures and operations"; + description = "Haskell's base library provides, among other things, core types (e.g. [Bool](\"Data.Bool\") and [Int](\"Data.Int\")),\ndata structures (e.g. [List](\"Data.List\"), [Tuple](\"Data.Tuple\") and [Maybe](\"Data.Maybe\")),\nthe [Exception](\"Control.Exception\") mechanism, and the [IO](\"System.IO\") & [Concurrency](\"Control.Concurrent\") operations.\nThe \"Prelude\" module, which is imported by default, exposes a curated set of types and functions from other modules.\n\nOther data structures like [Map](https://hackage.haskell.org/package/containers/docs/Data-Map.html),\n[Set](https://hackage.haskell.org/package/containers/docs/Data-Set.html) are available in the [containers](https://hackage.haskell.org/package/containers) library.\nTo work with textual data, use the [text](https://hackage.haskell.org/package/text/docs/Data-Text.html) library."; + buildType = "Configure"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."ghc-bignum" or (errorHandler.buildDepError "ghc-bignum")) + ]; + libs = pkgs.lib.optionals (system.isWindows) [ + (pkgs."wsock32" or (errorHandler.sysDepError "wsock32")) + (pkgs."user32" or (errorHandler.sysDepError "user32")) + (pkgs."shell32" or (errorHandler.sysDepError "shell32")) + (pkgs."mingw32" or (errorHandler.sysDepError "mingw32")) + (pkgs."kernel32" or (errorHandler.sysDepError "kernel32")) + (pkgs."advapi32" or (errorHandler.sysDepError "advapi32")) + (pkgs."mingwex" or (errorHandler.sysDepError "mingwex")) + (pkgs."ws2_32" or (errorHandler.sysDepError "ws2_32")) + (pkgs."shlwapi" or (errorHandler.sysDepError "shlwapi")) + (pkgs."ole32" or (errorHandler.sysDepError "ole32")) + (pkgs."rpcrt4" or (errorHandler.sysDepError "rpcrt4")) + (pkgs."ntdll" or (errorHandler.sysDepError "ntdll")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227/deriveConstants.nix b/materialized/ghc-boot-packages-nix/ghc96720250227/deriveConstants.nix new file mode 100644 index 0000000000..135cdd02f6 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227/deriveConstants.nix @@ -0,0 +1,39 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "deriveConstants"; version = "0.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Derive header files containing various constants for the GHC build process"; + description = "This utility is responsible for generating a number of C header files\nneeded during the GHC build process. See @rts/include/ghc.mk@ in the GHC\nbuild system for details."; + buildType = "Simple"; + }; + components = { + exes = { + "deriveConstants" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."process" or (errorHandler.buildDepError "process")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227/genprimopcode.nix b/materialized/ghc-boot-packages-nix/ghc96720250227/genprimopcode.nix new file mode 100644 index 0000000000..49bbe516ba --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227/genprimopcode.nix @@ -0,0 +1,40 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { build-tool-depends = true; }; + package = { + specVersion = "2.0"; + identifier = { name = "genprimopcode"; version = "0.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Generates various files implementing GHC's primitive operations."; + description = "This utility reads a textual description of GHC's primitive operations\n(@primops.txt.pp@) and produces a number of outputs. These include,\n\n* the @GHC.Prim@ module included in the @ghc-prim@ package.\n* the @GHC.PrimopWrappers@ module included in the @ghc-prim@ package.\n* an LaTeX document describing the primitive operations."; + buildType = "Simple"; + }; + components = { + exes = { + "genprimopcode" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + ]; + build-tools = pkgs.lib.optionals (flags.build-tool-depends) [ + (hsPkgs.pkgsBuildBuild.alex.components.exes.alex or (pkgs.pkgsBuildBuild.alex or (errorHandler.buildToolDepError "alex:alex"))) + (hsPkgs.pkgsBuildBuild.happy.components.exes.happy or (pkgs.pkgsBuildBuild.happy or (errorHandler.buildToolDepError "happy:happy"))) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227/ghc-bignum.nix b/materialized/ghc-boot-packages-nix/ghc96720250227/ghc-bignum.nix new file mode 100644 index 0000000000..46af6e0e9f --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227/ghc-bignum.nix @@ -0,0 +1,37 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { native = false; ffi = false; gmp = false; check = false; }; + package = { + specVersion = "2.0"; + identifier = { name = "ghc-bignum"; version = "1.3"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = "Sylvain Henry"; + homepage = ""; + url = ""; + synopsis = "GHC BigNum library"; + description = "This package provides the low-level implementation of the standard\n'BigNat', 'Natural' and 'Integer' types."; + buildType = "Configure"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + ]; + buildable = (if !flags.native && !flags.gmp && !flags.ffi + then false + else true) && (if flags.native && (flags.gmp || flags.ffi) + then false + else true) && (if flags.gmp && flags.ffi then false else true); + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227/ghc-boot.nix b/materialized/ghc-boot-packages-nix/ghc96720250227/ghc-boot.nix new file mode 100644 index 0000000000..bdb3851804 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227/ghc-boot.nix @@ -0,0 +1,46 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-boot"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Shared functionality between GHC and its boot libraries"; + description = "This library is shared between GHC, ghc-pkg, and other boot\nlibraries.\n.\nA note about \"GHC.Unit.Database\": it only deals with the subset of\nthe package database that the compiler cares about: modules\npaths etc and not package metadata like description, authors\netc. It is thus not a library interface to ghc-pkg and is *not*\nsuitable for modifying GHC package databases.\n.\nThe package database format and this library are constructed in\nsuch a way that while ghc-pkg depends on Cabal, the GHC library\nand program do not have to depend on Cabal."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + ]; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghc-boot-th" or (errorHandler.buildDepError "ghc-boot-th")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227/ghc-heap.nix b/materialized/ghc-boot-packages-nix/ghc96720250227/ghc-heap.nix new file mode 100644 index 0000000000..f8edabe13b --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227/ghc-heap.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-heap"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Functions for walking GHC's heap"; + description = "This package provides functions for walking the GHC heap data structures\nand retrieving information about those data structures."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227/ghc-prim.nix b/materialized/ghc-boot-packages-nix/ghc96720250227/ghc-prim.nix new file mode 100644 index 0000000000..a657675b58 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227/ghc-prim.nix @@ -0,0 +1,47 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "2.2"; + identifier = { name = "ghc-prim"; version = "0.10.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "GHC primitives"; + description = "This package contains the primitive types and operations supplied by GHC.\nIt is an internal package, only for the use of GHC developers.\nGHC users should not use it! If you do use it then expect\nbreaking changes at any time without warning. You should prefer\nto import @GHC.Exts@ from the @base@ package instead."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.process or (pkgs.pkgsBuildBuild.process or (errorHandler.setupDepError "process"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + ]; + }; + components = { + "library" = { + depends = [ (hsPkgs."rts" or (errorHandler.buildDepError "rts")) ]; + libs = pkgs.lib.optionals (system.isWindows) [ + (pkgs."user32" or (errorHandler.sysDepError "user32")) + (pkgs."mingw32" or (errorHandler.sysDepError "mingw32")) + (pkgs."mingwex" or (errorHandler.sysDepError "mingwex")) + (pkgs."ucrt" or (errorHandler.sysDepError "ucrt")) + ] ++ pkgs.lib.optionals (system.isLinux) [ + (pkgs."c" or (errorHandler.sysDepError "c")) + (pkgs."m" or (errorHandler.sysDepError "m")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227/ghc.nix b/materialized/ghc-boot-packages-nix/ghc96720250227/ghc.nix new file mode 100644 index 0000000000..cb75e00e5c --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227/ghc.nix @@ -0,0 +1,69 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { + internal-interpreter = false; + dynamic-system-linker = true; + build-tool-depends = true; + }; + package = { + specVersion = "2.2"; + identifier = { name = "ghc"; version = "9.6.7.20250227"; }; + 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"; + 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.\n\nSee \nfor more information."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.process or (pkgs.pkgsBuildBuild.process or (errorHandler.setupDepError "process"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + ]; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."process" or (errorHandler.buildDepError "process")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) + (hsPkgs."hpc" or (errorHandler.buildDepError "hpc")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + (hsPkgs."exceptions" or (errorHandler.buildDepError "exceptions")) + (hsPkgs."stm" or (errorHandler.buildDepError "stm")) + (hsPkgs."ghc-boot" or (errorHandler.buildDepError "ghc-boot")) + (hsPkgs."ghc-heap" or (errorHandler.buildDepError "ghc-heap")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ] ++ (if system.isWindows + then [ (hsPkgs."Win32" or (errorHandler.buildDepError "Win32")) ] + else [ (hsPkgs."unix" or (errorHandler.buildDepError "unix")) ]); + build-tools = pkgs.lib.optionals (flags.build-tool-depends) [ + (hsPkgs.pkgsBuildBuild.alex.components.exes.alex or (pkgs.pkgsBuildBuild.alex or (errorHandler.buildToolDepError "alex:alex"))) + (hsPkgs.pkgsBuildBuild.happy.components.exes.happy or (pkgs.pkgsBuildBuild.happy or (errorHandler.buildToolDepError "happy:happy"))) + (hsPkgs.pkgsBuildBuild.genprimopcode.components.exes.genprimopcode or (pkgs.pkgsBuildBuild.genprimopcode or (errorHandler.buildToolDepError "genprimopcode:genprimopcode"))) + (hsPkgs.pkgsBuildBuild.deriveConstants.components.exes.deriveConstants or (pkgs.pkgsBuildBuild.deriveConstants or (errorHandler.buildToolDepError "deriveConstants:deriveConstants"))) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227/ghci.nix b/materialized/ghc-boot-packages-nix/ghc96720250227/ghci.nix new file mode 100644 index 0000000000..3cc6975487 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227/ghci.nix @@ -0,0 +1,45 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { internal-interpreter = false; }; + package = { + specVersion = "1.10"; + identifier = { name = "ghci"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "The library supporting GHC's interactive interpreter"; + 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"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."ghc-boot" or (errorHandler.buildDepError "ghc-boot")) + (hsPkgs."ghc-heap" or (errorHandler.buildDepError "ghc-heap")) + (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227/hpc.nix b/materialized/ghc-boot-packages-nix/ghc96720250227/hpc.nix new file mode 100644 index 0000000000..c9d84dfbb7 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227/hpc.nix @@ -0,0 +1,38 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "hpc"; version = "0.6.2.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = "Andy Gill"; + homepage = ""; + url = ""; + synopsis = "Code Coverage Library for Haskell"; + description = "This package provides the code coverage library for Haskell.\n\nSee for more\ninformation."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227/integer-gmp.nix b/materialized/ghc-boot-packages-nix/ghc96720250227/integer-gmp.nix new file mode 100644 index 0000000000..94f930e70e --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227/integer-gmp.nix @@ -0,0 +1,35 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "2.0"; + identifier = { name = "integer-gmp"; version = "1.1"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "hvr@gnu.org"; + author = "Herbert Valerio Riedel"; + homepage = "https://www.haskell.org/ghc/"; + url = ""; + synopsis = "Integer library based on GMP"; + description = "This package used to provide an implementation of the standard 'Integer'\ntype based on the\n.\n\nIt is now deprecated in favor of the 'ghc-bignum' package.\n\nIts purpose is to provide backward compatibility for codes directly\ndepending on the `integer-gmp` package."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."ghc-bignum" or (errorHandler.buildDepError "ghc-bignum")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227/iserv.nix b/materialized/ghc-boot-packages-nix/ghc96720250227/iserv.nix new file mode 100644 index 0000000000..9badbbf56b --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227/iserv.nix @@ -0,0 +1,42 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "iserv"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "iserv allows GHC to delegate Template Haskell computations"; + description = "GHC can be provided with a path to the iserv binary with\n@-pgmi=/path/to/iserv-bin@, and will in combination with\n@-fexternal-interpreter@, compile Template Haskell though the\n@iserv-bin@ delegate. This is very similar to how ghcjs has been\ncompiling Template Haskell, by spawning a separate delegate (so\ncalled runner on the javascript vm) and evaluating the splices\nthere.\n\nTo use iserv with cross compilers, please see @libraries/libiserv@\nand @utils/iserv-proxy@."; + buildType = "Simple"; + }; + components = { + exes = { + "iserv" = { + depends = [ + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + (hsPkgs."libiserv" or (errorHandler.buildDepError "libiserv")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227/libiserv.nix b/materialized/ghc-boot-packages-nix/ghc96720250227/libiserv.nix new file mode 100644 index 0000000000..ffe0a9ee99 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227/libiserv.nix @@ -0,0 +1,38 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { network = false; }; + package = { + specVersion = "1.10"; + identifier = { name = "libiserv"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Provides shared functionality between iserv and iserv-proxy."; + description = "Provides shared functionality between iserv and iserv-proxy."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227/remote-iserv.nix b/materialized/ghc-boot-packages-nix/ghc96720250227/remote-iserv.nix new file mode 100644 index 0000000000..3431eb0712 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227/remote-iserv.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "remote-iserv"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "Moritz Angermann "; + author = "Moritz Angermann "; + homepage = ""; + url = ""; + synopsis = "iserv allows GHC to delegate Template Haskell computations"; + description = "This is a very simple remote runner for iserv, to be used together\nwith iserv-proxy. The foundamental idea is that this this wrapper\nstarts running libiserv on a given port to which iserv-proxy will\nthen connect."; + buildType = "Simple"; + }; + components = { + exes = { + "remote-iserv" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."libiserv" or (errorHandler.buildDepError "libiserv")) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227/template-haskell.nix b/materialized/ghc-boot-packages-nix/ghc96720250227/template-haskell.nix new file mode 100644 index 0000000000..693b8f6a78 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227/template-haskell.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "template-haskell"; version = "2.20.0.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Support library for Template Haskell"; + description = "This package provides modules containing facilities for manipulating\nHaskell source code using Template Haskell.\n\nSee for more\ninformation."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-boot-th" or (errorHandler.buildDepError "ghc-boot-th")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."pretty" or (errorHandler.buildDepError "pretty")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm/base.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/base.nix new file mode 100644 index 0000000000..1f649a4341 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/base.nix @@ -0,0 +1,49 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "base"; version = "4.18.3.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "Core Libraries Committee "; + author = ""; + homepage = ""; + url = ""; + synopsis = "Core data structures and operations"; + description = "Haskell's base library provides, among other things, core types (e.g. [Bool](\"Data.Bool\") and [Int](\"Data.Int\")),\ndata structures (e.g. [List](\"Data.List\"), [Tuple](\"Data.Tuple\") and [Maybe](\"Data.Maybe\")),\nthe [Exception](\"Control.Exception\") mechanism, and the [IO](\"System.IO\") & [Concurrency](\"Control.Concurrent\") operations.\nThe \"Prelude\" module, which is imported by default, exposes a curated set of types and functions from other modules.\n\nOther data structures like [Map](https://hackage.haskell.org/package/containers/docs/Data-Map.html),\n[Set](https://hackage.haskell.org/package/containers/docs/Data-Set.html) are available in the [containers](https://hackage.haskell.org/package/containers) library.\nTo work with textual data, use the [text](https://hackage.haskell.org/package/text/docs/Data-Text.html) library."; + buildType = "Configure"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."ghc-bignum" or (errorHandler.buildDepError "ghc-bignum")) + ]; + libs = pkgs.lib.optionals (system.isWindows) [ + (pkgs."wsock32" or (errorHandler.sysDepError "wsock32")) + (pkgs."user32" or (errorHandler.sysDepError "user32")) + (pkgs."shell32" or (errorHandler.sysDepError "shell32")) + (pkgs."mingw32" or (errorHandler.sysDepError "mingw32")) + (pkgs."kernel32" or (errorHandler.sysDepError "kernel32")) + (pkgs."advapi32" or (errorHandler.sysDepError "advapi32")) + (pkgs."mingwex" or (errorHandler.sysDepError "mingwex")) + (pkgs."ws2_32" or (errorHandler.sysDepError "ws2_32")) + (pkgs."shlwapi" or (errorHandler.sysDepError "shlwapi")) + (pkgs."ole32" or (errorHandler.sysDepError "ole32")) + (pkgs."rpcrt4" or (errorHandler.sysDepError "rpcrt4")) + (pkgs."ntdll" or (errorHandler.sysDepError "ntdll")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm/deriveConstants.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/deriveConstants.nix new file mode 100644 index 0000000000..135cdd02f6 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/deriveConstants.nix @@ -0,0 +1,39 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "deriveConstants"; version = "0.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Derive header files containing various constants for the GHC build process"; + description = "This utility is responsible for generating a number of C header files\nneeded during the GHC build process. See @rts/include/ghc.mk@ in the GHC\nbuild system for details."; + buildType = "Simple"; + }; + components = { + exes = { + "deriveConstants" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."process" or (errorHandler.buildDepError "process")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm/genprimopcode.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/genprimopcode.nix new file mode 100644 index 0000000000..49bbe516ba --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/genprimopcode.nix @@ -0,0 +1,40 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { build-tool-depends = true; }; + package = { + specVersion = "2.0"; + identifier = { name = "genprimopcode"; version = "0.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Generates various files implementing GHC's primitive operations."; + description = "This utility reads a textual description of GHC's primitive operations\n(@primops.txt.pp@) and produces a number of outputs. These include,\n\n* the @GHC.Prim@ module included in the @ghc-prim@ package.\n* the @GHC.PrimopWrappers@ module included in the @ghc-prim@ package.\n* an LaTeX document describing the primitive operations."; + buildType = "Simple"; + }; + components = { + exes = { + "genprimopcode" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + ]; + build-tools = pkgs.lib.optionals (flags.build-tool-depends) [ + (hsPkgs.pkgsBuildBuild.alex.components.exes.alex or (pkgs.pkgsBuildBuild.alex or (errorHandler.buildToolDepError "alex:alex"))) + (hsPkgs.pkgsBuildBuild.happy.components.exes.happy or (pkgs.pkgsBuildBuild.happy or (errorHandler.buildToolDepError "happy:happy"))) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc-bignum.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc-bignum.nix new file mode 100644 index 0000000000..46af6e0e9f --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc-bignum.nix @@ -0,0 +1,37 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { native = false; ffi = false; gmp = false; check = false; }; + package = { + specVersion = "2.0"; + identifier = { name = "ghc-bignum"; version = "1.3"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = "Sylvain Henry"; + homepage = ""; + url = ""; + synopsis = "GHC BigNum library"; + description = "This package provides the low-level implementation of the standard\n'BigNat', 'Natural' and 'Integer' types."; + buildType = "Configure"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + ]; + buildable = (if !flags.native && !flags.gmp && !flags.ffi + then false + else true) && (if flags.native && (flags.gmp || flags.ffi) + then false + else true) && (if flags.gmp && flags.ffi then false else true); + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc-boot.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc-boot.nix new file mode 100644 index 0000000000..bdb3851804 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc-boot.nix @@ -0,0 +1,46 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-boot"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Shared functionality between GHC and its boot libraries"; + description = "This library is shared between GHC, ghc-pkg, and other boot\nlibraries.\n.\nA note about \"GHC.Unit.Database\": it only deals with the subset of\nthe package database that the compiler cares about: modules\npaths etc and not package metadata like description, authors\netc. It is thus not a library interface to ghc-pkg and is *not*\nsuitable for modifying GHC package databases.\n.\nThe package database format and this library are constructed in\nsuch a way that while ghc-pkg depends on Cabal, the GHC library\nand program do not have to depend on Cabal."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + ]; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghc-boot-th" or (errorHandler.buildDepError "ghc-boot-th")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc-heap.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc-heap.nix new file mode 100644 index 0000000000..f8edabe13b --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc-heap.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-heap"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Functions for walking GHC's heap"; + description = "This package provides functions for walking the GHC heap data structures\nand retrieving information about those data structures."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc-prim.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc-prim.nix new file mode 100644 index 0000000000..a657675b58 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc-prim.nix @@ -0,0 +1,47 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "2.2"; + identifier = { name = "ghc-prim"; version = "0.10.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "GHC primitives"; + description = "This package contains the primitive types and operations supplied by GHC.\nIt is an internal package, only for the use of GHC developers.\nGHC users should not use it! If you do use it then expect\nbreaking changes at any time without warning. You should prefer\nto import @GHC.Exts@ from the @base@ package instead."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.process or (pkgs.pkgsBuildBuild.process or (errorHandler.setupDepError "process"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + ]; + }; + components = { + "library" = { + depends = [ (hsPkgs."rts" or (errorHandler.buildDepError "rts")) ]; + libs = pkgs.lib.optionals (system.isWindows) [ + (pkgs."user32" or (errorHandler.sysDepError "user32")) + (pkgs."mingw32" or (errorHandler.sysDepError "mingw32")) + (pkgs."mingwex" or (errorHandler.sysDepError "mingwex")) + (pkgs."ucrt" or (errorHandler.sysDepError "ucrt")) + ] ++ pkgs.lib.optionals (system.isLinux) [ + (pkgs."c" or (errorHandler.sysDepError "c")) + (pkgs."m" or (errorHandler.sysDepError "m")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc.nix new file mode 100644 index 0000000000..cb75e00e5c --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghc.nix @@ -0,0 +1,69 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { + internal-interpreter = false; + dynamic-system-linker = true; + build-tool-depends = true; + }; + package = { + specVersion = "2.2"; + identifier = { name = "ghc"; version = "9.6.7.20250227"; }; + 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"; + 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.\n\nSee \nfor more information."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.process or (pkgs.pkgsBuildBuild.process or (errorHandler.setupDepError "process"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + ]; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."process" or (errorHandler.buildDepError "process")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) + (hsPkgs."hpc" or (errorHandler.buildDepError "hpc")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + (hsPkgs."exceptions" or (errorHandler.buildDepError "exceptions")) + (hsPkgs."stm" or (errorHandler.buildDepError "stm")) + (hsPkgs."ghc-boot" or (errorHandler.buildDepError "ghc-boot")) + (hsPkgs."ghc-heap" or (errorHandler.buildDepError "ghc-heap")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ] ++ (if system.isWindows + then [ (hsPkgs."Win32" or (errorHandler.buildDepError "Win32")) ] + else [ (hsPkgs."unix" or (errorHandler.buildDepError "unix")) ]); + build-tools = pkgs.lib.optionals (flags.build-tool-depends) [ + (hsPkgs.pkgsBuildBuild.alex.components.exes.alex or (pkgs.pkgsBuildBuild.alex or (errorHandler.buildToolDepError "alex:alex"))) + (hsPkgs.pkgsBuildBuild.happy.components.exes.happy or (pkgs.pkgsBuildBuild.happy or (errorHandler.buildToolDepError "happy:happy"))) + (hsPkgs.pkgsBuildBuild.genprimopcode.components.exes.genprimopcode or (pkgs.pkgsBuildBuild.genprimopcode or (errorHandler.buildToolDepError "genprimopcode:genprimopcode"))) + (hsPkgs.pkgsBuildBuild.deriveConstants.components.exes.deriveConstants or (pkgs.pkgsBuildBuild.deriveConstants or (errorHandler.buildToolDepError "deriveConstants:deriveConstants"))) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghci.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghci.nix new file mode 100644 index 0000000000..3cc6975487 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/ghci.nix @@ -0,0 +1,45 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { internal-interpreter = false; }; + package = { + specVersion = "1.10"; + identifier = { name = "ghci"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "The library supporting GHC's interactive interpreter"; + 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"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."ghc-boot" or (errorHandler.buildDepError "ghc-boot")) + (hsPkgs."ghc-heap" or (errorHandler.buildDepError "ghc-heap")) + (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm/hpc.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/hpc.nix new file mode 100644 index 0000000000..c9d84dfbb7 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/hpc.nix @@ -0,0 +1,38 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "hpc"; version = "0.6.2.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = "Andy Gill"; + homepage = ""; + url = ""; + synopsis = "Code Coverage Library for Haskell"; + description = "This package provides the code coverage library for Haskell.\n\nSee for more\ninformation."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm/integer-gmp.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/integer-gmp.nix new file mode 100644 index 0000000000..94f930e70e --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/integer-gmp.nix @@ -0,0 +1,35 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "2.0"; + identifier = { name = "integer-gmp"; version = "1.1"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "hvr@gnu.org"; + author = "Herbert Valerio Riedel"; + homepage = "https://www.haskell.org/ghc/"; + url = ""; + synopsis = "Integer library based on GMP"; + description = "This package used to provide an implementation of the standard 'Integer'\ntype based on the\n.\n\nIt is now deprecated in favor of the 'ghc-bignum' package.\n\nIts purpose is to provide backward compatibility for codes directly\ndepending on the `integer-gmp` package."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."ghc-bignum" or (errorHandler.buildDepError "ghc-bignum")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm/iserv.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/iserv.nix new file mode 100644 index 0000000000..9badbbf56b --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/iserv.nix @@ -0,0 +1,42 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "iserv"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "iserv allows GHC to delegate Template Haskell computations"; + description = "GHC can be provided with a path to the iserv binary with\n@-pgmi=/path/to/iserv-bin@, and will in combination with\n@-fexternal-interpreter@, compile Template Haskell though the\n@iserv-bin@ delegate. This is very similar to how ghcjs has been\ncompiling Template Haskell, by spawning a separate delegate (so\ncalled runner on the javascript vm) and evaluating the splices\nthere.\n\nTo use iserv with cross compilers, please see @libraries/libiserv@\nand @utils/iserv-proxy@."; + buildType = "Simple"; + }; + components = { + exes = { + "iserv" = { + depends = [ + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + (hsPkgs."libiserv" or (errorHandler.buildDepError "libiserv")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm/libiserv.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/libiserv.nix new file mode 100644 index 0000000000..ffe0a9ee99 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/libiserv.nix @@ -0,0 +1,38 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { network = false; }; + package = { + specVersion = "1.10"; + identifier = { name = "libiserv"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Provides shared functionality between iserv and iserv-proxy."; + description = "Provides shared functionality between iserv and iserv-proxy."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm/remote-iserv.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/remote-iserv.nix new file mode 100644 index 0000000000..3431eb0712 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/remote-iserv.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "remote-iserv"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "Moritz Angermann "; + author = "Moritz Angermann "; + homepage = ""; + url = ""; + synopsis = "iserv allows GHC to delegate Template Haskell computations"; + description = "This is a very simple remote runner for iserv, to be used together\nwith iserv-proxy. The foundamental idea is that this this wrapper\nstarts running libiserv on a given port to which iserv-proxy will\nthen connect."; + buildType = "Simple"; + }; + components = { + exes = { + "remote-iserv" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."libiserv" or (errorHandler.buildDepError "libiserv")) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm/template-haskell.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/template-haskell.nix new file mode 100644 index 0000000000..693b8f6a78 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm/template-haskell.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "template-haskell"; version = "2.20.0.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Support library for Template Haskell"; + description = "This package provides modules containing facilities for manipulating\nHaskell source code using Template Haskell.\n\nSee for more\ninformation."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-boot-th" or (errorHandler.buildDepError "ghc-boot-th")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."pretty" or (errorHandler.buildDepError "pretty")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/Cabal-syntax.nix b/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/Cabal-syntax.nix index dabbcbdee8..6d39b652d7 100644 --- a/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/Cabal-syntax.nix +++ b/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/Cabal-syntax.nix @@ -10,10 +10,10 @@ ({ flags = {}; package = { - specVersion = "1.22"; - identifier = { name = "Cabal-syntax"; version = "3.8.1.0"; }; + specVersion = "2.2"; + identifier = { name = "Cabal-syntax"; version = "3.10.3.0"; }; license = "BSD-3-Clause"; - copyright = "2003-2022, Cabal Development Team (see AUTHORS file)"; + copyright = "2003-2023, Cabal Development Team (see AUTHORS file)"; maintainer = "cabal-devel@haskell.org"; author = "Cabal Development Team "; homepage = "http://www.haskell.org/cabal/"; @@ -47,9 +47,9 @@ }; } // { src = pkgs.lib.mkDefault (pkgs.fetchurl { - url = "http://hackage.haskell.org/package/Cabal-syntax-3.8.1.0.tar.gz"; - sha256 = "07e8ddb19fe01781485f1522b6afc22aba680b0ab28ebe6bbfb84a2dd698ce0f"; + url = "http://hackage.haskell.org/package/Cabal-syntax-3.10.3.0.tar.gz"; + sha256 = "75d6a0aa9c00990a0d6e7720ac50c6954f6c942fa1be42c8add7f1c025f7e212"; }); }) // { - package-description-override = "cabal-version: 1.22\r\nname: Cabal-syntax\r\nversion: 3.8.1.0\r\nx-revision: 3\r\ncopyright: 2003-2022, Cabal Development Team (see AUTHORS file)\r\nlicense: BSD3\r\nlicense-file: LICENSE\r\nauthor: Cabal Development Team \r\nmaintainer: cabal-devel@haskell.org\r\nhomepage: http://www.haskell.org/cabal/\r\nbug-reports: https://github.com/haskell/cabal/issues\r\nsynopsis: A library for working with .cabal files\r\ndescription:\r\n This library provides tools for reading and manipulating the .cabal file\r\n format.\r\ncategory: Distribution\r\nbuild-type: Simple\r\n\r\nextra-source-files:\r\n README.md ChangeLog.md\r\n\r\nsource-repository head\r\n type: git\r\n location: https://github.com/haskell/cabal/\r\n subdir: Cabal-syntax\r\n\r\nlibrary\r\n default-language: Haskell2010\r\n hs-source-dirs: src\r\n\r\n build-depends:\r\n array >= 0.4.0.1 && < 0.6,\r\n base >= 4.9 && < 5,\r\n binary >= 0.7 && < 0.9,\r\n bytestring >= 0.10.0.0 && < 0.12,\r\n containers >= 0.5.0.0 && < 0.7,\r\n deepseq >= 1.3.0.1 && < 1.5,\r\n directory >= 1.2 && < 1.4,\r\n filepath >= 1.3.0.1 && < 1.5,\r\n mtl >= 2.1 && < 2.4,\r\n parsec >= 3.1.13.0 && < 3.2,\r\n pretty >= 1.1.1 && < 1.2,\r\n text (>= 1.2.3.0 && < 1.3) || (>= 2.0 && < 2.1),\r\n time >= 1.4.0.1 && < 1.13,\r\n -- transformers-0.4.0.0 doesn't have record syntax e.g. for Identity\r\n -- See also https://github.com/ekmett/transformers-compat/issues/35\r\n transformers (>= 0.3 && < 0.4) || (>=0.4.1.0 && <0.7)\r\n\r\n if os(windows)\r\n build-depends: Win32 >= 2.3.0.0 && < 2.14\r\n else\r\n build-depends: unix >= 2.6.0.0 && < 2.9\r\n\r\n ghc-options: -Wall -fno-ignore-asserts -fwarn-tabs -fwarn-incomplete-uni-patterns -fwarn-incomplete-record-updates\r\n ghc-options: -Wcompat -Wnoncanonical-monad-instances\r\n\r\n if impl(ghc < 8.8)\r\n ghc-options: -Wnoncanonical-monadfail-instances\r\n\r\n exposed-modules:\r\n Distribution.Backpack\r\n Distribution.CabalSpecVersion\r\n Distribution.Compat.Binary\r\n Distribution.Compat.CharParsing\r\n Distribution.Compat.DList\r\n Distribution.Compat.Exception\r\n Distribution.Compat.Graph\r\n Distribution.Compat.Lens\r\n Distribution.Compat.MonadFail\r\n Distribution.Compat.Newtype\r\n Distribution.Compat.NonEmptySet\r\n Distribution.Compat.Parsing\r\n Distribution.Compat.Prelude\r\n Distribution.Compat.Semigroup\r\n Distribution.Compat.Typeable\r\n Distribution.Compiler\r\n Distribution.FieldGrammar\r\n Distribution.FieldGrammar.Class\r\n Distribution.FieldGrammar.FieldDescrs\r\n Distribution.FieldGrammar.Newtypes\r\n Distribution.FieldGrammar.Parsec\r\n Distribution.FieldGrammar.Pretty\r\n Distribution.Fields\r\n Distribution.Fields.ConfVar\r\n Distribution.Fields.Field\r\n Distribution.Fields.Lexer\r\n Distribution.Fields.LexerMonad\r\n Distribution.Fields.ParseResult\r\n Distribution.Fields.Parser\r\n Distribution.Fields.Pretty\r\n Distribution.InstalledPackageInfo\r\n Distribution.License\r\n Distribution.ModuleName\r\n Distribution.Package\r\n Distribution.PackageDescription\r\n Distribution.PackageDescription.Configuration\r\n Distribution.PackageDescription.FieldGrammar\r\n Distribution.PackageDescription.Parsec\r\n Distribution.PackageDescription.PrettyPrint\r\n Distribution.PackageDescription.Quirks\r\n Distribution.PackageDescription.Utils\r\n Distribution.Parsec\r\n Distribution.Parsec.Error\r\n Distribution.Parsec.FieldLineStream\r\n Distribution.Parsec.Position\r\n Distribution.Parsec.Warning\r\n Distribution.Pretty\r\n Distribution.SPDX\r\n Distribution.SPDX.License\r\n Distribution.SPDX.LicenseExceptionId\r\n Distribution.SPDX.LicenseExpression\r\n Distribution.SPDX.LicenseId\r\n Distribution.SPDX.LicenseListVersion\r\n Distribution.SPDX.LicenseReference\r\n Distribution.System\r\n Distribution.Text\r\n Distribution.Types.AbiDependency\r\n Distribution.Types.AbiHash\r\n Distribution.Types.Benchmark\r\n Distribution.Types.Benchmark.Lens\r\n Distribution.Types.BenchmarkInterface\r\n Distribution.Types.BenchmarkType\r\n Distribution.Types.BuildInfo\r\n Distribution.Types.BuildInfo.Lens\r\n Distribution.Types.BuildType\r\n Distribution.Types.Component\r\n Distribution.Types.ComponentId\r\n Distribution.Types.ComponentName\r\n Distribution.Types.ComponentRequestedSpec\r\n Distribution.Types.CondTree\r\n Distribution.Types.Condition\r\n Distribution.Types.ConfVar\r\n Distribution.Types.Dependency\r\n Distribution.Types.DependencyMap\r\n Distribution.Types.ExeDependency\r\n Distribution.Types.Executable\r\n Distribution.Types.Executable.Lens\r\n Distribution.Types.ExecutableScope\r\n Distribution.Types.ExposedModule\r\n Distribution.Types.Flag\r\n Distribution.Types.ForeignLib\r\n Distribution.Types.ForeignLib.Lens\r\n Distribution.Types.ForeignLibOption\r\n Distribution.Types.ForeignLibType\r\n Distribution.Types.GenericPackageDescription\r\n Distribution.Types.GenericPackageDescription.Lens\r\n Distribution.Types.HookedBuildInfo\r\n Distribution.Types.IncludeRenaming\r\n Distribution.Types.InstalledPackageInfo\r\n Distribution.Types.InstalledPackageInfo.Lens\r\n Distribution.Types.InstalledPackageInfo.FieldGrammar\r\n Distribution.Types.LegacyExeDependency\r\n Distribution.Types.Lens\r\n Distribution.Types.Library\r\n Distribution.Types.Library.Lens\r\n Distribution.Types.LibraryName\r\n Distribution.Types.LibraryVisibility\r\n Distribution.Types.Mixin\r\n Distribution.Types.Module\r\n Distribution.Types.ModuleReexport\r\n Distribution.Types.ModuleRenaming\r\n Distribution.Types.MungedPackageId\r\n Distribution.Types.MungedPackageName\r\n Distribution.Types.PackageDescription\r\n Distribution.Types.PackageDescription.Lens\r\n Distribution.Types.PackageId\r\n Distribution.Types.PackageId.Lens\r\n Distribution.Types.PackageName\r\n Distribution.Types.PackageVersionConstraint\r\n Distribution.Types.PkgconfigDependency\r\n Distribution.Types.PkgconfigName\r\n Distribution.Types.PkgconfigVersion\r\n Distribution.Types.PkgconfigVersionRange\r\n Distribution.Types.SetupBuildInfo\r\n Distribution.Types.SetupBuildInfo.Lens\r\n Distribution.Types.SourceRepo\r\n Distribution.Types.SourceRepo.Lens\r\n Distribution.Types.TestSuite\r\n Distribution.Types.TestSuite.Lens\r\n Distribution.Types.TestSuiteInterface\r\n Distribution.Types.TestType\r\n Distribution.Types.UnitId\r\n Distribution.Types.UnqualComponentName\r\n Distribution.Types.Version\r\n Distribution.Types.VersionInterval\r\n Distribution.Types.VersionInterval.Legacy\r\n Distribution.Types.VersionRange\r\n Distribution.Types.VersionRange.Internal\r\n Distribution.Utils.Base62\r\n Distribution.Utils.Generic\r\n Distribution.Utils.MD5\r\n Distribution.Utils.Path\r\n Distribution.Utils.ShortText\r\n Distribution.Utils.String\r\n Distribution.Utils.Structured\r\n Distribution.Version\r\n Language.Haskell.Extension\r\n\r\n other-extensions:\r\n BangPatterns\r\n CPP\r\n DefaultSignatures\r\n DeriveDataTypeable\r\n DeriveFoldable\r\n DeriveFunctor\r\n DeriveGeneric\r\n DeriveTraversable\r\n ExistentialQuantification\r\n FlexibleContexts\r\n FlexibleInstances\r\n GeneralizedNewtypeDeriving\r\n ImplicitParams\r\n KindSignatures\r\n NondecreasingIndentation\r\n OverloadedStrings\r\n PatternSynonyms\r\n RankNTypes\r\n RecordWildCards\r\n ScopedTypeVariables\r\n StandaloneDeriving\r\n Trustworthy\r\n TypeFamilies\r\n TypeOperators\r\n TypeSynonymInstances\r\n UndecidableInstances\r\n"; + package-description-override = "cabal-version: 2.2\nname: Cabal-syntax\nversion: 3.10.3.0\ncopyright: 2003-2023, Cabal Development Team (see AUTHORS file)\nlicense: BSD-3-Clause\nlicense-file: LICENSE\nauthor: Cabal Development Team \nmaintainer: cabal-devel@haskell.org\nhomepage: http://www.haskell.org/cabal/\nbug-reports: https://github.com/haskell/cabal/issues\nsynopsis: A library for working with .cabal files\ndescription:\n This library provides tools for reading and manipulating the .cabal file\n format.\ncategory: Distribution\nbuild-type: Simple\n\nextra-doc-files:\n README.md ChangeLog.md\n\nsource-repository head\n type: git\n location: https://github.com/haskell/cabal/\n subdir: Cabal-syntax\n\nlibrary\n default-language: Haskell2010\n hs-source-dirs: src\n\n build-depends:\n array >= 0.4.0.1 && < 0.6,\n base >= 4.9 && < 5,\n binary >= 0.7 && < 0.9,\n bytestring >= 0.10.0.0 && < 0.13,\n containers >= 0.5.0.0 && < 0.8,\n deepseq >= 1.3.0.1 && < 1.6,\n directory >= 1.2 && < 1.4,\n filepath >= 1.3.0.1 && < 1.6,\n mtl >= 2.1 && < 2.4,\n parsec >= 3.1.13.0 && < 3.2,\n pretty >= 1.1.1 && < 1.2,\n text (>= 1.2.3.0 && < 1.3) || (>= 2.0 && < 2.2),\n time >= 1.4.0.1 && < 1.13,\n -- transformers-0.4.0.0 doesn't have record syntax e.g. for Identity\n -- See also https://github.com/ekmett/transformers-compat/issues/35\n transformers (>= 0.3 && < 0.4) || (>=0.4.1.0 && <0.7)\n\n if os(windows)\n build-depends: Win32 >= 2.3.0.0 && < 2.14\n else\n build-depends: unix >= 2.6.0.0 && < 2.9\n\n ghc-options: -Wall -fno-ignore-asserts -fwarn-tabs -fwarn-incomplete-uni-patterns -fwarn-incomplete-record-updates\n\n if impl(ghc >= 8.0)\n ghc-options: -Wcompat -Wnoncanonical-monad-instances\n\n if impl(ghc >= 8.0) && impl(ghc < 8.8)\n ghc-options: -Wnoncanonical-monadfail-instances\n\n exposed-modules:\n Distribution.Backpack\n Distribution.CabalSpecVersion\n Distribution.Compat.Binary\n Distribution.Compat.CharParsing\n Distribution.Compat.DList\n Distribution.Compat.Exception\n Distribution.Compat.Graph\n Distribution.Compat.Lens\n Distribution.Compat.MonadFail\n Distribution.Compat.Newtype\n Distribution.Compat.NonEmptySet\n Distribution.Compat.Parsing\n Distribution.Compat.Prelude\n Distribution.Compat.Semigroup\n Distribution.Compat.Typeable\n Distribution.Compiler\n Distribution.FieldGrammar\n Distribution.FieldGrammar.Class\n Distribution.FieldGrammar.FieldDescrs\n Distribution.FieldGrammar.Newtypes\n Distribution.FieldGrammar.Parsec\n Distribution.FieldGrammar.Pretty\n Distribution.Fields\n Distribution.Fields.ConfVar\n Distribution.Fields.Field\n Distribution.Fields.Lexer\n Distribution.Fields.LexerMonad\n Distribution.Fields.ParseResult\n Distribution.Fields.Parser\n Distribution.Fields.Pretty\n Distribution.InstalledPackageInfo\n Distribution.License\n Distribution.ModuleName\n Distribution.Package\n Distribution.PackageDescription\n Distribution.PackageDescription.Configuration\n Distribution.PackageDescription.FieldGrammar\n Distribution.PackageDescription.Parsec\n Distribution.PackageDescription.PrettyPrint\n Distribution.PackageDescription.Quirks\n Distribution.PackageDescription.Utils\n Distribution.Parsec\n Distribution.Parsec.Error\n Distribution.Parsec.FieldLineStream\n Distribution.Parsec.Position\n Distribution.Parsec.Warning\n Distribution.Pretty\n Distribution.SPDX\n Distribution.SPDX.License\n Distribution.SPDX.LicenseExceptionId\n Distribution.SPDX.LicenseExpression\n Distribution.SPDX.LicenseId\n Distribution.SPDX.LicenseListVersion\n Distribution.SPDX.LicenseReference\n Distribution.System\n Distribution.Text\n Distribution.Types.AbiDependency\n Distribution.Types.AbiHash\n Distribution.Types.Benchmark\n Distribution.Types.Benchmark.Lens\n Distribution.Types.BenchmarkInterface\n Distribution.Types.BenchmarkType\n Distribution.Types.BuildInfo\n Distribution.Types.BuildInfo.Lens\n Distribution.Types.BuildType\n Distribution.Types.Component\n Distribution.Types.ComponentId\n Distribution.Types.ComponentName\n Distribution.Types.ComponentRequestedSpec\n Distribution.Types.CondTree\n Distribution.Types.Condition\n Distribution.Types.ConfVar\n Distribution.Types.Dependency\n Distribution.Types.DependencyMap\n Distribution.Types.ExeDependency\n Distribution.Types.Executable\n Distribution.Types.Executable.Lens\n Distribution.Types.ExecutableScope\n Distribution.Types.ExposedModule\n Distribution.Types.Flag\n Distribution.Types.ForeignLib\n Distribution.Types.ForeignLib.Lens\n Distribution.Types.ForeignLibOption\n Distribution.Types.ForeignLibType\n Distribution.Types.GenericPackageDescription\n Distribution.Types.GenericPackageDescription.Lens\n Distribution.Types.HookedBuildInfo\n Distribution.Types.IncludeRenaming\n Distribution.Types.InstalledPackageInfo\n Distribution.Types.InstalledPackageInfo.Lens\n Distribution.Types.InstalledPackageInfo.FieldGrammar\n Distribution.Types.LegacyExeDependency\n Distribution.Types.Lens\n Distribution.Types.Library\n Distribution.Types.Library.Lens\n Distribution.Types.LibraryName\n Distribution.Types.LibraryVisibility\n Distribution.Types.Mixin\n Distribution.Types.Module\n Distribution.Types.ModuleReexport\n Distribution.Types.ModuleRenaming\n Distribution.Types.MungedPackageId\n Distribution.Types.MungedPackageName\n Distribution.Types.PackageDescription\n Distribution.Types.PackageDescription.Lens\n Distribution.Types.PackageId\n Distribution.Types.PackageId.Lens\n Distribution.Types.PackageName\n Distribution.Types.PackageVersionConstraint\n Distribution.Types.PkgconfigDependency\n Distribution.Types.PkgconfigName\n Distribution.Types.PkgconfigVersion\n Distribution.Types.PkgconfigVersionRange\n Distribution.Types.SetupBuildInfo\n Distribution.Types.SetupBuildInfo.Lens\n Distribution.Types.SourceRepo\n Distribution.Types.SourceRepo.Lens\n Distribution.Types.TestSuite\n Distribution.Types.TestSuite.Lens\n Distribution.Types.TestSuiteInterface\n Distribution.Types.TestType\n Distribution.Types.UnitId\n Distribution.Types.UnqualComponentName\n Distribution.Types.Version\n Distribution.Types.VersionInterval\n Distribution.Types.VersionInterval.Legacy\n Distribution.Types.VersionRange\n Distribution.Types.VersionRange.Internal\n Distribution.Utils.Base62\n Distribution.Utils.Generic\n Distribution.Utils.MD5\n Distribution.Utils.Path\n Distribution.Utils.ShortText\n Distribution.Utils.String\n Distribution.Utils.Structured\n Distribution.Version\n Language.Haskell.Extension\n\n other-extensions:\n BangPatterns\n CPP\n DefaultSignatures\n DeriveDataTypeable\n DeriveFoldable\n DeriveFunctor\n DeriveGeneric\n DeriveTraversable\n ExistentialQuantification\n FlexibleContexts\n FlexibleInstances\n GeneralizedNewtypeDeriving\n ImplicitParams\n KindSignatures\n NondecreasingIndentation\n OverloadedStrings\n PatternSynonyms\n RankNTypes\n RecordWildCards\n ScopedTypeVariables\n StandaloneDeriving\n Trustworthy\n TypeFamilies\n TypeOperators\n TypeSynonymInstances\n UndecidableInstances\n"; } \ No newline at end of file diff --git a/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/Cabal.nix b/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/Cabal.nix index be0b5019d9..ceef26dc73 100644 --- a/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/Cabal.nix +++ b/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/Cabal.nix @@ -10,10 +10,10 @@ ({ flags = {}; package = { - specVersion = "1.22"; - identifier = { name = "Cabal"; version = "3.8.1.0"; }; + specVersion = "2.2"; + identifier = { name = "Cabal"; version = "3.10.3.0"; }; license = "BSD-3-Clause"; - copyright = "2003-2022, Cabal Development Team (see AUTHORS file)"; + copyright = "2003-2023, Cabal Development Team (see AUTHORS file)"; maintainer = "cabal-devel@haskell.org"; author = "Cabal Development Team "; homepage = "http://www.haskell.org/cabal/"; @@ -24,7 +24,7 @@ }; components = { "library" = { - depends = ([ + depends = [ (hsPkgs."Cabal-syntax" or (errorHandler.buildDepError "Cabal-syntax")) (hsPkgs."array" or (errorHandler.buildDepError "array")) (hsPkgs."base" or (errorHandler.buildDepError "base")) @@ -40,7 +40,7 @@ (hsPkgs."mtl" or (errorHandler.buildDepError "mtl")) (hsPkgs."text" or (errorHandler.buildDepError "text")) (hsPkgs."parsec" or (errorHandler.buildDepError "parsec")) - ] ++ pkgs.lib.optional (compiler.isGhc && compiler.version.ge "8.2") (hsPkgs."process" or (errorHandler.buildDepError "process"))) ++ (if system.isWindows + ] ++ (if system.isWindows then [ (hsPkgs."Win32" or (errorHandler.buildDepError "Win32")) ] else [ (hsPkgs."unix" or (errorHandler.buildDepError "unix")) ]); buildable = true; @@ -48,9 +48,9 @@ }; } // { src = pkgs.lib.mkDefault (pkgs.fetchurl { - url = "http://hackage.haskell.org/package/Cabal-3.8.1.0.tar.gz"; - sha256 = "7464cbe6c2f3d7e5d0232023a1a7330621f8b24853cb259fc89a2af85b736608"; + url = "http://hackage.haskell.org/package/Cabal-3.10.3.0.tar.gz"; + sha256 = "cb7f7c66626d7555f799e786513ddd65a874fd23f1cf312990c7a48abfc0b2c6"; }); }) // { - package-description-override = "cabal-version: 1.22\r\nname: Cabal\r\nversion: 3.8.1.0\r\nx-revision: 2\r\ncopyright: 2003-2022, Cabal Development Team (see AUTHORS file)\r\nlicense: BSD3\r\nlicense-file: LICENSE\r\nauthor: Cabal Development Team \r\nmaintainer: cabal-devel@haskell.org\r\nhomepage: http://www.haskell.org/cabal/\r\nbug-reports: https://github.com/haskell/cabal/issues\r\nsynopsis: A framework for packaging Haskell software\r\ndescription:\r\n The Haskell Common Architecture for Building Applications and\r\n Libraries: a framework defining a common interface for authors to more\r\n easily build their Haskell applications in a portable way.\r\n .\r\n The Haskell Cabal is part of a larger infrastructure for distributing,\r\n organizing, and cataloging Haskell libraries and tools.\r\ncategory: Distribution\r\nbuild-type: Simple\r\n-- If we use a new Cabal feature, this needs to be changed to Custom so\r\n-- we can bootstrap.\r\n\r\nextra-source-files:\r\n README.md ChangeLog.md\r\n\r\nsource-repository head\r\n type: git\r\n location: https://github.com/haskell/cabal/\r\n subdir: Cabal\r\n\r\nlibrary\r\n default-language: Haskell2010\r\n hs-source-dirs: src\r\n\r\n build-depends:\r\n Cabal-syntax >= 3.8 && < 3.9,\r\n array >= 0.4.0.1 && < 0.6,\r\n base >= 4.6 && < 5,\r\n bytestring >= 0.10.0.0 && < 0.12,\r\n containers >= 0.5.0.0 && < 0.7,\r\n deepseq >= 1.3.0.1 && < 1.5,\r\n directory >= 1.2 && < 1.4,\r\n filepath >= 1.3.0.1 && < 1.5,\r\n pretty >= 1.1.1 && < 1.2,\r\n process >= 1.2.1.0 && < 1.7,\r\n time >= 1.4.0.1 && < 1.13\r\n\r\n -- PR #8802: moved conditional process lower bound to cabal-install package\r\n if impl(ghc >=8.2)\r\n build-depends: process >= 1.2.1.0\r\n\r\n if os(windows)\r\n build-depends: Win32 >= 2.3.0.0 && < 2.14\r\n else\r\n build-depends: unix >= 2.6.0.0 && < 2.9\r\n\r\n ghc-options: -Wall -fno-ignore-asserts -fwarn-tabs -fwarn-incomplete-uni-patterns -fwarn-incomplete-record-updates\r\n ghc-options: -Wcompat -Wnoncanonical-monad-instances\r\n\r\n if impl(ghc <8.8)\r\n ghc-options: -Wnoncanonical-monadfail-instances\r\n\r\n exposed-modules:\r\n Distribution.Backpack.Configure\r\n Distribution.Backpack.ComponentsGraph\r\n Distribution.Backpack.ConfiguredComponent\r\n Distribution.Backpack.DescribeUnitId\r\n Distribution.Backpack.FullUnitId\r\n Distribution.Backpack.LinkedComponent\r\n Distribution.Backpack.ModSubst\r\n Distribution.Backpack.ModuleShape\r\n Distribution.Backpack.PreModuleShape\r\n Distribution.Utils.IOData\r\n Distribution.Utils.LogProgress\r\n Distribution.Utils.MapAccum\r\n Distribution.Compat.CreatePipe\r\n Distribution.Compat.Directory\r\n Distribution.Compat.Environment\r\n Distribution.Compat.FilePath\r\n Distribution.Compat.Internal.TempFile\r\n Distribution.Compat.ResponseFile\r\n Distribution.Compat.Prelude.Internal\r\n Distribution.Compat.Process\r\n Distribution.Compat.Stack\r\n Distribution.Compat.Time\r\n Distribution.Make\r\n Distribution.PackageDescription.Check\r\n Distribution.ReadE\r\n Distribution.Simple\r\n Distribution.Simple.Bench\r\n Distribution.Simple.Build\r\n Distribution.Simple.Build.Macros\r\n Distribution.Simple.Build.PathsModule\r\n Distribution.Simple.BuildPaths\r\n Distribution.Simple.BuildTarget\r\n Distribution.Simple.BuildToolDepends\r\n Distribution.Simple.CCompiler\r\n Distribution.Simple.Command\r\n Distribution.Simple.Compiler\r\n Distribution.Simple.Configure\r\n Distribution.Simple.Flag\r\n Distribution.Simple.GHC\r\n Distribution.Simple.GHCJS\r\n Distribution.Simple.Haddock\r\n Distribution.Simple.Glob\r\n Distribution.Simple.HaskellSuite\r\n Distribution.Simple.Hpc\r\n Distribution.Simple.Install\r\n Distribution.Simple.InstallDirs\r\n Distribution.Simple.InstallDirs.Internal\r\n Distribution.Simple.LocalBuildInfo\r\n Distribution.Simple.PackageDescription\r\n Distribution.Simple.PackageIndex\r\n Distribution.Simple.PreProcess\r\n Distribution.Simple.PreProcess.Unlit\r\n Distribution.Simple.Program\r\n Distribution.Simple.Program.Ar\r\n Distribution.Simple.Program.Builtin\r\n Distribution.Simple.Program.Db\r\n Distribution.Simple.Program.Find\r\n Distribution.Simple.Program.GHC\r\n Distribution.Simple.Program.HcPkg\r\n Distribution.Simple.Program.Hpc\r\n Distribution.Simple.Program.Internal\r\n Distribution.Simple.Program.Ld\r\n Distribution.Simple.Program.ResponseFile\r\n Distribution.Simple.Program.Run\r\n Distribution.Simple.Program.Script\r\n Distribution.Simple.Program.Strip\r\n Distribution.Simple.Program.Types\r\n Distribution.Simple.Register\r\n Distribution.Simple.Setup\r\n Distribution.Simple.ShowBuildInfo\r\n Distribution.Simple.SrcDist\r\n Distribution.Simple.Test\r\n Distribution.Simple.Test.ExeV10\r\n Distribution.Simple.Test.LibV09\r\n Distribution.Simple.Test.Log\r\n Distribution.Simple.UHC\r\n Distribution.Simple.UserHooks\r\n Distribution.Simple.Utils\r\n Distribution.TestSuite\r\n Distribution.Types.AnnotatedId\r\n Distribution.Types.ComponentInclude\r\n Distribution.Types.DumpBuildInfo\r\n Distribution.Types.PackageName.Magic\r\n Distribution.Types.ComponentLocalBuildInfo\r\n Distribution.Types.LocalBuildInfo\r\n Distribution.Types.TargetInfo\r\n Distribution.Types.GivenComponent\r\n Distribution.Utils.Json\r\n Distribution.Utils.NubList\r\n Distribution.Utils.Progress\r\n Distribution.Verbosity\r\n Distribution.Verbosity.Internal\r\n\r\n -- We reexport all of Cabal-syntax to aid in compatibility for downstream\r\n -- users. In the future we may opt to deprecate some or all of these exports.\r\n -- See haskell/Cabal#7974.\r\n reexported-modules:\r\n Distribution.Backpack,\r\n Distribution.CabalSpecVersion,\r\n Distribution.Compat.Binary,\r\n Distribution.Compat.CharParsing,\r\n Distribution.Compat.DList,\r\n Distribution.Compat.Exception,\r\n Distribution.Compat.Graph,\r\n Distribution.Compat.Lens,\r\n Distribution.Compat.MonadFail,\r\n Distribution.Compat.Newtype,\r\n Distribution.Compat.NonEmptySet,\r\n Distribution.Compat.Parsing,\r\n Distribution.Compat.Prelude,\r\n Distribution.Compat.Semigroup,\r\n Distribution.Compat.Typeable,\r\n Distribution.Compiler,\r\n Distribution.FieldGrammar,\r\n Distribution.FieldGrammar.Class,\r\n Distribution.FieldGrammar.FieldDescrs,\r\n Distribution.FieldGrammar.Newtypes,\r\n Distribution.FieldGrammar.Parsec,\r\n Distribution.FieldGrammar.Pretty,\r\n Distribution.Fields,\r\n Distribution.Fields.ConfVar,\r\n Distribution.Fields.Field,\r\n Distribution.Fields.Lexer,\r\n Distribution.Fields.LexerMonad,\r\n Distribution.Fields.ParseResult,\r\n Distribution.Fields.Parser,\r\n Distribution.Fields.Pretty,\r\n Distribution.InstalledPackageInfo,\r\n Distribution.License,\r\n Distribution.ModuleName,\r\n Distribution.Package,\r\n Distribution.PackageDescription,\r\n Distribution.PackageDescription.Configuration,\r\n Distribution.PackageDescription.FieldGrammar,\r\n Distribution.PackageDescription.Parsec,\r\n Distribution.PackageDescription.PrettyPrint,\r\n Distribution.PackageDescription.Quirks,\r\n Distribution.PackageDescription.Utils,\r\n Distribution.Parsec,\r\n Distribution.Parsec.Error,\r\n Distribution.Parsec.FieldLineStream,\r\n Distribution.Parsec.Position,\r\n Distribution.Parsec.Warning,\r\n Distribution.Pretty,\r\n Distribution.SPDX,\r\n Distribution.SPDX.License,\r\n Distribution.SPDX.LicenseExceptionId,\r\n Distribution.SPDX.LicenseExpression,\r\n Distribution.SPDX.LicenseId,\r\n Distribution.SPDX.LicenseListVersion,\r\n Distribution.SPDX.LicenseReference,\r\n Distribution.System,\r\n Distribution.Text,\r\n Distribution.Types.AbiDependency,\r\n Distribution.Types.AbiHash,\r\n Distribution.Types.Benchmark,\r\n Distribution.Types.Benchmark.Lens,\r\n Distribution.Types.BenchmarkInterface,\r\n Distribution.Types.BenchmarkType,\r\n Distribution.Types.BuildInfo,\r\n Distribution.Types.BuildInfo.Lens,\r\n Distribution.Types.BuildType,\r\n Distribution.Types.Component,\r\n Distribution.Types.ComponentId,\r\n Distribution.Types.ComponentName,\r\n Distribution.Types.ComponentRequestedSpec,\r\n Distribution.Types.CondTree,\r\n Distribution.Types.Condition,\r\n Distribution.Types.ConfVar,\r\n Distribution.Types.Dependency,\r\n Distribution.Types.DependencyMap,\r\n Distribution.Types.ExeDependency,\r\n Distribution.Types.Executable,\r\n Distribution.Types.Executable.Lens,\r\n Distribution.Types.ExecutableScope,\r\n Distribution.Types.ExposedModule,\r\n Distribution.Types.Flag,\r\n Distribution.Types.ForeignLib,\r\n Distribution.Types.ForeignLib.Lens,\r\n Distribution.Types.ForeignLibOption,\r\n Distribution.Types.ForeignLibType,\r\n Distribution.Types.GenericPackageDescription,\r\n Distribution.Types.GenericPackageDescription.Lens,\r\n Distribution.Types.HookedBuildInfo,\r\n Distribution.Types.IncludeRenaming,\r\n Distribution.Types.InstalledPackageInfo,\r\n Distribution.Types.InstalledPackageInfo.Lens,\r\n Distribution.Types.InstalledPackageInfo.FieldGrammar,\r\n Distribution.Types.LegacyExeDependency,\r\n Distribution.Types.Lens,\r\n Distribution.Types.Library,\r\n Distribution.Types.Library.Lens,\r\n Distribution.Types.LibraryName,\r\n Distribution.Types.LibraryVisibility,\r\n Distribution.Types.Mixin,\r\n Distribution.Types.Module,\r\n Distribution.Types.ModuleReexport,\r\n Distribution.Types.ModuleRenaming,\r\n Distribution.Types.MungedPackageId,\r\n Distribution.Types.MungedPackageName,\r\n Distribution.Types.PackageDescription,\r\n Distribution.Types.PackageDescription.Lens,\r\n Distribution.Types.PackageId,\r\n Distribution.Types.PackageId.Lens,\r\n Distribution.Types.PackageName,\r\n Distribution.Types.PackageVersionConstraint,\r\n Distribution.Types.PkgconfigDependency,\r\n Distribution.Types.PkgconfigName,\r\n Distribution.Types.PkgconfigVersion,\r\n Distribution.Types.PkgconfigVersionRange,\r\n Distribution.Types.SetupBuildInfo,\r\n Distribution.Types.SetupBuildInfo.Lens,\r\n Distribution.Types.SourceRepo,\r\n Distribution.Types.SourceRepo.Lens,\r\n Distribution.Types.TestSuite,\r\n Distribution.Types.TestSuite.Lens,\r\n Distribution.Types.TestSuiteInterface,\r\n Distribution.Types.TestType,\r\n Distribution.Types.UnitId,\r\n Distribution.Types.UnqualComponentName,\r\n Distribution.Types.Version,\r\n Distribution.Types.VersionInterval,\r\n Distribution.Types.VersionInterval.Legacy,\r\n Distribution.Types.VersionRange,\r\n Distribution.Types.VersionRange.Internal,\r\n Distribution.Utils.Base62,\r\n Distribution.Utils.Generic,\r\n Distribution.Utils.MD5,\r\n Distribution.Utils.Path,\r\n Distribution.Utils.ShortText,\r\n Distribution.Utils.String,\r\n Distribution.Utils.Structured,\r\n Distribution.Version,\r\n Language.Haskell.Extension\r\n\r\n -- Parsec parser-related modules\r\n build-depends:\r\n -- transformers-0.4.0.0 doesn't have record syntax e.g. for Identity\r\n -- See also https://github.com/ekmett/transformers-compat/issues/35\r\n transformers (>= 0.3 && < 0.4) || (>=0.4.1.0 && <0.7),\r\n mtl >= 2.1 && < 2.4,\r\n text (>= 1.2.3.0 && < 1.3) || (>= 2.0 && < 2.1),\r\n parsec >= 3.1.13.0 && < 3.2\r\n\r\n other-modules:\r\n Distribution.Backpack.PreExistingComponent\r\n Distribution.Backpack.ReadyComponent\r\n Distribution.Backpack.MixLink\r\n Distribution.Backpack.ModuleScope\r\n Distribution.Backpack.UnifyM\r\n Distribution.Backpack.Id\r\n Distribution.Utils.UnionFind\r\n Distribution.Compat.Async\r\n Distribution.Compat.CopyFile\r\n Distribution.Compat.GetShortPathName\r\n Distribution.Compat.SnocList\r\n Distribution.GetOpt\r\n Distribution.Lex\r\n Distribution.Simple.Build.Macros.Z\r\n Distribution.Simple.Build.PathsModule.Z\r\n Distribution.Simple.GHC.EnvironmentParser\r\n Distribution.Simple.GHC.Internal\r\n Distribution.Simple.GHC.ImplInfo\r\n Distribution.ZinzaPrelude\r\n Paths_Cabal\r\n\r\n other-extensions:\r\n BangPatterns\r\n CPP\r\n DefaultSignatures\r\n DeriveDataTypeable\r\n DeriveFoldable\r\n DeriveFunctor\r\n DeriveGeneric\r\n DeriveTraversable\r\n ExistentialQuantification\r\n FlexibleContexts\r\n FlexibleInstances\r\n GeneralizedNewtypeDeriving\r\n ImplicitParams\r\n KindSignatures\r\n LambdaCase\r\n NondecreasingIndentation\r\n OverloadedStrings\r\n PatternSynonyms\r\n RankNTypes\r\n RecordWildCards\r\n ScopedTypeVariables\r\n StandaloneDeriving\r\n Trustworthy\r\n TypeFamilies\r\n TypeOperators\r\n TypeSynonymInstances\r\n UndecidableInstances\r\n"; + package-description-override = "cabal-version: 2.2\nname: Cabal\nversion: 3.10.3.0\ncopyright: 2003-2023, Cabal Development Team (see AUTHORS file)\nlicense: BSD-3-Clause\nlicense-file: LICENSE\nauthor: Cabal Development Team \nmaintainer: cabal-devel@haskell.org\nhomepage: http://www.haskell.org/cabal/\nbug-reports: https://github.com/haskell/cabal/issues\nsynopsis: A framework for packaging Haskell software\ndescription:\n The Haskell Common Architecture for Building Applications and\n Libraries: a framework defining a common interface for authors to more\n easily build their Haskell applications in a portable way.\n .\n The Haskell Cabal is part of a larger infrastructure for distributing,\n organizing, and cataloging Haskell libraries and tools.\ncategory: Distribution\nbuild-type: Simple\n-- If we use a new Cabal feature, this needs to be changed to Custom so\n-- we can bootstrap.\n\nextra-doc-files:\n README.md ChangeLog.md\n\nsource-repository head\n type: git\n location: https://github.com/haskell/cabal/\n subdir: Cabal\n\nlibrary\n default-language: Haskell2010\n hs-source-dirs: src\n\n build-depends:\n Cabal-syntax ^>= 3.10,\n array >= 0.4.0.1 && < 0.6,\n base >= 4.9 && < 5,\n bytestring >= 0.10.0.0 && < 0.13,\n containers >= 0.5.0.0 && < 0.8,\n deepseq >= 1.3.0.1 && < 1.6,\n directory >= 1.2 && < 1.4,\n filepath >= 1.3.0.1 && < 1.6,\n pretty >= 1.1.1 && < 1.2,\n process >= 1.2.1.0 && < 1.7,\n time >= 1.4.0.1 && < 1.13\n\n if os(windows)\n build-depends: Win32 >= 2.3.0.0 && < 2.15\n else\n build-depends: unix >= 2.6.0.0 && < 2.9\n\n ghc-options: -Wall -fno-ignore-asserts -fwarn-tabs -fwarn-incomplete-uni-patterns -fwarn-incomplete-record-updates\n\n if impl(ghc >= 8.0)\n ghc-options: -Wcompat -Wnoncanonical-monad-instances\n\n if impl(ghc >= 8.0) && impl(ghc < 8.8)\n ghc-options: -Wnoncanonical-monadfail-instances\n\n exposed-modules:\n Distribution.Backpack.Configure\n Distribution.Backpack.ComponentsGraph\n Distribution.Backpack.ConfiguredComponent\n Distribution.Backpack.DescribeUnitId\n Distribution.Backpack.FullUnitId\n Distribution.Backpack.LinkedComponent\n Distribution.Backpack.ModSubst\n Distribution.Backpack.ModuleShape\n Distribution.Backpack.PreModuleShape\n Distribution.Utils.IOData\n Distribution.Utils.LogProgress\n Distribution.Utils.MapAccum\n Distribution.Compat.CreatePipe\n Distribution.Compat.Directory\n Distribution.Compat.Environment\n Distribution.Compat.FilePath\n Distribution.Compat.Internal.TempFile\n Distribution.Compat.ResponseFile\n Distribution.Compat.Prelude.Internal\n Distribution.Compat.Process\n Distribution.Compat.Stack\n Distribution.Compat.Time\n Distribution.Make\n Distribution.PackageDescription.Check\n Distribution.ReadE\n Distribution.Simple\n Distribution.Simple.Bench\n Distribution.Simple.Build\n Distribution.Simple.Build.Macros\n Distribution.Simple.Build.PackageInfoModule\n Distribution.Simple.Build.PathsModule\n Distribution.Simple.BuildPaths\n Distribution.Simple.BuildTarget\n Distribution.Simple.BuildToolDepends\n Distribution.Simple.CCompiler\n Distribution.Simple.Command\n Distribution.Simple.Compiler\n Distribution.Simple.Configure\n Distribution.Simple.Flag\n Distribution.Simple.GHC\n Distribution.Simple.GHCJS\n Distribution.Simple.Haddock\n Distribution.Simple.Glob\n Distribution.Simple.HaskellSuite\n Distribution.Simple.Hpc\n Distribution.Simple.Install\n Distribution.Simple.InstallDirs\n Distribution.Simple.InstallDirs.Internal\n Distribution.Simple.LocalBuildInfo\n Distribution.Simple.PackageDescription\n Distribution.Simple.PackageIndex\n Distribution.Simple.PreProcess\n Distribution.Simple.PreProcess.Unlit\n Distribution.Simple.Program\n Distribution.Simple.Program.Ar\n Distribution.Simple.Program.Builtin\n Distribution.Simple.Program.Db\n Distribution.Simple.Program.Find\n Distribution.Simple.Program.GHC\n Distribution.Simple.Program.HcPkg\n Distribution.Simple.Program.Hpc\n Distribution.Simple.Program.Internal\n Distribution.Simple.Program.Ld\n Distribution.Simple.Program.ResponseFile\n Distribution.Simple.Program.Run\n Distribution.Simple.Program.Script\n Distribution.Simple.Program.Strip\n Distribution.Simple.Program.Types\n Distribution.Simple.Register\n Distribution.Simple.Setup\n Distribution.Simple.ShowBuildInfo\n Distribution.Simple.SrcDist\n Distribution.Simple.Test\n Distribution.Simple.Test.ExeV10\n Distribution.Simple.Test.LibV09\n Distribution.Simple.Test.Log\n Distribution.Simple.UHC\n Distribution.Simple.UserHooks\n Distribution.Simple.Utils\n Distribution.TestSuite\n Distribution.Types.AnnotatedId\n Distribution.Types.ComponentInclude\n Distribution.Types.DumpBuildInfo\n Distribution.Types.PackageName.Magic\n Distribution.Types.ComponentLocalBuildInfo\n Distribution.Types.LocalBuildInfo\n Distribution.Types.TargetInfo\n Distribution.Types.GivenComponent\n Distribution.Utils.Json\n Distribution.Utils.NubList\n Distribution.Utils.Progress\n Distribution.Verbosity\n Distribution.Verbosity.Internal\n\n -- We reexport all of Cabal-syntax to aid in compatibility for downstream\n -- users. In the future we may opt to deprecate some or all of these exports.\n -- See haskell/Cabal#7974.\n reexported-modules:\n Distribution.Backpack,\n Distribution.CabalSpecVersion,\n Distribution.Compat.Binary,\n Distribution.Compat.CharParsing,\n Distribution.Compat.DList,\n Distribution.Compat.Exception,\n Distribution.Compat.Graph,\n Distribution.Compat.Lens,\n Distribution.Compat.MonadFail,\n Distribution.Compat.Newtype,\n Distribution.Compat.NonEmptySet,\n Distribution.Compat.Parsing,\n Distribution.Compat.Prelude,\n Distribution.Compat.Semigroup,\n Distribution.Compat.Typeable,\n Distribution.Compiler,\n Distribution.FieldGrammar,\n Distribution.FieldGrammar.Class,\n Distribution.FieldGrammar.FieldDescrs,\n Distribution.FieldGrammar.Newtypes,\n Distribution.FieldGrammar.Parsec,\n Distribution.FieldGrammar.Pretty,\n Distribution.Fields,\n Distribution.Fields.ConfVar,\n Distribution.Fields.Field,\n Distribution.Fields.Lexer,\n Distribution.Fields.LexerMonad,\n Distribution.Fields.ParseResult,\n Distribution.Fields.Parser,\n Distribution.Fields.Pretty,\n Distribution.InstalledPackageInfo,\n Distribution.License,\n Distribution.ModuleName,\n Distribution.Package,\n Distribution.PackageDescription,\n Distribution.PackageDescription.Configuration,\n Distribution.PackageDescription.FieldGrammar,\n Distribution.PackageDescription.Parsec,\n Distribution.PackageDescription.PrettyPrint,\n Distribution.PackageDescription.Quirks,\n Distribution.PackageDescription.Utils,\n Distribution.Parsec,\n Distribution.Parsec.Error,\n Distribution.Parsec.FieldLineStream,\n Distribution.Parsec.Position,\n Distribution.Parsec.Warning,\n Distribution.Pretty,\n Distribution.SPDX,\n Distribution.SPDX.License,\n Distribution.SPDX.LicenseExceptionId,\n Distribution.SPDX.LicenseExpression,\n Distribution.SPDX.LicenseId,\n Distribution.SPDX.LicenseListVersion,\n Distribution.SPDX.LicenseReference,\n Distribution.System,\n Distribution.Text,\n Distribution.Types.AbiDependency,\n Distribution.Types.AbiHash,\n Distribution.Types.Benchmark,\n Distribution.Types.Benchmark.Lens,\n Distribution.Types.BenchmarkInterface,\n Distribution.Types.BenchmarkType,\n Distribution.Types.BuildInfo,\n Distribution.Types.BuildInfo.Lens,\n Distribution.Types.BuildType,\n Distribution.Types.Component,\n Distribution.Types.ComponentId,\n Distribution.Types.ComponentName,\n Distribution.Types.ComponentRequestedSpec,\n Distribution.Types.CondTree,\n Distribution.Types.Condition,\n Distribution.Types.ConfVar,\n Distribution.Types.Dependency,\n Distribution.Types.DependencyMap,\n Distribution.Types.ExeDependency,\n Distribution.Types.Executable,\n Distribution.Types.Executable.Lens,\n Distribution.Types.ExecutableScope,\n Distribution.Types.ExposedModule,\n Distribution.Types.Flag,\n Distribution.Types.ForeignLib,\n Distribution.Types.ForeignLib.Lens,\n Distribution.Types.ForeignLibOption,\n Distribution.Types.ForeignLibType,\n Distribution.Types.GenericPackageDescription,\n Distribution.Types.GenericPackageDescription.Lens,\n Distribution.Types.HookedBuildInfo,\n Distribution.Types.IncludeRenaming,\n Distribution.Types.InstalledPackageInfo,\n Distribution.Types.InstalledPackageInfo.Lens,\n Distribution.Types.InstalledPackageInfo.FieldGrammar,\n Distribution.Types.LegacyExeDependency,\n Distribution.Types.Lens,\n Distribution.Types.Library,\n Distribution.Types.Library.Lens,\n Distribution.Types.LibraryName,\n Distribution.Types.LibraryVisibility,\n Distribution.Types.Mixin,\n Distribution.Types.Module,\n Distribution.Types.ModuleReexport,\n Distribution.Types.ModuleRenaming,\n Distribution.Types.MungedPackageId,\n Distribution.Types.MungedPackageName,\n Distribution.Types.PackageDescription,\n Distribution.Types.PackageDescription.Lens,\n Distribution.Types.PackageId,\n Distribution.Types.PackageId.Lens,\n Distribution.Types.PackageName,\n Distribution.Types.PackageVersionConstraint,\n Distribution.Types.PkgconfigDependency,\n Distribution.Types.PkgconfigName,\n Distribution.Types.PkgconfigVersion,\n Distribution.Types.PkgconfigVersionRange,\n Distribution.Types.SetupBuildInfo,\n Distribution.Types.SetupBuildInfo.Lens,\n Distribution.Types.SourceRepo,\n Distribution.Types.SourceRepo.Lens,\n Distribution.Types.TestSuite,\n Distribution.Types.TestSuite.Lens,\n Distribution.Types.TestSuiteInterface,\n Distribution.Types.TestType,\n Distribution.Types.UnitId,\n Distribution.Types.UnqualComponentName,\n Distribution.Types.Version,\n Distribution.Types.VersionInterval,\n Distribution.Types.VersionInterval.Legacy,\n Distribution.Types.VersionRange,\n Distribution.Types.VersionRange.Internal,\n Distribution.Utils.Base62,\n Distribution.Utils.Generic,\n Distribution.Utils.MD5,\n Distribution.Utils.Path,\n Distribution.Utils.ShortText,\n Distribution.Utils.String,\n Distribution.Utils.Structured,\n Distribution.Version,\n Language.Haskell.Extension\n\n -- Parsec parser-related modules\n build-depends:\n -- transformers-0.4.0.0 doesn't have record syntax e.g. for Identity\n -- See also https://github.com/ekmett/transformers-compat/issues/35\n transformers (>= 0.3 && < 0.4) || (>=0.4.1.0 && <0.7),\n mtl >= 2.1 && < 2.4,\n text (>= 1.2.3.0 && < 1.3) || (>= 2.0 && < 2.2),\n parsec >= 3.1.13.0 && < 3.2\n\n other-modules:\n Distribution.Backpack.PreExistingComponent\n Distribution.Backpack.ReadyComponent\n Distribution.Backpack.MixLink\n Distribution.Backpack.ModuleScope\n Distribution.Backpack.UnifyM\n Distribution.Backpack.Id\n Distribution.Utils.UnionFind\n Distribution.Compat.Async\n Distribution.Compat.CopyFile\n Distribution.Compat.GetShortPathName\n Distribution.Compat.SnocList\n Distribution.GetOpt\n Distribution.Lex\n Distribution.Simple.Build.Macros.Z\n Distribution.Simple.Build.PackageInfoModule.Z\n Distribution.Simple.Build.PathsModule.Z\n Distribution.Simple.GHC.EnvironmentParser\n Distribution.Simple.GHC.Internal\n Distribution.Simple.GHC.ImplInfo\n Distribution.Simple.ConfigureScript\n Distribution.ZinzaPrelude\n Paths_Cabal\n\n autogen-modules:\n Paths_Cabal\n\n other-extensions:\n BangPatterns\n CPP\n DefaultSignatures\n DeriveDataTypeable\n DeriveFoldable\n DeriveFunctor\n DeriveGeneric\n DeriveTraversable\n ExistentialQuantification\n FlexibleContexts\n FlexibleInstances\n GeneralizedNewtypeDeriving\n ImplicitParams\n KindSignatures\n LambdaCase\n NondecreasingIndentation\n OverloadedStrings\n PatternSynonyms\n RankNTypes\n RecordWildCards\n ScopedTypeVariables\n StandaloneDeriving\n Trustworthy\n TypeFamilies\n TypeOperators\n TypeSynonymInstances\n UndecidableInstances\n"; } \ No newline at end of file diff --git a/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/directory.nix b/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/directory.nix new file mode 100644 index 0000000000..dc12137aeb --- /dev/null +++ b/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/directory.nix @@ -0,0 +1,66 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + ({ + flags = { os-string = false; }; + package = { + specVersion = "2.2"; + identifier = { name = "directory"; version = "1.3.9.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Platform-agnostic library for filesystem operations"; + description = "This library provides a basic set of operations for manipulating files and\ndirectories in a portable way."; + buildType = "Configure"; + }; + components = { + "library" = { + depends = ([ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."file-io" or (errorHandler.buildDepError "file-io")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + ] ++ (if system.isWindows + then [ (hsPkgs."Win32" or (errorHandler.buildDepError "Win32")) ] + else [ + (hsPkgs."unix" or (errorHandler.buildDepError "unix")) + ])) ++ (if flags.os-string + then [ + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."os-string" or (errorHandler.buildDepError "os-string")) + ] + else [ + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + ]); + buildable = true; + }; + tests = { + "test" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + ] ++ (if system.isWindows + then [ (hsPkgs."Win32" or (errorHandler.buildDepError "Win32")) ] + else [ (hsPkgs."unix" or (errorHandler.buildDepError "unix")) ]); + buildable = true; + }; + }; + }; + } // { + src = pkgs.lib.mkDefault (pkgs.fetchurl { + url = "http://hackage.haskell.org/package/directory-1.3.9.0.tar.gz"; + sha256 = "20a24846117fc5f8751d974b7de07210a161989410467e9adca525381b8e64cc"; + }); + }) // { + package-description-override = "cabal-version: 2.2\nname: directory\nversion: 1.3.9.0\nlicense: BSD-3-Clause\nlicense-file: LICENSE\nmaintainer: libraries@haskell.org\nbug-reports: https://github.com/haskell/directory/issues\nsynopsis: Platform-agnostic library for filesystem operations\ndescription:\n This library provides a basic set of operations for manipulating files and\n directories in a portable way.\ncategory: System\nbuild-type: Configure\ntested-with: GHC == 8.10.7 || == 9.0.2 || == 9.2.4 || == 9.4.3\n\nextra-tmp-files:\n autom4te.cache\n config.log\n config.status\n HsDirectoryConfig.h\n\nextra-doc-files:\n README.md\n changelog.md\n\nextra-source-files:\n HsDirectoryConfig.h.in\n System/Directory/Internal/*.h\n configure\n configure.ac\n tests/*.hs\n tests/util.inl\n\nsource-repository head\n type: git\n location: https://github.com/haskell/directory\n\nflag os-string\n description: Use the new os-string package\n default: False\n manual: False\n\nLibrary\n default-language: Haskell2010\n other-extensions: CApiFFI, CPP\n\n exposed-modules:\n System.Directory\n System.Directory.OsPath\n System.Directory.Internal\n System.Directory.Internal.Prelude\n other-modules:\n System.Directory.Internal.C_utimensat\n System.Directory.Internal.Common\n System.Directory.Internal.Config\n System.Directory.Internal.Posix\n System.Directory.Internal.Windows\n\n include-dirs: .\n\n build-depends:\n base >= 4.13.0 && < 4.21,\n file-io >= 0.1.4 && < 0.2,\n time >= 1.8.0 && < 1.15,\n if os(windows)\n build-depends: Win32 >= 2.13.3 && < 2.15\n else\n build-depends: unix >= 2.8.0 && < 2.9\n\n if flag(os-string)\n build-depends: filepath >= 1.5.0.0, os-string >= 2.0.0\n else\n build-depends: filepath >= 1.4.100.0 && < 1.5.0.0\n\n ghc-options: -Wall\n\ntest-suite test\n default-language: Haskell2010\n other-extensions: BangPatterns, CPP\n default-extensions: OverloadedStrings\n ghc-options: -Wall\n hs-source-dirs: tests\n main-is: Main.hs\n type: exitcode-stdio-1.0\n build-depends: base, directory, filepath, time\n if os(windows)\n build-depends: Win32\n else\n build-depends: unix\n other-modules:\n TestUtils\n Util\n -- test-modules-begin\n CanonicalizePath\n CopyFile001\n CopyFile002\n CopyFileWithMetadata\n CreateDirectory001\n CreateDirectoryIfMissing001\n CurrentDirectory001\n Directory001\n DoesDirectoryExist001\n DoesPathExist\n FileTime\n FindFile001\n GetDirContents001\n GetDirContents002\n GetFileSize\n GetHomeDirectory001\n GetHomeDirectory002\n GetPermissions001\n LongPaths\n MakeAbsolute\n MinimizeNameConflicts\n PathIsSymbolicLink\n RemoveDirectoryRecursive001\n RemovePathForcibly\n RenameDirectory\n RenameFile001\n RenamePath\n Simplify\n T8482\n WithCurrentDirectory\n Xdg\n -- test-modules-end\n"; + } \ No newline at end of file diff --git a/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/file-io.nix b/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/file-io.nix new file mode 100644 index 0000000000..04cc73221f --- /dev/null +++ b/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/file-io.nix @@ -0,0 +1,120 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + ({ + flags = { os-string = false; }; + package = { + specVersion = "2.4"; + identifier = { name = "file-io"; version = "0.1.4"; }; + license = "BSD-3-Clause"; + copyright = "Julian Ospald 2022"; + maintainer = "hasufell@posteo.de"; + author = "Julian Ospald"; + homepage = "https://github.com/hasufell/file-io"; + url = ""; + synopsis = "Basic file IO operations via 'OsPath'"; + description = "Basic file IO operations like Prelude, but for 'OsPath'."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = ([ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + ] ++ (if system.isWindows + then [ (hsPkgs."Win32" or (errorHandler.buildDepError "Win32")) ] + else [ + (hsPkgs."unix" or (errorHandler.buildDepError "unix")) + ])) ++ (if flags.os-string + then [ + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."os-string" or (errorHandler.buildDepError "os-string")) + ] + else [ + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + ]); + buildable = true; + }; + tests = { + "T15" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) + (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) + (hsPkgs."file-io" or (errorHandler.buildDepError "file-io")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."temporary" or (errorHandler.buildDepError "temporary")) + ] ++ pkgs.lib.optional (system.isWindows) (hsPkgs."Win32" or (errorHandler.buildDepError "Win32")); + buildable = true; + }; + "T15Win" = { + depends = if system.isWindows + then [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) + (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) + (hsPkgs."file-io" or (errorHandler.buildDepError "file-io")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."temporary" or (errorHandler.buildDepError "temporary")) + (hsPkgs."Win32" or (errorHandler.buildDepError "Win32")) + ] + else [ (hsPkgs."base" or (errorHandler.buildDepError "base")) ]; + buildable = true; + }; + "T14" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."file-io" or (errorHandler.buildDepError "file-io")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."temporary" or (errorHandler.buildDepError "temporary")) + ]; + buildable = true; + }; + "T8" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."file-io" or (errorHandler.buildDepError "file-io")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."temporary" or (errorHandler.buildDepError "temporary")) + ]; + buildable = true; + }; + "CLC237" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."file-io" or (errorHandler.buildDepError "file-io")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."temporary" or (errorHandler.buildDepError "temporary")) + ]; + buildable = true; + }; + "Properties" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."tasty" or (errorHandler.buildDepError "tasty")) + (hsPkgs."tasty-hunit" or (errorHandler.buildDepError "tasty-hunit")) + (hsPkgs."file-io" or (errorHandler.buildDepError "file-io")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."temporary" or (errorHandler.buildDepError "temporary")) + ]; + buildable = true; + }; + }; + }; + } // { + src = pkgs.lib.mkDefault (pkgs.fetchurl { + url = "http://hackage.haskell.org/package/file-io-0.1.4.tar.gz"; + sha256 = "e3d9113a015c57e3d8c2294550c41544f84a265291fed96cca697f91b6e86f52"; + }); + }) // { + package-description-override = "cabal-version: 2.4\nname: file-io\nversion: 0.1.4\nsynopsis: Basic file IO operations via 'OsPath'\ndescription: Basic file IO operations like Prelude, but for 'OsPath'.\nhomepage: https://github.com/hasufell/file-io\nbug-reports: https://github.com/hasufell/file-io/issues\nlicense: BSD-3-Clause\nauthor: Julian Ospald\nmaintainer: hasufell@posteo.de\ncopyright: Julian Ospald 2022\ncategory: System\nextra-source-files:\n CHANGELOG.md\ntested-with: GHC==9.8.1,\n GHC==9.4.8,\n GHC==9.2.8,\n GHC==9.0.2,\n GHC==8.10.7,\n GHC==8.8.4\n\nsource-repository head\n type: git\n location: https://github.com/hasufell/file-io.git\n\nflag os-string\n description: Use the new os-string package\n default: False\n manual: False\n\nlibrary\n default-language: Haskell2010\n\n if os(windows)\n hs-source-dirs: windows\n build-depends: Win32 >=2.13.3.0\n\n else\n hs-source-dirs: posix\n build-depends: unix >=2.8.0.0\n\n hs-source-dirs: .\n build-depends:\n , base >=4.13.0.0 && <5\n , bytestring >=0.11.3.0\n , deepseq\n\n if flag(os-string)\n build-depends: filepath >= 1.5.0.0, os-string >= 2.0.0\n else\n build-depends: filepath >= 1.4.100.0 && < 1.5.0.0\n\n exposed-modules:\n System.File.OsPath\n System.File.OsPath.Internal\n System.File.PlatformPath\n System.File.PlatformPath.Internal\n\n other-modules: System.File.Platform\n\n ghc-options: -Wall\n\ntest-suite T15\n hs-source-dirs: tests\n main-is: T15.hs\n type: exitcode-stdio-1.0\n default-language: Haskell2010\n build-depends: base >=4.13.0.0 && <5, tasty, tasty-hunit, file-io, filepath, temporary\n ghc-options: -Wall -threaded -rtsopts \"-with-rtsopts=-N10\"\n if os(windows)\n build-depends: Win32 >=2.13.3.0\n\ntest-suite T15Win\n hs-source-dirs: tests\n main-is: T15Win.hs\n type: exitcode-stdio-1.0\n default-language: Haskell2010\n if os(windows)\n build-depends: base >=4.13.0.0 && <5, tasty, tasty-hunit, file-io, filepath, temporary, Win32 >=2.13.3.0\n else\n build-depends: base >=4.13.0.0 && <5\n ghc-options: -Wall -threaded -rtsopts \"-with-rtsopts=-N10\"\n\ntest-suite T14\n hs-source-dirs: tests\n main-is: T14.hs\n type: exitcode-stdio-1.0\n default-language: Haskell2010\n build-depends: base >=4.13.0.0 && <5, file-io, filepath, temporary\n ghc-options: -Wall\n\ntest-suite T8\n hs-source-dirs: tests\n main-is: T8.hs\n type: exitcode-stdio-1.0\n default-language: Haskell2010\n build-depends: base >=4.13.0.0 && <5, bytestring, file-io, filepath, temporary\n ghc-options: -Wall -threaded\n\ntest-suite CLC237\n hs-source-dirs: tests\n main-is: CLC237.hs\n type: exitcode-stdio-1.0\n default-language: Haskell2010\n build-depends: base >=4.13.0.0 && <5, file-io, filepath, temporary\n ghc-options: -Wall\n\ntest-suite Properties\n hs-source-dirs: tests\n main-is: Properties.hs\n type: exitcode-stdio-1.0\n default-language: Haskell2010\n build-depends: base >=4.13.0.0 && <5, bytestring, tasty, tasty-hunit, file-io, filepath, temporary\n ghc-options: -Wall -threaded -rtsopts \"-with-rtsopts=-N10\"\n\n"; + } \ No newline at end of file diff --git a/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/process.nix b/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/process.nix new file mode 100644 index 0000000000..22b3c4b10e --- /dev/null +++ b/materialized/ghc964/hadrian-ghc96/hadrian/cabal-files/process.nix @@ -0,0 +1,50 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + ({ + flags = {}; + package = { + specVersion = "2.4"; + identifier = { name = "process"; version = "1.6.25.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Process libraries"; + description = "This package contains libraries for dealing with system processes.\n\nThe typed-process package is a more recent take on a process API,\nwhich uses this package internally. It features better binary\nsupport, easier concurrency, and a more composable API. You can\nread more about it at\n."; + buildType = "Configure"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + ] ++ (if system.isWindows + then [ (hsPkgs."Win32" or (errorHandler.buildDepError "Win32")) ] + else [ (hsPkgs."unix" or (errorHandler.buildDepError "unix")) ]); + libs = pkgs.lib.optionals (system.isWindows) [ + (pkgs."kernel32" or (errorHandler.sysDepError "kernel32")) + (pkgs."ole32" or (errorHandler.sysDepError "ole32")) + (pkgs."rpcrt4" or (errorHandler.sysDepError "rpcrt4")) + ]; + buildable = true; + }; + }; + } // { + src = pkgs.lib.mkDefault (pkgs.fetchurl { + url = "http://hackage.haskell.org/package/process-1.6.25.0.tar.gz"; + sha256 = "496fe0566c3915b112e9772ac9c967dfeb8d5ca04895e54ae0160522bee76e65"; + }); + }) // { + package-description-override = "cabal-version: 2.4\nname: process\nversion: 1.6.25.0\n-- NOTE: Don't forget to update ./changelog.md\nlicense: BSD-3-Clause\nlicense-file: LICENSE\nmaintainer: libraries@haskell.org\nbug-reports: https://github.com/haskell/process/issues\nsynopsis: Process libraries\ncategory: System\nbuild-type: Configure\ndescription:\n This package contains libraries for dealing with system processes.\n .\n The typed-process package is a more recent take on a process API,\n which uses this package internally. It features better binary\n support, easier concurrency, and a more composable API. You can\n read more about it at\n .\n\nextra-doc-files:\n changelog.md\n\nextra-source-files:\n aclocal.m4\n configure\n configure.ac\n include/HsProcessConfig.h.in\n process.buildinfo\n exes/echo.bat\n exes/subdir/echo.bat\n cbits/posix/common.h\n\nextra-tmp-files:\n autom4te.cache\n config.log\n config.status\n include/HsProcessConfig.h\n\nsource-repository head\n type: git\n location: https://github.com/haskell/process.git\n\nlibrary\n default-language: Haskell2010\n other-extensions:\n BangPatterns\n CPP\n InterruptibleFFI\n RecordWildCards\n Trustworthy\n Safe\n\n exposed-modules:\n System.Cmd\n System.Process\n System.Process.CommunicationHandle\n System.Process.CommunicationHandle.Internal\n System.Process.Internals\n other-modules: System.Process.Common\n if os(windows)\n c-sources:\n cbits/win32/runProcess.c\n other-modules: System.Process.Windows\n build-depends: Win32 >=2.4 && < 2.15\n -- ole32 and rpcrt4 are needed to create GUIDs for unique named pipes\n -- for process.\n extra-libraries: kernel32, ole32, rpcrt4\n cpp-options: -DWINDOWS\n else\n build-depends: unix >= 2.5 && < 2.9\n if arch(javascript)\n js-sources:\n jsbits/process.js\n other-modules: System.Process.JavaScript\n else\n c-sources:\n cbits/posix/runProcess.c\n cbits/posix/fork_exec.c\n cbits/posix/posix_spawn.c\n cbits/posix/find_executable.c\n other-modules: System.Process.Posix\n\n include-dirs: include\n install-includes:\n runProcess.h\n processFlags.h\n\n ghc-options: -Wall\n\n build-depends: base >= 4.10 && < 4.21,\n directory >= 1.1 && < 1.4,\n filepath >= 1.2 && < 1.6,\n deepseq >= 1.1 && < 1.6\n"; + } \ No newline at end of file diff --git a/materialized/ghc964/hadrian-ghc96/hadrian/default.nix b/materialized/ghc964/hadrian-ghc96/hadrian/default.nix index 8bd2488da9..11ed2f8ef5 100644 --- a/materialized/ghc964/hadrian-ghc96/hadrian/default.nix +++ b/materialized/ghc964/hadrian-ghc96/hadrian/default.nix @@ -20,7 +20,7 @@ hashable.flags.arch-native = false; heaps.revision = import ./cabal-files/heaps.nix; Cabal-syntax.revision = import ./cabal-files/Cabal-syntax.nix; - process.revision = hackage.process."1.6.17.0".revisions.default; + process.revision = import ./cabal-files/process.nix; primitive.revision = import ./cabal-files/primitive.nix; stm.revision = hackage.stm."2.5.1.0".revisions.default; template-haskell.revision = hackage.template-haskell."2.20.0.0".revisions.default; @@ -47,7 +47,10 @@ random.revision = import ./cabal-files/random.nix; bytestring.revision = hackage.bytestring."0.11.5.3".revisions.default; Cabal.revision = import ./cabal-files/Cabal.nix; - directory.revision = hackage.directory."1.3.8.1".revisions.default; + directory.revision = import ./cabal-files/directory.nix; + directory.flags.os-string = false; + file-io.revision = import ./cabal-files/file-io.nix; + file-io.flags.os-string = false; js-flot.revision = import ./cabal-files/js-flot.nix; ghc-bignum.revision = hackage.ghc-bignum."1.3".revisions.default; binary.revision = hackage.binary."0.8.9.1".revisions.default; @@ -72,9 +75,7 @@ "time" = "1.12.2"; "stm" = "2.5.1.0"; "ghc-bignum" = "1.3"; - "directory" = "1.3.8.1"; "template-haskell" = "2.20.0.0"; - "process" = "1.6.17.0"; "binary" = "0.8.9.1"; "pretty" = "1.1.3.6"; "text" = "2.0.2"; @@ -98,7 +99,6 @@ "ghc-boot-th" "mtl" "pretty" - "process" "stm" "template-haskell" "exceptions" @@ -109,7 +109,6 @@ "containers" "array" "bytestring" - "directory" "ghc-bignum" "binary" "filepath" @@ -135,6 +134,7 @@ "unordered-containers".components.library.planned = lib.mkOverride 900 true; "text".components.library.planned = lib.mkOverride 900 true; "base".components.library.planned = lib.mkOverride 900 true; + "file-io".components.library.planned = lib.mkOverride 900 true; "js-flot".components.library.planned = lib.mkOverride 900 true; "splitmix".components.library.planned = lib.mkOverride 900 true; "filepath".components.library.planned = lib.mkOverride 900 true; diff --git a/materialized/ghc964/hadrian-ghc96/plan.json b/materialized/ghc964/hadrian-ghc96/plan.json index ba1bc64fe7..ec18f2a0d0 100644 --- a/materialized/ghc964/hadrian-ghc96/plan.json +++ b/materialized/ghc964/hadrian-ghc96/plan.json @@ -1 +1 @@ -{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-9.6.4","os":"linux","arch":"x86_64","install-plan":[{"type":"configured","id":"Cabal-3.8.1.0-c668f818769193b477ca1a8b87e802e56126adbc7bed962d76bde34a01e8c306","pkg-name":"Cabal","pkg-version":"3.8.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"77121d8e1aff14a0fd95684b751599db78a7dd26d55862d9fcef27c88b193e9d","pkg-src-sha256":"7464cbe6c2f3d7e5d0232023a1a7330621f8b24853cb259fc89a2af85b736608","depends":["Cabal-syntax-3.8.1.0-b99db30153f1d2c83dc6d34e637d577dc69cabe5825778a1e3462bcf8317b588","array-0.5.6.0","base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","directory-1.3.8.1","filepath-1.4.200.1","mtl-2.3.1","parsec-3.1.16.1","pretty-1.1.3.6","process-1.6.17.0","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"Cabal-syntax-3.8.1.0-b99db30153f1d2c83dc6d34e637d577dc69cabe5825778a1e3462bcf8317b588","pkg-name":"Cabal-syntax","pkg-version":"3.8.1.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ed2d937ba6c6a20b75850349eedd41374885fc42369ef152d69e2ba70f44f593","pkg-src-sha256":"07e8ddb19fe01781485f1522b6afc22aba680b0ab28ebe6bbfb84a2dd698ce0f","depends":["array-0.5.6.0","base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","directory-1.3.8.1","filepath-1.4.200.1","mtl-2.3.1","parsec-3.1.16.1","pretty-1.1.3.6","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"QuickCheck-2.14.3-12660abe9f5c6a28f87584c784112e82267cee7f5b9b5a1823ce30f9270ebf1a","pkg-name":"QuickCheck","pkg-version":"2.14.3","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f03d2f404d5ba465453d0fbc1944832789a759fe7c4f9bf8616bc1378a02fde4","pkg-src-sha256":"5c0f22b36b28a1a8fa110b3819818d3f29494a3b0dedbae299f064123ca70501","depends":["base-4.18.2.0","containers-0.6.7","deepseq-1.4.8.1","random-1.2.1.2-ccb717c59af131f21dfc040f6185e9cbf4f0b5a3f6de1b3b376d50859a348586","splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","template-haskell-2.20.0.0","transformers-0.6.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.6.0","pkg-name":"array","pkg-version":"0.5.6.0","depends":["base-4.18.2.0"]},{"type":"pre-existing","id":"base-4.18.2.0","pkg-name":"base","pkg-version":"4.18.2.0","depends":["ghc-bignum-1.3","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"binary-0.8.9.1","pkg-name":"binary","pkg-version":"0.8.9.1","depends":["array-0.5.6.0","base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"bytestring-0.11.5.3","pkg-name":"bytestring","pkg-version":"0.11.5.3","depends":["base-4.18.2.0","deepseq-1.4.8.1","ghc-prim-0.10.0","template-haskell-2.20.0.0"]},{"type":"configured","id":"clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","pkg-name":"clock","pkg-version":"0.8.4","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b938655b00cf204ce69abfff946021bed111d2609a9f7a9c22e28a1a202e9115","pkg-src-sha256":"6ae9898afe788a5e334cd5fad5d18a3c2e8e59fa09aaf7b957dbb38a4767df2e","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.7","pkg-name":"containers","pkg-version":"0.6.7","depends":["array-0.5.6.0","base-4.18.2.0","deepseq-1.4.8.1","template-haskell-2.20.0.0"]},{"type":"pre-existing","id":"deepseq-1.4.8.1","pkg-name":"deepseq","pkg-version":"1.4.8.1","depends":["array-0.5.6.0","base-4.18.2.0","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"directory-1.3.8.1","pkg-name":"directory","pkg-version":"1.3.8.1","depends":["base-4.18.2.0","filepath-1.4.200.1","time-1.12.2","unix-2.8.4.0"]},{"type":"pre-existing","id":"exceptions-0.10.7","pkg-name":"exceptions","pkg-version":"0.10.7","depends":["base-4.18.2.0","mtl-2.3.1","stm-2.5.1.0","template-haskell-2.20.0.0","transformers-0.6.1.0"]},{"type":"configured","id":"extra-1.7.16-dc63228cbe6629bad55bc0268aff37cd1d9389acb03be20763ed611a10fe3efc","pkg-name":"extra","pkg-version":"1.7.16","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"edd191f77adf31acb1b53960b4d1ca9fca925ac28345a396c614414cb7bfa7ec","pkg-src-sha256":"250c6d43c30b2c71f2cf498a10e69e43ac035974d3819529385d99e42ce77c70","depends":["base-4.18.2.0","clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","directory-1.3.8.1","filepath-1.4.200.1","process-1.6.17.0","time-1.12.2","unix-2.8.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.200.1","pkg-name":"filepath","pkg-version":"1.4.200.1","depends":["base-4.18.2.0","bytestring-0.11.5.3","deepseq-1.4.8.1","exceptions-0.10.7","template-haskell-2.20.0.0"]},{"type":"configured","id":"filepattern-0.1.3-c45690bc0b4b5c677f6943e7896ddd599d085687db6e459293ba6fa381af7c6e","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.18.2.0","directory-1.3.8.1","extra-1.7.16-dc63228cbe6629bad55bc0268aff37cd1d9389acb03be20763ed611a10fe3efc","filepath-1.4.200.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.3","pkg-name":"ghc-bignum","pkg-version":"1.3","depends":["ghc-prim-0.10.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.6.4","pkg-name":"ghc-boot-th","pkg-version":"9.6.4","depends":["base-4.18.2.0"]},{"type":"pre-existing","id":"ghc-prim-0.10.0","pkg-name":"ghc-prim","pkg-version":"0.10.0","depends":[]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"./hadrian/."},"dist-dir":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian","build-info":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.8.1.0-c668f818769193b477ca1a8b87e802e56126adbc7bed962d76bde34a01e8c306","QuickCheck-2.14.3-12660abe9f5c6a28f87584c784112e82267cee7f5b9b5a1823ce30f9270ebf1a","base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","directory-1.3.8.1","extra-1.7.16-dc63228cbe6629bad55bc0268aff37cd1d9389acb03be20763ed611a10fe3efc","filepath-1.4.200.1","mtl-2.3.1","parsec-3.1.16.1","shake-0.19.8-0ddb83d9db09621c7b8f326abc494d14323dc5751be6943ac5b5e19c9347d5c3","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unordered-containers-0.2.20-0a8211d6220ec0e6694f219bbea9da08528b897266f5898f98f4d6e1ab6fd737"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.5.0.0-0ac0785933877296ccb7501af740625424a60e762d9e13c3f7fb819fa7014b88","pkg-name":"hashable","pkg-version":"1.5.0.0","flags":{"arch-native":false,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fc68b07d957ade5a0a0beadd560a8d093ceac30b2f35c85eed3bcf7889a25975","pkg-src-sha256":"e58b3a8e18da5f6cd7e937e5fd683e500bb1f8276b3768269759119ca0cddb6a","depends":["base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","filepath-1.4.200.1","ghc-bignum-1.3","ghc-prim-0.10.0","os-string-2.0.6-01e3c1e4563fbed004a4ac273e2beea9dfd497789ab9039e09b96161f470a497","text-2.0.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.3.1","pkg-name":"mtl","pkg-version":"2.3.1","depends":["base-4.18.2.0","transformers-0.6.1.0"]},{"type":"configured","id":"os-string-2.0.6-01e3c1e4563fbed004a4ac273e2beea9dfd497789ab9039e09b96161f470a497","pkg-name":"os-string","pkg-version":"2.0.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7699e7ae9bf74d056a62f384ceef8dfb2aa660f3f7c8016e9703f3b995e5e030","pkg-src-sha256":"22fcc7d5fc66676b5dfc57b714d2caf93cce2d5a79d242168352f9eb0fe2f18a","depends":["base-4.18.2.0","bytestring-0.11.5.3","deepseq-1.4.8.1","exceptions-0.10.7","template-haskell-2.20.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"parsec-3.1.16.1","pkg-name":"parsec","pkg-version":"3.1.16.1","depends":["base-4.18.2.0","bytestring-0.11.5.3","mtl-2.3.1","text-2.0.2"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.18.2.0","deepseq-1.4.8.1","ghc-prim-0.10.0"]},{"type":"configured","id":"primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","pkg-name":"primitive","pkg-version":"0.9.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2e08c5409e3559c7f1669ef50e9a0d9a397e68ecf51110d5e2cedf05cdd7d93c","pkg-src-sha256":"696d4bd291c94d736142d6182117dca4258d3ef28bfefdb649ac8b5ecd0999c7","depends":["base-4.18.2.0","deepseq-1.4.8.1","template-haskell-2.20.0.0","transformers-0.6.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"process-1.6.17.0","pkg-name":"process","pkg-version":"1.6.17.0","depends":["base-4.18.2.0","deepseq-1.4.8.1","directory-1.3.8.1","filepath-1.4.200.1","unix-2.8.4.0"]},{"type":"configured","id":"random-1.2.1.2-ccb717c59af131f21dfc040f6185e9cbf4f0b5a3f6de1b3b376d50859a348586","pkg-name":"random","pkg-version":"1.2.1.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"32397de181e20ccaacf806ec70de9308cf044f089a2be37c936f3f8967bde867","pkg-src-sha256":"790f4dc2d2327c453ff6aac7bf15399fd123d55e927935f68f84b5df42d9a4b4","depends":["base-4.18.2.0","bytestring-0.11.5.3","deepseq-1.4.8.1","mtl-2.3.1","splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.8-0ddb83d9db09621c7b8f326abc494d14323dc5751be6943ac5b5e19c9347d5c3","pkg-name":"shake","pkg-version":"0.19.8","flags":{"cloud":false,"embed-files":false,"portable":false,"threaded":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"03c8f06de478e07ad6fde95984c9206920106d0d8432ecb7ab825ef108d45382","pkg-src-sha256":"6384e33a26a2590bf33719e88881076b899ac4b5340c1c9271e4caa37e9d6535","depends":["base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","directory-1.3.8.1","extra-1.7.16-dc63228cbe6629bad55bc0268aff37cd1d9389acb03be20763ed611a10fe3efc","filepath-1.4.200.1","filepattern-0.1.3-c45690bc0b4b5c677f6943e7896ddd599d085687db6e459293ba6fa381af7c6e","hashable-1.5.0.0-0ac0785933877296ccb7501af740625424a60e762d9e13c3f7fb819fa7014b88","heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","process-1.6.17.0","random-1.2.1.2-ccb717c59af131f21dfc040f6185e9cbf4f0b5a3f6de1b3b376d50859a348586","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0","unordered-containers-0.2.20-0a8211d6220ec0e6694f219bbea9da08528b897266f5898f98f4d6e1ab6fd737","utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.8-e-shake-7559c7ff704c4f74648b4baa6b6f1b1db1f99fa251704d87397a432f656a4846","pkg-name":"shake","pkg-version":"0.19.8","flags":{"cloud":false,"embed-files":false,"portable":false,"threaded":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"03c8f06de478e07ad6fde95984c9206920106d0d8432ecb7ab825ef108d45382","pkg-src-sha256":"6384e33a26a2590bf33719e88881076b899ac4b5340c1c9271e4caa37e9d6535","depends":["base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","directory-1.3.8.1","extra-1.7.16-dc63228cbe6629bad55bc0268aff37cd1d9389acb03be20763ed611a10fe3efc","filepath-1.4.200.1","filepattern-0.1.3-c45690bc0b4b5c677f6943e7896ddd599d085687db6e459293ba6fa381af7c6e","hashable-1.5.0.0-0ac0785933877296ccb7501af740625424a60e762d9e13c3f7fb819fa7014b88","heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","process-1.6.17.0","random-1.2.1.2-ccb717c59af131f21dfc040f6185e9cbf4f0b5a3f6de1b3b376d50859a348586","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0","unordered-containers-0.2.20-0a8211d6220ec0e6694f219bbea9da08528b897266f5898f98f4d6e1ab6fd737","utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/store/ghc-9.6.4/shake-0.19.8-e-shake-7559c7ff704c4f74648b4baa6b6f1b1db1f99fa251704d87397a432f656a4846/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","pkg-name":"splitmix","pkg-version":"0.1.0.5","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"caa9b4a92abf1496c7f6a3c0f4e357426a54880077cb9f04e260a8bfa034b77b","pkg-src-sha256":"9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002","depends":["base-4.18.2.0","deepseq-1.4.8.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"stm-2.5.1.0","pkg-name":"stm","pkg-version":"2.5.1.0","depends":["array-0.5.6.0","base-4.18.2.0"]},{"type":"pre-existing","id":"system-cxx-std-lib-1.0","pkg-name":"system-cxx-std-lib","pkg-version":"1.0","depends":[]},{"type":"pre-existing","id":"template-haskell-2.20.0.0","pkg-name":"template-haskell","pkg-version":"2.20.0.0","depends":["base-4.18.2.0","ghc-boot-th-9.6.4","ghc-prim-0.10.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-2.0.2","pkg-name":"text","pkg-version":"2.0.2","depends":["array-0.5.6.0","base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","ghc-prim-0.10.0","system-cxx-std-lib-1.0","template-haskell-2.20.0.0"]},{"type":"pre-existing","id":"time-1.12.2","pkg-name":"time","pkg-version":"1.12.2","depends":["base-4.18.2.0","deepseq-1.4.8.1"]},{"type":"pre-existing","id":"transformers-0.6.1.0","pkg-name":"transformers","pkg-version":"0.6.1.0","depends":["base-4.18.2.0","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"unix-2.8.4.0","pkg-name":"unix","pkg-version":"2.8.4.0","depends":["base-4.18.2.0","bytestring-0.11.5.3","filepath-1.4.200.1","time-1.12.2"]},{"type":"configured","id":"unordered-containers-0.2.20-0a8211d6220ec0e6694f219bbea9da08528b897266f5898f98f4d6e1ab6fd737","pkg-name":"unordered-containers","pkg-version":"0.2.20","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c7fe9cba405ed9905e12d89c7add3b3eb9868dfba7975e70ba0cdd64b7b11abc","pkg-src-sha256":"d9cfb287cf00592d39dc9c3cac8b99627ea08f2c01798e70130fc39f7c90f11d","depends":["base-4.18.2.0","deepseq-1.4.8.1","hashable-1.5.0.0-0ac0785933877296ccb7501af740625424a60e762d9e13c3f7fb819fa7014b88","template-haskell-2.20.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.18.2.0","bytestring-0.11.5.3"],"exe-depends":[],"component-name":"lib"}],"targets":[{"pkg-name":"Cabal","pkg-version":"3.8.1.0","component-name":"lib","available":[{"id":"Cabal-3.8.1.0-c668f818769193b477ca1a8b87e802e56126adbc7bed962d76bde34a01e8c306","component-name":"lib","build-by-default":true}]},{"pkg-name":"Cabal-syntax","pkg-version":"3.8.1.0","component-name":"lib","available":[{"id":"Cabal-syntax-3.8.1.0-b99db30153f1d2c83dc6d34e637d577dc69cabe5825778a1e3462bcf8317b588","component-name":"lib","build-by-default":true}]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"lib","available":[{"id":"QuickCheck-2.14.3-12660abe9f5c6a28f87584c784112e82267cee7f5b9b5a1823ce30f9270ebf1a","component-name":"lib","build-by-default":true}]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-gcoarbitrary","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-generators","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-gshrink","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-misc","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-monadfix","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-split","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-terminal","available":["TargetNotLocal"]},{"pkg-name":"array","pkg-version":"0.5.6.0","component-name":"lib","available":[{"id":"array-0.5.6.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base","pkg-version":"4.18.2.0","component-name":"lib","available":[{"id":"base-4.18.2.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"binary","pkg-version":"0.8.9.1","component-name":"lib","available":[{"id":"binary-0.8.9.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"bytestring","pkg-version":"0.11.5.3","component-name":"lib","available":[{"id":"bytestring-0.11.5.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"lib","available":[{"id":"clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","component-name":"lib","build-by-default":true}]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"containers","pkg-version":"0.6.7","component-name":"lib","available":[{"id":"containers-0.6.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"deepseq","pkg-version":"1.4.8.1","component-name":"lib","available":[{"id":"deepseq-1.4.8.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory","pkg-version":"1.3.8.1","component-name":"lib","available":[{"id":"directory-1.3.8.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"exceptions","pkg-version":"0.10.7","component-name":"lib","available":[{"id":"exceptions-0.10.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"extra","pkg-version":"1.7.16","component-name":"lib","available":[{"id":"extra-1.7.16-dc63228cbe6629bad55bc0268aff37cd1d9389acb03be20763ed611a10fe3efc","component-name":"lib","build-by-default":true}]},{"pkg-name":"extra","pkg-version":"1.7.16","component-name":"test:extra-test","available":["TargetNotLocal"]},{"pkg-name":"filepath","pkg-version":"1.4.200.1","component-name":"lib","available":[{"id":"filepath-1.4.200.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"filepattern","pkg-version":"0.1.3","component-name":"lib","available":[{"id":"filepattern-0.1.3-c45690bc0b4b5c677f6943e7896ddd599d085687db6e459293ba6fa381af7c6e","component-name":"lib","build-by-default":true}]},{"pkg-name":"filepattern","pkg-version":"0.1.3","component-name":"test:filepattern-test","available":["TargetNotLocal"]},{"pkg-name":"ghc-bignum","pkg-version":"1.3","component-name":"lib","available":[{"id":"ghc-bignum-1.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-boot-th","pkg-version":"9.6.4","component-name":"lib","available":[{"id":"ghc-boot-th-9.6.4","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-prim","pkg-version":"0.10.0","component-name":"lib","available":[{"id":"ghc-prim-0.10.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"hadrian","pkg-version":"0.1.0.0","component-name":"exe:hadrian","available":[{"id":"hadrian-0.1.0.0-inplace-hadrian","component-name":"exe:hadrian","build-by-default":true}]},{"pkg-name":"hashable","pkg-version":"1.5.0.0","component-name":"lib","available":[{"id":"hashable-1.5.0.0-0ac0785933877296ccb7501af740625424a60e762d9e13c3f7fb819fa7014b88","component-name":"lib","build-by-default":true}]},{"pkg-name":"hashable","pkg-version":"1.5.0.0","component-name":"test:hashable-examples","available":["TargetNotLocal"]},{"pkg-name":"hashable","pkg-version":"1.5.0.0","component-name":"test:hashable-tests","available":["TargetNotLocal"]},{"pkg-name":"hashable","pkg-version":"1.5.0.0","component-name":"test:xxhash-tests","available":["TargetNotLocal"]},{"pkg-name":"heaps","pkg-version":"0.4","component-name":"lib","available":[{"id":"heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-dgtable","pkg-version":"0.5.2","component-name":"lib","available":[{"id":"js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-dgtable","pkg-version":"0.5.2","component-name":"test:js-dgtable-test","available":["TargetNotLocal"]},{"pkg-name":"js-flot","pkg-version":"0.8.3","component-name":"lib","available":[{"id":"js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-flot","pkg-version":"0.8.3","component-name":"test:js-flot-test","available":["TargetNotLocal"]},{"pkg-name":"js-jquery","pkg-version":"3.3.1","component-name":"lib","available":[{"id":"js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-jquery","pkg-version":"3.3.1","component-name":"test:js-jquery-test","available":["TargetNotLocal"]},{"pkg-name":"mtl","pkg-version":"2.3.1","component-name":"lib","available":[{"id":"mtl-2.3.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"os-string","pkg-version":"2.0.6","component-name":"lib","available":[{"id":"os-string-2.0.6-01e3c1e4563fbed004a4ac273e2beea9dfd497789ab9039e09b96161f470a497","component-name":"lib","build-by-default":true}]},{"pkg-name":"os-string","pkg-version":"2.0.6","component-name":"test:bytestring-tests","available":["TargetNotLocal"]},{"pkg-name":"os-string","pkg-version":"2.0.6","component-name":"test:encoding-tests","available":["TargetNotLocal"]},{"pkg-name":"os-string","pkg-version":"2.0.6","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"parsec","pkg-version":"3.1.16.1","component-name":"lib","available":[{"id":"parsec-3.1.16.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"pretty","pkg-version":"1.1.3.6","component-name":"lib","available":[{"id":"pretty-1.1.3.6","component-name":"lib","build-by-default":true}]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"lib","available":[{"id":"primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","component-name":"lib","build-by-default":true}]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"test:test-qc","available":["TargetNotLocal"]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"process","pkg-version":"1.6.17.0","component-name":"lib","available":[{"id":"process-1.6.17.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"random","pkg-version":"1.2.1.2","component-name":"lib","available":[{"id":"random-1.2.1.2-ccb717c59af131f21dfc040f6185e9cbf4f0b5a3f6de1b3b376d50859a348586","component-name":"lib","build-by-default":true}]},{"pkg-name":"random","pkg-version":"1.2.1.2","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.2","component-name":"test:legacy-test","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.2","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.2","component-name":"test:spec-inspection","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.2","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.2","component-name":"bench:legacy-bench","available":["TargetNotLocal"]},{"pkg-name":"shake","pkg-version":"0.19.8","component-name":"lib","available":[{"id":"shake-0.19.8-0ddb83d9db09621c7b8f326abc494d14323dc5751be6943ac5b5e19c9347d5c3","component-name":"lib","build-by-default":true}]},{"pkg-name":"shake","pkg-version":"0.19.8","component-name":"exe:shake","available":[{"id":"shake-0.19.8-e-shake-7559c7ff704c4f74648b4baa6b6f1b1db1f99fa251704d87397a432f656a4846","component-name":"exe:shake","build-by-default":true}]},{"pkg-name":"shake","pkg-version":"0.19.8","component-name":"test:shake-test","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"lib","available":[{"id":"splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","component-name":"lib","build-by-default":true}]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:examples","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:initialization","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:montecarlo-pi","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:montecarlo-pi-32","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-dieharder","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-tests","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-testu01","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:comparison","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:range","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:simple-sum","available":["TargetNotLocal"]},{"pkg-name":"stm","pkg-version":"2.5.1.0","component-name":"lib","available":[{"id":"stm-2.5.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"system-cxx-std-lib","pkg-version":"1.0","component-name":"lib","available":[{"id":"system-cxx-std-lib-1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"template-haskell","pkg-version":"2.20.0.0","component-name":"lib","available":[{"id":"template-haskell-2.20.0.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"text","pkg-version":"2.0.2","component-name":"lib","available":[{"id":"text-2.0.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"time","pkg-version":"1.12.2","component-name":"lib","available":[{"id":"time-1.12.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"transformers","pkg-version":"0.6.1.0","component-name":"lib","available":[{"id":"transformers-0.6.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix","pkg-version":"2.8.4.0","component-name":"lib","available":[{"id":"unix-2.8.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"unordered-containers","pkg-version":"0.2.20","component-name":"lib","available":[{"id":"unordered-containers-0.2.20-0a8211d6220ec0e6694f219bbea9da08528b897266f5898f98f4d6e1ab6fd737","component-name":"lib","build-by-default":true}]},{"pkg-name":"unordered-containers","pkg-version":"0.2.20","component-name":"test:unordered-containers-tests","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.20","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"utf8-string","pkg-version":"1.0.2","component-name":"lib","available":[{"id":"utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05","component-name":"lib","build-by-default":true}]},{"pkg-name":"utf8-string","pkg-version":"1.0.2","component-name":"test:unit-tests","available":["TargetNotLocal"]}]} \ No newline at end of file +{"cabal-version":"3.10.3.0","cabal-lib-version":"3.10.3.0","compiler-id":"ghc-9.6.4","os":"linux","arch":"x86_64","install-plan":[{"type":"configured","id":"Cabal-3.10.3.0-fe9a4e2f6d3b51cf239a0d0da645c840fdf30442a7a2c83062b7b54358dc4a48","pkg-name":"Cabal","pkg-version":"3.10.3.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4a36954a66769eef90353daa0dbb07d43e49c228281383c7e4134445d495f714","pkg-src-sha256":"cb7f7c66626d7555f799e786513ddd65a874fd23f1cf312990c7a48abfc0b2c6","depends":["Cabal-syntax-3.10.3.0-88e1285e7405dfb1ce1417f2f1349cb91008f5a0d0381097b42750183978e546","array-0.5.6.0","base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","directory-1.3.9.0-328618091283420235f7b56cc39ee71bcc68c5832981997a8ca03318b84d66a1","filepath-1.4.200.1","mtl-2.3.1","parsec-3.1.16.1","pretty-1.1.3.6","process-1.6.25.0-d827dfe321191070c76b83bae4b4bdda770a9d3edfefae17d687e5eaf31c73f8","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"Cabal-syntax-3.10.3.0-88e1285e7405dfb1ce1417f2f1349cb91008f5a0d0381097b42750183978e546","pkg-name":"Cabal-syntax","pkg-version":"3.10.3.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c2ca36499bf9365726968b1e11a757e6d846c47cdf0c2c26a003698fd3c300fe","pkg-src-sha256":"75d6a0aa9c00990a0d6e7720ac50c6954f6c942fa1be42c8add7f1c025f7e212","depends":["array-0.5.6.0","base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","directory-1.3.9.0-328618091283420235f7b56cc39ee71bcc68c5832981997a8ca03318b84d66a1","filepath-1.4.200.1","mtl-2.3.1","parsec-3.1.16.1","pretty-1.1.3.6","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"QuickCheck-2.14.3-12660abe9f5c6a28f87584c784112e82267cee7f5b9b5a1823ce30f9270ebf1a","pkg-name":"QuickCheck","pkg-version":"2.14.3","flags":{"old-random":false,"templatehaskell":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f03d2f404d5ba465453d0fbc1944832789a759fe7c4f9bf8616bc1378a02fde4","pkg-src-sha256":"5c0f22b36b28a1a8fa110b3819818d3f29494a3b0dedbae299f064123ca70501","depends":["base-4.18.2.0","containers-0.6.7","deepseq-1.4.8.1","random-1.2.1.2-ccb717c59af131f21dfc040f6185e9cbf4f0b5a3f6de1b3b376d50859a348586","splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","template-haskell-2.20.0.0","transformers-0.6.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"array-0.5.6.0","pkg-name":"array","pkg-version":"0.5.6.0","depends":["base-4.18.2.0"]},{"type":"pre-existing","id":"base-4.18.2.0","pkg-name":"base","pkg-version":"4.18.2.0","depends":["ghc-bignum-1.3","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"binary-0.8.9.1","pkg-name":"binary","pkg-version":"0.8.9.1","depends":["array-0.5.6.0","base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"bytestring-0.11.5.3","pkg-name":"bytestring","pkg-version":"0.11.5.3","depends":["base-4.18.2.0","deepseq-1.4.8.1","ghc-prim-0.10.0","template-haskell-2.20.0.0"]},{"type":"configured","id":"clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","pkg-name":"clock","pkg-version":"0.8.4","flags":{"llvm":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"b938655b00cf204ce69abfff946021bed111d2609a9f7a9c22e28a1a202e9115","pkg-src-sha256":"6ae9898afe788a5e334cd5fad5d18a3c2e8e59fa09aaf7b957dbb38a4767df2e","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"containers-0.6.7","pkg-name":"containers","pkg-version":"0.6.7","depends":["array-0.5.6.0","base-4.18.2.0","deepseq-1.4.8.1","template-haskell-2.20.0.0"]},{"type":"pre-existing","id":"deepseq-1.4.8.1","pkg-name":"deepseq","pkg-version":"1.4.8.1","depends":["array-0.5.6.0","base-4.18.2.0","ghc-prim-0.10.0"]},{"type":"configured","id":"directory-1.3.9.0-328618091283420235f7b56cc39ee71bcc68c5832981997a8ca03318b84d66a1","pkg-name":"directory","pkg-version":"1.3.9.0","flags":{"os-string":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"ae73d4c39d18842f57d48649f4583347823ef7b1bc0bde786ca39141f7fd8c87","pkg-src-sha256":"20a24846117fc5f8751d974b7de07210a161989410467e9adca525381b8e64cc","components":{"lib":{"depends":["base-4.18.2.0","file-io-0.1.4-51915db079f01c9a6495d8a267894a9aed6b6b8f7c11259c9d5da53628dd167f","filepath-1.4.200.1","time-1.12.2","unix-2.8.4.0"],"exe-depends":[]}}},{"type":"pre-existing","id":"exceptions-0.10.7","pkg-name":"exceptions","pkg-version":"0.10.7","depends":["base-4.18.2.0","mtl-2.3.1","stm-2.5.1.0","template-haskell-2.20.0.0","transformers-0.6.1.0"]},{"type":"configured","id":"extra-1.7.16-49c389d3b325bb7343680a6b0593e42c3360ddbc37966713ffc950eadeee2718","pkg-name":"extra","pkg-version":"1.7.16","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"edd191f77adf31acb1b53960b4d1ca9fca925ac28345a396c614414cb7bfa7ec","pkg-src-sha256":"250c6d43c30b2c71f2cf498a10e69e43ac035974d3819529385d99e42ce77c70","depends":["base-4.18.2.0","clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","directory-1.3.9.0-328618091283420235f7b56cc39ee71bcc68c5832981997a8ca03318b84d66a1","filepath-1.4.200.1","process-1.6.25.0-d827dfe321191070c76b83bae4b4bdda770a9d3edfefae17d687e5eaf31c73f8","time-1.12.2","unix-2.8.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"file-io-0.1.4-51915db079f01c9a6495d8a267894a9aed6b6b8f7c11259c9d5da53628dd167f","pkg-name":"file-io","pkg-version":"0.1.4","flags":{"os-string":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"e3e1866eab82cb28f6a5f28507643da3987008b737e66a3c7398f39f16d824dc","pkg-src-sha256":"e3d9113a015c57e3d8c2294550c41544f84a265291fed96cca697f91b6e86f52","depends":["base-4.18.2.0","bytestring-0.11.5.3","deepseq-1.4.8.1","filepath-1.4.200.1","unix-2.8.4.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"filepath-1.4.200.1","pkg-name":"filepath","pkg-version":"1.4.200.1","depends":["base-4.18.2.0","bytestring-0.11.5.3","deepseq-1.4.8.1","exceptions-0.10.7","template-haskell-2.20.0.0"]},{"type":"configured","id":"filepattern-0.1.3-3194156282913050e18f34c4b4372b115c3784a9b535128618a739dd7cb95f74","pkg-name":"filepattern","pkg-version":"0.1.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"372c1733d83b90045eb29da9f010fed79bfef8771ce65eb126a1d83ecc54a9a2","pkg-src-sha256":"cc445d439ea2f65cac7604d3578aa2c3a62e5a91dc989f4ce5b3390db9e59636","depends":["base-4.18.2.0","directory-1.3.9.0-328618091283420235f7b56cc39ee71bcc68c5832981997a8ca03318b84d66a1","extra-1.7.16-49c389d3b325bb7343680a6b0593e42c3360ddbc37966713ffc950eadeee2718","filepath-1.4.200.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"ghc-bignum-1.3","pkg-name":"ghc-bignum","pkg-version":"1.3","depends":["ghc-prim-0.10.0"]},{"type":"pre-existing","id":"ghc-boot-th-9.6.4","pkg-name":"ghc-boot-th","pkg-version":"9.6.4","depends":["base-4.18.2.0"]},{"type":"pre-existing","id":"ghc-prim-0.10.0","pkg-name":"ghc-prim","pkg-version":"0.10.0","depends":[]},{"type":"configured","id":"hadrian-0.1.0.0-inplace-hadrian","pkg-name":"hadrian","pkg-version":"0.1.0.0","flags":{"selftest":true,"threaded":true},"style":"local","pkg-src":{"type":"local","path":"./hadrian/."},"dist-dir":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian","build-info":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian/build-info.json","depends":["Cabal-3.10.3.0-fe9a4e2f6d3b51cf239a0d0da645c840fdf30442a7a2c83062b7b54358dc4a48","QuickCheck-2.14.3-12660abe9f5c6a28f87584c784112e82267cee7f5b9b5a1823ce30f9270ebf1a","base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","directory-1.3.9.0-328618091283420235f7b56cc39ee71bcc68c5832981997a8ca03318b84d66a1","extra-1.7.16-49c389d3b325bb7343680a6b0593e42c3360ddbc37966713ffc950eadeee2718","filepath-1.4.200.1","mtl-2.3.1","parsec-3.1.16.1","shake-0.19.8-668bfd1b5363b1b0ed085582ab645439fdd43abbcf64e8c03b6359b2fb12bbe3","text-2.0.2","time-1.12.2","transformers-0.6.1.0","unordered-containers-0.2.20-0a8211d6220ec0e6694f219bbea9da08528b897266f5898f98f4d6e1ab6fd737"],"exe-depends":[],"component-name":"exe:hadrian","bin-file":"./hadrian/dist-newstyle/build/x86_64-linux/ghc-9.6.4/hadrian-0.1.0.0/x/hadrian/build/hadrian/hadrian"},{"type":"configured","id":"hashable-1.5.0.0-0ac0785933877296ccb7501af740625424a60e762d9e13c3f7fb819fa7014b88","pkg-name":"hashable","pkg-version":"1.5.0.0","flags":{"arch-native":false,"random-initial-seed":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"fc68b07d957ade5a0a0beadd560a8d093ceac30b2f35c85eed3bcf7889a25975","pkg-src-sha256":"e58b3a8e18da5f6cd7e937e5fd683e500bb1f8276b3768269759119ca0cddb6a","depends":["base-4.18.2.0","bytestring-0.11.5.3","containers-0.6.7","deepseq-1.4.8.1","filepath-1.4.200.1","ghc-bignum-1.3","ghc-prim-0.10.0","os-string-2.0.6-01e3c1e4563fbed004a4ac273e2beea9dfd497789ab9039e09b96161f470a497","text-2.0.2"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","pkg-name":"heaps","pkg-version":"0.4","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"66b19fcd813b0e4db3e0bac541bd46606c3b13d3d081d9f9666f4be0f5ff14b8","pkg-src-sha256":"89329df8b95ae99ef272e41e7a2d0fe2f1bb7eacfcc34bc01664414b33067cfd","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","pkg-name":"js-dgtable","pkg-version":"0.5.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"f75cb4fa53c88c65794becdd48eb0d3b2b8abd89a3d5c19e87af91f5225c15e4","pkg-src-sha256":"e28dd65bee8083b17210134e22e01c6349dc33c3b7bd17705973cd014e9f20ac","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","pkg-name":"js-flot","pkg-version":"0.8.3","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"4c1c447a9a2fba0adba6d30678302a30c32b9dfde9e7aa9e9156483e1545096d","pkg-src-sha256":"1ba2f2a6b8d85da76c41f526c98903cbb107f8642e506c072c1e7e3c20fe5e7a","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","pkg-name":"js-jquery","pkg-version":"3.3.1","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"59ab6c79159549ef94b584abce8e6d3b336014c2cce1337b59a8f637e2856df5","pkg-src-sha256":"e0e0681f0da1130ede4e03a051630ea439c458cb97216cdb01771ebdbe44069b","depends":["base-4.18.2.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"mtl-2.3.1","pkg-name":"mtl","pkg-version":"2.3.1","depends":["base-4.18.2.0","transformers-0.6.1.0"]},{"type":"configured","id":"os-string-2.0.6-01e3c1e4563fbed004a4ac273e2beea9dfd497789ab9039e09b96161f470a497","pkg-name":"os-string","pkg-version":"2.0.6","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"7699e7ae9bf74d056a62f384ceef8dfb2aa660f3f7c8016e9703f3b995e5e030","pkg-src-sha256":"22fcc7d5fc66676b5dfc57b714d2caf93cce2d5a79d242168352f9eb0fe2f18a","depends":["base-4.18.2.0","bytestring-0.11.5.3","deepseq-1.4.8.1","exceptions-0.10.7","template-haskell-2.20.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"parsec-3.1.16.1","pkg-name":"parsec","pkg-version":"3.1.16.1","depends":["base-4.18.2.0","bytestring-0.11.5.3","mtl-2.3.1","text-2.0.2"]},{"type":"pre-existing","id":"pretty-1.1.3.6","pkg-name":"pretty","pkg-version":"1.1.3.6","depends":["base-4.18.2.0","deepseq-1.4.8.1","ghc-prim-0.10.0"]},{"type":"configured","id":"primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","pkg-name":"primitive","pkg-version":"0.9.0.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"2e08c5409e3559c7f1669ef50e9a0d9a397e68ecf51110d5e2cedf05cdd7d93c","pkg-src-sha256":"696d4bd291c94d736142d6182117dca4258d3ef28bfefdb649ac8b5ecd0999c7","depends":["base-4.18.2.0","deepseq-1.4.8.1","template-haskell-2.20.0.0","transformers-0.6.1.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"process-1.6.25.0-d827dfe321191070c76b83bae4b4bdda770a9d3edfefae17d687e5eaf31c73f8","pkg-name":"process","pkg-version":"1.6.25.0","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"9a0b2ef8096517fa0e0c7a5e9a5c2ae5744ed824c3331005f9408245810df345","pkg-src-sha256":"496fe0566c3915b112e9772ac9c967dfeb8d5ca04895e54ae0160522bee76e65","components":{"lib":{"depends":["base-4.18.2.0","deepseq-1.4.8.1","directory-1.3.9.0-328618091283420235f7b56cc39ee71bcc68c5832981997a8ca03318b84d66a1","filepath-1.4.200.1","unix-2.8.4.0"],"exe-depends":[]}}},{"type":"configured","id":"random-1.2.1.2-ccb717c59af131f21dfc040f6185e9cbf4f0b5a3f6de1b3b376d50859a348586","pkg-name":"random","pkg-version":"1.2.1.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"32397de181e20ccaacf806ec70de9308cf044f089a2be37c936f3f8967bde867","pkg-src-sha256":"790f4dc2d2327c453ff6aac7bf15399fd123d55e927935f68f84b5df42d9a4b4","depends":["base-4.18.2.0","bytestring-0.11.5.3","deepseq-1.4.8.1","mtl-2.3.1","splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.8-668bfd1b5363b1b0ed085582ab645439fdd43abbcf64e8c03b6359b2fb12bbe3","pkg-name":"shake","pkg-version":"0.19.8","flags":{"cloud":false,"embed-files":false,"portable":false,"threaded":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"03c8f06de478e07ad6fde95984c9206920106d0d8432ecb7ab825ef108d45382","pkg-src-sha256":"6384e33a26a2590bf33719e88881076b899ac4b5340c1c9271e4caa37e9d6535","depends":["base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","directory-1.3.9.0-328618091283420235f7b56cc39ee71bcc68c5832981997a8ca03318b84d66a1","extra-1.7.16-49c389d3b325bb7343680a6b0593e42c3360ddbc37966713ffc950eadeee2718","filepath-1.4.200.1","filepattern-0.1.3-3194156282913050e18f34c4b4372b115c3784a9b535128618a739dd7cb95f74","hashable-1.5.0.0-0ac0785933877296ccb7501af740625424a60e762d9e13c3f7fb819fa7014b88","heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","process-1.6.25.0-d827dfe321191070c76b83bae4b4bdda770a9d3edfefae17d687e5eaf31c73f8","random-1.2.1.2-ccb717c59af131f21dfc040f6185e9cbf4f0b5a3f6de1b3b376d50859a348586","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0","unordered-containers-0.2.20-0a8211d6220ec0e6694f219bbea9da08528b897266f5898f98f4d6e1ab6fd737","utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"shake-0.19.8-e-shake-56a401e0d0ca4160baedc0625bfdea06f42ae949435de0508a7d79941f5956ae","pkg-name":"shake","pkg-version":"0.19.8","flags":{"cloud":false,"embed-files":false,"portable":false,"threaded":true},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"03c8f06de478e07ad6fde95984c9206920106d0d8432ecb7ab825ef108d45382","pkg-src-sha256":"6384e33a26a2590bf33719e88881076b899ac4b5340c1c9271e4caa37e9d6535","depends":["base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","directory-1.3.9.0-328618091283420235f7b56cc39ee71bcc68c5832981997a8ca03318b84d66a1","extra-1.7.16-49c389d3b325bb7343680a6b0593e42c3360ddbc37966713ffc950eadeee2718","filepath-1.4.200.1","filepattern-0.1.3-3194156282913050e18f34c4b4372b115c3784a9b535128618a739dd7cb95f74","hashable-1.5.0.0-0ac0785933877296ccb7501af740625424a60e762d9e13c3f7fb819fa7014b88","heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","process-1.6.25.0-d827dfe321191070c76b83bae4b4bdda770a9d3edfefae17d687e5eaf31c73f8","random-1.2.1.2-ccb717c59af131f21dfc040f6185e9cbf4f0b5a3f6de1b3b376d50859a348586","time-1.12.2","transformers-0.6.1.0","unix-2.8.4.0","unordered-containers-0.2.20-0a8211d6220ec0e6694f219bbea9da08528b897266f5898f98f4d6e1ab6fd737","utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05"],"exe-depends":[],"component-name":"exe:shake","bin-file":"/store/ghc-9.6.4/shake-0.19.8-e-shake-56a401e0d0ca4160baedc0625bfdea06f42ae949435de0508a7d79941f5956ae/bin/shake"},{"type":"configured","id":"splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","pkg-name":"splitmix","pkg-version":"0.1.0.5","flags":{"optimised-mixer":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"caa9b4a92abf1496c7f6a3c0f4e357426a54880077cb9f04e260a8bfa034b77b","pkg-src-sha256":"9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002","depends":["base-4.18.2.0","deepseq-1.4.8.1"],"exe-depends":[],"component-name":"lib"},{"type":"pre-existing","id":"stm-2.5.1.0","pkg-name":"stm","pkg-version":"2.5.1.0","depends":["array-0.5.6.0","base-4.18.2.0"]},{"type":"pre-existing","id":"system-cxx-std-lib-1.0","pkg-name":"system-cxx-std-lib","pkg-version":"1.0","depends":[]},{"type":"pre-existing","id":"template-haskell-2.20.0.0","pkg-name":"template-haskell","pkg-version":"2.20.0.0","depends":["base-4.18.2.0","ghc-boot-th-9.6.4","ghc-prim-0.10.0","pretty-1.1.3.6"]},{"type":"pre-existing","id":"text-2.0.2","pkg-name":"text","pkg-version":"2.0.2","depends":["array-0.5.6.0","base-4.18.2.0","binary-0.8.9.1","bytestring-0.11.5.3","deepseq-1.4.8.1","ghc-prim-0.10.0","system-cxx-std-lib-1.0","template-haskell-2.20.0.0"]},{"type":"pre-existing","id":"time-1.12.2","pkg-name":"time","pkg-version":"1.12.2","depends":["base-4.18.2.0","deepseq-1.4.8.1"]},{"type":"pre-existing","id":"transformers-0.6.1.0","pkg-name":"transformers","pkg-version":"0.6.1.0","depends":["base-4.18.2.0","ghc-prim-0.10.0"]},{"type":"pre-existing","id":"unix-2.8.4.0","pkg-name":"unix","pkg-version":"2.8.4.0","depends":["base-4.18.2.0","bytestring-0.11.5.3","filepath-1.4.200.1","time-1.12.2"]},{"type":"configured","id":"unordered-containers-0.2.20-0a8211d6220ec0e6694f219bbea9da08528b897266f5898f98f4d6e1ab6fd737","pkg-name":"unordered-containers","pkg-version":"0.2.20","flags":{"debug":false},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"c7fe9cba405ed9905e12d89c7add3b3eb9868dfba7975e70ba0cdd64b7b11abc","pkg-src-sha256":"d9cfb287cf00592d39dc9c3cac8b99627ea08f2c01798e70130fc39f7c90f11d","depends":["base-4.18.2.0","deepseq-1.4.8.1","hashable-1.5.0.0-0ac0785933877296ccb7501af740625424a60e762d9e13c3f7fb819fa7014b88","template-haskell-2.20.0.0"],"exe-depends":[],"component-name":"lib"},{"type":"configured","id":"utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05","pkg-name":"utf8-string","pkg-version":"1.0.2","flags":{},"style":"global","pkg-src":{"type":"repo-tar","repo":{"type":"secure-repo","uri":"http://hackage.haskell.org/"}},"pkg-cabal-sha256":"79416292186feeaf1f60e49ac5a1ffae9bf1b120e040a74bf0e81ca7f1d31d3f","pkg-src-sha256":"ee48deada7600370728c4156cb002441de770d0121ae33a68139a9ed9c19b09a","depends":["base-4.18.2.0","bytestring-0.11.5.3"],"exe-depends":[],"component-name":"lib"}],"targets":[{"pkg-name":"Cabal","pkg-version":"3.10.3.0","component-name":"lib","available":[{"id":"Cabal-3.10.3.0-fe9a4e2f6d3b51cf239a0d0da645c840fdf30442a7a2c83062b7b54358dc4a48","component-name":"lib","build-by-default":true}]},{"pkg-name":"Cabal-syntax","pkg-version":"3.10.3.0","component-name":"lib","available":[{"id":"Cabal-syntax-3.10.3.0-88e1285e7405dfb1ce1417f2f1349cb91008f5a0d0381097b42750183978e546","component-name":"lib","build-by-default":true}]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"lib","available":[{"id":"QuickCheck-2.14.3-12660abe9f5c6a28f87584c784112e82267cee7f5b9b5a1823ce30f9270ebf1a","component-name":"lib","build-by-default":true}]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-gcoarbitrary","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-generators","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-gshrink","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-misc","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-monadfix","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-split","available":["TargetNotLocal"]},{"pkg-name":"QuickCheck","pkg-version":"2.14.3","component-name":"test:test-quickcheck-terminal","available":["TargetNotLocal"]},{"pkg-name":"array","pkg-version":"0.5.6.0","component-name":"lib","available":[{"id":"array-0.5.6.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"base","pkg-version":"4.18.2.0","component-name":"lib","available":[{"id":"base-4.18.2.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"binary","pkg-version":"0.8.9.1","component-name":"lib","available":[{"id":"binary-0.8.9.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"bytestring","pkg-version":"0.11.5.3","component-name":"lib","available":[{"id":"bytestring-0.11.5.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"lib","available":[{"id":"clock-0.8.4-b6af39fafa1fb93e9520050c562fc2d9803a08bc83cda5d8b8d907beefe150aa","component-name":"lib","build-by-default":true}]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"clock","pkg-version":"0.8.4","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"containers","pkg-version":"0.6.7","component-name":"lib","available":[{"id":"containers-0.6.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"deepseq","pkg-version":"1.4.8.1","component-name":"lib","available":[{"id":"deepseq-1.4.8.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory","pkg-version":"1.3.9.0","component-name":"lib","available":[{"id":"directory-1.3.9.0-328618091283420235f7b56cc39ee71bcc68c5832981997a8ca03318b84d66a1","component-name":"lib","build-by-default":true}]},{"pkg-name":"directory","pkg-version":"1.3.9.0","component-name":"test:test","available":["TargetNotLocal"]},{"pkg-name":"exceptions","pkg-version":"0.10.7","component-name":"lib","available":[{"id":"exceptions-0.10.7","component-name":"lib","build-by-default":true}]},{"pkg-name":"extra","pkg-version":"1.7.16","component-name":"lib","available":[{"id":"extra-1.7.16-49c389d3b325bb7343680a6b0593e42c3360ddbc37966713ffc950eadeee2718","component-name":"lib","build-by-default":true}]},{"pkg-name":"extra","pkg-version":"1.7.16","component-name":"test:extra-test","available":["TargetNotLocal"]},{"pkg-name":"file-io","pkg-version":"0.1.4","component-name":"lib","available":[{"id":"file-io-0.1.4-51915db079f01c9a6495d8a267894a9aed6b6b8f7c11259c9d5da53628dd167f","component-name":"lib","build-by-default":true}]},{"pkg-name":"file-io","pkg-version":"0.1.4","component-name":"test:CLC237","available":["TargetNotLocal"]},{"pkg-name":"file-io","pkg-version":"0.1.4","component-name":"test:Properties","available":["TargetNotLocal"]},{"pkg-name":"file-io","pkg-version":"0.1.4","component-name":"test:T14","available":["TargetNotLocal"]},{"pkg-name":"file-io","pkg-version":"0.1.4","component-name":"test:T15","available":["TargetNotLocal"]},{"pkg-name":"file-io","pkg-version":"0.1.4","component-name":"test:T15Win","available":["TargetNotLocal"]},{"pkg-name":"file-io","pkg-version":"0.1.4","component-name":"test:T8","available":["TargetNotLocal"]},{"pkg-name":"filepath","pkg-version":"1.4.200.1","component-name":"lib","available":[{"id":"filepath-1.4.200.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"filepattern","pkg-version":"0.1.3","component-name":"lib","available":[{"id":"filepattern-0.1.3-3194156282913050e18f34c4b4372b115c3784a9b535128618a739dd7cb95f74","component-name":"lib","build-by-default":true}]},{"pkg-name":"filepattern","pkg-version":"0.1.3","component-name":"test:filepattern-test","available":["TargetNotLocal"]},{"pkg-name":"ghc-bignum","pkg-version":"1.3","component-name":"lib","available":[{"id":"ghc-bignum-1.3","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-boot-th","pkg-version":"9.6.4","component-name":"lib","available":[{"id":"ghc-boot-th-9.6.4","component-name":"lib","build-by-default":true}]},{"pkg-name":"ghc-prim","pkg-version":"0.10.0","component-name":"lib","available":[{"id":"ghc-prim-0.10.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"hadrian","pkg-version":"0.1.0.0","component-name":"exe:hadrian","available":[{"id":"hadrian-0.1.0.0-inplace-hadrian","component-name":"exe:hadrian","build-by-default":true}]},{"pkg-name":"hashable","pkg-version":"1.5.0.0","component-name":"lib","available":[{"id":"hashable-1.5.0.0-0ac0785933877296ccb7501af740625424a60e762d9e13c3f7fb819fa7014b88","component-name":"lib","build-by-default":true}]},{"pkg-name":"hashable","pkg-version":"1.5.0.0","component-name":"test:hashable-examples","available":["TargetNotLocal"]},{"pkg-name":"hashable","pkg-version":"1.5.0.0","component-name":"test:hashable-tests","available":["TargetNotLocal"]},{"pkg-name":"hashable","pkg-version":"1.5.0.0","component-name":"test:xxhash-tests","available":["TargetNotLocal"]},{"pkg-name":"heaps","pkg-version":"0.4","component-name":"lib","available":[{"id":"heaps-0.4-582bc0f356369f4ac6a9badb439391d1ff82a6d0d7a4a55fe3db91d6d1a32875","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-dgtable","pkg-version":"0.5.2","component-name":"lib","available":[{"id":"js-dgtable-0.5.2-40721bc9982faf5e0f71e3119e01102f429fefca9219230921535f5382e177f7","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-dgtable","pkg-version":"0.5.2","component-name":"test:js-dgtable-test","available":["TargetNotLocal"]},{"pkg-name":"js-flot","pkg-version":"0.8.3","component-name":"lib","available":[{"id":"js-flot-0.8.3-fadd4ccb467ede662552cdc382e02fb02027d8181620f296bae75d1f76774b0b","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-flot","pkg-version":"0.8.3","component-name":"test:js-flot-test","available":["TargetNotLocal"]},{"pkg-name":"js-jquery","pkg-version":"3.3.1","component-name":"lib","available":[{"id":"js-jquery-3.3.1-6a8cc1e84fc203e099644c71b32217b6615b055459038eb73f1b008db4b2f236","component-name":"lib","build-by-default":true}]},{"pkg-name":"js-jquery","pkg-version":"3.3.1","component-name":"test:js-jquery-test","available":["TargetNotLocal"]},{"pkg-name":"mtl","pkg-version":"2.3.1","component-name":"lib","available":[{"id":"mtl-2.3.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"os-string","pkg-version":"2.0.6","component-name":"lib","available":[{"id":"os-string-2.0.6-01e3c1e4563fbed004a4ac273e2beea9dfd497789ab9039e09b96161f470a497","component-name":"lib","build-by-default":true}]},{"pkg-name":"os-string","pkg-version":"2.0.6","component-name":"test:bytestring-tests","available":["TargetNotLocal"]},{"pkg-name":"os-string","pkg-version":"2.0.6","component-name":"test:encoding-tests","available":["TargetNotLocal"]},{"pkg-name":"os-string","pkg-version":"2.0.6","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"parsec","pkg-version":"3.1.16.1","component-name":"lib","available":[{"id":"parsec-3.1.16.1","component-name":"lib","build-by-default":true}]},{"pkg-name":"pretty","pkg-version":"1.1.3.6","component-name":"lib","available":[{"id":"pretty-1.1.3.6","component-name":"lib","build-by-default":true}]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"lib","available":[{"id":"primitive-0.9.0.0-b327a6c8ea4577ea7938607770d363048048a528efdff4bc67a582b5feac66fc","component-name":"lib","build-by-default":true}]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"test:test-qc","available":["TargetNotLocal"]},{"pkg-name":"primitive","pkg-version":"0.9.0.0","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"process","pkg-version":"1.6.25.0","component-name":"lib","available":[{"id":"process-1.6.25.0-d827dfe321191070c76b83bae4b4bdda770a9d3edfefae17d687e5eaf31c73f8","component-name":"lib","build-by-default":true}]},{"pkg-name":"random","pkg-version":"1.2.1.2","component-name":"lib","available":[{"id":"random-1.2.1.2-ccb717c59af131f21dfc040f6185e9cbf4f0b5a3f6de1b3b376d50859a348586","component-name":"lib","build-by-default":true}]},{"pkg-name":"random","pkg-version":"1.2.1.2","component-name":"test:doctests","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.2","component-name":"test:legacy-test","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.2","component-name":"test:spec","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.2","component-name":"test:spec-inspection","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.2","component-name":"bench:bench","available":["TargetNotLocal"]},{"pkg-name":"random","pkg-version":"1.2.1.2","component-name":"bench:legacy-bench","available":["TargetNotLocal"]},{"pkg-name":"shake","pkg-version":"0.19.8","component-name":"lib","available":[{"id":"shake-0.19.8-668bfd1b5363b1b0ed085582ab645439fdd43abbcf64e8c03b6359b2fb12bbe3","component-name":"lib","build-by-default":true}]},{"pkg-name":"shake","pkg-version":"0.19.8","component-name":"exe:shake","available":[{"id":"shake-0.19.8-e-shake-56a401e0d0ca4160baedc0625bfdea06f42ae949435de0508a7d79941f5956ae","component-name":"exe:shake","build-by-default":true}]},{"pkg-name":"shake","pkg-version":"0.19.8","component-name":"test:shake-test","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"lib","available":[{"id":"splitmix-0.1.0.5-232d2b1a4ce5cacd620dd2472d411c8d63e777af17182b5d56b631942f729187","component-name":"lib","build-by-default":true}]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:examples","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:initialization","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:montecarlo-pi","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:montecarlo-pi-32","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-dieharder","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-tests","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"test:splitmix-testu01","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:comparison","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:range","available":["TargetNotLocal"]},{"pkg-name":"splitmix","pkg-version":"0.1.0.5","component-name":"bench:simple-sum","available":["TargetNotLocal"]},{"pkg-name":"stm","pkg-version":"2.5.1.0","component-name":"lib","available":[{"id":"stm-2.5.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"system-cxx-std-lib","pkg-version":"1.0","component-name":"lib","available":[{"id":"system-cxx-std-lib-1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"template-haskell","pkg-version":"2.20.0.0","component-name":"lib","available":[{"id":"template-haskell-2.20.0.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"text","pkg-version":"2.0.2","component-name":"lib","available":[{"id":"text-2.0.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"time","pkg-version":"1.12.2","component-name":"lib","available":[{"id":"time-1.12.2","component-name":"lib","build-by-default":true}]},{"pkg-name":"transformers","pkg-version":"0.6.1.0","component-name":"lib","available":[{"id":"transformers-0.6.1.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"unix","pkg-version":"2.8.4.0","component-name":"lib","available":[{"id":"unix-2.8.4.0","component-name":"lib","build-by-default":true}]},{"pkg-name":"unordered-containers","pkg-version":"0.2.20","component-name":"lib","available":[{"id":"unordered-containers-0.2.20-0a8211d6220ec0e6694f219bbea9da08528b897266f5898f98f4d6e1ab6fd737","component-name":"lib","build-by-default":true}]},{"pkg-name":"unordered-containers","pkg-version":"0.2.20","component-name":"test:unordered-containers-tests","available":["TargetNotLocal"]},{"pkg-name":"unordered-containers","pkg-version":"0.2.20","component-name":"bench:benchmarks","available":["TargetNotLocal"]},{"pkg-name":"utf8-string","pkg-version":"1.0.2","component-name":"lib","available":[{"id":"utf8-string-1.0.2-134849f72bdb35a6754bed838d5c0f0412c3ca2863338b599b4cd9b0af070e05","component-name":"lib","build-by-default":true}]},{"pkg-name":"utf8-string","pkg-version":"1.0.2","component-name":"test:unit-tests","available":["TargetNotLocal"]}]} \ No newline at end of file diff --git a/scripts/check-compiler-materialization/default.nix b/scripts/check-compiler-materialization/default.nix index 3cb71d0b1d..477474c028 100644 --- a/scripts/check-compiler-materialization/default.nix +++ b/scripts/check-compiler-materialization/default.nix @@ -19,32 +19,22 @@ in builtins.listToAttrs (builtins.concatMap (system: builtins.concatMap (compile # given GHC version are checked. { name = "${prefix}-extra"; value = (pkgs.haskell-nix.roots' compiler-nix-name).ghc-extra-projects-nix or {}; } { name = "${prefix}-boot"; value = pkgs.ghc-boot-packages-nix.${compiler-nix-name}; } - { name = "${prefix}-iserv"; value = pkgs.haskell-nix.iserv-proxy-exes.${compiler-nix-name}.iserv-proxy.project.plan-nix; } - { name = "${prefix}-iserv-int"; value = pkgs.haskell-nix.iserv-proxy-exes.${compiler-nix-name}.iserv-proxy-interpreter.project.plan-nix; } { name = "${prefix}-hello"; value = (pkgs.haskell-nix.tool compiler-nix-name "hello" {}).project.plan-nix; } ] ++ eval.lib.optionals (!__elem system ["aarch64-darwin" "aarch64-linux" "x86_64-darwin"]) [ { name = "${prefix}-windows"; value = (pkgsForWindows.pkgsCross.mingwW64.haskell-nix.roots' compiler-nix-name).ghc-extra-projects-nix or {}; } - { name = "${prefix}-iserv-windows"; value = pkgsForWindows.pkgsCross.mingwW64.haskell-nix.iserv-proxy-exes.${compiler-nix-name}.iserv-proxy.project.plan-nix; } - { name = "${prefix}-iserv-int-windows"; value = pkgsForWindows.pkgsCross.mingwW64.haskell-nix.iserv-proxy-exes.${compiler-nix-name}.iserv-proxy-interpreter.project.plan-nix; } { name = "${prefix}-hello-windows"; value = (pkgsForWindows.pkgsCross.mingwW64.haskell-nix.tool compiler-nix-name "hello" {}).project.plan-nix; } ] ++ eval.lib.optionals (system == "x86_64-linux") [ # In some cased you may need comment out one or more of these if the GHC version needed cannot be built. { name = "${prefix}-musl"; value = (pkgs.pkgsCross.musl64.haskell-nix.roots' compiler-nix-name).ghc-extra-projects-nix or {}; } - { name = "${prefix}-iserv-musl"; value = pkgs.pkgsCross.musl64.haskell-nix.iserv-proxy-exes.${compiler-nix-name}.iserv-proxy.project.plan-nix; } - { name = "${prefix}-iserv-int-musl"; value = pkgs.pkgsCross.musl64.haskell-nix.iserv-proxy-exes.${compiler-nix-name}.iserv-proxy-interpreter.project.plan-nix; } { name = "${prefix}-hello-musl"; value = (pkgs.pkgsCross.musl64.haskell-nix.tool compiler-nix-name "hello" {}).project.plan-nix; } ] ++ eval.lib.optionals (system == "x86_64-linux" && !__elem compiler-nix-name ["ghc901" "ghc921" "ghc941" "ghc942" "ghc943"]) [ { name = "${prefix}-arm"; value = (pkgs.pkgsCross.aarch64-multiplatform.haskell-nix.roots' compiler-nix-name).ghc-extra-projects-nix or {}; } - { name = "${prefix}-iserv-arm"; value = pkgs.pkgsCross.aarch64-multiplatform.haskell-nix.iserv-proxy-exes.${compiler-nix-name}.iserv-proxy.project.plan-nix; } - { name = "${prefix}-iserv-int-arm"; value = pkgs.pkgsCross.aarch64-multiplatform.haskell-nix.iserv-proxy-exes.${compiler-nix-name}.iserv-proxy-interpreter.project.plan-nix; } { name = "${prefix}-hello-arm"; value = (pkgs.pkgsCross.aarch64-multiplatform.haskell-nix.tool compiler-nix-name "hello" {}).project.plan-nix; } ] ++ eval.lib.optionals ( (system == "aarch64-linux" && !__elem compiler-nix-name ["ghc8107" "ghc901" "ghc902" "ghc921" "ghc922" "ghc923" "ghc924" "ghc925" "ghc926" "ghc941" "ghc942" "ghc943"]) || (system == "x86_64-linux" && !__elem compiler-nix-name ["ghc8107" "ghc901" "ghc902" "ghc921" "ghc922" "ghc923" "ghc924" "ghc925" "ghc926" "ghc941" "ghc942" "ghc943" "ghc944" "ghc945" "ghc947" "ghc961" "ghc962" "ghc963" "ghc964" "ghc965"])) [ { name = "${prefix}-arm-musl"; value = (pkgs.pkgsCross.aarch64-multiplatform-musl.haskell-nix.roots' compiler-nix-name).ghc-extra-projects-nix or {}; } - { name = "${prefix}-iserv-arm-musl"; value = pkgs.pkgsCross.aarch64-multiplatform-musl.haskell-nix.iserv-proxy-exes.${compiler-nix-name}.iserv-proxy.project.plan-nix; } - { name = "${prefix}-iserv-int-arm-musl"; value = pkgs.pkgsCross.aarch64-multiplatform-musl.haskell-nix.iserv-proxy-exes.${compiler-nix-name}.iserv-proxy-interpreter.project.plan-nix; } { name = "${prefix}-hello-arm-musl"; value = (pkgs.pkgsCross.aarch64-multiplatform-musl.haskell-nix.tool compiler-nix-name "hello" {}).project.plan-nix; } ] ++ eval.lib.optionals ( (system == "x86_64-linux" && __elem compiler-nix-name ["ghc8107" "ghc961" "ghc962" "ghc963" "ghc964" "ghc965" "ghc981" "ghc982" "ghc983" "ghc984" "ghc9101"]) From 7d21e3bc8d506b5ebc98cf79d21fc1d970de0b9d Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 13 Mar 2025 22:15:03 +1300 Subject: [PATCH 195/206] Add materialized files --- .../ghc96720250227-aarch64/base.nix | 49 +++++++++++++ .../deriveConstants.nix | 39 +++++++++++ .../ghc96720250227-aarch64/genprimopcode.nix | 40 +++++++++++ .../ghc96720250227-aarch64/ghc-bignum.nix | 37 ++++++++++ .../ghc96720250227-aarch64/ghc-boot.nix | 46 +++++++++++++ .../ghc96720250227-aarch64/ghc-heap.nix | 36 ++++++++++ .../ghc96720250227-aarch64/ghc-prim.nix | 47 +++++++++++++ .../ghc96720250227-aarch64/ghc.nix | 69 +++++++++++++++++++ .../ghc96720250227-aarch64/ghci.nix | 45 ++++++++++++ .../ghc96720250227-aarch64/hpc.nix | 38 ++++++++++ .../ghc96720250227-aarch64/integer-gmp.nix | 35 ++++++++++ .../ghc96720250227-aarch64/iserv.nix | 42 +++++++++++ .../ghc96720250227-aarch64/libiserv.nix | 38 ++++++++++ .../ghc96720250227-aarch64/remote-iserv.nix | 36 ++++++++++ .../template-haskell.nix | 36 ++++++++++ 15 files changed, 633 insertions(+) create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/base.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/deriveConstants.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/genprimopcode.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc-bignum.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc-boot.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc-heap.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc-prim.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghci.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/hpc.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/integer-gmp.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/iserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/libiserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/remote-iserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/template-haskell.nix diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/base.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/base.nix new file mode 100644 index 0000000000..1f649a4341 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/base.nix @@ -0,0 +1,49 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "base"; version = "4.18.3.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "Core Libraries Committee "; + author = ""; + homepage = ""; + url = ""; + synopsis = "Core data structures and operations"; + description = "Haskell's base library provides, among other things, core types (e.g. [Bool](\"Data.Bool\") and [Int](\"Data.Int\")),\ndata structures (e.g. [List](\"Data.List\"), [Tuple](\"Data.Tuple\") and [Maybe](\"Data.Maybe\")),\nthe [Exception](\"Control.Exception\") mechanism, and the [IO](\"System.IO\") & [Concurrency](\"Control.Concurrent\") operations.\nThe \"Prelude\" module, which is imported by default, exposes a curated set of types and functions from other modules.\n\nOther data structures like [Map](https://hackage.haskell.org/package/containers/docs/Data-Map.html),\n[Set](https://hackage.haskell.org/package/containers/docs/Data-Set.html) are available in the [containers](https://hackage.haskell.org/package/containers) library.\nTo work with textual data, use the [text](https://hackage.haskell.org/package/text/docs/Data-Text.html) library."; + buildType = "Configure"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."ghc-bignum" or (errorHandler.buildDepError "ghc-bignum")) + ]; + libs = pkgs.lib.optionals (system.isWindows) [ + (pkgs."wsock32" or (errorHandler.sysDepError "wsock32")) + (pkgs."user32" or (errorHandler.sysDepError "user32")) + (pkgs."shell32" or (errorHandler.sysDepError "shell32")) + (pkgs."mingw32" or (errorHandler.sysDepError "mingw32")) + (pkgs."kernel32" or (errorHandler.sysDepError "kernel32")) + (pkgs."advapi32" or (errorHandler.sysDepError "advapi32")) + (pkgs."mingwex" or (errorHandler.sysDepError "mingwex")) + (pkgs."ws2_32" or (errorHandler.sysDepError "ws2_32")) + (pkgs."shlwapi" or (errorHandler.sysDepError "shlwapi")) + (pkgs."ole32" or (errorHandler.sysDepError "ole32")) + (pkgs."rpcrt4" or (errorHandler.sysDepError "rpcrt4")) + (pkgs."ntdll" or (errorHandler.sysDepError "ntdll")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/deriveConstants.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/deriveConstants.nix new file mode 100644 index 0000000000..135cdd02f6 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/deriveConstants.nix @@ -0,0 +1,39 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "deriveConstants"; version = "0.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Derive header files containing various constants for the GHC build process"; + description = "This utility is responsible for generating a number of C header files\nneeded during the GHC build process. See @rts/include/ghc.mk@ in the GHC\nbuild system for details."; + buildType = "Simple"; + }; + components = { + exes = { + "deriveConstants" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."process" or (errorHandler.buildDepError "process")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/genprimopcode.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/genprimopcode.nix new file mode 100644 index 0000000000..49bbe516ba --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/genprimopcode.nix @@ -0,0 +1,40 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { build-tool-depends = true; }; + package = { + specVersion = "2.0"; + identifier = { name = "genprimopcode"; version = "0.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Generates various files implementing GHC's primitive operations."; + description = "This utility reads a textual description of GHC's primitive operations\n(@primops.txt.pp@) and produces a number of outputs. These include,\n\n* the @GHC.Prim@ module included in the @ghc-prim@ package.\n* the @GHC.PrimopWrappers@ module included in the @ghc-prim@ package.\n* an LaTeX document describing the primitive operations."; + buildType = "Simple"; + }; + components = { + exes = { + "genprimopcode" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + ]; + build-tools = pkgs.lib.optionals (flags.build-tool-depends) [ + (hsPkgs.pkgsBuildBuild.alex.components.exes.alex or (pkgs.pkgsBuildBuild.alex or (errorHandler.buildToolDepError "alex:alex"))) + (hsPkgs.pkgsBuildBuild.happy.components.exes.happy or (pkgs.pkgsBuildBuild.happy or (errorHandler.buildToolDepError "happy:happy"))) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc-bignum.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc-bignum.nix new file mode 100644 index 0000000000..46af6e0e9f --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc-bignum.nix @@ -0,0 +1,37 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { native = false; ffi = false; gmp = false; check = false; }; + package = { + specVersion = "2.0"; + identifier = { name = "ghc-bignum"; version = "1.3"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = "Sylvain Henry"; + homepage = ""; + url = ""; + synopsis = "GHC BigNum library"; + description = "This package provides the low-level implementation of the standard\n'BigNat', 'Natural' and 'Integer' types."; + buildType = "Configure"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + ]; + buildable = (if !flags.native && !flags.gmp && !flags.ffi + then false + else true) && (if flags.native && (flags.gmp || flags.ffi) + then false + else true) && (if flags.gmp && flags.ffi then false else true); + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc-boot.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc-boot.nix new file mode 100644 index 0000000000..bdb3851804 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc-boot.nix @@ -0,0 +1,46 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-boot"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Shared functionality between GHC and its boot libraries"; + description = "This library is shared between GHC, ghc-pkg, and other boot\nlibraries.\n.\nA note about \"GHC.Unit.Database\": it only deals with the subset of\nthe package database that the compiler cares about: modules\npaths etc and not package metadata like description, authors\netc. It is thus not a library interface to ghc-pkg and is *not*\nsuitable for modifying GHC package databases.\n.\nThe package database format and this library are constructed in\nsuch a way that while ghc-pkg depends on Cabal, the GHC library\nand program do not have to depend on Cabal."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + ]; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghc-boot-th" or (errorHandler.buildDepError "ghc-boot-th")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc-heap.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc-heap.nix new file mode 100644 index 0000000000..f8edabe13b --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc-heap.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-heap"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Functions for walking GHC's heap"; + description = "This package provides functions for walking the GHC heap data structures\nand retrieving information about those data structures."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc-prim.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc-prim.nix new file mode 100644 index 0000000000..a657675b58 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc-prim.nix @@ -0,0 +1,47 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "2.2"; + identifier = { name = "ghc-prim"; version = "0.10.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "GHC primitives"; + description = "This package contains the primitive types and operations supplied by GHC.\nIt is an internal package, only for the use of GHC developers.\nGHC users should not use it! If you do use it then expect\nbreaking changes at any time without warning. You should prefer\nto import @GHC.Exts@ from the @base@ package instead."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.process or (pkgs.pkgsBuildBuild.process or (errorHandler.setupDepError "process"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + ]; + }; + components = { + "library" = { + depends = [ (hsPkgs."rts" or (errorHandler.buildDepError "rts")) ]; + libs = pkgs.lib.optionals (system.isWindows) [ + (pkgs."user32" or (errorHandler.sysDepError "user32")) + (pkgs."mingw32" or (errorHandler.sysDepError "mingw32")) + (pkgs."mingwex" or (errorHandler.sysDepError "mingwex")) + (pkgs."ucrt" or (errorHandler.sysDepError "ucrt")) + ] ++ pkgs.lib.optionals (system.isLinux) [ + (pkgs."c" or (errorHandler.sysDepError "c")) + (pkgs."m" or (errorHandler.sysDepError "m")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc.nix new file mode 100644 index 0000000000..cb75e00e5c --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghc.nix @@ -0,0 +1,69 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { + internal-interpreter = false; + dynamic-system-linker = true; + build-tool-depends = true; + }; + package = { + specVersion = "2.2"; + identifier = { name = "ghc"; version = "9.6.7.20250227"; }; + 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"; + 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.\n\nSee \nfor more information."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.process or (pkgs.pkgsBuildBuild.process or (errorHandler.setupDepError "process"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + ]; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."process" or (errorHandler.buildDepError "process")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) + (hsPkgs."hpc" or (errorHandler.buildDepError "hpc")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + (hsPkgs."exceptions" or (errorHandler.buildDepError "exceptions")) + (hsPkgs."stm" or (errorHandler.buildDepError "stm")) + (hsPkgs."ghc-boot" or (errorHandler.buildDepError "ghc-boot")) + (hsPkgs."ghc-heap" or (errorHandler.buildDepError "ghc-heap")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ] ++ (if system.isWindows + then [ (hsPkgs."Win32" or (errorHandler.buildDepError "Win32")) ] + else [ (hsPkgs."unix" or (errorHandler.buildDepError "unix")) ]); + build-tools = pkgs.lib.optionals (flags.build-tool-depends) [ + (hsPkgs.pkgsBuildBuild.alex.components.exes.alex or (pkgs.pkgsBuildBuild.alex or (errorHandler.buildToolDepError "alex:alex"))) + (hsPkgs.pkgsBuildBuild.happy.components.exes.happy or (pkgs.pkgsBuildBuild.happy or (errorHandler.buildToolDepError "happy:happy"))) + (hsPkgs.pkgsBuildBuild.genprimopcode.components.exes.genprimopcode or (pkgs.pkgsBuildBuild.genprimopcode or (errorHandler.buildToolDepError "genprimopcode:genprimopcode"))) + (hsPkgs.pkgsBuildBuild.deriveConstants.components.exes.deriveConstants or (pkgs.pkgsBuildBuild.deriveConstants or (errorHandler.buildToolDepError "deriveConstants:deriveConstants"))) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghci.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghci.nix new file mode 100644 index 0000000000..3cc6975487 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/ghci.nix @@ -0,0 +1,45 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { internal-interpreter = false; }; + package = { + specVersion = "1.10"; + identifier = { name = "ghci"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "The library supporting GHC's interactive interpreter"; + 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"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."ghc-boot" or (errorHandler.buildDepError "ghc-boot")) + (hsPkgs."ghc-heap" or (errorHandler.buildDepError "ghc-heap")) + (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/hpc.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/hpc.nix new file mode 100644 index 0000000000..c9d84dfbb7 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/hpc.nix @@ -0,0 +1,38 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "hpc"; version = "0.6.2.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = "Andy Gill"; + homepage = ""; + url = ""; + synopsis = "Code Coverage Library for Haskell"; + description = "This package provides the code coverage library for Haskell.\n\nSee for more\ninformation."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/integer-gmp.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/integer-gmp.nix new file mode 100644 index 0000000000..94f930e70e --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/integer-gmp.nix @@ -0,0 +1,35 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "2.0"; + identifier = { name = "integer-gmp"; version = "1.1"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "hvr@gnu.org"; + author = "Herbert Valerio Riedel"; + homepage = "https://www.haskell.org/ghc/"; + url = ""; + synopsis = "Integer library based on GMP"; + description = "This package used to provide an implementation of the standard 'Integer'\ntype based on the\n.\n\nIt is now deprecated in favor of the 'ghc-bignum' package.\n\nIts purpose is to provide backward compatibility for codes directly\ndepending on the `integer-gmp` package."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."ghc-bignum" or (errorHandler.buildDepError "ghc-bignum")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/iserv.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/iserv.nix new file mode 100644 index 0000000000..9badbbf56b --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/iserv.nix @@ -0,0 +1,42 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "iserv"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "iserv allows GHC to delegate Template Haskell computations"; + description = "GHC can be provided with a path to the iserv binary with\n@-pgmi=/path/to/iserv-bin@, and will in combination with\n@-fexternal-interpreter@, compile Template Haskell though the\n@iserv-bin@ delegate. This is very similar to how ghcjs has been\ncompiling Template Haskell, by spawning a separate delegate (so\ncalled runner on the javascript vm) and evaluating the splices\nthere.\n\nTo use iserv with cross compilers, please see @libraries/libiserv@\nand @utils/iserv-proxy@."; + buildType = "Simple"; + }; + components = { + exes = { + "iserv" = { + depends = [ + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + (hsPkgs."libiserv" or (errorHandler.buildDepError "libiserv")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/libiserv.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/libiserv.nix new file mode 100644 index 0000000000..ffe0a9ee99 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/libiserv.nix @@ -0,0 +1,38 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { network = false; }; + package = { + specVersion = "1.10"; + identifier = { name = "libiserv"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Provides shared functionality between iserv and iserv-proxy."; + description = "Provides shared functionality between iserv and iserv-proxy."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/remote-iserv.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/remote-iserv.nix new file mode 100644 index 0000000000..3431eb0712 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/remote-iserv.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "remote-iserv"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "Moritz Angermann "; + author = "Moritz Angermann "; + homepage = ""; + url = ""; + synopsis = "iserv allows GHC to delegate Template Haskell computations"; + description = "This is a very simple remote runner for iserv, to be used together\nwith iserv-proxy. The foundamental idea is that this this wrapper\nstarts running libiserv on a given port to which iserv-proxy will\nthen connect."; + buildType = "Simple"; + }; + components = { + exes = { + "remote-iserv" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."libiserv" or (errorHandler.buildDepError "libiserv")) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/template-haskell.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/template-haskell.nix new file mode 100644 index 0000000000..693b8f6a78 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-aarch64/template-haskell.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "template-haskell"; version = "2.20.0.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Support library for Template Haskell"; + description = "This package provides modules containing facilities for manipulating\nHaskell source code using Template Haskell.\n\nSee for more\ninformation."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-boot-th" or (errorHandler.buildDepError "ghc-boot-th")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."pretty" or (errorHandler.buildDepError "pretty")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } From 055950065dfe8916cf0bd6d99f21e8ba633fb266 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Thu, 13 Mar 2025 22:38:02 +1300 Subject: [PATCH 196/206] Add materialized files --- .../ghc96720250227llvm-aarch64/base.nix | 49 +++++++++++++ .../deriveConstants.nix | 39 +++++++++++ .../genprimopcode.nix | 40 +++++++++++ .../ghc96720250227llvm-aarch64/ghc-bignum.nix | 37 ++++++++++ .../ghc96720250227llvm-aarch64/ghc-boot.nix | 46 +++++++++++++ .../ghc96720250227llvm-aarch64/ghc-heap.nix | 36 ++++++++++ .../ghc96720250227llvm-aarch64/ghc-prim.nix | 47 +++++++++++++ .../ghc96720250227llvm-aarch64/ghc.nix | 69 +++++++++++++++++++ .../ghc96720250227llvm-aarch64/ghci.nix | 45 ++++++++++++ .../ghc96720250227llvm-aarch64/hpc.nix | 38 ++++++++++ .../integer-gmp.nix | 35 ++++++++++ .../ghc96720250227llvm-aarch64/iserv.nix | 42 +++++++++++ .../ghc96720250227llvm-aarch64/libiserv.nix | 38 ++++++++++ .../remote-iserv.nix | 36 ++++++++++ .../template-haskell.nix | 36 ++++++++++ 15 files changed, 633 insertions(+) create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/base.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/deriveConstants.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/genprimopcode.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc-bignum.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc-boot.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc-heap.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc-prim.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghci.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/hpc.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/integer-gmp.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/iserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/libiserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/remote-iserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/template-haskell.nix diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/base.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/base.nix new file mode 100644 index 0000000000..1f649a4341 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/base.nix @@ -0,0 +1,49 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "base"; version = "4.18.3.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "Core Libraries Committee "; + author = ""; + homepage = ""; + url = ""; + synopsis = "Core data structures and operations"; + description = "Haskell's base library provides, among other things, core types (e.g. [Bool](\"Data.Bool\") and [Int](\"Data.Int\")),\ndata structures (e.g. [List](\"Data.List\"), [Tuple](\"Data.Tuple\") and [Maybe](\"Data.Maybe\")),\nthe [Exception](\"Control.Exception\") mechanism, and the [IO](\"System.IO\") & [Concurrency](\"Control.Concurrent\") operations.\nThe \"Prelude\" module, which is imported by default, exposes a curated set of types and functions from other modules.\n\nOther data structures like [Map](https://hackage.haskell.org/package/containers/docs/Data-Map.html),\n[Set](https://hackage.haskell.org/package/containers/docs/Data-Set.html) are available in the [containers](https://hackage.haskell.org/package/containers) library.\nTo work with textual data, use the [text](https://hackage.haskell.org/package/text/docs/Data-Text.html) library."; + buildType = "Configure"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."ghc-bignum" or (errorHandler.buildDepError "ghc-bignum")) + ]; + libs = pkgs.lib.optionals (system.isWindows) [ + (pkgs."wsock32" or (errorHandler.sysDepError "wsock32")) + (pkgs."user32" or (errorHandler.sysDepError "user32")) + (pkgs."shell32" or (errorHandler.sysDepError "shell32")) + (pkgs."mingw32" or (errorHandler.sysDepError "mingw32")) + (pkgs."kernel32" or (errorHandler.sysDepError "kernel32")) + (pkgs."advapi32" or (errorHandler.sysDepError "advapi32")) + (pkgs."mingwex" or (errorHandler.sysDepError "mingwex")) + (pkgs."ws2_32" or (errorHandler.sysDepError "ws2_32")) + (pkgs."shlwapi" or (errorHandler.sysDepError "shlwapi")) + (pkgs."ole32" or (errorHandler.sysDepError "ole32")) + (pkgs."rpcrt4" or (errorHandler.sysDepError "rpcrt4")) + (pkgs."ntdll" or (errorHandler.sysDepError "ntdll")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/deriveConstants.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/deriveConstants.nix new file mode 100644 index 0000000000..135cdd02f6 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/deriveConstants.nix @@ -0,0 +1,39 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "deriveConstants"; version = "0.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Derive header files containing various constants for the GHC build process"; + description = "This utility is responsible for generating a number of C header files\nneeded during the GHC build process. See @rts/include/ghc.mk@ in the GHC\nbuild system for details."; + buildType = "Simple"; + }; + components = { + exes = { + "deriveConstants" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."process" or (errorHandler.buildDepError "process")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/genprimopcode.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/genprimopcode.nix new file mode 100644 index 0000000000..49bbe516ba --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/genprimopcode.nix @@ -0,0 +1,40 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { build-tool-depends = true; }; + package = { + specVersion = "2.0"; + identifier = { name = "genprimopcode"; version = "0.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Generates various files implementing GHC's primitive operations."; + description = "This utility reads a textual description of GHC's primitive operations\n(@primops.txt.pp@) and produces a number of outputs. These include,\n\n* the @GHC.Prim@ module included in the @ghc-prim@ package.\n* the @GHC.PrimopWrappers@ module included in the @ghc-prim@ package.\n* an LaTeX document describing the primitive operations."; + buildType = "Simple"; + }; + components = { + exes = { + "genprimopcode" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + ]; + build-tools = pkgs.lib.optionals (flags.build-tool-depends) [ + (hsPkgs.pkgsBuildBuild.alex.components.exes.alex or (pkgs.pkgsBuildBuild.alex or (errorHandler.buildToolDepError "alex:alex"))) + (hsPkgs.pkgsBuildBuild.happy.components.exes.happy or (pkgs.pkgsBuildBuild.happy or (errorHandler.buildToolDepError "happy:happy"))) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc-bignum.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc-bignum.nix new file mode 100644 index 0000000000..46af6e0e9f --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc-bignum.nix @@ -0,0 +1,37 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { native = false; ffi = false; gmp = false; check = false; }; + package = { + specVersion = "2.0"; + identifier = { name = "ghc-bignum"; version = "1.3"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = "Sylvain Henry"; + homepage = ""; + url = ""; + synopsis = "GHC BigNum library"; + description = "This package provides the low-level implementation of the standard\n'BigNat', 'Natural' and 'Integer' types."; + buildType = "Configure"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + ]; + buildable = (if !flags.native && !flags.gmp && !flags.ffi + then false + else true) && (if flags.native && (flags.gmp || flags.ffi) + then false + else true) && (if flags.gmp && flags.ffi then false else true); + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc-boot.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc-boot.nix new file mode 100644 index 0000000000..bdb3851804 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc-boot.nix @@ -0,0 +1,46 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-boot"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Shared functionality between GHC and its boot libraries"; + description = "This library is shared between GHC, ghc-pkg, and other boot\nlibraries.\n.\nA note about \"GHC.Unit.Database\": it only deals with the subset of\nthe package database that the compiler cares about: modules\npaths etc and not package metadata like description, authors\netc. It is thus not a library interface to ghc-pkg and is *not*\nsuitable for modifying GHC package databases.\n.\nThe package database format and this library are constructed in\nsuch a way that while ghc-pkg depends on Cabal, the GHC library\nand program do not have to depend on Cabal."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + ]; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghc-boot-th" or (errorHandler.buildDepError "ghc-boot-th")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc-heap.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc-heap.nix new file mode 100644 index 0000000000..f8edabe13b --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc-heap.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-heap"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Functions for walking GHC's heap"; + description = "This package provides functions for walking the GHC heap data structures\nand retrieving information about those data structures."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc-prim.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc-prim.nix new file mode 100644 index 0000000000..a657675b58 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc-prim.nix @@ -0,0 +1,47 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "2.2"; + identifier = { name = "ghc-prim"; version = "0.10.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "GHC primitives"; + description = "This package contains the primitive types and operations supplied by GHC.\nIt is an internal package, only for the use of GHC developers.\nGHC users should not use it! If you do use it then expect\nbreaking changes at any time without warning. You should prefer\nto import @GHC.Exts@ from the @base@ package instead."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.process or (pkgs.pkgsBuildBuild.process or (errorHandler.setupDepError "process"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + ]; + }; + components = { + "library" = { + depends = [ (hsPkgs."rts" or (errorHandler.buildDepError "rts")) ]; + libs = pkgs.lib.optionals (system.isWindows) [ + (pkgs."user32" or (errorHandler.sysDepError "user32")) + (pkgs."mingw32" or (errorHandler.sysDepError "mingw32")) + (pkgs."mingwex" or (errorHandler.sysDepError "mingwex")) + (pkgs."ucrt" or (errorHandler.sysDepError "ucrt")) + ] ++ pkgs.lib.optionals (system.isLinux) [ + (pkgs."c" or (errorHandler.sysDepError "c")) + (pkgs."m" or (errorHandler.sysDepError "m")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc.nix new file mode 100644 index 0000000000..cb75e00e5c --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghc.nix @@ -0,0 +1,69 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { + internal-interpreter = false; + dynamic-system-linker = true; + build-tool-depends = true; + }; + package = { + specVersion = "2.2"; + identifier = { name = "ghc"; version = "9.6.7.20250227"; }; + 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"; + 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.\n\nSee \nfor more information."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.process or (pkgs.pkgsBuildBuild.process or (errorHandler.setupDepError "process"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + ]; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."process" or (errorHandler.buildDepError "process")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) + (hsPkgs."hpc" or (errorHandler.buildDepError "hpc")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + (hsPkgs."exceptions" or (errorHandler.buildDepError "exceptions")) + (hsPkgs."stm" or (errorHandler.buildDepError "stm")) + (hsPkgs."ghc-boot" or (errorHandler.buildDepError "ghc-boot")) + (hsPkgs."ghc-heap" or (errorHandler.buildDepError "ghc-heap")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ] ++ (if system.isWindows + then [ (hsPkgs."Win32" or (errorHandler.buildDepError "Win32")) ] + else [ (hsPkgs."unix" or (errorHandler.buildDepError "unix")) ]); + build-tools = pkgs.lib.optionals (flags.build-tool-depends) [ + (hsPkgs.pkgsBuildBuild.alex.components.exes.alex or (pkgs.pkgsBuildBuild.alex or (errorHandler.buildToolDepError "alex:alex"))) + (hsPkgs.pkgsBuildBuild.happy.components.exes.happy or (pkgs.pkgsBuildBuild.happy or (errorHandler.buildToolDepError "happy:happy"))) + (hsPkgs.pkgsBuildBuild.genprimopcode.components.exes.genprimopcode or (pkgs.pkgsBuildBuild.genprimopcode or (errorHandler.buildToolDepError "genprimopcode:genprimopcode"))) + (hsPkgs.pkgsBuildBuild.deriveConstants.components.exes.deriveConstants or (pkgs.pkgsBuildBuild.deriveConstants or (errorHandler.buildToolDepError "deriveConstants:deriveConstants"))) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghci.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghci.nix new file mode 100644 index 0000000000..3cc6975487 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/ghci.nix @@ -0,0 +1,45 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { internal-interpreter = false; }; + package = { + specVersion = "1.10"; + identifier = { name = "ghci"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "The library supporting GHC's interactive interpreter"; + 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"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."ghc-boot" or (errorHandler.buildDepError "ghc-boot")) + (hsPkgs."ghc-heap" or (errorHandler.buildDepError "ghc-heap")) + (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/hpc.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/hpc.nix new file mode 100644 index 0000000000..c9d84dfbb7 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/hpc.nix @@ -0,0 +1,38 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "hpc"; version = "0.6.2.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = "Andy Gill"; + homepage = ""; + url = ""; + synopsis = "Code Coverage Library for Haskell"; + description = "This package provides the code coverage library for Haskell.\n\nSee for more\ninformation."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/integer-gmp.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/integer-gmp.nix new file mode 100644 index 0000000000..94f930e70e --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/integer-gmp.nix @@ -0,0 +1,35 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "2.0"; + identifier = { name = "integer-gmp"; version = "1.1"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "hvr@gnu.org"; + author = "Herbert Valerio Riedel"; + homepage = "https://www.haskell.org/ghc/"; + url = ""; + synopsis = "Integer library based on GMP"; + description = "This package used to provide an implementation of the standard 'Integer'\ntype based on the\n.\n\nIt is now deprecated in favor of the 'ghc-bignum' package.\n\nIts purpose is to provide backward compatibility for codes directly\ndepending on the `integer-gmp` package."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."ghc-bignum" or (errorHandler.buildDepError "ghc-bignum")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/iserv.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/iserv.nix new file mode 100644 index 0000000000..9badbbf56b --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/iserv.nix @@ -0,0 +1,42 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "iserv"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "iserv allows GHC to delegate Template Haskell computations"; + description = "GHC can be provided with a path to the iserv binary with\n@-pgmi=/path/to/iserv-bin@, and will in combination with\n@-fexternal-interpreter@, compile Template Haskell though the\n@iserv-bin@ delegate. This is very similar to how ghcjs has been\ncompiling Template Haskell, by spawning a separate delegate (so\ncalled runner on the javascript vm) and evaluating the splices\nthere.\n\nTo use iserv with cross compilers, please see @libraries/libiserv@\nand @utils/iserv-proxy@."; + buildType = "Simple"; + }; + components = { + exes = { + "iserv" = { + depends = [ + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + (hsPkgs."libiserv" or (errorHandler.buildDepError "libiserv")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/libiserv.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/libiserv.nix new file mode 100644 index 0000000000..ffe0a9ee99 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/libiserv.nix @@ -0,0 +1,38 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { network = false; }; + package = { + specVersion = "1.10"; + identifier = { name = "libiserv"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Provides shared functionality between iserv and iserv-proxy."; + description = "Provides shared functionality between iserv and iserv-proxy."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/remote-iserv.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/remote-iserv.nix new file mode 100644 index 0000000000..3431eb0712 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/remote-iserv.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "remote-iserv"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "Moritz Angermann "; + author = "Moritz Angermann "; + homepage = ""; + url = ""; + synopsis = "iserv allows GHC to delegate Template Haskell computations"; + description = "This is a very simple remote runner for iserv, to be used together\nwith iserv-proxy. The foundamental idea is that this this wrapper\nstarts running libiserv on a given port to which iserv-proxy will\nthen connect."; + buildType = "Simple"; + }; + components = { + exes = { + "remote-iserv" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."libiserv" or (errorHandler.buildDepError "libiserv")) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/template-haskell.nix b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/template-haskell.nix new file mode 100644 index 0000000000..693b8f6a78 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227llvm-aarch64/template-haskell.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "template-haskell"; version = "2.20.0.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Support library for Template Haskell"; + description = "This package provides modules containing facilities for manipulating\nHaskell source code using Template Haskell.\n\nSee for more\ninformation."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-boot-th" or (errorHandler.buildDepError "ghc-boot-th")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."pretty" or (errorHandler.buildDepError "pretty")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } From 23bf11e31b21ea6cbf4fdca3c3bb67f5e437128d Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 14 Mar 2025 10:49:13 +1300 Subject: [PATCH 197/206] Add materialized files --- .../ghc96720250227-ghcjs/base.nix | 49 +++++++++++++ .../ghc96720250227-ghcjs/deriveConstants.nix | 39 +++++++++++ .../ghc96720250227-ghcjs/genprimopcode.nix | 40 +++++++++++ .../ghc96720250227-ghcjs/ghc-bignum.nix | 37 ++++++++++ .../ghc96720250227-ghcjs/ghc-boot.nix | 46 +++++++++++++ .../ghc96720250227-ghcjs/ghc-heap.nix | 36 ++++++++++ .../ghc96720250227-ghcjs/ghc-prim.nix | 47 +++++++++++++ .../ghc96720250227-ghcjs/ghc.nix | 69 +++++++++++++++++++ .../ghc96720250227-ghcjs/ghci.nix | 45 ++++++++++++ .../ghc96720250227-ghcjs/hpc.nix | 38 ++++++++++ .../ghc96720250227-ghcjs/integer-gmp.nix | 35 ++++++++++ .../ghc96720250227-ghcjs/iserv.nix | 41 +++++++++++ .../ghc96720250227-ghcjs/remote-iserv.nix | 36 ++++++++++ .../ghc96720250227-ghcjs/template-haskell.nix | 36 ++++++++++ 14 files changed, 594 insertions(+) create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/base.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/deriveConstants.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/genprimopcode.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc-bignum.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc-boot.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc-heap.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc-prim.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghci.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/hpc.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/integer-gmp.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/iserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/remote-iserv.nix create mode 100644 materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/template-haskell.nix diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/base.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/base.nix new file mode 100644 index 0000000000..1f649a4341 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/base.nix @@ -0,0 +1,49 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "base"; version = "4.18.3.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "Core Libraries Committee "; + author = ""; + homepage = ""; + url = ""; + synopsis = "Core data structures and operations"; + description = "Haskell's base library provides, among other things, core types (e.g. [Bool](\"Data.Bool\") and [Int](\"Data.Int\")),\ndata structures (e.g. [List](\"Data.List\"), [Tuple](\"Data.Tuple\") and [Maybe](\"Data.Maybe\")),\nthe [Exception](\"Control.Exception\") mechanism, and the [IO](\"System.IO\") & [Concurrency](\"Control.Concurrent\") operations.\nThe \"Prelude\" module, which is imported by default, exposes a curated set of types and functions from other modules.\n\nOther data structures like [Map](https://hackage.haskell.org/package/containers/docs/Data-Map.html),\n[Set](https://hackage.haskell.org/package/containers/docs/Data-Set.html) are available in the [containers](https://hackage.haskell.org/package/containers) library.\nTo work with textual data, use the [text](https://hackage.haskell.org/package/text/docs/Data-Text.html) library."; + buildType = "Configure"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."ghc-bignum" or (errorHandler.buildDepError "ghc-bignum")) + ]; + libs = pkgs.lib.optionals (system.isWindows) [ + (pkgs."wsock32" or (errorHandler.sysDepError "wsock32")) + (pkgs."user32" or (errorHandler.sysDepError "user32")) + (pkgs."shell32" or (errorHandler.sysDepError "shell32")) + (pkgs."mingw32" or (errorHandler.sysDepError "mingw32")) + (pkgs."kernel32" or (errorHandler.sysDepError "kernel32")) + (pkgs."advapi32" or (errorHandler.sysDepError "advapi32")) + (pkgs."mingwex" or (errorHandler.sysDepError "mingwex")) + (pkgs."ws2_32" or (errorHandler.sysDepError "ws2_32")) + (pkgs."shlwapi" or (errorHandler.sysDepError "shlwapi")) + (pkgs."ole32" or (errorHandler.sysDepError "ole32")) + (pkgs."rpcrt4" or (errorHandler.sysDepError "rpcrt4")) + (pkgs."ntdll" or (errorHandler.sysDepError "ntdll")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/deriveConstants.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/deriveConstants.nix new file mode 100644 index 0000000000..135cdd02f6 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/deriveConstants.nix @@ -0,0 +1,39 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "deriveConstants"; version = "0.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Derive header files containing various constants for the GHC build process"; + description = "This utility is responsible for generating a number of C header files\nneeded during the GHC build process. See @rts/include/ghc.mk@ in the GHC\nbuild system for details."; + buildType = "Simple"; + }; + components = { + exes = { + "deriveConstants" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."process" or (errorHandler.buildDepError "process")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/genprimopcode.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/genprimopcode.nix new file mode 100644 index 0000000000..49bbe516ba --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/genprimopcode.nix @@ -0,0 +1,40 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { build-tool-depends = true; }; + package = { + specVersion = "2.0"; + identifier = { name = "genprimopcode"; version = "0.1"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "Generates various files implementing GHC's primitive operations."; + description = "This utility reads a textual description of GHC's primitive operations\n(@primops.txt.pp@) and produces a number of outputs. These include,\n\n* the @GHC.Prim@ module included in the @ghc-prim@ package.\n* the @GHC.PrimopWrappers@ module included in the @ghc-prim@ package.\n* an LaTeX document describing the primitive operations."; + buildType = "Simple"; + }; + components = { + exes = { + "genprimopcode" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + ]; + build-tools = pkgs.lib.optionals (flags.build-tool-depends) [ + (hsPkgs.pkgsBuildBuild.alex.components.exes.alex or (pkgs.pkgsBuildBuild.alex or (errorHandler.buildToolDepError "alex:alex"))) + (hsPkgs.pkgsBuildBuild.happy.components.exes.happy or (pkgs.pkgsBuildBuild.happy or (errorHandler.buildToolDepError "happy:happy"))) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc-bignum.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc-bignum.nix new file mode 100644 index 0000000000..46af6e0e9f --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc-bignum.nix @@ -0,0 +1,37 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { native = false; ffi = false; gmp = false; check = false; }; + package = { + specVersion = "2.0"; + identifier = { name = "ghc-bignum"; version = "1.3"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = "Sylvain Henry"; + homepage = ""; + url = ""; + synopsis = "GHC BigNum library"; + description = "This package provides the low-level implementation of the standard\n'BigNat', 'Natural' and 'Integer' types."; + buildType = "Configure"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + ]; + buildable = (if !flags.native && !flags.gmp && !flags.ffi + then false + else true) && (if flags.native && (flags.gmp || flags.ffi) + then false + else true) && (if flags.gmp && flags.ffi then false else true); + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc-boot.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc-boot.nix new file mode 100644 index 0000000000..bdb3851804 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc-boot.nix @@ -0,0 +1,46 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-boot"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Shared functionality between GHC and its boot libraries"; + description = "This library is shared between GHC, ghc-pkg, and other boot\nlibraries.\n.\nA note about \"GHC.Unit.Database\": it only deals with the subset of\nthe package database that the compiler cares about: modules\npaths etc and not package metadata like description, authors\netc. It is thus not a library interface to ghc-pkg and is *not*\nsuitable for modifying GHC package databases.\n.\nThe package database format and this library are constructed in\nsuch a way that while ghc-pkg depends on Cabal, the GHC library\nand program do not have to depend on Cabal."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + ]; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghc-boot-th" or (errorHandler.buildDepError "ghc-boot-th")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc-heap.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc-heap.nix new file mode 100644 index 0000000000..f8edabe13b --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc-heap.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "3.0"; + identifier = { name = "ghc-heap"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Functions for walking GHC's heap"; + description = "This package provides functions for walking the GHC heap data structures\nand retrieving information about those data structures."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc-prim.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc-prim.nix new file mode 100644 index 0000000000..a657675b58 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc-prim.nix @@ -0,0 +1,47 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "2.2"; + identifier = { name = "ghc-prim"; version = "0.10.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "GHC primitives"; + description = "This package contains the primitive types and operations supplied by GHC.\nIt is an internal package, only for the use of GHC developers.\nGHC users should not use it! If you do use it then expect\nbreaking changes at any time without warning. You should prefer\nto import @GHC.Exts@ from the @base@ package instead."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.process or (pkgs.pkgsBuildBuild.process or (errorHandler.setupDepError "process"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + ]; + }; + components = { + "library" = { + depends = [ (hsPkgs."rts" or (errorHandler.buildDepError "rts")) ]; + libs = pkgs.lib.optionals (system.isWindows) [ + (pkgs."user32" or (errorHandler.sysDepError "user32")) + (pkgs."mingw32" or (errorHandler.sysDepError "mingw32")) + (pkgs."mingwex" or (errorHandler.sysDepError "mingwex")) + (pkgs."ucrt" or (errorHandler.sysDepError "ucrt")) + ] ++ pkgs.lib.optionals (system.isLinux) [ + (pkgs."c" or (errorHandler.sysDepError "c")) + (pkgs."m" or (errorHandler.sysDepError "m")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc.nix new file mode 100644 index 0000000000..cb75e00e5c --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghc.nix @@ -0,0 +1,69 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { + internal-interpreter = false; + dynamic-system-linker = true; + build-tool-depends = true; + }; + package = { + specVersion = "2.2"; + identifier = { name = "ghc"; version = "9.6.7.20250227"; }; + 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"; + 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.\n\nSee \nfor more information."; + buildType = "Custom"; + setup-depends = [ + (hsPkgs.pkgsBuildBuild.base or (pkgs.pkgsBuildBuild.base or (errorHandler.setupDepError "base"))) + (hsPkgs.pkgsBuildBuild.Cabal or (pkgs.pkgsBuildBuild.Cabal or (errorHandler.setupDepError "Cabal"))) + (hsPkgs.pkgsBuildBuild.directory or (pkgs.pkgsBuildBuild.directory or (errorHandler.setupDepError "directory"))) + (hsPkgs.pkgsBuildBuild.process or (pkgs.pkgsBuildBuild.process or (errorHandler.setupDepError "process"))) + (hsPkgs.pkgsBuildBuild.filepath or (pkgs.pkgsBuildBuild.filepath or (errorHandler.setupDepError "filepath"))) + ]; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."process" or (errorHandler.buildDepError "process")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) + (hsPkgs."hpc" or (errorHandler.buildDepError "hpc")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + (hsPkgs."exceptions" or (errorHandler.buildDepError "exceptions")) + (hsPkgs."stm" or (errorHandler.buildDepError "stm")) + (hsPkgs."ghc-boot" or (errorHandler.buildDepError "ghc-boot")) + (hsPkgs."ghc-heap" or (errorHandler.buildDepError "ghc-heap")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ] ++ (if system.isWindows + then [ (hsPkgs."Win32" or (errorHandler.buildDepError "Win32")) ] + else [ (hsPkgs."unix" or (errorHandler.buildDepError "unix")) ]); + build-tools = pkgs.lib.optionals (flags.build-tool-depends) [ + (hsPkgs.pkgsBuildBuild.alex.components.exes.alex or (pkgs.pkgsBuildBuild.alex or (errorHandler.buildToolDepError "alex:alex"))) + (hsPkgs.pkgsBuildBuild.happy.components.exes.happy or (pkgs.pkgsBuildBuild.happy or (errorHandler.buildToolDepError "happy:happy"))) + (hsPkgs.pkgsBuildBuild.genprimopcode.components.exes.genprimopcode or (pkgs.pkgsBuildBuild.genprimopcode or (errorHandler.buildToolDepError "genprimopcode:genprimopcode"))) + (hsPkgs.pkgsBuildBuild.deriveConstants.components.exes.deriveConstants or (pkgs.pkgsBuildBuild.deriveConstants or (errorHandler.buildToolDepError "deriveConstants:deriveConstants"))) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghci.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghci.nix new file mode 100644 index 0000000000..3cc6975487 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/ghci.nix @@ -0,0 +1,45 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = { internal-interpreter = false; }; + package = { + specVersion = "1.10"; + identifier = { name = "ghci"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "The library supporting GHC's interactive interpreter"; + 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"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."rts" or (errorHandler.buildDepError "rts")) + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."ghc-boot" or (errorHandler.buildDepError "ghc-boot")) + (hsPkgs."ghc-heap" or (errorHandler.buildDepError "ghc-heap")) + (hsPkgs."template-haskell" or (errorHandler.buildDepError "template-haskell")) + (hsPkgs."transformers" or (errorHandler.buildDepError "transformers")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/hpc.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/hpc.nix new file mode 100644 index 0000000000..c9d84dfbb7 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/hpc.nix @@ -0,0 +1,38 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "hpc"; version = "0.6.2.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "ghc-devs@haskell.org"; + author = "Andy Gill"; + homepage = ""; + url = ""; + synopsis = "Code Coverage Library for Haskell"; + description = "This package provides the code coverage library for Haskell.\n\nSee for more\ninformation."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."directory" or (errorHandler.buildDepError "directory")) + (hsPkgs."filepath" or (errorHandler.buildDepError "filepath")) + (hsPkgs."time" or (errorHandler.buildDepError "time")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/integer-gmp.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/integer-gmp.nix new file mode 100644 index 0000000000..94f930e70e --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/integer-gmp.nix @@ -0,0 +1,35 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "2.0"; + identifier = { name = "integer-gmp"; version = "1.1"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "hvr@gnu.org"; + author = "Herbert Valerio Riedel"; + homepage = "https://www.haskell.org/ghc/"; + url = ""; + synopsis = "Integer library based on GMP"; + description = "This package used to provide an implementation of the standard 'Integer'\ntype based on the\n.\n\nIt is now deprecated in favor of the 'ghc-bignum' package.\n\nIts purpose is to provide backward compatibility for codes directly\ndepending on the `integer-gmp` package."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."ghc-bignum" or (errorHandler.buildDepError "ghc-bignum")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/iserv.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/iserv.nix new file mode 100644 index 0000000000..2c395adde1 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/iserv.nix @@ -0,0 +1,41 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "iserv"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "XXX"; + author = "XXX"; + homepage = ""; + url = ""; + synopsis = "iserv allows GHC to delegate Template Haskell computations"; + description = "GHC can be provided with a path to the iserv binary with\n@-pgmi=/path/to/iserv-bin@, and will in combination with\n@-fexternal-interpreter@, compile Template Haskell though the\n@iserv-bin@ delegate. This is very similar to how ghcjs has been\ncompiling Template Haskell, by spawning a separate delegate (so\ncalled runner on the javascript vm) and evaluating the splices\nthere."; + buildType = "Simple"; + }; + components = { + exes = { + "iserv" = { + depends = [ + (hsPkgs."array" or (errorHandler.buildDepError "array")) + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."binary" or (errorHandler.buildDepError "binary")) + (hsPkgs."bytestring" or (errorHandler.buildDepError "bytestring")) + (hsPkgs."containers" or (errorHandler.buildDepError "containers")) + (hsPkgs."deepseq" or (errorHandler.buildDepError "deepseq")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ] ++ pkgs.lib.optional (!system.isWindows) (hsPkgs."unix" or (errorHandler.buildDepError "unix")); + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/remote-iserv.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/remote-iserv.nix new file mode 100644 index 0000000000..10eadced2c --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/remote-iserv.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "remote-iserv"; version = "9.6.7.20250227"; }; + license = "BSD-3-Clause"; + copyright = "XXX"; + maintainer = "Moritz Angermann "; + author = "Moritz Angermann "; + homepage = ""; + url = ""; + synopsis = "iserv allows GHC to delegate Template Haskell computations"; + description = "This is a very simple remote runner for iserv, to be used together\nwith iserv-proxy. The foundamental idea is that this this wrapper\nstarts running the GHCi server on a given port to which iserv-proxy will\nthen connect."; + buildType = "Simple"; + }; + components = { + exes = { + "remote-iserv" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghci" or (errorHandler.buildDepError "ghci")) + ]; + buildable = true; + }; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } diff --git a/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/template-haskell.nix b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/template-haskell.nix new file mode 100644 index 0000000000..693b8f6a78 --- /dev/null +++ b/materialized/ghc-boot-packages-nix/ghc96720250227-ghcjs/template-haskell.nix @@ -0,0 +1,36 @@ +{ system + , compiler + , flags + , pkgs + , hsPkgs + , pkgconfPkgs + , errorHandler + , config + , ... }: + { + flags = {}; + package = { + specVersion = "1.10"; + identifier = { name = "template-haskell"; version = "2.20.0.0"; }; + license = "BSD-3-Clause"; + copyright = ""; + maintainer = "libraries@haskell.org"; + author = ""; + homepage = ""; + url = ""; + synopsis = "Support library for Template Haskell"; + description = "This package provides modules containing facilities for manipulating\nHaskell source code using Template Haskell.\n\nSee for more\ninformation."; + buildType = "Simple"; + }; + components = { + "library" = { + depends = [ + (hsPkgs."base" or (errorHandler.buildDepError "base")) + (hsPkgs."ghc-boot-th" or (errorHandler.buildDepError "ghc-boot-th")) + (hsPkgs."ghc-prim" or (errorHandler.buildDepError "ghc-prim")) + (hsPkgs."pretty" or (errorHandler.buildDepError "pretty")) + ]; + buildable = true; + }; + }; + } // rec { src = pkgs.lib.mkDefault ./.; } From 7e04c0dfaf91bdefb21785dee24baf14f454956a Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 14 Mar 2025 14:13:02 +1300 Subject: [PATCH 198/206] Fix iserv-proxy issues for GHC >9.11 --- overlays/bootstrap.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 46f3d48617..7c61f4a25b 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -232,7 +232,7 @@ in { ++ final.lib.optionals ( (final.stdenv.targetPlatform.isAndroid || final.stdenv.targetPlatform.isLinux) && (final.stdenv.targetPlatform.isAarch64 || final.stdenv.targetPlatform.is32bit)) - (fromUntil "9.6.1" "9.11" ./patches/ghc/iserv-syms.patch) + (from "9.6.1" ./patches/ghc/iserv-syms.patch) ++ onAndroid (until "9.0" ./patches/ghc/ghc-8.10.7-weak-symbols-2.patch) ++ onDarwin (onAarch64 (until "9.0" ./patches/ghc/ghc-8.10.7-rts-aarch64-darwin.patch)) ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10-android.patch)) From 56838b2b90b4d425f01712028468bc14e703e851 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 14 Mar 2025 20:46:22 +1300 Subject: [PATCH 199/206] Revert "Fix iserv-proxy issues for GHC >9.11" This reverts commit 7e04c0dfaf91bdefb21785dee24baf14f454956a. --- overlays/bootstrap.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/overlays/bootstrap.nix b/overlays/bootstrap.nix index 7c61f4a25b..46f3d48617 100644 --- a/overlays/bootstrap.nix +++ b/overlays/bootstrap.nix @@ -232,7 +232,7 @@ in { ++ final.lib.optionals ( (final.stdenv.targetPlatform.isAndroid || final.stdenv.targetPlatform.isLinux) && (final.stdenv.targetPlatform.isAarch64 || final.stdenv.targetPlatform.is32bit)) - (from "9.6.1" ./patches/ghc/iserv-syms.patch) + (fromUntil "9.6.1" "9.11" ./patches/ghc/iserv-syms.patch) ++ onAndroid (until "9.0" ./patches/ghc/ghc-8.10.7-weak-symbols-2.patch) ++ onDarwin (onAarch64 (until "9.0" ./patches/ghc/ghc-8.10.7-rts-aarch64-darwin.patch)) ++ onAndroid (onAarch32 (until "9.2" ./patches/ghc/ghc-8.10-android.patch)) From 5f428783c4a9018403a048e177b26317bf6c37c0 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Fri, 14 Mar 2025 20:47:12 +1300 Subject: [PATCH 200/206] nix flake update iserv-proxy --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 1009929ad5..fe72f2714c 100644 --- a/flake.lock +++ b/flake.lock @@ -355,11 +355,11 @@ "iserv-proxy": { "flake": false, "locked": { - "lastModified": 1741169524, - "narHash": "sha256-tQd9XupbpJhcv+1uPVZK6A5GuUxNYiOHXfP9UTAoP/E=", + "lastModified": 1741938339, + "narHash": "sha256-pGjY6z8sfUCiKOuD81YbMJxNQaXETJh3CMNhmU8W8lk=", "owner": "stable-haskell", "repo": "iserv-proxy", - "rev": "c26dafb7b6549b9ba32aef4021e16abb7f21b8e0", + "rev": "a905515ebf7606bc4030ad4ee318dcdfc1b6432c", "type": "github" }, "original": { From 4a152cb76f6ccedec11e855179bfa9cc83fde1c1 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sun, 16 Mar 2025 12:16:47 +1300 Subject: [PATCH 201/206] Disable ghcjs for ghc96720250227 on macOS --- ci.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci.nix b/ci.nix index 2ad9ca87cd..4198632cb4 100644 --- a/ci.nix +++ b/ci.nix @@ -81,8 +81,8 @@ && (__match ".*llvm" compiler-nix-name == null) && ((system == "x86_64-linux" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948"]) || (system == "aarch64-linux" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948"]) - || (system == "x86_64-darwin" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948" "ghc966" "ghc982" "ghc983" "ghc984"]) - || (system == "aarch64-darwin" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948" "ghc966" "ghc982" "ghc983" "ghc984"]) + || (system == "x86_64-darwin" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948" "ghc966" "ghc96720250227" "ghc982" "ghc983" "ghc984"]) + || (system == "aarch64-darwin" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc948" "ghc966" "ghc96720250227" "ghc982" "ghc983" "ghc984"]) )) { inherit (lib.systems.examples) ghcjs; } // lib.optionalAttrs (nixpkgsName == "unstable" From 92630f4f3fa39026f0fa6396428668d387de29d4 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sun, 16 Mar 2025 12:40:03 +1300 Subject: [PATCH 202/206] Disable mingwW64 for ghc96720250227 (use ucrt64) --- ci.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci.nix b/ci.nix index 4198632cb4..91d82f4c33 100644 --- a/ci.nix +++ b/ci.nix @@ -87,7 +87,7 @@ inherit (lib.systems.examples) ghcjs; } // lib.optionalAttrs (nixpkgsName == "unstable" && (__match ".*llvm" compiler-nix-name == null) - && ((system == "x86_64-linux" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc966"]) # Not sure why GHC 9.6.6 TH code now wants `log1pf` + && ((system == "x86_64-linux" && !builtins.elem compiler-nix-name ["ghc902" "ghc928" "ghc966" "ghc96720250227"]) # Not sure why GHC 9.6.6 TH code now wants `log1pf` || (system == "x86_64-darwin" && builtins.elem compiler-nix-name []))) { # TODO add ghc versions when we have more darwin build capacity inherit (lib.systems.examples) mingwW64; } // lib.optionalAttrs (nixpkgsName == "unstable" From e1f5603283daa2c55ee1c6088384b158a69dda85 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sun, 16 Mar 2025 15:02:10 +1300 Subject: [PATCH 203/206] Disable broken test --- test/coverage/default.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/coverage/default.nix b/test/coverage/default.nix index 2c5329631a..70ea3d9618 100644 --- a/test/coverage/default.nix +++ b/test/coverage/default.nix @@ -26,7 +26,9 @@ let in recurseIntoAttrs ({ # Does not work on ghcjs because it needs zlib. - meta.disabled = stdenv.hostPlatform.isGhcjs; + meta.disabled = stdenv.hostPlatform.isGhcjs + # For some reason the `.tix` file is not created on armv7a android (not sure why) + || stdenv.hostPlatform.isAndroid && stdenv.hostPlatform.isAarch32; run = stdenv.mkDerivation { name = "coverage-test"; From f4dd6d27478e68b0fb9f953cc3d1076f722727a3 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Sun, 16 Mar 2025 23:47:17 +1300 Subject: [PATCH 204/206] nix flake update iserv-proxy --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index fe72f2714c..60e03f9a57 100644 --- a/flake.lock +++ b/flake.lock @@ -355,11 +355,11 @@ "iserv-proxy": { "flake": false, "locked": { - "lastModified": 1741938339, - "narHash": "sha256-pGjY6z8sfUCiKOuD81YbMJxNQaXETJh3CMNhmU8W8lk=", + "lastModified": 1742121966, + "narHash": "sha256-x4bg4OoKAPnayom0nWc0BmlxgRMMHk6lEPvbiyFBq1s=", "owner": "stable-haskell", "repo": "iserv-proxy", - "rev": "a905515ebf7606bc4030ad4ee318dcdfc1b6432c", + "rev": "e9dc86ed6ad71f0368c16672081c8f26406c3a7e", "type": "github" }, "original": { From f698fd3ee300463bad18c910c6cdfc26d47389df Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 17 Mar 2025 00:13:12 +1300 Subject: [PATCH 205/206] Skip broken test --- test/js-template-haskell/default.nix | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/js-template-haskell/default.nix b/test/js-template-haskell/default.nix index fdee28233b..a21c64704d 100644 --- a/test/js-template-haskell/default.nix +++ b/test/js-template-haskell/default.nix @@ -29,7 +29,12 @@ in recurseIntoAttrs { build = packages.js-template-haskell.components.library; check = packages.js-template-haskell.checks.test; -} // optionalAttrs (!stdenv.hostPlatform.isGhcjs) { +} // optionalAttrs (!( + stdenv.hostPlatform.isGhcjs + || (stdenv.hostPlatform.isAarch64 + && stdenv.hostPlatform.isMusl + && compiler-nix-name == "ghc9101") + )) { build-profiled = packages.js-template-haskell.components.library.profiled; check-profiled = packages.js-template-haskell.checks.test.profiled; } From 4c2b9c3f2437d83b7985b718daa0566c475cc531 Mon Sep 17 00:00:00 2001 From: Hamish Mackenzie Date: Mon, 17 Mar 2025 00:17:07 +1300 Subject: [PATCH 206/206] Skip broken test --- test/th-dlls/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/th-dlls/default.nix b/test/th-dlls/default.nix index f150173412..8e7f0b0a59 100644 --- a/test/th-dlls/default.nix +++ b/test/th-dlls/default.nix @@ -39,7 +39,7 @@ in recurseIntoAttrs { build-ei = packages-ei.th-dlls.components.library; just-template-haskell-ei = packages-ei.th-dlls.components.exes.just-template-haskell; } // optionalAttrs - (!(builtins.elem compiler-nix-name ["ghc984" "ghc9121" "ghc912120241215" "ghc91320241230"] && stdenv.buildPlatform.isx86_64 && stdenv.hostPlatform.isAarch64)) { + (!(builtins.elem compiler-nix-name ["ghc984" "ghc9121" "ghc912120241215" "ghc91320241230" "ghc912120250219"] && stdenv.buildPlatform.isx86_64 && stdenv.hostPlatform.isAarch64)) { # On for aarch64 cross compile on GHC this test is fails sometimes for non profiled builds # (and always for the profiled builds). # This may be related to the memory allocation changes made in 9.8.4 that