Compare commits

..

20 Commits

Author SHA1 Message Date
a298d949b5 Remove FreeBSD workaround in CI 2020-07-21 19:00:10 +02:00
e1cf11f9d4 Add Alpine GHC 8.4.4 for 64bit 2020-07-21 01:18:03 +02:00
97cd43792d Set 8.8.4 as recommended GHC version 2020-07-21 00:31:02 +02:00
08693e6d3a Add more alpine bindists 2020-07-21 00:29:46 +02:00
e2227da8d2 Update ghcup binaries 2020-07-21 00:02:14 +02:00
5f20e4c583 Bump versions in CI 2020-07-20 23:57:26 +02:00
f82f1a12dd Update version in bootstrap-script 2020-07-20 23:04:11 +02:00
53148fd1c9 Release 0.1.7 2020-07-20 22:25:28 +02:00
8985101b2a Use 8.8.4 for test build 2020-07-20 22:25:09 +02:00
d1949c8490 Use available bindists for release build 2020-07-20 22:24:21 +02:00
b7faae1203 Add more alpine bindists 2020-07-20 22:20:24 +02:00
b6a9d35c3e Merge branch 'alpine-bindists' 2020-07-20 20:59:08 +02:00
6cb6c7a448 Install alpine bindists with --disable-ld-override 2020-07-20 20:48:22 +02:00
22a5ad739e Don't try non-musl bindists for Alpine Linux 2020-07-20 20:47:45 +02:00
14c91bdd78 Merge branch 'libarchive-fix' 2020-07-20 20:34:54 +02:00
2c638cd2e2 Fix unpacking of bindists with hardinks pointing to themselves
https://github.com/vmchale/libarchive/issues/14
https://github.com/libarchive/libarchive/issues/1381
2020-07-20 20:34:36 +02:00
9e59f484e3 Fix alpine bindists 2020-07-20 20:30:47 +02:00
ac8419ecb2 Fix platform detection for i386 docker images wrt #37 2020-07-20 20:30:36 +02:00
3ecdb63063 Update tarballs 2020-07-19 00:50:57 +02:00
cfe24428fa Only check for upgrades when not upgrading 2020-07-19 00:47:20 +02:00
17 changed files with 555 additions and 678 deletions

View File

@@ -97,7 +97,7 @@ variables:
test:linux:recommended:
extends: .test_ghcup_version:linux
variables:
GHC_VERSION: "8.8.3"
GHC_VERSION: "8.8.4"
CABAL_VERSION: "3.2.0.0"
test:linux:latest:
@@ -113,7 +113,7 @@ test:linux:latest:
test:mac:recommended:
extends: .test_ghcup_version:darwin
variables:
GHC_VERSION: "8.8.3"
GHC_VERSION: "8.8.4"
CABAL_VERSION: "3.2.0.0"
test:mac:latest:
@@ -129,7 +129,7 @@ test:mac:latest:
test:freebsd:recommended:
extends: .test_ghcup_version:freebsd
variables:
GHC_VERSION: "8.8.3"
GHC_VERSION: "8.8.4"
CABAL_VERSION: "3.2.0.0"
test:freebsd:latest:
@@ -150,7 +150,7 @@ release:linux:64bit:
- ./.gitlab/before_script/linux/alpine/install_deps.sh
variables:
ARTIFACT: "x86_64-linux-ghcup"
GHC_VERSION: "8.8.3"
GHC_VERSION: "8.8.4"
CABAL_VERSION: "3.2.0.0"
@@ -162,7 +162,7 @@ release:linux:32bit:
- ./.gitlab/before_script/linux/alpine/install_deps.sh
variables:
ARTIFACT: "i386-linux-ghcup"
GHC_VERSION: "8.8.3"
GHC_VERSION: "8.8.4"
CABAL_VERSION: "3.2.0.0"

View File

@@ -19,7 +19,7 @@ if [ "${OS}" = "LINUX" ] ; then
if [ "${BIT}" = "32" ] ; then
ecabal build -w ghc-${GHC_VERSION} --ghc-options='-split-sections -optl-static' -ftui -ftar
else
ecabal build -w ghc-${GHC_VERSION} --ghc-options='-split-sections -optl-static' -ftui -finternal-downloader
ecabal build -w ghc-${GHC_VERSION} --ghc-options='-split-sections -optl-static' -ftui
fi
elif [ "${OS}" = "FREEBSD" ] ; then
ecabal build -w ghc-${GHC_VERSION} --ghc-options='-split-sections' --constraint="zlib static" -ftui

View File

@@ -44,12 +44,6 @@ ghcup-gen check -f ghcup-${JSON_VERSION}.json
eghcup --numeric-version
# TODO: rm once we have tarballs
if [ "${OS}" = "FREEBSD" ] ; then
GHC_VERSION=8.6.3
CABAL_VERSION=2.4.1.0
fi
eghcup install ${GHC_VERSION}
eghcup set ${GHC_VERSION}
eghcup install-cabal ${CABAL_VERSION}

View File

