Compare commits
88 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 96f7aa5c62 | |||
| c2186bb33c | |||
| 1a9d43ea1a | |||
| 9de324d3c3 | |||
| b53acfe61f | |||
|
|
c92f71471d | ||
| 2a79c669a5 | |||
| 9b2d326c38 | |||
| 2bfca3760c | |||
| 0f7f5347d8 | |||
| 80703d7b29 | |||
| 942685f396 | |||
| 02744ff4a0 | |||
| c74409b9a5 | |||
| 1c32dbc88a | |||
| ab17270761 | |||
| d0538a50e0 | |||
| 318ac21e41 | |||
| 3e9bb7c369 | |||
| 2c64cd0f02 | |||
| 59e6b65249 | |||
| 91ef2c7666 | |||
| 935cb5541b | |||
| 9a7eb11c73 | |||
| 4b338ccfd8 | |||
| ca92b29ffe | |||
| ec4e69e89d | |||
| c225f2cfee | |||
| e325728f38 | |||
| c9a44d211e | |||
| 4b3ffd8570 | |||
| 3e9746cf0c | |||
| 950155cbe3 | |||
| dd978ff2fd | |||
| 4bbaffaa6f | |||
| 2a12362e75 | |||
| 411ac8dc31 | |||
| b837a93176 | |||
| 1c56e782d2 | |||
| c6c61ca486 | |||
| 6ae312c1f9 | |||
| f6cf4cb90c | |||
| 3ff65219e8 | |||
| e33f554838 | |||
| 2850f343b9 | |||
|
|
8d6445c632 | ||
|
|
de611e0d4e | ||
|
|
6fec9d4737 | ||
|
|
856e48aa14 | ||
|
|
2cafd9d2bc | ||
|
|
87ec8c756f | ||
| 2ece023c0f | |||
| 16e20ed474 | |||
| afd7e7dc4f | |||
| d46bdbf959 | |||
| cac3cec135 | |||
| 4e0efff4c4 | |||
| 71b7c96ddd | |||
| 5ff61cdf86 | |||
| 7d0ba7fc62 | |||
| bfe56aed1f | |||
| a1103c05a5 | |||
| 125125b9db | |||
| 4eec582f1b | |||
| e969489ca2 | |||
| ec4a657b42 | |||
| 55030d83da | |||
|
|
dfe213824f | ||
| c680a9f33b | |||
| df192ee18e | |||
|
|
008def2ff4 | ||
|
|
3976daddb7 | ||
| 524cdbbeb1 | |||
| a01c5acfe2 | |||
|
|
6689312ac5 | ||
| e214695a3e | |||
|
|
9d7f99bd00 | ||
| 3cea6ef97c | |||
| 3b0f131a65 | |||
|
|
e0a3020e34 | ||
|
|
0e46b9509a | ||
|
|
d3474d0cd9 | ||
|
|
5c3dad1bb9 | ||
|
|
987cdaf313 | ||
|
|
835352428a | ||
|
|
8f4246e716 | ||
|
|
1353a2fd20 | ||
|
|
aa9fbdbfc2 |
28
.cirrus.yml
28
.cirrus.yml
@@ -1,28 +0,0 @@
|
|||||||
freebsd_instance:
|
|
||||||
image_family: freebsd-13-2
|
|
||||||
|
|
||||||
build_task:
|
|
||||||
name: build
|
|
||||||
env:
|
|
||||||
GHC_VER: 9.2.4
|
|
||||||
CABAL_VER: 3.8.1.0
|
|
||||||
ARTIFACT: "x86_64-portbld-freebsd-ghcup"
|
|
||||||
ARCH: 64
|
|
||||||
RUNNER_OS: FreeBSD
|
|
||||||
DISTRO: na
|
|
||||||
GITHUB_WORKSPACE: ${CIRRUS_WORKING_DIR}
|
|
||||||
JSON_VERSION: "0.0.7"
|
|
||||||
CIRRUS_CLONE_SUBMODULES: true
|
|
||||||
AWS_ACCESS_KEY_ID: ENCRYPTED[6ed6287e2dd78ab5f84b22232c5245834ab042bd8ba443883aaf4b4d1ecc0481add1fdfad5ae6f6a8cfb418e6f19b2fc]
|
|
||||||
AWS_SECRET_ACCESS_KEY: ENCRYPTED[16f3cda2954c7cee99444e6788eb5997382aa4ce1477e7523fef2586077541f43b5c816156961fc6b4677259679875a7]
|
|
||||||
S3_HOST: ENCRYPTED[ce961780a33159f7d1d8046956b5ac6ebc3bfc8149428e5f538576cda51d9f3d0c35b79cdd1e325793639ff6e31f889d]
|
|
||||||
install_script:
|
|
||||||
- sed -i.bak -e 's/quarterly/latest/' /etc/pkg/FreeBSD.conf
|
|
||||||
- pkg install -y ghc hs-cabal-install git bash misc/compat10x misc/compat11x misc/compat12x gmake llvm14
|
|
||||||
script:
|
|
||||||
- tzsetup Etc/GMT
|
|
||||||
- adjkerntz -a
|
|
||||||
- bash .github/scripts/build.sh
|
|
||||||
- bash .github/scripts/test.sh
|
|
||||||
binaries_artifacts:
|
|
||||||
path: "out/*"
|
|
||||||
2
.github/scripts/common.sh
vendored
2
.github/scripts/common.sh
vendored
@@ -44,7 +44,7 @@ raw_eghcup() {
|
|||||||
|
|
||||||
eghcup() {
|
eghcup() {
|
||||||
if [ "${OS}" = "Windows" ] ; then
|
if [ "${OS}" = "Windows" ] ; then
|
||||||
"$GHCUP_BIN/ghcup${ext}" -c -s "file:/$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml" "$@"
|
"$GHCUP_BIN/ghcup${ext}" -c -s "file:${GITHUB_WORKSPACE//\\//}/data/metadata/ghcup-${JSON_VERSION}.yaml" "$@"
|
||||||
else
|
else
|
||||||
"$GHCUP_BIN/ghcup${ext}" -c -s "file://$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml" "$@"
|
"$GHCUP_BIN/ghcup${ext}" -c -s "file://$CI_PROJECT_DIR/data/metadata/ghcup-${JSON_VERSION}.yaml" "$@"
|
||||||
fi
|
fi
|
||||||
|
|||||||
4
.github/scripts/env.sh
vendored
4
.github/scripts/env.sh
vendored
@@ -9,6 +9,10 @@ fi
|
|||||||
export DEBIAN_FRONTEND=noninteractive
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
export TZ=Asia/Singapore
|
export TZ=Asia/Singapore
|
||||||
|
|
||||||
|
if [ "${RUNNER_OS}" = "freebsd" ] ; then
|
||||||
|
export RUNNER_OS=FreeBSD
|
||||||
|
fi
|
||||||
|
|
||||||
export OS="$RUNNER_OS"
|
export OS="$RUNNER_OS"
|
||||||
export PATH="$HOME/.local/bin:$PATH"
|
export PATH="$HOME/.local/bin:$PATH"
|
||||||
|
|
||||||
|
|||||||
11
.github/scripts/test.sh
vendored
11
.github/scripts/test.sh
vendored
@@ -11,6 +11,7 @@ else
|
|||||||
GHCUP_DIR="${GHCUP_INSTALL_BASE_PREFIX}"/.ghcup
|
GHCUP_DIR="${GHCUP_INSTALL_BASE_PREFIX}"/.ghcup
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
env
|
||||||
git_describe
|
git_describe
|
||||||
|
|
||||||
rm -rf "${GHCUP_DIR}"
|
rm -rf "${GHCUP_DIR}"
|
||||||
@@ -38,6 +39,12 @@ rm "ghcup-test${ext}" "ghcup-test-optparse${ext}"
|
|||||||
|
|
||||||
eghcup --numeric-version
|
eghcup --numeric-version
|
||||||
|
|
||||||
|
# test PATH on windows wrt msys2
|
||||||
|
# https://github.com/haskell/ghcup-hs/pull/992/checks
|
||||||
|
if [ "${OS}" = "Windows" ] ; then
|
||||||
|
eghcup run -m -- sh -c 'echo $PATH' | sed 's/:/\n/' | grep '^/mingw64/bin$'
|
||||||
|
fi
|
||||||
|
|
||||||
eghcup install ghc "${GHC_VER}"
|
eghcup install ghc "${GHC_VER}"
|
||||||
eghcup unset ghc "${GHC_VER}"
|
eghcup unset ghc "${GHC_VER}"
|
||||||
ls -lah "$(eghcup whereis -d ghc "${GHC_VER}")"
|
ls -lah "$(eghcup whereis -d ghc "${GHC_VER}")"
|
||||||
@@ -193,7 +200,7 @@ sha=$(sha_sum "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml")
|
|||||||
# invalidate access time timer, which is 5minutes, so we re-download
|
# invalidate access time timer, which is 5minutes, so we re-download
|
||||||
touch -a -m -t '199901010101' "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml"
|
touch -a -m -t '199901010101' "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml"
|
||||||
# redownload same file with some newlines added
|
# redownload same file with some newlines added
|
||||||
raw_eghcup -s https://raw.githubusercontent.com/haskell/ghcup-metadata/exp/ghcup-0.0.7.yaml list
|
raw_eghcup -s https://raw.githubusercontent.com/haskell/ghcup-metadata/exp/ghcup-${JSON_VERSION}.yaml list
|
||||||
# snapshot new yaml and etags file
|
# snapshot new yaml and etags file
|
||||||
etag2=$(cat "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml.etags")
|
etag2=$(cat "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml.etags")
|
||||||
sha2=$(sha_sum "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml")
|
sha2=$(sha_sum "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml")
|
||||||
@@ -203,7 +210,7 @@ sha2=$(sha_sum "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml")
|
|||||||
# invalidate access time timer, which is 5minutes, but don't expect a re-download
|
# invalidate access time timer, which is 5minutes, but don't expect a re-download
|
||||||
touch -a -m -t '199901010101' "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml"
|
touch -a -m -t '199901010101' "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml"
|
||||||
# this time, we expect the same hash and etag
|
# this time, we expect the same hash and etag
|
||||||
raw_eghcup -s https://raw.githubusercontent.com/haskell/ghcup-metadata/exp/ghcup-0.0.7.yaml list
|
raw_eghcup -s https://raw.githubusercontent.com/haskell/ghcup-metadata/exp/ghcup-${JSON_VERSION}.yaml list
|
||||||
etag3=$(cat "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml.etags")
|
etag3=$(cat "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml.etags")
|
||||||
sha3=$(sha_sum "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml")
|
sha3=$(sha_sum "${GHCUP_DIR}/cache/ghcup-${JSON_VERSION}.yaml")
|
||||||
[ "${etag2}" = "${etag3}" ]
|
[ "${etag2}" = "${etag3}" ]
|
||||||
|
|||||||
4
.github/workflows/bootstrap.yaml
vendored
4
.github/workflows/bootstrap.yaml
vendored
@@ -52,7 +52,9 @@ jobs:
|
|||||||
- if: runner.os == 'Windows'
|
- if: runner.os == 'Windows'
|
||||||
name: Run bootstrap
|
name: Run bootstrap
|
||||||
run: |
|
run: |
|
||||||
|
$ErrorActionPreference = [System.Management.Automation.ActionPreference]::Stop
|
||||||
$curDir = Get-Location
|
$curDir = Get-Location
|
||||||
Write-Host "Current Working Directory: $curDir"
|
Write-Host "Current Working Directory: $curDir"
|
||||||
./scripts/bootstrap/bootstrap-haskell.ps1 -InstallDir ${GITHUB_WORKSPACE} -BootstrapUrl ("{0}/scripts/bootstrap/bootstrap-haskell" -f $curDir) -InBash
|
./scripts/bootstrap/bootstrap-haskell.ps1 -InstallDir ${GITHUB_WORKSPACE} -BootstrapUrl ("{0}/scripts/bootstrap/bootstrap-haskell" -f $curDir) -InBash -Msys2Env "MINGW64"
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
|
|
||||||
|
|||||||
2
.github/workflows/cross.yaml
vendored
2
.github/workflows/cross.yaml
vendored
@@ -19,7 +19,7 @@ env:
|
|||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Build linux binary
|
name: Build linux binary
|
||||||
runs-on: ubuntu-latest
|
runs-on: [self-hosted, Linux, X64, maerwald]
|
||||||
env:
|
env:
|
||||||
CABAL_VER: 3.10.1.0
|
CABAL_VER: 3.10.1.0
|
||||||
JSON_VERSION: "0.0.7"
|
JSON_VERSION: "0.0.7"
|
||||||
|
|||||||
2
.github/workflows/docker.yaml
vendored
2
.github/workflows/docker.yaml
vendored
@@ -57,6 +57,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: docker://arm64v8/ubuntu:focal
|
- uses: docker://arm64v8/ubuntu:focal
|
||||||
name: Cleanup (aarch64 linux)
|
name: Cleanup (aarch64 linux)
|
||||||
|
continue-on-error: true
|
||||||
with:
|
with:
|
||||||
args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +"
|
args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +"
|
||||||
|
|
||||||
@@ -93,6 +94,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: docker://arm64v8/ubuntu:focal
|
- uses: docker://arm64v8/ubuntu:focal
|
||||||
name: Cleanup (aarch64 linux)
|
name: Cleanup (aarch64 linux)
|
||||||
|
continue-on-error: true
|
||||||
with:
|
with:
|
||||||
args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +"
|
args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +"
|
||||||
|
|
||||||
|
|||||||
147
.github/workflows/release.yaml
vendored
147
.github/workflows/release.yaml
vendored
@@ -21,8 +21,8 @@ jobs:
|
|||||||
name: Build linux binary
|
name: Build linux binary
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
env:
|
env:
|
||||||
CABAL_VER: 3.10.1.0
|
CABAL_VER: 3.10.2.0
|
||||||
JSON_VERSION: "0.0.7"
|
JSON_VERSION: "0.0.8"
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
S3_HOST: ${{ secrets.S3_HOST }}
|
S3_HOST: ${{ secrets.S3_HOST }}
|
||||||
@@ -36,7 +36,7 @@ jobs:
|
|||||||
ARCH: 32
|
ARCH: 32
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
ARTIFACT: "x86_64-linux-ghcup"
|
ARTIFACT: "x86_64-linux-ghcup"
|
||||||
GHC_VER: 8.10.7
|
GHC_VER: 9.4.8
|
||||||
ARCH: 64
|
ARCH: 64
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
@@ -85,8 +85,8 @@ jobs:
|
|||||||
name: Build ARM binary
|
name: Build ARM binary
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
env:
|
env:
|
||||||
CABAL_VER: 3.10.1.0
|
CABAL_VER: 3.6.2.0
|
||||||
JSON_VERSION: "0.0.7"
|
JSON_VERSION: "0.0.8"
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
S3_HOST: ${{ secrets.S3_HOST }}
|
S3_HOST: ${{ secrets.S3_HOST }}
|
||||||
@@ -96,18 +96,13 @@ jobs:
|
|||||||
include:
|
include:
|
||||||
- os: [self-hosted, Linux, ARM64]
|
- os: [self-hosted, Linux, ARM64]
|
||||||
ARTIFACT: "armv7-linux-ghcup"
|
ARTIFACT: "armv7-linux-ghcup"
|
||||||
GHC_VER: 9.2.2
|
GHC_VER: 9.2.8
|
||||||
ARCH: ARM
|
ARCH: ARM
|
||||||
- os: [self-hosted, Linux, ARM64]
|
- os: [self-hosted, Linux, ARM64]
|
||||||
ARTIFACT: "aarch64-linux-ghcup"
|
ARTIFACT: "aarch64-linux-ghcup"
|
||||||
GHC_VER: 9.2.6
|
GHC_VER: 9.4.8
|
||||||
ARCH: ARM64
|
ARCH: ARM64
|
||||||
steps:
|
steps:
|
||||||
- uses: docker://arm64v8/debian:10
|
|
||||||
name: Cleanup (aarch64 linux)
|
|
||||||
with:
|
|
||||||
args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +"
|
|
||||||
|
|
||||||
- name: git config
|
- name: git config
|
||||||
run: |
|
run: |
|
||||||
git config --global --get-all safe.directory | grep '^\*$' || git config --global --add safe.directory "*"
|
git config --global --get-all safe.directory | grep '^\*$' || git config --global --add safe.directory "*"
|
||||||
@@ -158,9 +153,9 @@ jobs:
|
|||||||
name: Build binary (Mac/Win)
|
name: Build binary (Mac/Win)
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
env:
|
env:
|
||||||
CABAL_VER: 3.10.1.0
|
CABAL_VER: 3.10.2.0
|
||||||
MACOSX_DEPLOYMENT_TARGET: 10.13
|
MACOSX_DEPLOYMENT_TARGET: 10.13
|
||||||
JSON_VERSION: "0.0.7"
|
JSON_VERSION: "0.0.8"
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
S3_HOST: ${{ secrets.S3_HOST }}
|
S3_HOST: ${{ secrets.S3_HOST }}
|
||||||
@@ -170,15 +165,15 @@ jobs:
|
|||||||
include:
|
include:
|
||||||
- os: [self-hosted, macOS, ARM64]
|
- os: [self-hosted, macOS, ARM64]
|
||||||
ARTIFACT: "aarch64-apple-darwin-ghcup"
|
ARTIFACT: "aarch64-apple-darwin-ghcup"
|
||||||
GHC_VER: 9.2.6
|
GHC_VER: 9.4.8
|
||||||
ARCH: ARM64
|
ARCH: ARM64
|
||||||
- os: macOS-11
|
- os: macOS-11
|
||||||
ARTIFACT: "x86_64-apple-darwin-ghcup"
|
ARTIFACT: "x86_64-apple-darwin-ghcup"
|
||||||
GHC_VER: 9.2.6
|
GHC_VER: 9.4.8
|
||||||
ARCH: 64
|
ARCH: 64
|
||||||
- os: windows-latest
|
- os: windows-latest
|
||||||
ARTIFACT: "x86_64-mingw64-ghcup"
|
ARTIFACT: "x86_64-mingw64-ghcup"
|
||||||
GHC_VER: 8.10.7
|
GHC_VER: 9.4.8
|
||||||
ARCH: 64
|
ARCH: 64
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
@@ -189,13 +184,13 @@ jobs:
|
|||||||
- if: matrix.ARCH == 'ARM64' && runner.os == 'macOS'
|
- if: matrix.ARCH == 'ARM64' && runner.os == 'macOS'
|
||||||
name: Run build
|
name: Run build
|
||||||
run: |
|
run: |
|
||||||
bash .github/scripts/brew.sh git coreutils llvm@11 autoconf automake
|
bash .github/scripts/brew.sh git coreutils llvm@13 autoconf automake
|
||||||
export PATH="$HOME/.brew/bin:$HOME/.brew/sbin:$HOME/.brew/opt/llvm@11/bin:$PATH"
|
export PATH="$HOME/.brew/bin:$HOME/.brew/sbin:$HOME/.brew/opt/llvm@13/bin:$PATH"
|
||||||
export CC="$HOME/.brew/opt/llvm@11/bin/clang"
|
export CC="$HOME/.brew/opt/llvm@13/bin/clang"
|
||||||
export CXX="$HOME/.brew/opt/llvm@11/bin/clang++"
|
export CXX="$HOME/.brew/opt/llvm@13/bin/clang++"
|
||||||
export LD=ld
|
export LD=ld
|
||||||
export AR="$HOME/.brew/opt/llvm@11/bin/llvm-ar"
|
export AR="$HOME/.brew/opt/llvm@13/bin/llvm-ar"
|
||||||
export RANLIB="$HOME/.brew/opt/llvm@11/bin/llvm-ranlib"
|
export RANLIB="$HOME/.brew/opt/llvm@13/bin/llvm-ranlib"
|
||||||
bash .github/scripts/build.sh
|
bash .github/scripts/build.sh
|
||||||
env:
|
env:
|
||||||
ARTIFACT: ${{ matrix.ARTIFACT }}
|
ARTIFACT: ${{ matrix.ARTIFACT }}
|
||||||
@@ -246,13 +241,49 @@ jobs:
|
|||||||
path: |
|
path: |
|
||||||
./out/*
|
./out/*
|
||||||
|
|
||||||
|
build-freebsd:
|
||||||
|
name: Build binary (FreeBSD)
|
||||||
|
runs-on: [self-hosted, FreeBSD, X64]
|
||||||
|
env:
|
||||||
|
CABAL_VER: 3.10.2.0
|
||||||
|
MACOSX_DEPLOYMENT_TARGET: 10.13
|
||||||
|
JSON_VERSION: "0.0.8"
|
||||||
|
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||||
|
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||||
|
S3_HOST: ${{ secrets.S3_HOST }}
|
||||||
|
ARTIFACT: "x86_64-portbld-freebsd-ghcup"
|
||||||
|
GHC_VER: 9.4.8
|
||||||
|
ARCH: 64
|
||||||
|
DISTRO: na
|
||||||
|
RUNNER_OS: FreeBSD
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: 'true'
|
||||||
|
|
||||||
|
- name: Run build
|
||||||
|
run: |
|
||||||
|
sed -i.bak -e 's/quarterly/latest/' /etc/pkg/FreeBSD.conf
|
||||||
|
pkg install -y ghc hs-cabal-install git bash misc/compat10x misc/compat11x misc/compat12x gmake llvm14 libiconv
|
||||||
|
tzsetup Etc/GMT
|
||||||
|
adjkerntz -a
|
||||||
|
bash .github/scripts/build.sh
|
||||||
|
- if: always()
|
||||||
|
name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: artifacts
|
||||||
|
path: |
|
||||||
|
./out/*
|
||||||
|
|
||||||
test-linux:
|
test-linux:
|
||||||
name: Test linux
|
name: Test linux
|
||||||
needs: "build-linux"
|
needs: "build-linux"
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
env:
|
env:
|
||||||
CABAL_VER: 3.10.1.0
|
CABAL_VER: 3.10.2.0
|
||||||
JSON_VERSION: "0.0.7"
|
JSON_VERSION: "0.0.8"
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
@@ -263,12 +294,12 @@ jobs:
|
|||||||
DISTRO: Alpine
|
DISTRO: Alpine
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
ARTIFACT: "x86_64-linux-ghcup"
|
ARTIFACT: "x86_64-linux-ghcup"
|
||||||
GHC_VER: 8.10.7
|
GHC_VER: 9.4.8
|
||||||
ARCH: 64
|
ARCH: 64
|
||||||
DISTRO: Alpine
|
DISTRO: Alpine
|
||||||
- os: ubuntu-latest
|
- os: ubuntu-latest
|
||||||
ARTIFACT: "x86_64-linux-ghcup"
|
ARTIFACT: "x86_64-linux-ghcup"
|
||||||
GHC_VER: 8.10.7
|
GHC_VER: 9.4.8
|
||||||
ARCH: 64
|
ARCH: 64
|
||||||
DISTRO: Ubuntu
|
DISTRO: Ubuntu
|
||||||
|
|
||||||
@@ -329,28 +360,23 @@ jobs:
|
|||||||
needs: "build-arm"
|
needs: "build-arm"
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
env:
|
env:
|
||||||
CABAL_VER: 3.10.1.0
|
CABAL_VER: 3.6.2.0
|
||||||
JSON_VERSION: "0.0.7"
|
JSON_VERSION: "0.0.8"
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- os: [self-hosted, Linux, ARM64]
|
- os: [self-hosted, Linux, ARM64]
|
||||||
ARTIFACT: "armv7-linux-ghcup"
|
ARTIFACT: "armv7-linux-ghcup"
|
||||||
GHC_VER: 9.2.2
|
GHC_VER: 9.2.8
|
||||||
ARCH: ARM
|
ARCH: ARM
|
||||||
DISTRO: Ubuntu
|
DISTRO: Ubuntu
|
||||||
- os: [self-hosted, Linux, ARM64]
|
- os: [self-hosted, Linux, ARM64]
|
||||||
ARTIFACT: "aarch64-linux-ghcup"
|
ARTIFACT: "aarch64-linux-ghcup"
|
||||||
GHC_VER: 9.2.6
|
GHC_VER: 9.4.8
|
||||||
ARCH: ARM64
|
ARCH: ARM64
|
||||||
DISTRO: Ubuntu
|
DISTRO: Ubuntu
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: docker://arm64v8/debian:10
|
|
||||||
name: Cleanup (aarch64 linux)
|
|
||||||
with:
|
|
||||||
args: "find . -mindepth 1 -maxdepth 1 -exec rm -rf -- {} +"
|
|
||||||
|
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
@@ -396,25 +422,25 @@ jobs:
|
|||||||
needs: "build-macwin"
|
needs: "build-macwin"
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
env:
|
env:
|
||||||
CABAL_VER: 3.10.1.0
|
CABAL_VER: 3.10.2.0
|
||||||
MACOSX_DEPLOYMENT_TARGET: 10.13
|
MACOSX_DEPLOYMENT_TARGET: 10.13
|
||||||
JSON_VERSION: "0.0.7"
|
JSON_VERSION: "0.0.8"
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- os: [self-hosted, macOS, ARM64]
|
- os: [self-hosted, macOS, ARM64]
|
||||||
ARTIFACT: "aarch64-apple-darwin-ghcup"
|
ARTIFACT: "aarch64-apple-darwin-ghcup"
|
||||||
GHC_VER: 9.2.6
|
GHC_VER: 9.4.8
|
||||||
ARCH: ARM64
|
ARCH: ARM64
|
||||||
DISTRO: na
|
DISTRO: na
|
||||||
- os: macOS-11
|
- os: macOS-11
|
||||||
ARTIFACT: "x86_64-apple-darwin-ghcup"
|
ARTIFACT: "x86_64-apple-darwin-ghcup"
|
||||||
GHC_VER: 9.2.6
|
GHC_VER: 9.4.8
|
||||||
ARCH: 64
|
ARCH: 64
|
||||||
DISTRO: na
|
DISTRO: na
|
||||||
- os: windows-latest
|
- os: windows-latest
|
||||||
ARTIFACT: "x86_64-mingw64-ghcup"
|
ARTIFACT: "x86_64-mingw64-ghcup"
|
||||||
GHC_VER: 8.10.7
|
GHC_VER: 9.4.8
|
||||||
ARCH: 64
|
ARCH: 64
|
||||||
DISTRO: na
|
DISTRO: na
|
||||||
|
|
||||||
@@ -467,6 +493,41 @@ jobs:
|
|||||||
name: testfiles
|
name: testfiles
|
||||||
path: |
|
path: |
|
||||||
./test/ghcup-test/golden/unix/GHCupInfo*json
|
./test/ghcup-test/golden/unix/GHCupInfo*json
|
||||||
|
test-freebsd:
|
||||||
|
name: Test FreeBSD
|
||||||
|
needs: "build-freebsd"
|
||||||
|
runs-on: [self-hosted, FreeBSD, X64]
|
||||||
|
env:
|
||||||
|
CABAL_VER: 3.10.2.0
|
||||||
|
MACOSX_DEPLOYMENT_TARGET: 10.13
|
||||||
|
JSON_VERSION: "0.0.8"
|
||||||
|
ARTIFACT: "x86_64-portbld-freebsd-ghcup"
|
||||||
|
GHC_VER: 9.4.8
|
||||||
|
ARCH: 64
|
||||||
|
DISTRO: na
|
||||||
|
RUNNER_OS: FreeBSD
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: 'true'
|
||||||
|
|
||||||
|
- uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: artifacts
|
||||||
|
path: ./out
|
||||||
|
|
||||||
|
- name: Run test
|
||||||
|
run: |
|
||||||
|
bash .github/scripts/test.sh
|
||||||
|
|
||||||
|
- if: failure()
|
||||||
|
name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: testfiles
|
||||||
|
path: |
|
||||||
|
./test/ghcup-test/golden/unix/GHCupInfo*json
|
||||||
hls:
|
hls:
|
||||||
name: hls
|
name: hls
|
||||||
needs: build-linux
|
needs: build-linux
|
||||||
@@ -475,7 +536,7 @@ jobs:
|
|||||||
GHC_VERSION: "8.10.7"
|
GHC_VERSION: "8.10.7"
|
||||||
HLS_TARGET_VERSION: "1.8.0.0"
|
HLS_TARGET_VERSION: "1.8.0.0"
|
||||||
CABAL_VERSION: "3.8.1.0"
|
CABAL_VERSION: "3.8.1.0"
|
||||||
JSON_VERSION: "0.0.7"
|
JSON_VERSION: "0.0.8"
|
||||||
ARTIFACT: "x86_64-linux-ghcup"
|
ARTIFACT: "x86_64-linux-ghcup"
|
||||||
DISTRO: Ubuntu
|
DISTRO: Ubuntu
|
||||||
ARCH: 64
|
ARCH: 64
|
||||||
@@ -500,7 +561,7 @@ jobs:
|
|||||||
|
|
||||||
release:
|
release:
|
||||||
name: release
|
name: release
|
||||||
needs: ["test-linux", "test-arm", "test-macwin", "hls"]
|
needs: ["test-linux", "test-arm", "test-macwin", "test-freebsd", "hls"]
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: startsWith(github.ref, 'refs/tags/v')
|
if: startsWith(github.ref, 'refs/tags/v')
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -4,6 +4,7 @@ codex.tags
|
|||||||
dist-newstyle/
|
dist-newstyle/
|
||||||
cabal.project.local
|
cabal.project.local
|
||||||
.stack-work/
|
.stack-work/
|
||||||
|
.hiefiles/
|
||||||
bin/
|
bin/
|
||||||
/*.prof
|
/*.prof
|
||||||
/*.ps
|
/*.ps
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -2,14 +2,35 @@ packages: ./ghcup.cabal
|
|||||||
|
|
||||||
optional-packages: ./vendored/*/*.cabal
|
optional-packages: ./vendored/*/*.cabal
|
||||||
|
|
||||||
optimization: 2
|
if impl(ghc < 9.0)
|
||||||
|
package ghcup
|
||||||
package ghcup
|
flags: +tui -tar
|
||||||
flags: +tui
|
else
|
||||||
|
package ghcup
|
||||||
|
flags: +tui +tar
|
||||||
|
|
||||||
constraints: http-io-streams -brotli,
|
constraints: http-io-streams -brotli,
|
||||||
any.aeson >= 2.0.1.0
|
any.aeson >= 2.0.1.0
|
||||||
|
|
||||||
|
if os(mingw32)
|
||||||
|
if impl(ghc >= 9.4)
|
||||||
|
constraints: language-c >= 0.9.3
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/haskell/tar.git
|
||||||
|
tag: d94a988be4311b830149a9f8fc16739927e5fc1c
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/hasufell/uri-bytestring.git
|
||||||
|
tag: 4fb5ed14b500c192e6e7a97f6b2b1eb478806001
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/hasufell/versions.git
|
||||||
|
tag: 79e18fbc44fae3064d8957c550cc0229465db320
|
||||||
|
|
||||||
package libarchive
|
package libarchive
|
||||||
flags: -system-libarchive
|
flags: -system-libarchive
|
||||||
|
|
||||||
@@ -25,5 +46,10 @@ package aeson
|
|||||||
package streamly
|
package streamly
|
||||||
flags: +use-unliftio
|
flags: +use-unliftio
|
||||||
|
|
||||||
|
package *
|
||||||
|
test-show-details: direct
|
||||||
|
|
||||||
|
allow-newer: cabal-install-parsers:tar
|
||||||
|
|
||||||
|
|
||||||
with-compiler: ghc-8.10.7
|
with-compiler: ghc-8.10.7
|
||||||
|
|||||||
@@ -1,55 +1,57 @@
|
|||||||
active-repositories: hackage.haskell.org:merge
|
active-repositories: hackage.haskell.org:merge
|
||||||
constraints: any.Cabal ==3.6.3.0,
|
constraints: any.Cabal ==3.6.3.0,
|
||||||
Cabal -bundled-binary-generic,
|
Cabal -bundled-binary-generic,
|
||||||
any.Cabal-syntax ==3.8.1.0,
|
any.Cabal-syntax ==3.10.2.0,
|
||||||
any.HUnit ==1.6.2.0,
|
any.HUnit ==1.6.2.0,
|
||||||
any.HsOpenSSL ==0.11.7.4,
|
any.HsOpenSSL ==0.11.7.6,
|
||||||
HsOpenSSL -fast-bignum -homebrew-openssl -macports-openssl -use-pkg-config,
|
HsOpenSSL -fast-bignum -homebrew-openssl -macports-openssl -use-pkg-config,
|
||||||
any.OneTuple ==0.3.1,
|
any.OneTuple ==0.4.1.1,
|
||||||
any.QuickCheck ==2.14.2,
|
any.QuickCheck ==2.14.3,
|
||||||
QuickCheck -old-random +templatehaskell,
|
QuickCheck -old-random +templatehaskell,
|
||||||
any.StateVar ==1.2.2,
|
any.StateVar ==1.2.2,
|
||||||
any.abstract-deque ==0.3,
|
any.abstract-deque ==0.3,
|
||||||
abstract-deque -usecas,
|
abstract-deque -usecas,
|
||||||
any.aeson ==2.1.1.0,
|
any.aeson ==2.1.2.1,
|
||||||
aeson -cffi +ordered-keymap,
|
aeson -cffi +ordered-keymap,
|
||||||
any.aeson-pretty ==0.8.9,
|
any.aeson-pretty ==0.8.10,
|
||||||
aeson-pretty +lib-only,
|
aeson-pretty +lib-only,
|
||||||
any.alex ==3.2.7.1,
|
any.alex ==3.5.0.0,
|
||||||
any.ansi-terminal ==0.11.4,
|
any.ansi-terminal ==1.0.2,
|
||||||
ansi-terminal -example +win32-2-13-1,
|
ansi-terminal -example,
|
||||||
|
any.ansi-terminal-types ==0.11.5,
|
||||||
any.ansi-wl-pprint ==0.6.9,
|
any.ansi-wl-pprint ==0.6.9,
|
||||||
ansi-wl-pprint -example,
|
ansi-wl-pprint -example,
|
||||||
any.array ==0.5.4.0,
|
any.array ==0.5.4.0,
|
||||||
any.assoc ==1.0.2,
|
any.assoc ==1.1,
|
||||||
any.async ==2.2.4,
|
assoc +tagged,
|
||||||
|
any.async ==2.2.5,
|
||||||
async -bench,
|
async -bench,
|
||||||
any.atomic-primops ==0.8.4,
|
any.atomic-primops ==0.8.4,
|
||||||
atomic-primops -debug,
|
atomic-primops -debug,
|
||||||
any.attoparsec ==0.14.4,
|
any.attoparsec ==0.14.4,
|
||||||
attoparsec -developer,
|
attoparsec -developer,
|
||||||
any.base ==4.14.3.0,
|
any.base ==4.14.3.0,
|
||||||
any.base-compat ==0.12.2,
|
any.base-compat ==0.13.1,
|
||||||
any.base-compat-batteries ==0.12.2,
|
any.base-compat-batteries ==0.13.1,
|
||||||
any.base-orphans ==0.8.7,
|
any.base-orphans ==0.9.1,
|
||||||
any.base16-bytestring ==1.0.2.0,
|
any.base16-bytestring ==1.0.2.0,
|
||||||
any.base64-bytestring ==1.2.1.0,
|
any.base64-bytestring ==1.2.1.0,
|
||||||
any.bifunctors ==5.5.14,
|
any.bifunctors ==5.6.1,
|
||||||
bifunctors +semigroups +tagged,
|
bifunctors +tagged,
|
||||||
any.bimap ==0.5.0,
|
any.bimap ==0.5.0,
|
||||||
any.binary ==0.8.8.0,
|
any.binary ==0.8.8.0,
|
||||||
any.binary-instances ==1.0.3,
|
any.binary-instances ==1.0.4,
|
||||||
any.binary-orphans ==1.0.3,
|
any.binary-orphans ==1.0.4.1,
|
||||||
any.blaze-builder ==0.4.2.2,
|
any.blaze-builder ==0.4.2.3,
|
||||||
any.brick ==1.5,
|
any.brick ==2.1.1,
|
||||||
brick -demos,
|
brick -demos,
|
||||||
any.bytestring ==0.10.12.0,
|
any.bytestring ==0.10.12.0,
|
||||||
any.bz2 ==1.0.1.0,
|
any.bz2 ==1.0.1.0,
|
||||||
bz2 -cross +with-bzlib,
|
bz2 -cross +with-bzlib,
|
||||||
any.c2hs ==0.28.8,
|
any.c2hs ==0.28.8,
|
||||||
c2hs +base3 -regression,
|
c2hs +base3 -regression,
|
||||||
any.cabal-install-parsers ==0.5,
|
any.cabal-install-parsers ==0.6.1,
|
||||||
any.cabal-plan ==0.7.2.3,
|
any.cabal-plan ==0.7.3.0,
|
||||||
cabal-plan -_ -exe -license-report,
|
cabal-plan -_ -exe -license-report,
|
||||||
any.call-stack ==0.4.0,
|
any.call-stack ==0.4.0,
|
||||||
any.case-insensitive ==1.2.1.0,
|
any.case-insensitive ==1.2.1.0,
|
||||||
@@ -62,7 +64,7 @@ constraints: any.Cabal ==3.6.3.0,
|
|||||||
comonad +containers +distributive +indexed-traversable,
|
comonad +containers +distributive +indexed-traversable,
|
||||||
any.composition-prelude ==3.0.0.2,
|
any.composition-prelude ==3.0.0.2,
|
||||||
composition-prelude -development,
|
composition-prelude -development,
|
||||||
any.config-ini ==0.2.5.0,
|
any.config-ini ==0.2.7.0,
|
||||||
config-ini -enable-doctests,
|
config-ini -enable-doctests,
|
||||||
any.containers ==0.6.5.1,
|
any.containers ==0.6.5.1,
|
||||||
any.contravariant ==1.5.5,
|
any.contravariant ==1.5.5,
|
||||||
@@ -83,34 +85,37 @@ constraints: any.Cabal ==3.6.3.0,
|
|||||||
any.dlist ==1.0,
|
any.dlist ==1.0,
|
||||||
dlist -werror,
|
dlist -werror,
|
||||||
any.exceptions ==0.10.4,
|
any.exceptions ==0.10.4,
|
||||||
|
any.file-uri ==0.1.0.0,
|
||||||
any.filepath ==1.4.2.1,
|
any.filepath ==1.4.2.1,
|
||||||
any.free ==5.1.10,
|
any.foldable1-classes-compat ==0.1,
|
||||||
|
foldable1-classes-compat +tagged,
|
||||||
|
any.free ==5.2,
|
||||||
any.fusion-plugin-types ==0.1.0,
|
any.fusion-plugin-types ==0.1.0,
|
||||||
any.generic-arbitrary ==0.2.2,
|
any.generic-arbitrary ==0.2.2,
|
||||||
any.generically ==0.1,
|
any.generically ==0.1.1,
|
||||||
any.ghc-boot-th ==8.10.7,
|
any.ghc-boot-th ==8.10.7,
|
||||||
any.ghc-byteorder ==4.11.0.0.10,
|
any.ghc-byteorder ==4.11.0.0.10,
|
||||||
any.ghc-prim ==0.6.1,
|
any.ghc-prim ==0.6.1,
|
||||||
any.happy ==1.20.0,
|
any.happy ==1.20.1.1,
|
||||||
any.hashable ==1.4.2.0,
|
any.hashable ==1.4.3.0,
|
||||||
hashable +integer-gmp -random-initial-seed,
|
hashable +integer-gmp -random-initial-seed,
|
||||||
any.haskell-lexer ==1.1.1,
|
any.haskell-lexer ==1.1.1,
|
||||||
any.haskus-utils-data ==1.4,
|
any.haskus-utils-data ==1.4,
|
||||||
any.haskus-utils-types ==1.5.1,
|
any.haskus-utils-types ==1.5.1,
|
||||||
any.haskus-utils-variant ==3.2.1,
|
any.haskus-utils-variant ==3.3,
|
||||||
any.heaps ==0.4,
|
any.heaps ==0.4,
|
||||||
any.hsc2hs ==0.68.8,
|
any.hsc2hs ==0.68.10,
|
||||||
hsc2hs -in-ghc-tree,
|
hsc2hs -in-ghc-tree,
|
||||||
any.hspec ==2.10.8,
|
any.hspec ==2.10.10,
|
||||||
any.hspec-core ==2.10.8,
|
any.hspec-core ==2.10.10,
|
||||||
any.hspec-discover ==2.10.8,
|
any.hspec-discover ==2.10.10,
|
||||||
any.hspec-expectations ==0.8.2,
|
any.hspec-expectations ==0.8.2,
|
||||||
any.hspec-golden-aeson ==0.9.0.0,
|
any.hspec-golden-aeson ==0.9.0.0,
|
||||||
any.http-io-streams ==0.1.6.1,
|
any.http-io-streams ==0.1.6.3,
|
||||||
http-io-streams -brotli +fast-xor,
|
http-io-streams -brotli +fast-xor,
|
||||||
any.indexed-profunctors ==0.1.1,
|
any.indexed-profunctors ==0.1.1.1,
|
||||||
any.indexed-traversable ==0.1.2,
|
any.indexed-traversable ==0.1.3,
|
||||||
any.indexed-traversable-instances ==0.1.1.1,
|
any.indexed-traversable-instances ==0.1.1.2,
|
||||||
any.integer-gmp ==1.0.3.0,
|
any.integer-gmp ==1.0.3.0,
|
||||||
any.integer-logarithms ==1.0.3.1,
|
any.integer-logarithms ==1.0.3.1,
|
||||||
integer-logarithms -check-bounds +integer-gmp,
|
integer-logarithms -check-bounds +integer-gmp,
|
||||||
@@ -118,9 +123,9 @@ constraints: any.Cabal ==3.6.3.0,
|
|||||||
io-streams +network -nointeractivetests +zlib,
|
io-streams +network -nointeractivetests +zlib,
|
||||||
any.language-c ==0.9.2,
|
any.language-c ==0.9.2,
|
||||||
language-c -allwarnings +iecfpextension +usebytestrings,
|
language-c -allwarnings +iecfpextension +usebytestrings,
|
||||||
any.libarchive ==3.0.3.2,
|
any.libarchive ==3.0.4.2,
|
||||||
libarchive -cross -low-memory +no-exe -system-libarchive,
|
libarchive -cross -low-memory +no-exe -system-libarchive,
|
||||||
any.libyaml-streamly ==0.2.1,
|
any.libyaml-streamly ==0.2.2,
|
||||||
libyaml-streamly -no-unicode -system-libyaml,
|
libyaml-streamly -no-unicode -system-libyaml,
|
||||||
any.lockfree-queue ==0.2.4,
|
any.lockfree-queue ==0.2.4,
|
||||||
any.lukko ==0.1.1.3,
|
any.lukko ==0.1.1.3,
|
||||||
@@ -130,84 +135,85 @@ constraints: any.Cabal ==3.6.3.0,
|
|||||||
megaparsec -dev,
|
megaparsec -dev,
|
||||||
any.microlens ==0.4.13.1,
|
any.microlens ==0.4.13.1,
|
||||||
any.microlens-mtl ==0.2.0.3,
|
any.microlens-mtl ==0.2.0.3,
|
||||||
any.microlens-th ==0.4.3.11,
|
any.microlens-th ==0.4.3.14,
|
||||||
any.mtl ==2.2.2,
|
any.mtl ==2.2.2,
|
||||||
any.network ==3.1.2.7,
|
any.mtl-compat ==0.2.2,
|
||||||
|
mtl-compat -two-point-one -two-point-two,
|
||||||
|
any.network ==3.1.4.0,
|
||||||
network -devel,
|
network -devel,
|
||||||
any.network-uri ==2.6.4.2,
|
any.network-uri ==2.6.4.2,
|
||||||
any.openssl-streams ==1.2.3.0,
|
any.openssl-streams ==1.2.3.0,
|
||||||
any.optics ==0.4.2,
|
any.optics ==0.4.2.1,
|
||||||
any.optics-core ==0.4.1,
|
any.optics-core ==0.4.1.1,
|
||||||
optics-core -explicit-generic-labels,
|
optics-core -explicit-generic-labels,
|
||||||
any.optics-extra ==0.4.2.1,
|
any.optics-extra ==0.4.2.1,
|
||||||
any.optics-th ==0.4.1,
|
any.optics-th ==0.4.1,
|
||||||
any.optparse-applicative ==0.17.0.0,
|
any.optparse-applicative ==0.17.1.0,
|
||||||
optparse-applicative +process,
|
optparse-applicative +process,
|
||||||
any.os-release ==1.0.2.1,
|
any.os-release ==1.0.2.1,
|
||||||
os-release -devel,
|
os-release -devel,
|
||||||
any.parallel ==3.2.2.0,
|
any.parsec ==3.1.17.0,
|
||||||
any.parsec ==3.1.16.1,
|
|
||||||
any.parser-combinators ==1.3.0,
|
any.parser-combinators ==1.3.0,
|
||||||
parser-combinators -dev,
|
parser-combinators -dev,
|
||||||
any.polyparse ==1.13,
|
any.polyparse ==1.13,
|
||||||
any.pretty ==1.1.3.6,
|
any.pretty ==1.1.3.6,
|
||||||
any.pretty-terminal ==0.1.0.0,
|
any.pretty-terminal ==0.1.0.0,
|
||||||
any.primitive ==0.7.4.0,
|
any.primitive ==0.8.0.0,
|
||||||
any.process ==1.6.13.2,
|
any.process ==1.6.13.2,
|
||||||
any.profunctors ==5.6.2,
|
any.profunctors ==5.6.2,
|
||||||
any.quickcheck-arbitrary-adt ==0.3.1.0,
|
any.quickcheck-arbitrary-adt ==0.3.1.0,
|
||||||
any.quickcheck-io ==0.2.0,
|
any.quickcheck-io ==0.2.0,
|
||||||
any.random ==1.2.1.1,
|
any.random ==1.2.1.1,
|
||||||
any.recursion-schemes ==5.2.2.3,
|
any.recursion-schemes ==5.2.2.5,
|
||||||
recursion-schemes +template-haskell,
|
recursion-schemes +template-haskell,
|
||||||
any.regex-base ==0.94.0.2,
|
any.regex-base ==0.94.0.2,
|
||||||
any.regex-posix ==0.96.0.1,
|
any.regex-posix ==0.96.0.1,
|
||||||
regex-posix -_regex-posix-clib,
|
regex-posix -_regex-posix-clib,
|
||||||
any.resourcet ==1.2.6,
|
any.resourcet ==1.2.6,
|
||||||
any.retry ==0.8.1.2,
|
any.retry ==0.9.3.1,
|
||||||
retry -lib-werror,
|
retry -lib-werror,
|
||||||
any.rts ==1.0.1,
|
any.rts ==1.0.1,
|
||||||
any.safe ==0.3.19,
|
any.safe ==0.3.21,
|
||||||
any.safe-exceptions ==0.1.7.3,
|
any.safe-exceptions ==0.1.7.4,
|
||||||
any.scientific ==0.3.7.0,
|
any.scientific ==0.3.7.0,
|
||||||
scientific -bytestring-builder -integer-simple,
|
scientific -bytestring-builder -integer-simple,
|
||||||
any.semialign ==1.2.0.1,
|
any.semialign ==1.3,
|
||||||
semialign +semigroupoids,
|
semialign +semigroupoids,
|
||||||
any.semigroupoids ==5.3.7,
|
any.semigroupoids ==6.0.0.1,
|
||||||
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
||||||
any.setenv ==0.1.1.3,
|
any.setenv ==0.1.1.3,
|
||||||
any.split ==0.2.3.5,
|
any.split ==0.2.5,
|
||||||
any.splitmix ==0.1.0.4,
|
any.splitmix ==0.1.0.5,
|
||||||
splitmix -optimised-mixer,
|
splitmix -optimised-mixer,
|
||||||
any.stm ==2.5.0.1,
|
any.stm ==2.5.0.1,
|
||||||
any.streamly ==0.8.3,
|
any.streamly ==0.8.3,
|
||||||
streamly -debug -dev -fusion-plugin -has-llvm -inspection -limit-build-mem -no-fusion +opt -streamk -streamly-core -use-c-malloc +use-unliftio,
|
streamly -debug -dev -fusion-plugin -has-llvm -inspection -limit-build-mem -no-fusion +opt -streamk -streamly-core -use-c-malloc +use-unliftio,
|
||||||
any.strict ==0.4.0.1,
|
any.strict ==0.5,
|
||||||
strict +assoc,
|
|
||||||
any.strict-base ==0.4.0.0,
|
any.strict-base ==0.4.0.0,
|
||||||
any.tagged ==0.8.6.1,
|
any.tagged ==0.8.8,
|
||||||
tagged +deepseq +transformers,
|
tagged +deepseq +transformers,
|
||||||
any.tagsoup ==0.14.8,
|
any.tagsoup ==0.14.8,
|
||||||
any.tar ==0.5.1.1,
|
any.tar ==0.6.0.0,
|
||||||
tar -old-bytestring -old-time,
|
any.tasty ==1.5,
|
||||||
|
tasty +unix,
|
||||||
|
any.tasty-hunit ==0.10.1,
|
||||||
any.template-haskell ==2.16.0.0,
|
any.template-haskell ==2.16.0.0,
|
||||||
any.temporary ==1.3,
|
any.temporary ==1.3,
|
||||||
any.terminal-progress-bar ==0.4.1,
|
any.terminal-progress-bar ==0.4.2,
|
||||||
any.terminal-size ==0.3.3,
|
any.terminal-size ==0.3.4,
|
||||||
any.terminfo ==0.4.1.4,
|
any.terminfo ==0.4.1.4,
|
||||||
any.text ==2.0.1,
|
any.text ==2.0.2,
|
||||||
text -developer +simdutf,
|
text -developer +simdutf,
|
||||||
any.text-binary ==0.2.1.1,
|
any.text-binary ==0.2.1.1,
|
||||||
any.text-short ==0.1.5,
|
any.text-short ==0.1.5,
|
||||||
text-short -asserts,
|
text-short -asserts,
|
||||||
any.text-zipper ==0.12,
|
any.text-zipper ==0.13,
|
||||||
any.tf-random ==0.5,
|
any.tf-random ==0.5,
|
||||||
any.th-abstraction ==0.4.5.0,
|
any.th-abstraction ==0.5.0.0,
|
||||||
any.th-compat ==0.1.4,
|
any.th-compat ==0.1.4,
|
||||||
any.th-lift ==0.8.2,
|
any.th-lift ==0.8.4,
|
||||||
any.th-lift-instances ==0.1.20,
|
any.th-lift-instances ==0.1.20,
|
||||||
any.these ==1.1.1.1,
|
any.these ==1.2,
|
||||||
these +assoc,
|
|
||||||
any.time ==1.9.3,
|
any.time ==1.9.3,
|
||||||
any.time-compat ==1.9.6.1,
|
any.time-compat ==1.9.6.1,
|
||||||
time-compat -old-locale,
|
time-compat -old-locale,
|
||||||
@@ -220,27 +226,31 @@ constraints: any.Cabal ==3.6.3.0,
|
|||||||
unicode-data -ucd2haskell,
|
unicode-data -ucd2haskell,
|
||||||
any.unix ==2.7.2.2,
|
any.unix ==2.7.2.2,
|
||||||
any.unix-bytestring ==0.3.7.8,
|
any.unix-bytestring ==0.3.7.8,
|
||||||
any.unix-compat ==0.6,
|
any.unix-compat ==0.7.1,
|
||||||
unix-compat -old-time,
|
unix-compat -old-time,
|
||||||
any.unliftio-core ==0.2.0.1,
|
any.unliftio-core ==0.2.1.0,
|
||||||
any.unordered-containers ==0.2.19.1,
|
any.unordered-containers ==0.2.20,
|
||||||
unordered-containers -debug,
|
unordered-containers -debug,
|
||||||
any.uri-bytestring ==0.3.3.1,
|
any.uri-bytestring ==0.3.3.1,
|
||||||
uri-bytestring -lib-werror,
|
uri-bytestring -lib-werror,
|
||||||
any.utf8-string ==1.0.2,
|
any.utf8-string ==1.0.2,
|
||||||
any.uuid-types ==1.0.5,
|
any.uuid-types ==1.0.5.1,
|
||||||
any.vector ==0.12.3.1,
|
any.vector ==0.13.1.0,
|
||||||
vector +boundschecks -internalchecks -unsafechecks -wall,
|
vector +boundschecks -internalchecks -unsafechecks -wall,
|
||||||
any.vector-binary-instances ==0.2.5.2,
|
any.vector-binary-instances ==0.2.5.2,
|
||||||
any.versions ==5.0.4,
|
any.vector-stream ==0.1.0.1,
|
||||||
any.vty ==5.37,
|
any.versions ==6.0.4,
|
||||||
|
any.vty ==6.0,
|
||||||
|
any.vty-crossplatform ==0.2.0.0,
|
||||||
|
vty-crossplatform -demos,
|
||||||
|
any.vty-unix ==0.1.0.0,
|
||||||
any.witherable ==0.4.2,
|
any.witherable ==0.4.2,
|
||||||
any.word-wrap ==0.5,
|
any.word-wrap ==0.5,
|
||||||
any.word8 ==0.1.3,
|
any.word8 ==0.1.3,
|
||||||
any.xor ==0.0.1.1,
|
any.xor ==0.0.1.2,
|
||||||
any.yaml-streamly ==0.12.1,
|
any.yaml-streamly ==0.12.4,
|
||||||
yaml-streamly +no-examples +no-exe,
|
yaml-streamly +no-examples +no-exe,
|
||||||
any.zlib ==0.6.3.0,
|
any.zlib ==0.6.3.0,
|
||||||
zlib -bundled-c-zlib -non-blocking-ffi -pkg-config,
|
zlib -bundled-c-zlib -non-blocking-ffi -pkg-config,
|
||||||
any.zlib-bindings ==0.1.1.5
|
any.zlib-bindings ==0.1.1.5
|
||||||
index-state: hackage.haskell.org 2023-01-12T04:22:48Z
|
index-state: hackage.haskell.org 2024-01-19T19:48:54Z
|
||||||
|
|||||||
55
cabal.ghc902.project
Normal file
55
cabal.ghc902.project
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
packages: ./ghcup.cabal
|
||||||
|
|
||||||
|
optional-packages: ./vendored/*/*.cabal
|
||||||
|
|
||||||
|
if impl(ghc < 9.0)
|
||||||
|
package ghcup
|
||||||
|
flags: +tui -tar
|
||||||
|
else
|
||||||
|
package ghcup
|
||||||
|
flags: +tui +tar
|
||||||
|
|
||||||
|
constraints: http-io-streams -brotli,
|
||||||
|
any.aeson >= 2.0.1.0
|
||||||
|
|
||||||
|
if os(mingw32)
|
||||||
|
if impl(ghc >= 9.4)
|
||||||
|
constraints: language-c >= 0.9.3
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/haskell/tar.git
|
||||||
|
tag: d94a988be4311b830149a9f8fc16739927e5fc1c
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/hasufell/uri-bytestring.git
|
||||||
|
tag: 4fb5ed14b500c192e6e7a97f6b2b1eb478806001
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/hasufell/versions.git
|
||||||
|
tag: 79e18fbc44fae3064d8957c550cc0229465db320
|
||||||
|
|
||||||
|
package libarchive
|
||||||
|
flags: -system-libarchive
|
||||||
|
|
||||||
|
package aeson-pretty
|
||||||
|
flags: +lib-only
|
||||||
|
|
||||||
|
package cabal-plan
|
||||||
|
flags: -exe
|
||||||
|
|
||||||
|
package aeson
|
||||||
|
flags: +ordered-keymap
|
||||||
|
|
||||||
|
package streamly
|
||||||
|
flags: +use-unliftio
|
||||||
|
|
||||||
|
package *
|
||||||
|
test-show-details: direct
|
||||||
|
|
||||||
|
allow-newer: cabal-install-parsers:tar
|
||||||
|
|
||||||
|
|
||||||
|
with-compiler: ghc-9.0.2
|
||||||
269
cabal.ghc902.project.freeze
Normal file
269
cabal.ghc902.project.freeze
Normal file
@@ -0,0 +1,269 @@
|
|||||||
|
active-repositories: hackage.haskell.org:merge
|
||||||
|
constraints: any.Cabal ==3.6.3.0,
|
||||||
|
Cabal -bundled-binary-generic,
|
||||||
|
any.Cabal-syntax ==3.10.2.0,
|
||||||
|
any.HUnit ==1.6.2.0,
|
||||||
|
any.HsOpenSSL ==0.11.7.6,
|
||||||
|
HsOpenSSL -fast-bignum -homebrew-openssl -macports-openssl -use-pkg-config,
|
||||||
|
any.OneTuple ==0.4.1.1,
|
||||||
|
any.QuickCheck ==2.14.3,
|
||||||
|
QuickCheck -old-random +templatehaskell,
|
||||||
|
any.StateVar ==1.2.2,
|
||||||
|
any.abstract-deque ==0.3,
|
||||||
|
abstract-deque -usecas,
|
||||||
|
any.aeson ==2.1.2.1,
|
||||||
|
aeson -cffi +ordered-keymap,
|
||||||
|
any.aeson-pretty ==0.8.10,
|
||||||
|
aeson-pretty +lib-only,
|
||||||
|
any.alex ==3.5.0.0,
|
||||||
|
any.ansi-terminal ==1.0.2,
|
||||||
|
ansi-terminal -example,
|
||||||
|
any.ansi-terminal-types ==0.11.5,
|
||||||
|
any.ansi-wl-pprint ==0.6.9,
|
||||||
|
ansi-wl-pprint -example,
|
||||||
|
any.array ==0.5.4.0,
|
||||||
|
any.assoc ==1.1,
|
||||||
|
assoc +tagged,
|
||||||
|
any.async ==2.2.5,
|
||||||
|
async -bench,
|
||||||
|
any.atomic-primops ==0.8.4,
|
||||||
|
atomic-primops -debug,
|
||||||
|
any.attoparsec ==0.14.4,
|
||||||
|
attoparsec -developer,
|
||||||
|
any.base ==4.15.1.0,
|
||||||
|
any.base-compat ==0.13.1,
|
||||||
|
any.base-compat-batteries ==0.13.1,
|
||||||
|
any.base-orphans ==0.9.1,
|
||||||
|
any.base16-bytestring ==1.0.2.0,
|
||||||
|
any.base64-bytestring ==1.2.1.0,
|
||||||
|
any.bifunctors ==5.6.1,
|
||||||
|
bifunctors +tagged,
|
||||||
|
any.bimap ==0.5.0,
|
||||||
|
any.binary ==0.8.8.0,
|
||||||
|
any.binary-instances ==1.0.4,
|
||||||
|
any.binary-orphans ==1.0.4.1,
|
||||||
|
any.bindings-DSL ==1.0.25,
|
||||||
|
any.bitvec ==1.1.5.0,
|
||||||
|
bitvec +simd,
|
||||||
|
any.blaze-builder ==0.4.2.3,
|
||||||
|
any.brick ==2.1.1,
|
||||||
|
brick -demos,
|
||||||
|
any.bytestring ==0.10.12.1,
|
||||||
|
any.bz2 ==1.0.1.0,
|
||||||
|
bz2 -cross +with-bzlib,
|
||||||
|
any.bzlib-conduit ==0.3.0.2,
|
||||||
|
any.c2hs ==0.28.8,
|
||||||
|
c2hs +base3 -regression,
|
||||||
|
any.cabal-install-parsers ==0.6.1,
|
||||||
|
any.cabal-plan ==0.7.3.0,
|
||||||
|
cabal-plan -_ -exe -license-report,
|
||||||
|
any.call-stack ==0.4.0,
|
||||||
|
any.case-insensitive ==1.2.1.0,
|
||||||
|
any.casing ==0.1.4.1,
|
||||||
|
any.cereal ==0.5.8.3,
|
||||||
|
cereal -bytestring-builder,
|
||||||
|
any.colour ==2.3.6,
|
||||||
|
any.comonad ==5.0.8,
|
||||||
|
comonad +containers +distributive +indexed-traversable,
|
||||||
|
any.conduit ==1.3.5,
|
||||||
|
any.conduit-extra ==1.3.6,
|
||||||
|
any.conduit-zstd ==0.0.2.0,
|
||||||
|
any.config-ini ==0.2.7.0,
|
||||||
|
config-ini -enable-doctests,
|
||||||
|
any.containers ==0.6.4.1,
|
||||||
|
any.contravariant ==1.5.5,
|
||||||
|
contravariant +semigroups +statevar +tagged,
|
||||||
|
any.cryptohash-sha1 ==0.11.101.0,
|
||||||
|
any.cryptohash-sha256 ==0.11.102.1,
|
||||||
|
cryptohash-sha256 -exe +use-cbits,
|
||||||
|
any.data-array-byte ==0.1.0.1,
|
||||||
|
any.data-clist ==0.2,
|
||||||
|
any.data-default-class ==0.1.2.0,
|
||||||
|
any.data-fix ==0.3.2,
|
||||||
|
any.deepseq ==1.4.5.0,
|
||||||
|
any.digest ==0.0.2.0,
|
||||||
|
digest -have_arm64_crc32c -have_builtin_prefetch -have_mm_prefetch -have_sse42 -have_strong_getauxval -have_weak_getauxval +pkg-config,
|
||||||
|
any.directory ==1.3.6.2,
|
||||||
|
any.disk-free-space ==0.1.0.1,
|
||||||
|
any.distributive ==0.6.2.1,
|
||||||
|
distributive +semigroups +tagged,
|
||||||
|
any.dlist ==1.0,
|
||||||
|
dlist -werror,
|
||||||
|
any.exceptions ==0.10.4,
|
||||||
|
any.file-uri ==0.1.0.0,
|
||||||
|
any.filepath ==1.4.2.1,
|
||||||
|
any.foldable1-classes-compat ==0.1,
|
||||||
|
foldable1-classes-compat +tagged,
|
||||||
|
any.free ==5.2,
|
||||||
|
any.fusion-plugin-types ==0.1.0,
|
||||||
|
any.generic-arbitrary ==0.2.2,
|
||||||
|
any.generically ==0.1.1,
|
||||||
|
any.ghc-bignum ==1.1,
|
||||||
|
any.ghc-boot-th ==9.0.2,
|
||||||
|
any.ghc-byteorder ==4.11.0.0.10,
|
||||||
|
any.ghc-prim ==0.7.0,
|
||||||
|
any.happy ==1.20.1.1,
|
||||||
|
any.hashable ==1.4.3.0,
|
||||||
|
hashable +integer-gmp -random-initial-seed,
|
||||||
|
any.haskell-lexer ==1.1.1,
|
||||||
|
any.haskus-utils-data ==1.4,
|
||||||
|
any.haskus-utils-types ==1.5.1,
|
||||||
|
any.haskus-utils-variant ==3.3,
|
||||||
|
any.heaps ==0.4,
|
||||||
|
any.hsc2hs ==0.68.10,
|
||||||
|
hsc2hs -in-ghc-tree,
|
||||||
|
any.hspec ==2.10.10,
|
||||||
|
any.hspec-core ==2.10.10,
|
||||||
|
any.hspec-discover ==2.10.10,
|
||||||
|
any.hspec-expectations ==0.8.2,
|
||||||
|
any.hspec-golden-aeson ==0.9.0.0,
|
||||||
|
any.http-io-streams ==0.1.6.3,
|
||||||
|
http-io-streams -brotli +fast-xor,
|
||||||
|
any.indexed-profunctors ==0.1.1.1,
|
||||||
|
any.indexed-traversable ==0.1.3,
|
||||||
|
any.indexed-traversable-instances ==0.1.1.2,
|
||||||
|
any.integer-logarithms ==1.0.3.1,
|
||||||
|
integer-logarithms -check-bounds +integer-gmp,
|
||||||
|
any.io-streams ==1.5.2.2,
|
||||||
|
io-streams +network -nointeractivetests +zlib,
|
||||||
|
any.language-c ==0.9.2,
|
||||||
|
language-c -allwarnings +iecfpextension +usebytestrings,
|
||||||
|
any.libyaml-streamly ==0.2.2,
|
||||||
|
libyaml-streamly -no-unicode -system-libyaml,
|
||||||
|
any.lockfree-queue ==0.2.4,
|
||||||
|
any.lukko ==0.1.1.3,
|
||||||
|
lukko +ofd-locking,
|
||||||
|
any.lzma-static ==5.2.5.5,
|
||||||
|
any.megaparsec ==9.2.2,
|
||||||
|
megaparsec -dev,
|
||||||
|
any.microlens ==0.4.13.1,
|
||||||
|
any.microlens-mtl ==0.2.0.3,
|
||||||
|
any.microlens-th ==0.4.3.14,
|
||||||
|
any.monad-control ==1.0.3.1,
|
||||||
|
any.mono-traversable ==1.0.15.3,
|
||||||
|
any.mtl ==2.2.2,
|
||||||
|
any.mtl-compat ==0.2.2,
|
||||||
|
mtl-compat -two-point-one -two-point-two,
|
||||||
|
any.network ==3.1.4.0,
|
||||||
|
network -devel,
|
||||||
|
any.network-uri ==2.6.4.2,
|
||||||
|
any.openssl-streams ==1.2.3.0,
|
||||||
|
any.optics ==0.4.2.1,
|
||||||
|
any.optics-core ==0.4.1.1,
|
||||||
|
optics-core -explicit-generic-labels,
|
||||||
|
any.optics-extra ==0.4.2.1,
|
||||||
|
any.optics-th ==0.4.1,
|
||||||
|
any.optparse-applicative ==0.17.1.0,
|
||||||
|
optparse-applicative +process,
|
||||||
|
any.os-release ==1.0.2.1,
|
||||||
|
os-release -devel,
|
||||||
|
any.parsec ==3.1.17.0,
|
||||||
|
any.parser-combinators ==1.3.0,
|
||||||
|
parser-combinators -dev,
|
||||||
|
any.pretty ==1.1.3.6,
|
||||||
|
any.pretty-terminal ==0.1.0.0,
|
||||||
|
any.primitive ==0.8.0.0,
|
||||||
|
any.process ==1.6.13.2,
|
||||||
|
any.profunctors ==5.6.2,
|
||||||
|
any.quickcheck-arbitrary-adt ==0.3.1.0,
|
||||||
|
any.quickcheck-io ==0.2.0,
|
||||||
|
any.random ==1.2.1.1,
|
||||||
|
any.recursion-schemes ==5.2.2.5,
|
||||||
|
recursion-schemes +template-haskell,
|
||||||
|
any.regex-base ==0.94.0.2,
|
||||||
|
any.regex-posix ==0.96.0.1,
|
||||||
|
regex-posix -_regex-posix-clib,
|
||||||
|
any.resourcet ==1.2.6,
|
||||||
|
any.retry ==0.9.3.1,
|
||||||
|
retry -lib-werror,
|
||||||
|
any.rts ==1.0.2,
|
||||||
|
any.safe ==0.3.21,
|
||||||
|
any.safe-exceptions ==0.1.7.4,
|
||||||
|
any.scientific ==0.3.7.0,
|
||||||
|
scientific -bytestring-builder -integer-simple,
|
||||||
|
any.semialign ==1.3,
|
||||||
|
semialign +semigroupoids,
|
||||||
|
any.semigroupoids ==6.0.0.1,
|
||||||
|
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
||||||
|
any.setenv ==0.1.1.3,
|
||||||
|
any.split ==0.2.5,
|
||||||
|
any.splitmix ==0.1.0.5,
|
||||||
|
splitmix -optimised-mixer,
|
||||||
|
any.stm ==2.5.0.0,
|
||||||
|
any.streaming-commons ==0.2.2.6,
|
||||||
|
streaming-commons -use-bytestring-builder,
|
||||||
|
any.streamly ==0.8.3,
|
||||||
|
streamly -debug -dev -fusion-plugin -has-llvm -inspection -limit-build-mem -no-fusion +opt -streamk -streamly-core -use-c-malloc +use-unliftio,
|
||||||
|
any.strict ==0.5,
|
||||||
|
any.strict-base ==0.4.0.0,
|
||||||
|
any.tagged ==0.8.8,
|
||||||
|
tagged +deepseq +transformers,
|
||||||
|
any.tagsoup ==0.14.8,
|
||||||
|
any.tar ==0.6.0.0,
|
||||||
|
any.tasty ==1.5,
|
||||||
|
tasty +unix,
|
||||||
|
any.tasty-hunit ==0.10.1,
|
||||||
|
any.template-haskell ==2.17.0.0,
|
||||||
|
any.temporary ==1.3,
|
||||||
|
any.terminal-progress-bar ==0.4.2,
|
||||||
|
any.terminal-size ==0.3.4,
|
||||||
|
any.terminfo ==0.4.1.5,
|
||||||
|
any.text ==2.0.2,
|
||||||
|
text -developer +simdutf,
|
||||||
|
any.text-binary ==0.2.1.1,
|
||||||
|
any.text-short ==0.1.5,
|
||||||
|
text-short -asserts,
|
||||||
|
any.text-zipper ==0.13,
|
||||||
|
any.tf-random ==0.5,
|
||||||
|
any.th-abstraction ==0.5.0.0,
|
||||||
|
any.th-compat ==0.1.4,
|
||||||
|
any.th-lift ==0.8.4,
|
||||||
|
any.th-lift-instances ==0.1.20,
|
||||||
|
any.these ==1.2,
|
||||||
|
any.time ==1.9.3,
|
||||||
|
any.time-compat ==1.9.6.1,
|
||||||
|
time-compat -old-locale,
|
||||||
|
any.transformers ==0.5.6.2,
|
||||||
|
any.transformers-base ==0.4.6,
|
||||||
|
transformers-base +orphaninstances,
|
||||||
|
any.transformers-compat ==0.7.2,
|
||||||
|
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
|
||||||
|
any.typed-process ==0.2.11.1,
|
||||||
|
any.unicode-data ==0.3.1,
|
||||||
|
unicode-data -ucd2haskell,
|
||||||
|
any.unix ==2.7.2.2,
|
||||||
|
any.unix-bytestring ==0.3.7.8,
|
||||||
|
any.unix-compat ==0.7.1,
|
||||||
|
unix-compat -old-time,
|
||||||
|
any.unliftio-core ==0.2.1.0,
|
||||||
|
any.unordered-containers ==0.2.20,
|
||||||
|
unordered-containers -debug,
|
||||||
|
any.uri-bytestring ==0.3.3.1,
|
||||||
|
uri-bytestring -lib-werror,
|
||||||
|
any.utf8-string ==1.0.2,
|
||||||
|
any.uuid-types ==1.0.5.1,
|
||||||
|
any.vector ==0.13.1.0,
|
||||||
|
vector +boundschecks -internalchecks -unsafechecks -wall,
|
||||||
|
any.vector-algorithms ==0.9.0.1,
|
||||||
|
vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks,
|
||||||
|
any.vector-binary-instances ==0.2.5.2,
|
||||||
|
any.vector-stream ==0.1.0.1,
|
||||||
|
any.versions ==6.0.4,
|
||||||
|
any.vty ==6.0,
|
||||||
|
any.vty-crossplatform ==0.2.0.0,
|
||||||
|
vty-crossplatform -demos,
|
||||||
|
any.vty-unix ==0.1.0.0,
|
||||||
|
any.witherable ==0.4.2,
|
||||||
|
any.word-wrap ==0.5,
|
||||||
|
any.word8 ==0.1.3,
|
||||||
|
any.xor ==0.0.1.2,
|
||||||
|
any.yaml-streamly ==0.12.4,
|
||||||
|
yaml-streamly +no-examples +no-exe,
|
||||||
|
any.zip ==2.0.0,
|
||||||
|
zip -dev -disable-bzip2 -disable-zstd,
|
||||||
|
any.zlib ==0.6.3.0,
|
||||||
|
zlib -bundled-c-zlib -non-blocking-ffi -pkg-config,
|
||||||
|
any.zlib-bindings ==0.1.1.5,
|
||||||
|
any.zstd ==0.1.3.0,
|
||||||
|
zstd +standalone
|
||||||
|
index-state: hackage.haskell.org 2024-01-19T19:48:54Z
|
||||||
55
cabal.ghc928.project
Normal file
55
cabal.ghc928.project
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
packages: ./ghcup.cabal
|
||||||
|
|
||||||
|
optional-packages: ./vendored/*/*.cabal
|
||||||
|
|
||||||
|
if impl(ghc < 9.0)
|
||||||
|
package ghcup
|
||||||
|
flags: +tui -tar
|
||||||
|
else
|
||||||
|
package ghcup
|
||||||
|
flags: +tui +tar
|
||||||
|
|
||||||
|
constraints: http-io-streams -brotli,
|
||||||
|
any.aeson >= 2.0.1.0
|
||||||
|
|
||||||
|
if os(mingw32)
|
||||||
|
if impl(ghc >= 9.4)
|
||||||
|
constraints: language-c >= 0.9.3
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/haskell/tar.git
|
||||||
|
tag: d94a988be4311b830149a9f8fc16739927e5fc1c
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/hasufell/uri-bytestring.git
|
||||||
|
tag: 4fb5ed14b500c192e6e7a97f6b2b1eb478806001
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/hasufell/versions.git
|
||||||
|
tag: 79e18fbc44fae3064d8957c550cc0229465db320
|
||||||
|
|
||||||
|
package libarchive
|
||||||
|
flags: -system-libarchive
|
||||||
|
|
||||||
|
package aeson-pretty
|
||||||
|
flags: +lib-only
|
||||||
|
|
||||||
|
package cabal-plan
|
||||||
|
flags: -exe
|
||||||
|
|
||||||
|
package aeson
|
||||||
|
flags: +ordered-keymap
|
||||||
|
|
||||||
|
package streamly
|
||||||
|
flags: +use-unliftio
|
||||||
|
|
||||||
|
package *
|
||||||
|
test-show-details: direct
|
||||||
|
|
||||||
|
allow-newer: cabal-install-parsers:tar
|
||||||
|
|
||||||
|
|
||||||
|
with-compiler: ghc-9.2.8
|
||||||
269
cabal.ghc928.project.freeze
Normal file
269
cabal.ghc928.project.freeze
Normal file
@@ -0,0 +1,269 @@
|
|||||||
|
active-repositories: hackage.haskell.org:merge
|
||||||
|
constraints: any.Cabal ==3.6.3.0,
|
||||||
|
Cabal -bundled-binary-generic,
|
||||||
|
any.Cabal-syntax ==3.10.2.0,
|
||||||
|
any.HUnit ==1.6.2.0,
|
||||||
|
any.HsOpenSSL ==0.11.7.6,
|
||||||
|
HsOpenSSL -fast-bignum -homebrew-openssl -macports-openssl -use-pkg-config,
|
||||||
|
any.OneTuple ==0.4.1.1,
|
||||||
|
any.QuickCheck ==2.14.3,
|
||||||
|
QuickCheck -old-random +templatehaskell,
|
||||||
|
any.StateVar ==1.2.2,
|
||||||
|
any.abstract-deque ==0.3,
|
||||||
|
abstract-deque -usecas,
|
||||||
|
any.aeson ==2.1.2.1,
|
||||||
|
aeson -cffi +ordered-keymap,
|
||||||
|
any.aeson-pretty ==0.8.10,
|
||||||
|
aeson-pretty +lib-only,
|
||||||
|
any.alex ==3.5.0.0,
|
||||||
|
any.ansi-terminal ==1.0.2,
|
||||||
|
ansi-terminal -example,
|
||||||
|
any.ansi-terminal-types ==0.11.5,
|
||||||
|
any.ansi-wl-pprint ==0.6.9,
|
||||||
|
ansi-wl-pprint -example,
|
||||||
|
any.array ==0.5.4.0,
|
||||||
|
any.assoc ==1.1,
|
||||||
|
assoc +tagged,
|
||||||
|
any.async ==2.2.5,
|
||||||
|
async -bench,
|
||||||
|
any.atomic-primops ==0.8.4,
|
||||||
|
atomic-primops -debug,
|
||||||
|
any.attoparsec ==0.14.4,
|
||||||
|
attoparsec -developer,
|
||||||
|
any.base ==4.16.4.0,
|
||||||
|
any.base-compat ==0.13.1,
|
||||||
|
any.base-compat-batteries ==0.13.1,
|
||||||
|
any.base-orphans ==0.9.1,
|
||||||
|
any.base16-bytestring ==1.0.2.0,
|
||||||
|
any.base64-bytestring ==1.2.1.0,
|
||||||
|
any.bifunctors ==5.6.1,
|
||||||
|
bifunctors +tagged,
|
||||||
|
any.bimap ==0.5.0,
|
||||||
|
any.binary ==0.8.9.0,
|
||||||
|
any.binary-instances ==1.0.4,
|
||||||
|
any.binary-orphans ==1.0.4.1,
|
||||||
|
any.bindings-DSL ==1.0.25,
|
||||||
|
any.bitvec ==1.1.5.0,
|
||||||
|
bitvec +simd,
|
||||||
|
any.blaze-builder ==0.4.2.3,
|
||||||
|
any.brick ==2.1.1,
|
||||||
|
brick -demos,
|
||||||
|
any.bytestring ==0.11.4.0,
|
||||||
|
any.bz2 ==1.0.1.0,
|
||||||
|
bz2 -cross +with-bzlib,
|
||||||
|
any.bzlib-conduit ==0.3.0.2,
|
||||||
|
any.c2hs ==0.28.8,
|
||||||
|
c2hs +base3 -regression,
|
||||||
|
any.cabal-install-parsers ==0.6.1,
|
||||||
|
any.cabal-plan ==0.7.3.0,
|
||||||
|
cabal-plan -_ -exe -license-report,
|
||||||
|
any.call-stack ==0.4.0,
|
||||||
|
any.case-insensitive ==1.2.1.0,
|
||||||
|
any.casing ==0.1.4.1,
|
||||||
|
any.cereal ==0.5.8.3,
|
||||||
|
cereal -bytestring-builder,
|
||||||
|
any.colour ==2.3.6,
|
||||||
|
any.comonad ==5.0.8,
|
||||||
|
comonad +containers +distributive +indexed-traversable,
|
||||||
|
any.conduit ==1.3.5,
|
||||||
|
any.conduit-extra ==1.3.6,
|
||||||
|
any.conduit-zstd ==0.0.2.0,
|
||||||
|
any.config-ini ==0.2.7.0,
|
||||||
|
config-ini -enable-doctests,
|
||||||
|
any.containers ==0.6.5.1,
|
||||||
|
any.contravariant ==1.5.5,
|
||||||
|
contravariant +semigroups +statevar +tagged,
|
||||||
|
any.cryptohash-sha1 ==0.11.101.0,
|
||||||
|
any.cryptohash-sha256 ==0.11.102.1,
|
||||||
|
cryptohash-sha256 -exe +use-cbits,
|
||||||
|
any.data-array-byte ==0.1.0.1,
|
||||||
|
any.data-clist ==0.2,
|
||||||
|
any.data-default-class ==0.1.2.0,
|
||||||
|
any.data-fix ==0.3.2,
|
||||||
|
any.deepseq ==1.4.6.1,
|
||||||
|
any.digest ==0.0.2.0,
|
||||||
|
digest -have_arm64_crc32c -have_builtin_prefetch -have_mm_prefetch -have_sse42 -have_strong_getauxval -have_weak_getauxval +pkg-config,
|
||||||
|
any.directory ==1.3.6.2,
|
||||||
|
any.disk-free-space ==0.1.0.1,
|
||||||
|
any.distributive ==0.6.2.1,
|
||||||
|
distributive +semigroups +tagged,
|
||||||
|
any.dlist ==1.0,
|
||||||
|
dlist -werror,
|
||||||
|
any.exceptions ==0.10.4,
|
||||||
|
any.file-uri ==0.1.0.0,
|
||||||
|
any.filepath ==1.4.2.2,
|
||||||
|
any.foldable1-classes-compat ==0.1,
|
||||||
|
foldable1-classes-compat +tagged,
|
||||||
|
any.free ==5.2,
|
||||||
|
any.fusion-plugin-types ==0.1.0,
|
||||||
|
any.generic-arbitrary ==0.2.2,
|
||||||
|
any.generically ==0.1.1,
|
||||||
|
any.ghc-bignum ==1.2,
|
||||||
|
any.ghc-boot-th ==9.2.8,
|
||||||
|
any.ghc-byteorder ==4.11.0.0.10,
|
||||||
|
any.ghc-prim ==0.8.0,
|
||||||
|
any.happy ==1.20.1.1,
|
||||||
|
any.hashable ==1.4.3.0,
|
||||||
|
hashable +integer-gmp -random-initial-seed,
|
||||||
|
any.haskell-lexer ==1.1.1,
|
||||||
|
any.haskus-utils-data ==1.4,
|
||||||
|
any.haskus-utils-types ==1.5.1,
|
||||||
|
any.haskus-utils-variant ==3.3,
|
||||||
|
any.heaps ==0.4,
|
||||||
|
any.hsc2hs ==0.68.10,
|
||||||
|
hsc2hs -in-ghc-tree,
|
||||||
|
any.hspec ==2.10.10,
|
||||||
|
any.hspec-core ==2.10.10,
|
||||||
|
any.hspec-discover ==2.10.10,
|
||||||
|
any.hspec-expectations ==0.8.2,
|
||||||
|
any.hspec-golden-aeson ==0.9.0.0,
|
||||||
|
any.http-io-streams ==0.1.6.3,
|
||||||
|
http-io-streams -brotli +fast-xor,
|
||||||
|
any.indexed-profunctors ==0.1.1.1,
|
||||||
|
any.indexed-traversable ==0.1.3,
|
||||||
|
any.indexed-traversable-instances ==0.1.1.2,
|
||||||
|
any.integer-logarithms ==1.0.3.1,
|
||||||
|
integer-logarithms -check-bounds +integer-gmp,
|
||||||
|
any.io-streams ==1.5.2.2,
|
||||||
|
io-streams +network -nointeractivetests +zlib,
|
||||||
|
any.language-c ==0.9.2,
|
||||||
|
language-c -allwarnings +iecfpextension +usebytestrings,
|
||||||
|
any.libyaml-streamly ==0.2.2,
|
||||||
|
libyaml-streamly -no-unicode -system-libyaml,
|
||||||
|
any.lockfree-queue ==0.2.4,
|
||||||
|
any.lukko ==0.1.1.3,
|
||||||
|
lukko +ofd-locking,
|
||||||
|
any.lzma-static ==5.2.5.5,
|
||||||
|
any.megaparsec ==9.2.2,
|
||||||
|
megaparsec -dev,
|
||||||
|
any.microlens ==0.4.13.1,
|
||||||
|
any.microlens-mtl ==0.2.0.3,
|
||||||
|
any.microlens-th ==0.4.3.14,
|
||||||
|
any.monad-control ==1.0.3.1,
|
||||||
|
any.mono-traversable ==1.0.15.3,
|
||||||
|
any.mtl ==2.2.2,
|
||||||
|
any.mtl-compat ==0.2.2,
|
||||||
|
mtl-compat -two-point-one -two-point-two,
|
||||||
|
any.network ==3.1.4.0,
|
||||||
|
network -devel,
|
||||||
|
any.network-uri ==2.6.4.2,
|
||||||
|
any.openssl-streams ==1.2.3.0,
|
||||||
|
any.optics ==0.4.2.1,
|
||||||
|
any.optics-core ==0.4.1.1,
|
||||||
|
optics-core -explicit-generic-labels,
|
||||||
|
any.optics-extra ==0.4.2.1,
|
||||||
|
any.optics-th ==0.4.1,
|
||||||
|
any.optparse-applicative ==0.17.1.0,
|
||||||
|
optparse-applicative +process,
|
||||||
|
any.os-release ==1.0.2.1,
|
||||||
|
os-release -devel,
|
||||||
|
any.parsec ==3.1.17.0,
|
||||||
|
any.parser-combinators ==1.3.0,
|
||||||
|
parser-combinators -dev,
|
||||||
|
any.pretty ==1.1.3.6,
|
||||||
|
any.pretty-terminal ==0.1.0.0,
|
||||||
|
any.primitive ==0.8.0.0,
|
||||||
|
any.process ==1.6.16.0,
|
||||||
|
any.profunctors ==5.6.2,
|
||||||
|
any.quickcheck-arbitrary-adt ==0.3.1.0,
|
||||||
|
any.quickcheck-io ==0.2.0,
|
||||||
|
any.random ==1.2.1.1,
|
||||||
|
any.recursion-schemes ==5.2.2.5,
|
||||||
|
recursion-schemes +template-haskell,
|
||||||
|
any.regex-base ==0.94.0.2,
|
||||||
|
any.regex-posix ==0.96.0.1,
|
||||||
|
regex-posix -_regex-posix-clib,
|
||||||
|
any.resourcet ==1.2.6,
|
||||||
|
any.retry ==0.9.3.1,
|
||||||
|
retry -lib-werror,
|
||||||
|
any.rts ==1.0.2,
|
||||||
|
any.safe ==0.3.21,
|
||||||
|
any.safe-exceptions ==0.1.7.4,
|
||||||
|
any.scientific ==0.3.7.0,
|
||||||
|
scientific -bytestring-builder -integer-simple,
|
||||||
|
any.semialign ==1.3,
|
||||||
|
semialign +semigroupoids,
|
||||||
|
any.semigroupoids ==6.0.0.1,
|
||||||
|
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
||||||
|
any.setenv ==0.1.1.3,
|
||||||
|
any.split ==0.2.5,
|
||||||
|
any.splitmix ==0.1.0.5,
|
||||||
|
splitmix -optimised-mixer,
|
||||||
|
any.stm ==2.5.0.2,
|
||||||
|
any.streaming-commons ==0.2.2.6,
|
||||||
|
streaming-commons -use-bytestring-builder,
|
||||||
|
any.streamly ==0.8.3,
|
||||||
|
streamly -debug -dev -fusion-plugin -has-llvm -inspection -limit-build-mem -no-fusion +opt -streamk -streamly-core -use-c-malloc +use-unliftio,
|
||||||
|
any.strict ==0.5,
|
||||||
|
any.strict-base ==0.4.0.0,
|
||||||
|
any.tagged ==0.8.8,
|
||||||
|
tagged +deepseq +transformers,
|
||||||
|
any.tagsoup ==0.14.8,
|
||||||
|
any.tar ==0.6.0.0,
|
||||||
|
any.tasty ==1.5,
|
||||||
|
tasty +unix,
|
||||||
|
any.tasty-hunit ==0.10.1,
|
||||||
|
any.template-haskell ==2.18.0.0,
|
||||||
|
any.temporary ==1.3,
|
||||||
|
any.terminal-progress-bar ==0.4.2,
|
||||||
|
any.terminal-size ==0.3.4,
|
||||||
|
any.terminfo ==0.4.1.5,
|
||||||
|
any.text ==2.0.2,
|
||||||
|
text -developer +simdutf,
|
||||||
|
any.text-binary ==0.2.1.1,
|
||||||
|
any.text-short ==0.1.5,
|
||||||
|
text-short -asserts,
|
||||||
|
any.text-zipper ==0.13,
|
||||||
|
any.tf-random ==0.5,
|
||||||
|
any.th-abstraction ==0.5.0.0,
|
||||||
|
any.th-compat ==0.1.4,
|
||||||
|
any.th-lift ==0.8.4,
|
||||||
|
any.th-lift-instances ==0.1.20,
|
||||||
|
any.these ==1.2,
|
||||||
|
any.time ==1.11.1.1,
|
||||||
|
any.time-compat ==1.9.6.1,
|
||||||
|
time-compat -old-locale,
|
||||||
|
any.transformers ==0.5.6.2,
|
||||||
|
any.transformers-base ==0.4.6,
|
||||||
|
transformers-base +orphaninstances,
|
||||||
|
any.transformers-compat ==0.7.2,
|
||||||
|
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
|
||||||
|
any.typed-process ==0.2.11.1,
|
||||||
|
any.unicode-data ==0.3.1,
|
||||||
|
unicode-data -ucd2haskell,
|
||||||
|
any.unix ==2.7.2.2,
|
||||||
|
any.unix-bytestring ==0.3.7.8,
|
||||||
|
any.unix-compat ==0.7.1,
|
||||||
|
unix-compat -old-time,
|
||||||
|
any.unliftio-core ==0.2.1.0,
|
||||||
|
any.unordered-containers ==0.2.20,
|
||||||
|
unordered-containers -debug,
|
||||||
|
any.uri-bytestring ==0.3.3.1,
|
||||||
|
uri-bytestring -lib-werror,
|
||||||
|
any.utf8-string ==1.0.2,
|
||||||
|
any.uuid-types ==1.0.5.1,
|
||||||
|
any.vector ==0.13.1.0,
|
||||||
|
vector +boundschecks -internalchecks -unsafechecks -wall,
|
||||||
|
any.vector-algorithms ==0.9.0.1,
|
||||||
|
vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks,
|
||||||
|
any.vector-binary-instances ==0.2.5.2,
|
||||||
|
any.vector-stream ==0.1.0.1,
|
||||||
|
any.versions ==6.0.4,
|
||||||
|
any.vty ==6.0,
|
||||||
|
any.vty-crossplatform ==0.2.0.0,
|
||||||
|
vty-crossplatform -demos,
|
||||||
|
any.vty-unix ==0.1.0.0,
|
||||||
|
any.witherable ==0.4.2,
|
||||||
|
any.word-wrap ==0.5,
|
||||||
|
any.word8 ==0.1.3,
|
||||||
|
any.xor ==0.0.1.2,
|
||||||
|
any.yaml-streamly ==0.12.4,
|
||||||
|
yaml-streamly +no-examples +no-exe,
|
||||||
|
any.zip ==2.0.0,
|
||||||
|
zip -dev -disable-bzip2 -disable-zstd,
|
||||||
|
any.zlib ==0.6.3.0,
|
||||||
|
zlib -bundled-c-zlib -non-blocking-ffi -pkg-config,
|
||||||
|
any.zlib-bindings ==0.1.1.5,
|
||||||
|
any.zstd ==0.1.3.0,
|
||||||
|
zstd +standalone
|
||||||
|
index-state: hackage.haskell.org 2024-01-19T19:48:54Z
|
||||||
55
cabal.ghc948.project
Normal file
55
cabal.ghc948.project
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
packages: ./ghcup.cabal
|
||||||
|
|
||||||
|
optional-packages: ./vendored/*/*.cabal
|
||||||
|
|
||||||
|
if impl(ghc < 9.0)
|
||||||
|
package ghcup
|
||||||
|
flags: +tui -tar
|
||||||
|
else
|
||||||
|
package ghcup
|
||||||
|
flags: +tui +tar
|
||||||
|
|
||||||
|
constraints: http-io-streams -brotli,
|
||||||
|
any.aeson >= 2.0.1.0
|
||||||
|
|
||||||
|
if os(mingw32)
|
||||||
|
if impl(ghc >= 9.4)
|
||||||
|
constraints: language-c >= 0.9.3
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/haskell/tar.git
|
||||||
|
tag: d94a988be4311b830149a9f8fc16739927e5fc1c
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/hasufell/uri-bytestring.git
|
||||||
|
tag: 4fb5ed14b500c192e6e7a97f6b2b1eb478806001
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/hasufell/versions.git
|
||||||
|
tag: 79e18fbc44fae3064d8957c550cc0229465db320
|
||||||
|
|
||||||
|
package libarchive
|
||||||
|
flags: -system-libarchive
|
||||||
|
|
||||||
|
package aeson-pretty
|
||||||
|
flags: +lib-only
|
||||||
|
|
||||||
|
package cabal-plan
|
||||||
|
flags: -exe
|
||||||
|
|
||||||
|
package aeson
|
||||||
|
flags: +ordered-keymap
|
||||||
|
|
||||||
|
package streamly
|
||||||
|
flags: +use-unliftio
|
||||||
|
|
||||||
|
package *
|
||||||
|
test-show-details: direct
|
||||||
|
|
||||||
|
allow-newer: cabal-install-parsers:tar
|
||||||
|
|
||||||
|
|
||||||
|
with-compiler: ghc-9.4.8
|
||||||
267
cabal.ghc948.project.freeze
Normal file
267
cabal.ghc948.project.freeze
Normal file
@@ -0,0 +1,267 @@
|
|||||||
|
active-repositories: hackage.haskell.org:merge
|
||||||
|
constraints: any.Cabal ==3.6.3.0 || ==3.8.1.0,
|
||||||
|
Cabal -bundled-binary-generic,
|
||||||
|
any.Cabal-syntax ==3.8.1.0 || ==3.10.2.0,
|
||||||
|
any.HUnit ==1.6.2.0,
|
||||||
|
any.HsOpenSSL ==0.11.7.6,
|
||||||
|
HsOpenSSL -fast-bignum -homebrew-openssl -macports-openssl -use-pkg-config,
|
||||||
|
any.OneTuple ==0.4.1.1,
|
||||||
|
any.QuickCheck ==2.14.3,
|
||||||
|
QuickCheck -old-random +templatehaskell,
|
||||||
|
any.StateVar ==1.2.2,
|
||||||
|
any.abstract-deque ==0.3,
|
||||||
|
abstract-deque -usecas,
|
||||||
|
any.aeson ==2.1.2.1,
|
||||||
|
aeson -cffi +ordered-keymap,
|
||||||
|
any.aeson-pretty ==0.8.10,
|
||||||
|
aeson-pretty +lib-only,
|
||||||
|
any.alex ==3.5.0.0,
|
||||||
|
any.ansi-terminal ==1.0.2,
|
||||||
|
ansi-terminal -example,
|
||||||
|
any.ansi-terminal-types ==0.11.5,
|
||||||
|
any.ansi-wl-pprint ==0.6.9,
|
||||||
|
ansi-wl-pprint -example,
|
||||||
|
any.array ==0.5.4.0,
|
||||||
|
any.assoc ==1.1,
|
||||||
|
assoc +tagged,
|
||||||
|
any.async ==2.2.5,
|
||||||
|
async -bench,
|
||||||
|
any.atomic-primops ==0.8.4,
|
||||||
|
atomic-primops -debug,
|
||||||
|
any.attoparsec ==0.14.4,
|
||||||
|
attoparsec -developer,
|
||||||
|
any.base ==4.17.2.1,
|
||||||
|
any.base-compat ==0.13.1,
|
||||||
|
any.base-compat-batteries ==0.13.1,
|
||||||
|
any.base-orphans ==0.9.1,
|
||||||
|
any.base16-bytestring ==1.0.2.0,
|
||||||
|
any.base64-bytestring ==1.2.1.0,
|
||||||
|
any.bifunctors ==5.6.1,
|
||||||
|
bifunctors +tagged,
|
||||||
|
any.bimap ==0.5.0,
|
||||||
|
any.binary ==0.8.9.1,
|
||||||
|
any.binary-instances ==1.0.4,
|
||||||
|
any.binary-orphans ==1.0.4.1,
|
||||||
|
any.bindings-DSL ==1.0.25,
|
||||||
|
any.bitvec ==1.1.5.0,
|
||||||
|
bitvec +simd,
|
||||||
|
any.blaze-builder ==0.4.2.3,
|
||||||
|
any.brick ==2.1.1,
|
||||||
|
brick -demos,
|
||||||
|
any.bytestring ==0.11.5.3,
|
||||||
|
any.bz2 ==1.0.1.0,
|
||||||
|
bz2 -cross +with-bzlib,
|
||||||
|
any.bzlib-conduit ==0.3.0.2,
|
||||||
|
any.c2hs ==0.28.8,
|
||||||
|
c2hs +base3 -regression,
|
||||||
|
any.cabal-install-parsers ==0.6.1,
|
||||||
|
any.cabal-plan ==0.7.3.0,
|
||||||
|
cabal-plan -_ -exe -license-report,
|
||||||
|
any.call-stack ==0.4.0,
|
||||||
|
any.case-insensitive ==1.2.1.0,
|
||||||
|
any.casing ==0.1.4.1,
|
||||||
|
any.cereal ==0.5.8.3,
|
||||||
|
cereal -bytestring-builder,
|
||||||
|
any.colour ==2.3.6,
|
||||||
|
any.comonad ==5.0.8,
|
||||||
|
comonad +containers +distributive +indexed-traversable,
|
||||||
|
any.conduit ==1.3.5,
|
||||||
|
any.conduit-extra ==1.3.6,
|
||||||
|
any.conduit-zstd ==0.0.2.0,
|
||||||
|
any.config-ini ==0.2.7.0,
|
||||||
|
config-ini -enable-doctests,
|
||||||
|
any.containers ==0.6.7,
|
||||||
|
any.contravariant ==1.5.5,
|
||||||
|
contravariant +semigroups +statevar +tagged,
|
||||||
|
any.cryptohash-sha1 ==0.11.101.0,
|
||||||
|
any.cryptohash-sha256 ==0.11.102.1,
|
||||||
|
cryptohash-sha256 -exe +use-cbits,
|
||||||
|
any.data-clist ==0.2,
|
||||||
|
any.data-default-class ==0.1.2.0,
|
||||||
|
any.data-fix ==0.3.2,
|
||||||
|
any.deepseq ==1.4.8.0,
|
||||||
|
any.digest ==0.0.2.0,
|
||||||
|
digest -have_arm64_crc32c -have_builtin_prefetch -have_mm_prefetch -have_sse42 -have_strong_getauxval -have_weak_getauxval +pkg-config,
|
||||||
|
any.directory ==1.3.7.1,
|
||||||
|
any.disk-free-space ==0.1.0.1,
|
||||||
|
any.distributive ==0.6.2.1,
|
||||||
|
distributive +semigroups +tagged,
|
||||||
|
any.dlist ==1.0,
|
||||||
|
dlist -werror,
|
||||||
|
any.exceptions ==0.10.5,
|
||||||
|
any.file-uri ==0.1.0.0,
|
||||||
|
any.filepath ==1.4.2.2,
|
||||||
|
any.foldable1-classes-compat ==0.1,
|
||||||
|
foldable1-classes-compat +tagged,
|
||||||
|
any.free ==5.2,
|
||||||
|
any.fusion-plugin-types ==0.1.0,
|
||||||
|
any.generic-arbitrary ==0.2.2,
|
||||||
|
any.generically ==0.1.1,
|
||||||
|
any.ghc-bignum ==1.3,
|
||||||
|
any.ghc-boot-th ==9.4.8,
|
||||||
|
any.ghc-byteorder ==4.11.0.0.10,
|
||||||
|
any.ghc-prim ==0.9.1,
|
||||||
|
any.happy ==1.20.1.1,
|
||||||
|
any.hashable ==1.4.3.0,
|
||||||
|
hashable +integer-gmp -random-initial-seed,
|
||||||
|
any.haskell-lexer ==1.1.1,
|
||||||
|
any.haskus-utils-data ==1.4,
|
||||||
|
any.haskus-utils-types ==1.5.1,
|
||||||
|
any.haskus-utils-variant ==3.3,
|
||||||
|
any.heaps ==0.4,
|
||||||
|
any.hsc2hs ==0.68.10,
|
||||||
|
hsc2hs -in-ghc-tree,
|
||||||
|
any.hspec ==2.10.10,
|
||||||
|
any.hspec-core ==2.10.10,
|
||||||
|
any.hspec-discover ==2.10.10,
|
||||||
|
any.hspec-expectations ==0.8.2,
|
||||||
|
any.hspec-golden-aeson ==0.9.0.0,
|
||||||
|
any.http-io-streams ==0.1.6.3,
|
||||||
|
http-io-streams -brotli +fast-xor,
|
||||||
|
any.indexed-profunctors ==0.1.1.1,
|
||||||
|
any.indexed-traversable ==0.1.3,
|
||||||
|
any.indexed-traversable-instances ==0.1.1.2,
|
||||||
|
any.integer-logarithms ==1.0.3.1,
|
||||||
|
integer-logarithms -check-bounds +integer-gmp,
|
||||||
|
any.io-streams ==1.5.2.2,
|
||||||
|
io-streams +network -nointeractivetests +zlib,
|
||||||
|
any.language-c ==0.9.2,
|
||||||
|
language-c -allwarnings +iecfpextension +usebytestrings,
|
||||||
|
any.libyaml-streamly ==0.2.2,
|
||||||
|
libyaml-streamly -no-unicode -system-libyaml,
|
||||||
|
any.lockfree-queue ==0.2.4,
|
||||||
|
any.lukko ==0.1.1.3,
|
||||||
|
lukko +ofd-locking,
|
||||||
|
any.lzma-static ==5.2.5.5,
|
||||||
|
any.megaparsec ==9.2.2,
|
||||||
|
megaparsec -dev,
|
||||||
|
any.microlens ==0.4.13.1,
|
||||||
|
any.microlens-mtl ==0.2.0.3,
|
||||||
|
any.microlens-th ==0.4.3.14,
|
||||||
|
any.monad-control ==1.0.3.1,
|
||||||
|
any.mono-traversable ==1.0.15.3,
|
||||||
|
any.mtl ==2.2.2,
|
||||||
|
any.mtl-compat ==0.2.2,
|
||||||
|
mtl-compat -two-point-one -two-point-two,
|
||||||
|
any.network ==3.1.4.0,
|
||||||
|
network -devel,
|
||||||
|
any.network-uri ==2.6.4.2,
|
||||||
|
any.openssl-streams ==1.2.3.0,
|
||||||
|
any.optics ==0.4.2.1,
|
||||||
|
any.optics-core ==0.4.1.1,
|
||||||
|
optics-core -explicit-generic-labels,
|
||||||
|
any.optics-extra ==0.4.2.1,
|
||||||
|
any.optics-th ==0.4.1,
|
||||||
|
any.optparse-applicative ==0.17.1.0,
|
||||||
|
optparse-applicative +process,
|
||||||
|
any.os-release ==1.0.2.1,
|
||||||
|
os-release -devel,
|
||||||
|
any.parsec ==3.1.16.1,
|
||||||
|
any.parser-combinators ==1.3.0,
|
||||||
|
parser-combinators -dev,
|
||||||
|
any.pretty ==1.1.3.6,
|
||||||
|
any.pretty-terminal ==0.1.0.0,
|
||||||
|
any.primitive ==0.8.0.0,
|
||||||
|
any.process ==1.6.18.0,
|
||||||
|
any.profunctors ==5.6.2,
|
||||||
|
any.quickcheck-arbitrary-adt ==0.3.1.0,
|
||||||
|
any.quickcheck-io ==0.2.0,
|
||||||
|
any.random ==1.2.1.1,
|
||||||
|
any.recursion-schemes ==5.2.2.5,
|
||||||
|
recursion-schemes +template-haskell,
|
||||||
|
any.regex-base ==0.94.0.2,
|
||||||
|
any.regex-posix ==0.96.0.1,
|
||||||
|
regex-posix -_regex-posix-clib,
|
||||||
|
any.resourcet ==1.2.6,
|
||||||
|
any.retry ==0.9.3.1,
|
||||||
|
retry -lib-werror,
|
||||||
|
any.rts ==1.0.2,
|
||||||
|
any.safe ==0.3.21,
|
||||||
|
any.safe-exceptions ==0.1.7.4,
|
||||||
|
any.scientific ==0.3.7.0,
|
||||||
|
scientific -bytestring-builder -integer-simple,
|
||||||
|
any.semialign ==1.3,
|
||||||
|
semialign +semigroupoids,
|
||||||
|
any.semigroupoids ==6.0.0.1,
|
||||||
|
semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
|
||||||
|
any.setenv ==0.1.1.3,
|
||||||
|
any.split ==0.2.5,
|
||||||
|
any.splitmix ==0.1.0.5,
|
||||||
|
splitmix -optimised-mixer,
|
||||||
|
any.stm ==2.5.1.0,
|
||||||
|
any.streaming-commons ==0.2.2.6,
|
||||||
|
streaming-commons -use-bytestring-builder,
|
||||||
|
any.streamly ==0.8.3,
|
||||||
|
streamly -debug -dev -fusion-plugin -has-llvm -inspection -limit-build-mem -no-fusion +opt -streamk -streamly-core -use-c-malloc +use-unliftio,
|
||||||
|
any.strict ==0.5,
|
||||||
|
any.strict-base ==0.4.0.0,
|
||||||
|
any.tagged ==0.8.8,
|
||||||
|
tagged +deepseq +transformers,
|
||||||
|
any.tagsoup ==0.14.8,
|
||||||
|
any.tar ==0.6.0.0,
|
||||||
|
any.tasty ==1.5,
|
||||||
|
tasty +unix,
|
||||||
|
any.tasty-hunit ==0.10.1,
|
||||||
|
any.template-haskell ==2.19.0.0,
|
||||||
|
any.temporary ==1.3,
|
||||||
|
any.terminal-progress-bar ==0.4.2,
|
||||||
|
any.terminal-size ==0.3.4,
|
||||||
|
any.terminfo ==0.4.1.5,
|
||||||
|
any.text ==2.0.2,
|
||||||
|
any.text-binary ==0.2.1.1,
|
||||||
|
any.text-short ==0.1.5,
|
||||||
|
text-short -asserts,
|
||||||
|
any.text-zipper ==0.13,
|
||||||
|
any.tf-random ==0.5,
|
||||||
|
any.th-abstraction ==0.5.0.0,
|
||||||
|
any.th-compat ==0.1.4,
|
||||||
|
any.th-lift ==0.8.4,
|
||||||
|
any.th-lift-instances ==0.1.20,
|
||||||
|
any.these ==1.2,
|
||||||
|
any.time ==1.11.1.2 || ==1.12.2,
|
||||||
|
any.time-compat ==1.9.6.1,
|
||||||
|
time-compat -old-locale,
|
||||||
|
any.transformers ==0.5.6.2,
|
||||||
|
any.transformers-base ==0.4.6,
|
||||||
|
transformers-base +orphaninstances,
|
||||||
|
any.transformers-compat ==0.7.2,
|
||||||
|
transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
|
||||||
|
any.typed-process ==0.2.11.1,
|
||||||
|
any.unicode-data ==0.3.1,
|
||||||
|
unicode-data -ucd2haskell,
|
||||||
|
any.unix ==2.7.3,
|
||||||
|
any.unix-bytestring ==0.3.7.8,
|
||||||
|
any.unix-compat ==0.7.1,
|
||||||
|
unix-compat -old-time,
|
||||||
|
any.unliftio-core ==0.2.1.0,
|
||||||
|
any.unordered-containers ==0.2.20,
|
||||||
|
unordered-containers -debug,
|
||||||
|
any.uri-bytestring ==0.3.3.1,
|
||||||
|
uri-bytestring -lib-werror,
|
||||||
|
any.utf8-string ==1.0.2,
|
||||||
|
any.uuid-types ==1.0.5.1,
|
||||||
|
any.vector ==0.13.1.0,
|
||||||
|
vector +boundschecks -internalchecks -unsafechecks -wall,
|
||||||
|
any.vector-algorithms ==0.9.0.1,
|
||||||
|
vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks,
|
||||||
|
any.vector-binary-instances ==0.2.5.2,
|
||||||
|
any.vector-stream ==0.1.0.1,
|
||||||
|
any.versions ==6.0.4,
|
||||||
|
any.vty ==6.0,
|
||||||
|
any.vty-crossplatform ==0.2.0.0,
|
||||||
|
vty-crossplatform -demos,
|
||||||
|
any.vty-unix ==0.1.0.0,
|
||||||
|
any.witherable ==0.4.2,
|
||||||
|
any.word-wrap ==0.5,
|
||||||
|
any.word8 ==0.1.3,
|
||||||
|
any.xor ==0.0.1.2,
|
||||||
|
any.yaml-streamly ==0.12.4,
|
||||||
|
yaml-streamly +no-examples +no-exe,
|
||||||
|
any.zip ==2.0.0,
|
||||||
|
zip -dev -disable-bzip2 -disable-zstd,
|
||||||
|
any.zlib ==0.6.3.0,
|
||||||
|
zlib -bundled-c-zlib -non-blocking-ffi -pkg-config,
|
||||||
|
any.zlib-bindings ==0.1.1.5,
|
||||||
|
any.zstd ==0.1.3.0,
|
||||||
|
zstd +standalone
|
||||||
|
index-state: hackage.haskell.org 2024-01-19T19:48:54Z
|
||||||
@@ -2,16 +2,34 @@ packages: ./ghcup.cabal
|
|||||||
|
|
||||||
optional-packages: ./vendored/*/*.cabal
|
optional-packages: ./vendored/*/*.cabal
|
||||||
|
|
||||||
package ghcup
|
if impl(ghc < 9.0)
|
||||||
flags: +tui
|
package ghcup
|
||||||
|
flags: +tui -tar
|
||||||
|
else
|
||||||
|
package ghcup
|
||||||
|
flags: +tui +tar
|
||||||
|
|
||||||
constraints: http-io-streams -brotli,
|
constraints: http-io-streams -brotli,
|
||||||
any.aeson >= 2.0.1.0
|
any.aeson >= 2.0.1.0
|
||||||
|
|
||||||
|
if os(mingw32)
|
||||||
|
if impl(ghc >= 9.4)
|
||||||
|
constraints: language-c >= 0.9.3
|
||||||
|
|
||||||
source-repository-package
|
source-repository-package
|
||||||
type: git
|
type: git
|
||||||
location: https://github.com/fosskers/versions.git
|
location: https://github.com/haskell/tar.git
|
||||||
tag: 7bc3355348aac3510771d4622aff09ac38c9924d
|
tag: d94a988be4311b830149a9f8fc16739927e5fc1c
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/hasufell/uri-bytestring.git
|
||||||
|
tag: 4fb5ed14b500c192e6e7a97f6b2b1eb478806001
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/hasufell/versions.git
|
||||||
|
tag: 79e18fbc44fae3064d8957c550cc0229465db320
|
||||||
|
|
||||||
package libarchive
|
package libarchive
|
||||||
flags: -system-libarchive
|
flags: -system-libarchive
|
||||||
@@ -30,3 +48,6 @@ package streamly
|
|||||||
|
|
||||||
package *
|
package *
|
||||||
test-show-details: direct
|
test-show-details: direct
|
||||||
|
|
||||||
|
allow-newer: cabal-install-parsers:tar
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ optional-packages: ./vendored/*/*.cabal
|
|||||||
optimization: 2
|
optimization: 2
|
||||||
|
|
||||||
package ghcup
|
package ghcup
|
||||||
flags: +tui
|
flags: +tui -tar
|
||||||
|
|
||||||
if os(linux)
|
if os(linux)
|
||||||
if arch(x86_64) || arch(i386)
|
if arch(x86_64) || arch(i386)
|
||||||
@@ -18,12 +18,14 @@ elif os(mingw32)
|
|||||||
constraints: zlib +bundled-c-zlib,
|
constraints: zlib +bundled-c-zlib,
|
||||||
lzma +static,
|
lzma +static,
|
||||||
text -simdutf,
|
text -simdutf,
|
||||||
vty-windows >=0.1.0.3
|
vty-windows >=0.1.0.3
|
||||||
|
if impl(ghc >= 9.4)
|
||||||
|
constraints: language-c >= 0.9.3
|
||||||
elif os(freebsd)
|
elif os(freebsd)
|
||||||
constraints: zlib +bundled-c-zlib,
|
constraints: zlib +bundled-c-zlib,
|
||||||
zip +disable-zstd
|
zip +disable-zstd
|
||||||
package *
|
package *
|
||||||
ghc-options: -split-sections -pgmc clang++14
|
ghc-options: -split-sections
|
||||||
|
|
||||||
constraints: http-io-streams -brotli,
|
constraints: http-io-streams -brotli,
|
||||||
any.aeson >= 2.0.1.0,
|
any.aeson >= 2.0.1.0,
|
||||||
@@ -44,3 +46,20 @@ package aeson
|
|||||||
package streamly
|
package streamly
|
||||||
flags: +use-unliftio
|
flags: +use-unliftio
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/haskell/tar.git
|
||||||
|
tag: d94a988be4311b830149a9f8fc16739927e5fc1c
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/hasufell/uri-bytestring.git
|
||||||
|
tag: 4fb5ed14b500c192e6e7a97f6b2b1eb478806001
|
||||||
|
|
||||||
|
source-repository-package
|
||||||
|
type: git
|
||||||
|
location: https://github.com/hasufell/versions.git
|
||||||
|
tag: 79e18fbc44fae3064d8957c550cc0229465db320
|
||||||
|
|
||||||
|
allow-newer: cabal-install-parsers:tar
|
||||||
|
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ url-source:
|
|||||||
# sha256: b48f3d3a508d0c140d1c801e04afc65e80c0d25e7e939a8a41edb387b26b81b3
|
# sha256: b48f3d3a508d0c140d1c801e04afc65e80c0d25e7e939a8a41edb387b26b81b3
|
||||||
|
|
||||||
# This is a way to override platform detection, e.g. when you're running
|
# This is a way to override platform detection, e.g. when you're running
|
||||||
# a Ubuntu derivate based on 18.04, you could do:
|
# a Ubuntu derivative based on 18.04, you could do:
|
||||||
#
|
#
|
||||||
# platform-override:
|
# platform-override:
|
||||||
# arch: A_64
|
# arch: A_64
|
||||||
|
|||||||
Submodule data/metadata updated: 0239166c31...7e1a50cfff
@@ -1,4 +1,4 @@
|
|||||||
FROM --platform=linux/i386 i386/alpine:3.12
|
FROM --platform=linux/i386 i386/alpine:3.16
|
||||||
|
|
||||||
ENV LANG C.UTF-8
|
ENV LANG C.UTF-8
|
||||||
|
|
||||||
@@ -37,8 +37,8 @@ RUN apk add --no-cache \
|
|||||||
xz-dev \
|
xz-dev \
|
||||||
ncurses-static
|
ncurses-static
|
||||||
|
|
||||||
ARG GHCUP_VERSION=0.1.19.4
|
ARG GHCUP_VERSION=0.1.20.0
|
||||||
ARG GPG_KEY=7D1E8AFD1D4A16D71FADA2F2CCC85C0E40C06A8C
|
ARG GPG_KEY="7D1E8AFD1D4A16D71FADA2F2CCC85C0E40C06A8C FFEB7CE81E16A36B3E2DED6F2DE04D4E97DB64AD 88B57FCF7DB53B4DB3BFA4B1588764FBE22D19C4 EAF2A9A722C0C96F2B431CA511AAD8CEDEE0CAEF"
|
||||||
|
|
||||||
# install ghcup
|
# install ghcup
|
||||||
RUN gpg --batch --keyserver keys.openpgp.org --recv-keys $GPG_KEY && \
|
RUN gpg --batch --keyserver keys.openpgp.org --recv-keys $GPG_KEY && \
|
||||||
@@ -51,9 +51,9 @@ RUN gpg --batch --keyserver keys.openpgp.org --recv-keys $GPG_KEY && \
|
|||||||
chmod +x /usr/bin/ghcup && \
|
chmod +x /usr/bin/ghcup && \
|
||||||
rm -rf SHA256SUMS SHA256SUMS.sig
|
rm -rf SHA256SUMS SHA256SUMS.sig
|
||||||
|
|
||||||
ARG GHC=8.10.7
|
ARG GHC=9.4.8
|
||||||
ARG CABAL_INSTALL=3.6.2.0
|
ARG CABAL_INSTALL=3.10.2.0
|
||||||
ARG STACK=2.9.1
|
ARG STACK=2.13.1
|
||||||
|
|
||||||
ENV GHCUP_CURL_OPTS="--silent"
|
ENV GHCUP_CURL_OPTS="--silent"
|
||||||
ENV NO_COLOR=1
|
ENV NO_COLOR=1
|
||||||
@@ -63,7 +63,7 @@ RUN ghcup config set gpg-setting GPGStrict && \
|
|||||||
ghcup --verbose install ghc --isolate=/usr --force ${GHC} && \
|
ghcup --verbose install ghc --isolate=/usr --force ${GHC} && \
|
||||||
ghcup --verbose install cabal --isolate=/usr/bin --force ${CABAL_INSTALL} && \
|
ghcup --verbose install cabal --isolate=/usr/bin --force ${CABAL_INSTALL} && \
|
||||||
find "/usr/lib/ghc-${GHC}/" \( -name "*_p.a" -o -name "*.p_hi" \) -type f -delete && \
|
find "/usr/lib/ghc-${GHC}/" \( -name "*_p.a" -o -name "*.p_hi" \) -type f -delete && \
|
||||||
rm -r "/usr/share/doc/ghc-${GHC}" && \
|
rm -rf "/usr/share/doc/ghc-${GHC}" && \
|
||||||
rm -rf /tmp/ghcup* && \
|
rm -rf /tmp/ghcup* && \
|
||||||
ghcup gc -p -s -c -t
|
ghcup gc -p -s -c -t
|
||||||
|
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ RUN apk add --no-cache \
|
|||||||
xz-dev \
|
xz-dev \
|
||||||
ncurses-static
|
ncurses-static
|
||||||
|
|
||||||
ARG GHCUP_VERSION=0.1.19.4
|
ARG GHCUP_VERSION=0.1.20.0
|
||||||
ARG GPG_KEY=7D1E8AFD1D4A16D71FADA2F2CCC85C0E40C06A8C
|
ARG GPG_KEY="7D1E8AFD1D4A16D71FADA2F2CCC85C0E40C06A8C FFEB7CE81E16A36B3E2DED6F2DE04D4E97DB64AD 88B57FCF7DB53B4DB3BFA4B1588764FBE22D19C4 EAF2A9A722C0C96F2B431CA511AAD8CEDEE0CAEF"
|
||||||
|
|
||||||
|
|
||||||
# install ghcup
|
# install ghcup
|
||||||
@@ -52,9 +52,9 @@ RUN gpg --batch --keyserver keys.openpgp.org --recv-keys $GPG_KEY && \
|
|||||||
chmod +x /usr/bin/ghcup && \
|
chmod +x /usr/bin/ghcup && \
|
||||||
rm -rf SHA256SUMS SHA256SUMS.sig
|
rm -rf SHA256SUMS SHA256SUMS.sig
|
||||||
|
|
||||||
ARG GHC=8.10.7
|
ARG GHC=9.4.8
|
||||||
ARG CABAL_INSTALL=3.6.2.0
|
ARG CABAL_INSTALL=3.10.2.0
|
||||||
ARG STACK=2.9.1
|
ARG STACK=2.13.1
|
||||||
|
|
||||||
ENV GHCUP_CURL_OPTS="--silent"
|
ENV GHCUP_CURL_OPTS="--silent"
|
||||||
ENV NO_COLOR=1
|
ENV NO_COLOR=1
|
||||||
@@ -64,7 +64,7 @@ RUN ghcup config set gpg-setting GPGStrict && \
|
|||||||
ghcup --verbose install ghc --isolate=/usr --force ${GHC} && \
|
ghcup --verbose install ghc --isolate=/usr --force ${GHC} && \
|
||||||
ghcup --verbose install cabal --isolate=/usr/bin --force ${CABAL_INSTALL} && \
|
ghcup --verbose install cabal --isolate=/usr/bin --force ${CABAL_INSTALL} && \
|
||||||
find "/usr/lib/ghc-${GHC}/" \( -name "*_p.a" -o -name "*.p_hi" \) -type f -delete && \
|
find "/usr/lib/ghc-${GHC}/" \( -name "*_p.a" -o -name "*.p_hi" \) -type f -delete && \
|
||||||
rm -r "/usr/share/doc/ghc-${GHC}" && \
|
rm -rf "/usr/share/doc/ghc-${GHC}" && \
|
||||||
rm -rf /tmp/ghcup* && \
|
rm -rf /tmp/ghcup* && \
|
||||||
ghcup gc -p -s -c -t
|
ghcup gc -p -s -c -t
|
||||||
|
|
||||||
|
|||||||
@@ -29,8 +29,8 @@ RUN apt-get update && \
|
|||||||
|
|
||||||
RUN update_opt.sh 11 1
|
RUN update_opt.sh 11 1
|
||||||
|
|
||||||
ARG GHCUP_VERSION=0.1.19.4
|
ARG GHCUP_VERSION=0.1.20.0
|
||||||
ARG GPG_KEY=7D1E8AFD1D4A16D71FADA2F2CCC85C0E40C06A8C
|
ARG GPG_KEY="7D1E8AFD1D4A16D71FADA2F2CCC85C0E40C06A8C FFEB7CE81E16A36B3E2DED6F2DE04D4E97DB64AD 88B57FCF7DB53B4DB3BFA4B1588764FBE22D19C4 EAF2A9A722C0C96F2B431CA511AAD8CEDEE0CAEF"
|
||||||
|
|
||||||
# install ghcup
|
# install ghcup
|
||||||
RUN gpg --batch --keyserver keys.openpgp.org --recv-keys $GPG_KEY && \
|
RUN gpg --batch --keyserver keys.openpgp.org --recv-keys $GPG_KEY && \
|
||||||
@@ -43,9 +43,9 @@ RUN gpg --batch --keyserver keys.openpgp.org --recv-keys $GPG_KEY && \
|
|||||||
chmod +x /usr/bin/ghcup && \
|
chmod +x /usr/bin/ghcup && \
|
||||||
rm -rf SHA256SUMS SHA256SUMS.sig
|
rm -rf SHA256SUMS SHA256SUMS.sig
|
||||||
|
|
||||||
ARG GHC=8.10.7
|
ARG GHC=9.2.8
|
||||||
ARG CABAL_INSTALL=3.6.2.0
|
ARG CABAL_INSTALL=3.6.2.0
|
||||||
ARG STACK=2.9.1
|
ARG STACK=2.13.1
|
||||||
|
|
||||||
ENV GHCUP_CURL_OPTS="--silent"
|
ENV GHCUP_CURL_OPTS="--silent"
|
||||||
ENV NO_COLOR=1
|
ENV NO_COLOR=1
|
||||||
|
|||||||
@@ -29,8 +29,8 @@ RUN apt-get update && \
|
|||||||
|
|
||||||
RUN update_opt.sh 11 1
|
RUN update_opt.sh 11 1
|
||||||
|
|
||||||
ARG GHCUP_VERSION=0.1.19.4
|
ARG GHCUP_VERSION=0.1.20.0
|
||||||
ARG GPG_KEY=7D1E8AFD1D4A16D71FADA2F2CCC85C0E40C06A8C
|
ARG GPG_KEY="7D1E8AFD1D4A16D71FADA2F2CCC85C0E40C06A8C FFEB7CE81E16A36B3E2DED6F2DE04D4E97DB64AD 88B57FCF7DB53B4DB3BFA4B1588764FBE22D19C4 EAF2A9A722C0C96F2B431CA511AAD8CEDEE0CAEF"
|
||||||
|
|
||||||
# install ghcup
|
# install ghcup
|
||||||
RUN gpg --batch --keyserver keys.openpgp.org --recv-keys $GPG_KEY && \
|
RUN gpg --batch --keyserver keys.openpgp.org --recv-keys $GPG_KEY && \
|
||||||
@@ -43,9 +43,9 @@ RUN gpg --batch --keyserver keys.openpgp.org --recv-keys $GPG_KEY && \
|
|||||||
chmod +x /usr/bin/ghcup && \
|
chmod +x /usr/bin/ghcup && \
|
||||||
rm -rf SHA256SUMS SHA256SUMS.sig
|
rm -rf SHA256SUMS SHA256SUMS.sig
|
||||||
|
|
||||||
ARG GHC=8.10.7
|
ARG GHC=9.4.8
|
||||||
ARG CABAL_INSTALL=3.6.2.0
|
ARG CABAL_INSTALL=3.10.2.0
|
||||||
ARG STACK=2.9.1
|
ARG STACK=2.13.1
|
||||||
|
|
||||||
ENV GHCUP_CURL_OPTS="--silent"
|
ENV GHCUP_CURL_OPTS="--silent"
|
||||||
ENV NO_COLOR=1
|
ENV NO_COLOR=1
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ This is a more in-depth guide specific to GHCup. `ghcup --help` is your friend.
|
|||||||
|
|
||||||
## Basic usage
|
## Basic usage
|
||||||
|
|
||||||
For the simple, interactive, text-based user interface (TUI) (not available on windows), run:
|
For the simple, interactive, text-based user interface (TUI), run:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
ghcup tui
|
ghcup tui
|
||||||
@@ -67,8 +67,7 @@ and make sure your bashrc sources the startup script
|
|||||||
|
|
||||||
`ghcup` is very portable. There are a few exceptions though:
|
`ghcup` is very portable. There are a few exceptions though:
|
||||||
|
|
||||||
1. `ghcup tui` is only available on non-windows platforms
|
1. legacy subcommands `ghcup install` (without a tool identifier) and `ghcup install-cabal` may be removed in the future
|
||||||
2. legacy subcommands `ghcup install` (without a tool identifier) and `ghcup install-cabal` may be removed in the future
|
|
||||||
|
|
||||||
# Configuration
|
# Configuration
|
||||||
|
|
||||||
@@ -79,7 +78,7 @@ Partial configuration is fine. Command line options always override the config f
|
|||||||
|
|
||||||
## Overriding distro detection
|
## Overriding distro detection
|
||||||
|
|
||||||
If you're running e.g. an Ubuntu derivate based on 18.04 and ghcup is picking bindists that
|
If you're running e.g. an Ubuntu derivative based on 18.04 and ghcup is picking bindists that
|
||||||
don't work well, you could do this in `config.yaml`:
|
don't work well, you could do this in `config.yaml`:
|
||||||
|
|
||||||
```yml
|
```yml
|
||||||
@@ -106,6 +105,7 @@ This is the complete list of env variables that change GHCup behavior:
|
|||||||
On windows, there's additionally:
|
On windows, there's additionally:
|
||||||
|
|
||||||
* `GHCUP_MSYS2`: Has to point to the root of an existing MSYS2 installation (when installed by GHCup, that's e.g. `C:\ghcup\msys64`). GHCup bootstrap takes care of this usually.
|
* `GHCUP_MSYS2`: Has to point to the root of an existing MSYS2 installation (when installed by GHCup, that's e.g. `C:\ghcup\msys64`). GHCup bootstrap takes care of this usually.
|
||||||
|
* `GHCUP_MSYS2_ENV`: The [MSYS2 environment](https://www.msys2.org/docs/environments/) to use when executing e.g. `ghcup run --mingw-path`. Possible values are `MSYS`, `UCRT64`, `CLANG64`, `CLANGARM64`, `CLANG32`, `MINGW64`, `MINGW32`. Defaults to `MINGW64`, `MINGW32` or `CLANGARM64`, depending on the architecture. `MSYS` is always added as the last component. If you change this value after running the bootstrap script, you may need to make sure that the cabal config reflects this change, more specifically `extra-prog-path`, `extra-include-dirs` and `extra-lib-dirs`. (**NOTE: specifying anything other than the default is considered experimental**)
|
||||||
|
|
||||||
### XDG support
|
### XDG support
|
||||||
|
|
||||||
@@ -509,7 +509,7 @@ See `ghcup compile ghc --help` for further information.
|
|||||||
|
|
||||||
Since ghcup version 0.1.20.0, we provide cross bindists for GHC JS and WASM. These can be installed conveniently.
|
Since ghcup version 0.1.20.0, we provide cross bindists for GHC JS and WASM. These can be installed conveniently.
|
||||||
However, these are intended as a developer preview only. By using these GHC variants, you are implicitly signing up to participate in GHC development!
|
However, these are intended as a developer preview only. By using these GHC variants, you are implicitly signing up to participate in GHC development!
|
||||||
If you run into bugs or missing behavior, join the dev chat at https://matrix.to/#/#GHC:matrix.org.
|
If you run into bugs or missing behavior, join the dev chat at https://matrix.to/#/#GHC:matrix.org.
|
||||||
|
|
||||||
First, add the cross release channel:
|
First, add the cross release channel:
|
||||||
|
|
||||||
@@ -557,7 +557,7 @@ You need the required wasm toolchain:
|
|||||||
git clone https://gitlab.haskell.org/ghc/ghc-wasm-meta.git
|
git clone https://gitlab.haskell.org/ghc/ghc-wasm-meta.git
|
||||||
cd ghc-wasm-meta/
|
cd ghc-wasm-meta/
|
||||||
export SKIP_GHC=yes
|
export SKIP_GHC=yes
|
||||||
sh setup.sh
|
./setup.sh
|
||||||
source ~/.ghc-wasm/env
|
source ~/.ghc-wasm/env
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -611,7 +611,7 @@ Examples:
|
|||||||
## Continuous integration
|
## Continuous integration
|
||||||
|
|
||||||
On Windows, GHCup can be installed automatically on a CI runner
|
On Windows, GHCup can be installed automatically on a CI runner
|
||||||
non-interactively, as below. The paramaters to the PowerShell script are
|
non-interactively, as below. The parameters to the PowerShell script are
|
||||||
specified positionally, after `-ArgumentList`:
|
specified positionally, after `-ArgumentList`:
|
||||||
|
|
||||||
```ps
|
```ps
|
||||||
|
|||||||
52
ghcup.cabal
52
ghcup.cabal
@@ -30,6 +30,11 @@ extra-source-files:
|
|||||||
test/ghcup-test/golden/unix/GHCupInfo.json
|
test/ghcup-test/golden/unix/GHCupInfo.json
|
||||||
test/ghcup-test/golden/windows/GHCupInfo.json
|
test/ghcup-test/golden/windows/GHCupInfo.json
|
||||||
|
|
||||||
|
tested-with: GHC==9.4.8
|
||||||
|
, GHC==9.2.8
|
||||||
|
, GHC==9.0.2
|
||||||
|
, GHC==8.10.7
|
||||||
|
|
||||||
source-repository head
|
source-repository head
|
||||||
type: git
|
type: git
|
||||||
location: https://github.com/haskell/ghcup-hs.git
|
location: https://github.com/haskell/ghcup-hs.git
|
||||||
@@ -53,6 +58,11 @@ flag no-exe
|
|||||||
default: False
|
default: False
|
||||||
manual: True
|
manual: True
|
||||||
|
|
||||||
|
flag tar
|
||||||
|
description: Use haskell tar instead of libarchive.
|
||||||
|
default: False
|
||||||
|
manual: True
|
||||||
|
|
||||||
common app-common-depends
|
common app-common-depends
|
||||||
build-depends:
|
build-depends:
|
||||||
, aeson >=1.4
|
, aeson >=1.4
|
||||||
@@ -67,8 +77,7 @@ common app-common-depends
|
|||||||
, directory ^>=1.3.6.0
|
, directory ^>=1.3.6.0
|
||||||
, filepath ^>=1.4.2.1
|
, filepath ^>=1.4.2.1
|
||||||
, haskus-utils-types ^>=1.5
|
, haskus-utils-types ^>=1.5
|
||||||
, haskus-utils-variant ^>=3.2.1
|
, haskus-utils-variant ^>=3.3
|
||||||
, libarchive ^>=3.0.3.0
|
|
||||||
, megaparsec >=8.0.0 && <9.3
|
, megaparsec >=8.0.0 && <9.3
|
||||||
, mtl ^>=2.2
|
, mtl ^>=2.2
|
||||||
, optparse-applicative >=0.15.1.0 && <0.18
|
, optparse-applicative >=0.15.1.0 && <0.18
|
||||||
@@ -79,7 +88,7 @@ common app-common-depends
|
|||||||
, safe ^>=0.3.18
|
, safe ^>=0.3.18
|
||||||
, safe-exceptions ^>=0.1
|
, safe-exceptions ^>=0.1
|
||||||
, tagsoup ^>=0.14
|
, tagsoup ^>=0.14
|
||||||
, template-haskell >=2.7 && <2.20
|
, template-haskell >=2.7 && <2.22
|
||||||
, temporary ^>=1.3
|
, temporary ^>=1.3
|
||||||
, text ^>=2.0
|
, text ^>=2.0
|
||||||
, time >=1.9.3 && <1.12
|
, time >=1.9.3 && <1.12
|
||||||
@@ -90,6 +99,15 @@ common app-common-depends
|
|||||||
, versions >=6.0.3 && <6.1
|
, versions >=6.0.3 && <6.1
|
||||||
, yaml-streamly ^>=0.12.0
|
, yaml-streamly ^>=0.12.0
|
||||||
|
|
||||||
|
if flag(tar)
|
||||||
|
cpp-options: -DTAR
|
||||||
|
build-depends:
|
||||||
|
tar ^>=0.6.0.0
|
||||||
|
, zip ^>=2.0.0
|
||||||
|
|
||||||
|
else
|
||||||
|
build-depends: libarchive ^>=3.0.3.0
|
||||||
|
|
||||||
library
|
library
|
||||||
exposed-modules:
|
exposed-modules:
|
||||||
GHCup
|
GHCup
|
||||||
@@ -122,6 +140,9 @@ library
|
|||||||
GHCup.Types.Stack
|
GHCup.Types.Stack
|
||||||
GHCup.Utils
|
GHCup.Utils
|
||||||
GHCup.Utils.Dirs
|
GHCup.Utils.Dirs
|
||||||
|
GHCup.Utils.Tar
|
||||||
|
GHCup.Utils.Tar.Types
|
||||||
|
GHCup.Utils.URI
|
||||||
GHCup.Version
|
GHCup.Version
|
||||||
|
|
||||||
hs-source-dirs: lib
|
hs-source-dirs: lib
|
||||||
@@ -164,9 +185,9 @@ library
|
|||||||
, disk-free-space ^>=0.1.0.1
|
, disk-free-space ^>=0.1.0.1
|
||||||
, exceptions ^>=0.10
|
, exceptions ^>=0.10
|
||||||
, filepath ^>=1.4.2.1
|
, filepath ^>=1.4.2.1
|
||||||
|
, file-uri ^>=0.1.0.0
|
||||||
, haskus-utils-types ^>=1.5
|
, haskus-utils-types ^>=1.5
|
||||||
, haskus-utils-variant ^>=3.2.1
|
, haskus-utils-variant ^>=3.3
|
||||||
, libarchive ^>=3.0.3.0
|
|
||||||
, lzma-static ^>=5.2.5.3
|
, lzma-static ^>=5.2.5.3
|
||||||
, megaparsec >=8.0.0 && <9.3
|
, megaparsec >=8.0.0 && <9.3
|
||||||
, mtl ^>=2.2
|
, mtl ^>=2.2
|
||||||
@@ -182,7 +203,7 @@ library
|
|||||||
, split ^>=0.2.3.4
|
, split ^>=0.2.3.4
|
||||||
, streamly ^>=0.8.2
|
, streamly ^>=0.8.2
|
||||||
, strict-base ^>=0.4
|
, strict-base ^>=0.4
|
||||||
, template-haskell >=2.7 && <2.20
|
, template-haskell >=2.7 && <2.22
|
||||||
, temporary ^>=1.3
|
, temporary ^>=1.3
|
||||||
, text ^>=2.0
|
, text ^>=2.0
|
||||||
, time >=1.9.3 && <1.12
|
, time >=1.9.3 && <1.12
|
||||||
@@ -196,6 +217,15 @@ library
|
|||||||
, yaml-streamly ^>=0.12.0
|
, yaml-streamly ^>=0.12.0
|
||||||
, zlib ^>=0.6.2.2
|
, zlib ^>=0.6.2.2
|
||||||
|
|
||||||
|
if flag(tar)
|
||||||
|
cpp-options: -DTAR
|
||||||
|
build-depends:
|
||||||
|
tar ^>=0.6.0.0
|
||||||
|
, zip ^>=2.0.0
|
||||||
|
|
||||||
|
else
|
||||||
|
build-depends: libarchive ^>=3.0.3.0
|
||||||
|
|
||||||
if (flag(internal-downloader) && !os(windows))
|
if (flag(internal-downloader) && !os(windows))
|
||||||
exposed-modules: GHCup.Download.IOStreams
|
exposed-modules: GHCup.Download.IOStreams
|
||||||
cpp-options: -DINTERNAL_DOWNLOADER
|
cpp-options: -DINTERNAL_DOWNLOADER
|
||||||
@@ -233,7 +263,7 @@ library
|
|||||||
build-depends:
|
build-depends:
|
||||||
, bz2 >=0.5.0.5 && <1.1
|
, bz2 >=0.5.0.5 && <1.1
|
||||||
, terminal-size ^>=0.3.3
|
, terminal-size ^>=0.3.3
|
||||||
, unix ^>=2.7
|
, unix ^>=2.7 || ^>=2.8
|
||||||
, unix-bytestring ^>=0.3.7.3
|
, unix-bytestring ^>=0.3.7.3
|
||||||
|
|
||||||
if flag(tui)
|
if flag(tui)
|
||||||
@@ -291,7 +321,7 @@ library ghcup-optparse
|
|||||||
cpp-options: -DIS_WINDOWS
|
cpp-options: -DIS_WINDOWS
|
||||||
|
|
||||||
else
|
else
|
||||||
build-depends: unix ^>=2.7
|
build-depends: unix ^>=2.7 || ^>=2.8
|
||||||
|
|
||||||
executable ghcup
|
executable ghcup
|
||||||
import: app-common-depends
|
import: app-common-depends
|
||||||
@@ -327,12 +357,12 @@ executable ghcup
|
|||||||
, brick ^>=2.1
|
, brick ^>=2.1
|
||||||
, transformers ^>=0.5
|
, transformers ^>=0.5
|
||||||
, vty ^>=6.0
|
, vty ^>=6.0
|
||||||
|
, optics ^>=0.4
|
||||||
|
|
||||||
if os(windows)
|
if os(windows)
|
||||||
cpp-options: -DIS_WINDOWS
|
cpp-options: -DIS_WINDOWS
|
||||||
|
|
||||||
else
|
else
|
||||||
build-depends: unix ^>=2.7
|
build-depends: unix ^>=2.7 || ^>=2.8
|
||||||
|
|
||||||
if flag(no-exe)
|
if flag(no-exe)
|
||||||
buildable: False
|
buildable: False
|
||||||
@@ -384,7 +414,7 @@ test-suite ghcup-test
|
|||||||
cpp-options: -DIS_WINDOWS
|
cpp-options: -DIS_WINDOWS
|
||||||
|
|
||||||
else
|
else
|
||||||
build-depends: unix ^>=2.7
|
build-depends: unix ^>=2.7 || ^>=2.8
|
||||||
|
|
||||||
test-suite ghcup-optparse-test
|
test-suite ghcup-optparse-test
|
||||||
type: exitcode-stdio-1.0
|
type: exitcode-stdio-1.0
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import GHCup.Platform
|
|||||||
import GHCup.Types
|
import GHCup.Types
|
||||||
import GHCup.Types.Optics
|
import GHCup.Types.Optics
|
||||||
import GHCup.Utils
|
import GHCup.Utils
|
||||||
|
import GHCup.Utils.URI
|
||||||
import GHCup.Prelude
|
import GHCup.Prelude
|
||||||
import GHCup.Prelude.Process
|
import GHCup.Prelude.Process
|
||||||
import GHCup.Prelude.Logger
|
import GHCup.Prelude.Logger
|
||||||
@@ -59,7 +60,7 @@ import Safe
|
|||||||
import System.Process ( readProcess )
|
import System.Process ( readProcess )
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
import Text.HTML.TagSoup hiding ( Tag )
|
import Text.HTML.TagSoup hiding ( Tag )
|
||||||
import URI.ByteString
|
import URI.ByteString hiding (parseURI)
|
||||||
|
|
||||||
import qualified Data.ByteString.UTF8 as UTF8
|
import qualified Data.ByteString.UTF8 as UTF8
|
||||||
import qualified Data.Map.Strict as M
|
import qualified Data.Map.Strict as M
|
||||||
@@ -215,7 +216,7 @@ platformParser s' = case MP.parse (platformP <* MP.eof) "" (T.pack s') of
|
|||||||
|
|
||||||
|
|
||||||
uriParser :: String -> Either String URI
|
uriParser :: String -> Either String URI
|
||||||
uriParser = first show . parseURI strictURIParserOptions . UTF8.fromString
|
uriParser = first show . parseURI . UTF8.fromString
|
||||||
|
|
||||||
|
|
||||||
absolutePathParser :: FilePath -> Either String FilePath
|
absolutePathParser :: FilePath -> Either String FilePath
|
||||||
@@ -834,11 +835,11 @@ parseUrlSource :: String -> Either String URLSource
|
|||||||
parseUrlSource "GHCupURL" = pure GHCupURL
|
parseUrlSource "GHCupURL" = pure GHCupURL
|
||||||
parseUrlSource "StackSetupURL" = pure StackSetupURL
|
parseUrlSource "StackSetupURL" = pure StackSetupURL
|
||||||
parseUrlSource s' = (eitherDecode . LE.encodeUtf8 . LT.pack $ s')
|
parseUrlSource s' = (eitherDecode . LE.encodeUtf8 . LT.pack $ s')
|
||||||
<|> (fmap (OwnSource . (:[]) . Right) . first show . parseURI strictURIParserOptions .UTF8.fromString $ s')
|
<|> (fmap (OwnSource . (:[]) . Right) . first show . parseURI .UTF8.fromString $ s')
|
||||||
|
|
||||||
parseNewUrlSource :: String -> Either String NewURLSource
|
parseNewUrlSource :: String -> Either String NewURLSource
|
||||||
parseNewUrlSource "GHCupURL" = pure NewGHCupURL
|
parseNewUrlSource "GHCupURL" = pure NewGHCupURL
|
||||||
parseNewUrlSource "StackSetupURL" = pure NewStackSetupURL
|
parseNewUrlSource "StackSetupURL" = pure NewStackSetupURL
|
||||||
parseNewUrlSource s' = (eitherDecode . LE.encodeUtf8 . LT.pack $ s')
|
parseNewUrlSource s' = (eitherDecode . LE.encodeUtf8 . LT.pack $ s')
|
||||||
<|> (fmap NewURI . first show . parseURI strictURIParserOptions .UTF8.fromString $ s')
|
<|> (fmap NewURI . first show . parseURI .UTF8.fromString $ s')
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import GHCup.OptParse.Common
|
|||||||
#if !MIN_VERSION_base(4,13,0)
|
#if !MIN_VERSION_base(4,13,0)
|
||||||
import Control.Monad.Fail ( MonadFail )
|
import Control.Monad.Fail ( MonadFail )
|
||||||
#endif
|
#endif
|
||||||
import Codec.Archive ( ArchiveResult )
|
|
||||||
import Control.Concurrent (threadDelay)
|
import Control.Concurrent (threadDelay)
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
import Control.Monad.Trans.Resource
|
import Control.Monad.Trans.Resource
|
||||||
@@ -158,7 +157,7 @@ Examples:
|
|||||||
ghcup compile hls --version 1.7.0.0 --ghc 8.10.7 --cabal-update
|
ghcup compile hls --version 1.7.0.0 --ghc 8.10.7 --cabal-update
|
||||||
# compile from master for ghc 9.2.3 using 'git describe' to name the binary and ignore the pinned index state
|
# compile from master for ghc 9.2.3 using 'git describe' to name the binary and ignore the pinned index state
|
||||||
ghcup compile hls -g master --git-describe-version --ghc 9.2.3 -- --index-state=@(date '+%s')
|
ghcup compile hls -g master --git-describe-version --ghc 9.2.3 -- --index-state=@(date '+%s')
|
||||||
# compile a specific commit for ghc 9.2.3 and set a specifc version for the binary name
|
# compile a specific commit for ghc 9.2.3 and set a specific version for the binary name
|
||||||
ghcup compile hls -g a32db0b -o 1.7.0.0-p1 --ghc 9.2.3|]
|
ghcup compile hls -g a32db0b -o 1.7.0.0-p1 --ghc 9.2.3|]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ import GHCup.Prelude
|
|||||||
import GHCup.Prelude.Logger
|
import GHCup.Prelude.Logger
|
||||||
import GHCup.Prelude.String.QQ
|
import GHCup.Prelude.String.QQ
|
||||||
|
|
||||||
import Codec.Archive
|
|
||||||
#if !MIN_VERSION_base(4,13,0)
|
#if !MIN_VERSION_base(4,13,0)
|
||||||
import Control.Monad.Fail ( MonadFail )
|
import Control.Monad.Fail ( MonadFail )
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ import Control.Exception.Safe ( MonadMask, MonadCatch )
|
|||||||
#if !MIN_VERSION_base(4,13,0)
|
#if !MIN_VERSION_base(4,13,0)
|
||||||
import Control.Monad.Fail ( MonadFail )
|
import Control.Monad.Fail ( MonadFail )
|
||||||
#endif
|
#endif
|
||||||
import Codec.Archive
|
|
||||||
import Control.Monad.Reader
|
import Control.Monad.Reader
|
||||||
import Control.Monad.Trans.Resource
|
import Control.Monad.Trans.Resource
|
||||||
import Data.Functor
|
import Data.Functor
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import GHCup.Utils.Dirs
|
|||||||
import GHCup.Prelude.Logger
|
import GHCup.Prelude.Logger
|
||||||
import GHCup.Prelude.String.QQ
|
import GHCup.Prelude.String.QQ
|
||||||
|
|
||||||
import Codec.Archive
|
|
||||||
#if !MIN_VERSION_base(4,13,0)
|
#if !MIN_VERSION_base(4,13,0)
|
||||||
import Control.Monad.Fail ( MonadFail )
|
import Control.Monad.Fail ( MonadFail )
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import GHCup.Prelude
|
|||||||
import GHCup.Prelude.File
|
import GHCup.Prelude.File
|
||||||
import GHCup.Prelude.Logger
|
import GHCup.Prelude.Logger
|
||||||
|
|
||||||
import Codec.Archive ( ArchiveResult )
|
|
||||||
import Control.Applicative
|
import Control.Applicative
|
||||||
import Control.Exception.Safe
|
import Control.Exception.Safe
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ import qualified GHCup.Types.Stack as Stack
|
|||||||
import GHCup.Types.Optics
|
import GHCup.Types.Optics
|
||||||
import GHCup.Types.JSON ( )
|
import GHCup.Types.JSON ( )
|
||||||
import GHCup.Utils.Dirs
|
import GHCup.Utils.Dirs
|
||||||
|
import GHCup.Utils.URI
|
||||||
import GHCup.Platform
|
import GHCup.Platform
|
||||||
import GHCup.Prelude
|
import GHCup.Prelude
|
||||||
import GHCup.Prelude.File
|
import GHCup.Prelude.File
|
||||||
@@ -77,7 +78,7 @@ import System.Exit
|
|||||||
import System.FilePath
|
import System.FilePath
|
||||||
import System.IO.Error
|
import System.IO.Error
|
||||||
import System.IO.Temp
|
import System.IO.Temp
|
||||||
import URI.ByteString
|
import URI.ByteString hiding (parseURI)
|
||||||
|
|
||||||
import qualified Crypto.Hash.SHA256 as SHA256
|
import qualified Crypto.Hash.SHA256 as SHA256
|
||||||
import qualified Data.ByteString as B
|
import qualified Data.ByteString as B
|
||||||
@@ -165,7 +166,7 @@ getDownloadsF pfreq@(PlatformRequest arch plat _) = do
|
|||||||
-> [String]
|
-> [String]
|
||||||
-> m GHCupInfo
|
-> m GHCupInfo
|
||||||
fromStackSetupInfo (Stack.siGHCs -> ghcDli) keys = do
|
fromStackSetupInfo (Stack.siGHCs -> ghcDli) keys = do
|
||||||
let ghcVersionsPerKey = (`M.lookup` ghcDli) <$> (T.pack <$> keys)
|
let ghcVersionsPerKey = (`M.lookup` ghcDli) . T.pack <$> keys
|
||||||
ghcVersions = fromMaybe mempty . listToMaybe . catMaybes $ ghcVersionsPerKey
|
ghcVersions = fromMaybe mempty . listToMaybe . catMaybes $ ghcVersionsPerKey
|
||||||
(ghcupInfo' :: M.Map GHCTargetVersion DownloadInfo) <-
|
(ghcupInfo' :: M.Map GHCTargetVersion DownloadInfo) <-
|
||||||
M.mapKeys mkTVer <$> M.traverseMaybeWithKey (\_ a -> pure $ fromStackDownloadInfo a) ghcVersions
|
M.mapKeys mkTVer <$> M.traverseMaybeWithKey (\_ a -> pure $ fromStackDownloadInfo a) ghcVersions
|
||||||
@@ -178,7 +179,7 @@ getDownloadsF pfreq@(PlatformRequest arch plat _) = do
|
|||||||
|
|
||||||
fromStackDownloadInfo :: MonadThrow m => Stack.GHCDownloadInfo -> m DownloadInfo
|
fromStackDownloadInfo :: MonadThrow m => Stack.GHCDownloadInfo -> m DownloadInfo
|
||||||
fromStackDownloadInfo (Stack.GHCDownloadInfo { gdiDownloadInfo = Stack.DownloadInfo{..} }) = do
|
fromStackDownloadInfo (Stack.GHCDownloadInfo { gdiDownloadInfo = Stack.DownloadInfo{..} }) = do
|
||||||
url <- either (\e -> throwM $ ParseError (show e)) pure $ parseURI strictURIParserOptions . E.encodeUtf8 $ downloadInfoUrl
|
url <- either (\e -> throwM $ ParseError (show e)) pure $ parseURI . E.encodeUtf8 $ downloadInfoUrl
|
||||||
sha256 <- maybe (throwM $ DigestMissing url) (pure . E.decodeUtf8) downloadInfoSha256
|
sha256 <- maybe (throwM $ DigestMissing url) (pure . E.decodeUtf8) downloadInfoSha256
|
||||||
pure $ DownloadInfo url (Just $ RegexDir "ghc-.*") sha256 Nothing Nothing
|
pure $ DownloadInfo url (Just $ RegexDir "ghc-.*") sha256 Nothing Nothing
|
||||||
|
|
||||||
@@ -855,7 +856,7 @@ getGpgOpts =
|
|||||||
-- "baz"
|
-- "baz"
|
||||||
urlBaseName :: ByteString -- ^ the url path (without scheme and host)
|
urlBaseName :: ByteString -- ^ the url path (without scheme and host)
|
||||||
-> ByteString
|
-> ByteString
|
||||||
urlBaseName = snd . B.breakEnd (== _slash) . urlDecode False
|
urlBaseName = snd . B.breakEnd (== _slash)
|
||||||
|
|
||||||
|
|
||||||
-- | Curl saves all intermediate connect headers as well, not just the last one, so we make an effort to take the
|
-- | Curl saves all intermediate connect headers as well, not just the last one, so we make an effort to take the
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import GHCup.Download.Utils
|
|||||||
import GHCup.Errors
|
import GHCup.Errors
|
||||||
import GHCup.Types.JSON ( )
|
import GHCup.Types.JSON ( )
|
||||||
import GHCup.Prelude
|
import GHCup.Prelude
|
||||||
|
import GHCup.Utils.URI
|
||||||
|
|
||||||
import Control.Applicative
|
import Control.Applicative
|
||||||
import Control.Exception.Safe
|
import Control.Exception.Safe
|
||||||
@@ -28,7 +29,7 @@ import Prelude hiding ( abs
|
|||||||
, writeFile
|
, writeFile
|
||||||
)
|
)
|
||||||
import System.ProgressBar
|
import System.ProgressBar
|
||||||
import URI.ByteString
|
import URI.ByteString hiding (parseURI)
|
||||||
|
|
||||||
import qualified Data.ByteString as BS
|
import qualified Data.ByteString as BS
|
||||||
import qualified Data.Map.Strict as M
|
import qualified Data.Map.Strict as M
|
||||||
@@ -114,7 +115,7 @@ downloadInternal = go (5 :: Int)
|
|||||||
| otherwise -> throwE $ HTTPStatusError scode (getHeaderMap r)
|
| otherwise -> throwE $ HTTPStatusError scode (getHeaderMap r)
|
||||||
)
|
)
|
||||||
|
|
||||||
followRedirectURL bs = case parseURI strictURIParserOptions bs of
|
followRedirectURL bs = case parseURI bs of
|
||||||
Right uri' -> do
|
Right uri' -> do
|
||||||
(https', host', fullPath', port') <- liftE $ uriToQuadruple uri'
|
(https', host', fullPath', port') <- liftE $ uriToQuadruple uri'
|
||||||
go (redirs - 1) progressBar https' host' fullPath' port' consumer setup addHeaders eCSize
|
go (redirs - 1) progressBar https' host' fullPath' port' consumer setup addHeaders eCSize
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ module GHCup.Errors where
|
|||||||
|
|
||||||
import GHCup.Types
|
import GHCup.Types
|
||||||
|
|
||||||
import Codec.Archive
|
|
||||||
import Control.Exception.Safe
|
import Control.Exception.Safe
|
||||||
import Data.ByteString ( ByteString )
|
import Data.ByteString ( ByteString )
|
||||||
import Data.CaseInsensitive ( CI )
|
import Data.CaseInsensitive ( CI )
|
||||||
@@ -212,20 +211,22 @@ data NoDownload = NoDownload GHCTargetVersion Tool (Maybe PlatformRequest)
|
|||||||
deriving Show
|
deriving Show
|
||||||
|
|
||||||
instance Pretty NoDownload where
|
instance Pretty NoDownload where
|
||||||
pPrint (NoDownload tver@(GHCTargetVersion mtarget vv) tool mpfreq)
|
pPrint (NoDownload tver@(GHCTargetVersion mtarget vv) tool mpfreq) =
|
||||||
| (Just target) <- mtarget
|
let helperMsg
|
||||||
, target `elem` (T.pack . prettyShow <$> enumFromTo (minBound :: Tool) (maxBound :: Tool))
|
| (Just target) <- mtarget
|
||||||
= text $ "Unable to find a download for "
|
, target `elem` (T.pack . prettyShow <$> enumFromTo (minBound :: Tool) (maxBound :: Tool)) =
|
||||||
|
"\nPerhaps you meant: 'ghcup <command> "
|
||||||
|
<> T.unpack target
|
||||||
|
<> " "
|
||||||
|
<> T.unpack (prettyVer vv)
|
||||||
|
<> "'"
|
||||||
|
| otherwise = ""
|
||||||
|
in text $ "Unable to find a download for "
|
||||||
<> show tool
|
<> show tool
|
||||||
<> " version '"
|
<> " version "
|
||||||
<> T.unpack (tVerToText tver)
|
<> "'" <> T.unpack (tVerToText tver) <> "'"
|
||||||
<> maybe "'\n" (\pfreq -> "' on detected platform " <> pfReqToString pfreq <> "\n") mpfreq
|
<> maybe "" (\pfreq -> " on detected platform " <> pfReqToString pfreq) mpfreq
|
||||||
<> "Perhaps you meant: 'ghcup <command> "
|
<> helperMsg
|
||||||
<> T.unpack target
|
|
||||||
<> " "
|
|
||||||
<> T.unpack (prettyVer vv)
|
|
||||||
<> "'"
|
|
||||||
| otherwise = text $ "Unable to find a download for " <> T.unpack (tVerToText tver)
|
|
||||||
|
|
||||||
instance HFErrorProject NoDownload where
|
instance HFErrorProject NoDownload where
|
||||||
eBase _ = 10
|
eBase _ = 10
|
||||||
@@ -387,7 +388,7 @@ data NotInstalled = NotInstalled Tool GHCTargetVersion
|
|||||||
|
|
||||||
instance Pretty NotInstalled where
|
instance Pretty NotInstalled where
|
||||||
pPrint (NotInstalled tool ver) =
|
pPrint (NotInstalled tool ver) =
|
||||||
text "The version" <+> pPrint ver <+> text "of the tool" <+> pPrint tool <+> text "is not installed."
|
text "The version" <+> (text "'" <> pPrint ver <> text "'") <+> text "of the tool" <+> pPrint tool <+> text "is not installed."
|
||||||
|
|
||||||
instance HFErrorProject NotInstalled where
|
instance HFErrorProject NotInstalled where
|
||||||
eBase _ = 130
|
eBase _ = 130
|
||||||
@@ -524,7 +525,7 @@ data HTTPNotModified = HTTPNotModified Text
|
|||||||
|
|
||||||
instance Pretty HTTPNotModified where
|
instance Pretty HTTPNotModified where
|
||||||
pPrint (HTTPNotModified etag) =
|
pPrint (HTTPNotModified etag) =
|
||||||
text "Remote resource not modifed, etag was:" <+> pPrint etag
|
text "Remote resource not modified, etag was:" <+> pPrint etag
|
||||||
|
|
||||||
instance HFErrorProject HTTPNotModified where
|
instance HFErrorProject HTTPNotModified where
|
||||||
eBase _ = 240
|
eBase _ = 240
|
||||||
@@ -819,7 +820,7 @@ instance Exception ParseError
|
|||||||
|
|
||||||
instance HFErrorProject ParseError where
|
instance HFErrorProject ParseError where
|
||||||
eBase _ = 500
|
eBase _ = 500
|
||||||
eDesc _ = "A parse error occured."
|
eDesc _ = "A parse error occurred."
|
||||||
|
|
||||||
|
|
||||||
data UnexpectedListLength = UnexpectedListLength String
|
data UnexpectedListLength = UnexpectedListLength String
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ import GHCup.Prelude.String.QQ
|
|||||||
import GHCup.Prelude.Version.QQ
|
import GHCup.Prelude.Version.QQ
|
||||||
import GHCup.Prelude.MegaParsec
|
import GHCup.Prelude.MegaParsec
|
||||||
|
|
||||||
import Codec.Archive ( ArchiveResult )
|
|
||||||
import Control.Applicative
|
import Control.Applicative
|
||||||
import Control.Concurrent ( threadDelay )
|
import Control.Concurrent ( threadDelay )
|
||||||
import Control.Exception.Safe
|
import Control.Exception.Safe
|
||||||
@@ -449,13 +448,30 @@ installUnpackedGHC path inst tver forceInstall addConfArgs
|
|||||||
= []
|
= []
|
||||||
|
|
||||||
lift $ logInfo "Installing GHC (this may take a while)"
|
lift $ logInfo "Installing GHC (this may take a while)"
|
||||||
|
env <- case _rPlatform of
|
||||||
|
-- https://github.com/haskell/ghcup-hs/issues/967
|
||||||
|
Linux Alpine
|
||||||
|
-- lets not touch LD for cross targets
|
||||||
|
| Nothing <- _tvTarget tver -> do
|
||||||
|
cEnv <- liftIO getEnvironment
|
||||||
|
spaths <- liftIO getSearchPath
|
||||||
|
has_ld_bfd <- isJust <$> liftIO (searchPath spaths "ld.bfd")
|
||||||
|
let ldSet = isJust $ lookup "LD" cEnv
|
||||||
|
-- only set LD if ld.bfd exists in PATH and LD is not set
|
||||||
|
-- already
|
||||||
|
if has_ld_bfd && not ldSet
|
||||||
|
then do
|
||||||
|
lift $ logInfo "Detected alpine linux... setting LD=ld.bfd"
|
||||||
|
pure $ Just (("LD", "ld.bfd") : cEnv)
|
||||||
|
else pure Nothing
|
||||||
|
_ -> pure Nothing
|
||||||
lEM $ execLogged "sh"
|
lEM $ execLogged "sh"
|
||||||
("./configure" : ("--prefix=" <> fromInstallDir inst)
|
("./configure" : ("--prefix=" <> fromInstallDir inst)
|
||||||
: (maybe mempty (\x -> ["--target=" <> T.unpack x]) (_tvTarget tver) <> ldOverride <> (T.unpack <$> addConfArgs))
|
: (maybe mempty (\x -> ["--target=" <> T.unpack x]) (_tvTarget tver) <> ldOverride <> (T.unpack <$> addConfArgs))
|
||||||
)
|
)
|
||||||
(Just $ fromGHCupPath path)
|
(Just $ fromGHCupPath path)
|
||||||
"ghc-configure"
|
"ghc-configure"
|
||||||
Nothing
|
env
|
||||||
tmpInstallDest <- lift withGHCupTmpDir
|
tmpInstallDest <- lift withGHCupTmpDir
|
||||||
lEM $ make ["DESTDIR=" <> fromGHCupPath tmpInstallDest, "install"] (Just $ fromGHCupPath path)
|
lEM $ make ["DESTDIR=" <> fromGHCupPath tmpInstallDest, "install"] (Just $ fromGHCupPath path)
|
||||||
liftE $ catchWarn $ lEM @_ @'[ProcessError] $ darwinNotarization _rPlatform (fromGHCupPath tmpInstallDest)
|
liftE $ catchWarn $ lEM @_ @'[ProcessError] $ darwinNotarization _rPlatform (fromGHCupPath tmpInstallDest)
|
||||||
@@ -1102,8 +1118,8 @@ compileGHC targetGhc crossTarget ov bstrap jobs mbuildConfig patches aargs build
|
|||||||
let possible_files = if isWindows
|
let possible_files = if isWindows
|
||||||
then ((workdir </> "hadrian") </>) <$> ["build.bat"]
|
then ((workdir </> "hadrian") </>) <$> ["build.bat"]
|
||||||
else ((workdir </> "hadrian") </>) <$> ["build", "build.sh"]
|
else ((workdir </> "hadrian") </>) <$> ["build", "build.sh"]
|
||||||
exsists <- forM possible_files (\f -> liftIO (doesFileExist f) <&> (,f))
|
exists <- forM possible_files (\f -> liftIO (doesFileExist f) <&> (,f))
|
||||||
case filter fst exsists of
|
case filter fst exists of
|
||||||
[] -> throwE HadrianNotFound
|
[] -> throwE HadrianNotFound
|
||||||
((_, x):_) -> pure x
|
((_, x):_) -> pure x
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ import GHCup.Prelude.Logger
|
|||||||
import GHCup.Prelude.Process
|
import GHCup.Prelude.Process
|
||||||
import GHCup.Prelude.String.QQ
|
import GHCup.Prelude.String.QQ
|
||||||
|
|
||||||
import Codec.Archive ( ArchiveResult )
|
|
||||||
import Control.Applicative
|
import Control.Applicative
|
||||||
import Control.Exception.Safe
|
import Control.Exception.Safe
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
|
|
||||||
{-|
|
{-|
|
||||||
Module : GHCup.Plaform
|
Module : GHCup.Platform
|
||||||
Description : Retrieving platform information
|
Description : Retrieving platform information
|
||||||
Copyright : (c) Julian Ospald, 2020
|
Copyright : (c) Julian Ospald, 2020
|
||||||
License : LGPL-3.0
|
License : LGPL-3.0
|
||||||
|
|||||||
@@ -240,7 +240,7 @@ recreateSymlink symsource newsym fail' = do
|
|||||||
createSymbolicLink sympoint newsym
|
createSymbolicLink sympoint newsym
|
||||||
|
|
||||||
|
|
||||||
-- copys files, recreates symlinks, fails on all other types
|
-- copies files, recreates symlinks, fails on all other types
|
||||||
install :: FilePath -> FilePath -> Bool -> IO ()
|
install :: FilePath -> FilePath -> Bool -> IO ()
|
||||||
install from to fail' = do
|
install from to fail' = do
|
||||||
fs <- PF.getSymbolicLinkStatus from
|
fs <- PF.getSymbolicLinkStatus from
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ execLogged exe args chdir lfile env = do
|
|||||||
void $ SPIB.fdWrite fileFd (bs' <> "\n")
|
void $ SPIB.fdWrite fileFd (bs' <> "\n")
|
||||||
void $ SPIB.fdWrite stdOutput (bs' <> "\n")
|
void $ SPIB.fdWrite stdOutput (bs' <> "\n")
|
||||||
|
|
||||||
-- Reads fdIn and logs the output in a continous scrolling area
|
-- Reads fdIn and logs the output in a continuous scrolling area
|
||||||
-- of 'size' terminal lines. Also writes to a log file.
|
-- of 'size' terminal lines. Also writes to a log file.
|
||||||
printToRegion :: Fd -> Fd -> Int -> MVar Bool -> Bool -> IO ()
|
printToRegion :: Fd -> Fd -> Int -> MVar Bool -> Bool -> IO ()
|
||||||
printToRegion fileFd fdIn size pState no_color = do
|
printToRegion fileFd fdIn size pState no_color = do
|
||||||
|
|||||||
@@ -263,12 +263,9 @@ createProcessWithMingwPath :: MonadIO m
|
|||||||
=> CreateProcess
|
=> CreateProcess
|
||||||
-> m CreateProcess
|
-> m CreateProcess
|
||||||
createProcessWithMingwPath cp = do
|
createProcessWithMingwPath cp = do
|
||||||
msys2Dir <- liftIO ghcupMsys2Dir
|
|
||||||
cEnv <- Map.fromList <$> maybe (liftIO getEnvironment) pure (env cp)
|
cEnv <- Map.fromList <$> maybe (liftIO getEnvironment) pure (env cp)
|
||||||
let mingWPaths = [msys2Dir </> "mingw64" </> "bin"
|
mingWPaths <- liftIO ghcupMsys2BinDirs'
|
||||||
,msys2Dir </> "usr" </> "bin"
|
let paths = ["PATH", "Path"]
|
||||||
]
|
|
||||||
paths = ["PATH", "Path"]
|
|
||||||
curPaths = (\x -> maybe [] splitSearchPath (Map.lookup x cEnv)) =<< paths
|
curPaths = (\x -> maybe [] splitSearchPath (Map.lookup x cEnv)) =<< paths
|
||||||
newPath = intercalate [searchPathSeparator] (mingWPaths ++ curPaths)
|
newPath = intercalate [searchPathSeparator] (mingWPaths ++ curPaths)
|
||||||
envWithoutPath = foldr (\x y -> Map.delete x y) cEnv paths
|
envWithoutPath = foldr (\x y -> Map.delete x y) cEnv paths
|
||||||
@@ -276,11 +273,4 @@ createProcessWithMingwPath cp = do
|
|||||||
liftIO $ setEnv "Path" newPath
|
liftIO $ setEnv "Path" newPath
|
||||||
pure $ cp { env = Just $ Map.toList envWithNewPath }
|
pure $ cp { env = Just $ Map.toList envWithNewPath }
|
||||||
|
|
||||||
ghcupMsys2Dir :: IO FilePath
|
|
||||||
ghcupMsys2Dir =
|
|
||||||
lookupEnv "GHCUP_MSYS2" >>= \case
|
|
||||||
Just fp -> pure fp
|
|
||||||
Nothing -> do
|
|
||||||
baseDir <- liftIO ghcupBaseDir
|
|
||||||
pure (fromGHCupPath baseDir </> "msys64")
|
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,6 @@ import GHCup.Prelude
|
|||||||
import GHCup.Prelude.File
|
import GHCup.Prelude.File
|
||||||
import GHCup.Prelude.Logger
|
import GHCup.Prelude.Logger
|
||||||
|
|
||||||
import Codec.Archive ( ArchiveResult )
|
|
||||||
import Control.Applicative
|
import Control.Applicative
|
||||||
import Control.Exception.Safe
|
import Control.Exception.Safe
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
|
|||||||
@@ -24,10 +24,12 @@ module GHCup.Types
|
|||||||
, Key(..)
|
, Key(..)
|
||||||
, Modifier(..)
|
, Modifier(..)
|
||||||
#endif
|
#endif
|
||||||
|
, ArchiveResult(..)
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
import GHCup.Types.Stack ( SetupInfo )
|
import GHCup.Types.Stack ( SetupInfo )
|
||||||
|
import GHCup.Utils.Tar.Types ( ArchiveResult(..) )
|
||||||
import {-# SOURCE #-} GHCup.Utils.Dirs ( fromGHCupPath, GHCupPath )
|
import {-# SOURCE #-} GHCup.Utils.Dirs ( fromGHCupPath, GHCupPath )
|
||||||
|
|
||||||
import Control.DeepSeq ( NFData, rnf )
|
import Control.DeepSeq ( NFData, rnf )
|
||||||
@@ -542,11 +544,23 @@ data Dirs = Dirs
|
|||||||
, dbDir :: GHCupPath
|
, dbDir :: GHCupPath
|
||||||
, recycleDir :: GHCupPath -- mainly used on windows
|
, recycleDir :: GHCupPath -- mainly used on windows
|
||||||
, tmpDir :: GHCupPath
|
, tmpDir :: GHCupPath
|
||||||
|
, msys2Dir :: FilePath
|
||||||
}
|
}
|
||||||
deriving (Show, GHC.Generic)
|
deriving (Show, GHC.Generic)
|
||||||
|
|
||||||
instance NFData Dirs
|
instance NFData Dirs
|
||||||
|
|
||||||
|
data MSYS2Env = MSYS
|
||||||
|
| UCRT64
|
||||||
|
| CLANG64
|
||||||
|
| CLANGARM64
|
||||||
|
| CLANG32
|
||||||
|
| MINGW64
|
||||||
|
| MINGW32
|
||||||
|
deriving (Eq, Show, Ord, GHC.Generic, Read)
|
||||||
|
|
||||||
|
instance NFData MSYS2Env
|
||||||
|
|
||||||
data KeepDirs = Always
|
data KeepDirs = Always
|
||||||
| Errors
|
| Errors
|
||||||
| Never
|
| Never
|
||||||
@@ -775,4 +789,3 @@ instance Pretty ToolVersion where
|
|||||||
data BuildSystem = Hadrian
|
data BuildSystem = Hadrian
|
||||||
| Make
|
| Make
|
||||||
deriving (Show, Eq)
|
deriving (Show, Eq)
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import GHCup.Types.Stack (SetupInfo)
|
|||||||
import GHCup.Types.JSON.Utils
|
import GHCup.Types.JSON.Utils
|
||||||
import GHCup.Types.JSON.Versions ()
|
import GHCup.Types.JSON.Versions ()
|
||||||
import GHCup.Prelude.MegaParsec
|
import GHCup.Prelude.MegaParsec
|
||||||
|
import GHCup.Utils.URI
|
||||||
|
|
||||||
import Control.Applicative ( (<|>) )
|
import Control.Applicative ( (<|>) )
|
||||||
import Data.Aeson hiding (Key)
|
import Data.Aeson hiding (Key)
|
||||||
@@ -38,7 +39,7 @@ import Data.Text.Encoding as E
|
|||||||
import Data.Foldable
|
import Data.Foldable
|
||||||
import Data.Versions
|
import Data.Versions
|
||||||
import Data.Void
|
import Data.Void
|
||||||
import URI.ByteString
|
import URI.ByteString hiding (parseURI)
|
||||||
import Text.Casing
|
import Text.Casing
|
||||||
|
|
||||||
import qualified Data.List.NonEmpty as NE
|
import qualified Data.List.NonEmpty as NE
|
||||||
@@ -95,7 +96,7 @@ instance ToJSON URI where
|
|||||||
|
|
||||||
instance FromJSON URI where
|
instance FromJSON URI where
|
||||||
parseJSON = withText "URL" $ \t ->
|
parseJSON = withText "URL" $ \t ->
|
||||||
case parseURI strictURIParserOptions (encodeUtf8 t) of
|
case parseURI (encodeUtf8 t) of
|
||||||
Right x -> pure x
|
Right x -> pure x
|
||||||
Left e -> fail . show $ e
|
Left e -> fail . show $ e
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,9 @@ installation and introspection of files/versions etc.
|
|||||||
-}
|
-}
|
||||||
module GHCup.Utils
|
module GHCup.Utils
|
||||||
( module GHCup.Utils.Dirs
|
( module GHCup.Utils.Dirs
|
||||||
|
, module GHCup.Utils.Tar
|
||||||
, module GHCup.Utils
|
, module GHCup.Utils
|
||||||
|
, module GHCup.Utils.URI
|
||||||
#if defined(IS_WINDOWS)
|
#if defined(IS_WINDOWS)
|
||||||
, module GHCup.Prelude.Windows
|
, module GHCup.Prelude.Windows
|
||||||
#else
|
#else
|
||||||
@@ -42,6 +44,8 @@ import GHCup.Types
|
|||||||
import GHCup.Types.Optics
|
import GHCup.Types.Optics
|
||||||
import GHCup.Types.JSON ( )
|
import GHCup.Types.JSON ( )
|
||||||
import GHCup.Utils.Dirs
|
import GHCup.Utils.Dirs
|
||||||
|
import GHCup.Utils.Tar
|
||||||
|
import GHCup.Utils.URI
|
||||||
import GHCup.Version
|
import GHCup.Version
|
||||||
import GHCup.Prelude
|
import GHCup.Prelude
|
||||||
import GHCup.Prelude.File
|
import GHCup.Prelude.File
|
||||||
@@ -49,7 +53,6 @@ import GHCup.Prelude.Logger.Internal
|
|||||||
import GHCup.Prelude.MegaParsec
|
import GHCup.Prelude.MegaParsec
|
||||||
import GHCup.Prelude.Process
|
import GHCup.Prelude.Process
|
||||||
import GHCup.Prelude.String.QQ
|
import GHCup.Prelude.String.QQ
|
||||||
import Codec.Archive hiding ( Directory )
|
|
||||||
import Control.Applicative
|
import Control.Applicative
|
||||||
import Control.Exception.Safe
|
import Control.Exception.Safe
|
||||||
import Control.Monad
|
import Control.Monad
|
||||||
@@ -77,12 +80,8 @@ import System.FilePath
|
|||||||
import System.IO.Error
|
import System.IO.Error
|
||||||
import Text.Regex.Posix
|
import Text.Regex.Posix
|
||||||
import Text.PrettyPrint.HughesPJClass (prettyShow)
|
import Text.PrettyPrint.HughesPJClass (prettyShow)
|
||||||
import URI.ByteString
|
import URI.ByteString hiding (parseURI)
|
||||||
|
|
||||||
import qualified Codec.Compression.BZip as BZip
|
|
||||||
import qualified Codec.Compression.GZip as GZip
|
|
||||||
import qualified Codec.Compression.Lzma as Lzma
|
|
||||||
import qualified Data.ByteString.Lazy as BL
|
|
||||||
import qualified Data.Map.Strict as Map
|
import qualified Data.Map.Strict as Map
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import qualified Data.Text.Encoding as E
|
import qualified Data.Text.Encoding as E
|
||||||
@@ -280,7 +279,7 @@ rmPlainHLS = do
|
|||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
|
|
||||||
-- | Whether the given GHC versin is installed.
|
-- | Whether the given GHC version is installed.
|
||||||
ghcInstalled :: (MonadIO m, MonadReader env m, HasDirs env, MonadThrow m) => GHCTargetVersion -> m Bool
|
ghcInstalled :: (MonadIO m, MonadReader env m, HasDirs env, MonadThrow m) => GHCTargetVersion -> m Bool
|
||||||
ghcInstalled ver = do
|
ghcInstalled ver = do
|
||||||
ghcdir <- ghcupGHCDir ver
|
ghcdir <- ghcupGHCDir ver
|
||||||
@@ -783,99 +782,6 @@ getLatestToolFor tool target pvpIn dls = do
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-----------------
|
|
||||||
--[ Unpacking ]--
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- | Unpack an archive to a temporary directory and return that path.
|
|
||||||
unpackToDir :: (MonadReader env m, HasLog env, MonadIO m, MonadThrow m)
|
|
||||||
=> FilePath -- ^ destination dir
|
|
||||||
-> FilePath -- ^ archive path
|
|
||||||
-> Excepts '[UnknownArchive
|
|
||||||
, ArchiveResult
|
|
||||||
] m ()
|
|
||||||
unpackToDir dfp av = do
|
|
||||||
let fn = takeFileName av
|
|
||||||
lift $ logInfo $ "Unpacking: " <> T.pack fn <> " to " <> T.pack dfp
|
|
||||||
|
|
||||||
let untar :: MonadIO m => BL.ByteString -> Excepts '[ArchiveResult] m ()
|
|
||||||
untar = lEM . liftIO . runArchiveM . unpackToDirLazy dfp
|
|
||||||
|
|
||||||
rf :: MonadIO m => FilePath -> Excepts '[ArchiveResult] m BL.ByteString
|
|
||||||
rf = liftIO . BL.readFile
|
|
||||||
|
|
||||||
-- extract, depending on file extension
|
|
||||||
if
|
|
||||||
| ".tar.gz" `isSuffixOf` fn -> liftE
|
|
||||||
(untar . GZip.decompress =<< rf av)
|
|
||||||
| ".tar.xz" `isSuffixOf` fn -> do
|
|
||||||
filecontents <- liftE $ rf av
|
|
||||||
let decompressed = Lzma.decompressWith (Lzma.defaultDecompressParams { Lzma.decompressAutoDecoder= True }) filecontents
|
|
||||||
liftE $ untar decompressed
|
|
||||||
| ".tar.bz2" `isSuffixOf` fn ->
|
|
||||||
liftE (untar . BZip.decompress =<< rf av)
|
|
||||||
| ".tar" `isSuffixOf` fn -> liftE (untar =<< rf av)
|
|
||||||
| ".zip" `isSuffixOf` fn -> liftE (untar =<< rf av)
|
|
||||||
| otherwise -> throwE $ UnknownArchive fn
|
|
||||||
|
|
||||||
|
|
||||||
getArchiveFiles :: (MonadReader env m, HasLog env, MonadIO m, MonadThrow m)
|
|
||||||
=> FilePath -- ^ archive path
|
|
||||||
-> Excepts '[UnknownArchive
|
|
||||||
, ArchiveResult
|
|
||||||
] m [FilePath]
|
|
||||||
getArchiveFiles av = do
|
|
||||||
let fn = takeFileName av
|
|
||||||
|
|
||||||
let entries :: Monad m => BL.ByteString -> Excepts '[ArchiveResult] m [FilePath]
|
|
||||||
entries = (fmap . fmap) filepath . lE . readArchiveBSL
|
|
||||||
|
|
||||||
rf :: MonadIO m => FilePath -> Excepts '[ArchiveResult] m BL.ByteString
|
|
||||||
rf = liftIO . BL.readFile
|
|
||||||
|
|
||||||
-- extract, depending on file extension
|
|
||||||
if
|
|
||||||
| ".tar.gz" `isSuffixOf` fn -> liftE
|
|
||||||
(entries . GZip.decompress =<< rf av)
|
|
||||||
| ".tar.xz" `isSuffixOf` fn -> do
|
|
||||||
filecontents <- liftE $ rf av
|
|
||||||
let decompressed = Lzma.decompressWith (Lzma.defaultDecompressParams { Lzma.decompressAutoDecoder= True }) filecontents
|
|
||||||
liftE $ entries decompressed
|
|
||||||
| ".tar.bz2" `isSuffixOf` fn ->
|
|
||||||
liftE (entries . BZip.decompress =<< rf av)
|
|
||||||
| ".tar" `isSuffixOf` fn -> liftE (entries =<< rf av)
|
|
||||||
| ".zip" `isSuffixOf` fn -> liftE (entries =<< rf av)
|
|
||||||
| otherwise -> throwE $ UnknownArchive fn
|
|
||||||
|
|
||||||
|
|
||||||
intoSubdir :: (MonadReader env m, HasLog env, MonadIO m, MonadThrow m, MonadCatch m)
|
|
||||||
=> GHCupPath -- ^ unpacked tar dir
|
|
||||||
-> TarDir -- ^ how to descend
|
|
||||||
-> Excepts '[TarDirDoesNotExist] m GHCupPath
|
|
||||||
intoSubdir bdir tardir = case tardir of
|
|
||||||
RealDir pr -> do
|
|
||||||
whenM (fmap not . liftIO . doesDirectoryExist $ fromGHCupPath (bdir `appendGHCupPath` pr))
|
|
||||||
(throwE $ TarDirDoesNotExist tardir)
|
|
||||||
pure (bdir `appendGHCupPath` pr)
|
|
||||||
RegexDir r -> do
|
|
||||||
let rs = split (`elem` pathSeparators) r
|
|
||||||
foldlM
|
|
||||||
(\y x ->
|
|
||||||
(handleIO (\_ -> pure []) . liftIO . findFiles (fromGHCupPath y) . regex $ x) >>= (\case
|
|
||||||
[] -> throwE $ TarDirDoesNotExist tardir
|
|
||||||
(p : _) -> pure (y `appendGHCupPath` p)) . sort
|
|
||||||
)
|
|
||||||
bdir
|
|
||||||
rs
|
|
||||||
where regex = makeRegexOpts compIgnoreCase execBlank
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
------------
|
------------
|
||||||
--[ Tags ]--
|
--[ Tags ]--
|
||||||
------------
|
------------
|
||||||
@@ -929,6 +835,28 @@ getLatestBaseVersion av pvpVer =
|
|||||||
--[ Other ]--
|
--[ Other ]--
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
|
||||||
|
intoSubdir :: (MonadReader env m, HasLog env, MonadIO m, MonadThrow m, MonadCatch m)
|
||||||
|
=> GHCupPath -- ^ unpacked tar dir
|
||||||
|
-> TarDir -- ^ how to descend
|
||||||
|
-> Excepts '[TarDirDoesNotExist] m GHCupPath
|
||||||
|
intoSubdir bdir tardir = case tardir of
|
||||||
|
RealDir pr -> do
|
||||||
|
whenM (fmap not . liftIO . doesDirectoryExist $ fromGHCupPath (bdir `appendGHCupPath` pr))
|
||||||
|
(throwE $ TarDirDoesNotExist tardir)
|
||||||
|
pure (bdir `appendGHCupPath` pr)
|
||||||
|
RegexDir r -> do
|
||||||
|
let rs = split (`elem` pathSeparators) r
|
||||||
|
foldlM
|
||||||
|
(\y x ->
|
||||||
|
(handleIO (\_ -> pure []) . liftIO . findFiles (fromGHCupPath y) . regex $ x) >>= (\case
|
||||||
|
[] -> throwE $ TarDirDoesNotExist tardir
|
||||||
|
(p : _) -> pure (y `appendGHCupPath` p)) . sort
|
||||||
|
)
|
||||||
|
bdir
|
||||||
|
rs
|
||||||
|
where regex = makeRegexOpts compIgnoreCase execBlank
|
||||||
|
|
||||||
-- | Usually @~\/.ghcup\/ghc\/\<ver\>\/bin\/@
|
-- | Usually @~\/.ghcup\/ghc\/\<ver\>\/bin\/@
|
||||||
ghcInternalBinDir :: (MonadReader env m, HasDirs env, MonadThrow m, MonadFail m, MonadIO m)
|
ghcInternalBinDir :: (MonadReader env m, HasDirs env, MonadThrow m, MonadFail m, MonadIO m)
|
||||||
=> GHCTargetVersion
|
=> GHCTargetVersion
|
||||||
@@ -963,7 +891,7 @@ ghcToolFiles ver = do
|
|||||||
groupToolFiles = groupBy (\(a, _) (b, _) -> a == b) . fmap (splitOnPVP "-")
|
groupToolFiles = groupBy (\(a, _) (b, _) -> a == b) . fmap (splitOnPVP "-")
|
||||||
|
|
||||||
getUniqueTools :: [[(FilePath, String)]] -> [String]
|
getUniqueTools :: [[(FilePath, String)]] -> [String]
|
||||||
getUniqueTools = filter (isNotAnyInfix blackListedTools) . nub . fmap fst . filter ((== "") . snd) . concat
|
getUniqueTools = filter (isNotAnyInfix blackListedTools) . nub . fmap fst . concatMap (filter ((== "") . snd))
|
||||||
|
|
||||||
blackListedTools :: [String]
|
blackListedTools :: [String]
|
||||||
blackListedTools = ["haddock-ghc"]
|
blackListedTools = ["haddock-ghc"]
|
||||||
@@ -1227,7 +1155,7 @@ ensureShimGen
|
|||||||
|
|
||||||
-- | Ensure ghcup directory structure exists.
|
-- | Ensure ghcup directory structure exists.
|
||||||
ensureDirectories :: Dirs -> IO ()
|
ensureDirectories :: Dirs -> IO ()
|
||||||
ensureDirectories (Dirs baseDir binDir cacheDir logsDir confDir trashDir dbDir tmpDir) = do
|
ensureDirectories (Dirs baseDir binDir cacheDir logsDir confDir trashDir dbDir tmpDir _) = do
|
||||||
createDirRecursive' (fromGHCupPath baseDir)
|
createDirRecursive' (fromGHCupPath baseDir)
|
||||||
createDirRecursive' (fromGHCupPath baseDir </> "ghc")
|
createDirRecursive' (fromGHCupPath baseDir </> "ghc")
|
||||||
createDirRecursive' (fromGHCupPath baseDir </> "hls")
|
createDirRecursive' (fromGHCupPath baseDir </> "hls")
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ module GHCup.Utils.Dirs
|
|||||||
, getConfigFilePath'
|
, getConfigFilePath'
|
||||||
, useXDG
|
, useXDG
|
||||||
, cleanupTrash
|
, cleanupTrash
|
||||||
|
, ghcupMsys2BinDirs
|
||||||
|
, ghcupMsys2BinDirs'
|
||||||
|
|
||||||
, GHCupPath
|
, GHCupPath
|
||||||
, appendGHCupPath
|
, appendGHCupPath
|
||||||
@@ -136,6 +138,7 @@ import GHC.IO.Exception ( IOErrorType(NoSuchThing) )
|
|||||||
import Haskus.Utils.Variant.Excepts
|
import Haskus.Utils.Variant.Excepts
|
||||||
import Optics hiding ( uncons )
|
import Optics hiding ( uncons )
|
||||||
import Safe
|
import Safe
|
||||||
|
import System.Info
|
||||||
import System.Directory hiding ( removeDirectory
|
import System.Directory hiding ( removeDirectory
|
||||||
, removeDirectoryRecursive
|
, removeDirectoryRecursive
|
||||||
, removePathForcibly
|
, removePathForcibly
|
||||||
@@ -338,6 +341,48 @@ ghcupTMPDir
|
|||||||
else ghcupBaseDir <&> (\(GHCupPath gp) -> GHCupPath (gp </> "tmp"))
|
else ghcupBaseDir <&> (\(GHCupPath gp) -> GHCupPath (gp </> "tmp"))
|
||||||
|
|
||||||
|
|
||||||
|
ghcupMsys2Dir :: IO FilePath
|
||||||
|
ghcupMsys2Dir =
|
||||||
|
lookupEnv "GHCUP_MSYS2" >>= \case
|
||||||
|
Just fp -> pure fp
|
||||||
|
Nothing -> do
|
||||||
|
baseDir <- liftIO ghcupBaseDir
|
||||||
|
pure (fromGHCupPath baseDir </> "msys64")
|
||||||
|
|
||||||
|
ghcupMsys2BinDirs :: (MonadFail m, MonadIO m, MonadReader env m, HasDirs env) => m [FilePath]
|
||||||
|
ghcupMsys2BinDirs = do
|
||||||
|
Dirs{..} <- getDirs
|
||||||
|
liftIO $ ghcupMsys2BinDirs_ msys2Dir
|
||||||
|
|
||||||
|
ghcupMsys2BinDirs' :: IO [FilePath]
|
||||||
|
ghcupMsys2BinDirs' = do
|
||||||
|
msys2Dir <- ghcupMsys2Dir
|
||||||
|
ghcupMsys2BinDirs_ msys2Dir
|
||||||
|
|
||||||
|
ghcupMsys2BinDirs_ :: FilePath -> IO [FilePath]
|
||||||
|
ghcupMsys2BinDirs_ msys2Dir' = do
|
||||||
|
env <- liftIO (lookupEnv "GHCUP_MSYS2_ENV") >>= \case
|
||||||
|
Just env -> maybe (fail parseFailMsg) pure $ readMay @MSYS2Env env
|
||||||
|
Nothing
|
||||||
|
| "x86_64" <- arch -> pure MINGW64
|
||||||
|
| "i386" <- arch -> pure MINGW32
|
||||||
|
| "aarch64" <- arch -> pure CLANGARM64
|
||||||
|
| otherwise -> fail "No compatible architecture for msys2"
|
||||||
|
pure [msys2Dir' </> toEnvDir env </> "bin", msys2Dir' </> toEnvDir MSYS </> "bin"]
|
||||||
|
where
|
||||||
|
-- https://www.msys2.org/docs/environments/
|
||||||
|
toEnvDir :: MSYS2Env -> FilePath
|
||||||
|
toEnvDir MSYS = "usr"
|
||||||
|
toEnvDir UCRT64 = "ucrt64"
|
||||||
|
toEnvDir CLANG64 = "clang64"
|
||||||
|
toEnvDir CLANGARM64 = "clangarm64"
|
||||||
|
toEnvDir CLANG32 = "clang32"
|
||||||
|
toEnvDir MINGW64 = "mingw64"
|
||||||
|
toEnvDir MINGW32 = "mingw32"
|
||||||
|
|
||||||
|
parseFailMsg = "Invalid value for GHCUP_MSYS2_ENV. Valid values are: MSYS, UCRT64, CLANG64, CLANGARM64, CLANG32, MINGW64, MINGW32"
|
||||||
|
|
||||||
|
|
||||||
getAllDirs :: IO Dirs
|
getAllDirs :: IO Dirs
|
||||||
getAllDirs = do
|
getAllDirs = do
|
||||||
baseDir <- ghcupBaseDir
|
baseDir <- ghcupBaseDir
|
||||||
@@ -348,6 +393,7 @@ getAllDirs = do
|
|||||||
recycleDir <- ghcupRecycleDir
|
recycleDir <- ghcupRecycleDir
|
||||||
tmpDir <- ghcupTMPDir
|
tmpDir <- ghcupTMPDir
|
||||||
dbDir <- ghcupDbDir
|
dbDir <- ghcupDbDir
|
||||||
|
msys2Dir <- ghcupMsys2Dir
|
||||||
pure Dirs { .. }
|
pure Dirs { .. }
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
141
lib/GHCup/Utils/Tar.hs
Normal file
141
lib/GHCup/Utils/Tar.hs
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
{-# LANGUAGE CPP #-}
|
||||||
|
{-# LANGUAGE DataKinds #-}
|
||||||
|
{-# LANGUAGE FlexibleContexts #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
{-|
|
||||||
|
Module : GHCup.Utils.Tar
|
||||||
|
Description : GHCup tar abstractions
|
||||||
|
Copyright : (c) Julian Ospald, 2024
|
||||||
|
License : LGPL-3.0
|
||||||
|
Maintainer : hasufell@hasufell.de
|
||||||
|
Stability : experimental
|
||||||
|
Portability : portable
|
||||||
|
-}
|
||||||
|
module GHCup.Utils.Tar where
|
||||||
|
|
||||||
|
import GHCup.Utils.Tar.Types ( ArchiveResult(..) )
|
||||||
|
import GHCup.Errors
|
||||||
|
import GHCup.Prelude
|
||||||
|
import GHCup.Prelude.Logger.Internal
|
||||||
|
import GHCup.Types.Optics
|
||||||
|
|
||||||
|
import Control.Monad.Catch (MonadThrow)
|
||||||
|
import Control.Monad.Reader
|
||||||
|
import Data.List
|
||||||
|
import Haskus.Utils.Variant.Excepts
|
||||||
|
import System.FilePath
|
||||||
|
|
||||||
|
#if defined(TAR)
|
||||||
|
import Codec.Archive.Zip
|
||||||
|
import qualified Codec.Archive.Tar as Tar
|
||||||
|
import qualified Codec.Archive.Tar.Entry as Tar
|
||||||
|
import qualified Data.Map.Strict as Map
|
||||||
|
#else
|
||||||
|
import Codec.Archive hiding ( Directory
|
||||||
|
, ArchiveResult -- imported from "GHCup.Utils.Tar.Types"
|
||||||
|
)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
import qualified Codec.Compression.BZip as BZip
|
||||||
|
import qualified Codec.Compression.GZip as GZip
|
||||||
|
import qualified Codec.Compression.Lzma as Lzma
|
||||||
|
import qualified Data.ByteString.Lazy as BL
|
||||||
|
import qualified Data.Text as T
|
||||||
|
|
||||||
|
|
||||||
|
-- | Unpack an archive to a given directory.
|
||||||
|
unpackToDir :: (MonadReader env m, HasLog env, MonadIO m, MonadThrow m)
|
||||||
|
=> FilePath -- ^ destination dir
|
||||||
|
-> FilePath -- ^ archive path
|
||||||
|
-> Excepts '[UnknownArchive
|
||||||
|
, ArchiveResult
|
||||||
|
] m ()
|
||||||
|
unpackToDir dfp av = do
|
||||||
|
let fn = takeFileName av
|
||||||
|
lift $ logInfo $ "Unpacking: " <> T.pack fn <> " to " <> T.pack dfp
|
||||||
|
|
||||||
|
#if defined(TAR)
|
||||||
|
let untar :: MonadIO m => BL.ByteString -> Excepts '[ArchiveResult] m ()
|
||||||
|
untar = liftIO . Tar.unpack dfp . Tar.read
|
||||||
|
|
||||||
|
rf :: MonadIO m => FilePath -> Excepts '[ArchiveResult] m BL.ByteString
|
||||||
|
rf = liftIO . BL.readFile
|
||||||
|
#else
|
||||||
|
let untar :: MonadIO m => BL.ByteString -> Excepts '[ArchiveResult] m ()
|
||||||
|
untar = lEM . liftIO . runArchiveM . unpackToDirLazy dfp
|
||||||
|
|
||||||
|
rf :: MonadIO m => FilePath -> Excepts '[ArchiveResult] m BL.ByteString
|
||||||
|
rf = liftIO . BL.readFile
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-- extract, depending on file extension
|
||||||
|
if
|
||||||
|
| ".tar.gz" `isSuffixOf` fn -> liftE
|
||||||
|
(untar . GZip.decompress =<< rf av)
|
||||||
|
| ".tar.xz" `isSuffixOf` fn -> do
|
||||||
|
filecontents <- liftE $ rf av
|
||||||
|
let decompressed = Lzma.decompressWith (Lzma.defaultDecompressParams { Lzma.decompressAutoDecoder= True }) filecontents
|
||||||
|
liftE $ untar decompressed
|
||||||
|
| ".tar.bz2" `isSuffixOf` fn ->
|
||||||
|
liftE (untar . BZip.decompress =<< rf av)
|
||||||
|
| ".tar" `isSuffixOf` fn -> liftE (untar =<< rf av)
|
||||||
|
#if defined(TAR)
|
||||||
|
| ".zip" `isSuffixOf` fn -> withArchive av (unpackInto dfp)
|
||||||
|
#else
|
||||||
|
-- libarchive supports zip
|
||||||
|
| ".zip" `isSuffixOf` fn -> liftE (untar =<< rf av)
|
||||||
|
#endif
|
||||||
|
| otherwise -> throwE $ UnknownArchive fn
|
||||||
|
|
||||||
|
|
||||||
|
-- | Get all files from an archive.
|
||||||
|
getArchiveFiles :: (MonadReader env m, HasLog env, MonadIO m, MonadThrow m)
|
||||||
|
=> FilePath -- ^ archive path
|
||||||
|
-> Excepts '[ UnknownArchive
|
||||||
|
, ArchiveResult
|
||||||
|
] m [FilePath]
|
||||||
|
getArchiveFiles av = do
|
||||||
|
let fn = takeFileName av
|
||||||
|
#if defined(TAR)
|
||||||
|
let entries :: Monad m => BL.ByteString -> Excepts '[ArchiveResult] m [FilePath]
|
||||||
|
entries =
|
||||||
|
lE @ArchiveResult
|
||||||
|
. Tar.foldEntries
|
||||||
|
(\e x -> fmap (Tar.entryTarPath e :) x)
|
||||||
|
(Right [])
|
||||||
|
(\_ -> Left ArchiveFailed)
|
||||||
|
. Tar.decodeLongNames
|
||||||
|
. Tar.read
|
||||||
|
|
||||||
|
rf :: MonadIO m => FilePath -> Excepts '[ArchiveResult] m BL.ByteString
|
||||||
|
rf = liftIO . BL.readFile
|
||||||
|
#else
|
||||||
|
let entries :: Monad m => BL.ByteString -> Excepts '[ArchiveResult] m [FilePath]
|
||||||
|
entries = (fmap . fmap) filepath . lE . readArchiveBSL
|
||||||
|
|
||||||
|
rf :: MonadIO m => FilePath -> Excepts '[ArchiveResult] m BL.ByteString
|
||||||
|
rf = liftIO . BL.readFile
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-- extract, depending on file extension
|
||||||
|
if
|
||||||
|
| ".tar.gz" `isSuffixOf` fn -> liftE
|
||||||
|
(entries . GZip.decompress =<< rf av)
|
||||||
|
| ".tar.xz" `isSuffixOf` fn -> do
|
||||||
|
filecontents <- liftE $ rf av
|
||||||
|
let decompressed = Lzma.decompressWith (Lzma.defaultDecompressParams { Lzma.decompressAutoDecoder= True }) filecontents
|
||||||
|
liftE $ entries decompressed
|
||||||
|
| ".tar.bz2" `isSuffixOf` fn ->
|
||||||
|
liftE (entries . BZip.decompress =<< rf av)
|
||||||
|
| ".tar" `isSuffixOf` fn -> liftE (entries =<< rf av)
|
||||||
|
| ".zip" `isSuffixOf` fn ->
|
||||||
|
#if defined(TAR)
|
||||||
|
withArchive av $ do
|
||||||
|
entries' <- getEntries
|
||||||
|
pure $ fmap unEntrySelector $ Map.keys entries'
|
||||||
|
#else
|
||||||
|
liftE (entries =<< rf av)
|
||||||
|
#endif
|
||||||
|
| otherwise -> throwE $ UnknownArchive fn
|
||||||
|
|
||||||
33
lib/GHCup/Utils/Tar/Types.hs
Normal file
33
lib/GHCup/Utils/Tar/Types.hs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
{-# LANGUAGE CPP #-}
|
||||||
|
#if defined(TAR)
|
||||||
|
{-# LANGUAGE DeriveGeneric #-}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
module GHCup.Utils.Tar.Types
|
||||||
|
( ArchiveResult(..)
|
||||||
|
)
|
||||||
|
where
|
||||||
|
|
||||||
|
#if defined(TAR)
|
||||||
|
|
||||||
|
import Control.Exception ( Exception )
|
||||||
|
import Control.DeepSeq ( NFData )
|
||||||
|
import qualified GHC.Generics as GHC
|
||||||
|
|
||||||
|
data ArchiveResult = ArchiveFatal
|
||||||
|
| ArchiveFailed
|
||||||
|
| ArchiveWarn
|
||||||
|
| ArchiveRetry
|
||||||
|
| ArchiveOk
|
||||||
|
| ArchiveEOF
|
||||||
|
deriving (Eq, Show, GHC.Generic)
|
||||||
|
|
||||||
|
instance NFData ArchiveResult
|
||||||
|
|
||||||
|
instance Exception ArchiveResult
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
import Codec.Archive ( ArchiveResult(..) )
|
||||||
|
|
||||||
|
#endif
|
||||||
49
lib/GHCup/Utils/URI.hs
Normal file
49
lib/GHCup/Utils/URI.hs
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
{-# LANGUAGE CPP #-}
|
||||||
|
{-# LANGUAGE OverloadedStrings #-}
|
||||||
|
|
||||||
|
{-|
|
||||||
|
Module : GHCup.Utils.URI
|
||||||
|
Description : GHCup domain specific URI utilities
|
||||||
|
Copyright : (c) Julian Ospald, 2024
|
||||||
|
License : LGPL-3.0
|
||||||
|
Maintainer : hasufell@hasufell.de
|
||||||
|
Stability : experimental
|
||||||
|
Portability : portable
|
||||||
|
|
||||||
|
This module contains GHCup helpers specific to
|
||||||
|
URI handling.
|
||||||
|
-}
|
||||||
|
module GHCup.Utils.URI where
|
||||||
|
|
||||||
|
import Data.ByteString
|
||||||
|
import URI.ByteString hiding (parseURI)
|
||||||
|
import System.URI.File
|
||||||
|
|
||||||
|
import qualified URI.ByteString as URI
|
||||||
|
|
||||||
|
|
||||||
|
-----------
|
||||||
|
--[ URI ]--
|
||||||
|
-----------
|
||||||
|
|
||||||
|
|
||||||
|
parseURI :: ByteString -> Either URIParseError (URIRef Absolute)
|
||||||
|
parseURI bs = case parseFile bs of
|
||||||
|
Left _ -> case URI.parseURI strictURIParserOptions bs of
|
||||||
|
Right (URI { uriScheme = (Scheme "file") }) ->
|
||||||
|
#if defined(IS_WINDOWS)
|
||||||
|
Left (OtherError "Invalid file URI. File URIs must be absolute (start with a drive letter or UNC path) and not contain backslashes.")
|
||||||
|
#else
|
||||||
|
Left (OtherError "Invalid file URI. File URIs must be absolute.")
|
||||||
|
#endif
|
||||||
|
o -> o
|
||||||
|
Right (FileURI (Just _) _) -> Left $ OtherError "File URIs with auth part are not supported!"
|
||||||
|
Right (FileURI _ fp) -> Right $ URI (Scheme "file") Nothing fp (Query []) Nothing
|
||||||
|
where
|
||||||
|
parseFile
|
||||||
|
#if defined(IS_WINDOWS)
|
||||||
|
= parseFileURI ExtendedWindows
|
||||||
|
#else
|
||||||
|
= parseFileURI ExtendedPosix
|
||||||
|
#endif
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ import Data.Void (Void)
|
|||||||
|
|
||||||
-- | This reflects the API version of the YAML.
|
-- | This reflects the API version of the YAML.
|
||||||
--
|
--
|
||||||
-- Note that when updating this, CI requires that the file exsists AND the same file exists at
|
-- Note that when updating this, CI requires that the file exists AND the same file exists at
|
||||||
-- 'https://www.haskell.org/ghcup/exp/ghcup-<ver>.yaml' with some newlines added.
|
-- 'https://www.haskell.org/ghcup/exp/ghcup-<ver>.yaml' with some newlines added.
|
||||||
ghcupURL :: URI
|
ghcupURL :: URI
|
||||||
ghcupURL = [uri|https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-0.0.8.yaml|]
|
ghcupURL = [uri|https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-0.0.8.yaml|]
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ int main()
|
|||||||
// CreateProcess, and therefore we fallback to ShellExecuteEx,
|
// CreateProcess, and therefore we fallback to ShellExecuteEx,
|
||||||
// which CAN create elevated processes, at the cost of opening a new separate
|
// which CAN create elevated processes, at the cost of opening a new separate
|
||||||
// window.
|
// window.
|
||||||
// Theorically, this could be fixed (or rather, worked around) using pipes
|
// Theoretically, this could be fixed (or rather, worked around) using pipes
|
||||||
// and IPC, but... this is a question for another day.
|
// and IPC, but... this is a question for another day.
|
||||||
SHELLEXECUTEINFOW sei = {0};
|
SHELLEXECUTEINFOW sei = {0};
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
# * BOOTSTRAP_HASKELL_VERBOSE - any nonzero value for more verbose installation
|
# * BOOTSTRAP_HASKELL_VERBOSE - any nonzero value for more verbose installation
|
||||||
# * BOOTSTRAP_HASKELL_GHC_VERSION - the ghc version to install
|
# * BOOTSTRAP_HASKELL_GHC_VERSION - the ghc version to install
|
||||||
# * BOOTSTRAP_HASKELL_CABAL_VERSION - the cabal version to install
|
# * BOOTSTRAP_HASKELL_CABAL_VERSION - the cabal version to install
|
||||||
|
# * BOOTSTRAP_HASKELL_CABAL_XDG - don't disable the XDG logic (this doesn't force XDG though, because cabal is confusing)
|
||||||
# * BOOTSTRAP_HASKELL_INSTALL_NO_STACK - disable installation of stack
|
# * BOOTSTRAP_HASKELL_INSTALL_NO_STACK - disable installation of stack
|
||||||
# * BOOTSTRAP_HASKELL_INSTALL_NO_STACK_HOOK - disable installation stack ghcup hook
|
# * BOOTSTRAP_HASKELL_INSTALL_NO_STACK_HOOK - disable installation stack ghcup hook
|
||||||
# * BOOTSTRAP_HASKELL_INSTALL_HLS - whether to install latest hls
|
# * BOOTSTRAP_HASKELL_INSTALL_HLS - whether to install latest hls
|
||||||
@@ -19,6 +20,7 @@
|
|||||||
# * BOOTSTRAP_HASKELL_ADJUST_CABAL_CONFIG - whether to adjust mingw paths in cabal.config on windows
|
# * BOOTSTRAP_HASKELL_ADJUST_CABAL_CONFIG - whether to adjust mingw paths in cabal.config on windows
|
||||||
# * BOOTSTRAP_HASKELL_DOWNLOADER - which downloader to use (default: curl)
|
# * BOOTSTRAP_HASKELL_DOWNLOADER - which downloader to use (default: curl)
|
||||||
# * GHCUP_BASE_URL - the base url for ghcup binary download (use this to overwrite https://downloads.haskell.org/~ghcup with a mirror)
|
# * GHCUP_BASE_URL - the base url for ghcup binary download (use this to overwrite https://downloads.haskell.org/~ghcup with a mirror)
|
||||||
|
# * GHCUP_MSYS2_ENV - the msys2 environment to use on windows, see https://www.msys2.org/docs/environments/ (defauts to MINGW64, MINGW32 or CLANGARM64, depending on the architecture)
|
||||||
|
|
||||||
# License: LGPL-3.0
|
# License: LGPL-3.0
|
||||||
|
|
||||||
@@ -26,6 +28,15 @@
|
|||||||
# safety subshell to avoid executing anything in case this script is not downloaded properly
|
# safety subshell to avoid executing anything in case this script is not downloaded properly
|
||||||
(
|
(
|
||||||
|
|
||||||
|
die() {
|
||||||
|
if [ -n "${NO_COLOR}" ] ; then
|
||||||
|
(>&2 printf "%s\\n" "$1")
|
||||||
|
else
|
||||||
|
(>&2 printf "\\033[0;31m%s\\033[0m\\n" "$1")
|
||||||
|
fi
|
||||||
|
exit 2
|
||||||
|
}
|
||||||
|
|
||||||
plat="$(uname -s)"
|
plat="$(uname -s)"
|
||||||
arch=$(uname -m)
|
arch=$(uname -m)
|
||||||
ghver="0.1.20.0"
|
ghver="0.1.20.0"
|
||||||
@@ -35,7 +46,7 @@ export GHCUP_SKIP_UPDATE_CHECK=yes
|
|||||||
: "${BOOTSTRAP_HASKELL_DOWNLOADER:=curl}"
|
: "${BOOTSTRAP_HASKELL_DOWNLOADER:=curl}"
|
||||||
|
|
||||||
case "${plat}" in
|
case "${plat}" in
|
||||||
MSYS*|MINGW*)
|
MSYS*|MINGW*|CYGWIN*)
|
||||||
: "${GHCUP_INSTALL_BASE_PREFIX:=/c}"
|
: "${GHCUP_INSTALL_BASE_PREFIX:=/c}"
|
||||||
GHCUP_DIR=$(cygpath -u "${GHCUP_INSTALL_BASE_PREFIX}/ghcup")
|
GHCUP_DIR=$(cygpath -u "${GHCUP_INSTALL_BASE_PREFIX}/ghcup")
|
||||||
GHCUP_BIN=$(cygpath -u "${GHCUP_INSTALL_BASE_PREFIX}/ghcup/bin")
|
GHCUP_BIN=$(cygpath -u "${GHCUP_INSTALL_BASE_PREFIX}/ghcup/bin")
|
||||||
@@ -54,25 +65,47 @@ case "${plat}" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
case "${GHCUP_MSYS2_ENV}" in
|
||||||
|
"")
|
||||||
|
case "${arch}" in
|
||||||
|
x86_64|amd64)
|
||||||
|
GHCUP_MSYS2_ENV_DIR="mingw64" ;;
|
||||||
|
i*86)
|
||||||
|
GHCUP_MSYS2_ENV_DIR="mingw32" ;;
|
||||||
|
aarch64|arm64)
|
||||||
|
GHCUP_MSYS2_ENV_DIR="clangarm64" ;;
|
||||||
|
*) die "Unknown architecture: ${arch}" ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
MSYS)
|
||||||
|
GHCUP_MSYS2_ENV_DIR="usr" ;;
|
||||||
|
UCRT64)
|
||||||
|
GHCUP_MSYS2_ENV_DIR="ucrt64" ;;
|
||||||
|
CLANG64)
|
||||||
|
GHCUP_MSYS2_ENV_DIR="clang64" ;;
|
||||||
|
CLANGARM64)
|
||||||
|
GHCUP_MSYS2_ENV_DIR="clangarm64" ;;
|
||||||
|
CLANG32)
|
||||||
|
GHCUP_MSYS2_ENV_DIR="clang32" ;;
|
||||||
|
MINGW64)
|
||||||
|
GHCUP_MSYS2_ENV_DIR="mingw64" ;;
|
||||||
|
MINGW32)
|
||||||
|
GHCUP_MSYS2_ENV_DIR="mingw32" ;;
|
||||||
|
*)
|
||||||
|
die "Invalid value for GHCUP_MSYS2_ENV. Valid values are: MSYS, UCRT64, CLANG64, CLANGARM64, CLANG32, MINGW64, MINGW32" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
: "${BOOTSTRAP_HASKELL_GHC_VERSION:=recommended}"
|
: "${BOOTSTRAP_HASKELL_GHC_VERSION:=recommended}"
|
||||||
: "${BOOTSTRAP_HASKELL_CABAL_VERSION:=recommended}"
|
: "${BOOTSTRAP_HASKELL_CABAL_VERSION:=recommended}"
|
||||||
|
|
||||||
|
|
||||||
die() {
|
|
||||||
if [ -n "${NO_COLOR}" ] ; then
|
|
||||||
(>&2 printf "%s\\n" "$1")
|
|
||||||
else
|
|
||||||
(>&2 printf "\\033[0;31m%s\\033[0m\\n" "$1")
|
|
||||||
fi
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
warn() {
|
warn() {
|
||||||
if [ -n "${NO_COLOR}" ] ; then
|
if [ -n "${NO_COLOR}" ] ; then
|
||||||
printf "%s\\n" "$1"
|
printf "%s\\n" "$1"
|
||||||
else
|
else
|
||||||
case "${plat}" in
|
case "${plat}" in
|
||||||
MSYS*|MINGW*)
|
MSYS*|MINGW*|CYGWIN*)
|
||||||
# shellcheck disable=SC3037
|
# shellcheck disable=SC3037
|
||||||
echo -e "\\033[0;35m$1\\033[0m"
|
echo -e "\\033[0;35m$1\\033[0m"
|
||||||
;;
|
;;
|
||||||
@@ -88,7 +121,7 @@ yellow() {
|
|||||||
printf "%s\\n" "$1"
|
printf "%s\\n" "$1"
|
||||||
else
|
else
|
||||||
case "${plat}" in
|
case "${plat}" in
|
||||||
MSYS*|MINGW*)
|
MSYS*|MINGW*|CYGWIN*)
|
||||||
# shellcheck disable=SC3037
|
# shellcheck disable=SC3037
|
||||||
echo -e "\\033[0;33m$1\\033[0m"
|
echo -e "\\033[0;33m$1\\033[0m"
|
||||||
;;
|
;;
|
||||||
@@ -104,7 +137,7 @@ green() {
|
|||||||
printf "%s\\n" "$1"
|
printf "%s\\n" "$1"
|
||||||
else
|
else
|
||||||
case "${plat}" in
|
case "${plat}" in
|
||||||
MSYS*|MINGW*)
|
MSYS*|MINGW*|CYGWIN*)
|
||||||
# shellcheck disable=SC3037
|
# shellcheck disable=SC3037
|
||||||
echo -e "\\033[0;32m$1\\033[0m"
|
echo -e "\\033[0;32m$1\\033[0m"
|
||||||
;;
|
;;
|
||||||
@@ -160,7 +193,7 @@ _done() {
|
|||||||
echo
|
echo
|
||||||
echo "==============================================================================="
|
echo "==============================================================================="
|
||||||
case "${plat}" in
|
case "${plat}" in
|
||||||
MSYS*|MINGW*)
|
MSYS*|MINGW*|CYGWIN*)
|
||||||
green
|
green
|
||||||
green "All done!"
|
green "All done!"
|
||||||
green
|
green
|
||||||
@@ -313,7 +346,7 @@ download_ghcup() {
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
MSYS*|MINGW*)
|
MSYS*|MINGW*|CYGWIN*)
|
||||||
case "${arch}" in
|
case "${arch}" in
|
||||||
x86_64|amd64)
|
x86_64|amd64)
|
||||||
_url=${GHCUP_BASE_URL}/${ghver}/x86_64-mingw64-ghcup-${ghver}.exe
|
_url=${GHCUP_BASE_URL}/${ghver}/x86_64-mingw64-ghcup-${ghver}.exe
|
||||||
@@ -326,7 +359,7 @@ download_ghcup() {
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
case "${plat}" in
|
case "${plat}" in
|
||||||
MSYS*|MINGW*)
|
MSYS*|MINGW*|CYGWIN*)
|
||||||
case "${BOOTSTRAP_HASKELL_DOWNLOADER}" in
|
case "${BOOTSTRAP_HASKELL_DOWNLOADER}" in
|
||||||
"curl")
|
"curl")
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
@@ -526,7 +559,7 @@ adjust_bashrc() {
|
|||||||
;;
|
;;
|
||||||
fish)
|
fish)
|
||||||
mkdir -p "${GHCUP_PROFILE_FILE%/*}"
|
mkdir -p "${GHCUP_PROFILE_FILE%/*}"
|
||||||
sed -i -e '/# ghcup-env$/ s/^#*/#/' "$(posix_realpath "${GHCUP_PROFILE_FILE}")"
|
sed -i -e '/# ghcup-env$/d' "$(posix_realpath "${GHCUP_PROFILE_FILE}")"
|
||||||
case $1 in
|
case $1 in
|
||||||
1)
|
1)
|
||||||
printf "\n%s" "set -q GHCUP_INSTALL_BASE_PREFIX[1]; or set GHCUP_INSTALL_BASE_PREFIX \$HOME ; set -gx PATH \$HOME/.cabal/bin $GHCUP_BIN \$PATH # ghcup-env" >> "${GHCUP_PROFILE_FILE}"
|
printf "\n%s" "set -q GHCUP_INSTALL_BASE_PREFIX[1]; or set GHCUP_INSTALL_BASE_PREFIX \$HOME ; set -gx PATH \$HOME/.cabal/bin $GHCUP_BIN \$PATH # ghcup-env" >> "${GHCUP_PROFILE_FILE}"
|
||||||
@@ -537,15 +570,15 @@ adjust_bashrc() {
|
|||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
bash)
|
bash)
|
||||||
sed -i -e '/# ghcup-env$/ s/^#*/#/' "$(posix_realpath "${GHCUP_PROFILE_FILE}")"
|
sed -i -e '/# ghcup-env$/d' "$(posix_realpath "${GHCUP_PROFILE_FILE}")"
|
||||||
printf "\n%s" "[ -f \"${GHCUP_DIR}/env\" ] && source \"${GHCUP_DIR}/env\" # ghcup-env" >> "${GHCUP_PROFILE_FILE}"
|
printf "\n%s" "[ -f \"${GHCUP_DIR}/env\" ] && . \"${GHCUP_DIR}/env\" # ghcup-env" >> "${GHCUP_PROFILE_FILE}"
|
||||||
case "${plat}" in
|
case "${plat}" in
|
||||||
"Darwin"|"darwin")
|
"Darwin"|"darwin")
|
||||||
if ! grep -q "ghcup-env" "${HOME}/.bash_profile" ; then
|
if ! grep -q "ghcup-env" "${HOME}/.bash_profile" ; then
|
||||||
printf "\n%s" "[[ -f ~/.bashrc ]] && source ~/.bashrc # ghcup-env" >> "${HOME}/.bash_profile"
|
printf "\n%s" "[[ -f ~/.bashrc ]] && . ~/.bashrc # ghcup-env" >> "${HOME}/.bash_profile"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
MSYS*|MINGW*)
|
MSYS*|MINGW*|CYGWIN*)
|
||||||
if [ ! -e "${HOME}/.bash_profile" ] ; then
|
if [ ! -e "${HOME}/.bash_profile" ] ; then
|
||||||
echo '# generated by ghcup' > "${HOME}/.bash_profile"
|
echo '# generated by ghcup' > "${HOME}/.bash_profile"
|
||||||
echo 'test -f ~/.profile && . ~/.profile' >> "${HOME}/.bash_profile"
|
echo 'test -f ~/.profile && . ~/.profile' >> "${HOME}/.bash_profile"
|
||||||
@@ -556,15 +589,19 @@ adjust_bashrc() {
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
zsh)
|
zsh)
|
||||||
sed -i -e '/# ghcup-env$/ s/^#*/#/' "$(posix_realpath "${GHCUP_PROFILE_FILE}")"
|
sed -i -e '/# ghcup-env$/d' "$(posix_realpath "${GHCUP_PROFILE_FILE}")"
|
||||||
printf "\n%s" "[ -f \"${GHCUP_DIR}/env\" ] && source \"${GHCUP_DIR}/env\" # ghcup-env" >> "${GHCUP_PROFILE_FILE}"
|
printf "\n%s" "[ -f \"${GHCUP_DIR}/env\" ] && . \"${GHCUP_DIR}/env\" # ghcup-env" >> "${GHCUP_PROFILE_FILE}"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
if [ -e "$HOME/.profile" ] ; then
|
||||||
|
sed -i -e '/# ghcup-env$/d' "$(posix_realpath "$HOME/.profile")"
|
||||||
|
printf "\n%s" "[ -f \"${GHCUP_DIR}/env\" ] && . \"${GHCUP_DIR}/env\" # ghcup-env" >> "$HOME/.profile"
|
||||||
|
fi
|
||||||
echo
|
echo
|
||||||
echo "==============================================================================="
|
echo "==============================================================================="
|
||||||
echo
|
echo
|
||||||
warn "OK! ${GHCUP_PROFILE_FILE} has been modified. Restart your terminal for the changes to take effect,"
|
warn "OK! ${GHCUP_PROFILE_FILE} has been modified. Restart your terminal for the changes to take effect,"
|
||||||
warn "or type \"source ${GHCUP_DIR}/env\" to apply them in your current terminal session."
|
warn "or type \". ${GHCUP_DIR}/env\" to apply them in your current terminal session."
|
||||||
return
|
return
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -590,12 +627,12 @@ adjust_cabal_config() {
|
|||||||
else
|
else
|
||||||
cabal_bin="$HOME/AppData/Roaming/cabal/bin"
|
cabal_bin="$HOME/AppData/Roaming/cabal/bin"
|
||||||
fi
|
fi
|
||||||
ecabal user-config -a "extra-prog-path: $(cygpath -w "$GHCUP_BIN"), $(cygpath -w "$cabal_bin"), $(cygpath -w "$GHCUP_MSYS2"/mingw64/bin), $(cygpath -w "$GHCUP_MSYS2"/usr/bin)" -a "extra-include-dirs: $(cygpath -w "$GHCUP_MSYS2"/mingw64/include)" -a "extra-lib-dirs: $(cygpath -w "$GHCUP_MSYS2"/mingw64/lib)" -f init
|
ecabal user-config -a "extra-prog-path: $(cygpath -w "$GHCUP_BIN"), $(cygpath -w "$cabal_bin"), $(cygpath -w "$GHCUP_MSYS2"/${GHCUP_MSYS2_ENV_DIR}/bin), $(cygpath -w "$GHCUP_MSYS2"/usr/bin)" -a "extra-include-dirs: $(cygpath -w "$GHCUP_MSYS2"/${GHCUP_MSYS2_ENV_DIR}/include)" -a "extra-lib-dirs: $(cygpath -w "$GHCUP_MSYS2"/${GHCUP_MSYS2_ENV_DIR}/lib)" -f init
|
||||||
}
|
}
|
||||||
|
|
||||||
ask_cabal_config_init() {
|
ask_cabal_config_init() {
|
||||||
case "${plat}" in
|
case "${plat}" in
|
||||||
MSYS*|MINGW*)
|
MSYS*|MINGW*|CYGWIN*)
|
||||||
if [ -n "${BOOTSTRAP_HASKELL_ADJUST_CABAL_CONFIG}" ] ; then
|
if [ -n "${BOOTSTRAP_HASKELL_ADJUST_CABAL_CONFIG}" ] ; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
@@ -636,7 +673,7 @@ ask_cabal_config_init() {
|
|||||||
|
|
||||||
do_cabal_config_init() {
|
do_cabal_config_init() {
|
||||||
case "${plat}" in
|
case "${plat}" in
|
||||||
MSYS*|MINGW*)
|
MSYS*|MINGW*|CYGWIN*)
|
||||||
case $1 in
|
case $1 in
|
||||||
1)
|
1)
|
||||||
adjust_cabal_config
|
adjust_cabal_config
|
||||||
@@ -680,7 +717,7 @@ ask_hls() {
|
|||||||
*)
|
*)
|
||||||
echo "Possible choices are:"
|
echo "Possible choices are:"
|
||||||
echo
|
echo
|
||||||
echo "Y - Yes, install the haskell-langauge-server"
|
echo "Y - Yes, install the haskell-language-server"
|
||||||
echo "N - No, don't install anything more (default)"
|
echo "N - No, don't install anything more (default)"
|
||||||
echo
|
echo
|
||||||
echo "Please make your choice and press ENTER."
|
echo "Please make your choice and press ENTER."
|
||||||
@@ -738,6 +775,15 @@ ask_stack() {
|
|||||||
unset stack_answer
|
unset stack_answer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
find_stack_root() {
|
||||||
|
if [ -n "${STACK_ROOT}" ] ; then
|
||||||
|
echo "${STACK_ROOT}"
|
||||||
|
elif [ -n "${STACK_XDG}" ] ; then
|
||||||
|
echo "${XDG_DATA_HOME:-$HOME/.local/share}/stack"
|
||||||
|
else
|
||||||
|
echo "${HOME}/.stack"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
find_shell
|
find_shell
|
||||||
|
|
||||||
@@ -756,7 +802,7 @@ if [ -z "${GHCUP_USE_XDG_DIRS}" ] ; then
|
|||||||
echo "ghcup installs only into the following directory,"
|
echo "ghcup installs only into the following directory,"
|
||||||
echo "which can be removed anytime:"
|
echo "which can be removed anytime:"
|
||||||
case "${plat}" in
|
case "${plat}" in
|
||||||
MSYS*|MINGW*)
|
MSYS*|MINGW*|CYGWIN*)
|
||||||
echo " $(cygpath -w "$GHCUP_DIR")"
|
echo " $(cygpath -w "$GHCUP_DIR")"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
@@ -820,10 +866,19 @@ if [ -z "${BOOTSTRAP_HASKELL_MINIMAL}" ] ; then
|
|||||||
|
|
||||||
do_cabal_config_init $ask_cabal_config_init_answer
|
do_cabal_config_init $ask_cabal_config_init_answer
|
||||||
|
|
||||||
|
if [ -z "${BOOTSTRAP_HASKELL_CABAL_XDG}" ] ; then
|
||||||
|
# disable XDG if we can
|
||||||
|
if [ -e "${XDG_CONFIG_HOME:-"$HOME/.config"}/cabal" ] || [ -n "${CABAL_DIR}" ] || [ -n "${CABAL_CONFIG}" ] ; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
edo mkdir -p "${HOME}/.cabal"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
edo cabal update --ignore-project
|
edo cabal update --ignore-project
|
||||||
else # don't install ghc and cabal
|
else # don't install ghc and cabal
|
||||||
case "${plat}" in
|
case "${plat}" in
|
||||||
MSYS*|MINGW*)
|
MSYS*|MINGW*|CYGWIN*)
|
||||||
# need to bootstrap cabal to initialize config on windows
|
# need to bootstrap cabal to initialize config on windows
|
||||||
# we'll remove it afterwards
|
# we'll remove it afterwards
|
||||||
tmp_dir="$(mktemp -d)"
|
tmp_dir="$(mktemp -d)"
|
||||||
@@ -850,8 +905,9 @@ case $ask_stack_answer in
|
|||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
(_eghcup --cache install stack) || die "Stack installation failed"
|
(_eghcup --cache install stack) || die "Stack installation failed"
|
||||||
edo mkdir -p "${STACK_ROOT:-$HOME/.stack}"/hooks
|
stack_root="$(find_stack_root)"
|
||||||
hook_exe="${STACK_ROOT:-$HOME/.stack}"/hooks/ghc-install.sh
|
edo mkdir -p "${stack_root}"/hooks
|
||||||
|
hook_exe="${stack_root}"/hooks/ghc-install.sh
|
||||||
hook_url="https://www.haskell.org/ghcup/sh/hooks/stack/ghc-install.sh"
|
hook_url="https://www.haskell.org/ghcup/sh/hooks/stack/ghc-install.sh"
|
||||||
|
|
||||||
if [ -e "${hook_exe}" ] ; then
|
if [ -e "${hook_exe}" ] ; then
|
||||||
|
|||||||
@@ -44,7 +44,11 @@ param (
|
|||||||
# The Msys2 sha256sum hash
|
# The Msys2 sha256sum hash
|
||||||
[string]$Msys2Hash,
|
[string]$Msys2Hash,
|
||||||
# Whether to disable creation of several desktop shortcuts
|
# Whether to disable creation of several desktop shortcuts
|
||||||
[switch]$DontWriteDesktopShortcuts
|
[switch]$DontWriteDesktopShortcuts,
|
||||||
|
# Whether to disable adjusting bashrc (in msys2 env) with PATH
|
||||||
|
[switch]$DontAdjustBashRc,
|
||||||
|
# The msys2 environment to use, see https://www.msys2.org/docs/environments/ (defauts to MINGW64, MINGW32 or CLANGARM64, depending on the architecture)
|
||||||
|
[string]$Msys2Env
|
||||||
)
|
)
|
||||||
|
|
||||||
$DefaultMsys2Version = "20221216"
|
$DefaultMsys2Version = "20221216"
|
||||||
@@ -185,6 +189,43 @@ function Exec
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Only x86 32/64-bit is supported
|
||||||
|
$SupportedArchitectures = 'AMD64', 'x86'
|
||||||
|
if (!$SupportedArchitectures.contains($env:PROCESSOR_ARCHITECTURE)) {
|
||||||
|
Print-Msg -color Red -msg ("Unsupported processor architecture: {0}. Supported architectures: {1}." -f $env:PROCESSOR_ARCHITECTURE, ($SupportedArchitectures -join ", "))
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# set default Msys2Env if not set
|
||||||
|
if (!$Msys2Env) {
|
||||||
|
if ($env:PROCESSOR_ARCHITECTURE -eq 'x86') {
|
||||||
|
$Msys2Env = 'MINGW32'
|
||||||
|
} elseif ($env:PROCESSOR_ARCHITECTURE -eq 'AMD64') {
|
||||||
|
$Msys2Env = 'MINGW64'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# parse Msys2Env and set the corresponding variables
|
||||||
|
if ($Msys2Env -eq 'MINGW32') {
|
||||||
|
$ShellType = '-mingw32'
|
||||||
|
$PkgConf = 'mingw-w64-i686-pkgconf'
|
||||||
|
} elseif ($Msys2Env -eq 'MINGW64') {
|
||||||
|
$ShellType = '-mingw64'
|
||||||
|
$PkgConf = 'mingw-w64-x86_64-pkgconf'
|
||||||
|
} elseif ($Msys2Env -eq 'MSYS') {
|
||||||
|
$ShellType = '-msys2'
|
||||||
|
$PkgConf = 'pkgconf'
|
||||||
|
} elseif ($Msys2Env -eq 'UCRT64') {
|
||||||
|
$ShellType = '-ucrt64'
|
||||||
|
$PkgConf = 'mingw-w64-ucrt-x86_64-pkgconf'
|
||||||
|
} elseif ($Msys2Env -eq 'CLANG64') {
|
||||||
|
$ShellType = '-clang64'
|
||||||
|
$PkgConf = 'mingw-w64-clang-x86_64-pkgconf'
|
||||||
|
} else {
|
||||||
|
Print-Msg -color Red -msg ("Unsupported Msys2 environment: {0}. Supported environments are: MINGW64, MINGW32, MSYS, UCRT64, CLANG64" -f $Msys2Env)
|
||||||
|
Exit 1
|
||||||
|
}
|
||||||
|
|
||||||
$ErrorActionPreference = 'Stop'
|
$ErrorActionPreference = 'Stop'
|
||||||
|
|
||||||
$GhcupBasePrefixEnv = [System.Environment]::GetEnvironmentVariable('GHCUP_INSTALL_BASE_PREFIX', 'user')
|
$GhcupBasePrefixEnv = [System.Environment]::GetEnvironmentVariable('GHCUP_INSTALL_BASE_PREFIX', 'user')
|
||||||
@@ -476,7 +517,9 @@ if (!(Test-Path -Path ('{0}' -f $MsysDir))) {
|
|||||||
|
|
||||||
Print-Msg -msg 'Extracting Msys2 archive...'
|
Print-Msg -msg 'Extracting Msys2 archive...'
|
||||||
$null = & "$archivePath" '-y' ('-o{0}' -f $GhcupDir) # Extract
|
$null = & "$archivePath" '-y' ('-o{0}' -f $GhcupDir) # Extract
|
||||||
Remove-Item -Path "$archivePath"
|
# We ignore errors because we don't want the installation script to fail just because a temporary file can't be removed.
|
||||||
|
# Relevant issue: https://github.com/haskell/ghcup-hs/issues/952
|
||||||
|
Remove-Item -Path "$archivePath" -ErrorAction Continue
|
||||||
|
|
||||||
Print-Msg -msg 'Processing MSYS2 bash for first time use...'
|
Print-Msg -msg 'Processing MSYS2 bash for first time use...'
|
||||||
Exec "$Bash" '-lc' 'exit'
|
Exec "$Bash" '-lc' 'exit'
|
||||||
@@ -490,7 +533,7 @@ if (!(Test-Path -Path ('{0}' -f $MsysDir))) {
|
|||||||
Exec "$Bash" '-lc' 'pacman --noconfirm -Syuu'
|
Exec "$Bash" '-lc' 'pacman --noconfirm -Syuu'
|
||||||
|
|
||||||
Print-Msg -msg 'Installing Dependencies...'
|
Print-Msg -msg 'Installing Dependencies...'
|
||||||
Exec "$Bash" '-lc' 'pacman --noconfirm -S --needed curl autoconf mingw-w64-x86_64-pkgconf'
|
Exec "$Bash" '-lc' ('pacman --noconfirm -S --needed curl autoconf {0}' -f $PkgConf)
|
||||||
|
|
||||||
Print-Msg -msg 'Updating SSL root certificate authorities...'
|
Print-Msg -msg 'Updating SSL root certificate authorities...'
|
||||||
Exec "$Bash" '-lc' 'pacman --noconfirm -S ca-certificates'
|
Exec "$Bash" '-lc' 'pacman --noconfirm -S ca-certificates'
|
||||||
@@ -598,9 +641,9 @@ if ($Host.Name -eq "ConsoleHost")
|
|||||||
}
|
}
|
||||||
'@
|
'@
|
||||||
|
|
||||||
$GhcInstArgs = '-mingw64 -mintty -c "pacman --noconfirm -S --needed base-devel gettext autoconf make libtool automake python p7zip patch unzip"'
|
$GhcInstArgs = ('{0} -mintty -c "pacman --noconfirm -S --needed base-devel gettext autoconf make libtool automake python p7zip patch unzip"' -f $ShellType)
|
||||||
Create-Shortcut -SourceExe ('{0}\msys2_shell.cmd' -f $MsysDir) -ArgumentsToSourceExe $GhcInstArgs -DestinationPath 'Install GHC dev dependencies.lnk' -TempPath $GhcupDir
|
Create-Shortcut -SourceExe ('{0}\msys2_shell.cmd' -f $MsysDir) -ArgumentsToSourceExe $GhcInstArgs -DestinationPath 'Install GHC dev dependencies.lnk' -TempPath $GhcupDir
|
||||||
Create-Shortcut -SourceExe ('{0}\msys2_shell.cmd' -f $MsysDir) -ArgumentsToSourceExe '-mingw64' -DestinationPath 'Mingw haskell shell.lnk' -TempPath $GhcupDir
|
Create-Shortcut -SourceExe ('{0}\msys2_shell.cmd' -f $MsysDir) -ArgumentsToSourceExe $ShellType -DestinationPath 'Mingw haskell shell.lnk' -TempPath $GhcupDir
|
||||||
Create-Shortcut -SourceExe 'https://www.msys2.org/docs/package-management' -ArgumentsToSourceExe '' -DestinationPath 'Mingw package management docs.url' -TempPath $GhcupDir
|
Create-Shortcut -SourceExe 'https://www.msys2.org/docs/package-management' -ArgumentsToSourceExe '' -DestinationPath 'Mingw package management docs.url' -TempPath $GhcupDir
|
||||||
$DesktopDir = [Environment]::GetFolderPath("Desktop")
|
$DesktopDir = [Environment]::GetFolderPath("Desktop")
|
||||||
$null = New-Item -Path $DesktopDir -Name "Uninstall Haskell.ps1" -ItemType "file" -Force -Value $uninstallShortCut
|
$null = New-Item -Path $DesktopDir -Name "Uninstall Haskell.ps1" -ItemType "file" -Force -Value $uninstallShortCut
|
||||||
@@ -645,10 +688,19 @@ if ($DisableCurl) {
|
|||||||
$DownloadScript = 'curl --proto ''=https'' --tlsv1.2 -sSf'
|
$DownloadScript = 'curl --proto ''=https'' --tlsv1.2 -sSf'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!($DontAdjustBashRc)) {
|
||||||
|
$AdjustBashRcExport = 'export BOOTSTRAP_HASKELL_ADJUST_BASHRC=1 ;'
|
||||||
|
}
|
||||||
|
|
||||||
|
# set msys2 env export for the shell bootstrap script
|
||||||
|
$Msys2EnvExport = ('export GHCUP_MSYS2_ENV={0} ;' -f $Msys2Env)
|
||||||
|
# export GHCUP_MSYS2_ENV
|
||||||
|
$null = [Environment]::SetEnvironmentVariable("GHCUP_MSYS2_ENV", $Msys2Env, [System.EnvironmentVariableTarget]::User)
|
||||||
|
|
||||||
if ((Get-Process -ID $PID).ProcessName.StartsWith("bootstrap-haskell") -Or $InBash) {
|
if ((Get-Process -ID $PID).ProcessName.StartsWith("bootstrap-haskell") -Or $InBash) {
|
||||||
Exec "$Bash" '-lc' ('{4} {6} {7} {8} {9} {10} [ -n ''{1}'' ] && export GHCUP_MSYS2=$(cygpath -m ''{1}'') ; [ -n ''{2}'' ] && export GHCUP_INSTALL_BASE_PREFIX=$(cygpath -m ''{2}/'') ; export PATH=$(cygpath -u ''{3}/bin''):$PATH ; export CABAL_DIR=''{5}'' ; [[ ''{0}'' = https* ]] && {11} {0} | bash || cat $(cygpath -m ''{0}'') | bash' -f $BootstrapUrl, $MsysDir, $GhcupBasePrefix, $GhcupDir, $SilentExport, $CabalDirFull, $StackInstallExport, $HLSInstallExport, $AdjustCabalConfigExport, $MinimalExport, $BootstrapDownloader, $DownloadScript)
|
Exec "$Bash" '-lc' ('{4} {6} {7} {8} {9} {10} {12} {13} [ -n ''{1}'' ] && export GHCUP_MSYS2=$(cygpath -m ''{1}'') ; [ -n ''{2}'' ] && export GHCUP_INSTALL_BASE_PREFIX=$(cygpath -m ''{2}/'') ; export PATH=$(cygpath -u ''{3}/bin''):$PATH ; export CABAL_DIR=''{5}'' ; [[ ''{0}'' = https* ]] && {11} {0} | bash || cat $(cygpath -m ''{0}'') | bash' -f $BootstrapUrl, $MsysDir, $GhcupBasePrefix, $GhcupDir, $SilentExport, $CabalDirFull, $StackInstallExport, $HLSInstallExport, $AdjustCabalConfigExport, $MinimalExport, $BootstrapDownloader, $DownloadScript, $AdjustBashRcExport, $Msys2EnvExport)
|
||||||
} else {
|
} else {
|
||||||
Exec "$Msys2Shell" '-mingw64' '-mintty' '-shell' 'bash' '-c' ('{4} {6} {7} {8} {9} {10} [ -n ''{1}'' ] && export GHCUP_MSYS2=$(cygpath -m ''{1}'') ; [ -n ''{2}'' ] && export GHCUP_INSTALL_BASE_PREFIX=$(cygpath -m ''{2}/'') ; export PATH=$(cygpath -u ''{3}/bin''):$PATH ; export CABAL_DIR=''{5}'' ; trap ''echo Press any key to exit && read -n 1 && exit'' 2 ; [[ ''{0}'' = https* ]] && {11} {0} | bash || cat $(cygpath -m ''{0}'') | bash ; echo ''Press any key to exit'' && read -n 1' -f $BootstrapUrl, $MsysDir, $GhcupBasePrefix, $GhcupDir, $SilentExport, $CabalDirFull, $StackInstallExport, $HLSInstallExport, $AdjustCabalConfigExport, $MinimalExport, $BootstrapDownloader, $DownloadScript)
|
Exec "$Msys2Shell" $ShellType '-mintty' '-shell' 'bash' '-c' ('{4} {6} {7} {8} {9} {10} {12} {13} [ -n ''{1}'' ] && export GHCUP_MSYS2=$(cygpath -m ''{1}'') ; [ -n ''{2}'' ] && export GHCUP_INSTALL_BASE_PREFIX=$(cygpath -m ''{2}/'') ; export PATH=$(cygpath -u ''{3}/bin''):$PATH ; export CABAL_DIR=''{5}'' ; trap ''echo Press any key to exit && read -n 1 && exit'' 2 ; [[ ''{0}'' = https* ]] && {11} {0} | bash || cat $(cygpath -m ''{0}'') | bash ; echo ''Press any key to exit'' && read -n 1' -f $BootstrapUrl, $MsysDir, $GhcupBasePrefix, $GhcupDir, $SilentExport, $CabalDirFull, $StackInstallExport, $HLSInstallExport, $AdjustCabalConfigExport, $MinimalExport, $BootstrapDownloader, $DownloadScript, $AdjustBashRcExport, $Msys2EnvExport)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -27,11 +27,7 @@ cd "gh-release-artifacts/${RELEASE}"
|
|||||||
# github
|
# github
|
||||||
gh release download "$RELEASE"
|
gh release download "$RELEASE"
|
||||||
|
|
||||||
# cirrus
|
|
||||||
curl -L -o "x86_64-portbld-freebsd-ghcup-${TAG}" \
|
|
||||||
"https://api.cirrus-ci.com/v1/artifact/github/haskell/ghcup-hs/build/binaries/out/x86_64-portbld-freebsd-ghcup-${TAG}?branch=${RELEASE}"
|
|
||||||
|
|
||||||
sha256sum ./*-ghcup-* > SHA256SUMS
|
sha256sum ./*-ghcup-* > SHA256SUMS
|
||||||
gpg --detach-sign -u "${SIGNER}" SHA256SUMS
|
gpg --detach-sign -u "${SIGNER}" SHA256SUMS
|
||||||
|
|
||||||
gh release upload "$RELEASE" "ghcup-${TAG}-src.tar.gz" "x86_64-portbld-freebsd-ghcup-${TAG}" SHA256SUMS SHA256SUMS.sig
|
gh release upload "$RELEASE" "ghcup-${TAG}-src.tar.gz" SHA256SUMS SHA256SUMS.sig
|
||||||
|
|||||||
@@ -845,7 +845,7 @@
|
|||||||
"dlHash": "et",
|
"dlHash": "et",
|
||||||
"dlOutput": "𥗚%ဖ-\u000e",
|
"dlOutput": "𥗚%ဖ-\u000e",
|
||||||
"dlSubdir": {
|
"dlSubdir": {
|
||||||
"RegexDir": "BP!a⠀"
|
"RegexDir": "BP!a𖫈"
|
||||||
},
|
},
|
||||||
"dlUri": "https:"
|
"dlUri": "https:"
|
||||||
},
|
},
|
||||||
@@ -17546,7 +17546,7 @@
|
|||||||
"dlHash": "knn",
|
"dlHash": "knn",
|
||||||
"dlOutput": "",
|
"dlOutput": "",
|
||||||
"dlSubdir": {
|
"dlSubdir": {
|
||||||
"RegexDir": "𢹂 "
|
"RegexDir": "𐞳 "
|
||||||
},
|
},
|
||||||
"dlUri": "http:qlay"
|
"dlUri": "http:qlay"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,11 @@ compileGhcCheckList = mapSecond CompileGHC
|
|||||||
, (baseCmd <> "--jobs 10", baseOptions{GHC.jobs = Just 10})
|
, (baseCmd <> "--jobs 10", baseOptions{GHC.jobs = Just 10})
|
||||||
, (baseCmd <> "-c build.mk", baseOptions{GHC.buildConfig = Just "build.mk"})
|
, (baseCmd <> "-c build.mk", baseOptions{GHC.buildConfig = Just "build.mk"})
|
||||||
, (baseCmd <> "--config build.mk", baseOptions{GHC.buildConfig = Just "build.mk"})
|
, (baseCmd <> "--config build.mk", baseOptions{GHC.buildConfig = Just "build.mk"})
|
||||||
|
#ifdef IS_WINDOWS
|
||||||
|
, (baseCmd <> "--patch file:c:/example.patch", baseOptions{GHC.patches = Just $ Right [[uri|file:c:/example.patch|]]})
|
||||||
|
#else
|
||||||
, (baseCmd <> "--patch file:///example.patch", baseOptions{GHC.patches = Just $ Right [[uri|file:///example.patch|]]})
|
, (baseCmd <> "--patch file:///example.patch", baseOptions{GHC.patches = Just $ Right [[uri|file:///example.patch|]]})
|
||||||
|
#endif
|
||||||
, (baseCmd <> "-p patch_dir", baseOptions{GHC.patches = Just (Left "patch_dir")})
|
, (baseCmd <> "-p patch_dir", baseOptions{GHC.patches = Just (Left "patch_dir")})
|
||||||
, (baseCmd <> "--patchdir patch_dir", baseOptions{GHC.patches = Just (Left "patch_dir")})
|
, (baseCmd <> "--patchdir patch_dir", baseOptions{GHC.patches = Just (Left "patch_dir")})
|
||||||
, (baseCmd <> "-x armv7-unknown-linux-gnueabihf", baseOptions{GHC.crossTarget = Just "armv7-unknown-linux-gnueabihf"})
|
, (baseCmd <> "-x armv7-unknown-linux-gnueabihf", baseOptions{GHC.crossTarget = Just "armv7-unknown-linux-gnueabihf"})
|
||||||
@@ -164,10 +168,22 @@ compileHlsCheckList = mapSecond CompileHLS
|
|||||||
, (baseCmd <> "-i /tmp/out_dir", baseOptions{HLS.isolateDir = Just "/tmp/out_dir"})
|
, (baseCmd <> "-i /tmp/out_dir", baseOptions{HLS.isolateDir = Just "/tmp/out_dir"})
|
||||||
, (baseCmd <> "--isolate /tmp/out_dir", baseOptions{HLS.isolateDir = Just "/tmp/out_dir"})
|
, (baseCmd <> "--isolate /tmp/out_dir", baseOptions{HLS.isolateDir = Just "/tmp/out_dir"})
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef IS_WINDOWS
|
||||||
|
, (baseCmd <> "--cabal-project file:c:/tmp/cabal.project", baseOptions{HLS.cabalProject = Just $ Right [uri|file:c:/tmp/cabal.project|]})
|
||||||
|
#else
|
||||||
, (baseCmd <> "--cabal-project file:///tmp/cabal.project", baseOptions{HLS.cabalProject = Just $ Right [uri|file:///tmp/cabal.project|]})
|
, (baseCmd <> "--cabal-project file:///tmp/cabal.project", baseOptions{HLS.cabalProject = Just $ Right [uri|file:///tmp/cabal.project|]})
|
||||||
|
#endif
|
||||||
, (baseCmd <> "--cabal-project cabal.ghc8107.project", baseOptions{HLS.cabalProject = Just $ Left "cabal.ghc8107.project"})
|
, (baseCmd <> "--cabal-project cabal.ghc8107.project", baseOptions{HLS.cabalProject = Just $ Left "cabal.ghc8107.project"})
|
||||||
|
#ifdef IS_WINDOWS
|
||||||
|
, (baseCmd <> "--cabal-project-local file:c:/tmp/cabal.project.local", baseOptions{HLS.cabalProjectLocal = Just [uri|file:c:/tmp/cabal.project.local|]})
|
||||||
|
#else
|
||||||
, (baseCmd <> "--cabal-project-local file:///tmp/cabal.project.local", baseOptions{HLS.cabalProjectLocal = Just [uri|file:///tmp/cabal.project.local|]})
|
, (baseCmd <> "--cabal-project-local file:///tmp/cabal.project.local", baseOptions{HLS.cabalProjectLocal = Just [uri|file:///tmp/cabal.project.local|]})
|
||||||
|
#endif
|
||||||
|
#ifdef IS_WINDOWS
|
||||||
|
, (baseCmd <> "--patch file:c:/example.patch", baseOptions{HLS.patches = Just $ Right [[uri|file:c:/example.patch|]]})
|
||||||
|
#else
|
||||||
, (baseCmd <> "--patch file:///example.patch", baseOptions{HLS.patches = Just $ Right [[uri|file:///example.patch|]]})
|
, (baseCmd <> "--patch file:///example.patch", baseOptions{HLS.patches = Just $ Right [[uri|file:///example.patch|]]})
|
||||||
|
#endif
|
||||||
, (baseCmd <> "-p patch_dir", baseOptions{HLS.patches = Just (Left "patch_dir")})
|
, (baseCmd <> "-p patch_dir", baseOptions{HLS.patches = Just (Left "patch_dir")})
|
||||||
, (baseCmd <> "--patchdir patch_dir", baseOptions{HLS.patches = Just (Left "patch_dir")})
|
, (baseCmd <> "--patchdir patch_dir", baseOptions{HLS.patches = Just (Left "patch_dir")})
|
||||||
, (baseCmd <> "-- --enable-tests", baseOptions{HLS.cabalArgs = ["--enable-tests"]})
|
, (baseCmd <> "-- --enable-tests", baseOptions{HLS.cabalArgs = ["--enable-tests"]})
|
||||||
|
|||||||
Reference in New Issue
Block a user