Skip to content

Commit

Permalink
Add cabal-issue-8352-workaround (#1671)
Browse files Browse the repository at this point in the history
* Add cabal-issue-8352-workaround

See haskell/cabal#8352

* More script fixes

* More script fixes
  • Loading branch information
hamishmack committed Sep 15, 2022
1 parent 25b47bf commit a197fd0
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 54 deletions.
3 changes: 2 additions & 1 deletion build.nix
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,15 @@ in rec {
# Update scripts use the internal nix-tools and cabal-install (compiled with a fixed GHC version)
nix-tools = haskell.internal-nix-tools;
cabal-install = haskell.internal-cabal-install;
inherit (haskell) update-index-state-hashes;
inherit (haskell) update-index-state-hashes cabal-issue-8352-workaround;
};
update-stackage = haskell.callPackage ./scripts/update-stackage.nix {
inherit (pkgs) stdenv lib writeScript coreutils glibc git
openssh nixFlakes gawk bash curl findutils;
# Update scripts use the internal nix-tools and cabal-install (compiled with a fixed GHC version)
nix-tools = haskell.internal-nix-tools;
cabal-install = haskell.internal-cabal-install;
inherit (haskell) cabal-issue-8352-workaround;
};
update-pins = haskell.callPackage ./scripts/update-pins.nix {};
update-docs = pkgs.buildPackages.callPackage ./scripts/update-docs.nix {
Expand Down
4 changes: 2 additions & 2 deletions lib/cabal-project-parser.nix
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ let
repoContents = if inputMap ? ${attrs.url}
# If there is an input use it to make `file:` url and create a suitable `.cabal/packages/${name}` directory
then evalPackages.runCommand name ({
nativeBuildInputs = [ cabal-install ];
nativeBuildInputs = [ cabal-install ] ++ evalPackages.haskell-nix.cabal-issue-8352-workaround;
preferLocalBuild = true;
}) ''
HOME=$(mktemp -d)
Expand All @@ -162,7 +162,7 @@ let
cp -r $HOME/.cabal/packages/${name} $out
''
else evalPackages.runCommand name ({
nativeBuildInputs = [ cabal-install evalPackages.curl nix-tools ];
nativeBuildInputs = [ cabal-install evalPackages.curl nix-tools ] ++ evalPackages.haskell-nix.cabal-issue-8352-workaround;
LOCALE_ARCHIVE = pkgs.lib.optionalString (evalPackages.stdenv.buildPlatform.libc == "glibc") "${evalPackages.glibcLocales}/lib/locale/locale-archive";
LANG = "en_US.UTF-8";
preferLocalBuild = true;
Expand Down
97 changes: 50 additions & 47 deletions overlays/haskell.nix
Original file line number Diff line number Diff line change
Expand Up @@ -205,61 +205,64 @@ final: prev: {
# Creates Cabal local repository from { name, index } set.
mkLocalHackageRepo = import ../mk-local-hackage-repo final;

# Dummy version of ghc to work around https://github.com/haskell/cabal/issues/8352
cabal-issue-8352-workaround = [
(final.writeTextFile {
name = "dummy-ghc";
executable = true;
destination = "/bin/ghc";
text = ''
#!${final.runtimeShell}
case "$*" in
--version*)
echo 'The Glorious Glasgow Haskell Compilation System, version 8.10.7'
;;
--numeric-version*)
echo '8.10.7'
;;
--supported-languages*)
echo Haskell2010
;;
--info*)
echo '[]'
;;
*)
echo "Unknown argument '$*'" >&2
exit 1
;;
esac
exit 0
'';
})
(final.writeTextFile {
name = "dummy-ghc";
executable = true;
destination = "/bin/ghc-pkg";
text = ''
#!${final.runtimeShell}
case "$*" in
--version*)
echo 'GHC package manager version 8.10.7'
;;
*)
echo "Unknown argument '$*'" >&2
exit 1
;;
esac
exit 0
'';
})
];

dotCabal = { index-state, sha256, cabal-install, extra-hackage-tarballs ? {}, extra-hackage-repos ? {}, ... }@args:
let
allTarballs = hackageTarball args // extra-hackage-tarballs;
allNames = final.lib.concatStringsSep "-" (builtins.attrNames allTarballs);
# Main Hackage index-state is embedded in its name and thus will propagate to
# dotCabalName anyway.
dotCabalName = "dot-cabal-" + allNames;
# Dummy version of ghc to work around https://github.com/haskell/cabal/issues/8352
dummy-ghc = final.writeTextFile {
name = "dummy-ghc";
executable = true;
destination = "/bin/ghc";
text = ''
#!${final.runtimeShell}
case "$*" in
--version*)
echo 'The Glorious Glasgow Haskell Compilation System, version 8.10.7'
;;
--numeric-version*)
echo '8.10.7'
;;
--supported-languages*)
echo Haskell2010
;;
--info*)
echo '[]'
;;
*)
echo "Unknown argument '$*'" >&2
exit 1
;;
esac
exit 0
'';
};
dummy-ghc-pkg = final.writeTextFile {
name = "dummy-ghc";
executable = true;
destination = "/bin/ghc-pkg";
text = ''
#!${final.runtimeShell}
case "$*" in
--version*)
echo 'GHC package manager version 8.10.7'
;;
*)
echo "Unknown argument '$*'" >&2
exit 1
;;
esac
exit 0
'';
};
tarballRepoFor = name: index: final.runCommand "tarballRepo_${name}" {
nativeBuildInputs = [ cabal-install dummy-ghc dummy-ghc-pkg ];
nativeBuildInputs = [ cabal-install ] ++ cabal-issue-8352-workaround;
} ''
set -xe
Expand Down
4 changes: 2 additions & 2 deletions scripts/update-external.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{ stdenv, lib, writeScript, glibc, coreutils, git, openssh
, nix-tools, cabal-install, nixFlakes
, bash, curl, findutils, gawk }:
, bash, curl, findutils, gawk, cabal-issue-8352-workaround }:

{ name, script }:

Expand All @@ -16,7 +16,7 @@ in
set -euo pipefail
export PATH="${makeBinPath ([ coreutils curl findutils gawk bash git openssh nix-tools cabal-install nixFlakes ] ++ optional stdenv.isLinux glibc)}"
export PATH="${makeBinPath ([ coreutils curl findutils gawk bash git openssh nix-tools cabal-install nixFlakes ] ++ cabal-issue-8352-workaround ++ optional stdenv.isLinux glibc)}"
${script}
Expand Down
2 changes: 1 addition & 1 deletion scripts/update-hackage.nix
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{ stdenv, lib, writeScript, coreutils, glibc, git, openssh
, nix-tools, cabal-install, nixFlakes
, gawk, bash, curl, findutils
, update-index-state-hashes }@args:
, update-index-state-hashes, cabal-issue-8352-workaround }@args:

import ./update-external.nix
(removeAttrs args ["update-index-state-hashes"]) {
Expand Down
2 changes: 1 addition & 1 deletion scripts/update-stackage.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{ stdenv, lib, writeScript, coreutils, glibc, git, openssh
, nix-tools, cabal-install, nixFlakes
, gawk, bash, curl, findutils }@args:
, gawk, bash, curl, findutils, cabal-issue-8352-workaround }@args:

import ./update-external.nix args {
name = "stackage";
Expand Down

0 comments on commit a197fd0

Please sign in to comment.