@@ -546,6 +546,7 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
{
struct archive_write_disk *a = (struct archive_write_disk *)_a;
struct fixup_entry *fe;
const char *linkname;
int ret, r;
archive_check_magic(&a->archive, ARCHIVE_WRITE_DISK_MAGIC,
@@ -590,6 +591,17 @@ _archive_write_disk_header(struct archive *_a, struct archive_entry *entry)
if (ret != ARCHIVE_OK)
return (ret);
/*
* Check if we have a hardlink that points to itself.
*/
linkname = archive_entry_hardlink(a->entry);
if (linkname != NULL && strcmp(a->name, linkname) == 0) {
archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
"Skipping hardlink pointing to itself: %s",
a->name);
return (ARCHIVE_WARN);
}
/*
* Query the umask so we get predictable mode settings.
* This gets done on every call to _write_header in case the

View File

@@ -1,5 +1,16 @@
# Revision history for ghcup
## 0.1.7 -- 2020-07-20
* Fix a bug in libarchive not unpacking some uncleanly packed bindists
* Improved fish support in bootstrap-haskell
* Only check for upgrades when not upgrading
* Fix platform detection for i386 docker images
* Improve alpine support
- more/proper bindists
- don't fall back to glibc based bindists
- install bindists with `--disable-ld-override` to avoid ld.gold bugs
## 0.1.6 -- 2020-07-13
* Create a new curses (brick) based TUI, accessible via `ghcup tui` #24

View File

@@ -1033,7 +1033,10 @@ Report bugs at <https://gitlab.haskell.org/haskell/ghcup-hs/issues>|]
runLogger
($(logError) [i|Error fetching download info: #{e}|])
exitWith (ExitFailure 2)
runLogger $ checkForUpdates dls pfreq
case optCommand of
Upgrade _ _ -> pure ()
_ -> runLogger $ checkForUpdates dls pfreq

View File

@@ -28,14 +28,22 @@ eghcup() {
download_ghcup() {
_plat="$(uname -s)"
_arch=$(uname -m)
_ghver="0.1.6"
_ghver="0.1.7"
_base_url="https://downloads.haskell.org/~ghcup"
case "${_plat}" in
"linux"|"Linux")
case "${_arch}" in
x86_64|amd64)
_url=${_base_url}/${_ghver}/x86_64-linux-ghcup-${_ghver}
# we could be in a 32bit docker container, in which
# case uname doesn't give us what we want
if [ "$(getconf LONG_BIT)" = "32" ] ; then
_url=${_base_url}/${_ghver}/i386-linux-ghcup-${_ghver}
elif [ "$(getconf LONG_BIT)" = "64" ] ; then
_url=${_base_url}/${_ghver}/x86_64-linux-ghcup-${_ghver}
else
die "Unknown long bit size: $(getconf LONG_BIT)"
fi
;;
i*86)
_url=${_base_url}/${_ghver}/i386-linux-ghcup-${_ghver}

View File

@@ -115,13 +115,6 @@
"8.6.2": {
"viArch": {
"A_64": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "5be9f98c25c49dbfb65223e2642335d4a45220f0c4044c8af70bbcaebe688467",
"dlSubdir": "ghc-8.6.2",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.2-musl/ghc-8.6.2-x86_64-unknown-linux-musl.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "13f96e8b83bb5bb60f955786ff9085744c24927a33be8a17773f84c7c248533a",
@@ -176,13 +169,6 @@
}
},
"A_32": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "a1add75822258fbb6e57ad049919ef5f757bac10d3c7a6eaeee50d2521ffeb4e",
"dlSubdir": "ghc-8.6.2",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.2-musl/ghc-8.6.2-i386-unknown-linux-musl.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "a288026d9ef22f7ac387edab6b29ef7dcb3b28945c8ea532a15c1fa35d4733ed",
@@ -228,9 +214,9 @@
"A_64": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "7f9ef3e048ca6f2a2a589e6c168d8c7699fbe32b1b39a9d7c72eff9b26e90c67",
"dlHash": "517783b660a27ebf95b2568d47292fd633d5f9a4de4c80ad1ccf05e1b9d7313f",
"dlSubdir": "ghc-8.0.2",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.0.2-musl/ghc-8.0.2-x86_64-unknown-linux-musl.tar.xz"
"dlUri": "https://files.hasufell.de/ghc/ghc-8.0.2-x86_64-alpine-linux.tar.xz"
}
},
"FreeBSD": {
@@ -284,9 +270,9 @@
"A_32": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "815c68181013cd3f4dc748ddb5502a5e7a1a4011ba57d8eff6d66da411c72e84",
"dlHash": "b4cd12a1048b2fff2f23c9eec0dd3a1174d54d017f8d79ec79af4534118e6881",
"dlSubdir": "ghc-8.0.2",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.0.2-musl/ghc-8.0.2-i386-unknown-linux-musl.tar.xz"
"dlUri": "https://files.hasufell.de/ghc/ghc-8.0.2-i386-alpine-linux.tar.xz"
}
},
"Linux_Debian": {
@@ -323,13 +309,6 @@
"8.6.4": {
"viArch": {
"A_64": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "ec73167bae1a173a9af07612df5fa1289e924f13ed9241339cb5617337cb2979",
"dlSubdir": "ghc-8.6.4",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.4-musl/ghc-8.6.4-x86_64-unknown-linux-musl.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "ef74222ef3c01c3fc5b926f67e8b4ef612fe8efa40ac937317cff9b0eed8d863",
@@ -389,13 +368,6 @@
}
},
"A_32": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "21b39b89edadbb6ab5b98d46dfacc0fd0799f9b16465a05c64e48f41dcbb1f7a",
"dlSubdir": "ghc-8.6.4",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.4-musl/ghc-8.6.4-i386-unknown-linux-musl.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "5e2ce88f4d13d23ac37e278e0c7b51c801008931359b9fa8a631d804d2da552c",
@@ -439,13 +411,6 @@
"8.4.1": {
"viArch": {
"A_64": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "82d4ea6247a91e7e76065c0cdf66eec813ab679c1f24de0fb92c89bba3ef27f2",
"dlSubdir": "ghc-8.4.1",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.1-musl/ghc-8.4.1-x86_64-unknown-linux-musl.tar.xz"
}
},
"FreeBSD": {
"unknown_versioning": {
"dlHash": "e748daec098445c6190090fe32bb2817a1140553be5acd2188e1af05ad24e5aa",
@@ -497,13 +462,6 @@
}
},
"A_32": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "e5feee34b58c1a1cd6c270fbe696c178a4649675398f4e0d56a4bfad9641b736",
"dlSubdir": "ghc-8.4.1",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.1-musl/ghc-8.4.1-i386-unknown-linux-musl.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "c56c589c76c7ddcb77cdbef885a811761e669d3e76868b723d5be56dedcd4f69",
@@ -547,13 +505,6 @@
"8.6.3": {
"viArch": {
"A_64": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "274f7ea959e6f1c830b33efd462ab9d0ff32d1cb5be051a2a318464d05d674dd",
"dlSubdir": "ghc-8.6.3",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.3-musl/ghc-8.6.3-x86_64-unknown-linux-musl.tar.xz"
}
},
"FreeBSD": {
"unknown_versioning": {
"dlHash": "bc2419fa180f8a7808c49775987866435995df9bdd9ce08bcd38352d63ba6031",
@@ -641,13 +592,6 @@
}
},
"A_32": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "dc0b53a7f0e52232930abcfad427ccd0917c90797203fbc7b5d72f5335d85a7d",
"dlSubdir": "ghc-8.6.3",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.3-musl/ghc-8.6.3-i386-unknown-linux-musl.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "b57070ba8c70b1333a3e47ce124baf791be39c20a592954772532fd6dd51882f",
@@ -800,6 +744,13 @@
}
},
"A_32": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "7360cc6b29e9b4ab08f6ea5bc3bcca6f5c216933e81ef1620dcdd700f1fdb289",
"dlSubdir": "ghc-8.10.1",
"dlUri": "https://files.hasufell.de/ghc/ghc-8.10.1-i386-alpine-linux.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "8b53eef2c827b5f634d72920a93c0c9dd66ea288691a2bfe28def45d3c686ee2",
@@ -851,9 +802,9 @@
"A_64": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "ec6d0417822c3bfafc7aea0b0402294901231bc5d72dd17a2b849e3f44850695",
"dlHash": "b9d3ed7f7aa24ef2d58bb579252289caa0b8877adee3685e3af2fb73d440afdc",
"dlSubdir": "ghc-8.6.5",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.5-musl/ghc-8.6.5-x86_64-unknown-linux-musl.tar.xz"
"dlUri": "https://files.hasufell.de/ghc/ghc-8.6.5-x86_64-alpine-linux.tar.xz"
}
},
"FreeBSD": {
@@ -945,9 +896,9 @@
"A_32": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "db13ff894faf431f9c64db21c090a1e4e42803794d56720a704c50166c7ca05d",
"dlHash": "3737837550d9b177acfe150e3a3cd4545427ded020487c2ed5194d7b8f116349",
"dlSubdir": "ghc-8.6.5",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.5-musl/ghc-8.6.5-i386-unknown-linux-musl.tar.xz"
"dlUri": "https://files.hasufell.de/ghc/ghc-8.6.5-i386-alpine-linux.tar.xz"
}
},
"Linux_Debian": {
@@ -993,13 +944,6 @@
"8.4.2": {
"viArch": {
"A_64": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "3ebdb6e8001679e8722bd75a47805f1b3c1b25b37c4d237a7aaa4d66162f699f",
"dlSubdir": "ghc-8.4.2",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.2-musl/ghc-8.4.2-x86_64-unknown-linux-musl.tar.xz"
}
},
"FreeBSD": {
"unknown_versioning": {
"dlHash": "e9ed417fdf94c2ff2c6e344ed16f332bf6b591511f6442c0d9ea94854882b66c",
@@ -1066,13 +1010,6 @@
}
},
"A_32": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "a43ac57214764717f0ffe515ef47b84e938f0a4fa8ff875773d6ba315b940835",
"dlSubdir": "ghc-8.4.2",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.2-musl/ghc-8.4.2-i386-unknown-linux-musl.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "2d849c30b4c1eac25dc74333501920921e22fa483153f404993808bbda93df05",
@@ -1116,13 +1053,6 @@
"8.8.1": {
"viArch": {
"A_64": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "029163c42a219983f4220d73c26b910c3ecf6eda45a3e5e27236e8a66b080890",
"dlSubdir": "ghc-8.8.1",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.1-musl/ghc-8.8.1-x86_64-unknown-linux-musl.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "620fd560535b63cac5f8c97354ccddf93fa940cca78e2d19f6f98b7e67c6a723",
@@ -1203,13 +1133,6 @@
}
},
"A_32": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "3f5462341a455a5677fba5cb24da8938878261069da5ee4234b1c6ac2d2ef77e",
"dlSubdir": "ghc-8.8.1",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.1-musl/ghc-8.8.1-i386-unknown-linux-musl.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "3d3bb75aff2dd79ec87ace10483368681fbc328ff00ebf15edad33420f00f7f5",
@@ -1253,6 +1176,20 @@
"8.8.4": {
"viArch": {
"A_64": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "90c6a1661de7f20c7d169cd6270125035b3332063e45103ce028df0beecf434e",
"dlSubdir": "ghc-8.8.4",
"dlUri": "https://files.hasufell.de/ghc/ghc-8.8.4-x86_64-alpine-linux.tar.xz"
}
},
"FreeBSD": {
"unknown_versioning": {
"dlHash": "8cebe5ccf454e82acd1ff52ca57590d1ab0f3f44a981b46257ec12158c8c447e",
"dlSubdir": "ghc-8.8.4",
"dlUri": "https://files.hasufell.de/ghc/ghc-8.8.4-x86_64-portbld-freebsd.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "4862559d221153caf978f4bf2c15a82c114d1e1f43b298b2ecff2ac94b586d20",
@@ -1333,11 +1270,11 @@
}
},
"A_32": {
"FreeBSD": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "8cebe5ccf454e82acd1ff52ca57590d1ab0f3f44a981b46257ec12158c8c447e",
"dlHash": "1d18e89ee031197e55c48683e78a7ffc67601ac5fd9f73aac555eb064b3859a2",
"dlSubdir": "ghc-8.8.4",
"dlUri": "https://files.hasufell.de/ghc/ghc-8.8.4-x86_64-portbld-freebsd.tar.xz"
"dlUri": "https://files.hasufell.de/ghc/ghc-8.8.4-i386-alpine-linux.tar.xz"
}
},
"Linux_Debian": {
@@ -1377,19 +1314,13 @@
},
"viChangeLog": "https://downloads.haskell.org/~ghc/8.8.4/docs/html/users_guide/8.8.4-notes.html",
"viTags": [
"Recommended",
"base-4.13.0.0"
]
},
"8.4.3": {
"viArch": {
"A_64": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "0f05c67e3fd29a3f505abb77e9c39349d312cdc1a566263b8f4b227d085906bc",
"dlSubdir": "ghc-8.4.3",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.3-musl/ghc-8.4.3-x86_64-unknown-linux-musl.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "2e4f53afb872ad9c640f31aea283b3ff4c5028b65808a1920739900aef7d15c9",
@@ -1449,13 +1380,6 @@
}
},
"A_32": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "3a9a1ceb8eef234023fc36600245a03772bcb46b2abac41f6394104feaec8c43",
"dlSubdir": "ghc-8.4.3",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.3-musl/ghc-8.4.3-i386-unknown-linux-musl.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "f5763983a26dedd88b65a0b17267359a3981b83a642569b26334423f684f8b8c",
@@ -1499,13 +1423,6 @@
"8.6.1": {
"viArch": {
"A_64": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "2668e12facfa9083150b01b1137693cb3de266a6f8ac8c6b44a2be3826c73177",
"dlSubdir": "ghc-8.6.1",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.1-musl/ghc-8.6.1-x86_64-unknown-linux-musl.tar.xz"
}
},
"FreeBSD": {
"unknown_versioning": {
"dlHash": "51403b054a3a649039ac988e1d1112561f96750bfced63df864091a3fab36f08",
@@ -1572,13 +1489,6 @@
}
},
"A_32": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "12b9b5b78be94b57d301b2a31eda145928110fd103fbbcc1e6e6966237a30ed2",
"dlSubdir": "ghc-8.6.1",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.1-musl/ghc-8.6.1-i386-unknown-linux-musl.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "83573af96e3dec8f67c1a844512f92cbf7d51ae7ceca53d948fc2a3300abd05c",
@@ -1622,13 +1532,6 @@
"8.8.2": {
"viArch": {
"A_64": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "09d49c75b5626606409c982b23f70dec241a944928243f32d1b59b2005de6dea",
"dlSubdir": "ghc-8.8.2",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.2-musl/ghc-8.8.2-x86_64-unknown-linux-musl.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "7b2d66c2d5d8c15750da5833d3018634a5eb792a5662282e3abfeb112c2a1cc3",
@@ -1709,13 +1612,6 @@
}
},
"A_32": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "4ea4a81b6b5ba807c93b21b3cddf1f1b4b0fc1ce018cf6aa255a9ee40137b278",
"dlSubdir": "ghc-8.8.2",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.2-musl/ghc-8.8.2-i386-unknown-linux-musl.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "ad1c628082c32635a436905a7ff83eaa4246347d869be5ef6b33c3bf85e8f00c",
@@ -1759,13 +1655,6 @@
"7.10.3": {
"viArch": {
"A_64": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "8b83dfa8b85ba45e24768337254e6eb23c0855df1a5168671a3a8090b6d0964e",
"dlSubdir": "ghc-7.10.3",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-7.10.3-musl/ghc-7.10.3-x86_64-unknown-linux-musl.tar.xz"
}
},
"FreeBSD": {
"unknown_versioning": {
"dlHash": "2aa396edd2bb651f4bc7eef7a396913ea24923de5aafdc76df6295333e487e48",
@@ -1888,6 +1777,13 @@
"8.2.2": {
"viArch": {
"A_64": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "adcf3a320a3c402aba07ae9586990dc3c0b550e96aeffb1b9e194313d3ba716d",
"dlSubdir": "ghc-8.2.2",
"dlUri": "https://files.hasufell.de/ghc/ghc-8.2.2-x86_64-alpine-linux.tar.xz"
}
},
"FreeBSD": {
"unknown_versioning": {
"dlHash": "cd351c704b92b9af23994024df07de8ca7090ea7675d5c8b14b2be857a46d804",
@@ -1947,6 +1843,13 @@
}
},
"A_32": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "467534c32552cfd318753112dbc70af003693aad4b0081f2a07e61f5b5ea2c22",
"dlSubdir": "ghc-8.2.2",
"dlUri": "https://files.hasufell.de/ghc/ghc-8.2.2-i386-alpine-linux.tar.xz"
}
},
"Linux_Debian": {
"7": {
"dlHash": "cd18766b1a9b74fc6c90003a719ecab158f281f9a755d8b1bd3fd764ba6947b5",
@@ -1997,9 +1900,9 @@
"A_64": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "e15f1cf02adb2cfb77a202050300a92f61456c6e1e90b543fec82d99da893a69",
"dlHash": "336affff8314d3dc5e85d9c09015ae2ba8a7658b459c8c8ae77ecaa551a56ae7",
"dlSubdir": "ghc-8.4.4",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.4-musl/ghc-8.4.4-x86_64-unknown-linux-musl.tar.xz"
"dlUri": "https://files.hasufell.de/ghc/ghc-8.4.4-x86_64-alpine-linux.tar.xz"
}
},
"FreeBSD": {
@@ -2091,9 +1994,9 @@
"A_32": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "356f49b1acee0b0267fd8ca687aede14d43cee1f231d7f8a37525d50f07e1428",
"dlHash": "892888d388ef5c9cadf5cfba1146d62237c25b9b066fb62fee940b2b285fd308",
"dlSubdir": "ghc-8.4.4",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.4-musl/ghc-8.4.4-i386-unknown-linux-musl.tar.xz"
"dlUri": "https://files.hasufell.de/ghc/ghc-8.4.4-i386-alpine-linux.tar.xz"
}
},
"Linux_Debian": {
@@ -2139,13 +2042,6 @@
"8.8.3": {
"viArch": {
"A_64": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "77a990d76dc10abe2ed19e5fcfef4095f0e9819d4ab84bec6d82f00dd85812a7",
"dlSubdir": "ghc-8.8.3",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.3-musl/ghc-8.8.3-x86_64-unknown-linux-musl.tar.xz"
}
},
"FreeBSD": {
"unknown_versioning": {
"dlHash": "569719075b4d14b3875a899df522090ae31e6fe085e6dffe518e875b09a2f0be",
@@ -2233,13 +2129,6 @@
}
},
"A_32": {
"Linux_Alpine": {
"unknown_versioning": {
"dlHash": "7a5f41646d06777e75636291a1855d60a0984552bbdf33c3d107565d302f38a4",
"dlSubdir": "ghc-8.8.3",
"dlUri": "https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.3-musl/ghc-8.8.3-i386-unknown-linux-musl.tar.xz"
}
},
"Linux_Debian": {
"unknown_versioning": {
"dlHash": "441e2c7a4fc83ebf179712bd939b555cda7c6633545b7c8ac38049f9d85003ae",
@@ -2277,7 +2166,6 @@
},
"viChangeLog": "https://downloads.haskell.org/~ghc/8.8.3/docs/html/users_guide/8.8.3-notes.html",
"viTags": [
"Recommended",
"base-4.13.0.0"
]
}
@@ -2452,37 +2340,37 @@
}
},
"GHCup": {
"0.1.6": {
"0.1.7": {
"viArch": {
"A_64": {
"FreeBSD": {
"unknown_versioning": {
"dlHash": "6bbfb1047691ff3ae9249e8805cf9f37bab30a008dae130cb2a4b3aa5253e6e5",
"dlHash": "54b9b6f98908f6679dda6db025b4047dfe82e6b57ae82c547a9d611b9e4ff105",
"dlSubdir": null,
"dlUri": "https://downloads.haskell.org/~ghcup/0.1.6/x86_64-portbld-freebsd-ghcup-0.1.6"
"dlUri": "https://downloads.haskell.org/~ghcup/0.1.7/x86_64-portbld-freebsd-ghcup-0.1.7"
}
},
"Darwin": {
"unknown_versioning": {
"dlHash": "1e025e66d7f7b75d94f17a7da6120efd7e2df918a8eac88c4711ed11d2aac4ec",
"dlHash": "00b2c04755d2b40e568afbfc2a485c36697fc55f210eae0d4cd80413c71032ed",
"dlSubdir": null,
"dlUri": "https://downloads.haskell.org/~ghcup/0.1.6/x86_64-apple-darwin-ghcup-0.1.6"
"dlUri": "https://downloads.haskell.org/~ghcup/0.1.7/x86_64-apple-darwin-ghcup-0.1.7"
}
},
"Linux_UnknownLinux": {
"unknown_versioning": {
"dlHash": "bdbec0cdf4c8511c4082dd83993d15034c0fbcb5722ecf418c1cee40667da8af",
"dlHash": "a1d1e8b3c2b00186957c927d09f2cfb457bbfa65c1ab562ff5683963e205bdd5",
"dlSubdir": null,
"dlUri": "https://downloads.haskell.org/~ghcup/0.1.6/x86_64-linux-ghcup-0.1.6"
"dlUri": "https://downloads.haskell.org/~ghcup/0.1.7/x86_64-linux-ghcup-0.1.7"
}
}
},
"A_32": {
"Linux_UnknownLinux": {
"unknown_versioning": {
"dlHash": "0366ed6c00862c3c002cdefc3e37523ad80e655387956c7ab58b268aaa6fae5d",
"dlHash": "1651cc196e4fdd18995054edebe109833535961f0e2b0d505f1714e83f3e8808",
"dlSubdir": null,
"dlUri": "https://downloads.haskell.org/~ghcup/0.1.6/i386-linux-ghcup-0.1.6"
"dlUri": "https://downloads.haskell.org/~ghcup/0.1.7/i386-linux-ghcup-0.1.7"
}
}
}

View File

@@ -1,6 +1,6 @@
cabal-version: 3.0
name: ghcup
version: 0.1.6
version: 0.1.7
synopsis: ghc toolchain installer as an exe/library
description:
A rewrite of the shell script ghcup, for providing
@@ -105,14 +105,11 @@ common hpath-io
common hpath-posix
build-depends: hpath-posix >=0.13.2
common http-client
build-depends: http-client >=0.7.1
common http-io-streams
build-depends: http-io-streams >=0.1.2.0
common http-client-openssl
build-depends: http-client-openssl >=0.3.1.0
common http-types
build-depends: http-types >=0.12.3
common io-streams
build-depends: io-streams >=1.5
common libarchive
build-depends: libarchive >= 2.2.5.0
@@ -123,9 +120,6 @@ common lzma
common megaparsec
build-depends: megaparsec >=8.0.0
common monad-control
build-depends: monad-control >=1.0.2.3
common monad-logger
build-depends: monad-logger >=0.3.31
@@ -195,9 +189,6 @@ common time
common transformers
build-depends: transformers >=0.5
common transformers-base
build-depends: transformers-base >=0.4.4
common os-release
build-depends: os-release >=1.0.0
@@ -272,7 +263,6 @@ library
, hpath-posix
, lzma
, megaparsec
, monad-control
, monad-logger
, mtl
, optics
@@ -292,7 +282,6 @@ library
, text
, time
, transformers
, transformers-base
, os-release
, unix
, unix-bytestring
@@ -310,6 +299,7 @@ library
GHCup.Data.GHCupInfo
GHCup.Data.ToolRequirements
GHCup.Download
GHCup.Download.Utils
GHCup.Errors
GHCup.Platform
GHCup.Requirements
@@ -333,11 +323,10 @@ library
if flag(internal-downloader)
import:
HsOpenSSL
, http-client
, http-client-openssl
, http-types
, http-io-streams
, io-streams
, terminal-progress-bar
exposed-modules: GHCup.Download.Internal
exposed-modules: GHCup.Download.IOStreams
cpp-options: -DINTERNAL_DOWNLOADER
if flag(tar)

View File

@@ -137,13 +137,18 @@ installGHCBin bDls ver pfreq@(PlatformRequest {..}) = do
lift $ $(logInfo) "Installing GHC (this may take a while)"
lEM $ execLogged "./configure"
False
["--prefix=" <> toFilePath inst]
(["--prefix=" <> toFilePath inst] ++ alpineArgs)
[rel|ghc-configure|]
(Just path)
Nothing
lEM $ make ["install"] (Just path)
pure ()
alpineArgs
| ver >= [vver|8.2.2|]
, Linux Alpine <- _rPlatform = ["--disable-ld-override"]
| otherwise = []
installCabalBin :: ( MonadMask m
, MonadCatch m

View File

@@ -62,12 +62,6 @@ ghc_7103_32_freebsd = DownloadInfo
(Just [rel|ghc-7.10.3|])
"3dde05577c6f94dcb0ba201ebd53ab88553bbc9a3aa8e72237162ed7a9d588a3"
ghc_7103_64_musl :: DownloadInfo
ghc_7103_64_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-7.10.3-musl/ghc-7.10.3-x86_64-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-7.10.3|])
"8b83dfa8b85ba45e24768337254e6eb23c0855df1a5168671a3a8090b6d0964e"
@@ -112,17 +106,17 @@ ghc_802_64_darwin = DownloadInfo
(Just [rel|ghc-8.0.2|])
"ff50a2df9f002f33b9f09717ebf5ec5a47906b9b65cc57b1f9849f8b2e06788d"
ghc_802_64_musl :: DownloadInfo
ghc_802_64_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.0.2-musl/ghc-8.0.2-x86_64-unknown-linux-musl.tar.xz|]
ghc_802_64_alpine :: DownloadInfo
ghc_802_64_alpine = DownloadInfo
[uri|https://files.hasufell.de/ghc/ghc-8.0.2-x86_64-alpine-linux.tar.xz|]
(Just [rel|ghc-8.0.2|])
"7f9ef3e048ca6f2a2a589e6c168d8c7699fbe32b1b39a9d7c72eff9b26e90c67"
"517783b660a27ebf95b2568d47292fd633d5f9a4de4c80ad1ccf05e1b9d7313f"
ghc_802_32_musl :: DownloadInfo
ghc_802_32_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.0.2-musl/ghc-8.0.2-i386-unknown-linux-musl.tar.xz|]
ghc_802_32_alpine :: DownloadInfo
ghc_802_32_alpine = DownloadInfo
[uri|https://files.hasufell.de/ghc/ghc-8.0.2-i386-alpine-linux.tar.xz|]
(Just [rel|ghc-8.0.2|])
"815c68181013cd3f4dc748ddb5502a5e7a1a4011ba57d8eff6d66da411c72e84"
"b4cd12a1048b2fff2f23c9eec0dd3a1174d54d017f8d79ec79af4534118e6881"
@@ -180,6 +174,18 @@ ghc_822_64_freebsd11 = DownloadInfo
(Just [rel|ghc-8.2.2|])
"cd351c704b92b9af23994024df07de8ca7090ea7675d5c8b14b2be857a46d804"
ghc_822_32_alpine :: DownloadInfo
ghc_822_32_alpine = DownloadInfo
[uri|https://files.hasufell.de/ghc/ghc-8.2.2-i386-alpine-linux.tar.xz|]
(Just [rel|ghc-8.2.2|])
"467534c32552cfd318753112dbc70af003693aad4b0081f2a07e61f5b5ea2c22"
ghc_822_64_alpine :: DownloadInfo
ghc_822_64_alpine = DownloadInfo
[uri|https://files.hasufell.de/ghc/ghc-8.2.2-x86_64-alpine-linux.tar.xz|]
(Just [rel|ghc-8.2.2|])
"adcf3a320a3c402aba07ae9586990dc3c0b550e96aeffb1b9e194313d3ba716d"
@@ -219,17 +225,6 @@ ghc_841_64_freebsd = DownloadInfo
(Just [rel|ghc-8.4.1|])
"e748daec098445c6190090fe32bb2817a1140553be5acd2188e1af05ad24e5aa"
ghc_841_64_musl :: DownloadInfo
ghc_841_64_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.1-musl/ghc-8.4.1-x86_64-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.4.1|])
"82d4ea6247a91e7e76065c0cdf66eec813ab679c1f24de0fb92c89bba3ef27f2"
ghc_841_32_musl :: DownloadInfo
ghc_841_32_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.1-musl/ghc-8.4.1-i386-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.4.1|])
"e5feee34b58c1a1cd6c270fbe696c178a4649675398f4e0d56a4bfad9641b736"
@@ -275,17 +270,6 @@ ghc_842_64_freebsd = DownloadInfo
(Just [rel|ghc-8.4.2|])
"e9ed417fdf94c2ff2c6e344ed16f332bf6b591511f6442c0d9ea94854882b66c"
ghc_842_64_musl :: DownloadInfo
ghc_842_64_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.2-musl/ghc-8.4.2-x86_64-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.4.2|])
"3ebdb6e8001679e8722bd75a47805f1b3c1b25b37c4d237a7aaa4d66162f699f"
ghc_842_32_musl :: DownloadInfo
ghc_842_32_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.2-musl/ghc-8.4.2-i386-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.4.2|])
"a43ac57214764717f0ffe515ef47b84e938f0a4fa8ff875773d6ba315b940835"
@@ -324,17 +308,6 @@ ghc_843_64_darwin = DownloadInfo
(Just [rel|ghc-8.4.3|])
"af0b455f6c46b9802b4b48dad996619cfa27cc6e2bf2ce5532387b4a8c00aa64"
ghc_843_64_musl :: DownloadInfo
ghc_843_64_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.3-musl/ghc-8.4.3-x86_64-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.4.3|])
"0f05c67e3fd29a3f505abb77e9c39349d312cdc1a566263b8f4b227d085906bc"
ghc_843_32_musl :: DownloadInfo
ghc_843_32_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.3-musl/ghc-8.4.3-i386-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.4.3|])
"3a9a1ceb8eef234023fc36600245a03772bcb46b2abac41f6394104feaec8c43"
@@ -386,17 +359,17 @@ ghc_844_64_freebsd = DownloadInfo
(Just [rel|ghc-8.4.4|])
"44fbd142d1c355d6110595c59c760e2c73866ff9259ec85ebf814edb244d1940"
ghc_844_64_musl :: DownloadInfo
ghc_844_64_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.4-musl/ghc-8.4.4-x86_64-unknown-linux-musl.tar.xz|]
ghc_844_32_alpine :: DownloadInfo
ghc_844_32_alpine = DownloadInfo
[uri|https://files.hasufell.de/ghc/ghc-8.4.4-i386-alpine-linux.tar.xz|]
(Just [rel|ghc-8.4.4|])
"e15f1cf02adb2cfb77a202050300a92f61456c6e1e90b543fec82d99da893a69"
"892888d388ef5c9cadf5cfba1146d62237c25b9b066fb62fee940b2b285fd308"
ghc_844_32_musl :: DownloadInfo
ghc_844_32_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.4.4-musl/ghc-8.4.4-i386-unknown-linux-musl.tar.xz|]
ghc_844_64_alpine :: DownloadInfo
ghc_844_64_alpine = DownloadInfo
[uri|https://files.hasufell.de/ghc/ghc-8.4.4-x86_64-alpine-linux.tar.xz|]
(Just [rel|ghc-8.4.4|])
"356f49b1acee0b0267fd8ca687aede14d43cee1f231d7f8a37525d50f07e1428"
"336affff8314d3dc5e85d9c09015ae2ba8a7658b459c8c8ae77ecaa551a56ae7"
@@ -441,17 +414,6 @@ ghc_861_64_freebsd = DownloadInfo
(Just [rel|ghc-8.6.1|])
"51403b054a3a649039ac988e1d1112561f96750bfced63df864091a3fab36f08"
ghc_861_64_musl :: DownloadInfo
ghc_861_64_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.1-musl/ghc-8.6.1-x86_64-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.6.1|])
"2668e12facfa9083150b01b1137693cb3de266a6f8ac8c6b44a2be3826c73177"
ghc_861_32_musl :: DownloadInfo
ghc_861_32_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.1-musl/ghc-8.6.1-i386-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.6.1|])
"12b9b5b78be94b57d301b2a31eda145928110fd103fbbcc1e6e6966237a30ed2"
@@ -484,17 +446,6 @@ ghc_862_64_darwin = DownloadInfo
(Just [rel|ghc-8.6.2|])
"8ec46a25872226dd7e5cf7271e3f3450c05f32144b96e6b9cb44cc4079db50dc"
ghc_862_64_musl :: DownloadInfo
ghc_862_64_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.2-musl/ghc-8.6.2-x86_64-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.6.2|])
"5be9f98c25c49dbfb65223e2642335d4a45220f0c4044c8af70bbcaebe688467"
ghc_862_32_musl :: DownloadInfo
ghc_862_32_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.2-musl/ghc-8.6.2-i386-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.6.2|])
"a1add75822258fbb6e57ad049919ef5f757bac10d3c7a6eaeee50d2521ffeb4e"
@@ -546,17 +497,6 @@ ghc_863_64_freebsd = DownloadInfo
(Just [rel|ghc-8.6.3|])
"bc2419fa180f8a7808c49775987866435995df9bdd9ce08bcd38352d63ba6031"
ghc_863_64_musl :: DownloadInfo
ghc_863_64_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.3-musl/ghc-8.6.3-x86_64-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.6.3|])
"274f7ea959e6f1c830b33efd462ab9d0ff32d1cb5be051a2a318464d05d674dd"
ghc_863_32_musl :: DownloadInfo
ghc_863_32_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.3-musl/ghc-8.6.3-i386-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.6.3|])
"dc0b53a7f0e52232930abcfad427ccd0917c90797203fbc7b5d72f5335d85a7d"
@@ -596,17 +536,6 @@ ghc_864_64_darwin = DownloadInfo
(Just [rel|ghc-8.6.4|])
"cccb58f142fe41b601d73690809f6089f7715b6a50a09aa3d0104176ab4db09e"
ghc_864_64_musl :: DownloadInfo
ghc_864_64_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.4-musl/ghc-8.6.4-x86_64-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.6.4|])
"ec73167bae1a173a9af07612df5fa1289e924f13ed9241339cb5617337cb2979"
ghc_864_32_musl :: DownloadInfo
ghc_864_32_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.4-musl/ghc-8.6.4-i386-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.6.4|])
"21b39b89edadbb6ab5b98d46dfacc0fd0799f9b16465a05c64e48f41dcbb1f7a"
@@ -652,17 +581,17 @@ ghc_865_64_darwin = DownloadInfo
(Just [rel|ghc-8.6.5|])
"dfc1bdb1d303a87a8552aa17f5b080e61351f2823c2b99071ec23d0837422169"
ghc_865_64_musl :: DownloadInfo
ghc_865_64_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.5-musl/ghc-8.6.5-x86_64-unknown-linux-musl.tar.xz|]
ghc_865_64_alpine :: DownloadInfo
ghc_865_64_alpine = DownloadInfo
[uri|https://files.hasufell.de/ghc/ghc-8.6.5-x86_64-alpine-linux.tar.xz|]
(Just [rel|ghc-8.6.5|])
"ec6d0417822c3bfafc7aea0b0402294901231bc5d72dd17a2b849e3f44850695"
"b9d3ed7f7aa24ef2d58bb579252289caa0b8877adee3685e3af2fb73d440afdc"
ghc_865_32_musl :: DownloadInfo
ghc_865_32_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.6.5-musl/ghc-8.6.5-i386-unknown-linux-musl.tar.xz|]
ghc_865_32_alpine :: DownloadInfo
ghc_865_32_alpine = DownloadInfo
[uri|https://files.hasufell.de/ghc/ghc-8.6.5-i386-alpine-linux.tar.xz|]
(Just [rel|ghc-8.6.5|])
"db13ff894faf431f9c64db21c090a1e4e42803794d56720a704c50166c7ca05d"
"3737837550d9b177acfe150e3a3cd4545427ded020487c2ed5194d7b8f116349"
ghc_865_64_freebsd :: DownloadInfo
ghc_865_64_freebsd = DownloadInfo
@@ -714,17 +643,6 @@ ghc_881_64_darwin = DownloadInfo
(Just [rel|ghc-8.8.1|])
"38c8917b47c31bedf58c9305dfca3abe198d8d35570366f0773c4e2948bd8abe"
ghc_881_64_musl :: DownloadInfo
ghc_881_64_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.1-musl/ghc-8.8.1-x86_64-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.8.1|])
"029163c42a219983f4220d73c26b910c3ecf6eda45a3e5e27236e8a66b080890"
ghc_881_32_musl :: DownloadInfo
ghc_881_32_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.1-musl/ghc-8.8.1-i386-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.8.1|])
"3f5462341a455a5677fba5cb24da8938878261069da5ee4234b1c6ac2d2ef77e"
@@ -770,17 +688,6 @@ ghc_882_64_darwin = DownloadInfo
(Just [rel|ghc-8.8.2|])
"25c5c1a70036abf3f22b2b19c10d26adfdb08e8f8574f89d4b2042de5947f990"
ghc_882_64_musl :: DownloadInfo
ghc_882_64_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.2-musl/ghc-8.8.2-x86_64-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.8.2|])
"09d49c75b5626606409c982b23f70dec241a944928243f32d1b59b2005de6dea"
ghc_882_32_musl :: DownloadInfo
ghc_882_32_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.2-musl/ghc-8.8.2-i386-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.8.2|])
"4ea4a81b6b5ba807c93b21b3cddf1f1b4b0fc1ce018cf6aa255a9ee40137b278"
@@ -826,18 +733,6 @@ ghc_883_64_darwin = DownloadInfo
(Just [rel|ghc-8.8.3|])
"7016de90dd226b06fc79d0759c5d4c83c2ab01d8c678905442c28bd948dbb782"
ghc_883_64_musl :: DownloadInfo
ghc_883_64_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.3-musl/ghc-8.8.3-x86_64-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.8.3|])
"77a990d76dc10abe2ed19e5fcfef4095f0e9819d4ab84bec6d82f00dd85812a7"
ghc_883_32_musl :: DownloadInfo
ghc_883_32_musl = DownloadInfo
[uri|https://github.com/redneb/ghc-alt-libc/releases/download/ghc-8.8.3-musl/ghc-8.8.3-i386-unknown-linux-musl.tar.xz|]
(Just [rel|ghc-8.8.3|])
"7a5f41646d06777e75636291a1855d60a0984552bbdf33c3d107565d302f38a4"
ghc_883_64_freebsd :: DownloadInfo
ghc_883_64_freebsd = DownloadInfo
[uri|https://files.hasufell.de/ghc/ghc-8.8.3-x86_64-portbld-freebsd.tar.xz|]
@@ -894,6 +789,19 @@ ghc_884_64_freebsd = DownloadInfo
(Just [rel|ghc-8.8.4|])
"8cebe5ccf454e82acd1ff52ca57590d1ab0f3f44a981b46257ec12158c8c447e"
ghc_884_64_alpine :: DownloadInfo
ghc_884_64_alpine = DownloadInfo
[uri|https://files.hasufell.de/ghc/ghc-8.8.4-x86_64-alpine-linux.tar.xz|]
(Just [rel|ghc-8.8.4|])
"90c6a1661de7f20c7d169cd6270125035b3332063e45103ce028df0beecf434e"
ghc_884_32_alpine :: DownloadInfo
ghc_884_32_alpine = DownloadInfo
[uri|https://files.hasufell.de/ghc/ghc-8.8.4-i386-alpine-linux.tar.xz|]
(Just [rel|ghc-8.8.4|])
"1d18e89ee031197e55c48683e78a7ffc67601ac5fd9f73aac555eb064b3859a2"
-----------------
@@ -950,6 +858,11 @@ ghc_8101_64_alpine = DownloadInfo
(Just [rel|ghc-8.10.1-x86_64-unknown-linux|])
"cb13b645d103e2fba2eb8dfcc4e5f2fbd9550c00c4df42f342b4210436dcb8a8"
ghc_8101_32_alpine :: DownloadInfo
ghc_8101_32_alpine = DownloadInfo
[uri|https://files.hasufell.de/ghc/ghc-8.10.1-i386-alpine-linux.tar.xz|]
(Just [rel|ghc-8.10.1|])
"7360cc6b29e9b4ab08f6ea5bc3bcca6f5c216933e81ef1620dcdd700f1fdb289"
ghc_8101_64_freebsd :: DownloadInfo
ghc_8101_64_freebsd = DownloadInfo
@@ -1089,32 +1002,32 @@ cabal_3200_64_alpine = DownloadInfo
-------------
ghcup_016_32_linux :: DownloadInfo
ghcup_016_32_linux = DownloadInfo
[uri|https://downloads.haskell.org/~ghcup/0.1.6/i386-linux-ghcup-0.1.6|]
ghcup_017_32_linux :: DownloadInfo
ghcup_017_32_linux = DownloadInfo
[uri|https://downloads.haskell.org/~ghcup/0.1.7/i386-linux-ghcup-0.1.7|]
Nothing
"0366ed6c00862c3c002cdefc3e37523ad80e655387956c7ab58b268aaa6fae5d"
"1651cc196e4fdd18995054edebe109833535961f0e2b0d505f1714e83f3e8808"
ghcup_016_64_linux :: DownloadInfo
ghcup_016_64_linux = DownloadInfo
[uri|https://downloads.haskell.org/~ghcup/0.1.6/x86_64-linux-ghcup-0.1.6|]
ghcup_017_64_linux :: DownloadInfo
ghcup_017_64_linux = DownloadInfo
[uri|https://downloads.haskell.org/~ghcup/0.1.7/x86_64-linux-ghcup-0.1.7|]
Nothing
"bdbec0cdf4c8511c4082dd83993d15034c0fbcb5722ecf418c1cee40667da8af"
"a1d1e8b3c2b00186957c927d09f2cfb457bbfa65c1ab562ff5683963e205bdd5"
ghcup_016_64_freebsd :: DownloadInfo
ghcup_016_64_freebsd = DownloadInfo
[uri|https://downloads.haskell.org/~ghcup/0.1.6/x86_64-portbld-freebsd-ghcup-0.1.6|]
ghcup_017_64_freebsd :: DownloadInfo
ghcup_017_64_freebsd = DownloadInfo
[uri|https://downloads.haskell.org/~ghcup/0.1.7/x86_64-portbld-freebsd-ghcup-0.1.7|]
Nothing
"6bbfb1047691ff3ae9249e8805cf9f37bab30a008dae130cb2a4b3aa5253e6e5"
"54b9b6f98908f6679dda6db025b4047dfe82e6b57ae82c547a9d611b9e4ff105"
ghcup_016_64_darwin10_13 :: DownloadInfo
ghcup_016_64_darwin10_13 = DownloadInfo
[uri|https://downloads.haskell.org/~ghcup/0.1.6/x86_64-apple-darwin-ghcup-0.1.6|]
ghcup_017_64_darwin10_13 :: DownloadInfo
ghcup_017_64_darwin10_13 = DownloadInfo
[uri|https://downloads.haskell.org/~ghcup/0.1.7/x86_64-apple-darwin-ghcup-0.1.7|]
Nothing
"1e025e66d7f7b75d94f17a7da6120efd7e2df918a8eac88c4711ed11d2aac4ec"
"00b2c04755d2b40e568afbfc2a485c36697fc55f210eae0d4cd80413c71032ed"
@@ -1155,7 +1068,6 @@ ghcupDownloads = M.fromList
)
, (Darwin , M.fromList [(Nothing, ghc_7103_64_darwin)])
, (FreeBSD , M.fromList [(Nothing, ghc_7103_64_freebsd)])
, (Linux Alpine, M.fromList [(Nothing, ghc_7103_64_musl)])
]
)
, ( A_32
@@ -1202,7 +1114,7 @@ ghcupDownloads = M.fromList
)
, (Darwin , M.fromList [(Nothing, ghc_802_64_darwin)])
, (FreeBSD , M.fromList [(Nothing, ghc_802_64_freebsd)])
, (Linux Alpine, M.fromList [(Nothing, ghc_802_64_musl)])
, (Linux Alpine , M.fromList [(Nothing, ghc_802_64_alpine)])
]
)
, ( A_32
@@ -1216,7 +1128,7 @@ ghcupDownloads = M.fromList
, (Just [vers|7|], ghc_802_32_deb7)
]
)
, (Linux Alpine, M.fromList [(Nothing, ghc_802_32_musl)])
, (Linux Alpine , M.fromList [(Nothing, ghc_802_32_alpine)])
]
)
]
@@ -1254,6 +1166,7 @@ ghcupDownloads = M.fromList
, (Just [vers|11|], ghc_822_64_freebsd11)
]
)
, (Linux Alpine , M.fromList [(Nothing, ghc_822_64_alpine)])
]
)
, ( A_32
@@ -1269,6 +1182,7 @@ ghcupDownloads = M.fromList
, (Just [vers|7|], ghc_822_32_deb7)
]
)
, (Linux Alpine , M.fromList [(Nothing, ghc_822_32_alpine)])
]
)
]
@@ -1296,7 +1210,6 @@ ghcupDownloads = M.fromList
, (Linux Debian, M.fromList [(Nothing, ghc_841_64_deb8)])
, (Darwin , M.fromList [(Nothing, ghc_841_64_darwin)])
, (FreeBSD , M.fromList [(Nothing, ghc_841_64_freebsd)])
, (Linux Alpine, M.fromList [(Nothing, ghc_841_64_musl)])
]
)
, ( A_32
@@ -1307,7 +1220,6 @@ ghcupDownloads = M.fromList
, (Linux Ubuntu, M.fromList [(Nothing, ghc_841_32_deb8)])
, (Linux Mint , M.fromList [(Nothing, ghc_841_32_deb8)])
, (Linux Debian, M.fromList [(Nothing, ghc_841_32_deb8)])
, (Linux Alpine, M.fromList [(Nothing, ghc_841_32_musl)])
]
)
]
@@ -1346,7 +1258,6 @@ ghcupDownloads = M.fromList
)
, (Darwin , M.fromList [(Nothing, ghc_842_64_darwin)])
, (FreeBSD , M.fromList [(Nothing, ghc_842_64_freebsd)])
, (Linux Alpine, M.fromList [(Nothing, ghc_842_64_musl)])
]
)
, ( A_32
@@ -1357,7 +1268,6 @@ ghcupDownloads = M.fromList
, (Linux Ubuntu, M.fromList [(Nothing, ghc_842_32_deb8)])
, (Linux Mint , M.fromList [(Nothing, ghc_842_32_deb8)])
, (Linux Debian, M.fromList [(Nothing, ghc_842_32_deb8)])
, (Linux Alpine, M.fromList [(Nothing, ghc_842_32_musl)])
]
)
]
@@ -1395,7 +1305,6 @@ ghcupDownloads = M.fromList
]
)
, (Darwin , M.fromList [(Nothing, ghc_843_64_darwin)])
, (Linux Alpine, M.fromList [(Nothing, ghc_843_64_musl)])
]
)
, ( A_32
@@ -1406,7 +1315,6 @@ ghcupDownloads = M.fromList
, (Linux Ubuntu, M.fromList [(Nothing, ghc_843_32_deb8)])
, (Linux Mint , M.fromList [(Nothing, ghc_843_32_deb8)])
, (Linux Debian, M.fromList [(Nothing, ghc_843_32_deb8)])
, (Linux Alpine, M.fromList [(Nothing, ghc_843_32_musl)])
]
)
]
@@ -1450,7 +1358,7 @@ ghcupDownloads = M.fromList
)
, (Darwin , M.fromList [(Nothing, ghc_844_64_darwin)])
, (FreeBSD , M.fromList [(Nothing, ghc_844_64_freebsd)])
, (Linux Alpine, M.fromList [(Nothing, ghc_844_64_musl)])
, (Linux Alpine, M.fromList [(Nothing, ghc_844_64_alpine)])
]
)
, ( A_32
@@ -1461,7 +1369,7 @@ ghcupDownloads = M.fromList
, (Linux Ubuntu, M.fromList [(Nothing, ghc_844_32_deb8)])
, (Linux Mint , M.fromList [(Nothing, ghc_844_32_deb8)])
, (Linux Debian, M.fromList [(Nothing, ghc_844_32_deb8)])
, (Linux Alpine, M.fromList [(Nothing, ghc_844_32_musl)])
, (Linux Alpine, M.fromList [(Nothing, ghc_844_32_alpine)])
]
)
]
@@ -1500,7 +1408,6 @@ ghcupDownloads = M.fromList
)
, (Darwin , M.fromList [(Nothing, ghc_861_64_darwin)])
, (FreeBSD , M.fromList [(Nothing, ghc_861_64_freebsd)])
, (Linux Alpine, M.fromList [(Nothing, ghc_861_64_musl)])
]
)
, ( A_32
@@ -1511,7 +1418,6 @@ ghcupDownloads = M.fromList
, (Linux Ubuntu, M.fromList [(Nothing, ghc_861_32_deb8)])
, (Linux Mint , M.fromList [(Nothing, ghc_861_32_deb8)])
, (Linux Debian, M.fromList [(Nothing, ghc_861_32_deb8)])
, (Linux Alpine, M.fromList [(Nothing, ghc_861_32_musl)])
]
)
]
@@ -1544,7 +1450,6 @@ ghcupDownloads = M.fromList
, (Linux Mint , M.fromList [(Nothing, ghc_862_64_deb8)])
, (Linux Debian, M.fromList [(Nothing, ghc_862_64_deb8)])
, (Darwin , M.fromList [(Nothing, ghc_862_64_darwin)])
, (Linux Alpine, M.fromList [(Nothing, ghc_862_64_musl)])
]
)
, ( A_32
@@ -1555,7 +1460,6 @@ ghcupDownloads = M.fromList
, (Linux Ubuntu, M.fromList [(Nothing, ghc_862_32_deb8)])
, (Linux Mint , M.fromList [(Nothing, ghc_862_32_deb8)])
, (Linux Debian, M.fromList [(Nothing, ghc_862_32_deb8)])
, (Linux Alpine, M.fromList [(Nothing, ghc_862_32_musl)])
]
)
]
@@ -1599,7 +1503,6 @@ ghcupDownloads = M.fromList
)
, (Darwin , M.fromList [(Nothing, ghc_863_64_darwin)])
, (FreeBSD , M.fromList [(Nothing, ghc_863_64_freebsd)])
, (Linux Alpine, M.fromList [(Nothing, ghc_863_64_musl)])
]
)
, ( A_32
@@ -1610,7 +1513,6 @@ ghcupDownloads = M.fromList
, (Linux Ubuntu, M.fromList [(Nothing, ghc_863_32_deb8)])
, (Linux Mint , M.fromList [(Nothing, ghc_863_32_deb8)])
, (Linux Debian, M.fromList [(Nothing, ghc_863_32_deb8)])
, (Linux Alpine, M.fromList [(Nothing, ghc_863_32_musl)])
]
)
]
@@ -1648,7 +1550,6 @@ ghcupDownloads = M.fromList
]
)
, (Darwin , M.fromList [(Nothing, ghc_864_64_darwin)])
, (Linux Alpine, M.fromList [(Nothing, ghc_864_64_musl)])
]
)
, ( A_32
@@ -1659,7 +1560,6 @@ ghcupDownloads = M.fromList
, (Linux Ubuntu, M.fromList [(Nothing, ghc_864_32_deb9)])
, (Linux Mint , M.fromList [(Nothing, ghc_864_32_deb9)])
, (Linux Debian, M.fromList [(Nothing, ghc_864_32_deb9)])
, (Linux Alpine, M.fromList [(Nothing, ghc_864_32_musl)])
]
)
]
@@ -1702,7 +1602,7 @@ ghcupDownloads = M.fromList
]
)
, (Darwin , M.fromList [(Nothing, ghc_865_64_darwin)])
, (Linux Alpine, M.fromList [(Nothing, ghc_865_64_musl)])
, (Linux Alpine, M.fromList [(Nothing, ghc_865_64_alpine)])
, (FreeBSD , M.fromList [(Nothing, ghc_865_64_freebsd)])
]
)
@@ -1714,7 +1614,7 @@ ghcupDownloads = M.fromList
, (Linux Ubuntu, M.fromList [(Nothing, ghc_865_32_deb9)])
, (Linux Mint , M.fromList [(Nothing, ghc_865_32_deb9)])
, (Linux Debian, M.fromList [(Nothing, ghc_865_32_deb9)])
, (Linux Alpine, M.fromList [(Nothing, ghc_865_32_musl)])
, (Linux Alpine, M.fromList [(Nothing, ghc_865_32_alpine)])
]
)
]
@@ -1757,7 +1657,6 @@ ghcupDownloads = M.fromList
]
)
, (Darwin , M.fromList [(Nothing, ghc_881_64_darwin)])
, (Linux Alpine, M.fromList [(Nothing, ghc_881_64_musl)])
]
)
, ( A_32
@@ -1768,7 +1667,6 @@ ghcupDownloads = M.fromList
, (Linux Ubuntu, M.fromList [(Nothing, ghc_881_32_deb9)])
, (Linux Mint , M.fromList [(Nothing, ghc_881_32_deb9)])
, (Linux Debian, M.fromList [(Nothing, ghc_881_32_deb9)])
, (Linux Alpine, M.fromList [(Nothing, ghc_881_32_musl)])
]
)
]
@@ -1811,7 +1709,6 @@ ghcupDownloads = M.fromList
]
)
, (Darwin , M.fromList [(Nothing, ghc_882_64_darwin)])
, (Linux Alpine, M.fromList [(Nothing, ghc_882_64_musl)])
]
)
, ( A_32
@@ -1822,14 +1719,13 @@ ghcupDownloads = M.fromList
, (Linux Ubuntu, M.fromList [(Nothing, ghc_882_32_deb9)])
, (Linux Mint , M.fromList [(Nothing, ghc_882_32_deb9)])
, (Linux Debian, M.fromList [(Nothing, ghc_882_32_deb9)])
, (Linux Alpine, M.fromList [(Nothing, ghc_882_32_musl)])
]
)
]
)
, ( [vver|8.8.3|]
, VersionInfo
[Recommended, Base [pver|4.13.0.0|]]
[Base [pver|4.13.0.0|]]
(Just
[uri|https://downloads.haskell.org/~ghc/8.8.3/docs/html/users_guide/8.8.3-notes.html|]
)
@@ -1865,7 +1761,6 @@ ghcupDownloads = M.fromList
]
)
, (Darwin , M.fromList [(Nothing, ghc_883_64_darwin)])
, (Linux Alpine, M.fromList [(Nothing, ghc_883_64_musl)])
, (FreeBSD , M.fromList [(Nothing, ghc_883_64_freebsd)])
]
)
@@ -1877,14 +1772,13 @@ ghcupDownloads = M.fromList
, (Linux Ubuntu, M.fromList [(Nothing, ghc_883_32_deb9)])
, (Linux Mint , M.fromList [(Nothing, ghc_883_32_deb9)])
, (Linux Debian, M.fromList [(Nothing, ghc_883_32_deb9)])
, (Linux Alpine, M.fromList [(Nothing, ghc_883_32_musl)])
]
)
]
)
, ( [vver|8.8.4|]
, VersionInfo
[Base [pver|4.13.0.0|]]
[Recommended, Base [pver|4.13.0.0|]]
(Just
[uri|https://downloads.haskell.org/~ghc/8.8.4/docs/html/users_guide/8.8.4-notes.html|]
)
@@ -1920,6 +1814,8 @@ ghcupDownloads = M.fromList
]
)
, (Darwin, M.fromList [(Nothing, ghc_884_64_darwin)])
, (Linux Alpine, M.fromList [(Nothing, ghc_884_64_alpine)])
, (FreeBSD , M.fromList [(Nothing, ghc_884_64_freebsd)])
]
)
, ( A_32
@@ -1930,7 +1826,7 @@ ghcupDownloads = M.fromList
, (Linux Ubuntu, M.fromList [(Nothing, ghc_884_32_deb9)])
, (Linux Mint , M.fromList [(Nothing, ghc_884_32_deb9)])
, (Linux Debian, M.fromList [(Nothing, ghc_884_32_deb9)])
, (FreeBSD , M.fromList [(Nothing, ghc_884_64_freebsd)])
, (Linux Alpine, M.fromList [(Nothing, ghc_884_32_alpine)])
]
)
]
@@ -2001,6 +1897,7 @@ ghcupDownloads = M.fromList
, (Just [vers|9|], ghc_8101_32_deb9)
]
)
, (Linux Alpine, M.fromList [(Nothing, ghc_8101_32_alpine)])
]
)
]
@@ -2108,7 +2005,7 @@ ghcupDownloads = M.fromList
)
, ( GHCup
, M.fromList
[ ( [vver|0.1.6|]
[ ( [vver|0.1.7|]
, VersionInfo
[Recommended, Latest]
(Just
@@ -2119,16 +2016,16 @@ ghcupDownloads = M.fromList
[ ( A_64
, M.fromList
[ ( Linux UnknownLinux
, M.fromList [(Nothing, ghcup_016_64_linux)]
, M.fromList [(Nothing, ghcup_017_64_linux)]
)
, (Darwin , M.fromList [(Nothing, ghcup_016_64_darwin10_13)])
, (FreeBSD, M.fromList [(Nothing, ghcup_016_64_freebsd)])
, (Darwin , M.fromList [(Nothing, ghcup_017_64_darwin10_13)])
, (FreeBSD, M.fromList [(Nothing, ghcup_017_64_freebsd)])
]
)
, ( A_32
, M.fromList
[ ( Linux UnknownLinux
, M.fromList [(Nothing, ghcup_016_32_linux)]
, M.fromList [(Nothing, ghcup_017_32_linux)]
)
]
)

View File

@@ -12,7 +12,8 @@
module GHCup.Download where
#if defined(INTERNAL_DOWNLOADER)
import GHCup.Download.Internal
import GHCup.Download.IOStreams
import GHCup.Download.Utils
#endif
import GHCup.Errors
import GHCup.Types
@@ -232,20 +233,16 @@ getDownloads urlSource = do
#if !defined(INTERNAL_DOWNLOADER)
pure Nothing
#else
Settings{..} <- lift ask
case downloader of
Internal -> do
headers <-
handleIO (\_ -> pure mempty)
$ liftE
$ ( catchAllE
(\_ ->
pure mempty :: Excepts '[] m1 (M.Map (CI ByteString) ByteString)
)
$ getHead uri'
headers <-
handleIO (\_ -> pure mempty)
$ liftE
$ ( catchAllE
(\_ ->
pure mempty :: Excepts '[] m1 (M.Map (CI ByteString) ByteString)
)
pure $ parseModifiedHeader headers
_ -> pure Nothing
$ getHead uri'
)
pure $ parseModifiedHeader headers
parseModifiedHeader :: (M.Map (CI ByteString) ByteString) -> Maybe UTCTime
parseModifiedHeader headers =
@@ -273,7 +270,10 @@ getDownloadInfo :: Tool
getDownloadInfo t v (PlatformRequest a p mv) dls = maybe
(Left NoDownload)
Right
(with_distro <|> without_distro_ver <|> without_distro)
(case p of
-- non-musl won't work on alpine
Linux Alpine -> with_distro <|> without_distro_ver
_ -> with_distro <|> without_distro_ver <|> without_distro)
where
with_distro = distro_preview id id
@@ -342,7 +342,9 @@ download dli dest mfn
liftE $ lEM @_ @'[ProcessError] $ liftIO $ exec "wget" True
(o' ++ ["-O", toFilePath destFile , serializeURIRef' $ view dlUri dli]) Nothing Nothing
#if defined(INTERNAL_DOWNLOADER)
Internal -> liftE $ downloadToFile (_dlUri dli) destFile
Internal -> do
(https, host, fullPath, port) <- liftE $ uriToQuadruple (view dlUri dli)
liftE $ downloadToFile https host fullPath port destFile
#endif
liftE $ checkDigest dli destFile
@@ -409,8 +411,10 @@ downloadBS :: (MonadReader Settings m, MonadCatch m, MonadIO m, MonadLogger m)
m
L.ByteString
downloadBS uri'
| scheme == "https" || scheme == "http"
= dl
| scheme == "https"
= dl True
| scheme == "http"
= dl False
| scheme == "file"
= liftIOException doesNotExistErrorType (FileDoesNotExistError path)
$ (liftIO $ RD.readFile path)
@@ -420,7 +424,11 @@ downloadBS uri'
where
scheme = view (uriSchemeL' % schemeBSL') uri'
path = view pathL' uri'
dl = do
#if defined(INTERNAL_DOWNLOADER)
dl https = do
#else
dl _ = do
#endif
lift $ $(logDebug) [i|downloading: #{serializeURIRef' uri'}|]
lift getDownloader >>= \case
Curl -> do
@@ -440,7 +448,9 @@ downloadBS uri'
pure $ L.fromStrict stdout
CapturedProcess (ExitFailure i') _ _ -> throwE $ NonZeroExit i' (toFilePath exe) args
#if defined(INTERNAL_DOWNLOADER)
Internal -> liftE $ downloadBS' uri'
Internal -> do
(_, host', fullPath', port') <- liftE $ uriToQuadruple uri'
liftE $ downloadBS' https host' fullPath' port'
#endif

View File

@@ -0,0 +1,253 @@
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
module GHCup.Download.IOStreams where
import GHCup.Download.Utils
import GHCup.Errors
import GHCup.Types.Optics
import GHCup.Types.JSON ( )
import GHCup.Utils.File
import GHCup.Utils.Prelude
import Control.Applicative
import Control.Exception.Safe
import Control.Monad
import Control.Monad.Reader
import Data.ByteString ( ByteString )
import Data.ByteString.Builder
import Data.CaseInsensitive ( CI )
import Data.IORef
import Data.Maybe
import Data.Text.Read
import HPath
import HPath.IO as HIO
import Haskus.Utils.Variant.Excepts
import Network.Http.Client hiding ( URL )
import Optics
import Prelude hiding ( abs
, readFile
, writeFile
)
import "unix" System.Posix.IO.ByteString
hiding ( fdWrite )
import "unix-bytestring" System.Posix.IO.ByteString
( fdWrite )
import System.ProgressBar
import URI.ByteString
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as L
import qualified Data.Map.Strict as M
import qualified System.IO.Streams as Streams
----------------------------
--[ Low-level (non-curl) ]--
----------------------------
-- | Load the result of this download into memory at once.
downloadBS' :: MonadIO m
=> Bool -- ^ https?
-> ByteString -- ^ host (e.g. "www.example.com")
-> ByteString -- ^ path (e.g. "/my/file") including query
-> Maybe Int -- ^ optional port (e.g. 3000)
-> Excepts
'[ HTTPStatusError
, URIParseError
, UnsupportedScheme
, NoLocationHeader
, TooManyRedirs
]
m
(L.ByteString)
downloadBS' https host path port = do
bref <- liftIO $ newIORef (mempty :: Builder)
let stepper bs = modifyIORef bref (<> byteString bs)
downloadInternal False https host path port stepper
liftIO (readIORef bref <&> toLazyByteString)
downloadToFile :: (MonadMask m, MonadIO m)
=> Bool -- ^ https?
-> ByteString -- ^ host (e.g. "www.example.com")
-> ByteString -- ^ path (e.g. "/my/file") including query
-> Maybe Int -- ^ optional port (e.g. 3000)
-> Path Abs -- ^ destination file to create and write to
-> Excepts '[DownloadFailed] m ()
downloadToFile https host fullPath port destFile = do
fd <- liftIO $ createRegularFileFd newFilePerms destFile
let stepper = fdWrite fd
flip finally (liftIO $ closeFd fd)
$ reThrowAll DownloadFailed $ downloadInternal True https host fullPath port stepper
downloadInternal :: MonadIO m
=> Bool -- ^ whether to show a progress bar
-> Bool -- ^ https?
-> ByteString -- ^ host
-> ByteString -- ^ path with query
-> Maybe Int -- ^ optional port
-> (ByteString -> IO a) -- ^ the consuming step function
-> Excepts
'[ HTTPStatusError
, URIParseError
, UnsupportedScheme
, NoLocationHeader
, TooManyRedirs
]
m
()
downloadInternal = go (5 :: Int)
where
go redirs progressBar https host path port consumer = do
r <- liftIO $ withConnection' https host port action
veitherToExcepts r >>= \case
Just r' ->
if redirs > 0 then followRedirectURL r' else throwE TooManyRedirs
Nothing -> pure ()
where
action c = do
let q = buildRequest1 $ http GET path
sendRequest c q emptyBody
receiveResponse
c
(\r i' -> runE $ do
let scode = getStatusCode r
if
| scode >= 200 && scode < 300 -> downloadStream r i' >> pure Nothing
| scode >= 300 && scode < 400 -> case getHeader r "Location" of
Just r' -> pure $ Just $ r'
Nothing -> throwE NoLocationHeader
| otherwise -> throwE $ HTTPStatusError scode
)
followRedirectURL bs = case parseURI strictURIParserOptions bs of
Right uri' -> do
(https', host', fullPath', port') <- liftE $ uriToQuadruple uri'
go (redirs - 1) progressBar https' host' fullPath' port' consumer
Left e -> throwE e
downloadStream r i' = do
let size = case getHeader r "Content-Length" of
Just x' -> case decimal $ decUTF8Safe x' of
Left _ -> 0
Right (r', _) -> r'
Nothing -> 0
mpb <- if progressBar
then Just <$> (liftIO $ newProgressBar defStyle 10 (Progress 0 size ()))
else pure Nothing
outStream <- liftIO $ Streams.makeOutputStream
(\case
Just bs -> do
forM_ mpb $ \pb -> incProgress pb (BS.length bs)
void $ consumer bs
Nothing -> pure ()
)
liftIO $ Streams.connect i' outStream
getHead :: (MonadCatch m, MonadIO m)
=> URI
-> Excepts
'[ HTTPStatusError
, URIParseError
, UnsupportedScheme
, NoLocationHeader
, TooManyRedirs
, ProcessError
]
m
(M.Map (CI ByteString) ByteString)
getHead uri' | scheme == "https" = head' True
| scheme == "http" = head' False
| otherwise = throwE UnsupportedScheme
where
scheme = view (uriSchemeL' % schemeBSL') uri'
head' https = do
(_, host', fullPath', port') <- liftE $ uriToQuadruple uri'
liftE $ headInternal https host' fullPath' port'
headInternal :: MonadIO m
=> Bool -- ^ https?
-> ByteString -- ^ host
-> ByteString -- ^ path with query
-> Maybe Int -- ^ optional port
-> Excepts
'[ HTTPStatusError
, URIParseError
, UnsupportedScheme
, TooManyRedirs
, NoLocationHeader
]
m
(M.Map (CI ByteString) ByteString)
headInternal = go (5 :: Int)
where
go redirs https host path port = do
r <- liftIO $ withConnection' https host port action
veitherToExcepts r >>= \case
Left r' ->
if redirs > 0 then followRedirectURL r' else throwE TooManyRedirs
Right hs -> pure hs
where
action c = do
let q = buildRequest1 $ http HEAD path
sendRequest c q emptyBody
unsafeReceiveResponse
c
(\r _ -> runE $ do
let scode = getStatusCode r
if
| scode >= 200 && scode < 300 -> do
let headers = getHeaderMap r
pure $ Right $ headers
| scode >= 300 && scode < 400 -> case getHeader r "Location" of
Just r' -> pure $ Left $ r'
Nothing -> throwE NoLocationHeader
| otherwise -> throwE $ HTTPStatusError scode
)
followRedirectURL bs = case parseURI strictURIParserOptions bs of
Right uri' -> do
(https', host', fullPath', port') <- liftE $ uriToQuadruple uri'
go (redirs - 1) https' host' fullPath' port'
Left e -> throwE e
withConnection' :: Bool
-> ByteString
-> Maybe Int
-> (Connection -> IO a)
-> IO a
withConnection' https host port action = bracket acquire closeConnection action
where
acquire = case https of
True -> do
ctx <- baselineContextSSL
openConnectionSSL ctx host (fromIntegral $ fromMaybe 443 port)
False -> openConnection host (fromIntegral $ fromMaybe 80 port)

View File

@@ -1,214 +0,0 @@
{-# LANGUAGE CPP #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
module GHCup.Download.Internal where
import GHCup.Errors
import GHCup.Types.Optics
import GHCup.Types.JSON ( )
import GHCup.Utils.File
import GHCup.Utils.Prelude
import Control.Applicative
import Control.Exception.Safe
import Control.Monad
import Control.Monad.Reader
import Data.ByteString ( ByteString )
import Data.ByteString.Builder
import Data.CaseInsensitive ( CI )
import Data.IORef
import Data.Maybe
import Data.Text.Read
import HPath
import HPath.IO as HIO
import Haskus.Utils.Variant.Excepts
import Network.HTTP.Client
import Network.HTTP.Client.OpenSSL
import Network.HTTP.Types.Status
import Network.HTTP.Types.Header
import Optics
import Prelude hiding ( abs
, readFile
, writeFile
)
import "unix" System.Posix.IO.ByteString
hiding ( fdWrite )
import "unix-bytestring" System.Posix.IO.ByteString
( fdWrite )
import System.ProgressBar
import URI.ByteString
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as L
import qualified Data.Map.Strict as M
import qualified Data.Text as T
import qualified OpenSSL.Session as SSL
----------------------------
--[ Low-level (non-curl) ]--
----------------------------
-- | Load the result of this download into memory at once.
downloadBS' :: (MonadThrow m, MonadIO m)
=> URI
-> Excepts
'[HTTPStatusError]
m
(L.ByteString)
downloadBS' uri' = do
bref <- liftIO $ newIORef (mempty :: Builder)
-- TODO: performance
let stepper bs = modifyIORef bref (<> byteString bs)
downloadInternal False
(T.unpack . decUTF8Safe . serializeURIRef' $ uri')
stepper
liftIO (readIORef bref <&> toLazyByteString)
downloadToFile :: (MonadMask m, MonadIO m)
=> URI
-> Path Abs -- ^ destination file to create and write to
-> Excepts '[DownloadFailed] m ()
downloadToFile uri' destFile = do
fd <- liftIO $ createRegularFileFd newFilePerms destFile
let stepper = fdWrite fd
flip finally (liftIO $ closeFd fd)
$ reThrowAll DownloadFailed
$ downloadInternal True
(T.unpack . decUTF8Safe . serializeURIRef' $ uri')
stepper
downloadInternal :: (MonadThrow m, MonadIO m)
=> Bool -- ^ whether to show a progress bar
-> String
-> (ByteString -> IO a) -- ^ the consuming step function
-> Excepts
'[HTTPStatusError]
m
()
downloadInternal progressBar uri' consumer = lEM $ liftIO $ withConnection' action
where
action :: (MonadThrow m, MonadIO m) => Manager -> m (Either HTTPStatusError ())
action m = do
request <- parseRequest ("GET " <> uri')
liftIO $ withResponse
request
m
(\r -> do
let scode = statusCode . responseStatus $ r
if
| scode >= 200 && scode < 300 ->
let headers = M.fromList . responseHeaders $ r
in fmap Right $ liftIO $ downloadStream (responseBody r) headers
| otherwise -> pure $ Left $ HTTPStatusError scode
)
downloadStream :: BodyReader -> M.Map HeaderName ByteString -> IO ()
downloadStream br headers = do
let size = case M.lookup "Content-Length" headers of
Just x' -> case decimal $ decUTF8Safe x' of
Left _ -> 0
Right (r', _) -> r'
Nothing -> 0
mpb <- if progressBar
then Just <$> (liftIO $ newProgressBar defStyle 10 (Progress 0 size ()))
else pure Nothing
loop mpb
where
loop mpb = do
bs <- brRead br
if BS.length bs == 0 then pure () else do
void $ consumer bs
forM_ mpb $ \pb -> incProgress pb (BS.length bs)
loop mpb
getHead :: (MonadCatch m, MonadIO m)
=> URI
-> Excepts
'[HTTPStatusError, UnsupportedScheme]
m
(M.Map (CI ByteString) ByteString)
getHead uri' | scheme == "https" || scheme == "http" = head'
| otherwise = throwE UnsupportedScheme
where
scheme = view (uriSchemeL' % schemeBSL') uri'
head' =
liftE $ headInternal (T.unpack . decUTF8Safe . serializeURIRef' $ uri')
headInternal :: (MonadThrow m, MonadIO m)
=> String
-> Excepts
'[HTTPStatusError]
m
(M.Map (CI ByteString) ByteString)
headInternal uri' = lEM $ liftIO $ withConnection' action
where
action :: (MonadThrow m, MonadIO m)
=> Manager
-> m (Either HTTPStatusError (M.Map (CI ByteString) ByteString))
action m = do
request <- parseRequest ("HEAD " <> uri')
liftIO $ withResponse
request
m
(\r -> do
let scode = statusCode . responseStatus $ r
if
| scode >= 200 && scode < 300 -> do
let headers = responseHeaders r
pure $ Right $ M.fromList $ headers
| otherwise -> pure $ Left (HTTPStatusError scode)
)
withConnection' :: (Manager -> IO a) -> IO a
withConnection' action = do
mg <- newManager $ opensslManagerSettings baselineContextSSL
withOpenSSL (action mg)
baselineContextSSL :: IO SSL.SSLContext
baselineContextSSL = withOpenSSL $ do
ctx <- SSL.context
SSL.contextSetDefaultCiphers ctx
#if defined(darwin_HOST_OS)
SSL.contextSetVerificationMode ctx SSL.VerifyNone
#elif defined(mingw32_HOST_OS)
SSL.contextSetVerificationMode ctx SSL.VerifyNone
#elif defined(freebsd_HOST_OS)
SSL.contextSetCAFile ctx "/usr/local/etc/ssl/cert.pem"
SSL.contextSetVerificationMode ctx $ SSL.VerifyPeer True True Nothing
#elif defined(openbsd_HOST_OS)
SSL.contextSetCAFile ctx "/etc/ssl/cert.pem"
SSL.contextSetVerificationMode ctx $ SSL.VerifyPeer True True Nothing
#else
fedora <- doesDirectoryExist [abs|/etc/pki/tls|]
if fedora
then do
SSL.contextSetCAFile ctx "/etc/pki/tls/certs/ca-bundle.crt"
else do
SSL.contextSetCADirectory ctx "/etc/ssl/certs"
SSL.contextSetVerificationMode ctx $ SSL.VerifyPeer True True Nothing
#endif
return ctx

View File

@@ -0,0 +1,64 @@
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
module GHCup.Download.Utils where
import GHCup.Errors
import GHCup.Types.Optics
import GHCup.Types.JSON ( )
import GHCup.Utils.Prelude
import Control.Applicative
import Control.Monad
import Data.ByteString ( ByteString )
import Data.Maybe
import Haskus.Utils.Variant.Excepts
import Optics
import Prelude hiding ( abs
, readFile
, writeFile
)
import URI.ByteString
import qualified Data.Binary.Builder as B
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as L
-- | Extracts from a URI type: (https?, host, path+query, port)
uriToQuadruple :: Monad m
=> URI
-> Excepts
'[UnsupportedScheme]
m
(Bool, ByteString, ByteString, Maybe Int)
uriToQuadruple URI {..} = do
let scheme = view schemeBSL' uriScheme
host <-
preview (_Just % authorityHostL' % hostBSL') uriAuthority
?? UnsupportedScheme
https <- if
| scheme == "https" -> pure True
| scheme == "http" -> pure False
| otherwise -> throwE UnsupportedScheme
let queryBS =
BS.intercalate "&"
. fmap (\(x, y) -> encodeQuery x <> "=" <> encodeQuery y)
$ (queryPairs uriQuery)
port =
preview (_Just % authorityPortL' % _Just % portNumberL') uriAuthority
fullpath = if BS.null queryBS then uriPath else uriPath <> "?" <> queryBS
pure (https, host, fullpath, port)
where encodeQuery = L.toStrict . B.toLazyByteString . urlEncodeQuery

View File

@@ -1,12 +1,8 @@
{-# OPTIONS_GHC -Wno-orphans #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveLift #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
@@ -17,10 +13,8 @@ module GHCup.Utils.Prelude where
import Control.Applicative
import Control.Exception.Safe
import Control.Monad
import Control.Monad.Base
import Control.Monad.IO.Class
import Control.Monad.Trans.Class ( lift )
import Control.Monad.Trans.Control
import Data.Bifunctor
import Data.ByteString ( ByteString )
import Data.String
@@ -270,40 +264,3 @@ decUTF8Safe = E.decodeUtf8With E.lenientDecode
decUTF8Safe' :: L.ByteString -> Text
decUTF8Safe' = TL.toStrict . TLE.decodeUtf8With E.lenientDecode
instance MonadBaseControl b m => MonadBaseControl b (Excepts e m) where
type StM (Excepts e m) a = ComposeSt (Excepts e) m a
liftBaseWith = defaultLiftBaseWith
restoreM = defaultRestoreM
{-# INLINABLE liftBaseWith #-}
{-# INLINABLE restoreM #-}
instance MonadTransControl (Excepts e) where
type StT (Excepts e) a = VEither e a
liftWith f = veitherMToExcepts <$> liftM return $ f $ runE
restoreT = veitherMToExcepts
{-# INLINABLE liftWith #-}
{-# INLINABLE restoreT #-}
instance MonadBase b m => MonadBase b (Excepts e m) where
liftBase = liftBaseDefault
{-# INLINABLE liftBase #-}
instance MonadBaseControl (VEither e) (VEither e) where
type StM (VEither e) a = a
liftBaseWith f = f id
restoreM = return
{-# INLINABLE liftBaseWith #-}
{-# INLINABLE restoreM #-}
instance MonadBase (VEither e) (VEither e) where
liftBase = id
{-# INLINABLE liftBase #-}
veitherMToExcepts :: Monad m => m (VEither es a) -> Excepts es m a
veitherMToExcepts ma = do
ve <- lift ma
veitherToExcepts ve

View File

@@ -16,7 +16,7 @@ ghcupURL :: URI
ghcupURL = [uri|https://www.haskell.org/ghcup/data/ghcup-0.0.2.json|]
ghcUpVer :: PVP
ghcUpVer = [pver|0.1.6|]
ghcUpVer = [pver|0.1.7|]
numericVer :: String
numericVer = T.unpack . prettyPVP $ ghcUpVer