diff --git a/.github/workflows/bootstrap.skip.yml b/.github/workflows/bootstrap.skip.yml index 4a92ddaa0c6..3a47870b533 100644 --- a/.github/workflows/bootstrap.skip.yml +++ b/.github/workflows/bootstrap.skip.yml @@ -6,7 +6,7 @@ name: Bootstrap Skip # to the docs, since these jobs take a long time to complete without providing any benefit. # We therefore use path-filtering in the workflow triggers for the bootstrap jobs, namely # "paths-ignore: doc/**". But the "Bootstrap post job" is a required job, therefore a PR cannot -# be merged unless the "Bootstrap post job" completes succesfully, which it doesn't do if we +# be merged unless the "Bootstrap post job" completes succesfully, which it doesn't do if we # filter it out. # # The solution: We use a second job with the same name which always returns the exit code 0. diff --git a/.github/workflows/bootstrap.yml b/.github/workflows/bootstrap.yml index 7f101dd1b9b..ecfb015c699 100644 --- a/.github/workflows/bootstrap.yml +++ b/.github/workflows/bootstrap.yml @@ -30,7 +30,7 @@ jobs: strategy: matrix: os: [ubuntu-latest] - ghc: ["8.10.7", "9.0.2", "9.2.8", "9.4.8", "9.6.4", "9.8.1"] + ghc: ["9.0.2", "9.2.8", "9.4.8", "9.6.4", "9.8.2"] include: - os: macos-latest ghc: "9.2.8" @@ -52,28 +52,18 @@ jobs: restore-keys: bootstrap-${{ runner.os }}-${{ matrix.ghc }}-20221115- - uses: actions/checkout@v4 - # See https://github.com/haskell/cabal/pull/8739 - - name: Sudo chmod to permit ghcup to update its cache - run: | - if [[ "${{ runner.os }}" == "Linux" ]]; then - sudo ls -lah /usr/local/.ghcup/cache - sudo mkdir -p /usr/local/.ghcup/cache - sudo ls -lah /usr/local/.ghcup/cache - sudo chown -R $USER /usr/local/.ghcup - sudo chmod -R 777 /usr/local/.ghcup - fi + - uses: haskell-actions/setup@v2 + with: + ghc-version: ${{ matrix.ghc }} + - name: bootstrap.py run: | GHC_VERSION=${{ matrix.ghc }} - ghcup --version - ghcup config set cache true - ghcup install ghc $GHC_VERSION - # Fetch the bootstrap sources (we use linux dependencies also on macos) - python3 bootstrap/bootstrap.py -w $(ghcup whereis ghc $GHC_VERSION) -d bootstrap/linux-$GHC_VERSION.json fetch + python3 bootstrap/bootstrap.py -d bootstrap/linux-$GHC_VERSION.json fetch # Bootstrap using the bootstrap sources - python3 bootstrap/bootstrap.py -w $(ghcup whereis ghc $GHC_VERSION) --bootstrap-sources bootstrap-sources.tar.gz + python3 bootstrap/bootstrap.py --bootstrap-sources bootstrap-sources.tar.gz - name: Smoke test run: | diff --git a/.github/workflows/changelogs.yml b/.github/workflows/changelogs.yml index c0ec46a6d1b..85bd169b221 100644 --- a/.github/workflows/changelogs.yml +++ b/.github/workflows/changelogs.yml @@ -1,4 +1,4 @@ -name: Assorted +name: Changelogs on: push: @@ -25,41 +25,17 @@ jobs: runs-on: ubuntu-latest steps: - - name: Set PATH - # https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-commands-for-github-actions#adding-a-system-path - run: | - echo "$HOME/.cabal/bin" >> $GITHUB_PATH - - uses: actions/cache@v3 - with: - path: ~/.cabal/store - key: linux-store-changelogs - # See https://github.com/haskell/cabal/pull/8739 - - name: Sudo chmod to permit ghcup to update its cache - run: | - if [[ "${{ runner.os }}" == "Linux" ]]; then - sudo mkdir -p /usr/local/.ghcup/cache - sudo chown -R $USER /usr/local/.ghcup - sudo chmod -R 777 /usr/local/.ghcup - fi - - name: ghcup - run: | - ghcup config set cache true - ghcup install ghc recommended - ghcup set ghc recommended - - name: Update Hackage index - run: cabal v2-update - # Cannot install it from tarball due to - # https://github.com/haskell/cabal/issues/7360 - - uses: actions/checkout@v4 - with: - repository: "fgaz/changelog-d" - path: "changelog-d" + - name: Install changelog-d run: | - pushd changelog-d - cabal v2-install - popd - - uses: actions/checkout@v4 + curl --create-dirs -o "$HOME/.local/bin/changelog-d" "https://codeberg.org/fgaz/changelog-d/releases/download/v1.0/changelog-d-v1.0-x86_64-linux" + chmod +x "$HOME/.local/bin/changelog-d" + # https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#adding-a-system-path + echo "$HOME/.local/bin" >> $GITHUB_PATH + + - name: Checkout cabal sources + uses: actions/checkout@v4 + - name: Run changelog-d run: | changelog-d changelog.d diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 1bae4d3d71b..b16a5ef0925 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -11,7 +11,7 @@ jobs: - uses: actions/checkout@v4 - uses: haskell-actions/hlint-setup@v2 with: - version: "3.5" + version: "3.8" - uses: haskell-actions/hlint-run@v2 with: path: "." diff --git a/.github/workflows/quick-jobs.yml b/.github/workflows/quick-jobs.yml index d79e092363f..a1fb29b25e6 100644 --- a/.github/workflows/quick-jobs.yml +++ b/.github/workflows/quick-jobs.yml @@ -14,77 +14,90 @@ on: types: - created +env: + GHC_FOR_QUICK_JOBS: 9.6.5 + jobs: meta: name: Meta checks runs-on: ubuntu-latest + env: + cabal_build: >- + cabal build --builddir=dist-newstyle-meta --project-file=cabal.meta.project + gen-cabal-macros + gen-paths-module + gen-spdx + gen-spdx-exc # This job is not run in a container, any recent GHC should be fine steps: - - name: Set PATH - # https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-commands-for-github-actions#adding-a-system-path - run: | - echo "$HOME/.cabal/bin" >> $GITHUB_PATH - - uses: actions/cache@v3 - with: - path: ~/.cabal/store - key: linux-store-meta - # See https://github.com/haskell/cabal/pull/8739 - - name: Sudo chmod to permit ghcup to update its cache - run: | - if [[ "${{ runner.os }}" == "Linux" ]]; then - sudo ls -lah /usr/local/.ghcup/cache - sudo mkdir -p /usr/local/.ghcup/cache - sudo ls -lah /usr/local/.ghcup/cache - sudo chown -R $USER /usr/local/.ghcup - sudo chmod -R 777 /usr/local/.ghcup - fi - name: ghcup run: | ghcup --version ghcup config set cache true - ghcup install ghc recommended - ghcup set ghc recommended + ghcup install ghc $GHC_FOR_QUICK_JOBS + ghcup set ghc $GHC_FOR_QUICK_JOBS + - name: Haskell versions + run: | + ghc --version + cabal --version - name: Update Hackage index run: cabal v2-update - - name: Install alex - run: cabal v2-install alex --constraint='alex ==3.2.7.3' - uses: actions/checkout@v4 + - name: Generate build plan for correct cache key + run: ${{ env.cabal_build }} --dry-run + - name: Restore cached dependencies + uses: actions/cache/restore@v4 + id: cache + with: + path: ~/.local/state/cabal + key: linux-store-meta-${{ hashfiles('dist-newstyle-meta/cache/plan.json') }} + restore-keys: linux-store-meta- + - name: Build tools + run: ${{ env.cabal_build }} - name: Regenerate files run: | - make -B lexer make -B spdx make -B templates - name: Check that diff is clean run: | git status > /dev/null git diff-files -p --exit-code + - name: Cache dependencies + uses: actions/cache/save@v4 + if: always() && steps.cache.outputs.cache-hit != 'true' + with: + path: ~/.local/state/cabal + key: ${{ steps.cache.outputs.cache-primary-key }} + doctest: name: Doctest Cabal runs-on: ubuntu-latest steps: - - name: Set PATH + # It is complicated to get a proper cache key for the dependencies of a package + # (here: doctest) that we just `cabal install`. + # So, as a heuristics we update the cache once per day. + # Updating it with each run would be an alternative, but we a short of cache space, + # and this would generate too many new caches. + - name: Use date as cache key run: | - echo "$HOME/.cabal/bin" >> $GITHUB_PATH - - uses: actions/cache@v3 + echo "DATE=$(date +'%Y-%m-%d')" >> "${GITHUB_ENV}" + - name: Restore cached dependencies + uses: actions/cache/restore@v4 + id: cache with: - path: ~/.cabal/store - key: linux-store-doctest - # See https://github.com/haskell/cabal/pull/8739 - - name: Sudo chmod to permit ghcup to update its cache - run: | - if [[ "${{ runner.os }}" == "Linux" ]]; then - sudo ls -lah /usr/local/.ghcup/cache - sudo mkdir -p /usr/local/.ghcup/cache - sudo ls -lah /usr/local/.ghcup/cache - sudo chown -R $USER /usr/local/.ghcup - sudo chmod -R 777 /usr/local/.ghcup - fi + path: ~/.local/state/cabal + key: linux-store-doctest-${{ env.DATE }} + restore-keys: linux-store-doctest - name: ghcup run: | ghcup --version ghcup config set cache true - ghcup install ghc --set recommended - ghcup install cabal --set latest + ghcup install ghc $GHC_FOR_QUICK_JOBS + ghcup set ghc $GHC_FOR_QUICK_JOBS + - name: Haskell versions + run: | + ghc --version + cabal --version - name: Update Hackage index run: cabal v2-update - uses: actions/checkout@v4 @@ -92,9 +105,18 @@ jobs: run: make doctest-install - name: Doctest run: make doctest + - name: Cache dependencies + if: always() && steps.cache.outputs.cache-hit != 'true' + uses: actions/cache/save@v4 + with: + path: ~/.local/state/cabal + key: ${{ steps.cache.outputs.cache-primary-key }} + buildinfo: name: Check Field Syntax Reference runs-on: ubuntu-latest + env: + cabal_build: cabal build buildinfo-reference-generator steps: - name: Set PATH run: | @@ -103,25 +125,60 @@ jobs: with: path: ~/.cabal/store key: linux-store-buildinfo-doc-diff - # See https://github.com/haskell/cabal/pull/8739 - - name: Sudo chmod to permit ghcup to update its cache - run: | - if [[ "${{ runner.os }}" == "Linux" ]]; then - sudo ls -lah /usr/local/.ghcup/cache - sudo mkdir -p /usr/local/.ghcup/cache - sudo ls -lah /usr/local/.ghcup/cache - sudo chown -R $USER /usr/local/.ghcup - sudo chmod -R 777 /usr/local/.ghcup - fi - name: ghcup run: | ghcup --version ghcup config set cache true - ghcup install ghc --set recommended - ghcup install cabal --set latest + ghcup install ghc $GHC_FOR_QUICK_JOBS + ghcup set ghc $GHC_FOR_QUICK_JOBS + - name: Haskell versions + run: | + ghc --version + cabal --version - name: Update Hackage index run: cabal v2-update - uses: actions/checkout@v4 + - name: Generate build plan for correct cache key + run: ${{ env.cabal_build }} --dry-run + - name: Restore cached dependencies + uses: actions/cache/restore@v4 + id: cache + with: + path: ~/.local/state/cabal + key: linux-store-buildinfo-doc-diff-${{ hashfiles('dist-newstyle/cache/plan.json') }} + restore-keys: linux-store-buildinfo-doc-diff + - name: Build buildinfo-reference-generator + run: ${{ env.cabal_build }} - name: Are buildinfo docs up to date? run: make doc/buildinfo-fields-reference.rst + - name: Cache dependencies + uses: actions/cache/save@v4 + if: always() && steps.cache.outputs.cache-hit != 'true' + with: + path: ~/.local/state/cabal + key: ${{ steps.cache.outputs.cache-primary-key }} + release-project: + name: Check Release Project + runs-on: ubuntu-latest + steps: + - name: Set PATH + run: | + echo "$HOME/.cabal/bin" >> $GITHUB_PATH + - name: ghcup + run: | + ghcup --version + ghcup config set cache true + ghcup install ghc $GHC_FOR_QUICK_JOBS + ghcup set ghc $GHC_FOR_QUICK_JOBS + - name: Haskell versions + run: | + ghc --version + cabal --version + - name: Update Hackage Index + run: cabal v2-update + - uses: actions/checkout@v4 + - name: Check Release with Pinned Hackage + run: cabal build all --dry-run --project-file=cabal.release.project + - name: Check Release with Latest Hackage + run: cabal build all --dry-run --project-file=cabal.release.project --index-state="hackage.haskell.org HEAD" diff --git a/.github/workflows/users-guide.yml b/.github/workflows/users-guide.yml index 8047ede1031..8442b39c2f4 100644 --- a/.github/workflows/users-guide.yml +++ b/.github/workflows/users-guide.yml @@ -15,7 +15,6 @@ on: - 'doc/Makefile' - 'doc/pyproject.toml' - 'doc/requirements.in' - - 'doc/requirements.txt' - 'doc/*.inc' - 'doc/*.py' - 'doc/*.rst' @@ -26,7 +25,6 @@ on: - 'doc/Makefile' - 'doc/pyproject.toml' - 'doc/requirements.in' - - 'doc/requirements.txt' - 'doc/*.inc' - 'doc/*.py' - 'doc/*.rst' @@ -58,6 +56,14 @@ jobs: with: python-version: ${{ matrix.python-version }} + - name: Install pip-compile + run: | + pip install pip-tools + + - name: Create requirements.txt from requirements.in + run: | + make users-guide-requirements + # Subsumed by make users-guide # - name: Install dependencies # run: | diff --git a/.github/workflows/validate.skip.yml b/.github/workflows/validate.skip.yml index e5cd47e284a..af608e92d49 100644 --- a/.github/workflows/validate.skip.yml +++ b/.github/workflows/validate.skip.yml @@ -6,7 +6,7 @@ name: Validate Skip # to the docs, since these jobs take a long time to complete without providing any benefit. # We therefore use path-filtering in the workflow triggers for the validate jobs, namely # "paths-ignore: doc/**". But the "Validate post job" is a required job, therefore a PR cannot -# be merged unless the "Validate post job" completes succesfully, which it doesn't do if we +# be merged unless the "Validate post job" completes succesfully, which it doesn't do if we # filter it out. # # The solution: We use a second job with the same name which always returns the exit code 0. diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 593514beb2f..5d597314ea2 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -47,10 +47,10 @@ on: env: # We choose a stable ghc version across all os's # which will be used to do the next release - GHC_FOR_RELEASE: '9.2.8' + GHC_FOR_RELEASE: '9.4.8' # Ideally we should use the version about to be released for hackage tests and benchmarks - GHC_FOR_SOLVER_BENCHMARKS: '9.2.8' - GHC_FOR_COMPLETE_HACKAGE_TESTS: '9.2.8' + GHC_FOR_SOLVER_BENCHMARKS: '9.4.8' + GHC_FOR_COMPLETE_HACKAGE_TESTS: '9.4.8' COMMON_FLAGS: '-j 2 -v' # See https://github.com/haskell/cabal/blob/master/CONTRIBUTING.md#hackage-revisions @@ -66,27 +66,26 @@ jobs: GHC_FOR_RELEASE: ${{ format('["{0}"]', env.GHC_FOR_RELEASE) }} strategy: matrix: - os: ["ubuntu-latest", "macos-latest", "windows-latest"] - # If you remove something from here.. then add it to the old-ghcs job. - ghc: ["9.8.1", "9.6.3", "9.4.8", "9.2.8", "9.0.2", "8.10.7", "8.8.4", "8.6.5"] + os: [ubuntu-latest, macos-13, windows-latest] + # If you remove something from here, then add it to the old-ghcs job. + # Also a removed GHC from here means that we are actually dropping + # support, so the PR *must* have a changelog entry. + ghc: ['9.10.1', '9.8.2', '9.6.4', '9.4.8', '9.2.8', '9.0.2', '8.10.7', '8.8.4', '8.6.5'] exclude: # corrupts GHA cache or the fabric of reality itself, see https://github.com/haskell/cabal/issues/8356 - - os: "windows-latest" - ghc: "8.10.7" + - os: windows-latest + ghc: '8.10.7' # lot of segfaults caused by ghc bugs - - os: "windows-latest" - ghc: "8.8.4" - # it also throws segfaults randomly - - os: "windows-latest" - ghc: "8.4.4" + - os: windows-latest + ghc: '8.8.4' # it often randomly does "C:\Users\RUNNER~1\AppData\Local\Temp\ghcFEDE.c: DeleteFile "\\\\?\\C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\ghcFEDE.c": permission denied (Access is denied.)" - - os: "windows-latest" - ghc: "8.6.5" + - os: windows-latest + ghc: '8.6.5' steps: - name: Work around XDG directories existence (haskell-actions/setup#62) - if: ${{ runner.os == 'macOS' }} + if: runner.os == 'macOS' run: | rm -rf ~/.config/cabal rm -rf ~/.cache/cabal @@ -95,14 +94,21 @@ jobs: # See https://github.com/haskell/cabal/blob/master/CONTRIBUTING.md#hackage-revisions - name: Manually supplied constraints/allow-newer - if: ${{ github.event_name == 'workflow_dispatch' }} + if: github.event_name == 'workflow_dispatch' run: | - echo 'allow-newer:' ${ALLOWNEWER} >> cabal.project.validate - echo 'constraints:' ${CONSTRAINTS} >> cabal.project.validate + echo "allow-newer: ${ALLOWNEWER}" >> cabal.validate.project + echo "constraints: ${CONSTRAINTS}" >> cabal.validate.project + + - uses: haskell-actions/setup@v2 + id: setup-haskell + with: + ghc-version: ${{ matrix.ghc }} + cabal-version: latest # latest is mandatory for cabal-testsuite, see https://github.com/haskell/cabal/issues/8133 + ghcup-release-channel: https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-prereleases-0.0.8.yaml # See the following link for a breakdown of the following step # https://github.com/haskell/actions/issues/7#issuecomment-745697160 - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: # validate.sh uses a special build dir path: | @@ -111,15 +117,8 @@ jobs: key: ${{ runner.os }}-${{ matrix.ghc }}-${{ github.sha }} restore-keys: ${{ runner.os }}-${{ matrix.ghc }}- - - uses: haskell-actions/setup@v2 - id: setup-haskell - with: - ghc-version: ${{ matrix.ghc }} - cabal-version: latest # latest is mandatory for cabal-testsuite, see https://github.com/haskell/cabal/issues/8133 - - name: Work around git problem https://bugs.launchpad.net/ubuntu/+source/git/+bug/1993586 (cabal PR #8546) - run: | - git config --global protocol.file.allow always + run: git config --global protocol.file.allow always # The tool is not essential to the rest of the test suite. If # hackage-repo-tool is not present, any test that requires it will @@ -128,26 +127,23 @@ jobs: # hackage-repo-tool breaks or fails to support a newer GHC version. - name: Install hackage-repo-tool continue-on-error: true - run: | - cd $(mktemp -d) - cabal install hackage-repo-tool + run: cabal install --ignore-project hackage-repo-tool # Needed by cabal-testsuite/PackageTests/Configure/setup.test.hs - name: Install Autotools if: runner.os == 'macOS' - run: | - brew install automake + run: brew install automake - name: Set validate inputs run: | FLAGS="${{ env.COMMON_FLAGS }}" - if [[ ${{ matrix.ghc }} == ${{ env.GHC_FOR_SOLVER_BENCHMARKS }} ]]; then + if [[ "${{ matrix.ghc }}" == "${{ env.GHC_FOR_SOLVER_BENCHMARKS }}" ]]; then FLAGS="$FLAGS --solver-benchmarks" fi - if [[ ${{ matrix.ghc }} == ${{ env.GHC_FOR_COMPLETE_HACKAGE_TESTS }} ]]; then + if [[ "${{ matrix.ghc }}" == "${{ env.GHC_FOR_COMPLETE_HACKAGE_TESTS }}" ]]; then FLAGS="$FLAGS --complete-hackage-tests" fi - echo "FLAGS=$FLAGS" >> $GITHUB_ENV + echo "FLAGS=$FLAGS" >> "$GITHUB_ENV" - name: Validate print-config run: sh validate.sh $FLAGS -s print-config @@ -161,12 +157,12 @@ jobs: - name: Tar cabal head executable if: matrix.ghc == env.GHC_FOR_RELEASE run: | - CABAL_EXEC=$(cabal list-bin --builddir=dist-newstyle-validate-ghc-${{ matrix.ghc }} --project-file=cabal.project.validate cabal-install:exe:cabal) + CABAL_EXEC=$(cabal list-bin --builddir=dist-newstyle-validate-ghc-${{ matrix.ghc }} --project-file=cabal.validate.project cabal-install:exe:cabal) # We have to tar the executable to preserve executable permissions # see https://github.com/actions/upload-artifact/issues/38 - if [[ ${{ runner.os }} == 'Windows' ]]; then + if [[ "${{ runner.os }}" == "Windows" ]]; then # `cabal list-bin` gives us a windows path but tar needs the posix one - CABAL_EXEC=$(cygpath $CABAL_EXEC) + CABAL_EXEC=$(cygpath "$CABAL_EXEC") fi if [[ "${{ runner.os }}" == "macOS" ]]; then # Workaround to avoid bsdtar corrupts the executable @@ -174,9 +170,11 @@ jobs: # see https://github.com/actions/virtual-environments/issues/2619#issuecomment-788397841 sudo /usr/sbin/purge fi - export CABAL_EXEC_TAR="cabal-head-${{ runner.os }}-x86_64.tar.gz" - tar -czvf $CABAL_EXEC_TAR -C $(dirname "$CABAL_EXEC") $(basename "$CABAL_EXEC") - echo "CABAL_EXEC_TAR=$CABAL_EXEC_TAR" >> $GITHUB_ENV + DIR=$(dirname "$CABAL_EXEC") + FILE=$(basename "$CABAL_EXEC") + CABAL_EXEC_TAR="cabal-head-${{ runner.os }}-x86_64.tar.gz" + tar -czvf "$CABAL_EXEC_TAR" -C "$DIR" "$FILE" + echo "CABAL_EXEC_TAR=$CABAL_EXEC_TAR" >> "$GITHUB_ENV" # We upload the cabal executable built with the ghc used in the release for: # - Reuse it in the dogfooding job (although we could use the cached build dir) @@ -196,96 +194,84 @@ jobs: run: sh validate.sh $FLAGS -s lib-tests - name: Validate lib-suite - # Have to disable *-suite validation: - # - the Windows@9.6.1 problem is tracked at https://github.com/haskell/cabal/issues/8858 - # - but curently can't run it with GHC 9.6, tracking: https://github.com/haskell/cabal/issues/8883 run: sh validate.sh $FLAGS -s lib-suite - name: Validate cli-tests run: sh validate.sh $FLAGS -s cli-tests - name: Validate cli-suite - # Have to disable *-suite validation, see above the comment for lib-suite run: sh validate.sh $FLAGS -s cli-suite - name: Validate solver-benchmarks-tests - run: | - if [[ ${{ matrix.ghc }} == ${{ env.GHC_FOR_SOLVER_BENCHMARKS }} ]]; then - sh validate.sh $FLAGS -s solver-benchmarks-tests - fi + if: matrix.ghc == env.GHC_FOR_SOLVER_BENCHMARKS + run: sh validate.sh $FLAGS -s solver-benchmarks-tests - name: Validate solver-benchmarks-run - run: | - if [[ ${{ matrix.ghc }} == ${{ env.GHC_FOR_SOLVER_BENCHMARKS }} ]]; then - sh validate.sh $FLAGS -s solver-benchmarks-run - fi + if: matrix.ghc == env.GHC_FOR_SOLVER_BENCHMARKS + run: sh validate.sh $FLAGS -s solver-benchmarks-run + validate-old-ghcs: name: Validate old ghcs ${{ matrix.extra-ghc }} runs-on: ubuntu-latest needs: validate - # This job needs an older ubuntu (16.04) cause - # the required old ghcs using the `-dyn` flavour - # are not installable from ppa/hvr in newer ones - # see https://github.com/haskell/cabal/issues/8011 - container: - image: phadej/ghc:8.8.4-xenial strategy: matrix: - # Newer ghc versions than 8.8.4 have to be installed with ghcup cause - # they are not available in ppa/hvr. The ghcup installation - # needs `sudo` which is not available in the xenial container - ghc: ["8.8.4"] - extra-ghc: ["8.4.4", "8.2.2", "8.0.2", "7.10.3", "7.8.4", "7.6.3", "7.4.2", "7.2.2", "7.0.4"] + extra-ghc: ['8.4.4', '8.2.2', '8.0.2'] + ## GHC 7.10.3 does not install on ubuntu-22.04 with ghcup. + ## Older GHCs are not supported by ghcup in the first place. + fail-fast: false steps: - # We can't use actions/checkout with the xenial docker container - # cause it does not work with the git version included in it, see: - # https://github.com/actions/checkout/issues/170 - # https://github.com/actions/checkout/issues/295 - # - uses: actions/checkout@v4 - - name: Checkout + - uses: actions/checkout@v4 + + - name: Install prerequisites for old GHCs run: | - echo $GITHUB_REF $GITHUB_SHA - git clone --depth 1 https://github.com/$GITHUB_REPOSITORY.git . - git fetch origin $GITHUB_SHA:temporary-ci-branch - git checkout $GITHUB_SHA || (git fetch && git checkout $GITHUB_SHA) + sudo apt-get update + sudo apt-get install libncurses5 libtinfo5 - name: Install extra compiler - run: | - apt-get update - apt-get install -y ghc-${{ matrix.extra-ghc }}-dyn + run: ghcup install ghc ${{ matrix.extra-ghc }} - - uses: haskell-actions/setup@v2 + - name: GHCup logs + if: always() + run: cat /usr/local/.ghcup/logs/* + + - name: Install primary compiler + uses: haskell-actions/setup@v2 id: setup-haskell with: - ghc-version: ${{ matrix.ghc }} - # Make sure this bindist works in this old environment - cabal-version: 3.10.1.0 + ghc-version: ${{ env.GHC_FOR_RELEASE }} + cabal-version: latest + + - name: GHC versions + run: | + ghc --version + "ghc-${{ matrix.extra-ghc }}" --version # As we are reusing the cached build dir from the previous step # the generated artifacts are available here, # including the cabal executable and the test suite - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: path: | ${{ steps.setup-haskell.outputs.cabal-store }} dist-* - key: ${{ runner.os }}-${{ matrix.ghc }}-${{ github.sha }} - restore-keys: ${{ runner.os }}-${{ matrix.ghc }}- + key: ${{ runner.os }}-${{ env.GHC_FOR_RELEASE }}-${{ github.sha }} + restore-keys: ${{ runner.os }}-${{ env.GHC_FOR_RELEASE }}- - name: Validate build run: sh validate.sh ${{ env.COMMON_FLAGS }} -s build - name: "Validate lib-suite-extras --extra-hc ghc-${{ matrix.extra-ghc }}" env: - EXTRA_GHC: "/opt/ghc/${{ matrix.extra-ghc }}/bin/ghc-${{ matrix.extra-ghc }}" - run: sh validate.sh ${{ env.COMMON_FLAGS }} --lib-only -s lib-suite-extras --extra-hc ${{ env.EXTRA_GHC }} + EXTRA_GHC: ghc-${{ matrix.extra-ghc }} + run: sh validate.sh ${{ env.COMMON_FLAGS }} --lib-only -s lib-suite-extras --extra-hc "${{ env.EXTRA_GHC }}" build-alpine: - name: Build statically linked using alpine + name: Build statically linked using alpine runs-on: "ubuntu-latest" container: "alpine:3.19" steps: @@ -301,14 +287,20 @@ jobs: # See https://github.com/haskell/cabal/blob/master/CONTRIBUTING.md#hackage-revisions - name: Manually supplied constraints/allow-newer - if: ${{ github.event_name == 'workflow_dispatch' }} + if: github.event_name == 'workflow_dispatch' run: | - echo 'allow-newer:' ${ALLOWNEWER} >> cabal.project.validate - echo 'constraints:' ${CONSTRAINTS} >> cabal.project.validate + echo "allow-newer: ${ALLOWNEWER}" >> cabal.validate.project + echo "constraints: ${CONSTRAINTS}" >> cabal.validate.project + + - uses: haskell-actions/setup@v2 + id: setup-haskell + with: + ghc-version: ${{ env.GHC_FOR_RELEASE }} + cabal-version: latest # latest is mandatory for cabal-testsuite, see https://github.com/haskell/cabal/issues/8133 # See the following link for a breakdown of the following step # https://github.com/haskell/actions/issues/7#issuecomment-745697160 - - uses: actions/cache@v3 + - uses: actions/cache@v4 with: # validate.sh uses a special build dir path: | @@ -317,27 +309,23 @@ jobs: key: ${{ runner.os }}-${{ env.GHC_FOR_RELEASE }}-${{ github.sha }} restore-keys: ${{ runner.os }}-${{ env.GHC_FOR_RELEASE }}- - - uses: haskell-actions/setup@v2 - id: setup-haskell - with: - ghc-version: ${{ env.GHC_FOR_RELEASE }} - cabal-version: latest # latest is mandatory for cabal-testsuite, see https://github.com/haskell/cabal/issues/8133 - - name: Enable statically linked executables run: | - echo 'executable-static: true' >> cabal.project.validate + echo 'executable-static: true' >> cabal.validate.project - name: Build run: sh validate.sh $FLAGS -s build - name: Tar cabal head executable run: | - CABAL_EXEC=$(cabal list-bin --builddir=dist-newstyle-validate-ghc-${{ env.GHC_FOR_RELEASE }} --project-file=cabal.project.validate cabal-install:exe:cabal) + CABAL_EXEC=$(cabal list-bin --builddir=dist-newstyle-validate-ghc-${{ env.GHC_FOR_RELEASE }} --project-file=cabal.validate.project cabal-install:exe:cabal) # We have to tar the executable to preserve executable permissions # see https://github.com/actions/upload-artifact/issues/38 - export CABAL_EXEC_TAR="cabal-head-${{ runner.os }}-static-x86_64.tar.gz" - tar -czvf $CABAL_EXEC_TAR -C $(dirname "$CABAL_EXEC") $(basename "$CABAL_EXEC") - echo "CABAL_EXEC_TAR=$CABAL_EXEC_TAR" >> $GITHUB_ENV + DIR=$(dirname "$CABAL_EXEC") + FILE=$(basename "$CABAL_EXEC") + CABAL_EXEC_TAR="cabal-head-${{ runner.os }}-static-x86_64.tar.gz" + tar -czvf "$CABAL_EXEC_TAR" -C "$DIR" "$FILE" + echo "CABAL_EXEC_TAR=$CABAL_EXEC_TAR" >> "$GITHUB_ENV" - name: Upload cabal-install executable to workflow artifacts uses: actions/upload-artifact@v3 @@ -355,7 +343,7 @@ jobs: needs: validate strategy: matrix: - os: ["ubuntu-latest", "macos-latest", "windows-latest"] + os: [ubuntu-latest, macos-latest, windows-latest] # We only use one ghc version the used one for the next release (defined at top of the workflow) # We need to build an array dynamically to inject the appropiate env var in a previous job, # see https://docs.github.com/en/actions/learn-github-actions/expressions#fromjson @@ -363,23 +351,13 @@ jobs: steps: - name: Work around XDG directories existence (haskell-actions/setup#62) - if: ${{ runner.os == 'macOS' }} + if: runner.os == 'macOS' run: | rm -rf ~/.config/cabal rm -rf ~/.cache/cabal - uses: actions/checkout@v4 - # See https://github.com/haskell/cabal/pull/8739 - - name: Sudo chmod to permit ghcup to update its cache - run: | - if [[ "${{ runner.os }}" == "Linux" ]]; then - sudo ls -lah /usr/local/.ghcup/cache - sudo mkdir -p /usr/local/.ghcup/cache - sudo ls -lah /usr/local/.ghcup/cache - sudo chown -R $USER /usr/local/.ghcup - sudo chmod -R 777 /usr/local/.ghcup - fi - uses: haskell-actions/setup@v2 id: setup-haskell with: @@ -393,7 +371,7 @@ jobs: path: cabal-head - name: Untar the cabal executable - run: tar -xzf ./cabal-head/cabal-head-${{ runner.os }}-x86_64.tar.gz -C cabal-head + run: tar -xzf "./cabal-head/cabal-head-${{ runner.os }}-x86_64.tar.gz" -C cabal-head - name: print-config using cabal HEAD run: sh validate.sh ${{ env.COMMON_FLAGS }} --with-cabal ./cabal-head/cabal -s print-config @@ -429,12 +407,12 @@ jobs: name: cabal-macOS-x86_64 - name: Create GitHub prerelease - uses: "marvinpinto/action-automatic-releases@v1.2.1" + uses: marvinpinto/action-automatic-releases@v1.2.1 with: - repo_token: "${{ secrets.GITHUB_TOKEN }}" - automatic_release_tag: "cabal-head" + repo_token: ${{ secrets.GITHUB_TOKEN }} + automatic_release_tag: cabal-head prerelease: true - title: "cabal-head" + title: cabal-head files: | cabal-head-Windows-x86_64.tar.gz cabal-head-Linux-x86_64.tar.gz diff --git a/.github/workflows/whitespace.yml b/.github/workflows/whitespace.yml new file mode 100644 index 00000000000..46088d3d351 --- /dev/null +++ b/.github/workflows/whitespace.yml @@ -0,0 +1,14 @@ +name: Whitespace + +on: + pull_request: + push: + branches: ["master"] + +jobs: + whitespace: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - uses: andreasabel/fix-whitespace-action@v1 diff --git a/.gitignore b/.gitignore index 2486c449623..97632785e28 100644 --- a/.gitignore +++ b/.gitignore @@ -65,6 +65,17 @@ progress.txt # test files register.sh +# listed explicitly to show which files are generated but ignored +testdb/intree/cabal.project-test +testdb/intree/store/**/bin/alex +testdb/intree/store/**/cabal-hash.txt +testdb/intree/store/**/share/AlexTemplate.hs +testdb/intree/store/**/share/AlexWrappers.hs +testdb/intree/store/**/share/doc/LICENSE +testdb/intree/store/*/incoming/alex-*.lock +testdb/intree/store/*/package.db/package.cache +testdb/intree/store/*/package.db/package.cache.lock + # windows test artifacts cabal-testsuite/**/*.exe cabal-testsuite/**/*.bat @@ -76,6 +87,7 @@ cabal-testsuite/**/haddocks venv .venv /doc/.skjold_cache/ +/doc/requirements.txt # macOS folder metadata .DS_Store diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4fdf3ed5204..31066604616 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,10 +3,10 @@ stages: variables: # Commit of ghc/ci-images repository from which to pull Docker images - DOCKER_REV: "572353e0644044fe3a5465bba4342a9a0b0eb60e" + DOCKER_REV: "a9297a370025101b479cfd4977f8f910814e03ab" - GHC_VERSION: 9.2.3 - CABAL_INSTALL_VERSION: 3.6.2.0 + GHC_VERSION: 9.6.4 + CABAL_INSTALL_VERSION: 3.10.2.0 workflow: rules: @@ -26,7 +26,7 @@ workflow: paths: - out/* -build-linux: +linux: extends: .build parallel: matrix: @@ -34,22 +34,28 @@ build-linux: TAG: x86_64-linux OS: - deb9 + - deb10 - ARCH: x86_64 TAG: x86_64-linux OS: - centos7 - deb9 + - deb10 + - deb11 + - deb12 - fedora33 + - fedora36 + - fedora38 - rocky8 - ubuntu18_04 - ubuntu20_04 - - deb10 - - deb11 + - ubuntu22_04 - ARCH: aarch64 TAG: aarch64-linux OS: - deb10 - deb11 + - deb12 tags: - $TAG image: "registry.gitlab.haskell.org/ghc/ci-images/$PLATFORM:$DOCKER_REV" @@ -59,17 +65,22 @@ build-linux: TARBALL_EXT: tar.xz ADD_CABAL_ARGS: "--enable-split-sections" -build-linux-alpine: +alpine-linux: extends: .build parallel: matrix: - - ARCH: i386 - OS: [alpine3_12] - GHC_VERSION: 9.0.2 + - ARCH: [i386, x86_64] + OS: [alpine3_12, alpine3_15, alpine3_17] + TAG: x86_64-linux + # Was 3_18 for i386 intentionally left off? - ARCH: x86_64 - OS: [alpine3_12] + OS: alpine3_18 + TAG: x86_64-linux + - ARCH: [aarch64] + OS: [alpine3_18] + TAG: aarch64-linux tags: - - x86_64-linux + - $TAG before_script: # for cabal build - sudo apk add --no-cache zlib zlib-dev zlib-static @@ -80,50 +91,28 @@ build-linux-alpine: TARBALL_EXT: tar.xz ADD_CABAL_ARGS: "--enable-split-sections --enable-executable-static" -build-x86_64-darwin: +darwin: extends: .build + parallel: + matrix: + # Help me with names pls + - ARCH: x86_64 + ARCHARCH: x86_64 + - ARCH: aarch64 + ARCHARCH: arm64 tags: - - x86_64-darwin - variables: - TARBALL_ARCHIVE_SUFFIX: x86_64-darwin - TARBALL_EXT: tar.xz - ADD_CABAL_ARGS: "" - -build-aarch64-darwin: - stage: build - tags: - - aarch64-darwin-m1 - before_script: - - export HOMEBREW_CHANGE_ARCH_TO_ARM=1 - - arch -arm64 /bin/bash ./.gitlab/brew.sh llvm autoconf automake coreutils make tree - # C_INCLUDE_PATH: https://gitlab.haskell.org/ghc/ghc/-/issues/20592 - script: | - export PATH="$CI_PROJECT_DIR/.brew/opt/llvm/bin:$CI_PROJECT_DIR/.brew/bin:$CI_PROJECT_DIR/.brew/sbin:$PATH" - export CC=$CI_PROJECT_DIR/.brew/opt/llvm/bin/clang - export CXX=$CI_PROJECT_DIR/.brew/opt/llvm/bin/clang++ - export LD=ld - export AR=$CI_PROJECT_DIR/.brew/opt/llvm/bin/llvm-ar - export RANLIB=$CI_PROJECT_DIR/.brew/opt/llvm/bin/llvm-ranlib - export C_INCLUDE_PATH="`xcrun --show-sdk-path`/usr/include/ffi" - arch -arm64 /bin/bash ./.gitlab/ci.sh - after_script: - - rm -Rf /private/tmp/.brew_tmp + - ${ARCH}-darwin-m1 variables: - MACOSX_DEPLOYMENT_TARGET: "10.7" - TARBALL_ARCHIVE_SUFFIX: aarch64-darwin + # Using 9.8.2 to work around + # https://gitlab.haskell.org/ghc/ghc/-/issues/24050 + GHC_VERSION: 9.8.2 + TARBALL_ARCHIVE_SUFFIX: ${ARCH}-darwin TARBALL_EXT: tar.xz ADD_CABAL_ARGS: "" - # Update periodically. - BREW_VERSION: 4.0.5 - artifacts: - expire_in: 2 week - paths: - - out/* - cache: - paths: - - .brew + script: + - arch -${ARCHARCH} /bin/bash .gitlab/ci.sh -build-x86_64-windows: +x86_64-windows: extends: .build script: - $env:CHERE_INVOKING = "yes" diff --git a/.gitlab/ci.sh b/.gitlab/ci.sh index c856f9f2cb9..1515a6afe22 100755 --- a/.gitlab/ci.sh +++ b/.gitlab/ci.sh @@ -4,49 +4,26 @@ set -Eeuo pipefail source "$CI_PROJECT_DIR/.gitlab/common.sh" -export GHCUP_INSTALL_BASE_PREFIX="$CI_PROJECT_DIR/toolchain" +if [[ "$(uname)" == "Linux" ]]; then + export PATH="/opt/ghc/${GHC_VERSION}/bin:${PATH}" +# Not all runners use ci-images, so ghcup is used. +else + . "$CI_PROJECT_DIR/.gitlab/ghcup.sh" +fi + export CABAL_DIR="$CI_PROJECT_DIR/cabal" case "$(uname)" in MSYS_*|MINGW*) export CABAL_DIR="$(cygpath -w "$CABAL_DIR")" - GHCUP_BINDIR="${GHCUP_INSTALL_BASE_PREFIX}/ghcup/bin" EXE_EXT=".exe" ;; *) - GHCUP_BINDIR="${GHCUP_INSTALL_BASE_PREFIX}/.ghcup/bin" EXE_EXT="" ;; esac mkdir -p "$CABAL_DIR" -mkdir -p "$GHCUP_BINDIR" -export PATH="$GHCUP_BINDIR:$PATH" - -export BOOTSTRAP_HASKELL_NONINTERACTIVE=1 -export BOOTSTRAP_HASKELL_GHC_VERSION=$GHC_VERSION -export BOOTSTRAP_HASKELL_CABAL_VERSION=$CABAL_INSTALL_VERSION -export BOOTSTRAP_HASKELL_ADJUST_CABAL_CONFIG=yes -# We don't use stack, and it isn't available on i386-deb9 -export BOOTSTRAP_HASKELL_INSTALL_NO_STACK=yes - -# for some reason the subshell doesn't pick up the arm64 environment on darwin -# and starts installing x86_64 GHC -case "$(uname -s)" in - "Darwin"|"darwin") - case "$(/usr/bin/arch)" in - aarch64|arm64|armv8l) - curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | arch -arm64 /bin/bash - ;; - *) - curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh - ;; - esac - ;; - *) - curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh - ;; -esac # https://github.com/haskell/cabal/issues/7313#issuecomment-811851884 # and @@ -54,14 +31,29 @@ esac # # $PLATFORM comes from CI. if [ "$(getconf LONG_BIT)" = "32" -o "${PLATFORM:=xxx}" = "x86_64-linux-centos7" ] ; then - echo 'constraints: lukko -ofd-locking' >> cabal.project.release.local + echo 'constraints: lukko -ofd-locking' >> cabal.release.project.local fi +# In February 2024, cabal started using zlib-0.7.0.0, which uses pkg-config by +# default. The GitLab CI environment doesn't (yet) supply pkg-config, and zlib +# does just fine without it on modern GHCs. That said, the CI environment +# probably *should* have pkg-config installed. See +# https://github.com/haskell/cabal/issues/9774. +echo 'constraints: zlib -pkg-config' >> cabal.release.project.local +# Furthermore, on Windows, zlib claims that libz is shipped with GHC, so it just +# uses @extra-libraries: z@ if pkg-config is False. If you are reading this +# comment, however, this didn't work. Thus we switch to using the bundled libz, +# as was done in zlib <0.7.0.0. +case "$(uname)" in + MSYS_*|MINGW*) + echo 'constraints: zlib +bundled-c-zlib' >> cabal.release.project.local + ;; +esac + args=( - -w "ghc-$GHC_VERSION" --disable-profiling --enable-executable-stripping - --project-file=cabal.project.release + --project-file=cabal.release.project ${ADD_CABAL_ARGS} ) diff --git a/.gitlab/ghcup.sh b/.gitlab/ghcup.sh new file mode 100644 index 00000000000..98a8b433b79 --- /dev/null +++ b/.gitlab/ghcup.sh @@ -0,0 +1,38 @@ +export GHCUP_INSTALL_BASE_PREFIX="$CI_PROJECT_DIR/toolchain" + +case "$(uname)" in + MSYS_*|MINGW*) + GHCUP_BINDIR="${GHCUP_INSTALL_BASE_PREFIX}/ghcup/bin" + ;; + *) + GHCUP_BINDIR="${GHCUP_INSTALL_BASE_PREFIX}/.ghcup/bin" + ;; +esac + +mkdir -p "$GHCUP_BINDIR" +export PATH="$GHCUP_BINDIR:$PATH" + +export BOOTSTRAP_HASKELL_NONINTERACTIVE=1 +export BOOTSTRAP_HASKELL_GHC_VERSION=$GHC_VERSION +export BOOTSTRAP_HASKELL_CABAL_VERSION=$CABAL_INSTALL_VERSION +export BOOTSTRAP_HASKELL_ADJUST_CABAL_CONFIG=yes +# We don't use stack, and it isn't available on i386-deb9 +export BOOTSTRAP_HASKELL_INSTALL_NO_STACK=yes + +# for some reason the subshell doesn't pick up the arm64 environment on darwin +# and starts installing x86_64 GHC +case "$(uname -s)" in + "Darwin"|"darwin") + case "$(/usr/bin/arch)" in + aarch64|arm64|armv8l) + curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | arch -arm64 /bin/bash + ;; + *) + curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh + ;; + esac + ;; + *) + curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh + ;; +esac diff --git a/.hlint.yaml b/.hlint.yaml index e38cc7be72e..6266b76964f 100644 --- a/.hlint.yaml +++ b/.hlint.yaml @@ -1,96 +1,96 @@ # Warnings currently triggered by your code -- ignore: {name: "Avoid lambda"} # 49 hints -- ignore: {name: "Avoid lambda using `infix`"} # 19 hints -- ignore: {name: "Eta reduce"} # 91 hints -- ignore: {name: "Evaluate"} # 9 hints -- ignore: {name: "Functor law"} # 14 hints +- ignore: {name: "Avoid NonEmpty.unzip"} # 1 hint +- ignore: {name: "Avoid lambda"} # 46 hints +- ignore: {name: "Avoid lambda using `infix`"} # 22 hints +- ignore: {name: "Eta reduce"} # 116 hints +- ignore: {name: "Evaluate"} # 10 hints +- ignore: {name: "Functor law"} # 10 hints - ignore: {name: "Fuse concatMap/map"} # 3 hints - ignore: {name: "Fuse foldr/map"} # 3 hints -- ignore: {name: "Fuse mapMaybe/map"} # 2 hints +- ignore: {name: "Fuse mapMaybe/map"} # 1 hint +- ignore: {name: "Fuse traverse_/fmap"} # 1 hint - ignore: {name: "Fuse traverse_/map"} # 1 hint -- ignore: {name: "Hoist not"} # 30 hints +- ignore: {name: "Hoist not"} # 16 hints - ignore: {name: "Missing NOINLINE pragma"} # 1 hint - ignore: {name: "Monoid law, left identity"} # 3 hints - ignore: {name: "Monoid law, right identity"} # 3 hints +- ignore: {name: "Move filter"} # 4 hints - ignore: {name: "Move guards forward"} # 4 hints -- ignore: {name: "Redundant $"} # 125 hints -- ignore: {name: "Redundant $!"} # 4 hints -- ignore: {name: "Redundant <$>"} # 6 hints +- ignore: {name: "Redundant $"} # 175 hints +- ignore: {name: "Redundant $!"} # 1 hint +- ignore: {name: "Redundant <$>"} # 16 hints - ignore: {name: "Redundant =="} # 1 hint -- ignore: {name: "Redundant bracket"} # 206 hints +- ignore: {name: "Redundant bracket"} # 232 hints +- ignore: {name: "Redundant fmap"} # 1 hint - ignore: {name: "Redundant guard"} # 2 hints -- ignore: {name: "Redundant if"} # 1 hint -- ignore: {name: "Redundant lambda"} # 22 hints -- ignore: {name: "Redundant map"} # 1 hint +- ignore: {name: "Redundant if"} # 3 hints +- ignore: {name: "Redundant lambda"} # 19 hints - ignore: {name: "Redundant multi-way if"} # 1 hint -- ignore: {name: "Redundant return"} # 4 hints +- ignore: {name: "Redundant return"} # 7 hints - ignore: {name: "Replace case with fromMaybe"} # 5 hints - ignore: {name: "Replace case with maybe"} # 10 hints -- ignore: {name: "Unused LANGUAGE pragma"} # 121 hints +- ignore: {name: "Unused LANGUAGE pragma"} # 167 hints - ignore: {name: "Use $>"} # 5 hints - ignore: {name: "Use ++"} # 4 hints -- ignore: {name: "Use :"} # 28 hints +- ignore: {name: "Use :"} # 25 hints - ignore: {name: "Use <$"} # 2 hints -- ignore: {name: "Use <$>"} # 67 hints +- ignore: {name: "Use <$>"} # 86 hints - ignore: {name: "Use <&>"} # 14 hints - ignore: {name: "Use <=<"} # 5 hints -- ignore: {name: "Use =<<"} # 6 hints -- ignore: {name: "Use =="} # 2 hints +- ignore: {name: "Use =<<"} # 7 hints +- ignore: {name: "Use =="} # 3 hints - ignore: {name: "Use >=>"} # 3 hints - ignore: {name: "Use ?~"} # 1 hint +- ignore: {name: "Use Down"} # 3 hints - ignore: {name: "Use Just"} # 2 hints -- ignore: {name: "Use all"} # 8 hints -- ignore: {name: "Use bimap"} # 1 hint -- ignore: {name: "Use camelCase"} # 68 hints +- ignore: {name: "Use bimap"} # 7 hints +- ignore: {name: "Use camelCase"} # 96 hints - ignore: {name: "Use catMaybes"} # 3 hints - ignore: {name: "Use concatMap"} # 1 hint -- ignore: {name: "Use const"} # 38 hints -- ignore: {name: "Use elem"} # 3 hints -- ignore: {name: "Use fewer imports"} # 13 hints -- ignore: {name: "Use first"} # 2 hints -- ignore: {name: "Use fmap"} # 28 hints +- ignore: {name: "Use const"} # 36 hints +- ignore: {name: "Use elem"} # 2 hints +- ignore: {name: "Use fewer imports"} # 19 hints +- ignore: {name: "Use first"} # 4 hints +- ignore: {name: "Use fmap"} # 24 hints - ignore: {name: "Use fold"} # 1 hint - ignore: {name: "Use for"} # 1 hint - ignore: {name: "Use forM_"} # 1 hint -- ignore: {name: "Use for_"} # 1 hint -- ignore: {name: "Use fromMaybe"} # 2 hints +- ignore: {name: "Use fromMaybe"} # 1 hint - ignore: {name: "Use fromRight"} # 1 hint - ignore: {name: "Use fst"} # 1 hint - ignore: {name: "Use if"} # 4 hints -- ignore: {name: "Use infix"} # 19 hints +- ignore: {name: "Use infix"} # 20 hints - ignore: {name: "Use isAsciiLower"} # 2 hints - ignore: {name: "Use isAsciiUpper"} # 2 hints - ignore: {name: "Use isDigit"} # 2 hints -- ignore: {name: "Use isJust"} # 2 hints -- ignore: {name: "Use isNothing"} # 3 hints -- ignore: {name: "Use lambda-case"} # 49 hints +- ignore: {name: "Use isJust"} # 1 hint +- ignore: {name: "Use isNothing"} # 1 hint +- ignore: {name: "Use lambda-case"} # 47 hints - ignore: {name: "Use lefts"} # 1 hint -- ignore: {name: "Use list comprehension"} # 11 hints +- ignore: {name: "Use list comprehension"} # 16 hints - ignore: {name: "Use list literal"} # 3 hints - ignore: {name: "Use list literal pattern"} # 11 hints -- ignore: {name: "Use map"} # 5 hints -- ignore: {name: "Use map once"} # 6 hints -- ignore: {name: "Use mapMaybe"} # 11 hints +- ignore: {name: "Use map once"} # 7 hints +- ignore: {name: "Use map with tuple-section"} # 3 hints +- ignore: {name: "Use mapMaybe"} # 13 hints - ignore: {name: "Use max"} # 1 hint -- ignore: {name: "Use maybe"} # 10 hints -- ignore: {name: "Use newtype instead of data"} # 19 hints -- ignore: {name: "Use notElem"} # 11 hints -- ignore: {name: "Use null"} # 3 hints -- ignore: {name: "Use or"} # 1 hint +- ignore: {name: "Use maybe"} # 8 hints +- ignore: {name: "Use minimumBy"} # 1 hint +- ignore: {name: "Use newtype instead of data"} # 26 hints +- ignore: {name: "Use notElem"} # 8 hints +- ignore: {name: "Use null"} # 2 hints - ignore: {name: "Use record patterns"} # 16 hints - ignore: {name: "Use replicateM"} # 1 hint -- ignore: {name: "Use replicateM_"} # 6 hints +- ignore: {name: "Use replicateM_"} # 2 hints - ignore: {name: "Use rights"} # 2 hints - ignore: {name: "Use second"} # 7 hints -- ignore: {name: "Use section"} # 19 hints -- ignore: {name: "Use sortOn"} # 15 hints +- ignore: {name: "Use section"} # 17 hints - ignore: {name: "Use traverse"} # 1 hint -- ignore: {name: "Use traverse_"} # 1 hint - ignore: {name: "Use tuple-section"} # 28 hints - ignore: {name: "Use typeRep"} # 2 hints -- ignore: {name: "Use unless"} # 17 hints +- ignore: {name: "Use unless"} # 20 hints - ignore: {name: "Use unwords"} # 8 hints -- ignore: {name: "Use void"} # 17 hints +- ignore: {name: "Use void"} # 22 hints - ignore: {name: "Use when"} # 1 hint - arguments: diff --git a/.readthedocs.yml b/.readthedocs.yml index 016f7e47a48..31bb9507b4f 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -7,6 +7,10 @@ build: os: "ubuntu-22.04" tools: python: "3.8" + jobs: + post_create_environment: + - pip install pip-tools + - make users-guide-requirements python: install: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d639430354e..6c128250df9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,19 +3,41 @@ Building Cabal for hacking -------------------------- -If you use the latest version of cabal published on Hackage, it is sufficient to run: +If you use the `cabal` executable from the latest version of the +[cabal-install](https://hackage.haskell.org/package/cabal-install) package +published on Hackage, it is sufficient to run: ``` -cabal build cabal +$ cabal build cabal ``` -If not, you aren't able to build the testsuite, so you need to disable the default `cabal.project` that implies configuring the testsuite, e.g., with: +If you have trouble building the testsuite for this initial build, try building +with the release project that excludes this testsuite: ``` -cabal build --project-file=cabal.project.release cabal +cabal build --project-file=cabal.release.project cabal ``` -> **Note** +> [!NOTE] +> The default `cabal.project` is picked up implicitly as if the +> `--project-file=cabal.project` explicit option had been given. + +For developing, we recommend using the locally built version of `cabal`, the +executable, if only because one of the released versions available may be +lacking a fix. This can be installed: + +``` +$ cabal install cabal-install:exe:cabal --overwrite-policy=always +``` + +It can be run without first installing it with `cabal run cabal --` followed by +its own arguments, as shown here for `build --help`: + +``` +$ cabal run cabal -- build --help +``` + +> [!NOTE] > If you're using Nix, you might find it convenient to work within a shell that has all the `Cabal` development dependencies: > ``` > $ nix-shell -p cabal-install ghc ghcid haskellPackages.fourmolu_0_12_0_0 pkgconfig zlib.dev @@ -30,9 +52,9 @@ to find the binary (or just run `find -type f -executable -name cabal`). Here are some other useful variations on the commands: ``` -cabal build Cabal # build library only -cabal build Cabal-tests:unit-tests # build Cabal's unit test suite -cabal build cabal-tests # etc... +$ cabal build Cabal # build library only +$ cabal build Cabal-tests:unit-tests # build Cabal's unit test suite +$ cabal build cabal-tests # etc... ``` Running tests @@ -142,7 +164,7 @@ and should be written in the body of the ticket or PR under their own heading, l For instance: > \#\# QA Notes -> +> > Calling `cabal haddock-project` should produce documentation for the whole cabal project with the following defaults enabled: > * Documentation lives in ./haddocks > * The file `./haddocks/index.html` should exist @@ -163,7 +185,12 @@ the code base. * `make style-modified` - Format files modified in the current tree. * `make style-commit COMMIT=` - Format files modified between HEAD and the given reference. +Whitespace Conventions +---------------------- +We use automated whitespace convention checking. Violations can be fixed by +running [fix-whitespace](https://hackage.haskell.org/package/fix-whitespace). If +you push a fix of a whitespace violation, please do so in a _separate commit_. Other Conventions ----------------- @@ -386,7 +413,7 @@ Running workflow manually as discussed above requires you to supply two inputs: Going via an example, imagine that Cabal only allows `tar` or version less then or equal to 0.6, and you want to bump it to 0.6. Then, to show that Validate -succeeds with `tar` 0.6, you should input +succeeds with `tar` 0.6, you should input - `tar` to the "allow-newer line" - `tar ==0.6` to the "constraints line" diff --git a/Cabal-QuickCheck/Cabal-QuickCheck.cabal b/Cabal-QuickCheck/Cabal-QuickCheck.cabal index cbdb8598b55..b1397c05d5f 100644 --- a/Cabal-QuickCheck/Cabal-QuickCheck.cabal +++ b/Cabal-QuickCheck/Cabal-QuickCheck.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: Cabal-QuickCheck -version: 3.11.0.0 +version: 3.12.0.0 synopsis: QuickCheck instances for types in Cabal category: Testing description: @@ -13,8 +13,8 @@ library build-depends: , base , bytestring - , Cabal ^>=3.11.0.0 - , Cabal-syntax ^>=3.11.0.0 + , Cabal ^>=3.12.0.0 + , Cabal-syntax ^>=3.12.0.0 , QuickCheck ^>=2.13.2 || ^>=2.14 exposed-modules: diff --git a/Cabal-QuickCheck/src/Test/QuickCheck/Instances/Cabal.hs b/Cabal-QuickCheck/src/Test/QuickCheck/Instances/Cabal.hs index 2976d34b557..e5b5077d414 100644 --- a/Cabal-QuickCheck/src/Test/QuickCheck/Instances/Cabal.hs +++ b/Cabal-QuickCheck/src/Test/QuickCheck/Instances/Cabal.hs @@ -3,7 +3,9 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} module Test.QuickCheck.Instances.Cabal () where +#if !MIN_VERSION_base(4,18,0) import Control.Applicative (liftA2) +#endif import Data.Bits (shiftR) import Data.Char (isAlphaNum, isDigit, toLower) import Data.List (intercalate, (\\)) diff --git a/Cabal-described/Cabal-described.cabal b/Cabal-described/Cabal-described.cabal index f5a5f49f6a5..2eb8958a856 100644 --- a/Cabal-described/Cabal-described.cabal +++ b/Cabal-described/Cabal-described.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: Cabal-described -version: 3.11.0.0 +version: 3.12.0.0 synopsis: Described functionality for types in Cabal category: Testing, Parsec description: Provides rere bindings @@ -11,8 +11,8 @@ library ghc-options: -Wall build-depends: , base - , Cabal ^>=3.11.0.0 - , Cabal-syntax ^>=3.11.0.0 + , Cabal ^>=3.12.0.0 + , Cabal-syntax ^>=3.12.0.0 , containers , pretty , QuickCheck diff --git a/Cabal-described/src/Distribution/Described.hs b/Cabal-described/src/Distribution/Described.hs index b158fe02a77..3bfd8c2e3a4 100644 --- a/Cabal-described/src/Distribution/Described.hs +++ b/Cabal-described/src/Distribution/Described.hs @@ -591,4 +591,4 @@ instance Described CompatLicenseFile where describe _ = describe ([] :: [Token]) instance Described CompatFilePath where - describe _ = describe ([] :: [Token]) \ No newline at end of file + describe _ = describe ([] :: [Token]) diff --git a/Cabal-described/src/Distribution/Utils/CharSet.hs b/Cabal-described/src/Distribution/Utils/CharSet.hs index 3cb9ba500a8..9243615c7fa 100644 --- a/Cabal-described/src/Distribution/Utils/CharSet.hs +++ b/Cabal-described/src/Distribution/Utils/CharSet.hs @@ -244,4 +244,4 @@ upper = foldl' (flip insert) empty [ c | c <- [ minBound .. maxBound ], isUpper -- $setup -- Use -XOverloadedStrings to avoid the error: Couldn't match type ‘[Char]’ with ‘CharSet’ -- >>> :set -XOverloadedStrings --- >>> import Prelude (length) \ No newline at end of file +-- >>> import Prelude (length) diff --git a/Cabal-hooks/Cabal-hooks.cabal b/Cabal-hooks/Cabal-hooks.cabal new file mode 100644 index 00000000000..419f15764b9 --- /dev/null +++ b/Cabal-hooks/Cabal-hooks.cabal @@ -0,0 +1,69 @@ +cabal-version: 2.2 +name: Cabal-hooks +version: 0.1 +copyright: 2023, Cabal Development Team +license: BSD-3-Clause +license-file: LICENSE +author: Cabal Development Team +maintainer: cabal-devel@haskell.org +homepage: http://www.haskell.org/cabal/ +bug-reports: https://github.com/haskell/cabal/issues +synopsis: API for the Hooks build-type +description: + User-facing API for the Hooks build-type. +category: Distribution +build-type: Simple + +extra-source-files: + readme.md changelog.md + +source-repository head + type: git + location: https://github.com/haskell/cabal/ + subdir: Cabal-hooks + +library + default-language: Haskell2010 + hs-source-dirs: src + + build-depends: + Cabal-syntax >= 3.13 && < 3.15, + Cabal >= 3.13 && < 3.15, + base >= 4.11 && < 5, + containers >= 0.5.0.0 && < 0.8, + filepath >= 1.3.0.1 && < 1.5, + transformers >= 0.5.6.0 && < 0.7 + + ghc-options: -Wall -fno-ignore-asserts -fwarn-tabs -fwarn-incomplete-uni-patterns -fwarn-incomplete-record-updates + + exposed-modules: + Distribution.Simple.SetupHooks + + other-extensions: + BangPatterns + CPP + DefaultSignatures + DeriveDataTypeable + DeriveFoldable + DeriveFunctor + DeriveGeneric + DeriveTraversable + ExistentialQuantification + FlexibleContexts + FlexibleInstances + GeneralizedNewtypeDeriving + ImplicitParams + KindSignatures + LambdaCase + NondecreasingIndentation + OverloadedStrings + PatternSynonyms + RankNTypes + RecordWildCards + ScopedTypeVariables + StandaloneDeriving + Trustworthy + TypeFamilies + TypeOperators + TypeSynonymInstances + UndecidableInstances diff --git a/Cabal-syntax/Cabal-syntax.cabal b/Cabal-syntax/Cabal-syntax.cabal index 3eab7acf4cd..b482fa6c17d 100644 --- a/Cabal-syntax/Cabal-syntax.cabal +++ b/Cabal-syntax/Cabal-syntax.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: Cabal-syntax -version: 3.11.0.0 +version: 3.12.0.0 copyright: 2003-2024, Cabal Development Team (see AUTHORS file) license: BSD-3-Clause license-file: LICENSE @@ -15,7 +15,7 @@ description: category: Distribution build-type: Simple -extra-source-files: +extra-doc-files: README.md ChangeLog.md source-repository head @@ -29,7 +29,7 @@ library build-depends: array >= 0.4.0.1 && < 0.6, - base >= 4.9 && < 5, + base >= 4.11 && < 5, binary >= 0.7 && < 0.9, bytestring >= 0.10.0.0 && < 0.13, containers >= 0.5.0.0 && < 0.8, @@ -40,7 +40,7 @@ library parsec >= 3.1.13.0 && < 3.2, pretty >= 1.1.1 && < 1.2, text (>= 1.2.3.0 && < 1.3) || (>= 2.0 && < 2.2), - time >= 1.4.0.1 && < 1.13, + time >= 1.4.0.1 && < 1.15, -- transformers-0.4.0.0 doesn't have record syntax e.g. for Identity -- See also https://github.com/ekmett/transformers-compat/issues/35 transformers (>= 0.3 && < 0.4) || (>=0.4.1.0 && <0.7) diff --git a/Cabal-syntax/ChangeLog.md b/Cabal-syntax/ChangeLog.md index 7706be32368..7554aaf4980 100644 --- a/Cabal-syntax/ChangeLog.md +++ b/Cabal-syntax/ChangeLog.md @@ -1 +1 @@ -Please see See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.10.3.0.md +Please see https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.12.0.0.md diff --git a/Cabal-syntax/src/Distribution/PackageDescription/Parsec.hs b/Cabal-syntax/src/Distribution/PackageDescription/Parsec.hs index bee6965c127..cd299b87675 100644 --- a/Cabal-syntax/src/Distribution/PackageDescription/Parsec.hs +++ b/Cabal-syntax/src/Distribution/PackageDescription/Parsec.hs @@ -88,7 +88,10 @@ parseGenericPackageDescription bs = do Just csv -> return (Just csv) Nothing -> parseFatalFailure zeroPos $ - "Unsupported cabal-version " ++ prettyShow v ++ ". See https://github.com/haskell/cabal/issues/4899." + "Unsupported cabal format version in cabal-version field: " + ++ prettyShow v + ++ ".\n" + ++ cabalFormatVersionsDesc _ -> pure Nothing case readFields' bs'' of @@ -175,8 +178,8 @@ parseGenericPackageDescription' scannedVer lexWarnings utf8WarnPos fs = do -- if it were at the beginning, scanner would found it when (v >= CabalSpecV2_2) $ parseFailure pos $ - "cabal-version should be at the beginning of the file starting with spec version 2.2. " - ++ "See https://github.com/haskell/cabal/issues/4899" + "cabal-version should be at the beginning of the file starting with spec version 2.2.\n" + ++ cabalFormatVersionsDesc return v @@ -234,6 +237,10 @@ parseGenericPackageDescription' scannedVer lexWarnings utf8WarnPos fs = do ++ "' must use section syntax. See the Cabal user guide for details." maybeWarnCabalVersion _ _ = return () +-- See #4899 +cabalFormatVersionsDesc :: String +cabalFormatVersionsDesc = "Current cabal-version values are listed at https://cabal.readthedocs.io/en/stable/file-format-changelog.html." + goSections :: CabalSpecVersion -> [Field Position] -> SectionParser () goSections specVer = traverse_ process where diff --git a/Cabal-syntax/src/Distribution/SPDX/LicenseExceptionId.hs b/Cabal-syntax/src/Distribution/SPDX/LicenseExceptionId.hs index 59077b29a35..6246d8df41d 100644 --- a/Cabal-syntax/src/Distribution/SPDX/LicenseExceptionId.hs +++ b/Cabal-syntax/src/Distribution/SPDX/LicenseExceptionId.hs @@ -30,49 +30,75 @@ import qualified Text.PrettyPrint as Disp -- LicenseExceptionId ------------------------------------------------------------------------------- --- | SPDX License Exceptions identifiers list v3.16 +-- | SPDX License Exceptions identifiers list v3.23 data LicenseExceptionId = DS389_exception -- ^ @389-exception@, 389 Directory Server Exception + | Asterisk_exception -- ^ @Asterisk-exception@, Asterisk exception, SPDX License List 3.23 | Autoconf_exception_2_0 -- ^ @Autoconf-exception-2.0@, Autoconf exception 2.0 | Autoconf_exception_3_0 -- ^ @Autoconf-exception-3.0@, Autoconf exception 3.0 + | Autoconf_exception_generic_3_0 -- ^ @Autoconf-exception-generic-3.0@, Autoconf generic exception for GPL-3.0, SPDX License List 3.23 + | Autoconf_exception_generic -- ^ @Autoconf-exception-generic@, Autoconf generic exception, SPDX License List 3.23 + | Autoconf_exception_macro -- ^ @Autoconf-exception-macro@, Autoconf macro exception, SPDX License List 3.23 + | Bison_exception_1_24 -- ^ @Bison-exception-1.24@, Bison exception 1.24, SPDX License List 3.23 | Bison_exception_2_2 -- ^ @Bison-exception-2.2@, Bison exception 2.2 | Bootloader_exception -- ^ @Bootloader-exception@, Bootloader Distribution Exception | Classpath_exception_2_0 -- ^ @Classpath-exception-2.0@, Classpath exception 2.0 | CLISP_exception_2_0 -- ^ @CLISP-exception-2.0@, CLISP exception 2.0 + | Cryptsetup_OpenSSL_exception -- ^ @cryptsetup-OpenSSL-exception@, cryptsetup OpenSSL exception, SPDX License List 3.23 | DigiRule_FOSS_exception -- ^ @DigiRule-FOSS-exception@, DigiRule FOSS License Exception | ECos_exception_2_0 -- ^ @eCos-exception-2.0@, eCos exception 2.0 | Fawkes_Runtime_exception -- ^ @Fawkes-Runtime-exception@, Fawkes Runtime Exception | FLTK_exception -- ^ @FLTK-exception@, FLTK exception + | Fmt_exception -- ^ @fmt-exception@, fmt exception, SPDX License List 3.23 | Font_exception_2_0 -- ^ @Font-exception-2.0@, Font exception 2.0 | Freertos_exception_2_0 -- ^ @freertos-exception-2.0@, FreeRTOS Exception 2.0 + | GCC_exception_2_0_note -- ^ @GCC-exception-2.0-note@, GCC Runtime Library exception 2.0 - note variant, SPDX License List 3.23 | GCC_exception_2_0 -- ^ @GCC-exception-2.0@, GCC Runtime Library exception 2.0 | GCC_exception_3_1 -- ^ @GCC-exception-3.1@, GCC Runtime Library exception 3.1 + | Gmsh_exception -- ^ @Gmsh-exception@, Gmsh exception>, SPDX License List 3.23 + | GNAT_exception -- ^ @GNAT-exception@, GNAT exception, SPDX License List 3.23 + | GNOME_examples_exception -- ^ @GNOME-examples-exception@, GNOME examples exception, SPDX License List 3.23 + | GNU_compiler_exception -- ^ @GNU-compiler-exception@, GNU Compiler Exception, SPDX License List 3.23 | Gnu_javamail_exception -- ^ @gnu-javamail-exception@, GNU JavaMail exception - | GPL_3_0_linking_exception -- ^ @GPL-3.0-linking-exception@, GPL-3.0 Linking Exception, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | GPL_3_0_linking_source_exception -- ^ @GPL-3.0-linking-source-exception@, GPL-3.0 Linking Exception (with Corresponding Source), SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | GPL_CC_1_0 -- ^ @GPL-CC-1.0@, GPL Cooperation Commitment 1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | GPL_3_0_interface_exception -- ^ @GPL-3.0-interface-exception@, GPL-3.0 Interface Exception, SPDX License List 3.23 + | GPL_3_0_linking_exception -- ^ @GPL-3.0-linking-exception@, GPL-3.0 Linking Exception, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | GPL_3_0_linking_source_exception -- ^ @GPL-3.0-linking-source-exception@, GPL-3.0 Linking Exception (with Corresponding Source), SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | GPL_CC_1_0 -- ^ @GPL-CC-1.0@, GPL Cooperation Commitment 1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | GStreamer_exception_2005 -- ^ @GStreamer-exception-2005@, GStreamer Exception (2005), SPDX License List 3.23 + | GStreamer_exception_2008 -- ^ @GStreamer-exception-2008@, GStreamer Exception (2008), SPDX License List 3.23 | I2p_gpl_java_exception -- ^ @i2p-gpl-java-exception@, i2p GPL+Java Exception - | LGPL_3_0_linking_exception -- ^ @LGPL-3.0-linking-exception@, LGPL-3.0 Linking Exception, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | KiCad_libraries_exception -- ^ @KiCad-libraries-exception@, KiCad Libraries Exception, SPDX License List 3.23 + | LGPL_3_0_linking_exception -- ^ @LGPL-3.0-linking-exception@, LGPL-3.0 Linking Exception, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Libpri_OpenH323_exception -- ^ @libpri-OpenH323-exception@, libpri OpenH323 exception, SPDX License List 3.23 | Libtool_exception -- ^ @Libtool-exception@, Libtool Exception | Linux_syscall_note -- ^ @Linux-syscall-note@, Linux Syscall Note - | LLVM_exception -- ^ @LLVM-exception@, LLVM Exception, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | LLGPL -- ^ @LLGPL@, LLGPL Preamble, SPDX License List 3.23 + | LLVM_exception -- ^ @LLVM-exception@, LLVM Exception, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | LZMA_exception -- ^ @LZMA-exception@, LZMA exception | Mif_exception -- ^ @mif-exception@, Macros and Inline Functions Exception | Nokia_Qt_exception_1_1 -- ^ @Nokia-Qt-exception-1.1@, Nokia Qt LGPL exception 1.1, SPDX License List 3.0, SPDX License List 3.2 - | OCaml_LGPL_linking_exception -- ^ @OCaml-LGPL-linking-exception@, OCaml LGPL Linking Exception, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | OCaml_LGPL_linking_exception -- ^ @OCaml-LGPL-linking-exception@, OCaml LGPL Linking Exception, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | OCCT_exception_1_0 -- ^ @OCCT-exception-1.0@, Open CASCADE Exception 1.0 - | OpenJDK_assembly_exception_1_0 -- ^ @OpenJDK-assembly-exception-1.0@, OpenJDK Assembly exception 1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | OpenJDK_assembly_exception_1_0 -- ^ @OpenJDK-assembly-exception-1.0@, OpenJDK Assembly exception 1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | Openvpn_openssl_exception -- ^ @openvpn-openssl-exception@, OpenVPN OpenSSL Exception - | PS_or_PDF_font_exception_20170817 -- ^ @PS-or-PDF-font-exception-20170817@, PS/PDF font exception (2017-08-17), SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | Qt_GPL_exception_1_0 -- ^ @Qt-GPL-exception-1.0@, Qt GPL exception 1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | Qt_LGPL_exception_1_1 -- ^ @Qt-LGPL-exception-1.1@, Qt LGPL exception 1.1, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | PS_or_PDF_font_exception_20170817 -- ^ @PS-or-PDF-font-exception-20170817@, PS/PDF font exception (2017-08-17), SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | QPL_1_0_INRIA_2004_exception -- ^ @QPL-1.0-INRIA-2004-exception@, INRIA QPL 1.0 2004 variant exception, SPDX License List 3.23 + | Qt_GPL_exception_1_0 -- ^ @Qt-GPL-exception-1.0@, Qt GPL exception 1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Qt_LGPL_exception_1_1 -- ^ @Qt-LGPL-exception-1.1@, Qt LGPL exception 1.1, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | Qwt_exception_1_0 -- ^ @Qwt-exception-1.0@, Qwt exception 1.0 - | SHL_2_0 -- ^ @SHL-2.0@, Solderpad Hardware License v2.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | SHL_2_1 -- ^ @SHL-2.1@, Solderpad Hardware License v2.1, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | Swift_exception -- ^ @Swift-exception@, Swift Exception, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | SANE_exception -- ^ @SANE-exception@, SANE Exception, SPDX License List 3.23 + | SHL_2_0 -- ^ @SHL-2.0@, Solderpad Hardware License v2.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | SHL_2_1 -- ^ @SHL-2.1@, Solderpad Hardware License v2.1, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Stunnel_exception -- ^ @stunnel-exception@, stunnel Exception, SPDX License List 3.23 + | SWI_exception -- ^ @SWI-exception@, SWI exception, SPDX License List 3.23 + | Swift_exception -- ^ @Swift-exception@, Swift Exception, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Texinfo_exception -- ^ @Texinfo-exception@, Texinfo exception, SPDX License List 3.23 | U_boot_exception_2_0 -- ^ @u-boot-exception-2.0@, U-Boot exception 2.0 - | Universal_FOSS_exception_1_0 -- ^ @Universal-FOSS-exception-1.0@, Universal FOSS Exception, Version 1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | UBDL_exception -- ^ @UBDL-exception@, Unmodified Binary Distribution exception, SPDX License List 3.23 + | Universal_FOSS_exception_1_0 -- ^ @Universal-FOSS-exception-1.0@, Universal FOSS Exception, Version 1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Vsftpd_openssl_exception -- ^ @vsftpd-openssl-exception@, vsftpd OpenSSL exception, SPDX License List 3.23 | WxWindows_exception_3_1 -- ^ @WxWindows-exception-3.1@, WxWindows Library Exception 3.1 + | X11vnc_openssl_exception -- ^ @x11vnc-openssl-exception@, x11vnc OpenSSL Exception, SPDX License List 3.23 deriving (Eq, Ord, Enum, Bounded, Show, Read, Typeable, Data, Generic) instance Binary LicenseExceptionId where @@ -107,28 +133,46 @@ instance NFData LicenseExceptionId where -- | License SPDX identifier, e.g. @"BSD-3-Clause"@. licenseExceptionId :: LicenseExceptionId -> String licenseExceptionId DS389_exception = "389-exception" +licenseExceptionId Asterisk_exception = "Asterisk-exception" licenseExceptionId Autoconf_exception_2_0 = "Autoconf-exception-2.0" licenseExceptionId Autoconf_exception_3_0 = "Autoconf-exception-3.0" +licenseExceptionId Autoconf_exception_generic_3_0 = "Autoconf-exception-generic-3.0" +licenseExceptionId Autoconf_exception_generic = "Autoconf-exception-generic" +licenseExceptionId Autoconf_exception_macro = "Autoconf-exception-macro" +licenseExceptionId Bison_exception_1_24 = "Bison-exception-1.24" licenseExceptionId Bison_exception_2_2 = "Bison-exception-2.2" licenseExceptionId Bootloader_exception = "Bootloader-exception" licenseExceptionId Classpath_exception_2_0 = "Classpath-exception-2.0" licenseExceptionId CLISP_exception_2_0 = "CLISP-exception-2.0" +licenseExceptionId Cryptsetup_OpenSSL_exception = "cryptsetup-OpenSSL-exception" licenseExceptionId DigiRule_FOSS_exception = "DigiRule-FOSS-exception" licenseExceptionId ECos_exception_2_0 = "eCos-exception-2.0" licenseExceptionId Fawkes_Runtime_exception = "Fawkes-Runtime-exception" licenseExceptionId FLTK_exception = "FLTK-exception" +licenseExceptionId Fmt_exception = "fmt-exception" licenseExceptionId Font_exception_2_0 = "Font-exception-2.0" licenseExceptionId Freertos_exception_2_0 = "freertos-exception-2.0" +licenseExceptionId GCC_exception_2_0_note = "GCC-exception-2.0-note" licenseExceptionId GCC_exception_2_0 = "GCC-exception-2.0" licenseExceptionId GCC_exception_3_1 = "GCC-exception-3.1" +licenseExceptionId Gmsh_exception = "Gmsh-exception" +licenseExceptionId GNAT_exception = "GNAT-exception" +licenseExceptionId GNOME_examples_exception = "GNOME-examples-exception" +licenseExceptionId GNU_compiler_exception = "GNU-compiler-exception" licenseExceptionId Gnu_javamail_exception = "gnu-javamail-exception" +licenseExceptionId GPL_3_0_interface_exception = "GPL-3.0-interface-exception" licenseExceptionId GPL_3_0_linking_exception = "GPL-3.0-linking-exception" licenseExceptionId GPL_3_0_linking_source_exception = "GPL-3.0-linking-source-exception" licenseExceptionId GPL_CC_1_0 = "GPL-CC-1.0" +licenseExceptionId GStreamer_exception_2005 = "GStreamer-exception-2005" +licenseExceptionId GStreamer_exception_2008 = "GStreamer-exception-2008" licenseExceptionId I2p_gpl_java_exception = "i2p-gpl-java-exception" +licenseExceptionId KiCad_libraries_exception = "KiCad-libraries-exception" licenseExceptionId LGPL_3_0_linking_exception = "LGPL-3.0-linking-exception" +licenseExceptionId Libpri_OpenH323_exception = "libpri-OpenH323-exception" licenseExceptionId Libtool_exception = "Libtool-exception" licenseExceptionId Linux_syscall_note = "Linux-syscall-note" +licenseExceptionId LLGPL = "LLGPL" licenseExceptionId LLVM_exception = "LLVM-exception" licenseExceptionId LZMA_exception = "LZMA-exception" licenseExceptionId Mif_exception = "mif-exception" @@ -138,41 +182,67 @@ licenseExceptionId OCCT_exception_1_0 = "OCCT-exception-1.0" licenseExceptionId OpenJDK_assembly_exception_1_0 = "OpenJDK-assembly-exception-1.0" licenseExceptionId Openvpn_openssl_exception = "openvpn-openssl-exception" licenseExceptionId PS_or_PDF_font_exception_20170817 = "PS-or-PDF-font-exception-20170817" +licenseExceptionId QPL_1_0_INRIA_2004_exception = "QPL-1.0-INRIA-2004-exception" licenseExceptionId Qt_GPL_exception_1_0 = "Qt-GPL-exception-1.0" licenseExceptionId Qt_LGPL_exception_1_1 = "Qt-LGPL-exception-1.1" licenseExceptionId Qwt_exception_1_0 = "Qwt-exception-1.0" +licenseExceptionId SANE_exception = "SANE-exception" licenseExceptionId SHL_2_0 = "SHL-2.0" licenseExceptionId SHL_2_1 = "SHL-2.1" +licenseExceptionId Stunnel_exception = "stunnel-exception" +licenseExceptionId SWI_exception = "SWI-exception" licenseExceptionId Swift_exception = "Swift-exception" +licenseExceptionId Texinfo_exception = "Texinfo-exception" licenseExceptionId U_boot_exception_2_0 = "u-boot-exception-2.0" +licenseExceptionId UBDL_exception = "UBDL-exception" licenseExceptionId Universal_FOSS_exception_1_0 = "Universal-FOSS-exception-1.0" +licenseExceptionId Vsftpd_openssl_exception = "vsftpd-openssl-exception" licenseExceptionId WxWindows_exception_3_1 = "WxWindows-exception-3.1" +licenseExceptionId X11vnc_openssl_exception = "x11vnc-openssl-exception" -- | License name, e.g. @"GNU General Public License v2.0 only"@ licenseExceptionName :: LicenseExceptionId -> String licenseExceptionName DS389_exception = "389 Directory Server Exception" +licenseExceptionName Asterisk_exception = "Asterisk exception" licenseExceptionName Autoconf_exception_2_0 = "Autoconf exception 2.0" licenseExceptionName Autoconf_exception_3_0 = "Autoconf exception 3.0" +licenseExceptionName Autoconf_exception_generic_3_0 = "Autoconf generic exception for GPL-3.0" +licenseExceptionName Autoconf_exception_generic = "Autoconf generic exception" +licenseExceptionName Autoconf_exception_macro = "Autoconf macro exception" +licenseExceptionName Bison_exception_1_24 = "Bison exception 1.24" licenseExceptionName Bison_exception_2_2 = "Bison exception 2.2" licenseExceptionName Bootloader_exception = "Bootloader Distribution Exception" licenseExceptionName Classpath_exception_2_0 = "Classpath exception 2.0" licenseExceptionName CLISP_exception_2_0 = "CLISP exception 2.0" +licenseExceptionName Cryptsetup_OpenSSL_exception = "cryptsetup OpenSSL exception" licenseExceptionName DigiRule_FOSS_exception = "DigiRule FOSS License Exception" licenseExceptionName ECos_exception_2_0 = "eCos exception 2.0" licenseExceptionName Fawkes_Runtime_exception = "Fawkes Runtime Exception" licenseExceptionName FLTK_exception = "FLTK exception" +licenseExceptionName Fmt_exception = "fmt exception" licenseExceptionName Font_exception_2_0 = "Font exception 2.0" licenseExceptionName Freertos_exception_2_0 = "FreeRTOS Exception 2.0" +licenseExceptionName GCC_exception_2_0_note = "GCC Runtime Library exception 2.0 - note variant" licenseExceptionName GCC_exception_2_0 = "GCC Runtime Library exception 2.0" licenseExceptionName GCC_exception_3_1 = "GCC Runtime Library exception 3.1" +licenseExceptionName Gmsh_exception = "Gmsh exception>" +licenseExceptionName GNAT_exception = "GNAT exception" +licenseExceptionName GNOME_examples_exception = "GNOME examples exception" +licenseExceptionName GNU_compiler_exception = "GNU Compiler Exception" licenseExceptionName Gnu_javamail_exception = "GNU JavaMail exception" +licenseExceptionName GPL_3_0_interface_exception = "GPL-3.0 Interface Exception" licenseExceptionName GPL_3_0_linking_exception = "GPL-3.0 Linking Exception" licenseExceptionName GPL_3_0_linking_source_exception = "GPL-3.0 Linking Exception (with Corresponding Source)" licenseExceptionName GPL_CC_1_0 = "GPL Cooperation Commitment 1.0" +licenseExceptionName GStreamer_exception_2005 = "GStreamer Exception (2005)" +licenseExceptionName GStreamer_exception_2008 = "GStreamer Exception (2008)" licenseExceptionName I2p_gpl_java_exception = "i2p GPL+Java Exception" +licenseExceptionName KiCad_libraries_exception = "KiCad Libraries Exception" licenseExceptionName LGPL_3_0_linking_exception = "LGPL-3.0 Linking Exception" +licenseExceptionName Libpri_OpenH323_exception = "libpri OpenH323 exception" licenseExceptionName Libtool_exception = "Libtool Exception" licenseExceptionName Linux_syscall_note = "Linux Syscall Note" +licenseExceptionName LLGPL = "LLGPL Preamble" licenseExceptionName LLVM_exception = "LLVM Exception" licenseExceptionName LZMA_exception = "LZMA exception" licenseExceptionName Mif_exception = "Macros and Inline Functions Exception" @@ -182,15 +252,23 @@ licenseExceptionName OCCT_exception_1_0 = "Open CASCADE Exception 1.0" licenseExceptionName OpenJDK_assembly_exception_1_0 = "OpenJDK Assembly exception 1.0" licenseExceptionName Openvpn_openssl_exception = "OpenVPN OpenSSL Exception" licenseExceptionName PS_or_PDF_font_exception_20170817 = "PS/PDF font exception (2017-08-17)" +licenseExceptionName QPL_1_0_INRIA_2004_exception = "INRIA QPL 1.0 2004 variant exception" licenseExceptionName Qt_GPL_exception_1_0 = "Qt GPL exception 1.0" licenseExceptionName Qt_LGPL_exception_1_1 = "Qt LGPL exception 1.1" licenseExceptionName Qwt_exception_1_0 = "Qwt exception 1.0" +licenseExceptionName SANE_exception = "SANE Exception" licenseExceptionName SHL_2_0 = "Solderpad Hardware License v2.0" licenseExceptionName SHL_2_1 = "Solderpad Hardware License v2.1" +licenseExceptionName Stunnel_exception = "stunnel Exception" +licenseExceptionName SWI_exception = "SWI exception" licenseExceptionName Swift_exception = "Swift Exception" +licenseExceptionName Texinfo_exception = "Texinfo exception" licenseExceptionName U_boot_exception_2_0 = "U-Boot exception 2.0" +licenseExceptionName UBDL_exception = "Unmodified Binary Distribution exception" licenseExceptionName Universal_FOSS_exception_1_0 = "Universal FOSS Exception, Version 1.0" +licenseExceptionName Vsftpd_openssl_exception = "vsftpd OpenSSL exception" licenseExceptionName WxWindows_exception_3_1 = "WxWindows Library Exception 3.1" +licenseExceptionName X11vnc_openssl_exception = "x11vnc OpenSSL Exception" ------------------------------------------------------------------------------- -- Creation @@ -273,6 +351,49 @@ licenseExceptionIdList LicenseListVersion_3_16 = , Universal_FOSS_exception_1_0 ] ++ bulkOfLicenses +licenseExceptionIdList LicenseListVersion_3_23 = + [ Asterisk_exception + , Autoconf_exception_generic_3_0 + , Autoconf_exception_generic + , Autoconf_exception_macro + , Bison_exception_1_24 + , Cryptsetup_OpenSSL_exception + , Fmt_exception + , GCC_exception_2_0_note + , Gmsh_exception + , GNAT_exception + , GNOME_examples_exception + , GNU_compiler_exception + , GPL_3_0_interface_exception + , GPL_3_0_linking_exception + , GPL_3_0_linking_source_exception + , GPL_CC_1_0 + , GStreamer_exception_2005 + , GStreamer_exception_2008 + , KiCad_libraries_exception + , LGPL_3_0_linking_exception + , Libpri_OpenH323_exception + , LLGPL + , LLVM_exception + , OCaml_LGPL_linking_exception + , OpenJDK_assembly_exception_1_0 + , PS_or_PDF_font_exception_20170817 + , QPL_1_0_INRIA_2004_exception + , Qt_GPL_exception_1_0 + , Qt_LGPL_exception_1_1 + , SANE_exception + , SHL_2_0 + , SHL_2_1 + , Stunnel_exception + , SWI_exception + , Swift_exception + , Texinfo_exception + , UBDL_exception + , Universal_FOSS_exception_1_0 + , Vsftpd_openssl_exception + , X11vnc_openssl_exception + ] + ++ bulkOfLicenses -- | Create a 'LicenseExceptionId' from a 'String'. mkLicenseExceptionId :: LicenseListVersion -> String -> Maybe LicenseExceptionId @@ -282,6 +403,7 @@ mkLicenseExceptionId LicenseListVersion_3_6 s = Map.lookup s stringLookup_3_6 mkLicenseExceptionId LicenseListVersion_3_9 s = Map.lookup s stringLookup_3_9 mkLicenseExceptionId LicenseListVersion_3_10 s = Map.lookup s stringLookup_3_10 mkLicenseExceptionId LicenseListVersion_3_16 s = Map.lookup s stringLookup_3_16 +mkLicenseExceptionId LicenseListVersion_3_23 s = Map.lookup s stringLookup_3_23 stringLookup_3_0 :: Map String LicenseExceptionId stringLookup_3_0 = Map.fromList $ map (\i -> (licenseExceptionId i, i)) $ @@ -307,6 +429,10 @@ stringLookup_3_16 :: Map String LicenseExceptionId stringLookup_3_16 = Map.fromList $ map (\i -> (licenseExceptionId i, i)) $ licenseExceptionIdList LicenseListVersion_3_16 +stringLookup_3_23 :: Map String LicenseExceptionId +stringLookup_3_23 = Map.fromList $ map (\i -> (licenseExceptionId i, i)) $ + licenseExceptionIdList LicenseListVersion_3_23 + -- | License exceptions in all SPDX License lists bulkOfLicenses :: [LicenseExceptionId] bulkOfLicenses = diff --git a/Cabal-syntax/src/Distribution/SPDX/LicenseId.hs b/Cabal-syntax/src/Distribution/SPDX/LicenseId.hs index 22ea912f3e4..5af7fd86e8b 100644 --- a/Cabal-syntax/src/Distribution/SPDX/LicenseId.hs +++ b/Cabal-syntax/src/Distribution/SPDX/LicenseId.hs @@ -33,13 +33,16 @@ import qualified Text.PrettyPrint as Disp -- LicenseId ------------------------------------------------------------------------------- --- | SPDX License identifiers list v3.16 +-- | SPDX License identifiers list v3.23 data LicenseId = NullBSD -- ^ @0BSD@, BSD Zero Clause License | AAL -- ^ @AAL@, Attribution Assurance License | Abstyles -- ^ @Abstyles@, Abstyles License + | AdaCore_doc -- ^ @AdaCore-doc@, AdaCore Doc License, SPDX License List 3.23 | Adobe_2006 -- ^ @Adobe-2006@, Adobe Systems Incorporated Source Code License Agreement + | Adobe_Display_PostScript -- ^ @Adobe-Display-PostScript@, Adobe Display PostScript License, SPDX License List 3.23 | Adobe_Glyph -- ^ @Adobe-Glyph@, Adobe Glyph List License + | Adobe_Utopia -- ^ @Adobe-Utopia@, Adobe Utopia Font License, SPDX License List 3.23 | ADSL -- ^ @ADSL@, Amazon Digital Services License | AFL_1_1 -- ^ @AFL-1.1@, Academic Free License v1.1 | AFL_1_2 -- ^ @AFL-1.2@, Academic Free License v1.2 @@ -48,122 +51,151 @@ data LicenseId | AFL_3_0 -- ^ @AFL-3.0@, Academic Free License v3.0 | Afmparse -- ^ @Afmparse@, Afmparse License | AGPL_1_0 -- ^ @AGPL-1.0@, Affero General Public License v1.0, SPDX License List 3.0 - | AGPL_1_0_only -- ^ @AGPL-1.0-only@, Affero General Public License v1.0 only, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | AGPL_1_0_or_later -- ^ @AGPL-1.0-or-later@, Affero General Public License v1.0 or later, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | AGPL_1_0_only -- ^ @AGPL-1.0-only@, Affero General Public License v1.0 only, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | AGPL_1_0_or_later -- ^ @AGPL-1.0-or-later@, Affero General Public License v1.0 or later, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | AGPL_3_0_only -- ^ @AGPL-3.0-only@, GNU Affero General Public License v3.0 only | AGPL_3_0_or_later -- ^ @AGPL-3.0-or-later@, GNU Affero General Public License v3.0 or later | Aladdin -- ^ @Aladdin@, Aladdin Free Public License | AMDPLPA -- ^ @AMDPLPA@, AMD's plpa_map.c License + | AML_glslang -- ^ @AML-glslang@, AML glslang variant License, SPDX License List 3.23 | AML -- ^ @AML@, Apple MIT License | AMPAS -- ^ @AMPAS@, Academy of Motion Picture Arts and Sciences BSD - | ANTLR_PD_fallback -- ^ @ANTLR-PD-fallback@, ANTLR Software Rights Notice with license fallback, SPDX License List 3.16 + | ANTLR_PD_fallback -- ^ @ANTLR-PD-fallback@, ANTLR Software Rights Notice with license fallback, SPDX License List 3.16, SPDX License List 3.23 | ANTLR_PD -- ^ @ANTLR-PD@, ANTLR Software Rights Notice | Apache_1_0 -- ^ @Apache-1.0@, Apache License 1.0 | Apache_1_1 -- ^ @Apache-1.1@, Apache License 1.1 | Apache_2_0 -- ^ @Apache-2.0@, Apache License 2.0 | APAFML -- ^ @APAFML@, Adobe Postscript AFM License | APL_1_0 -- ^ @APL-1.0@, Adaptive Public License 1.0 - | App_s2p -- ^ @App-s2p@, App::s2p License, SPDX License List 3.16 + | App_s2p -- ^ @App-s2p@, App::s2p License, SPDX License List 3.16, SPDX License List 3.23 | APSL_1_0 -- ^ @APSL-1.0@, Apple Public Source License 1.0 | APSL_1_1 -- ^ @APSL-1.1@, Apple Public Source License 1.1 | APSL_1_2 -- ^ @APSL-1.2@, Apple Public Source License 1.2 | APSL_2_0 -- ^ @APSL-2.0@, Apple Public Source License 2.0 + | Arphic_1999 -- ^ @Arphic-1999@, Arphic Public License, SPDX License List 3.23 | Artistic_1_0_cl8 -- ^ @Artistic-1.0-cl8@, Artistic License 1.0 w/clause 8 | Artistic_1_0_Perl -- ^ @Artistic-1.0-Perl@, Artistic License 1.0 (Perl) | Artistic_1_0 -- ^ @Artistic-1.0@, Artistic License 1.0 | Artistic_2_0 -- ^ @Artistic-2.0@, Artistic License 2.0 + | ASWF_Digital_Assets_1_0 -- ^ @ASWF-Digital-Assets-1.0@, ASWF Digital Assets License version 1.0, SPDX License List 3.23 + | ASWF_Digital_Assets_1_1 -- ^ @ASWF-Digital-Assets-1.1@, ASWF Digital Assets License 1.1, SPDX License List 3.23 + | Baekmuk -- ^ @Baekmuk@, Baekmuk License, SPDX License List 3.23 | Bahyph -- ^ @Bahyph@, Bahyph License | Barr -- ^ @Barr@, Barr License + | Bcrypt_Solar_Designer -- ^ @bcrypt-Solar-Designer@, bcrypt Solar Designer License, SPDX License List 3.23 | Beerware -- ^ @Beerware@, Beerware License + | Bitstream_Charter -- ^ @Bitstream-Charter@, Bitstream Charter Font License, SPDX License List 3.23 + | Bitstream_Vera -- ^ @Bitstream-Vera@, Bitstream Vera Font License, SPDX License List 3.23 | BitTorrent_1_0 -- ^ @BitTorrent-1.0@, BitTorrent Open Source License v1.0 | BitTorrent_1_1 -- ^ @BitTorrent-1.1@, BitTorrent Open Source License v1.1 - | Blessing -- ^ @blessing@, SQLite Blessing, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | BlueOak_1_0_0 -- ^ @BlueOak-1.0.0@, Blue Oak Model License 1.0.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | Blessing -- ^ @blessing@, SQLite Blessing, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | BlueOak_1_0_0 -- ^ @BlueOak-1.0.0@, Blue Oak Model License 1.0.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Boehm_GC -- ^ @Boehm-GC@, Boehm-Demers-Weiser GC License, SPDX License List 3.23 | Borceux -- ^ @Borceux@, Borceux license + | Brian_Gladman_2_Clause -- ^ @Brian-Gladman-2-Clause@, Brian Gladman 2-Clause License, SPDX License List 3.23 + | Brian_Gladman_3_Clause -- ^ @Brian-Gladman-3-Clause@, Brian Gladman 3-Clause License, SPDX License List 3.23 | BSD_1_Clause -- ^ @BSD-1-Clause@, BSD 1-Clause License | BSD_2_Clause_FreeBSD -- ^ @BSD-2-Clause-FreeBSD@, BSD 2-Clause FreeBSD License, SPDX License List 3.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9 | BSD_2_Clause_NetBSD -- ^ @BSD-2-Clause-NetBSD@, BSD 2-Clause NetBSD License, SPDX License List 3.0, SPDX License List 3.2, SPDX License List 3.6 + | BSD_2_Clause_Darwin -- ^ @BSD-2-Clause-Darwin@, BSD 2-Clause - Ian Darwin variant, SPDX License List 3.23 | BSD_2_Clause_Patent -- ^ @BSD-2-Clause-Patent@, BSD-2-Clause Plus Patent License - | BSD_2_Clause_Views -- ^ @BSD-2-Clause-Views@, BSD 2-Clause with views sentence, SPDX License List 3.10, SPDX License List 3.16 + | BSD_2_Clause_Views -- ^ @BSD-2-Clause-Views@, BSD 2-Clause with views sentence, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | BSD_2_Clause -- ^ @BSD-2-Clause@, BSD 2-Clause "Simplified" License + | BSD_3_Clause_acpica -- ^ @BSD-3-Clause-acpica@, BSD 3-Clause acpica variant, SPDX License List 3.23 | BSD_3_Clause_Attribution -- ^ @BSD-3-Clause-Attribution@, BSD with attribution | BSD_3_Clause_Clear -- ^ @BSD-3-Clause-Clear@, BSD 3-Clause Clear License + | BSD_3_Clause_flex -- ^ @BSD-3-Clause-flex@, BSD 3-Clause Flex variant, SPDX License List 3.23 + | BSD_3_Clause_HP -- ^ @BSD-3-Clause-HP@, Hewlett-Packard BSD variant license, SPDX License List 3.23 | BSD_3_Clause_LBNL -- ^ @BSD-3-Clause-LBNL@, Lawrence Berkeley National Labs BSD variant license - | BSD_3_Clause_Modification -- ^ @BSD-3-Clause-Modification@, BSD 3-Clause Modification, SPDX License List 3.16 - | BSD_3_Clause_No_Military_License -- ^ @BSD-3-Clause-No-Military-License@, BSD 3-Clause No Military License, SPDX License List 3.16 + | BSD_3_Clause_Modification -- ^ @BSD-3-Clause-Modification@, BSD 3-Clause Modification, SPDX License List 3.16, SPDX License List 3.23 + | BSD_3_Clause_No_Military_License -- ^ @BSD-3-Clause-No-Military-License@, BSD 3-Clause No Military License, SPDX License List 3.16, SPDX License List 3.23 | BSD_3_Clause_No_Nuclear_License_2014 -- ^ @BSD-3-Clause-No-Nuclear-License-2014@, BSD 3-Clause No Nuclear License 2014 | BSD_3_Clause_No_Nuclear_License -- ^ @BSD-3-Clause-No-Nuclear-License@, BSD 3-Clause No Nuclear License | BSD_3_Clause_No_Nuclear_Warranty -- ^ @BSD-3-Clause-No-Nuclear-Warranty@, BSD 3-Clause No Nuclear Warranty - | BSD_3_Clause_Open_MPI -- ^ @BSD-3-Clause-Open-MPI@, BSD 3-Clause Open MPI variant, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | BSD_3_Clause_Open_MPI -- ^ @BSD-3-Clause-Open-MPI@, BSD 3-Clause Open MPI variant, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | BSD_3_Clause_Sun -- ^ @BSD-3-Clause-Sun@, BSD 3-Clause Sun Microsystems, SPDX License List 3.23 | BSD_3_Clause -- ^ @BSD-3-Clause@, BSD 3-Clause "New" or "Revised" License - | BSD_4_Clause_Shortened -- ^ @BSD-4-Clause-Shortened@, BSD 4 Clause Shortened, SPDX License List 3.16 + | BSD_4_Clause_Shortened -- ^ @BSD-4-Clause-Shortened@, BSD 4 Clause Shortened, SPDX License List 3.16, SPDX License List 3.23 | BSD_4_Clause_UC -- ^ @BSD-4-Clause-UC@, BSD-4-Clause (University of California-Specific) | BSD_4_Clause -- ^ @BSD-4-Clause@, BSD 4-Clause "Original" or "Old" License + | BSD_4_3RENO -- ^ @BSD-4.3RENO@, BSD 4.3 RENO License, SPDX License List 3.23 + | BSD_4_3TAHOE -- ^ @BSD-4.3TAHOE@, BSD 4.3 TAHOE License, SPDX License List 3.23 + | BSD_Advertising_Acknowledgement -- ^ @BSD-Advertising-Acknowledgement@, BSD Advertising Acknowledgement License, SPDX License List 3.23 + | BSD_Attribution_HPND_disclaimer -- ^ @BSD-Attribution-HPND-disclaimer@, BSD with Attribution and HPND disclaimer, SPDX License List 3.23 + | BSD_Inferno_Nettverk -- ^ @BSD-Inferno-Nettverk@, BSD-Inferno-Nettverk, SPDX License List 3.23 | BSD_Protection -- ^ @BSD-Protection@, BSD Protection License + | BSD_Source_beginning_file -- ^ @BSD-Source-beginning-file@, BSD Source Code Attribution - beginning of file variant, SPDX License List 3.23 | BSD_Source_Code -- ^ @BSD-Source-Code@, BSD Source Code Attribution + | BSD_Systemics_W3Works -- ^ @BSD-Systemics-W3Works@, Systemics W3Works BSD variant license, SPDX License List 3.23 + | BSD_Systemics -- ^ @BSD-Systemics@, Systemics BSD variant license, SPDX License List 3.23 | BSL_1_0 -- ^ @BSL-1.0@, Boost Software License 1.0 | Bzip2_1_0_5 -- ^ @bzip2-1.0.5@, bzip2 and libbzip2 License v1.0.5, SPDX License List 3.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10 - | BUSL_1_1 -- ^ @BUSL-1.1@, Business Source License 1.1, SPDX License List 3.16 + | BUSL_1_1 -- ^ @BUSL-1.1@, Business Source License 1.1, SPDX License List 3.16, SPDX License List 3.23 | Bzip2_1_0_6 -- ^ @bzip2-1.0.6@, bzip2 and libbzip2 License v1.0.6 - | C_UDA_1_0 -- ^ @C-UDA-1.0@, Computational Use of Data Agreement v1.0, SPDX License List 3.16 - | CAL_1_0_Combined_Work_Exception -- ^ @CAL-1.0-Combined-Work-Exception@, Cryptographic Autonomy License 1.0 (Combined Work Exception), SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | CAL_1_0 -- ^ @CAL-1.0@, Cryptographic Autonomy License 1.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | C_UDA_1_0 -- ^ @C-UDA-1.0@, Computational Use of Data Agreement v1.0, SPDX License List 3.16, SPDX License List 3.23 + | CAL_1_0_Combined_Work_Exception -- ^ @CAL-1.0-Combined-Work-Exception@, Cryptographic Autonomy License 1.0 (Combined Work Exception), SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | CAL_1_0 -- ^ @CAL-1.0@, Cryptographic Autonomy License 1.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Caldera_no_preamble -- ^ @Caldera-no-preamble@, Caldera License (without preamble), SPDX License List 3.23 | Caldera -- ^ @Caldera@, Caldera License | CATOSL_1_1 -- ^ @CATOSL-1.1@, Computer Associates Trusted Open Source License 1.1 | CC_BY_1_0 -- ^ @CC-BY-1.0@, Creative Commons Attribution 1.0 Generic | CC_BY_2_0 -- ^ @CC-BY-2.0@, Creative Commons Attribution 2.0 Generic - | CC_BY_2_5_AU -- ^ @CC-BY-2.5-AU@, Creative Commons Attribution 2.5 Australia, SPDX License List 3.16 + | CC_BY_2_5_AU -- ^ @CC-BY-2.5-AU@, Creative Commons Attribution 2.5 Australia, SPDX License List 3.16, SPDX License List 3.23 | CC_BY_2_5 -- ^ @CC-BY-2.5@, Creative Commons Attribution 2.5 Generic - | CC_BY_3_0_AT -- ^ @CC-BY-3.0-AT@, Creative Commons Attribution 3.0 Austria, SPDX License List 3.10, SPDX License List 3.16 - | CC_BY_3_0_DE -- ^ @CC-BY-3.0-DE@, Creative Commons Attribution 3.0 Germany, SPDX License List 3.16 - | CC_BY_3_0_NL -- ^ @CC-BY-3.0-NL@, Creative Commons Attribution 3.0 Netherlands, SPDX License List 3.16 - | CC_BY_3_0_US -- ^ @CC-BY-3.0-US@, Creative Commons Attribution 3.0 United States, SPDX License List 3.16 + | CC_BY_3_0_AT -- ^ @CC-BY-3.0-AT@, Creative Commons Attribution 3.0 Austria, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_3_0_AU -- ^ @CC-BY-3.0-AU@, Creative Commons Attribution 3.0 Australia, SPDX License List 3.23 + | CC_BY_3_0_DE -- ^ @CC-BY-3.0-DE@, Creative Commons Attribution 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_3_0_IGO -- ^ @CC-BY-3.0-IGO@, Creative Commons Attribution 3.0 IGO, SPDX License List 3.23 + | CC_BY_3_0_NL -- ^ @CC-BY-3.0-NL@, Creative Commons Attribution 3.0 Netherlands, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_3_0_US -- ^ @CC-BY-3.0-US@, Creative Commons Attribution 3.0 United States, SPDX License List 3.16, SPDX License List 3.23 | CC_BY_3_0 -- ^ @CC-BY-3.0@, Creative Commons Attribution 3.0 Unported | CC_BY_4_0 -- ^ @CC-BY-4.0@, Creative Commons Attribution 4.0 International | CC_BY_NC_1_0 -- ^ @CC-BY-NC-1.0@, Creative Commons Attribution Non Commercial 1.0 Generic | CC_BY_NC_2_0 -- ^ @CC-BY-NC-2.0@, Creative Commons Attribution Non Commercial 2.0 Generic | CC_BY_NC_2_5 -- ^ @CC-BY-NC-2.5@, Creative Commons Attribution Non Commercial 2.5 Generic - | CC_BY_NC_3_0_DE -- ^ @CC-BY-NC-3.0-DE@, Creative Commons Attribution Non Commercial 3.0 Germany, SPDX License List 3.16 + | CC_BY_NC_3_0_DE -- ^ @CC-BY-NC-3.0-DE@, Creative Commons Attribution Non Commercial 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23 | CC_BY_NC_3_0 -- ^ @CC-BY-NC-3.0@, Creative Commons Attribution Non Commercial 3.0 Unported | CC_BY_NC_4_0 -- ^ @CC-BY-NC-4.0@, Creative Commons Attribution Non Commercial 4.0 International | CC_BY_NC_ND_1_0 -- ^ @CC-BY-NC-ND-1.0@, Creative Commons Attribution Non Commercial No Derivatives 1.0 Generic | CC_BY_NC_ND_2_0 -- ^ @CC-BY-NC-ND-2.0@, Creative Commons Attribution Non Commercial No Derivatives 2.0 Generic | CC_BY_NC_ND_2_5 -- ^ @CC-BY-NC-ND-2.5@, Creative Commons Attribution Non Commercial No Derivatives 2.5 Generic - | CC_BY_NC_ND_3_0_DE -- ^ @CC-BY-NC-ND-3.0-DE@, Creative Commons Attribution Non Commercial No Derivatives 3.0 Germany, SPDX License List 3.16 - | CC_BY_NC_ND_3_0_IGO -- ^ @CC-BY-NC-ND-3.0-IGO@, Creative Commons Attribution Non Commercial No Derivatives 3.0 IGO, SPDX License List 3.10, SPDX License List 3.16 + | CC_BY_NC_ND_3_0_DE -- ^ @CC-BY-NC-ND-3.0-DE@, Creative Commons Attribution Non Commercial No Derivatives 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_NC_ND_3_0_IGO -- ^ @CC-BY-NC-ND-3.0-IGO@, Creative Commons Attribution Non Commercial No Derivatives 3.0 IGO, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | CC_BY_NC_ND_3_0 -- ^ @CC-BY-NC-ND-3.0@, Creative Commons Attribution Non Commercial No Derivatives 3.0 Unported | CC_BY_NC_ND_4_0 -- ^ @CC-BY-NC-ND-4.0@, Creative Commons Attribution Non Commercial No Derivatives 4.0 International | CC_BY_NC_SA_1_0 -- ^ @CC-BY-NC-SA-1.0@, Creative Commons Attribution Non Commercial Share Alike 1.0 Generic - | CC_BY_NC_SA_2_0_FR -- ^ @CC-BY-NC-SA-2.0-FR@, Creative Commons Attribution-NonCommercial-ShareAlike 2.0 France, SPDX License List 3.16 - | CC_BY_NC_SA_2_0_UK -- ^ @CC-BY-NC-SA-2.0-UK@, Creative Commons Attribution Non Commercial Share Alike 2.0 England and Wales, SPDX License List 3.16 + | CC_BY_NC_SA_2_0_DE -- ^ @CC-BY-NC-SA-2.0-DE@, Creative Commons Attribution Non Commercial Share Alike 2.0 Germany, SPDX License List 3.23 + | CC_BY_NC_SA_2_0_FR -- ^ @CC-BY-NC-SA-2.0-FR@, Creative Commons Attribution-NonCommercial-ShareAlike 2.0 France, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_NC_SA_2_0_UK -- ^ @CC-BY-NC-SA-2.0-UK@, Creative Commons Attribution Non Commercial Share Alike 2.0 England and Wales, SPDX License List 3.16, SPDX License List 3.23 | CC_BY_NC_SA_2_0 -- ^ @CC-BY-NC-SA-2.0@, Creative Commons Attribution Non Commercial Share Alike 2.0 Generic | CC_BY_NC_SA_2_5 -- ^ @CC-BY-NC-SA-2.5@, Creative Commons Attribution Non Commercial Share Alike 2.5 Generic - | CC_BY_NC_SA_3_0_DE -- ^ @CC-BY-NC-SA-3.0-DE@, Creative Commons Attribution Non Commercial Share Alike 3.0 Germany, SPDX License List 3.16 - | CC_BY_NC_SA_3_0_IGO -- ^ @CC-BY-NC-SA-3.0-IGO@, Creative Commons Attribution Non Commercial Share Alike 3.0 IGO, SPDX License List 3.16 + | CC_BY_NC_SA_3_0_DE -- ^ @CC-BY-NC-SA-3.0-DE@, Creative Commons Attribution Non Commercial Share Alike 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_NC_SA_3_0_IGO -- ^ @CC-BY-NC-SA-3.0-IGO@, Creative Commons Attribution Non Commercial Share Alike 3.0 IGO, SPDX License List 3.16, SPDX License List 3.23 | CC_BY_NC_SA_3_0 -- ^ @CC-BY-NC-SA-3.0@, Creative Commons Attribution Non Commercial Share Alike 3.0 Unported | CC_BY_NC_SA_4_0 -- ^ @CC-BY-NC-SA-4.0@, Creative Commons Attribution Non Commercial Share Alike 4.0 International | CC_BY_ND_1_0 -- ^ @CC-BY-ND-1.0@, Creative Commons Attribution No Derivatives 1.0 Generic | CC_BY_ND_2_0 -- ^ @CC-BY-ND-2.0@, Creative Commons Attribution No Derivatives 2.0 Generic | CC_BY_ND_2_5 -- ^ @CC-BY-ND-2.5@, Creative Commons Attribution No Derivatives 2.5 Generic - | CC_BY_ND_3_0_DE -- ^ @CC-BY-ND-3.0-DE@, Creative Commons Attribution No Derivatives 3.0 Germany, SPDX License List 3.16 + | CC_BY_ND_3_0_DE -- ^ @CC-BY-ND-3.0-DE@, Creative Commons Attribution No Derivatives 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23 | CC_BY_ND_3_0 -- ^ @CC-BY-ND-3.0@, Creative Commons Attribution No Derivatives 3.0 Unported | CC_BY_ND_4_0 -- ^ @CC-BY-ND-4.0@, Creative Commons Attribution No Derivatives 4.0 International | CC_BY_SA_1_0 -- ^ @CC-BY-SA-1.0@, Creative Commons Attribution Share Alike 1.0 Generic - | CC_BY_SA_2_0_UK -- ^ @CC-BY-SA-2.0-UK@, Creative Commons Attribution Share Alike 2.0 England and Wales, SPDX License List 3.16 + | CC_BY_SA_2_0_UK -- ^ @CC-BY-SA-2.0-UK@, Creative Commons Attribution Share Alike 2.0 England and Wales, SPDX License List 3.16, SPDX License List 3.23 | CC_BY_SA_2_0 -- ^ @CC-BY-SA-2.0@, Creative Commons Attribution Share Alike 2.0 Generic - | CC_BY_SA_2_1_JP -- ^ @CC-BY-SA-2.1-JP@, Creative Commons Attribution Share Alike 2.1 Japan, SPDX License List 3.16 + | CC_BY_SA_2_1_JP -- ^ @CC-BY-SA-2.1-JP@, Creative Commons Attribution Share Alike 2.1 Japan, SPDX License List 3.16, SPDX License List 3.23 | CC_BY_SA_2_5 -- ^ @CC-BY-SA-2.5@, Creative Commons Attribution Share Alike 2.5 Generic - | CC_BY_SA_3_0_AT -- ^ @CC-BY-SA-3.0-AT@, Creative Commons Attribution Share Alike 3.0 Austria, SPDX License List 3.10, SPDX License List 3.16 - | CC_BY_SA_3_0_DE -- ^ @CC-BY-SA-3.0-DE@, Creative Commons Attribution Share Alike 3.0 Germany, SPDX License List 3.16 + | CC_BY_SA_3_0_AT -- ^ @CC-BY-SA-3.0-AT@, Creative Commons Attribution Share Alike 3.0 Austria, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_SA_3_0_DE -- ^ @CC-BY-SA-3.0-DE@, Creative Commons Attribution Share Alike 3.0 Germany, SPDX License List 3.16, SPDX License List 3.23 + | CC_BY_SA_3_0_IGO -- ^ @CC-BY-SA-3.0-IGO@, Creative Commons Attribution-ShareAlike 3.0 IGO, SPDX License List 3.23 | CC_BY_SA_3_0 -- ^ @CC-BY-SA-3.0@, Creative Commons Attribution Share Alike 3.0 Unported | CC_BY_SA_4_0 -- ^ @CC-BY-SA-4.0@, Creative Commons Attribution Share Alike 4.0 International - | CC_PDDC -- ^ @CC-PDDC@, Creative Commons Public Domain Dedication and Certification, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | CC_PDDC -- ^ @CC-PDDC@, Creative Commons Public Domain Dedication and Certification, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | CC0_1_0 -- ^ @CC0-1.0@, Creative Commons Zero v1.0 Universal | CDDL_1_0 -- ^ @CDDL-1.0@, Common Development and Distribution License 1.0 | CDDL_1_1 -- ^ @CDDL-1.1@, Common Development and Distribution License 1.1 - | CDL_1_0 -- ^ @CDL-1.0@, Common Documentation License 1.0, SPDX License List 3.16 + | CDL_1_0 -- ^ @CDL-1.0@, Common Documentation License 1.0, SPDX License List 3.16, SPDX License List 3.23 | CDLA_Permissive_1_0 -- ^ @CDLA-Permissive-1.0@, Community Data License Agreement Permissive 1.0 - | CDLA_Permissive_2_0 -- ^ @CDLA-Permissive-2.0@, Community Data License Agreement Permissive 2.0, SPDX License List 3.16 + | CDLA_Permissive_2_0 -- ^ @CDLA-Permissive-2.0@, Community Data License Agreement Permissive 2.0, SPDX License List 3.16, SPDX License List 3.23 | CDLA_Sharing_1_0 -- ^ @CDLA-Sharing-1.0@, Community Data License Agreement Sharing 1.0 | CECILL_1_0 -- ^ @CECILL-1.0@, CeCILL Free Software License Agreement v1.0 | CECILL_1_1 -- ^ @CECILL-1.1@, CeCILL Free Software License Agreement v1.1 @@ -171,86 +203,105 @@ data LicenseId | CECILL_2_1 -- ^ @CECILL-2.1@, CeCILL Free Software License Agreement v2.1 | CECILL_B -- ^ @CECILL-B@, CeCILL-B Free Software License Agreement | CECILL_C -- ^ @CECILL-C@, CeCILL-C Free Software License Agreement - | CERN_OHL_1_1 -- ^ @CERN-OHL-1.1@, CERN Open Hardware Licence v1.1, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | CERN_OHL_1_2 -- ^ @CERN-OHL-1.2@, CERN Open Hardware Licence v1.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | CERN_OHL_P_2_0 -- ^ @CERN-OHL-P-2.0@, CERN Open Hardware Licence Version 2 - Permissive, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | CERN_OHL_S_2_0 -- ^ @CERN-OHL-S-2.0@, CERN Open Hardware Licence Version 2 - Strongly Reciprocal, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | CERN_OHL_W_2_0 -- ^ @CERN-OHL-W-2.0@, CERN Open Hardware Licence Version 2 - Weakly Reciprocal, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | CERN_OHL_1_1 -- ^ @CERN-OHL-1.1@, CERN Open Hardware Licence v1.1, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | CERN_OHL_1_2 -- ^ @CERN-OHL-1.2@, CERN Open Hardware Licence v1.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | CERN_OHL_P_2_0 -- ^ @CERN-OHL-P-2.0@, CERN Open Hardware Licence Version 2 - Permissive, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | CERN_OHL_S_2_0 -- ^ @CERN-OHL-S-2.0@, CERN Open Hardware Licence Version 2 - Strongly Reciprocal, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | CERN_OHL_W_2_0 -- ^ @CERN-OHL-W-2.0@, CERN Open Hardware Licence Version 2 - Weakly Reciprocal, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | CFITSIO -- ^ @CFITSIO@, CFITSIO License, SPDX License List 3.23 + | Check_cvs -- ^ @check-cvs@, check-cvs License, SPDX License List 3.23 + | Checkmk -- ^ @checkmk@, Checkmk License, SPDX License List 3.23 | ClArtistic -- ^ @ClArtistic@, Clarified Artistic License + | Clips -- ^ @Clips@, Clips License, SPDX License List 3.23 + | CMU_Mach_nodoc -- ^ @CMU-Mach-nodoc@, CMU Mach - no notices-in-documentation variant, SPDX License List 3.23 + | CMU_Mach -- ^ @CMU-Mach@, CMU Mach License, SPDX License List 3.23 | CNRI_Jython -- ^ @CNRI-Jython@, CNRI Jython License | CNRI_Python_GPL_Compatible -- ^ @CNRI-Python-GPL-Compatible@, CNRI Python Open Source GPL Compatible License Agreement | CNRI_Python -- ^ @CNRI-Python@, CNRI Python License - | COIL_1_0 -- ^ @COIL-1.0@, Copyfree Open Innovation License, SPDX License List 3.16 - | Community_Spec_1_0 -- ^ @Community-Spec-1.0@, Community Specification License 1.0, SPDX License List 3.16 + | COIL_1_0 -- ^ @COIL-1.0@, Copyfree Open Innovation License, SPDX License List 3.16, SPDX License List 3.23 + | Community_Spec_1_0 -- ^ @Community-Spec-1.0@, Community Specification License 1.0, SPDX License List 3.16, SPDX License List 3.23 | Condor_1_1 -- ^ @Condor-1.1@, Condor Public License v1.1 - | Copyleft_next_0_3_0 -- ^ @copyleft-next-0.3.0@, copyleft-next 0.3.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | Copyleft_next_0_3_1 -- ^ @copyleft-next-0.3.1@, copyleft-next 0.3.1, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | Copyleft_next_0_3_0 -- ^ @copyleft-next-0.3.0@, copyleft-next 0.3.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Copyleft_next_0_3_1 -- ^ @copyleft-next-0.3.1@, copyleft-next 0.3.1, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Cornell_Lossless_JPEG -- ^ @Cornell-Lossless-JPEG@, Cornell Lossless JPEG License, SPDX License List 3.23 | CPAL_1_0 -- ^ @CPAL-1.0@, Common Public Attribution License 1.0 | CPL_1_0 -- ^ @CPL-1.0@, Common Public License 1.0 | CPOL_1_02 -- ^ @CPOL-1.02@, Code Project Open License 1.02 + | Cronyx -- ^ @Cronyx@, Cronyx License, SPDX License List 3.23 | Crossword -- ^ @Crossword@, Crossword License | CrystalStacker -- ^ @CrystalStacker@, CrystalStacker License | CUA_OPL_1_0 -- ^ @CUA-OPL-1.0@, CUA Office Public License v1.0 | Cube -- ^ @Cube@, Cube License | Curl -- ^ @curl@, curl License | D_FSL_1_0 -- ^ @D-FSL-1.0@, Deutsche Freie Software Lizenz + | DEC_3_Clause -- ^ @DEC-3-Clause@, DEC 3-Clause License, SPDX License List 3.23 | Diffmark -- ^ @diffmark@, diffmark license - | DL_DE_BY_2_0 -- ^ @DL-DE-BY-2.0@, Data licence Germany – attribution – version 2.0, SPDX License List 3.16 + | DL_DE_BY_2_0 -- ^ @DL-DE-BY-2.0@, Data licence Germany – attribution – version 2.0, SPDX License List 3.16, SPDX License List 3.23 + | DL_DE_ZERO_2_0 -- ^ @DL-DE-ZERO-2.0@, Data licence Germany – zero – version 2.0, SPDX License List 3.23 | DOC -- ^ @DOC@, DOC License | Dotseqn -- ^ @Dotseqn@, Dotseqn License - | DRL_1_0 -- ^ @DRL-1.0@, Detection Rule License 1.0, SPDX License List 3.16 + | DRL_1_0 -- ^ @DRL-1.0@, Detection Rule License 1.0, SPDX License List 3.16, SPDX License List 3.23 + | DRL_1_1 -- ^ @DRL-1.1@, Detection Rule License 1.1, SPDX License List 3.23 | DSDP -- ^ @DSDP@, DSDP License + | Dtoa -- ^ @dtoa@, David M. Gay dtoa License, SPDX License List 3.23 | Dvipdfm -- ^ @dvipdfm@, dvipdfm License | ECL_1_0 -- ^ @ECL-1.0@, Educational Community License v1.0 | ECL_2_0 -- ^ @ECL-2.0@, Educational Community License v2.0 | EFL_1_0 -- ^ @EFL-1.0@, Eiffel Forum License v1.0 | EFL_2_0 -- ^ @EFL-2.0@, Eiffel Forum License v2.0 | EGenix -- ^ @eGenix@, eGenix.com Public License 1.1.0 - | Elastic_2_0 -- ^ @Elastic-2.0@, Elastic License 2.0, SPDX License List 3.16 + | Elastic_2_0 -- ^ @Elastic-2.0@, Elastic License 2.0, SPDX License List 3.16, SPDX License List 3.23 | Entessa -- ^ @Entessa@, Entessa Public License v1.0 - | EPICS -- ^ @EPICS@, EPICS Open License, SPDX License List 3.10, SPDX License List 3.16 + | EPICS -- ^ @EPICS@, EPICS Open License, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | EPL_1_0 -- ^ @EPL-1.0@, Eclipse Public License 1.0 | EPL_2_0 -- ^ @EPL-2.0@, Eclipse Public License 2.0 | ErlPL_1_1 -- ^ @ErlPL-1.1@, Erlang Public License v1.1 - | Etalab_2_0 -- ^ @etalab-2.0@, Etalab Open License 2.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | Etalab_2_0 -- ^ @etalab-2.0@, Etalab Open License 2.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | EUDatagrid -- ^ @EUDatagrid@, EU DataGrid Software License | EUPL_1_0 -- ^ @EUPL-1.0@, European Union Public License 1.0 | EUPL_1_1 -- ^ @EUPL-1.1@, European Union Public License 1.1 | EUPL_1_2 -- ^ @EUPL-1.2@, European Union Public License 1.2 | Eurosym -- ^ @Eurosym@, Eurosym License | Fair -- ^ @Fair@, Fair License - | FDK_AAC -- ^ @FDK-AAC@, Fraunhofer FDK AAC Codec Library, SPDX License List 3.16 + | FBM -- ^ @FBM@, Fuzzy Bitmap License, SPDX License List 3.23 + | FDK_AAC -- ^ @FDK-AAC@, Fraunhofer FDK AAC Codec Library, SPDX License List 3.16, SPDX License List 3.23 + | Ferguson_Twofish -- ^ @Ferguson-Twofish@, Ferguson Twofish License, SPDX License List 3.23 | Frameworx_1_0 -- ^ @Frameworx-1.0@, Frameworx Open License 1.0 - | FreeBSD_DOC -- ^ @FreeBSD-DOC@, FreeBSD Documentation License, SPDX License List 3.16 + | FreeBSD_DOC -- ^ @FreeBSD-DOC@, FreeBSD Documentation License, SPDX License List 3.16, SPDX License List 3.23 | FreeImage -- ^ @FreeImage@, FreeImage Public License v1.0 + | FSFAP_no_warranty_disclaimer -- ^ @FSFAP-no-warranty-disclaimer@, FSF All Permissive License (without Warranty), SPDX License List 3.23 | FSFAP -- ^ @FSFAP@, FSF All Permissive License + | FSFULLRWD -- ^ @FSFULLRWD@, FSF Unlimited License (With License Retention and Warranty Disclaimer), SPDX License List 3.23 | FSFULLR -- ^ @FSFULLR@, FSF Unlimited License (with License Retention) | FSFUL -- ^ @FSFUL@, FSF Unlimited License | FTL -- ^ @FTL@, Freetype Project License - | GD -- ^ @GD@, GD License, SPDX License List 3.16 - | GFDL_1_1_invariants_only -- ^ @GFDL-1.1-invariants-only@, GNU Free Documentation License v1.1 only - invariants, SPDX License List 3.10, SPDX License List 3.16 - | GFDL_1_1_invariants_or_later -- ^ @GFDL-1.1-invariants-or-later@, GNU Free Documentation License v1.1 or later - invariants, SPDX License List 3.10, SPDX License List 3.16 - | GFDL_1_1_no_invariants_only -- ^ @GFDL-1.1-no-invariants-only@, GNU Free Documentation License v1.1 only - no invariants, SPDX License List 3.10, SPDX License List 3.16 - | GFDL_1_1_no_invariants_or_later -- ^ @GFDL-1.1-no-invariants-or-later@, GNU Free Documentation License v1.1 or later - no invariants, SPDX License List 3.10, SPDX License List 3.16 + | Furuseth -- ^ @Furuseth@, Furuseth License, SPDX License List 3.23 + | Fwlw -- ^ @fwlw@, fwlw License, SPDX License List 3.23 + | GCR_docs -- ^ @GCR-docs@, Gnome GCR Documentation License, SPDX License List 3.23 + | GD -- ^ @GD@, GD License, SPDX License List 3.16, SPDX License List 3.23 + | GFDL_1_1_invariants_only -- ^ @GFDL-1.1-invariants-only@, GNU Free Documentation License v1.1 only - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | GFDL_1_1_invariants_or_later -- ^ @GFDL-1.1-invariants-or-later@, GNU Free Documentation License v1.1 or later - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | GFDL_1_1_no_invariants_only -- ^ @GFDL-1.1-no-invariants-only@, GNU Free Documentation License v1.1 only - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | GFDL_1_1_no_invariants_or_later -- ^ @GFDL-1.1-no-invariants-or-later@, GNU Free Documentation License v1.1 or later - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | GFDL_1_1_only -- ^ @GFDL-1.1-only@, GNU Free Documentation License v1.1 only | GFDL_1_1_or_later -- ^ @GFDL-1.1-or-later@, GNU Free Documentation License v1.1 or later - | GFDL_1_2_invariants_only -- ^ @GFDL-1.2-invariants-only@, GNU Free Documentation License v1.2 only - invariants, SPDX License List 3.10, SPDX License List 3.16 - | GFDL_1_2_invariants_or_later -- ^ @GFDL-1.2-invariants-or-later@, GNU Free Documentation License v1.2 or later - invariants, SPDX License List 3.10, SPDX License List 3.16 - | GFDL_1_2_no_invariants_only -- ^ @GFDL-1.2-no-invariants-only@, GNU Free Documentation License v1.2 only - no invariants, SPDX License List 3.10, SPDX License List 3.16 - | GFDL_1_2_no_invariants_or_later -- ^ @GFDL-1.2-no-invariants-or-later@, GNU Free Documentation License v1.2 or later - no invariants, SPDX License List 3.10, SPDX License List 3.16 + | GFDL_1_2_invariants_only -- ^ @GFDL-1.2-invariants-only@, GNU Free Documentation License v1.2 only - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | GFDL_1_2_invariants_or_later -- ^ @GFDL-1.2-invariants-or-later@, GNU Free Documentation License v1.2 or later - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | GFDL_1_2_no_invariants_only -- ^ @GFDL-1.2-no-invariants-only@, GNU Free Documentation License v1.2 only - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | GFDL_1_2_no_invariants_or_later -- ^ @GFDL-1.2-no-invariants-or-later@, GNU Free Documentation License v1.2 or later - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | GFDL_1_2_only -- ^ @GFDL-1.2-only@, GNU Free Documentation License v1.2 only | GFDL_1_2_or_later -- ^ @GFDL-1.2-or-later@, GNU Free Documentation License v1.2 or later - | GFDL_1_3_invariants_only -- ^ @GFDL-1.3-invariants-only@, GNU Free Documentation License v1.3 only - invariants, SPDX License List 3.10, SPDX License List 3.16 - | GFDL_1_3_invariants_or_later -- ^ @GFDL-1.3-invariants-or-later@, GNU Free Documentation License v1.3 or later - invariants, SPDX License List 3.10, SPDX License List 3.16 - | GFDL_1_3_no_invariants_only -- ^ @GFDL-1.3-no-invariants-only@, GNU Free Documentation License v1.3 only - no invariants, SPDX License List 3.10, SPDX License List 3.16 - | GFDL_1_3_no_invariants_or_later -- ^ @GFDL-1.3-no-invariants-or-later@, GNU Free Documentation License v1.3 or later - no invariants, SPDX License List 3.10, SPDX License List 3.16 + | GFDL_1_3_invariants_only -- ^ @GFDL-1.3-invariants-only@, GNU Free Documentation License v1.3 only - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | GFDL_1_3_invariants_or_later -- ^ @GFDL-1.3-invariants-or-later@, GNU Free Documentation License v1.3 or later - invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | GFDL_1_3_no_invariants_only -- ^ @GFDL-1.3-no-invariants-only@, GNU Free Documentation License v1.3 only - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | GFDL_1_3_no_invariants_or_later -- ^ @GFDL-1.3-no-invariants-or-later@, GNU Free Documentation License v1.3 or later - no invariants, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | GFDL_1_3_only -- ^ @GFDL-1.3-only@, GNU Free Documentation License v1.3 only | GFDL_1_3_or_later -- ^ @GFDL-1.3-or-later@, GNU Free Documentation License v1.3 or later | Giftware -- ^ @Giftware@, Giftware License | GL2PS -- ^ @GL2PS@, GL2PS License | Glide -- ^ @Glide@, 3dfx Glide License | Glulxe -- ^ @Glulxe@, Glulxe License - | GLWTPL -- ^ @GLWTPL@, Good Luck With That Public License, SPDX License List 3.10, SPDX License List 3.16 + | GLWTPL -- ^ @GLWTPL@, Good Luck With That Public License, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | Gnuplot -- ^ @gnuplot@, gnuplot License | GPL_1_0_only -- ^ @GPL-1.0-only@, GNU General Public License v1.0 only | GPL_1_0_or_later -- ^ @GPL-1.0-or-later@, GNU General Public License v1.0 or later @@ -258,31 +309,60 @@ data LicenseId | GPL_2_0_or_later -- ^ @GPL-2.0-or-later@, GNU General Public License v2.0 or later | GPL_3_0_only -- ^ @GPL-3.0-only@, GNU General Public License v3.0 only | GPL_3_0_or_later -- ^ @GPL-3.0-or-later@, GNU General Public License v3.0 or later + | Graphics_Gems -- ^ @Graphics-Gems@, Graphics Gems License, SPDX License List 3.23 | GSOAP_1_3b -- ^ @gSOAP-1.3b@, gSOAP Public License v1.3b + | Gtkbook -- ^ @gtkbook@, gtkbook License, SPDX License List 3.23 | HaskellReport -- ^ @HaskellReport@, Haskell Language Report License - | Hippocratic_2_1 -- ^ @Hippocratic-2.1@, Hippocratic License 2.1, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | HPND_sell_variant -- ^ @HPND-sell-variant@, Historical Permission Notice and Disclaimer - sell variant, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | Hdparm -- ^ @hdparm@, hdparm License, SPDX License List 3.23 + | Hippocratic_2_1 -- ^ @Hippocratic-2.1@, Hippocratic License 2.1, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | HP_1986 -- ^ @HP-1986@, Hewlett-Packard 1986 License, SPDX License List 3.23 + | HP_1989 -- ^ @HP-1989@, Hewlett-Packard 1989 License, SPDX License List 3.23 + | HPND_DEC -- ^ @HPND-DEC@, Historical Permission Notice and Disclaimer - DEC variant, SPDX License List 3.23 + | HPND_doc_sell -- ^ @HPND-doc-sell@, Historical Permission Notice and Disclaimer - documentation sell variant, SPDX License List 3.23 + | HPND_doc -- ^ @HPND-doc@, Historical Permission Notice and Disclaimer - documentation variant, SPDX License List 3.23 + | HPND_export_US_modify -- ^ @HPND-export-US-modify@, HPND with US Government export control warning and modification rqmt, SPDX License List 3.23 + | HPND_export_US -- ^ @HPND-export-US@, HPND with US Government export control warning, SPDX License List 3.23 + | HPND_Fenneberg_Livingston -- ^ @HPND-Fenneberg-Livingston@, Historical Permission Notice and Disclaimer - Fenneberg-Livingston variant, SPDX License List 3.23 + | HPND_INRIA_IMAG -- ^ @HPND-INRIA-IMAG@, Historical Permission Notice and Disclaimer - INRIA-IMAG variant, SPDX License List 3.23 + | HPND_Kevlin_Henney -- ^ @HPND-Kevlin-Henney@, Historical Permission Notice and Disclaimer - Kevlin Henney variant, SPDX License List 3.23 + | HPND_Markus_Kuhn -- ^ @HPND-Markus-Kuhn@, Historical Permission Notice and Disclaimer - Markus Kuhn variant, SPDX License List 3.23 + | HPND_MIT_disclaimer -- ^ @HPND-MIT-disclaimer@, Historical Permission Notice and Disclaimer with MIT disclaimer, SPDX License List 3.23 + | HPND_Pbmplus -- ^ @HPND-Pbmplus@, Historical Permission Notice and Disclaimer - Pbmplus variant, SPDX License List 3.23 + | HPND_sell_MIT_disclaimer_xserver -- ^ @HPND-sell-MIT-disclaimer-xserver@, Historical Permission Notice and Disclaimer - sell xserver variant with MIT disclaimer, SPDX License List 3.23 + | HPND_sell_regexpr -- ^ @HPND-sell-regexpr@, Historical Permission Notice and Disclaimer - sell regexpr variant, SPDX License List 3.23 + | HPND_sell_variant_MIT_disclaimer -- ^ @HPND-sell-variant-MIT-disclaimer@, HPND sell variant with MIT disclaimer, SPDX License List 3.23 + | HPND_sell_variant -- ^ @HPND-sell-variant@, Historical Permission Notice and Disclaimer - sell variant, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | HPND_UC -- ^ @HPND-UC@, Historical Permission Notice and Disclaimer - University of California variant, SPDX License List 3.23 | HPND -- ^ @HPND@, Historical Permission Notice and Disclaimer - | HTMLTIDY -- ^ @HTMLTIDY@, HTML Tidy License, SPDX License List 3.16 + | HTMLTIDY -- ^ @HTMLTIDY@, HTML Tidy License, SPDX License List 3.16, SPDX License List 3.23 | IBM_pibs -- ^ @IBM-pibs@, IBM PowerPC Initialization and Boot Software | ICU -- ^ @ICU@, ICU License + | IEC_Code_Components_EULA -- ^ @IEC-Code-Components-EULA@, IEC Code Components End-user licence agreement, SPDX License List 3.23 + | IJG_short -- ^ @IJG-short@, Independent JPEG Group License - short, SPDX License List 3.23 | IJG -- ^ @IJG@, Independent JPEG Group License | ImageMagick -- ^ @ImageMagick@, ImageMagick License | IMatix -- ^ @iMatix@, iMatix Standard Function Library Agreement | Imlib2 -- ^ @Imlib2@, Imlib2 License | Info_ZIP -- ^ @Info-ZIP@, Info-ZIP License + | Inner_Net_2_0 -- ^ @Inner-Net-2.0@, Inner Net License v2.0, SPDX License List 3.23 | Intel_ACPI -- ^ @Intel-ACPI@, Intel ACPI Software License Agreement | Intel -- ^ @Intel@, Intel Open Source License | Interbase_1_0 -- ^ @Interbase-1.0@, Interbase Public License v1.0 | IPA -- ^ @IPA@, IPA Font License | IPL_1_0 -- ^ @IPL-1.0@, IBM Public License v1.0 + | ISC_Veillard -- ^ @ISC-Veillard@, ISC Veillard variant, SPDX License List 3.23 | ISC -- ^ @ISC@, ISC License - | Jam -- ^ @Jam@, Jam License, SPDX License List 3.16 + | Jam -- ^ @Jam@, Jam License, SPDX License List 3.16, SPDX License List 3.23 | JasPer_2_0 -- ^ @JasPer-2.0@, JasPer License - | JPNIC -- ^ @JPNIC@, Japan Network Information Center License, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | JPL_image -- ^ @JPL-image@, JPL Image Use Policy, SPDX License List 3.23 + | JPNIC -- ^ @JPNIC@, Japan Network Information Center License, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | JSON -- ^ @JSON@, JSON License + | Kastrup -- ^ @Kastrup@, Kastrup License, SPDX License List 3.23 + | Kazlib -- ^ @Kazlib@, Kazlib License, SPDX License List 3.23 + | Knuth_CTAN -- ^ @Knuth-CTAN@, Knuth CTAN License, SPDX License List 3.23 | LAL_1_2 -- ^ @LAL-1.2@, Licence Art Libre 1.2 | LAL_1_3 -- ^ @LAL-1.3@, Licence Art Libre 1.3 + | Latex2e_translated_notice -- ^ @Latex2e-translated-notice@, Latex2e with translated notice permission, SPDX License List 3.23 | Latex2e -- ^ @Latex2e@, Latex2e License | Leptonica -- ^ @Leptonica@, Leptonica License | LGPL_2_0_only -- ^ @LGPL-2.0-only@, GNU Library General Public License v2 only @@ -292,15 +372,21 @@ data LicenseId | LGPL_3_0_only -- ^ @LGPL-3.0-only@, GNU Lesser General Public License v3.0 only | LGPL_3_0_or_later -- ^ @LGPL-3.0-or-later@, GNU Lesser General Public License v3.0 or later | LGPLLR -- ^ @LGPLLR@, Lesser General Public License For Linguistic Resources - | Libpng_2_0 -- ^ @libpng-2.0@, PNG Reference Library version 2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | Libpng_2_0 -- ^ @libpng-2.0@, PNG Reference Library version 2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | Libpng -- ^ @Libpng@, libpng License - | Libselinux_1_0 -- ^ @libselinux-1.0@, libselinux public domain notice, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | Libselinux_1_0 -- ^ @libselinux-1.0@, libselinux public domain notice, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | Libtiff -- ^ @libtiff@, libtiff License + | Libutil_David_Nugent -- ^ @libutil-David-Nugent@, libutil David Nugent License, SPDX License List 3.23 | LiLiQ_P_1_1 -- ^ @LiLiQ-P-1.1@, Licence Libre du Québec – Permissive version 1.1 | LiLiQ_R_1_1 -- ^ @LiLiQ-R-1.1@, Licence Libre du Québec – Réciprocité version 1.1 | LiLiQ_Rplus_1_1 -- ^ @LiLiQ-Rplus-1.1@, Licence Libre du Québec – Réciprocité forte version 1.1 - | Linux_man_pages_copyleft -- ^ @Linux-man-pages-copyleft@, Linux man-pages Copyleft, SPDX License List 3.16 - | Linux_OpenIB -- ^ @Linux-OpenIB@, Linux Kernel Variant of OpenIB.org license, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | Linux_man_pages_1_para -- ^ @Linux-man-pages-1-para@, Linux man-pages - 1 paragraph, SPDX License List 3.23 + | Linux_man_pages_copyleft_2_para -- ^ @Linux-man-pages-copyleft-2-para@, Linux man-pages Copyleft - 2 paragraphs, SPDX License List 3.23 + | Linux_man_pages_copyleft_var -- ^ @Linux-man-pages-copyleft-var@, Linux man-pages Copyleft Variant, SPDX License List 3.23 + | Linux_man_pages_copyleft -- ^ @Linux-man-pages-copyleft@, Linux man-pages Copyleft, SPDX License List 3.16, SPDX License List 3.23 + | Linux_OpenIB -- ^ @Linux-OpenIB@, Linux Kernel Variant of OpenIB.org license, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | LOOP -- ^ @LOOP@, Common Lisp LOOP License, SPDX License List 3.23 + | LPD_document -- ^ @LPD-document@, LPD Documentation License, SPDX License List 3.23 | LPL_1_02 -- ^ @LPL-1.02@, Lucent Public License v1.02 | LPL_1_0 -- ^ @LPL-1.0@, Lucent Public License Version 1.0 | LPPL_1_0 -- ^ @LPPL-1.0@, LaTeX Project Public License v1.0 @@ -308,44 +394,66 @@ data LicenseId | LPPL_1_2 -- ^ @LPPL-1.2@, LaTeX Project Public License v1.2 | LPPL_1_3a -- ^ @LPPL-1.3a@, LaTeX Project Public License v1.3a | LPPL_1_3c -- ^ @LPPL-1.3c@, LaTeX Project Public License v1.3c + | Lsof -- ^ @lsof@, lsof License, SPDX License List 3.23 + | Lucida_Bitmap_Fonts -- ^ @Lucida-Bitmap-Fonts@, Lucida Bitmap Fonts License, SPDX License List 3.23 + | LZMA_SDK_9_11_to_9_20 -- ^ @LZMA-SDK-9.11-to-9.20@, LZMA SDK License (versions 9.11 to 9.20), SPDX License List 3.23 + | LZMA_SDK_9_22 -- ^ @LZMA-SDK-9.22@, LZMA SDK License (versions 9.22 and beyond), SPDX License List 3.23 + | Mackerras_3_Clause_acknowledgment -- ^ @Mackerras-3-Clause-acknowledgment@, Mackerras 3-Clause - acknowledgment variant, SPDX License List 3.23 + | Mackerras_3_Clause -- ^ @Mackerras-3-Clause@, Mackerras 3-Clause License, SPDX License List 3.23 + | Magaz -- ^ @magaz@, magaz License, SPDX License List 3.23 + | Mailprio -- ^ @mailprio@, mailprio License, SPDX License List 3.23 | MakeIndex -- ^ @MakeIndex@, MakeIndex License + | Martin_Birgmeier -- ^ @Martin-Birgmeier@, Martin Birgmeier License, SPDX License List 3.23 + | McPhee_slideshow -- ^ @McPhee-slideshow@, McPhee Slideshow License, SPDX License List 3.23 + | Metamail -- ^ @metamail@, metamail License, SPDX License List 3.23 + | Minpack -- ^ @Minpack@, Minpack License, SPDX License List 3.23 | MirOS -- ^ @MirOS@, The MirOS Licence - | MIT_0 -- ^ @MIT-0@, MIT No Attribution, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | MIT_0 -- ^ @MIT-0@, MIT No Attribution, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | MIT_advertising -- ^ @MIT-advertising@, Enlightenment License (e16) | MIT_CMU -- ^ @MIT-CMU@, CMU License | MIT_enna -- ^ @MIT-enna@, enna License | MIT_feh -- ^ @MIT-feh@, feh License - | MIT_Modern_Variant -- ^ @MIT-Modern-Variant@, MIT License Modern Variant, SPDX License List 3.16 - | MIT_open_group -- ^ @MIT-open-group@, MIT Open Group variant, SPDX License List 3.16 + | MIT_Festival -- ^ @MIT-Festival@, MIT Festival Variant, SPDX License List 3.23 + | MIT_Modern_Variant -- ^ @MIT-Modern-Variant@, MIT License Modern Variant, SPDX License List 3.16, SPDX License List 3.23 + | MIT_open_group -- ^ @MIT-open-group@, MIT Open Group variant, SPDX License List 3.16, SPDX License List 3.23 + | MIT_testregex -- ^ @MIT-testregex@, MIT testregex Variant, SPDX License List 3.23 + | MIT_Wu -- ^ @MIT-Wu@, MIT Tom Wu Variant, SPDX License List 3.23 | MITNFA -- ^ @MITNFA@, MIT +no-false-attribs license | MIT -- ^ @MIT@, MIT License + | MMIXware -- ^ @MMIXware@, MMIXware License, SPDX License List 3.23 | Motosoto -- ^ @Motosoto@, Motosoto License + | MPEG_SSG -- ^ @MPEG-SSG@, MPEG Software Simulation, SPDX License List 3.23 + | Mpi_permissive -- ^ @mpi-permissive@, mpi Permissive License, SPDX License List 3.23 | Mpich2 -- ^ @mpich2@, mpich2 License | MPL_1_0 -- ^ @MPL-1.0@, Mozilla Public License 1.0 | MPL_1_1 -- ^ @MPL-1.1@, Mozilla Public License 1.1 | MPL_2_0_no_copyleft_exception -- ^ @MPL-2.0-no-copyleft-exception@, Mozilla Public License 2.0 (no copyleft exception) | MPL_2_0 -- ^ @MPL-2.0@, Mozilla Public License 2.0 + | Mplus -- ^ @mplus@, mplus Font License, SPDX License List 3.23 + | MS_LPL -- ^ @MS-LPL@, Microsoft Limited Public License, SPDX License List 3.23 | MS_PL -- ^ @MS-PL@, Microsoft Public License | MS_RL -- ^ @MS-RL@, Microsoft Reciprocal License | MTLL -- ^ @MTLL@, Matrix Template Library License - | MulanPSL_1_0 -- ^ @MulanPSL-1.0@, Mulan Permissive Software License, Version 1, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | MulanPSL_2_0 -- ^ @MulanPSL-2.0@, Mulan Permissive Software License, Version 2, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | MulanPSL_1_0 -- ^ @MulanPSL-1.0@, Mulan Permissive Software License, Version 1, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | MulanPSL_2_0 -- ^ @MulanPSL-2.0@, Mulan Permissive Software License, Version 2, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | Multics -- ^ @Multics@, Multics License | Mup -- ^ @Mup@, Mup License - | NAIST_2003 -- ^ @NAIST-2003@, Nara Institute of Science and Technology License (2003), SPDX License List 3.16 + | NAIST_2003 -- ^ @NAIST-2003@, Nara Institute of Science and Technology License (2003), SPDX License List 3.16, SPDX License List 3.23 | NASA_1_3 -- ^ @NASA-1.3@, NASA Open Source Agreement 1.3 | Naumen -- ^ @Naumen@, Naumen Public License | NBPL_1_0 -- ^ @NBPL-1.0@, Net Boolean Public License v1 - | NCGL_UK_2_0 -- ^ @NCGL-UK-2.0@, Non-Commercial Government Licence, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | NCGL_UK_2_0 -- ^ @NCGL-UK-2.0@, Non-Commercial Government Licence, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | NCSA -- ^ @NCSA@, University of Illinois/NCSA Open Source License | Net_SNMP -- ^ @Net-SNMP@, Net-SNMP License | NetCDF -- ^ @NetCDF@, NetCDF license | Newsletr -- ^ @Newsletr@, Newsletr License | NGPL -- ^ @NGPL@, Nethack General Public License - | NIST_PD_fallback -- ^ @NIST-PD-fallback@, NIST Public Domain Notice with license fallback, SPDX License List 3.10, SPDX License List 3.16 - | NIST_PD -- ^ @NIST-PD@, NIST Public Domain Notice, SPDX License List 3.10, SPDX License List 3.16 + | NICTA_1_0 -- ^ @NICTA-1.0@, NICTA Public Software License, Version 1.0, SPDX License List 3.23 + | NIST_PD_fallback -- ^ @NIST-PD-fallback@, NIST Public Domain Notice with license fallback, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | NIST_PD -- ^ @NIST-PD@, NIST Public Domain Notice, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | NIST_Software -- ^ @NIST-Software@, NIST Software License, SPDX License List 3.23 | NLOD_1_0 -- ^ @NLOD-1.0@, Norwegian Licence for Open Government Data (NLOD) 1.0 - | NLOD_2_0 -- ^ @NLOD-2.0@, Norwegian Licence for Open Government Data (NLOD) 2.0, SPDX License List 3.16 + | NLOD_2_0 -- ^ @NLOD-2.0@, Norwegian Licence for Open Government Data (NLOD) 2.0, SPDX License List 3.16, SPDX License List 3.23 | NLPL -- ^ @NLPL@, No Limit Public License | Nokia -- ^ @Nokia@, Nokia Open Source License | NOSL -- ^ @NOSL@, Netizen Open Source License @@ -354,25 +462,26 @@ data LicenseId | NPL_1_1 -- ^ @NPL-1.1@, Netscape Public License v1.1 | NPOSL_3_0 -- ^ @NPOSL-3.0@, Non-Profit Open Software License 3.0 | NRL -- ^ @NRL@, NRL License - | NTP_0 -- ^ @NTP-0@, NTP No Attribution, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | NTP_0 -- ^ @NTP-0@, NTP No Attribution, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | NTP -- ^ @NTP@, NTP License - | O_UDA_1_0 -- ^ @O-UDA-1.0@, Open Use of Data Agreement v1.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | O_UDA_1_0 -- ^ @O-UDA-1.0@, Open Use of Data Agreement v1.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | OCCT_PL -- ^ @OCCT-PL@, Open CASCADE Technology Public License | OCLC_2_0 -- ^ @OCLC-2.0@, OCLC Research Public License 2.0 | ODbL_1_0 -- ^ @ODbL-1.0@, Open Data Commons Open Database License v1.0 - | ODC_By_1_0 -- ^ @ODC-By-1.0@, Open Data Commons Attribution License v1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | OFL_1_0_no_RFN -- ^ @OFL-1.0-no-RFN@, SIL Open Font License 1.0 with no Reserved Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | OFL_1_0_RFN -- ^ @OFL-1.0-RFN@, SIL Open Font License 1.0 with Reserved Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | ODC_By_1_0 -- ^ @ODC-By-1.0@, Open Data Commons Attribution License v1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | OFFIS -- ^ @OFFIS@, OFFIS License, SPDX License List 3.23 + | OFL_1_0_no_RFN -- ^ @OFL-1.0-no-RFN@, SIL Open Font License 1.0 with no Reserved Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | OFL_1_0_RFN -- ^ @OFL-1.0-RFN@, SIL Open Font License 1.0 with Reserved Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | OFL_1_0 -- ^ @OFL-1.0@, SIL Open Font License 1.0 - | OFL_1_1_no_RFN -- ^ @OFL-1.1-no-RFN@, SIL Open Font License 1.1 with no Reserved Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | OFL_1_1_RFN -- ^ @OFL-1.1-RFN@, SIL Open Font License 1.1 with Reserved Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | OFL_1_1_no_RFN -- ^ @OFL-1.1-no-RFN@, SIL Open Font License 1.1 with no Reserved Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | OFL_1_1_RFN -- ^ @OFL-1.1-RFN@, SIL Open Font License 1.1 with Reserved Font Name, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | OFL_1_1 -- ^ @OFL-1.1@, SIL Open Font License 1.1 - | OGC_1_0 -- ^ @OGC-1.0@, OGC Software License, Version 1.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | OGDL_Taiwan_1_0 -- ^ @OGDL-Taiwan-1.0@, Taiwan Open Government Data License, version 1.0, SPDX License List 3.16 - | OGL_Canada_2_0 -- ^ @OGL-Canada-2.0@, Open Government Licence - Canada, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | OGL_UK_1_0 -- ^ @OGL-UK-1.0@, Open Government Licence v1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | OGL_UK_2_0 -- ^ @OGL-UK-2.0@, Open Government Licence v2.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | OGL_UK_3_0 -- ^ @OGL-UK-3.0@, Open Government Licence v3.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | OGC_1_0 -- ^ @OGC-1.0@, OGC Software License, Version 1.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | OGDL_Taiwan_1_0 -- ^ @OGDL-Taiwan-1.0@, Taiwan Open Government Data License, version 1.0, SPDX License List 3.16, SPDX License List 3.23 + | OGL_Canada_2_0 -- ^ @OGL-Canada-2.0@, Open Government Licence - Canada, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | OGL_UK_1_0 -- ^ @OGL-UK-1.0@, Open Government Licence v1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | OGL_UK_2_0 -- ^ @OGL-UK-2.0@, Open Government Licence v2.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | OGL_UK_3_0 -- ^ @OGL-UK-3.0@, Open Government Licence v3.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | OGTSL -- ^ @OGTSL@, Open Group Test Suite License | OLDAP_1_1 -- ^ @OLDAP-1.1@, Open LDAP Public License v1.1 | OLDAP_1_2 -- ^ @OLDAP-1.2@, Open LDAP Public License v1.2 @@ -390,31 +499,43 @@ data LicenseId | OLDAP_2_6 -- ^ @OLDAP-2.6@, Open LDAP Public License v2.6 | OLDAP_2_7 -- ^ @OLDAP-2.7@, Open LDAP Public License v2.7 | OLDAP_2_8 -- ^ @OLDAP-2.8@, Open LDAP Public License v2.8 + | OLFL_1_3 -- ^ @OLFL-1.3@, Open Logistics Foundation License Version 1.3, SPDX License List 3.23 | OML -- ^ @OML@, Open Market License + | OpenPBS_2_3 -- ^ @OpenPBS-2.3@, OpenPBS v2.3 Software License, SPDX License List 3.23 + | OpenSSL_standalone -- ^ @OpenSSL-standalone@, OpenSSL License - standalone, SPDX License List 3.23 | OpenSSL -- ^ @OpenSSL@, OpenSSL License + | OpenVision -- ^ @OpenVision@, OpenVision License, SPDX License List 3.23 | OPL_1_0 -- ^ @OPL-1.0@, Open Public License v1.0 - | OPUBL_1_0 -- ^ @OPUBL-1.0@, Open Publication License v1.0, SPDX License List 3.16 + | OPL_UK_3_0 -- ^ @OPL-UK-3.0@, United Kingdom Open Parliament Licence v3.0, SPDX License List 3.23 + | OPUBL_1_0 -- ^ @OPUBL-1.0@, Open Publication License v1.0, SPDX License List 3.16, SPDX License List 3.23 | OSET_PL_2_1 -- ^ @OSET-PL-2.1@, OSET Public License version 2.1 | OSL_1_0 -- ^ @OSL-1.0@, Open Software License 1.0 | OSL_1_1 -- ^ @OSL-1.1@, Open Software License 1.1 | OSL_2_0 -- ^ @OSL-2.0@, Open Software License 2.0 | OSL_2_1 -- ^ @OSL-2.1@, Open Software License 2.1 | OSL_3_0 -- ^ @OSL-3.0@, Open Software License 3.0 - | Parity_6_0_0 -- ^ @Parity-6.0.0@, The Parity Public License 6.0.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | Parity_7_0_0 -- ^ @Parity-7.0.0@, The Parity Public License 7.0.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | PADL -- ^ @PADL@, PADL License, SPDX License List 3.23 + | Parity_6_0_0 -- ^ @Parity-6.0.0@, The Parity Public License 6.0.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Parity_7_0_0 -- ^ @Parity-7.0.0@, The Parity Public License 7.0.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | PDDL_1_0 -- ^ @PDDL-1.0@, Open Data Commons Public Domain Dedication & License 1.0 | PHP_3_01 -- ^ @PHP-3.01@, PHP License v3.01 | PHP_3_0 -- ^ @PHP-3.0@, PHP License v3.0 + | Pixar -- ^ @Pixar@, Pixar License, SPDX License List 3.23 | Plexus -- ^ @Plexus@, Plexus Classworlds License - | PolyForm_Noncommercial_1_0_0 -- ^ @PolyForm-Noncommercial-1.0.0@, PolyForm Noncommercial License 1.0.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | PolyForm_Small_Business_1_0_0 -- ^ @PolyForm-Small-Business-1.0.0@, PolyForm Small Business License 1.0.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | Pnmstitch -- ^ @pnmstitch@, pnmstitch License, SPDX License List 3.23 + | PolyForm_Noncommercial_1_0_0 -- ^ @PolyForm-Noncommercial-1.0.0@, PolyForm Noncommercial License 1.0.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | PolyForm_Small_Business_1_0_0 -- ^ @PolyForm-Small-Business-1.0.0@, PolyForm Small Business License 1.0.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | PostgreSQL -- ^ @PostgreSQL@, PostgreSQL License - | PSF_2_0 -- ^ @PSF-2.0@, Python Software Foundation License 2.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | PSF_2_0 -- ^ @PSF-2.0@, Python Software Foundation License 2.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | Psfrag -- ^ @psfrag@, psfrag License | Psutils -- ^ @psutils@, psutils License + | Python_2_0_1 -- ^ @Python-2.0.1@, Python License 2.0.1, SPDX License List 3.23 | Python_2_0 -- ^ @Python-2.0@, Python License 2.0 + | Python_ldap -- ^ @python-ldap@, Python ldap License, SPDX License List 3.23 | Qhull -- ^ @Qhull@, Qhull License + | QPL_1_0_INRIA_2004 -- ^ @QPL-1.0-INRIA-2004@, Q Public License 1.0 - INRIA 2004 variant, SPDX License List 3.23 | QPL_1_0 -- ^ @QPL-1.0@, Q Public License 1.0 + | Radvd -- ^ @radvd@, radvd License, SPDX License List 3.23 | Rdisc -- ^ @Rdisc@, Rdisc License | RHeCos_1_1 -- ^ @RHeCos-1.1@, Red Hat eCos Public License v1.1 | RPL_1_1 -- ^ @RPL-1.1@, Reciprocal Public License 1.1 @@ -423,67 +544,99 @@ data LicenseId | RSA_MD -- ^ @RSA-MD@, RSA Message-Digest License | RSCPL -- ^ @RSCPL@, Ricoh Source Code Public License | Ruby -- ^ @Ruby@, Ruby License + | SAX_PD_2_0 -- ^ @SAX-PD-2.0@, Sax Public Domain Notice 2.0, SPDX License List 3.23 | SAX_PD -- ^ @SAX-PD@, Sax Public Domain Notice | Saxpath -- ^ @Saxpath@, Saxpath License | SCEA -- ^ @SCEA@, SCEA Shared Source License - | SchemeReport -- ^ @SchemeReport@, Scheme Language Report License, SPDX License List 3.16 - | Sendmail_8_23 -- ^ @Sendmail-8.23@, Sendmail License 8.23, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | SchemeReport -- ^ @SchemeReport@, Scheme Language Report License, SPDX License List 3.16, SPDX License List 3.23 + | Sendmail_8_23 -- ^ @Sendmail-8.23@, Sendmail License 8.23, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | Sendmail -- ^ @Sendmail@, Sendmail License | SGI_B_1_0 -- ^ @SGI-B-1.0@, SGI Free Software License B v1.0 | SGI_B_1_1 -- ^ @SGI-B-1.1@, SGI Free Software License B v1.1 | SGI_B_2_0 -- ^ @SGI-B-2.0@, SGI Free Software License B v2.0 - | SHL_0_51 -- ^ @SHL-0.51@, Solderpad Hardware License, Version 0.51, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | SHL_0_5 -- ^ @SHL-0.5@, Solderpad Hardware License v0.5, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | SGI_OpenGL -- ^ @SGI-OpenGL@, SGI OpenGL License, SPDX License List 3.23 + | SGP4 -- ^ @SGP4@, SGP4 Permission Notice, SPDX License List 3.23 + | SHL_0_51 -- ^ @SHL-0.51@, Solderpad Hardware License, Version 0.51, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | SHL_0_5 -- ^ @SHL-0.5@, Solderpad Hardware License v0.5, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | SimPL_2_0 -- ^ @SimPL-2.0@, Simple Public License 2.0 | SISSL_1_2 -- ^ @SISSL-1.2@, Sun Industry Standards Source License v1.2 | SISSL -- ^ @SISSL@, Sun Industry Standards Source License v1.1 | Sleepycat -- ^ @Sleepycat@, Sleepycat License + | SL -- ^ @SL@, SL License, SPDX License List 3.23 | SMLNJ -- ^ @SMLNJ@, Standard ML of New Jersey License | SMPPL -- ^ @SMPPL@, Secure Messaging Protocol Public License | SNIA -- ^ @SNIA@, SNIA Public License 1.1 + | Snprintf -- ^ @snprintf@, snprintf License, SPDX License List 3.23 + | SoftSurfer -- ^ @softSurfer@, softSurfer License, SPDX License List 3.23 + | Soundex -- ^ @Soundex@, Soundex License, SPDX License List 3.23 | Spencer_86 -- ^ @Spencer-86@, Spencer License 86 | Spencer_94 -- ^ @Spencer-94@, Spencer License 94 | Spencer_99 -- ^ @Spencer-99@, Spencer License 99 | SPL_1_0 -- ^ @SPL-1.0@, Sun Public License v1.0 - | SSH_OpenSSH -- ^ @SSH-OpenSSH@, SSH OpenSSH license, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | SSH_short -- ^ @SSH-short@, SSH short notice, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | SSPL_1_0 -- ^ @SSPL-1.0@, Server Side Public License, v 1, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | Ssh_keyscan -- ^ @ssh-keyscan@, ssh-keyscan License, SPDX License List 3.23 + | SSH_OpenSSH -- ^ @SSH-OpenSSH@, SSH OpenSSH license, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | SSH_short -- ^ @SSH-short@, SSH short notice, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | SSLeay_standalone -- ^ @SSLeay-standalone@, SSLeay License - standalone, SPDX License List 3.23 + | SSPL_1_0 -- ^ @SSPL-1.0@, Server Side Public License, v 1, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | SugarCRM_1_1_3 -- ^ @SugarCRM-1.1.3@, SugarCRM Public License v1.1.3 + | Sun_PPP -- ^ @Sun-PPP@, Sun PPP License, SPDX License List 3.23 + | SunPro -- ^ @SunPro@, SunPro License, SPDX License List 3.23 | SWL -- ^ @SWL@, Scheme Widget Library (SWL) Software License Agreement - | TAPR_OHL_1_0 -- ^ @TAPR-OHL-1.0@, TAPR Open Hardware License v1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | Swrule -- ^ @swrule@, swrule License, SPDX License List 3.23 + | Symlinks -- ^ @Symlinks@, Symlinks License, SPDX License List 3.23 + | TAPR_OHL_1_0 -- ^ @TAPR-OHL-1.0@, TAPR Open Hardware License v1.0, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 | TCL -- ^ @TCL@, TCL/TK License | TCP_wrappers -- ^ @TCP-wrappers@, TCP Wrappers License + | TermReadKey -- ^ @TermReadKey@, TermReadKey License, SPDX License List 3.23 + | TGPPL_1_0 -- ^ @TGPPL-1.0@, Transitive Grace Period Public Licence 1.0, SPDX License List 3.23 | TMate -- ^ @TMate@, TMate Open Source License | TORQUE_1_1 -- ^ @TORQUE-1.1@, TORQUE v2.5+ Software License v1.1 | TOSL -- ^ @TOSL@, Trusster Open Source License - | TU_Berlin_1_0 -- ^ @TU-Berlin-1.0@, Technische Universitaet Berlin License 1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | TU_Berlin_2_0 -- ^ @TU-Berlin-2.0@, Technische Universitaet Berlin License 2.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 - | UCL_1_0 -- ^ @UCL-1.0@, Upstream Compatibility License v1.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16 + | TPDL -- ^ @TPDL@, Time::ParseDate License, SPDX License List 3.23 + | TPL_1_0 -- ^ @TPL-1.0@, THOR Public License 1.0, SPDX License List 3.23 + | TTWL -- ^ @TTWL@, Text-Tabs+Wrap License, SPDX License List 3.23 + | TTYP0 -- ^ @TTYP0@, TTYP0 License, SPDX License List 3.23 + | TU_Berlin_1_0 -- ^ @TU-Berlin-1.0@, Technische Universitaet Berlin License 1.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | TU_Berlin_2_0 -- ^ @TU-Berlin-2.0@, Technische Universitaet Berlin License 2.0, SPDX License List 3.2, SPDX License List 3.6, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | UCAR -- ^ @UCAR@, UCAR License, SPDX License List 3.23 + | UCL_1_0 -- ^ @UCL-1.0@, Upstream Compatibility License v1.0, SPDX License List 3.9, SPDX License List 3.10, SPDX License List 3.16, SPDX License List 3.23 + | Ulem -- ^ @ulem@, ulem License, SPDX License List 3.23 + | UMich_Merit -- ^ @UMich-Merit@, Michigan/Merit Networks License, SPDX License List 3.23 + | Unicode_3_0 -- ^ @Unicode-3.0@, Unicode License v3, SPDX License List 3.23 | Unicode_DFS_2015 -- ^ @Unicode-DFS-2015@, Unicode License Agreement - Data Files and Software (2015) | Unicode_DFS_2016 -- ^ @Unicode-DFS-2016@, Unicode License Agreement - Data Files and Software (2016) | Unicode_TOU -- ^ @Unicode-TOU@, Unicode Terms of Use + | UnixCrypt -- ^ @UnixCrypt@, UnixCrypt License, SPDX License List 3.23 | Unlicense -- ^ @Unlicense@, The Unlicense | UPL_1_0 -- ^ @UPL-1.0@, Universal Permissive License v1.0 + | URT_RLE -- ^ @URT-RLE@, Utah Raster Toolkit Run Length Encoded License, SPDX License List 3.23 | Vim -- ^ @Vim@, Vim License | VOSTROM -- ^ @VOSTROM@, VOSTROM Public License for Open Source | VSL_1_0 -- ^ @VSL-1.0@, Vovida Software License v1.0 | W3C_19980720 -- ^ @W3C-19980720@, W3C Software Notice and License (1998-07-20) | W3C_20150513 -- ^ @W3C-20150513@, W3C Software Notice and Document License (2015-05-13) | W3C -- ^ @W3C@, W3C Software Notice and License (2002-12-31) + | W3m -- ^ @w3m@, w3m License, SPDX License List 3.23 | Watcom_1_0 -- ^ @Watcom-1.0@, Sybase Open Watcom Public License 1.0 + | Widget_Workshop -- ^ @Widget-Workshop@, Widget Workshop License, SPDX License List 3.23 | Wsuipa -- ^ @Wsuipa@, Wsuipa License | WTFPL -- ^ @WTFPL@, Do What The F*ck You Want To Public License - | X11_distribute_modifications_variant -- ^ @X11-distribute-modifications-variant@, X11 License Distribution Modification Variant, SPDX License List 3.16 + | X11_distribute_modifications_variant -- ^ @X11-distribute-modifications-variant@, X11 License Distribution Modification Variant, SPDX License List 3.16, SPDX License List 3.23 | X11 -- ^ @X11@, X11 License + | Xdebug_1_03 -- ^ @Xdebug-1.03@, Xdebug License v 1.03, SPDX License List 3.23 | Xerox -- ^ @Xerox@, Xerox License + | Xfig -- ^ @Xfig@, Xfig License, SPDX License List 3.23 | XFree86_1_1 -- ^ @XFree86-1.1@, XFree86 License 1.1 | Xinetd -- ^ @xinetd@, xinetd License + | Xkeyboard_config_Zinoviev -- ^ @xkeyboard-config-Zinoviev@, xkeyboard-config Zinoviev License, SPDX License List 3.23 + | Xlock -- ^ @xlock@, xlock License, SPDX License List 3.23 | Xnet -- ^ @Xnet@, X.Net License | Xpp -- ^ @xpp@, XPP License | XSkat -- ^ @XSkat@, XSkat License | YPL_1_0 -- ^ @YPL-1.0@, Yahoo! Public License v1.0 | YPL_1_1 -- ^ @YPL-1.1@, Yahoo! Public License v1.1 | Zed -- ^ @Zed@, Zed License + | Zeeff -- ^ @Zeeff@, Zeeff License, SPDX License List 3.23 | Zend_2_0 -- ^ @Zend-2.0@, Zend License v2.0 | Zimbra_1_3 -- ^ @Zimbra-1.3@, Zimbra Public License v1.3 | Zimbra_1_4 -- ^ @Zimbra-1.4@, Zimbra Public License v1.4 @@ -577,8 +730,11 @@ licenseId :: LicenseId -> String licenseId NullBSD = "0BSD" licenseId AAL = "AAL" licenseId Abstyles = "Abstyles" +licenseId AdaCore_doc = "AdaCore-doc" licenseId Adobe_2006 = "Adobe-2006" +licenseId Adobe_Display_PostScript = "Adobe-Display-PostScript" licenseId Adobe_Glyph = "Adobe-Glyph" +licenseId Adobe_Utopia = "Adobe-Utopia" licenseId ADSL = "ADSL" licenseId AFL_1_1 = "AFL-1.1" licenseId AFL_1_2 = "AFL-1.2" @@ -593,6 +749,7 @@ licenseId AGPL_3_0_only = "AGPL-3.0-only" licenseId AGPL_3_0_or_later = "AGPL-3.0-or-later" licenseId Aladdin = "Aladdin" licenseId AMDPLPA = "AMDPLPA" +licenseId AML_glslang = "AML-glslang" licenseId AML = "AML" licenseId AMPAS = "AMPAS" licenseId ANTLR_PD_fallback = "ANTLR-PD-fallback" @@ -607,26 +764,40 @@ licenseId APSL_1_0 = "APSL-1.0" licenseId APSL_1_1 = "APSL-1.1" licenseId APSL_1_2 = "APSL-1.2" licenseId APSL_2_0 = "APSL-2.0" +licenseId Arphic_1999 = "Arphic-1999" licenseId Artistic_1_0_cl8 = "Artistic-1.0-cl8" licenseId Artistic_1_0_Perl = "Artistic-1.0-Perl" licenseId Artistic_1_0 = "Artistic-1.0" licenseId Artistic_2_0 = "Artistic-2.0" +licenseId ASWF_Digital_Assets_1_0 = "ASWF-Digital-Assets-1.0" +licenseId ASWF_Digital_Assets_1_1 = "ASWF-Digital-Assets-1.1" +licenseId Baekmuk = "Baekmuk" licenseId Bahyph = "Bahyph" licenseId Barr = "Barr" +licenseId Bcrypt_Solar_Designer = "bcrypt-Solar-Designer" licenseId Beerware = "Beerware" +licenseId Bitstream_Charter = "Bitstream-Charter" +licenseId Bitstream_Vera = "Bitstream-Vera" licenseId BitTorrent_1_0 = "BitTorrent-1.0" licenseId BitTorrent_1_1 = "BitTorrent-1.1" licenseId Blessing = "blessing" licenseId BlueOak_1_0_0 = "BlueOak-1.0.0" +licenseId Boehm_GC = "Boehm-GC" licenseId Borceux = "Borceux" +licenseId Brian_Gladman_2_Clause = "Brian-Gladman-2-Clause" +licenseId Brian_Gladman_3_Clause = "Brian-Gladman-3-Clause" licenseId BSD_1_Clause = "BSD-1-Clause" licenseId BSD_2_Clause_FreeBSD = "BSD-2-Clause-FreeBSD" licenseId BSD_2_Clause_NetBSD = "BSD-2-Clause-NetBSD" +licenseId BSD_2_Clause_Darwin = "BSD-2-Clause-Darwin" licenseId BSD_2_Clause_Patent = "BSD-2-Clause-Patent" licenseId BSD_2_Clause_Views = "BSD-2-Clause-Views" licenseId BSD_2_Clause = "BSD-2-Clause" +licenseId BSD_3_Clause_acpica = "BSD-3-Clause-acpica" licenseId BSD_3_Clause_Attribution = "BSD-3-Clause-Attribution" licenseId BSD_3_Clause_Clear = "BSD-3-Clause-Clear" +licenseId BSD_3_Clause_flex = "BSD-3-Clause-flex" +licenseId BSD_3_Clause_HP = "BSD-3-Clause-HP" licenseId BSD_3_Clause_LBNL = "BSD-3-Clause-LBNL" licenseId BSD_3_Clause_Modification = "BSD-3-Clause-Modification" licenseId BSD_3_Clause_No_Military_License = "BSD-3-Clause-No-Military-License" @@ -634,12 +805,21 @@ licenseId BSD_3_Clause_No_Nuclear_License_2014 = "BSD-3-Clause-No-Nuclear-Licens licenseId BSD_3_Clause_No_Nuclear_License = "BSD-3-Clause-No-Nuclear-License" licenseId BSD_3_Clause_No_Nuclear_Warranty = "BSD-3-Clause-No-Nuclear-Warranty" licenseId BSD_3_Clause_Open_MPI = "BSD-3-Clause-Open-MPI" +licenseId BSD_3_Clause_Sun = "BSD-3-Clause-Sun" licenseId BSD_3_Clause = "BSD-3-Clause" licenseId BSD_4_Clause_Shortened = "BSD-4-Clause-Shortened" licenseId BSD_4_Clause_UC = "BSD-4-Clause-UC" licenseId BSD_4_Clause = "BSD-4-Clause" +licenseId BSD_4_3RENO = "BSD-4.3RENO" +licenseId BSD_4_3TAHOE = "BSD-4.3TAHOE" +licenseId BSD_Advertising_Acknowledgement = "BSD-Advertising-Acknowledgement" +licenseId BSD_Attribution_HPND_disclaimer = "BSD-Attribution-HPND-disclaimer" +licenseId BSD_Inferno_Nettverk = "BSD-Inferno-Nettverk" licenseId BSD_Protection = "BSD-Protection" +licenseId BSD_Source_beginning_file = "BSD-Source-beginning-file" licenseId BSD_Source_Code = "BSD-Source-Code" +licenseId BSD_Systemics_W3Works = "BSD-Systemics-W3Works" +licenseId BSD_Systemics = "BSD-Systemics" licenseId BSL_1_0 = "BSL-1.0" licenseId Bzip2_1_0_5 = "bzip2-1.0.5" licenseId BUSL_1_1 = "BUSL-1.1" @@ -647,6 +827,7 @@ licenseId Bzip2_1_0_6 = "bzip2-1.0.6" licenseId C_UDA_1_0 = "C-UDA-1.0" licenseId CAL_1_0_Combined_Work_Exception = "CAL-1.0-Combined-Work-Exception" licenseId CAL_1_0 = "CAL-1.0" +licenseId Caldera_no_preamble = "Caldera-no-preamble" licenseId Caldera = "Caldera" licenseId CATOSL_1_1 = "CATOSL-1.1" licenseId CC_BY_1_0 = "CC-BY-1.0" @@ -654,7 +835,9 @@ licenseId CC_BY_2_0 = "CC-BY-2.0" licenseId CC_BY_2_5_AU = "CC-BY-2.5-AU" licenseId CC_BY_2_5 = "CC-BY-2.5" licenseId CC_BY_3_0_AT = "CC-BY-3.0-AT" +licenseId CC_BY_3_0_AU = "CC-BY-3.0-AU" licenseId CC_BY_3_0_DE = "CC-BY-3.0-DE" +licenseId CC_BY_3_0_IGO = "CC-BY-3.0-IGO" licenseId CC_BY_3_0_NL = "CC-BY-3.0-NL" licenseId CC_BY_3_0_US = "CC-BY-3.0-US" licenseId CC_BY_3_0 = "CC-BY-3.0" @@ -673,6 +856,7 @@ licenseId CC_BY_NC_ND_3_0_IGO = "CC-BY-NC-ND-3.0-IGO" licenseId CC_BY_NC_ND_3_0 = "CC-BY-NC-ND-3.0" licenseId CC_BY_NC_ND_4_0 = "CC-BY-NC-ND-4.0" licenseId CC_BY_NC_SA_1_0 = "CC-BY-NC-SA-1.0" +licenseId CC_BY_NC_SA_2_0_DE = "CC-BY-NC-SA-2.0-DE" licenseId CC_BY_NC_SA_2_0_FR = "CC-BY-NC-SA-2.0-FR" licenseId CC_BY_NC_SA_2_0_UK = "CC-BY-NC-SA-2.0-UK" licenseId CC_BY_NC_SA_2_0 = "CC-BY-NC-SA-2.0" @@ -694,6 +878,7 @@ licenseId CC_BY_SA_2_1_JP = "CC-BY-SA-2.1-JP" licenseId CC_BY_SA_2_5 = "CC-BY-SA-2.5" licenseId CC_BY_SA_3_0_AT = "CC-BY-SA-3.0-AT" licenseId CC_BY_SA_3_0_DE = "CC-BY-SA-3.0-DE" +licenseId CC_BY_SA_3_0_IGO = "CC-BY-SA-3.0-IGO" licenseId CC_BY_SA_3_0 = "CC-BY-SA-3.0" licenseId CC_BY_SA_4_0 = "CC-BY-SA-4.0" licenseId CC_PDDC = "CC-PDDC" @@ -715,7 +900,13 @@ licenseId CERN_OHL_1_2 = "CERN-OHL-1.2" licenseId CERN_OHL_P_2_0 = "CERN-OHL-P-2.0" licenseId CERN_OHL_S_2_0 = "CERN-OHL-S-2.0" licenseId CERN_OHL_W_2_0 = "CERN-OHL-W-2.0" +licenseId CFITSIO = "CFITSIO" +licenseId Check_cvs = "check-cvs" +licenseId Checkmk = "checkmk" licenseId ClArtistic = "ClArtistic" +licenseId Clips = "Clips" +licenseId CMU_Mach_nodoc = "CMU-Mach-nodoc" +licenseId CMU_Mach = "CMU-Mach" licenseId CNRI_Jython = "CNRI-Jython" licenseId CNRI_Python_GPL_Compatible = "CNRI-Python-GPL-Compatible" licenseId CNRI_Python = "CNRI-Python" @@ -724,21 +915,27 @@ licenseId Community_Spec_1_0 = "Community-Spec-1.0" licenseId Condor_1_1 = "Condor-1.1" licenseId Copyleft_next_0_3_0 = "copyleft-next-0.3.0" licenseId Copyleft_next_0_3_1 = "copyleft-next-0.3.1" +licenseId Cornell_Lossless_JPEG = "Cornell-Lossless-JPEG" licenseId CPAL_1_0 = "CPAL-1.0" licenseId CPL_1_0 = "CPL-1.0" licenseId CPOL_1_02 = "CPOL-1.02" +licenseId Cronyx = "Cronyx" licenseId Crossword = "Crossword" licenseId CrystalStacker = "CrystalStacker" licenseId CUA_OPL_1_0 = "CUA-OPL-1.0" licenseId Cube = "Cube" licenseId Curl = "curl" licenseId D_FSL_1_0 = "D-FSL-1.0" +licenseId DEC_3_Clause = "DEC-3-Clause" licenseId Diffmark = "diffmark" licenseId DL_DE_BY_2_0 = "DL-DE-BY-2.0" +licenseId DL_DE_ZERO_2_0 = "DL-DE-ZERO-2.0" licenseId DOC = "DOC" licenseId Dotseqn = "Dotseqn" licenseId DRL_1_0 = "DRL-1.0" +licenseId DRL_1_1 = "DRL-1.1" licenseId DSDP = "DSDP" +licenseId Dtoa = "dtoa" licenseId Dvipdfm = "dvipdfm" licenseId ECL_1_0 = "ECL-1.0" licenseId ECL_2_0 = "ECL-2.0" @@ -758,14 +955,21 @@ licenseId EUPL_1_1 = "EUPL-1.1" licenseId EUPL_1_2 = "EUPL-1.2" licenseId Eurosym = "Eurosym" licenseId Fair = "Fair" +licenseId FBM = "FBM" licenseId FDK_AAC = "FDK-AAC" +licenseId Ferguson_Twofish = "Ferguson-Twofish" licenseId Frameworx_1_0 = "Frameworx-1.0" licenseId FreeBSD_DOC = "FreeBSD-DOC" licenseId FreeImage = "FreeImage" +licenseId FSFAP_no_warranty_disclaimer = "FSFAP-no-warranty-disclaimer" licenseId FSFAP = "FSFAP" +licenseId FSFULLRWD = "FSFULLRWD" licenseId FSFULLR = "FSFULLR" licenseId FSFUL = "FSFUL" licenseId FTL = "FTL" +licenseId Furuseth = "Furuseth" +licenseId Fwlw = "fwlw" +licenseId GCR_docs = "GCR-docs" licenseId GD = "GD" licenseId GFDL_1_1_invariants_only = "GFDL-1.1-invariants-only" licenseId GFDL_1_1_invariants_or_later = "GFDL-1.1-invariants-or-later" @@ -797,31 +1001,60 @@ licenseId GPL_2_0_only = "GPL-2.0-only" licenseId GPL_2_0_or_later = "GPL-2.0-or-later" licenseId GPL_3_0_only = "GPL-3.0-only" licenseId GPL_3_0_or_later = "GPL-3.0-or-later" +licenseId Graphics_Gems = "Graphics-Gems" licenseId GSOAP_1_3b = "gSOAP-1.3b" +licenseId Gtkbook = "gtkbook" licenseId HaskellReport = "HaskellReport" +licenseId Hdparm = "hdparm" licenseId Hippocratic_2_1 = "Hippocratic-2.1" +licenseId HP_1986 = "HP-1986" +licenseId HP_1989 = "HP-1989" +licenseId HPND_DEC = "HPND-DEC" +licenseId HPND_doc_sell = "HPND-doc-sell" +licenseId HPND_doc = "HPND-doc" +licenseId HPND_export_US_modify = "HPND-export-US-modify" +licenseId HPND_export_US = "HPND-export-US" +licenseId HPND_Fenneberg_Livingston = "HPND-Fenneberg-Livingston" +licenseId HPND_INRIA_IMAG = "HPND-INRIA-IMAG" +licenseId HPND_Kevlin_Henney = "HPND-Kevlin-Henney" +licenseId HPND_Markus_Kuhn = "HPND-Markus-Kuhn" +licenseId HPND_MIT_disclaimer = "HPND-MIT-disclaimer" +licenseId HPND_Pbmplus = "HPND-Pbmplus" +licenseId HPND_sell_MIT_disclaimer_xserver = "HPND-sell-MIT-disclaimer-xserver" +licenseId HPND_sell_regexpr = "HPND-sell-regexpr" +licenseId HPND_sell_variant_MIT_disclaimer = "HPND-sell-variant-MIT-disclaimer" licenseId HPND_sell_variant = "HPND-sell-variant" +licenseId HPND_UC = "HPND-UC" licenseId HPND = "HPND" licenseId HTMLTIDY = "HTMLTIDY" licenseId IBM_pibs = "IBM-pibs" licenseId ICU = "ICU" +licenseId IEC_Code_Components_EULA = "IEC-Code-Components-EULA" +licenseId IJG_short = "IJG-short" licenseId IJG = "IJG" licenseId ImageMagick = "ImageMagick" licenseId IMatix = "iMatix" licenseId Imlib2 = "Imlib2" licenseId Info_ZIP = "Info-ZIP" +licenseId Inner_Net_2_0 = "Inner-Net-2.0" licenseId Intel_ACPI = "Intel-ACPI" licenseId Intel = "Intel" licenseId Interbase_1_0 = "Interbase-1.0" licenseId IPA = "IPA" licenseId IPL_1_0 = "IPL-1.0" +licenseId ISC_Veillard = "ISC-Veillard" licenseId ISC = "ISC" licenseId Jam = "Jam" licenseId JasPer_2_0 = "JasPer-2.0" +licenseId JPL_image = "JPL-image" licenseId JPNIC = "JPNIC" licenseId JSON = "JSON" +licenseId Kastrup = "Kastrup" +licenseId Kazlib = "Kazlib" +licenseId Knuth_CTAN = "Knuth-CTAN" licenseId LAL_1_2 = "LAL-1.2" licenseId LAL_1_3 = "LAL-1.3" +licenseId Latex2e_translated_notice = "Latex2e-translated-notice" licenseId Latex2e = "Latex2e" licenseId Leptonica = "Leptonica" licenseId LGPL_2_0_only = "LGPL-2.0-only" @@ -835,11 +1068,17 @@ licenseId Libpng_2_0 = "libpng-2.0" licenseId Libpng = "Libpng" licenseId Libselinux_1_0 = "libselinux-1.0" licenseId Libtiff = "libtiff" +licenseId Libutil_David_Nugent = "libutil-David-Nugent" licenseId LiLiQ_P_1_1 = "LiLiQ-P-1.1" licenseId LiLiQ_R_1_1 = "LiLiQ-R-1.1" licenseId LiLiQ_Rplus_1_1 = "LiLiQ-Rplus-1.1" +licenseId Linux_man_pages_1_para = "Linux-man-pages-1-para" +licenseId Linux_man_pages_copyleft_2_para = "Linux-man-pages-copyleft-2-para" +licenseId Linux_man_pages_copyleft_var = "Linux-man-pages-copyleft-var" licenseId Linux_man_pages_copyleft = "Linux-man-pages-copyleft" licenseId Linux_OpenIB = "Linux-OpenIB" +licenseId LOOP = "LOOP" +licenseId LPD_document = "LPD-document" licenseId LPL_1_02 = "LPL-1.02" licenseId LPL_1_0 = "LPL-1.0" licenseId LPPL_1_0 = "LPPL-1.0" @@ -847,23 +1086,43 @@ licenseId LPPL_1_1 = "LPPL-1.1" licenseId LPPL_1_2 = "LPPL-1.2" licenseId LPPL_1_3a = "LPPL-1.3a" licenseId LPPL_1_3c = "LPPL-1.3c" +licenseId Lsof = "lsof" +licenseId Lucida_Bitmap_Fonts = "Lucida-Bitmap-Fonts" +licenseId LZMA_SDK_9_11_to_9_20 = "LZMA-SDK-9.11-to-9.20" +licenseId LZMA_SDK_9_22 = "LZMA-SDK-9.22" +licenseId Mackerras_3_Clause_acknowledgment = "Mackerras-3-Clause-acknowledgment" +licenseId Mackerras_3_Clause = "Mackerras-3-Clause" +licenseId Magaz = "magaz" +licenseId Mailprio = "mailprio" licenseId MakeIndex = "MakeIndex" +licenseId Martin_Birgmeier = "Martin-Birgmeier" +licenseId McPhee_slideshow = "McPhee-slideshow" +licenseId Metamail = "metamail" +licenseId Minpack = "Minpack" licenseId MirOS = "MirOS" licenseId MIT_0 = "MIT-0" licenseId MIT_advertising = "MIT-advertising" licenseId MIT_CMU = "MIT-CMU" licenseId MIT_enna = "MIT-enna" licenseId MIT_feh = "MIT-feh" +licenseId MIT_Festival = "MIT-Festival" licenseId MIT_Modern_Variant = "MIT-Modern-Variant" licenseId MIT_open_group = "MIT-open-group" +licenseId MIT_testregex = "MIT-testregex" +licenseId MIT_Wu = "MIT-Wu" licenseId MITNFA = "MITNFA" licenseId MIT = "MIT" +licenseId MMIXware = "MMIXware" licenseId Motosoto = "Motosoto" +licenseId MPEG_SSG = "MPEG-SSG" +licenseId Mpi_permissive = "mpi-permissive" licenseId Mpich2 = "mpich2" licenseId MPL_1_0 = "MPL-1.0" licenseId MPL_1_1 = "MPL-1.1" licenseId MPL_2_0_no_copyleft_exception = "MPL-2.0-no-copyleft-exception" licenseId MPL_2_0 = "MPL-2.0" +licenseId Mplus = "mplus" +licenseId MS_LPL = "MS-LPL" licenseId MS_PL = "MS-PL" licenseId MS_RL = "MS-RL" licenseId MTLL = "MTLL" @@ -881,8 +1140,10 @@ licenseId Net_SNMP = "Net-SNMP" licenseId NetCDF = "NetCDF" licenseId Newsletr = "Newsletr" licenseId NGPL = "NGPL" +licenseId NICTA_1_0 = "NICTA-1.0" licenseId NIST_PD_fallback = "NIST-PD-fallback" licenseId NIST_PD = "NIST-PD" +licenseId NIST_Software = "NIST-Software" licenseId NLOD_1_0 = "NLOD-1.0" licenseId NLOD_2_0 = "NLOD-2.0" licenseId NLPL = "NLPL" @@ -900,6 +1161,7 @@ licenseId OCCT_PL = "OCCT-PL" licenseId OCLC_2_0 = "OCLC-2.0" licenseId ODbL_1_0 = "ODbL-1.0" licenseId ODC_By_1_0 = "ODC-By-1.0" +licenseId OFFIS = "OFFIS" licenseId OFL_1_0_no_RFN = "OFL-1.0-no-RFN" licenseId OFL_1_0_RFN = "OFL-1.0-RFN" licenseId OFL_1_0 = "OFL-1.0" @@ -929,9 +1191,14 @@ licenseId OLDAP_2_5 = "OLDAP-2.5" licenseId OLDAP_2_6 = "OLDAP-2.6" licenseId OLDAP_2_7 = "OLDAP-2.7" licenseId OLDAP_2_8 = "OLDAP-2.8" +licenseId OLFL_1_3 = "OLFL-1.3" licenseId OML = "OML" +licenseId OpenPBS_2_3 = "OpenPBS-2.3" +licenseId OpenSSL_standalone = "OpenSSL-standalone" licenseId OpenSSL = "OpenSSL" +licenseId OpenVision = "OpenVision" licenseId OPL_1_0 = "OPL-1.0" +licenseId OPL_UK_3_0 = "OPL-UK-3.0" licenseId OPUBL_1_0 = "OPUBL-1.0" licenseId OSET_PL_2_1 = "OSET-PL-2.1" licenseId OSL_1_0 = "OSL-1.0" @@ -939,21 +1206,28 @@ licenseId OSL_1_1 = "OSL-1.1" licenseId OSL_2_0 = "OSL-2.0" licenseId OSL_2_1 = "OSL-2.1" licenseId OSL_3_0 = "OSL-3.0" +licenseId PADL = "PADL" licenseId Parity_6_0_0 = "Parity-6.0.0" licenseId Parity_7_0_0 = "Parity-7.0.0" licenseId PDDL_1_0 = "PDDL-1.0" licenseId PHP_3_01 = "PHP-3.01" licenseId PHP_3_0 = "PHP-3.0" +licenseId Pixar = "Pixar" licenseId Plexus = "Plexus" +licenseId Pnmstitch = "pnmstitch" licenseId PolyForm_Noncommercial_1_0_0 = "PolyForm-Noncommercial-1.0.0" licenseId PolyForm_Small_Business_1_0_0 = "PolyForm-Small-Business-1.0.0" licenseId PostgreSQL = "PostgreSQL" licenseId PSF_2_0 = "PSF-2.0" licenseId Psfrag = "psfrag" licenseId Psutils = "psutils" +licenseId Python_2_0_1 = "Python-2.0.1" licenseId Python_2_0 = "Python-2.0" +licenseId Python_ldap = "python-ldap" licenseId Qhull = "Qhull" +licenseId QPL_1_0_INRIA_2004 = "QPL-1.0-INRIA-2004" licenseId QPL_1_0 = "QPL-1.0" +licenseId Radvd = "radvd" licenseId Rdisc = "Rdisc" licenseId RHeCos_1_1 = "RHeCos-1.1" licenseId RPL_1_1 = "RPL-1.1" @@ -962,6 +1236,7 @@ licenseId RPSL_1_0 = "RPSL-1.0" licenseId RSA_MD = "RSA-MD" licenseId RSCPL = "RSCPL" licenseId Ruby = "Ruby" +licenseId SAX_PD_2_0 = "SAX-PD-2.0" licenseId SAX_PD = "SAX-PD" licenseId Saxpath = "Saxpath" licenseId SCEA = "SCEA" @@ -971,58 +1246,89 @@ licenseId Sendmail = "Sendmail" licenseId SGI_B_1_0 = "SGI-B-1.0" licenseId SGI_B_1_1 = "SGI-B-1.1" licenseId SGI_B_2_0 = "SGI-B-2.0" +licenseId SGI_OpenGL = "SGI-OpenGL" +licenseId SGP4 = "SGP4" licenseId SHL_0_51 = "SHL-0.51" licenseId SHL_0_5 = "SHL-0.5" licenseId SimPL_2_0 = "SimPL-2.0" licenseId SISSL_1_2 = "SISSL-1.2" licenseId SISSL = "SISSL" licenseId Sleepycat = "Sleepycat" +licenseId SL = "SL" licenseId SMLNJ = "SMLNJ" licenseId SMPPL = "SMPPL" licenseId SNIA = "SNIA" +licenseId Snprintf = "snprintf" +licenseId SoftSurfer = "softSurfer" +licenseId Soundex = "Soundex" licenseId Spencer_86 = "Spencer-86" licenseId Spencer_94 = "Spencer-94" licenseId Spencer_99 = "Spencer-99" licenseId SPL_1_0 = "SPL-1.0" +licenseId Ssh_keyscan = "ssh-keyscan" licenseId SSH_OpenSSH = "SSH-OpenSSH" licenseId SSH_short = "SSH-short" +licenseId SSLeay_standalone = "SSLeay-standalone" licenseId SSPL_1_0 = "SSPL-1.0" licenseId SugarCRM_1_1_3 = "SugarCRM-1.1.3" +licenseId Sun_PPP = "Sun-PPP" +licenseId SunPro = "SunPro" licenseId SWL = "SWL" +licenseId Swrule = "swrule" +licenseId Symlinks = "Symlinks" licenseId TAPR_OHL_1_0 = "TAPR-OHL-1.0" licenseId TCL = "TCL" licenseId TCP_wrappers = "TCP-wrappers" +licenseId TermReadKey = "TermReadKey" +licenseId TGPPL_1_0 = "TGPPL-1.0" licenseId TMate = "TMate" licenseId TORQUE_1_1 = "TORQUE-1.1" licenseId TOSL = "TOSL" +licenseId TPDL = "TPDL" +licenseId TPL_1_0 = "TPL-1.0" +licenseId TTWL = "TTWL" +licenseId TTYP0 = "TTYP0" licenseId TU_Berlin_1_0 = "TU-Berlin-1.0" licenseId TU_Berlin_2_0 = "TU-Berlin-2.0" +licenseId UCAR = "UCAR" licenseId UCL_1_0 = "UCL-1.0" +licenseId Ulem = "ulem" +licenseId UMich_Merit = "UMich-Merit" +licenseId Unicode_3_0 = "Unicode-3.0" licenseId Unicode_DFS_2015 = "Unicode-DFS-2015" licenseId Unicode_DFS_2016 = "Unicode-DFS-2016" licenseId Unicode_TOU = "Unicode-TOU" +licenseId UnixCrypt = "UnixCrypt" licenseId Unlicense = "Unlicense" licenseId UPL_1_0 = "UPL-1.0" +licenseId URT_RLE = "URT-RLE" licenseId Vim = "Vim" licenseId VOSTROM = "VOSTROM" licenseId VSL_1_0 = "VSL-1.0" licenseId W3C_19980720 = "W3C-19980720" licenseId W3C_20150513 = "W3C-20150513" licenseId W3C = "W3C" +licenseId W3m = "w3m" licenseId Watcom_1_0 = "Watcom-1.0" +licenseId Widget_Workshop = "Widget-Workshop" licenseId Wsuipa = "Wsuipa" licenseId WTFPL = "WTFPL" licenseId X11_distribute_modifications_variant = "X11-distribute-modifications-variant" licenseId X11 = "X11" +licenseId Xdebug_1_03 = "Xdebug-1.03" licenseId Xerox = "Xerox" +licenseId Xfig = "Xfig" licenseId XFree86_1_1 = "XFree86-1.1" licenseId Xinetd = "xinetd" +licenseId Xkeyboard_config_Zinoviev = "xkeyboard-config-Zinoviev" +licenseId Xlock = "xlock" licenseId Xnet = "Xnet" licenseId Xpp = "xpp" licenseId XSkat = "XSkat" licenseId YPL_1_0 = "YPL-1.0" licenseId YPL_1_1 = "YPL-1.1" licenseId Zed = "Zed" +licenseId Zeeff = "Zeeff" licenseId Zend_2_0 = "Zend-2.0" licenseId Zimbra_1_3 = "Zimbra-1.3" licenseId Zimbra_1_4 = "Zimbra-1.4" @@ -1037,8 +1343,11 @@ licenseName :: LicenseId -> String licenseName NullBSD = "BSD Zero Clause License" licenseName AAL = "Attribution Assurance License" licenseName Abstyles = "Abstyles License" +licenseName AdaCore_doc = "AdaCore Doc License" licenseName Adobe_2006 = "Adobe Systems Incorporated Source Code License Agreement" +licenseName Adobe_Display_PostScript = "Adobe Display PostScript License" licenseName Adobe_Glyph = "Adobe Glyph List License" +licenseName Adobe_Utopia = "Adobe Utopia Font License" licenseName ADSL = "Amazon Digital Services License" licenseName AFL_1_1 = "Academic Free License v1.1" licenseName AFL_1_2 = "Academic Free License v1.2" @@ -1053,6 +1362,7 @@ licenseName AGPL_3_0_only = "GNU Affero General Public License v3.0 only" licenseName AGPL_3_0_or_later = "GNU Affero General Public License v3.0 or later" licenseName Aladdin = "Aladdin Free Public License" licenseName AMDPLPA = "AMD's plpa_map.c License" +licenseName AML_glslang = "AML glslang variant License" licenseName AML = "Apple MIT License" licenseName AMPAS = "Academy of Motion Picture Arts and Sciences BSD" licenseName ANTLR_PD_fallback = "ANTLR Software Rights Notice with license fallback" @@ -1067,26 +1377,40 @@ licenseName APSL_1_0 = "Apple Public Source License 1.0" licenseName APSL_1_1 = "Apple Public Source License 1.1" licenseName APSL_1_2 = "Apple Public Source License 1.2" licenseName APSL_2_0 = "Apple Public Source License 2.0" +licenseName Arphic_1999 = "Arphic Public License" licenseName Artistic_1_0_cl8 = "Artistic License 1.0 w/clause 8" licenseName Artistic_1_0_Perl = "Artistic License 1.0 (Perl)" licenseName Artistic_1_0 = "Artistic License 1.0" licenseName Artistic_2_0 = "Artistic License 2.0" +licenseName ASWF_Digital_Assets_1_0 = "ASWF Digital Assets License version 1.0" +licenseName ASWF_Digital_Assets_1_1 = "ASWF Digital Assets License 1.1" +licenseName Baekmuk = "Baekmuk License" licenseName Bahyph = "Bahyph License" licenseName Barr = "Barr License" +licenseName Bcrypt_Solar_Designer = "bcrypt Solar Designer License" licenseName Beerware = "Beerware License" +licenseName Bitstream_Charter = "Bitstream Charter Font License" +licenseName Bitstream_Vera = "Bitstream Vera Font License" licenseName BitTorrent_1_0 = "BitTorrent Open Source License v1.0" licenseName BitTorrent_1_1 = "BitTorrent Open Source License v1.1" licenseName Blessing = "SQLite Blessing" licenseName BlueOak_1_0_0 = "Blue Oak Model License 1.0.0" +licenseName Boehm_GC = "Boehm-Demers-Weiser GC License" licenseName Borceux = "Borceux license" +licenseName Brian_Gladman_2_Clause = "Brian Gladman 2-Clause License" +licenseName Brian_Gladman_3_Clause = "Brian Gladman 3-Clause License" licenseName BSD_1_Clause = "BSD 1-Clause License" licenseName BSD_2_Clause_FreeBSD = "BSD 2-Clause FreeBSD License" licenseName BSD_2_Clause_NetBSD = "BSD 2-Clause NetBSD License" +licenseName BSD_2_Clause_Darwin = "BSD 2-Clause - Ian Darwin variant" licenseName BSD_2_Clause_Patent = "BSD-2-Clause Plus Patent License" licenseName BSD_2_Clause_Views = "BSD 2-Clause with views sentence" licenseName BSD_2_Clause = "BSD 2-Clause \"Simplified\" License" +licenseName BSD_3_Clause_acpica = "BSD 3-Clause acpica variant" licenseName BSD_3_Clause_Attribution = "BSD with attribution" licenseName BSD_3_Clause_Clear = "BSD 3-Clause Clear License" +licenseName BSD_3_Clause_flex = "BSD 3-Clause Flex variant" +licenseName BSD_3_Clause_HP = "Hewlett-Packard BSD variant license" licenseName BSD_3_Clause_LBNL = "Lawrence Berkeley National Labs BSD variant license" licenseName BSD_3_Clause_Modification = "BSD 3-Clause Modification" licenseName BSD_3_Clause_No_Military_License = "BSD 3-Clause No Military License" @@ -1094,12 +1418,21 @@ licenseName BSD_3_Clause_No_Nuclear_License_2014 = "BSD 3-Clause No Nuclear Lice licenseName BSD_3_Clause_No_Nuclear_License = "BSD 3-Clause No Nuclear License" licenseName BSD_3_Clause_No_Nuclear_Warranty = "BSD 3-Clause No Nuclear Warranty" licenseName BSD_3_Clause_Open_MPI = "BSD 3-Clause Open MPI variant" +licenseName BSD_3_Clause_Sun = "BSD 3-Clause Sun Microsystems" licenseName BSD_3_Clause = "BSD 3-Clause \"New\" or \"Revised\" License" licenseName BSD_4_Clause_Shortened = "BSD 4 Clause Shortened" licenseName BSD_4_Clause_UC = "BSD-4-Clause (University of California-Specific)" licenseName BSD_4_Clause = "BSD 4-Clause \"Original\" or \"Old\" License" +licenseName BSD_4_3RENO = "BSD 4.3 RENO License" +licenseName BSD_4_3TAHOE = "BSD 4.3 TAHOE License" +licenseName BSD_Advertising_Acknowledgement = "BSD Advertising Acknowledgement License" +licenseName BSD_Attribution_HPND_disclaimer = "BSD with Attribution and HPND disclaimer" +licenseName BSD_Inferno_Nettverk = "BSD-Inferno-Nettverk" licenseName BSD_Protection = "BSD Protection License" +licenseName BSD_Source_beginning_file = "BSD Source Code Attribution - beginning of file variant" licenseName BSD_Source_Code = "BSD Source Code Attribution" +licenseName BSD_Systemics_W3Works = "Systemics W3Works BSD variant license" +licenseName BSD_Systemics = "Systemics BSD variant license" licenseName BSL_1_0 = "Boost Software License 1.0" licenseName Bzip2_1_0_5 = "bzip2 and libbzip2 License v1.0.5" licenseName BUSL_1_1 = "Business Source License 1.1" @@ -1107,6 +1440,7 @@ licenseName Bzip2_1_0_6 = "bzip2 and libbzip2 License v1.0.6" licenseName C_UDA_1_0 = "Computational Use of Data Agreement v1.0" licenseName CAL_1_0_Combined_Work_Exception = "Cryptographic Autonomy License 1.0 (Combined Work Exception)" licenseName CAL_1_0 = "Cryptographic Autonomy License 1.0" +licenseName Caldera_no_preamble = "Caldera License (without preamble)" licenseName Caldera = "Caldera License" licenseName CATOSL_1_1 = "Computer Associates Trusted Open Source License 1.1" licenseName CC_BY_1_0 = "Creative Commons Attribution 1.0 Generic" @@ -1114,7 +1448,9 @@ licenseName CC_BY_2_0 = "Creative Commons Attribution 2.0 Generic" licenseName CC_BY_2_5_AU = "Creative Commons Attribution 2.5 Australia" licenseName CC_BY_2_5 = "Creative Commons Attribution 2.5 Generic" licenseName CC_BY_3_0_AT = "Creative Commons Attribution 3.0 Austria" +licenseName CC_BY_3_0_AU = "Creative Commons Attribution 3.0 Australia" licenseName CC_BY_3_0_DE = "Creative Commons Attribution 3.0 Germany" +licenseName CC_BY_3_0_IGO = "Creative Commons Attribution 3.0 IGO" licenseName CC_BY_3_0_NL = "Creative Commons Attribution 3.0 Netherlands" licenseName CC_BY_3_0_US = "Creative Commons Attribution 3.0 United States" licenseName CC_BY_3_0 = "Creative Commons Attribution 3.0 Unported" @@ -1133,6 +1469,7 @@ licenseName CC_BY_NC_ND_3_0_IGO = "Creative Commons Attribution Non Commercial N licenseName CC_BY_NC_ND_3_0 = "Creative Commons Attribution Non Commercial No Derivatives 3.0 Unported" licenseName CC_BY_NC_ND_4_0 = "Creative Commons Attribution Non Commercial No Derivatives 4.0 International" licenseName CC_BY_NC_SA_1_0 = "Creative Commons Attribution Non Commercial Share Alike 1.0 Generic" +licenseName CC_BY_NC_SA_2_0_DE = "Creative Commons Attribution Non Commercial Share Alike 2.0 Germany" licenseName CC_BY_NC_SA_2_0_FR = "Creative Commons Attribution-NonCommercial-ShareAlike 2.0 France" licenseName CC_BY_NC_SA_2_0_UK = "Creative Commons Attribution Non Commercial Share Alike 2.0 England and Wales" licenseName CC_BY_NC_SA_2_0 = "Creative Commons Attribution Non Commercial Share Alike 2.0 Generic" @@ -1154,6 +1491,7 @@ licenseName CC_BY_SA_2_1_JP = "Creative Commons Attribution Share Alike 2.1 Japa licenseName CC_BY_SA_2_5 = "Creative Commons Attribution Share Alike 2.5 Generic" licenseName CC_BY_SA_3_0_AT = "Creative Commons Attribution Share Alike 3.0 Austria" licenseName CC_BY_SA_3_0_DE = "Creative Commons Attribution Share Alike 3.0 Germany" +licenseName CC_BY_SA_3_0_IGO = "Creative Commons Attribution-ShareAlike 3.0 IGO" licenseName CC_BY_SA_3_0 = "Creative Commons Attribution Share Alike 3.0 Unported" licenseName CC_BY_SA_4_0 = "Creative Commons Attribution Share Alike 4.0 International" licenseName CC_PDDC = "Creative Commons Public Domain Dedication and Certification" @@ -1175,7 +1513,13 @@ licenseName CERN_OHL_1_2 = "CERN Open Hardware Licence v1.2" licenseName CERN_OHL_P_2_0 = "CERN Open Hardware Licence Version 2 - Permissive" licenseName CERN_OHL_S_2_0 = "CERN Open Hardware Licence Version 2 - Strongly Reciprocal" licenseName CERN_OHL_W_2_0 = "CERN Open Hardware Licence Version 2 - Weakly Reciprocal" +licenseName CFITSIO = "CFITSIO License" +licenseName Check_cvs = "check-cvs License" +licenseName Checkmk = "Checkmk License" licenseName ClArtistic = "Clarified Artistic License" +licenseName Clips = "Clips License" +licenseName CMU_Mach_nodoc = "CMU Mach - no notices-in-documentation variant" +licenseName CMU_Mach = "CMU Mach License" licenseName CNRI_Jython = "CNRI Jython License" licenseName CNRI_Python_GPL_Compatible = "CNRI Python Open Source GPL Compatible License Agreement" licenseName CNRI_Python = "CNRI Python License" @@ -1184,21 +1528,27 @@ licenseName Community_Spec_1_0 = "Community Specification License 1.0" licenseName Condor_1_1 = "Condor Public License v1.1" licenseName Copyleft_next_0_3_0 = "copyleft-next 0.3.0" licenseName Copyleft_next_0_3_1 = "copyleft-next 0.3.1" +licenseName Cornell_Lossless_JPEG = "Cornell Lossless JPEG License" licenseName CPAL_1_0 = "Common Public Attribution License 1.0" licenseName CPL_1_0 = "Common Public License 1.0" licenseName CPOL_1_02 = "Code Project Open License 1.02" +licenseName Cronyx = "Cronyx License" licenseName Crossword = "Crossword License" licenseName CrystalStacker = "CrystalStacker License" licenseName CUA_OPL_1_0 = "CUA Office Public License v1.0" licenseName Cube = "Cube License" licenseName Curl = "curl License" licenseName D_FSL_1_0 = "Deutsche Freie Software Lizenz" +licenseName DEC_3_Clause = "DEC 3-Clause License" licenseName Diffmark = "diffmark license" licenseName DL_DE_BY_2_0 = "Data licence Germany \8211 attribution \8211 version 2.0" +licenseName DL_DE_ZERO_2_0 = "Data licence Germany \8211 zero \8211 version 2.0" licenseName DOC = "DOC License" licenseName Dotseqn = "Dotseqn License" licenseName DRL_1_0 = "Detection Rule License 1.0" +licenseName DRL_1_1 = "Detection Rule License 1.1" licenseName DSDP = "DSDP License" +licenseName Dtoa = "David M. Gay dtoa License" licenseName Dvipdfm = "dvipdfm License" licenseName ECL_1_0 = "Educational Community License v1.0" licenseName ECL_2_0 = "Educational Community License v2.0" @@ -1218,14 +1568,21 @@ licenseName EUPL_1_1 = "European Union Public License 1.1" licenseName EUPL_1_2 = "European Union Public License 1.2" licenseName Eurosym = "Eurosym License" licenseName Fair = "Fair License" +licenseName FBM = "Fuzzy Bitmap License" licenseName FDK_AAC = "Fraunhofer FDK AAC Codec Library" +licenseName Ferguson_Twofish = "Ferguson Twofish License" licenseName Frameworx_1_0 = "Frameworx Open License 1.0" licenseName FreeBSD_DOC = "FreeBSD Documentation License" licenseName FreeImage = "FreeImage Public License v1.0" +licenseName FSFAP_no_warranty_disclaimer = "FSF All Permissive License (without Warranty)" licenseName FSFAP = "FSF All Permissive License" +licenseName FSFULLRWD = "FSF Unlimited License (With License Retention and Warranty Disclaimer)" licenseName FSFULLR = "FSF Unlimited License (with License Retention)" licenseName FSFUL = "FSF Unlimited License" licenseName FTL = "Freetype Project License" +licenseName Furuseth = "Furuseth License" +licenseName Fwlw = "fwlw License" +licenseName GCR_docs = "Gnome GCR Documentation License" licenseName GD = "GD License" licenseName GFDL_1_1_invariants_only = "GNU Free Documentation License v1.1 only - invariants" licenseName GFDL_1_1_invariants_or_later = "GNU Free Documentation License v1.1 or later - invariants" @@ -1257,31 +1614,60 @@ licenseName GPL_2_0_only = "GNU General Public License v2.0 only" licenseName GPL_2_0_or_later = "GNU General Public License v2.0 or later" licenseName GPL_3_0_only = "GNU General Public License v3.0 only" licenseName GPL_3_0_or_later = "GNU General Public License v3.0 or later" +licenseName Graphics_Gems = "Graphics Gems License" licenseName GSOAP_1_3b = "gSOAP Public License v1.3b" +licenseName Gtkbook = "gtkbook License" licenseName HaskellReport = "Haskell Language Report License" +licenseName Hdparm = "hdparm License" licenseName Hippocratic_2_1 = "Hippocratic License 2.1" +licenseName HP_1986 = "Hewlett-Packard 1986 License" +licenseName HP_1989 = "Hewlett-Packard 1989 License" +licenseName HPND_DEC = "Historical Permission Notice and Disclaimer - DEC variant" +licenseName HPND_doc_sell = "Historical Permission Notice and Disclaimer - documentation sell variant" +licenseName HPND_doc = "Historical Permission Notice and Disclaimer - documentation variant" +licenseName HPND_export_US_modify = "HPND with US Government export control warning and modification rqmt" +licenseName HPND_export_US = "HPND with US Government export control warning" +licenseName HPND_Fenneberg_Livingston = "Historical Permission Notice and Disclaimer - Fenneberg-Livingston variant" +licenseName HPND_INRIA_IMAG = "Historical Permission Notice and Disclaimer - INRIA-IMAG variant" +licenseName HPND_Kevlin_Henney = "Historical Permission Notice and Disclaimer - Kevlin Henney variant" +licenseName HPND_Markus_Kuhn = "Historical Permission Notice and Disclaimer - Markus Kuhn variant" +licenseName HPND_MIT_disclaimer = "Historical Permission Notice and Disclaimer with MIT disclaimer" +licenseName HPND_Pbmplus = "Historical Permission Notice and Disclaimer - Pbmplus variant" +licenseName HPND_sell_MIT_disclaimer_xserver = "Historical Permission Notice and Disclaimer - sell xserver variant with MIT disclaimer" +licenseName HPND_sell_regexpr = "Historical Permission Notice and Disclaimer - sell regexpr variant" +licenseName HPND_sell_variant_MIT_disclaimer = "HPND sell variant with MIT disclaimer" licenseName HPND_sell_variant = "Historical Permission Notice and Disclaimer - sell variant" +licenseName HPND_UC = "Historical Permission Notice and Disclaimer - University of California variant" licenseName HPND = "Historical Permission Notice and Disclaimer" licenseName HTMLTIDY = "HTML Tidy License" licenseName IBM_pibs = "IBM PowerPC Initialization and Boot Software" licenseName ICU = "ICU License" +licenseName IEC_Code_Components_EULA = "IEC Code Components End-user licence agreement" +licenseName IJG_short = "Independent JPEG Group License - short" licenseName IJG = "Independent JPEG Group License" licenseName ImageMagick = "ImageMagick License" licenseName IMatix = "iMatix Standard Function Library Agreement" licenseName Imlib2 = "Imlib2 License" licenseName Info_ZIP = "Info-ZIP License" +licenseName Inner_Net_2_0 = "Inner Net License v2.0" licenseName Intel_ACPI = "Intel ACPI Software License Agreement" licenseName Intel = "Intel Open Source License" licenseName Interbase_1_0 = "Interbase Public License v1.0" licenseName IPA = "IPA Font License" licenseName IPL_1_0 = "IBM Public License v1.0" +licenseName ISC_Veillard = "ISC Veillard variant" licenseName ISC = "ISC License" licenseName Jam = "Jam License" licenseName JasPer_2_0 = "JasPer License" +licenseName JPL_image = "JPL Image Use Policy" licenseName JPNIC = "Japan Network Information Center License" licenseName JSON = "JSON License" +licenseName Kastrup = "Kastrup License" +licenseName Kazlib = "Kazlib License" +licenseName Knuth_CTAN = "Knuth CTAN License" licenseName LAL_1_2 = "Licence Art Libre 1.2" licenseName LAL_1_3 = "Licence Art Libre 1.3" +licenseName Latex2e_translated_notice = "Latex2e with translated notice permission" licenseName Latex2e = "Latex2e License" licenseName Leptonica = "Leptonica License" licenseName LGPL_2_0_only = "GNU Library General Public License v2 only" @@ -1295,11 +1681,17 @@ licenseName Libpng_2_0 = "PNG Reference Library version 2" licenseName Libpng = "libpng License" licenseName Libselinux_1_0 = "libselinux public domain notice" licenseName Libtiff = "libtiff License" +licenseName Libutil_David_Nugent = "libutil David Nugent License" licenseName LiLiQ_P_1_1 = "Licence Libre du Qu\233bec \8211 Permissive version 1.1" licenseName LiLiQ_R_1_1 = "Licence Libre du Qu\233bec \8211 R\233ciprocit\233 version 1.1" licenseName LiLiQ_Rplus_1_1 = "Licence Libre du Qu\233bec \8211 R\233ciprocit\233 forte version 1.1" +licenseName Linux_man_pages_1_para = "Linux man-pages - 1 paragraph" +licenseName Linux_man_pages_copyleft_2_para = "Linux man-pages Copyleft - 2 paragraphs" +licenseName Linux_man_pages_copyleft_var = "Linux man-pages Copyleft Variant" licenseName Linux_man_pages_copyleft = "Linux man-pages Copyleft" licenseName Linux_OpenIB = "Linux Kernel Variant of OpenIB.org license" +licenseName LOOP = "Common Lisp LOOP License" +licenseName LPD_document = "LPD Documentation License" licenseName LPL_1_02 = "Lucent Public License v1.02" licenseName LPL_1_0 = "Lucent Public License Version 1.0" licenseName LPPL_1_0 = "LaTeX Project Public License v1.0" @@ -1307,23 +1699,43 @@ licenseName LPPL_1_1 = "LaTeX Project Public License v1.1" licenseName LPPL_1_2 = "LaTeX Project Public License v1.2" licenseName LPPL_1_3a = "LaTeX Project Public License v1.3a" licenseName LPPL_1_3c = "LaTeX Project Public License v1.3c" +licenseName Lsof = "lsof License" +licenseName Lucida_Bitmap_Fonts = "Lucida Bitmap Fonts License" +licenseName LZMA_SDK_9_11_to_9_20 = "LZMA SDK License (versions 9.11 to 9.20)" +licenseName LZMA_SDK_9_22 = "LZMA SDK License (versions 9.22 and beyond)" +licenseName Mackerras_3_Clause_acknowledgment = "Mackerras 3-Clause - acknowledgment variant" +licenseName Mackerras_3_Clause = "Mackerras 3-Clause License" +licenseName Magaz = "magaz License" +licenseName Mailprio = "mailprio License" licenseName MakeIndex = "MakeIndex License" +licenseName Martin_Birgmeier = "Martin Birgmeier License" +licenseName McPhee_slideshow = "McPhee Slideshow License" +licenseName Metamail = "metamail License" +licenseName Minpack = "Minpack License" licenseName MirOS = "The MirOS Licence" licenseName MIT_0 = "MIT No Attribution" licenseName MIT_advertising = "Enlightenment License (e16)" licenseName MIT_CMU = "CMU License" licenseName MIT_enna = "enna License" licenseName MIT_feh = "feh License" +licenseName MIT_Festival = "MIT Festival Variant" licenseName MIT_Modern_Variant = "MIT License Modern Variant" licenseName MIT_open_group = "MIT Open Group variant" +licenseName MIT_testregex = "MIT testregex Variant" +licenseName MIT_Wu = "MIT Tom Wu Variant" licenseName MITNFA = "MIT +no-false-attribs license" licenseName MIT = "MIT License" +licenseName MMIXware = "MMIXware License" licenseName Motosoto = "Motosoto License" +licenseName MPEG_SSG = "MPEG Software Simulation" +licenseName Mpi_permissive = "mpi Permissive License" licenseName Mpich2 = "mpich2 License" licenseName MPL_1_0 = "Mozilla Public License 1.0" licenseName MPL_1_1 = "Mozilla Public License 1.1" licenseName MPL_2_0_no_copyleft_exception = "Mozilla Public License 2.0 (no copyleft exception)" licenseName MPL_2_0 = "Mozilla Public License 2.0" +licenseName Mplus = "mplus Font License" +licenseName MS_LPL = "Microsoft Limited Public License" licenseName MS_PL = "Microsoft Public License" licenseName MS_RL = "Microsoft Reciprocal License" licenseName MTLL = "Matrix Template Library License" @@ -1341,8 +1753,10 @@ licenseName Net_SNMP = "Net-SNMP License" licenseName NetCDF = "NetCDF license" licenseName Newsletr = "Newsletr License" licenseName NGPL = "Nethack General Public License" +licenseName NICTA_1_0 = "NICTA Public Software License, Version 1.0" licenseName NIST_PD_fallback = "NIST Public Domain Notice with license fallback" licenseName NIST_PD = "NIST Public Domain Notice" +licenseName NIST_Software = "NIST Software License" licenseName NLOD_1_0 = "Norwegian Licence for Open Government Data (NLOD) 1.0" licenseName NLOD_2_0 = "Norwegian Licence for Open Government Data (NLOD) 2.0" licenseName NLPL = "No Limit Public License" @@ -1360,6 +1774,7 @@ licenseName OCCT_PL = "Open CASCADE Technology Public License" licenseName OCLC_2_0 = "OCLC Research Public License 2.0" licenseName ODbL_1_0 = "Open Data Commons Open Database License v1.0" licenseName ODC_By_1_0 = "Open Data Commons Attribution License v1.0" +licenseName OFFIS = "OFFIS License" licenseName OFL_1_0_no_RFN = "SIL Open Font License 1.0 with no Reserved Font Name" licenseName OFL_1_0_RFN = "SIL Open Font License 1.0 with Reserved Font Name" licenseName OFL_1_0 = "SIL Open Font License 1.0" @@ -1389,9 +1804,14 @@ licenseName OLDAP_2_5 = "Open LDAP Public License v2.5" licenseName OLDAP_2_6 = "Open LDAP Public License v2.6" licenseName OLDAP_2_7 = "Open LDAP Public License v2.7" licenseName OLDAP_2_8 = "Open LDAP Public License v2.8" +licenseName OLFL_1_3 = "Open Logistics Foundation License Version 1.3" licenseName OML = "Open Market License" +licenseName OpenPBS_2_3 = "OpenPBS v2.3 Software License" +licenseName OpenSSL_standalone = "OpenSSL License - standalone" licenseName OpenSSL = "OpenSSL License" +licenseName OpenVision = "OpenVision License" licenseName OPL_1_0 = "Open Public License v1.0" +licenseName OPL_UK_3_0 = "United Kingdom Open Parliament Licence v3.0" licenseName OPUBL_1_0 = "Open Publication License v1.0" licenseName OSET_PL_2_1 = "OSET Public License version 2.1" licenseName OSL_1_0 = "Open Software License 1.0" @@ -1399,21 +1819,28 @@ licenseName OSL_1_1 = "Open Software License 1.1" licenseName OSL_2_0 = "Open Software License 2.0" licenseName OSL_2_1 = "Open Software License 2.1" licenseName OSL_3_0 = "Open Software License 3.0" +licenseName PADL = "PADL License" licenseName Parity_6_0_0 = "The Parity Public License 6.0.0" licenseName Parity_7_0_0 = "The Parity Public License 7.0.0" licenseName PDDL_1_0 = "Open Data Commons Public Domain Dedication & License 1.0" licenseName PHP_3_01 = "PHP License v3.01" licenseName PHP_3_0 = "PHP License v3.0" +licenseName Pixar = "Pixar License" licenseName Plexus = "Plexus Classworlds License" +licenseName Pnmstitch = "pnmstitch License" licenseName PolyForm_Noncommercial_1_0_0 = "PolyForm Noncommercial License 1.0.0" licenseName PolyForm_Small_Business_1_0_0 = "PolyForm Small Business License 1.0.0" licenseName PostgreSQL = "PostgreSQL License" licenseName PSF_2_0 = "Python Software Foundation License 2.0" licenseName Psfrag = "psfrag License" licenseName Psutils = "psutils License" +licenseName Python_2_0_1 = "Python License 2.0.1" licenseName Python_2_0 = "Python License 2.0" +licenseName Python_ldap = "Python ldap License" licenseName Qhull = "Qhull License" +licenseName QPL_1_0_INRIA_2004 = "Q Public License 1.0 - INRIA 2004 variant" licenseName QPL_1_0 = "Q Public License 1.0" +licenseName Radvd = "radvd License" licenseName Rdisc = "Rdisc License" licenseName RHeCos_1_1 = "Red Hat eCos Public License v1.1" licenseName RPL_1_1 = "Reciprocal Public License 1.1" @@ -1422,6 +1849,7 @@ licenseName RPSL_1_0 = "RealNetworks Public Source License v1.0" licenseName RSA_MD = "RSA Message-Digest License" licenseName RSCPL = "Ricoh Source Code Public License" licenseName Ruby = "Ruby License" +licenseName SAX_PD_2_0 = "Sax Public Domain Notice 2.0" licenseName SAX_PD = "Sax Public Domain Notice" licenseName Saxpath = "Saxpath License" licenseName SCEA = "SCEA Shared Source License" @@ -1431,58 +1859,89 @@ licenseName Sendmail = "Sendmail License" licenseName SGI_B_1_0 = "SGI Free Software License B v1.0" licenseName SGI_B_1_1 = "SGI Free Software License B v1.1" licenseName SGI_B_2_0 = "SGI Free Software License B v2.0" +licenseName SGI_OpenGL = "SGI OpenGL License" +licenseName SGP4 = "SGP4 Permission Notice" licenseName SHL_0_51 = "Solderpad Hardware License, Version 0.51" licenseName SHL_0_5 = "Solderpad Hardware License v0.5" licenseName SimPL_2_0 = "Simple Public License 2.0" licenseName SISSL_1_2 = "Sun Industry Standards Source License v1.2" licenseName SISSL = "Sun Industry Standards Source License v1.1" licenseName Sleepycat = "Sleepycat License" +licenseName SL = "SL License" licenseName SMLNJ = "Standard ML of New Jersey License" licenseName SMPPL = "Secure Messaging Protocol Public License" licenseName SNIA = "SNIA Public License 1.1" +licenseName Snprintf = "snprintf License" +licenseName SoftSurfer = "softSurfer License" +licenseName Soundex = "Soundex License" licenseName Spencer_86 = "Spencer License 86" licenseName Spencer_94 = "Spencer License 94" licenseName Spencer_99 = "Spencer License 99" licenseName SPL_1_0 = "Sun Public License v1.0" +licenseName Ssh_keyscan = "ssh-keyscan License" licenseName SSH_OpenSSH = "SSH OpenSSH license" licenseName SSH_short = "SSH short notice" +licenseName SSLeay_standalone = "SSLeay License - standalone" licenseName SSPL_1_0 = "Server Side Public License, v 1" licenseName SugarCRM_1_1_3 = "SugarCRM Public License v1.1.3" +licenseName Sun_PPP = "Sun PPP License" +licenseName SunPro = "SunPro License" licenseName SWL = "Scheme Widget Library (SWL) Software License Agreement" +licenseName Swrule = "swrule License" +licenseName Symlinks = "Symlinks License" licenseName TAPR_OHL_1_0 = "TAPR Open Hardware License v1.0" licenseName TCL = "TCL/TK License" licenseName TCP_wrappers = "TCP Wrappers License" +licenseName TermReadKey = "TermReadKey License" +licenseName TGPPL_1_0 = "Transitive Grace Period Public Licence 1.0" licenseName TMate = "TMate Open Source License" licenseName TORQUE_1_1 = "TORQUE v2.5+ Software License v1.1" licenseName TOSL = "Trusster Open Source License" +licenseName TPDL = "Time::ParseDate License" +licenseName TPL_1_0 = "THOR Public License 1.0" +licenseName TTWL = "Text-Tabs+Wrap License" +licenseName TTYP0 = "TTYP0 License" licenseName TU_Berlin_1_0 = "Technische Universitaet Berlin License 1.0" licenseName TU_Berlin_2_0 = "Technische Universitaet Berlin License 2.0" +licenseName UCAR = "UCAR License" licenseName UCL_1_0 = "Upstream Compatibility License v1.0" +licenseName Ulem = "ulem License" +licenseName UMich_Merit = "Michigan/Merit Networks License" +licenseName Unicode_3_0 = "Unicode License v3" licenseName Unicode_DFS_2015 = "Unicode License Agreement - Data Files and Software (2015)" licenseName Unicode_DFS_2016 = "Unicode License Agreement - Data Files and Software (2016)" licenseName Unicode_TOU = "Unicode Terms of Use" +licenseName UnixCrypt = "UnixCrypt License" licenseName Unlicense = "The Unlicense" licenseName UPL_1_0 = "Universal Permissive License v1.0" +licenseName URT_RLE = "Utah Raster Toolkit Run Length Encoded License" licenseName Vim = "Vim License" licenseName VOSTROM = "VOSTROM Public License for Open Source" licenseName VSL_1_0 = "Vovida Software License v1.0" licenseName W3C_19980720 = "W3C Software Notice and License (1998-07-20)" licenseName W3C_20150513 = "W3C Software Notice and Document License (2015-05-13)" licenseName W3C = "W3C Software Notice and License (2002-12-31)" +licenseName W3m = "w3m License" licenseName Watcom_1_0 = "Sybase Open Watcom Public License 1.0" +licenseName Widget_Workshop = "Widget Workshop License" licenseName Wsuipa = "Wsuipa License" licenseName WTFPL = "Do What The F*ck You Want To Public License" licenseName X11_distribute_modifications_variant = "X11 License Distribution Modification Variant" licenseName X11 = "X11 License" +licenseName Xdebug_1_03 = "Xdebug License v 1.03" licenseName Xerox = "Xerox License" +licenseName Xfig = "Xfig License" licenseName XFree86_1_1 = "XFree86 License 1.1" licenseName Xinetd = "xinetd License" +licenseName Xkeyboard_config_Zinoviev = "xkeyboard-config Zinoviev License" +licenseName Xlock = "xlock License" licenseName Xnet = "X.Net License" licenseName Xpp = "XPP License" licenseName XSkat = "XSkat License" licenseName YPL_1_0 = "Yahoo! Public License v1.0" licenseName YPL_1_1 = "Yahoo! Public License v1.1" licenseName Zed = "Zed License" +licenseName Zeeff = "Zeeff License" licenseName Zend_2_0 = "Zend License v2.0" licenseName Zimbra_1_3 = "Zimbra Public License v1.3" licenseName Zimbra_1_4 = "Zimbra Public License v1.4" @@ -1516,6 +1975,7 @@ licenseIsOsiApproved Artistic_1_0_cl8 = True licenseIsOsiApproved Artistic_1_0_Perl = True licenseIsOsiApproved Artistic_1_0 = True licenseIsOsiApproved Artistic_2_0 = True +licenseIsOsiApproved BlueOak_1_0_0 = True licenseIsOsiApproved BSD_1_Clause = True licenseIsOsiApproved BSD_2_Clause_Patent = True licenseIsOsiApproved BSD_2_Clause = True @@ -1551,10 +2011,12 @@ licenseIsOsiApproved GPL_2_0_or_later = True licenseIsOsiApproved GPL_3_0_only = True licenseIsOsiApproved GPL_3_0_or_later = True licenseIsOsiApproved HPND = True +licenseIsOsiApproved ICU = True licenseIsOsiApproved Intel = True licenseIsOsiApproved IPA = True licenseIsOsiApproved IPL_1_0 = True licenseIsOsiApproved ISC = True +licenseIsOsiApproved Jam = True licenseIsOsiApproved LGPL_2_0_only = True licenseIsOsiApproved LGPL_2_0_or_later = True licenseIsOsiApproved LGPL_2_1_only = True @@ -1593,6 +2055,7 @@ licenseIsOsiApproved OFL_1_1_RFN = True licenseIsOsiApproved OFL_1_1 = True licenseIsOsiApproved OGTSL = True licenseIsOsiApproved OLDAP_2_8 = True +licenseIsOsiApproved OLFL_1_3 = True licenseIsOsiApproved OSET_PL_2_1 = True licenseIsOsiApproved OSL_1_0 = True licenseIsOsiApproved OSL_2_0 = True @@ -1612,6 +2075,7 @@ licenseIsOsiApproved SISSL = True licenseIsOsiApproved Sleepycat = True licenseIsOsiApproved SPL_1_0 = True licenseIsOsiApproved UCL_1_0 = True +licenseIsOsiApproved Unicode_3_0 = True licenseIsOsiApproved Unicode_DFS_2016 = True licenseIsOsiApproved Unlicense = True licenseIsOsiApproved UPL_1_0 = True @@ -2055,6 +2519,277 @@ licenseIdList LicenseListVersion_3_16 = , X11_distribute_modifications_variant ] ++ bulkOfLicenses +licenseIdList LicenseListVersion_3_23 = + [ AdaCore_doc + , Adobe_Display_PostScript + , Adobe_Utopia + , AGPL_1_0_only + , AGPL_1_0_or_later + , AML_glslang + , ANTLR_PD_fallback + , App_s2p + , Arphic_1999 + , ASWF_Digital_Assets_1_0 + , ASWF_Digital_Assets_1_1 + , Baekmuk + , Bcrypt_Solar_Designer + , Bitstream_Charter + , Bitstream_Vera + , Blessing + , BlueOak_1_0_0 + , Boehm_GC + , Brian_Gladman_2_Clause + , Brian_Gladman_3_Clause + , BSD_2_Clause_Darwin + , BSD_2_Clause_Views + , BSD_3_Clause_acpica + , BSD_3_Clause_flex + , BSD_3_Clause_HP + , BSD_3_Clause_Modification + , BSD_3_Clause_No_Military_License + , BSD_3_Clause_Open_MPI + , BSD_3_Clause_Sun + , BSD_4_Clause_Shortened + , BSD_4_3RENO + , BSD_4_3TAHOE + , BSD_Advertising_Acknowledgement + , BSD_Attribution_HPND_disclaimer + , BSD_Inferno_Nettverk + , BSD_Source_beginning_file + , BSD_Systemics_W3Works + , BSD_Systemics + , BUSL_1_1 + , C_UDA_1_0 + , CAL_1_0_Combined_Work_Exception + , CAL_1_0 + , Caldera_no_preamble + , CC_BY_2_5_AU + , CC_BY_3_0_AT + , CC_BY_3_0_AU + , CC_BY_3_0_DE + , CC_BY_3_0_IGO + , CC_BY_3_0_NL + , CC_BY_3_0_US + , CC_BY_NC_3_0_DE + , CC_BY_NC_ND_3_0_DE + , CC_BY_NC_ND_3_0_IGO + , CC_BY_NC_SA_2_0_DE + , CC_BY_NC_SA_2_0_FR + , CC_BY_NC_SA_2_0_UK + , CC_BY_NC_SA_3_0_DE + , CC_BY_NC_SA_3_0_IGO + , CC_BY_ND_3_0_DE + , CC_BY_SA_2_0_UK + , CC_BY_SA_2_1_JP + , CC_BY_SA_3_0_AT + , CC_BY_SA_3_0_DE + , CC_BY_SA_3_0_IGO + , CC_PDDC + , CDL_1_0 + , CDLA_Permissive_2_0 + , CERN_OHL_1_1 + , CERN_OHL_1_2 + , CERN_OHL_P_2_0 + , CERN_OHL_S_2_0 + , CERN_OHL_W_2_0 + , CFITSIO + , Check_cvs + , Checkmk + , Clips + , CMU_Mach_nodoc + , CMU_Mach + , COIL_1_0 + , Community_Spec_1_0 + , Copyleft_next_0_3_0 + , Copyleft_next_0_3_1 + , Cornell_Lossless_JPEG + , Cronyx + , DEC_3_Clause + , DL_DE_BY_2_0 + , DL_DE_ZERO_2_0 + , DRL_1_0 + , DRL_1_1 + , Dtoa + , Elastic_2_0 + , EPICS + , Etalab_2_0 + , FBM + , FDK_AAC + , Ferguson_Twofish + , FreeBSD_DOC + , FSFAP_no_warranty_disclaimer + , FSFULLRWD + , Furuseth + , Fwlw + , GCR_docs + , GD + , GFDL_1_1_invariants_only + , GFDL_1_1_invariants_or_later + , GFDL_1_1_no_invariants_only + , GFDL_1_1_no_invariants_or_later + , GFDL_1_2_invariants_only + , GFDL_1_2_invariants_or_later + , GFDL_1_2_no_invariants_only + , GFDL_1_2_no_invariants_or_later + , GFDL_1_3_invariants_only + , GFDL_1_3_invariants_or_later + , GFDL_1_3_no_invariants_only + , GFDL_1_3_no_invariants_or_later + , GLWTPL + , Graphics_Gems + , Gtkbook + , Hdparm + , Hippocratic_2_1 + , HP_1986 + , HP_1989 + , HPND_DEC + , HPND_doc_sell + , HPND_doc + , HPND_export_US_modify + , HPND_export_US + , HPND_Fenneberg_Livingston + , HPND_INRIA_IMAG + , HPND_Kevlin_Henney + , HPND_Markus_Kuhn + , HPND_MIT_disclaimer + , HPND_Pbmplus + , HPND_sell_MIT_disclaimer_xserver + , HPND_sell_regexpr + , HPND_sell_variant_MIT_disclaimer + , HPND_sell_variant + , HPND_UC + , HTMLTIDY + , IEC_Code_Components_EULA + , IJG_short + , Inner_Net_2_0 + , ISC_Veillard + , Jam + , JPL_image + , JPNIC + , Kastrup + , Kazlib + , Knuth_CTAN + , Latex2e_translated_notice + , Libpng_2_0 + , Libselinux_1_0 + , Libutil_David_Nugent + , Linux_man_pages_1_para + , Linux_man_pages_copyleft_2_para + , Linux_man_pages_copyleft_var + , Linux_man_pages_copyleft + , Linux_OpenIB + , LOOP + , LPD_document + , Lsof + , Lucida_Bitmap_Fonts + , LZMA_SDK_9_11_to_9_20 + , LZMA_SDK_9_22 + , Mackerras_3_Clause_acknowledgment + , Mackerras_3_Clause + , Magaz + , Mailprio + , Martin_Birgmeier + , McPhee_slideshow + , Metamail + , Minpack + , MIT_0 + , MIT_Festival + , MIT_Modern_Variant + , MIT_open_group + , MIT_testregex + , MIT_Wu + , MMIXware + , MPEG_SSG + , Mpi_permissive + , Mplus + , MS_LPL + , MulanPSL_1_0 + , MulanPSL_2_0 + , NAIST_2003 + , NCGL_UK_2_0 + , NICTA_1_0 + , NIST_PD_fallback + , NIST_PD + , NIST_Software + , NLOD_2_0 + , NTP_0 + , O_UDA_1_0 + , ODC_By_1_0 + , OFFIS + , OFL_1_0_no_RFN + , OFL_1_0_RFN + , OFL_1_1_no_RFN + , OFL_1_1_RFN + , OGC_1_0 + , OGDL_Taiwan_1_0 + , OGL_Canada_2_0 + , OGL_UK_1_0 + , OGL_UK_2_0 + , OGL_UK_3_0 + , OLFL_1_3 + , OpenPBS_2_3 + , OpenSSL_standalone + , OpenVision + , OPL_UK_3_0 + , OPUBL_1_0 + , PADL + , Parity_6_0_0 + , Parity_7_0_0 + , Pixar + , Pnmstitch + , PolyForm_Noncommercial_1_0_0 + , PolyForm_Small_Business_1_0_0 + , PSF_2_0 + , Python_2_0_1 + , Python_ldap + , QPL_1_0_INRIA_2004 + , Radvd + , SAX_PD_2_0 + , SchemeReport + , Sendmail_8_23 + , SGI_OpenGL + , SGP4 + , SHL_0_51 + , SHL_0_5 + , SL + , Snprintf + , SoftSurfer + , Soundex + , Ssh_keyscan + , SSH_OpenSSH + , SSH_short + , SSLeay_standalone + , SSPL_1_0 + , Sun_PPP + , SunPro + , Swrule + , Symlinks + , TAPR_OHL_1_0 + , TermReadKey + , TGPPL_1_0 + , TPDL + , TPL_1_0 + , TTWL + , TTYP0 + , TU_Berlin_1_0 + , TU_Berlin_2_0 + , UCAR + , UCL_1_0 + , Ulem + , UMich_Merit + , Unicode_3_0 + , UnixCrypt + , URT_RLE + , W3m + , Widget_Workshop + , X11_distribute_modifications_variant + , Xdebug_1_03 + , Xfig + , Xkeyboard_config_Zinoviev + , Xlock + , Zeeff + ] + ++ bulkOfLicenses -- | Create a 'LicenseId' from a 'String'. mkLicenseId :: LicenseListVersion -> String -> Maybe LicenseId @@ -2064,6 +2799,7 @@ mkLicenseId LicenseListVersion_3_6 s = Map.lookup s stringLookup_3_6 mkLicenseId LicenseListVersion_3_9 s = Map.lookup s stringLookup_3_9 mkLicenseId LicenseListVersion_3_10 s = Map.lookup s stringLookup_3_10 mkLicenseId LicenseListVersion_3_16 s = Map.lookup s stringLookup_3_16 +mkLicenseId LicenseListVersion_3_23 s = Map.lookup s stringLookup_3_23 stringLookup_3_0 :: Map String LicenseId stringLookup_3_0 = Map.fromList $ map (\i -> (licenseId i, i)) $ @@ -2089,6 +2825,10 @@ stringLookup_3_16 :: Map String LicenseId stringLookup_3_16 = Map.fromList $ map (\i -> (licenseId i, i)) $ licenseIdList LicenseListVersion_3_16 +stringLookup_3_23 :: Map String LicenseId +stringLookup_3_23 = Map.fromList $ map (\i -> (licenseId i, i)) $ + licenseIdList LicenseListVersion_3_23 + -- | Licenses in all SPDX License lists bulkOfLicenses :: [LicenseId] bulkOfLicenses = diff --git a/Cabal-syntax/src/Distribution/SPDX/LicenseListVersion.hs b/Cabal-syntax/src/Distribution/SPDX/LicenseListVersion.hs index 9aeb6280454..ba6cb0284a3 100644 --- a/Cabal-syntax/src/Distribution/SPDX/LicenseListVersion.hs +++ b/Cabal-syntax/src/Distribution/SPDX/LicenseListVersion.hs @@ -13,9 +13,11 @@ data LicenseListVersion | LicenseListVersion_3_9 | LicenseListVersion_3_10 | LicenseListVersion_3_16 + | LicenseListVersion_3_23 deriving (Eq, Ord, Show, Enum, Bounded) cabalSpecVersionToSPDXListVersion :: CabalSpecVersion -> LicenseListVersion +cabalSpecVersionToSPDXListVersion CabalSpecV3_12 = LicenseListVersion_3_23 cabalSpecVersionToSPDXListVersion CabalSpecV3_8 = LicenseListVersion_3_16 cabalSpecVersionToSPDXListVersion CabalSpecV3_6 = LicenseListVersion_3_10 cabalSpecVersionToSPDXListVersion CabalSpecV3_4 = LicenseListVersion_3_9 diff --git a/Cabal-syntax/src/Distribution/Types/CondTree.hs b/Cabal-syntax/src/Distribution/Types/CondTree.hs index 5fe25e649d7..08a4d691faf 100644 --- a/Cabal-syntax/src/Distribution/Types/CondTree.hs +++ b/Cabal-syntax/src/Distribution/Types/CondTree.hs @@ -21,6 +21,7 @@ module Distribution.Types.CondTree , traverseCondBranchC , extractCondition , simplifyCondTree + , simplifyCondBranch , ignoreConditions ) where @@ -169,7 +170,7 @@ extractCondition p = go in ((c `cAnd` ct) `cOr` (CNot c `cAnd` ce)) `cAnd` goList cs --- | Flattens a CondTree using a partial flag assignment. When a condition +-- | Flattens a CondTree using a partial flag assignment. When a condition -- cannot be evaluated, both branches are ignored. simplifyCondTree :: (Semigroup a, Semigroup d) @@ -177,13 +178,20 @@ simplifyCondTree -> CondTree v d a -> (d, a) simplifyCondTree env (CondNode a d ifs) = - foldl (<>) (d, a) $ mapMaybe simplifyIf ifs - where - simplifyIf (CondBranch cnd t me) = - case simplifyCondition cnd env of - (Lit True, _) -> Just $ simplifyCondTree env t - (Lit False, _) -> fmap (simplifyCondTree env) me - _ -> Nothing + foldl (<>) (d, a) $ mapMaybe (simplifyCondBranch env) ifs + +-- | Realizes a 'CondBranch' using partial flag assignment. When a condition +-- cannot be evaluated, returns 'Nothing'. +simplifyCondBranch + :: (Semigroup a, Semigroup d) + => (v -> Either v Bool) + -> CondBranch v d a + -> Maybe (d, a) +simplifyCondBranch env (CondBranch cnd t me) = + case simplifyCondition cnd env of + (Lit True, _) -> Just $ simplifyCondTree env t + (Lit False, _) -> fmap (simplifyCondTree env) me + _ -> Nothing -- | Flatten a CondTree. This will resolve the CondTree by taking all -- possible paths into account. Note that since branches represent exclusive diff --git a/Cabal-syntax/src/Language/Haskell/Extension.hs b/Cabal-syntax/src/Language/Haskell/Extension.hs index d5fb797eea6..448b1d777c7 100644 --- a/Cabal-syntax/src/Language/Haskell/Extension.hs +++ b/Cabal-syntax/src/Language/Haskell/Extension.hs @@ -54,6 +54,9 @@ data Language | -- | The GHC2021 collection of language extensions. -- GHC2021 + | -- | The GHC2024 collection of language extensions. + -- + GHC2024 | -- | An unknown language, identified by its name. UnknownLanguage String deriving (Generic, Show, Read, Eq, Ord, Typeable, Data) @@ -65,7 +68,7 @@ instance NFData Language where rnf = genericRnf -- | List of known (supported) languages for GHC, oldest first. knownLanguages :: [Language] -knownLanguages = [Haskell98, Haskell2010, GHC2021] +knownLanguages = [Haskell98, Haskell2010, GHC2021, GHC2024] instance Pretty Language where pretty (UnknownLanguage other) = Disp.text other diff --git a/Cabal-tests/Cabal-tests.cabal b/Cabal-tests/Cabal-tests.cabal index 7e9f5e5dbda..f18ad124208 100644 --- a/Cabal-tests/Cabal-tests.cabal +++ b/Cabal-tests/Cabal-tests.cabal @@ -22,7 +22,7 @@ source-repository head library hs-source-dirs: lib exposed-modules: Test.Utils.TempTestDir - build-depends: base, directory, Cabal + build-depends: base, directory, Cabal, filepath, exceptions -- Small, fast running tests. test-suite unit-tests @@ -58,7 +58,7 @@ test-suite unit-tests build-depends: array , async >=2.2.2 && <2.3 - , base >=4.9 && <5 + , base >=4.11 && <5 , binary , bytestring , Cabal diff --git a/Cabal-tests/lib/Test/Utils/TempTestDir.hs b/Cabal-tests/lib/Test/Utils/TempTestDir.hs index 79e8635889f..a4b0b08cba4 100644 --- a/Cabal-tests/lib/Test/Utils/TempTestDir.hs +++ b/Cabal-tests/lib/Test/Utils/TempTestDir.hs @@ -10,24 +10,25 @@ import Distribution.Simple.Utils (warn) import Distribution.Verbosity import Control.Concurrent (threadDelay) -import Control.Exception (bracket, throwIO, try) +import Control.Exception (throwIO, try) import Control.Monad (when) +import Control.Monad.Catch ( bracket, MonadMask) +import Control.Monad.IO.Class import System.Directory import System.IO.Error -#if !(MIN_VERSION_directory(1,2,7)) import System.FilePath (()) -#endif import qualified System.Info (os) -- | Much like 'withTemporaryDirectory' but with a number of hacks to make -- sure on windows that we can clean up the directory at the end. -withTestDir :: Verbosity -> String -> (FilePath -> IO a) -> IO a +withTestDir :: (MonadIO m, MonadMask m) => Verbosity -> String -> (FilePath -> m a) -> m a withTestDir verbosity template action = do - systmpdir <- getTemporaryDirectory + systmpdir <- liftIO getTemporaryDirectory bracket - (createTempDirectory systmpdir template) - (removeDirectoryRecursiveHack verbosity) + ( do { tmpRelDir <- liftIO $ createTempDirectory systmpdir template + ; return $ systmpdir tmpRelDir } ) + (liftIO . removeDirectoryRecursiveHack verbosity) action -- | On Windows, file locks held by programs we run (in this case VCSs) diff --git a/Cabal-tests/tests/CheckTests.hs b/Cabal-tests/tests/CheckTests.hs index 220cc7d1458..aa2f1e9b041 100644 --- a/Cabal-tests/tests/CheckTests.hs +++ b/Cabal-tests/tests/CheckTests.hs @@ -3,7 +3,6 @@ module Main ) where import Test.Tasty -import Test.Tasty.ExpectedFailure import Test.Tasty.Golden.Advanced (goldenTest) import Data.Algorithm.Diff (PolyDiff (..), getGroupedDiff) diff --git a/Cabal-tests/tests/ParserTests/errors/forward-compat.errors b/Cabal-tests/tests/ParserTests/errors/forward-compat.errors index b027e266d20..d0d64f6abc2 100644 --- a/Cabal-tests/tests/ParserTests/errors/forward-compat.errors +++ b/Cabal-tests/tests/ParserTests/errors/forward-compat.errors @@ -1,2 +1,3 @@ VERSION: Just (mkVersion [99999,9]) -forward-compat.cabal:0:0: Unsupported cabal-version 99999.9. See https://github.com/haskell/cabal/issues/4899. +forward-compat.cabal:0:0: Unsupported cabal format version in cabal-version field: 99999.9. +Current cabal-version values are listed at https://cabal.readthedocs.io/en/stable/file-format-changelog.html. diff --git a/Cabal-tests/tests/ParserTests/errors/forward-compat2.errors b/Cabal-tests/tests/ParserTests/errors/forward-compat2.errors index 5270a2d53a3..fdbb38897e1 100644 --- a/Cabal-tests/tests/ParserTests/errors/forward-compat2.errors +++ b/Cabal-tests/tests/ParserTests/errors/forward-compat2.errors @@ -1,2 +1,3 @@ VERSION: Just (mkVersion [2,2]) -forward-compat2.cabal:5:1: cabal-version should be at the beginning of the file starting with spec version 2.2. See https://github.com/haskell/cabal/issues/4899 +forward-compat2.cabal:5:1: cabal-version should be at the beginning of the file starting with spec version 2.2. +Current cabal-version values are listed at https://cabal.readthedocs.io/en/stable/file-format-changelog.html. diff --git a/Cabal-tests/tests/ParserTests/errors/forward-compat3.errors b/Cabal-tests/tests/ParserTests/errors/forward-compat3.errors index 1affcf1174e..2d48094c986 100644 --- a/Cabal-tests/tests/ParserTests/errors/forward-compat3.errors +++ b/Cabal-tests/tests/ParserTests/errors/forward-compat3.errors @@ -1,2 +1,3 @@ VERSION: Just (mkVersion [99999,99]) -forward-compat3.cabal:0:0: Unsupported cabal-version 99999.99. See https://github.com/haskell/cabal/issues/4899. +forward-compat3.cabal:0:0: Unsupported cabal format version in cabal-version field: 99999.99. +Current cabal-version values are listed at https://cabal.readthedocs.io/en/stable/file-format-changelog.html. diff --git a/Cabal-tests/tests/ParserTests/regressions/issue-6288-d.cabal b/Cabal-tests/tests/ParserTests/regressions/issue-6288-d.cabal index 3b435bdd17d..800ff470e51 100644 --- a/Cabal-tests/tests/ParserTests/regressions/issue-6288-d.cabal +++ b/Cabal-tests/tests/ParserTests/regressions/issue-6288-d.cabal @@ -4,7 +4,8 @@ version: 6288 build-type: Simple synopsis: default-language optionality category: Test -description: Field is introduced in 1.10, defaulted in 3.4 +description: Field is introduced in 1.10, defaulted in 3.4, + suggested in cabal 3.12. license: BSD3 license-file: LICENSE maintainer: Cabal Contributors diff --git a/Cabal-tests/tests/ParserTests/regressions/issue-6288-f.check b/Cabal-tests/tests/ParserTests/regressions/issue-6288-f.check index e69de29bb2d..424bf39bd42 100644 --- a/Cabal-tests/tests/ParserTests/regressions/issue-6288-f.check +++ b/Cabal-tests/tests/ParserTests/regressions/issue-6288-f.check @@ -0,0 +1 @@ +[add-language] Without `default-language`, cabal will default to Haskell98, which is probably not what you want. Please add `default-language` to all targets. diff --git a/Cabal-tests/tests/ParserTests/regressions/issue-7776-a.cabal b/Cabal-tests/tests/ParserTests/regressions/issue-7776-a.cabal index b5517d56b1e..3c63ca27a21 100644 --- a/Cabal-tests/tests/ParserTests/regressions/issue-7776-a.cabal +++ b/Cabal-tests/tests/ParserTests/regressions/issue-7776-a.cabal @@ -24,3 +24,4 @@ library GHC.Hs.Type hs-source-dirs: compat-8.10 + default-language: Haskell2010 diff --git a/Cabal-tests/tests/ParserTests/regressions/issue-7776-b.cabal b/Cabal-tests/tests/ParserTests/regressions/issue-7776-b.cabal index 464d6ba334f..0a92165b208 100644 --- a/Cabal-tests/tests/ParserTests/regressions/issue-7776-b.cabal +++ b/Cabal-tests/tests/ParserTests/regressions/issue-7776-b.cabal @@ -15,6 +15,7 @@ library -- the base lower bound makes the package not buildable with ghc < 6.8 -- but cabal is not smart enough to know it :-P build-depends: base >= 4.5 && < 4.15 + default-language: Haskell2010 benchmark benchmarks main-is: Benchmarks.hs @@ -25,3 +26,4 @@ benchmark benchmarks Ghc-options: -fwarn-tabs else other-modules: Data.Hashable.RandomSource + default-language: Haskell2010 diff --git a/Cabal-tests/tests/ParserTests/regressions/issue-7776-c.cabal b/Cabal-tests/tests/ParserTests/regressions/issue-7776-c.cabal index 07755c16e5a..8ef8aa6af54 100644 --- a/Cabal-tests/tests/ParserTests/regressions/issue-7776-c.cabal +++ b/Cabal-tests/tests/ParserTests/regressions/issue-7776-c.cabal @@ -17,3 +17,4 @@ library compat other-modules: GHC.Hs.Type + default-language: Haskell2010 diff --git a/Cabal-tests/tests/UnitTests/Distribution/PackageDescription/Check.hs b/Cabal-tests/tests/UnitTests/Distribution/PackageDescription/Check.hs index 2665b49a6de..662a0684cda 100644 --- a/Cabal-tests/tests/UnitTests/Distribution/PackageDescription/Check.hs +++ b/Cabal-tests/tests/UnitTests/Distribution/PackageDescription/Check.hs @@ -1,6 +1,9 @@ +-- For the deprecated import of Distribution.Compat.Prelude.Internal +{-# OPTIONS_GHC -Wwarn=deprecations #-} + module UnitTests.Distribution.PackageDescription.Check (tests) where -import Distribution.Compat.Prelude.Internal +import Distribution.Compat.Prelude import Prelude () import Distribution.PackageDescription.Check diff --git a/Cabal-tests/tests/UnitTests/Distribution/Simple/Program/GHC.hs b/Cabal-tests/tests/UnitTests/Distribution/Simple/Program/GHC.hs index c399118f893..d66b2eb4316 100644 --- a/Cabal-tests/tests/UnitTests/Distribution/Simple/Program/GHC.hs +++ b/Cabal-tests/tests/UnitTests/Distribution/Simple/Program/GHC.hs @@ -53,12 +53,12 @@ tests = testGroup "Distribution.Simple.Program.GHC" , compilerCompat = [] , compilerLanguages = [] , compilerExtensions = [] - , compilerProperties = Map.singleton "Support parallel --make" "YES" + , compilerProperties = Map.singleton "Support parallel --make" "YES" }) (Platform X86_64 Linux) (mempty { ghcOptNumJobs = Flag (NumJobs (Just 4)) }) assertListEquals flags ["-j4", "-clear-package-db"] - ] + ] ] assertListEquals :: (Eq a, Show a) => [a] -> [a] -> Assertion @@ -190,4 +190,4 @@ options_9_0_all = options_9_0_affects :: [String] options_9_0_affects = [ "-fcmm-static-pred" - ] \ No newline at end of file + ] diff --git a/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs b/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs index 64fff30e0d1..a6142498ae2 100644 --- a/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs +++ b/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs @@ -33,15 +33,15 @@ md5Check proxy md5Int = structureHash proxy @?= md5FromInteger md5Int md5CheckGenericPackageDescription :: Proxy GenericPackageDescription -> Assertion md5CheckGenericPackageDescription proxy = md5Check proxy #if MIN_VERSION_base(4,19,0) - 0x4136daf844669c3c272845160cb5a908 + 0x7559521b9eb2e2fa4a608a86c629dc17 #else - 0x196b441722dfe556ed5b5d1d874741b3 + 0xa78ea118e2e29b5809d359c9431df3ba #endif md5CheckLocalBuildInfo :: Proxy LocalBuildInfo -> Assertion md5CheckLocalBuildInfo proxy = md5Check proxy #if MIN_VERSION_base(4,19,0) - 0x8a30fa23374160aac9cdd1996dc5112b + 0x8a8e81b52a34b8610acdcd0b9d488940 #else - 0x2e959a7f1da8f0d11f6923831ab6ab55 + 0xb53fbd58281a6f329f7b659d91fcd86e #endif diff --git a/Cabal-tree-diff/Cabal-tree-diff.cabal b/Cabal-tree-diff/Cabal-tree-diff.cabal index 34e0b6de00b..fe56f0ed11e 100644 --- a/Cabal-tree-diff/Cabal-tree-diff.cabal +++ b/Cabal-tree-diff/Cabal-tree-diff.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: Cabal-tree-diff -version: 3.11.0.0 +version: 3.12.0.0 synopsis: QuickCheck instances for types in Cabal category: Testing description: Provides tree-diff ToExpr instances for some types in Cabal @@ -11,8 +11,8 @@ library ghc-options: -Wall build-depends: , base - , Cabal-syntax ^>=3.11.0.0 - , Cabal ^>=3.11.0.0 + , Cabal-syntax ^>=3.12.0.0 + , Cabal ^>=3.12.0.0 , tree-diff ^>=0.1 || ^>=0.2 || ^>=0.3 exposed-modules: Data.TreeDiff.Instances.Cabal diff --git a/Cabal/Cabal.cabal b/Cabal/Cabal.cabal index cb07a40aa13..2f2a876b82c 100644 --- a/Cabal/Cabal.cabal +++ b/Cabal/Cabal.cabal @@ -1,6 +1,6 @@ cabal-version: 2.2 name: Cabal -version: 3.11.0.0 +version: 3.12.0.0 copyright: 2003-2024, Cabal Development Team (see AUTHORS file) license: BSD-3-Clause license-file: LICENSE @@ -21,7 +21,7 @@ build-type: Simple -- If we use a new Cabal feature, this needs to be changed to Custom so -- we can bootstrap. -extra-source-files: +extra-doc-files: README.md ChangeLog.md source-repository head @@ -34,9 +34,9 @@ library hs-source-dirs: src build-depends: - Cabal-syntax ^>= 3.11, + Cabal-syntax ^>= 3.12, array >= 0.4.0.1 && < 0.6, - base >= 4.9 && < 5, + base >= 4.11 && < 5, bytestring >= 0.10.0.0 && < 0.13, containers >= 0.5.0.0 && < 0.8, deepseq >= 1.3.0.1 && < 1.6, @@ -44,7 +44,7 @@ library filepath >= 1.3.0.1 && < 1.6, pretty >= 1.1.1 && < 1.2, process >= 1.2.1.0 && < 1.7, - time >= 1.4.0.1 && < 1.13 + time >= 1.4.0.1 && < 1.15 if os(windows) build-depends: Win32 >= 2.3.0.0 && < 2.15 diff --git a/Cabal/ChangeLog.md b/Cabal/ChangeLog.md index 08d6aa838dc..45abf6e691f 100644 --- a/Cabal/ChangeLog.md +++ b/Cabal/ChangeLog.md @@ -1,3 +1,6 @@ +# 3.12.0.0 [Francesco Ariis](mailto:fa-ml@ariis.it) May 2024 +* See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.12.0.0.md + # 3.10.3.0 [Hécate](mailto:hecate+github@glitchbra.in) January 2024 * See https://github.com/haskell/cabal/blob/master/release-notes/Cabal-3.10.3.0.md diff --git a/Cabal/Makefile b/Cabal/Makefile index 4215e971b76..9a241226892 100644 --- a/Cabal/Makefile +++ b/Cabal/Makefile @@ -1,4 +1,4 @@ -VERSION=3.11.0.0 +VERSION=3.12.0.0 #KIND=devel KIND=rc diff --git a/Cabal/README.md b/Cabal/README.md index 6243422a2ce..2bdd6a6ca08 100644 --- a/Cabal/README.md +++ b/Cabal/README.md @@ -34,8 +34,8 @@ Cabal's users what their most pressing problems are with Cabal and [Hackage]. You may have a favourite Cabal bug or limitation. Look at Cabal's [bug tracker]. Ensure that the problem is reported there and adequately described. Comment on the issue to report how much of a -problem the bug is for you. Subscribe to the issues's notifications to -discussed requirements and keep informed on progress. For feature +problem the bug is for you. Subscribe to the issue's notifications to +discuss requirements and keep informed on progress. For feature requests, it is helpful if there is a description of how you would expect to interact with the new feature. diff --git a/Cabal/src/Distribution/PackageDescription/Check/Conditional.hs b/Cabal/src/Distribution/PackageDescription/Check/Conditional.hs index 2d4963e434a..da05b2c80b9 100644 --- a/Cabal/src/Distribution/PackageDescription/Check/Conditional.hs +++ b/Cabal/src/Distribution/PackageDescription/Check/Conditional.hs @@ -58,7 +58,7 @@ updateTargetAnnotation t ta = ta{taTarget = taTarget ta <> t} -- doc for more info). annotateCondTree :: forall a - . Monoid a + . (Eq a, Monoid a) => [PackageFlag] -- User flags. -> TargetAnnotation a -> CondTree ConfVar [Dependency] a @@ -66,7 +66,8 @@ annotateCondTree annotateCondTree fs ta (CondNode a c bs) = let ta' = updateTargetAnnotation a ta bs' = map (annotateBranch ta') bs - in CondNode ta' c bs' + bs'' = crossAnnotateBranches defTrueFlags bs' + in CondNode ta' c bs'' where annotateBranch :: TargetAnnotation a @@ -107,12 +108,55 @@ annotateCondTree fs ta (CondNode a c bs) = ) fs + defTrueFlags :: [PackageFlag] + defTrueFlags = filter flagDefault fs + +-- Propagate contextual information in CondTree branches. This is +-- needed as CondTree is a rosetree and not a binary tree. +crossAnnotateBranches + :: forall a + . (Eq a, Monoid a) + => [PackageFlag] -- `default: true` flags. + -> [CondBranch ConfVar [Dependency] (TargetAnnotation a)] + -> [CondBranch ConfVar [Dependency] (TargetAnnotation a)] +crossAnnotateBranches fs bs = map crossAnnBranch bs + where + crossAnnBranch + :: CondBranch ConfVar [Dependency] (TargetAnnotation a) + -> CondBranch ConfVar [Dependency] (TargetAnnotation a) + crossAnnBranch wr = + let + rs = filter (/= wr) bs + ts = mapMaybe realiseBranch rs + in + updateTargetAnnBranch (mconcat ts) wr + + realiseBranch :: CondBranch ConfVar [Dependency] (TargetAnnotation a) -> Maybe a + realiseBranch b = + let + -- We are only interested in True by default package flags. + realiseBranchFunction :: ConfVar -> Either ConfVar Bool + realiseBranchFunction (PackageFlag n) | elem n (map flagName fs) = Right True + realiseBranchFunction _ = Right False + ms = simplifyCondBranch realiseBranchFunction (fmap taTarget b) + in + fmap snd ms + + updateTargetAnnBranch + :: a + -> CondBranch ConfVar [Dependency] (TargetAnnotation a) + -> CondBranch ConfVar [Dependency] (TargetAnnotation a) + updateTargetAnnBranch a (CondBranch k t mt) = + let updateTargetAnnTree (CondNode ka c wbs) = + (CondNode (updateTargetAnnotation a ka) c wbs) + in CondBranch k (updateTargetAnnTree t) (updateTargetAnnTree <$> mt) + -- | A conditional target is a library, exe, benchmark etc., destructured -- in a CondTree. Traversing method: we render the branches, pass a -- relevant context, collect checks. checkCondTarget :: forall m a - . (Monad m, Monoid a) + . (Monad m, Eq a, Monoid a) => [PackageFlag] -- User flags. -> (a -> CheckM m ()) -- Check function (a = target). -> (UnqualComponentName -> a -> a) @@ -131,7 +175,7 @@ checkCondTarget fs cf nf (unqualName, ct) = :: CondTree ConfVar [Dependency] (TargetAnnotation a) -> CheckM m () wTree (CondNode ta _ bs) - -- There are no branches (and [] == True) *or* every branch + -- There are no branches ([] == True) *or* every branch -- is “simple” (i.e. missing a 'condBranchIfFalse' part). -- This is convenient but not necessarily correct in all -- cases; a more precise way would be to check incompatibility diff --git a/Cabal/src/Distribution/PackageDescription/Check/Target.hs b/Cabal/src/Distribution/PackageDescription/Check/Target.hs index e6cfba74928..531755af992 100644 --- a/Cabal/src/Distribution/PackageDescription/Check/Target.hs +++ b/Cabal/src/Distribution/PackageDescription/Check/Target.hs @@ -483,12 +483,7 @@ checkBuildInfoFeatures bi sv = do (isJust $ defaultLanguage bi) (PackageBuildWarning CVDefaultLanguage) -- CheckSpecVer sv. - checkP - ( sv >= CabalSpecV1_10 - && sv < CabalSpecV3_4 - && isNothing (defaultLanguage bi) - ) - (PackageBuildWarning CVDefaultLanguageComponent) + checkDefaultLanguage -- Check use of 'extra-framework-dirs' field. checkSpecVer CabalSpecV1_24 @@ -534,6 +529,17 @@ checkBuildInfoFeatures bi sv = do (not . null $ cvs) (PackageDistInexcusable CVSources) + checkDefaultLanguage :: Monad m => CheckM m () + checkDefaultLanguage = do + -- < 1.10 has no `default-language` field. + when + (sv >= CabalSpecV1_10 && isNothing (defaultLanguage bi)) + -- < 3.4 mandatory, after just a suggestion. + ( if sv < CabalSpecV3_4 + then tellP (PackageBuildWarning CVDefaultLanguageComponent) + else tellP (PackageDistInexcusable CVDefaultLanguageComponentSoft) + ) + -- Tests for extensions usage which can break Cabal < 1.4. checkBuildInfoExtensions :: Monad m => BuildInfo -> CheckM m () checkBuildInfoExtensions bi = do @@ -852,14 +858,14 @@ checkGHCOptions title t opts = do let ghcNoRts = rmRtsOpts opts checkAlternatives title - "extensions" + "default-extensions" [ (flag, prettyShow extension) | flag <- ghcNoRts , Just extension <- [ghcExtension flag] ] checkAlternatives title - "extensions" + "default-extensions" [ (flag, extension) | flag@('-' : 'X' : extension) <- ghcNoRts ] diff --git a/Cabal/src/Distribution/PackageDescription/Check/Warning.hs b/Cabal/src/Distribution/PackageDescription/Check/Warning.hs index f7a048f7913..6f21d5d0da6 100644 --- a/Cabal/src/Distribution/PackageDescription/Check/Warning.hs +++ b/Cabal/src/Distribution/PackageDescription/Check/Warning.hs @@ -233,6 +233,7 @@ data CheckExplanation | CVTestSuite | CVDefaultLanguage | CVDefaultLanguageComponent + | CVDefaultLanguageComponentSoft | CVExtraDocFiles | CVMultiLib | CVReexported @@ -394,6 +395,7 @@ data CheckExplanationID | CICVTestSuite | CICVDefaultLanguage | CICVDefaultLanguageComponent + | CICVDefaultLanguageComponentSoft | CICVExtraDocFiles | CICVMultiLib | CICVReexported @@ -534,6 +536,7 @@ checkExplanationId (FilePathEmpty{}) = CIFilePathEmpty checkExplanationId (CVTestSuite{}) = CICVTestSuite checkExplanationId (CVDefaultLanguage{}) = CICVDefaultLanguage checkExplanationId (CVDefaultLanguageComponent{}) = CICVDefaultLanguageComponent +checkExplanationId (CVDefaultLanguageComponentSoft{}) = CICVDefaultLanguageComponentSoft checkExplanationId (CVExtraDocFiles{}) = CICVExtraDocFiles checkExplanationId (CVMultiLib{}) = CICVMultiLib checkExplanationId (CVReexported{}) = CICVReexported @@ -679,6 +682,7 @@ ppCheckExplanationId CIFilePathEmpty = "empty-path" ppCheckExplanationId CICVTestSuite = "test-cabal-ver" ppCheckExplanationId CICVDefaultLanguage = "default-language" ppCheckExplanationId CICVDefaultLanguageComponent = "no-default-language" +ppCheckExplanationId CICVDefaultLanguageComponentSoft = "add-language" ppCheckExplanationId CICVExtraDocFiles = "extra-doc-files" ppCheckExplanationId CICVMultiLib = "multilib" ppCheckExplanationId CICVReexported = "reexported-modules" @@ -1163,6 +1167,10 @@ ppExplanation CVDefaultLanguageComponent = ++ "Haskell98 or Haskell2010). If a component uses different languages " ++ "in different modules then list the other ones in the " ++ "'other-languages' field." +ppExplanation CVDefaultLanguageComponentSoft = + "Without `default-language`, cabal will default to Haskell98, which is " + ++ "probably not what you want. Please add `default-language` to all " + ++ "targets." ppExplanation CVExtraDocFiles = "To use the 'extra-doc-files' field the package needs to specify " ++ "'cabal-version: 1.18' or higher." diff --git a/Cabal/src/Distribution/Simple/Build.hs b/Cabal/src/Distribution/Simple/Build.hs index bc6ac7ae6be..746873e4203 100644 --- a/Cabal/src/Distribution/Simple/Build.hs +++ b/Cabal/src/Distribution/Simple/Build.hs @@ -34,6 +34,10 @@ module Distribution.Simple.Build , writeBuiltinAutogenFiles , writeAutogenFiles + -- ** Legacy functions + , componentInitialBuildSteps + , initialBuildSteps + -- * Internal package database creation , createInternalPackageDB ) where @@ -928,6 +932,61 @@ replFLib flags pkg_descr lbi exe clbi = GHC -> GHC.replFLib flags NoFlag pkg_descr lbi exe clbi _ -> dieWithException verbosity REPLNotSupported +-- | Runs 'componentInitialBuildSteps' on every configured component. +-- +-- Legacy function: does not run pre-build hooks or pre-processors. This function +-- is insufficient on its own to prepare the build for a package. +-- +-- Consumers wanting to prepare the sources of a package, e.g. in order to +-- launch a REPL session, are advised to run @Setup repl --repl-multi-file=@ +-- instead. +initialBuildSteps + :: FilePath + -- ^ "dist" prefix + -> PackageDescription + -- ^ mostly information from the .cabal file + -> LocalBuildInfo + -- ^ Configuration information + -> Verbosity + -- ^ The verbosity to use + -> IO () +initialBuildSteps distPref pkg_descr lbi verbosity = + withAllComponentsInBuildOrder pkg_descr lbi $ \_comp clbi -> + componentInitialBuildSteps distPref pkg_descr lbi clbi verbosity +{-# DEPRECATED + initialBuildSteps + "This function does not prepare all source files for a package. Suggestion: use 'Setup repl --repl-multi-file='." + #-} + +-- | Creates the autogenerated files for a particular configured component. +-- +-- Legacy function: does not run pre-build hooks or pre-processors. This function +-- is insufficient on its own to prepare the build for a component. +-- +-- Consumers wanting to prepare the sources of a component, e.g. in order to +-- launch a REPL session, are advised to run +-- @Setup repl --repl-multi-file=@ instead. +componentInitialBuildSteps + :: FilePath + -- ^ "dist" prefix + -> PackageDescription + -- ^ mostly information from the .cabal file + -> LocalBuildInfo + -- ^ Configuration information + -> ComponentLocalBuildInfo + -- ^ Build info about the component + -> Verbosity + -- ^ The verbosity to use + -> IO () +componentInitialBuildSteps _distPref pkg_descr lbi clbi verbosity = do + let compBuildDir = componentBuildDir lbi clbi + createDirectoryIfMissingVerbose verbosity True compBuildDir + writeBuiltinAutogenFiles verbosity pkg_descr lbi clbi +{-# DEPRECATED + componentInitialBuildSteps + "This function does not prepare all source files for a component. Suggestion: use 'Setup repl --repl-multi-file='." + #-} + -- | Pre-build steps for a component: creates the autogenerated files -- for a particular configured component. preBuildComponent @@ -939,7 +998,8 @@ preBuildComponent preBuildComponent verbosity lbi tgt = do let pkg_descr = localPkgDescr lbi clbi = targetCLBI tgt - createDirectoryIfMissingVerbose verbosity True (componentBuildDir lbi clbi) + compBuildDir = componentBuildDir lbi clbi + createDirectoryIfMissingVerbose verbosity True compBuildDir writeBuiltinAutogenFiles verbosity pkg_descr lbi clbi -- | Generate and write to disk all built-in autogenerated files diff --git a/Cabal/src/Distribution/Simple/Build/Macros/Z.hs b/Cabal/src/Distribution/Simple/Build/Macros/Z.hs index 77e0ca4a94d..b43407f1b2a 100644 --- a/Cabal/src/Distribution/Simple/Build/Macros/Z.hs +++ b/Cabal/src/Distribution/Simple/Build/Macros/Z.hs @@ -3,8 +3,8 @@ module Distribution.Simple.Build.Macros.Z (render, Z(..), ZPackage (..), ZTool (..)) where import Distribution.ZinzaPrelude data Z - = Z {zPackages :: ([ZPackage]), - zTools :: ([ZTool]), + = Z {zPackages :: [ZPackage], + zTools :: [ZTool], zPackageKey :: String, zComponentId :: String, zPackageVersion :: Version, diff --git a/Cabal/src/Distribution/Simple/Configure.hs b/Cabal/src/Distribution/Simple/Configure.hs index 1cf7214f035..d6bffddf365 100644 --- a/Cabal/src/Distribution/Simple/Configure.hs +++ b/Cabal/src/Distribution/Simple/Configure.hs @@ -85,7 +85,7 @@ import Distribution.Simple.PackageIndex (InstalledPackageIndex, lookupUnitId) import qualified Distribution.Simple.PackageIndex as PackageIndex import Distribution.Simple.PreProcess import Distribution.Simple.Program -import Distribution.Simple.Program.Db (appendProgramSearchPath, lookupProgramByName) +import Distribution.Simple.Program.Db (lookupProgramByName, modifyProgramSearchPath, prependProgramSearchPath) import Distribution.Simple.Setup.Common as Setup import Distribution.Simple.Setup.Config as Setup import Distribution.Simple.Utils @@ -1236,13 +1236,15 @@ mkPromisedDepsSet comps = Map.fromList [((pn, CLibName ln), cid) | GivenComponen -- arguments. mkProgramDb :: ConfigFlags -> ProgramDb -> IO ProgramDb mkProgramDb cfg initialProgramDb = do - programDb <- appendProgramSearchPath (fromFlagOrDefault normal (configVerbosity cfg)) searchpath initialProgramDb + programDb <- + modifyProgramSearchPath (getProgramSearchPath initialProgramDb ++) -- We need to have the paths to programs installed by build-tool-depends before all other paths + <$> prependProgramSearchPath (fromFlagOrDefault normal (configVerbosity cfg)) searchpath initialProgramDb pure . userSpecifyArgss (configProgramArgs cfg) . userSpecifyPaths (configProgramPaths cfg) $ programDb where - searchpath = fromNubList $ configProgramPathExtra cfg + searchpath = fromNubList (configProgramPathExtra cfg) -- Note. We try as much as possible to _prepend_ rather than postpend the extra-prog-path -- so that we can override the system path. However, in a v2-build, at this point, the "system" path diff --git a/Cabal/src/Distribution/Simple/ConfigureScript.hs b/Cabal/src/Distribution/Simple/ConfigureScript.hs index 2572f4949c1..b7a7f16da25 100644 --- a/Cabal/src/Distribution/Simple/ConfigureScript.hs +++ b/Cabal/src/Distribution/Simple/ConfigureScript.hs @@ -169,7 +169,7 @@ runConfigureScript verbosity flags lbi = do maybeHostFlag = if hp == buildPlatform then [] else ["--host=" ++ show (pretty hp)] args' = configureFile' : args ++ ["CC=" ++ ccProgShort] ++ maybeHostFlag shProg = simpleProgram "sh" - progDb <- appendProgramSearchPath verbosity extraPath emptyProgramDb + progDb <- prependProgramSearchPath verbosity extraPath emptyProgramDb shConfiguredProg <- lookupProgram shProg `fmap` configureProgram verbosity shProg progDb diff --git a/Cabal/src/Distribution/Simple/Errors.hs b/Cabal/src/Distribution/Simple/Errors.hs index 2c5af36a04b..b57d97d6679 100644 --- a/Cabal/src/Distribution/Simple/Errors.hs +++ b/Cabal/src/Distribution/Simple/Errors.hs @@ -48,7 +48,8 @@ data CabalException | EnableBenchMark | BenchMarkNameDisabled String | NoBenchMark String - | NoLibraryFound + | -- | @NoLibraryFound@ has been downgraded to a warning, and is therefore no longer emitted. + NoLibraryFound | CompilerNotInstalled CompilerFlavor | CantFindIncludeFile String | UnsupportedTestSuite String diff --git a/Cabal/src/Distribution/Simple/GHC.hs b/Cabal/src/Distribution/Simple/GHC.hs index d22c7f61849..614de758045 100644 --- a/Cabal/src/Distribution/Simple/GHC.hs +++ b/Cabal/src/Distribution/Simple/GHC.hs @@ -161,14 +161,14 @@ configure verbosity hcPath hcPkgPath conf0 = do (userMaybeSpecifyPath "ghc" hcPath conf0) let implInfo = ghcVersionImplInfo ghcVersion - -- Cabal currently supports ghc >= 7.0.1 && < 9.10 + -- Cabal currently supports ghc >= 7.0.1 && < 9.12 -- ... and the following odd development version - unless (ghcVersion < mkVersion [9, 10]) $ + unless (ghcVersion < mkVersion [9, 12]) $ warn verbosity $ "Unknown/unsupported 'ghc' version detected " ++ "(Cabal " ++ prettyShow cabalVersion - ++ " supports 'ghc' version < 9.10): " + ++ " supports 'ghc' version < 9.12): " ++ programPath ghcProg ++ " is version " ++ prettyShow ghcVersion diff --git a/Cabal/src/Distribution/Simple/GHC/Build/Link.hs b/Cabal/src/Distribution/Simple/GHC/Build/Link.hs index f25c60c887d..d63e6a32bea 100644 --- a/Cabal/src/Distribution/Simple/GHC/Build/Link.hs +++ b/Cabal/src/Distribution/Simple/GHC/Build/Link.hs @@ -655,7 +655,9 @@ runReplOrWriteFlags ghcProg lbi rflags ghcOpts pkg_name target = writeFileAtomic (out_dir this_unit) $ BS.pack $ escapeArgs $ - extra_opts ++ renderGhcOptions comp platform (ghcOpts{ghcOptMode = NoFlag}) + extra_opts + ++ renderGhcOptions comp platform (ghcOpts{ghcOptMode = NoFlag}) + ++ programOverrideArgs ghcProg replNoLoad :: Ord a => ReplOptions -> NubListR a -> NubListR a replNoLoad replFlags l diff --git a/Cabal/src/Distribution/Simple/GHC/ImplInfo.hs b/Cabal/src/Distribution/Simple/GHC/ImplInfo.hs index df1a811bfb6..f575697819b 100644 --- a/Cabal/src/Distribution/Simple/GHC/ImplInfo.hs +++ b/Cabal/src/Distribution/Simple/GHC/ImplInfo.hs @@ -38,6 +38,8 @@ data GhcImplInfo = GhcImplInfo -- ^ -XHaskell2010 and -XHaskell98 flags , supportsGHC2021 :: Bool -- ^ -XGHC2021 flag + , supportsGHC2024 :: Bool + -- ^ -XGHC2024 flag , reportsNoExt :: Bool -- ^ --supported-languages gives Ext and NoExt , alwaysNondecIndent :: Bool @@ -88,6 +90,7 @@ ghcVersionImplInfo ver = GhcImplInfo { supportsHaskell2010 = v >= [7] , supportsGHC2021 = v >= [9, 1] + , supportsGHC2024 = v >= [9, 9] , reportsNoExt = v >= [7] , alwaysNondecIndent = v < [7, 1] , flagGhciScript = v >= [7, 2] @@ -114,6 +117,7 @@ ghcjsVersionImplInfo _ghcjsver ghcver = GhcImplInfo { supportsHaskell2010 = True , supportsGHC2021 = True + , supportsGHC2024 = ghcv >= [9, 9] , reportsNoExt = True , alwaysNondecIndent = False , flagGhciScript = True diff --git a/Cabal/src/Distribution/Simple/GHC/Internal.hs b/Cabal/src/Distribution/Simple/GHC/Internal.hs index 0574a868ba7..43e329fa66b 100644 --- a/Cabal/src/Distribution/Simple/GHC/Internal.hs +++ b/Cabal/src/Distribution/Simple/GHC/Internal.hs @@ -258,6 +258,13 @@ getLanguages -> IO [(Language, String)] getLanguages _ implInfo _ -- TODO: should be using --supported-languages rather than hard coding + | supportsGHC2024 implInfo = + return + [ (GHC2024, "-XGHC2024") + , (GHC2021, "-XGHC2021") + , (Haskell2010, "-XHaskell2010") + , (Haskell98, "-XHaskell98") + ] | supportsGHC2021 implInfo = return [ (GHC2021, "-XGHC2021") diff --git a/Cabal/src/Distribution/Simple/Install.hs b/Cabal/src/Distribution/Simple/Install.hs index 789845c6201..9404da8d82e 100644 --- a/Cabal/src/Distribution/Simple/Install.hs +++ b/Cabal/src/Distribution/Simple/Install.hs @@ -114,7 +114,7 @@ install pkg_descr lbi flags = do checkHasLibsOrExes = unless (hasLibs pkg_descr || hasForeignLibs pkg_descr || hasExes pkg_descr) $ - dieWithException verbosity NoLibraryFound + warn verbosity "No executables and no library found. Nothing to do." -- | Copy package global files. copyPackage @@ -282,7 +282,7 @@ copyComponent _ _ _ (CTest _) _ _ = return () -- | Install the files listed in data-files installDataFiles :: Verbosity -> PackageDescription -> FilePath -> IO () installDataFiles verbosity pkg_descr destDataDir = - flip traverse_ (dataFiles pkg_descr) $ \glob -> do + for_ (dataFiles pkg_descr) $ \glob -> do let srcDataDirRaw = dataDir pkg_descr srcDataDir = if null srcDataDirRaw diff --git a/Cabal/src/Distribution/Simple/Program/Db.hs b/Cabal/src/Distribution/Simple/Program/Db.hs index 4b02a7e6f2e..a5e4e4ab381 100644 --- a/Cabal/src/Distribution/Simple/Program/Db.hs +++ b/Cabal/src/Distribution/Simple/Program/Db.hs @@ -34,7 +34,7 @@ module Distribution.Simple.Program.Db -- ** Query and manipulate the program db , addKnownProgram , addKnownPrograms - , appendProgramSearchPath + , prependProgramSearchPath , lookupKnownProgram , knownPrograms , getProgramSearchPath @@ -223,14 +223,14 @@ modifyProgramSearchPath f db = setProgramSearchPath (f $ getProgramSearchPath db) db -- | Modify the current 'ProgramSearchPath' used by the 'ProgramDb' --- by appending the provided extra paths. Also logs the added paths +-- by prepending the provided extra paths. Also logs the added paths -- in info verbosity. -appendProgramSearchPath +prependProgramSearchPath :: Verbosity -> [FilePath] -> ProgramDb -> IO ProgramDb -appendProgramSearchPath verbosity extraPaths db = +prependProgramSearchPath verbosity extraPaths db = if not $ null extraPaths then do logExtraProgramSearchPath verbosity extraPaths diff --git a/Cabal/src/Distribution/Simple/Program/Types.hs b/Cabal/src/Distribution/Simple/Program/Types.hs index f1b42f63853..53105b6c9a3 100644 --- a/Cabal/src/Distribution/Simple/Program/Types.hs +++ b/Cabal/src/Distribution/Simple/Program/Types.hs @@ -97,7 +97,7 @@ type ProgArg = String -- We also use this path to set the environment when running child processes. -- -- The @ProgramDb@ is created with a @ProgramSearchPath@ to which we --- @appendProgramSearchPath@ to add the ones that come from cli flags and from +-- @prependProgramSearchPath@ to add the ones that come from cli flags and from -- configurations. Then each of the programs that are configured in the db -- inherits the same path as part of @configureProgram@. type ProgramSearchPath = [ProgramSearchPathEntry] diff --git a/Makefile b/Makefile index 2c84c9d8d98..43e65b6382e 100644 --- a/Makefile +++ b/Makefile @@ -1,31 +1,45 @@ -.PHONY : all lexer sdpx lib exe doctest -.PHONY : phony +.PHONY: phony + # Adding dependency "phony" is like declaring a target as ".PHONY": + # See https://www.gnu.org/software/make/manual/html_node/Force-Targets.html CABALBUILD := cabal build CABALRUN := cabal run -DOCTEST := cabal repl --with-ghc=doctest --repl-options="-w" --project-file=cabal.project.doctest + +# The newer and prefered way to call the doctest tool is: +# $ cabal repl --with-ghc=doctest +# SEE: https://github.com/haskell/cabal/issues/8504 +# There is but one caveat, we have to avoid allow-newer. +# SEE: https://github.com/haskell/cabal/issues/6859 +DOCTEST := cabal repl --with-ghc=doctest --repl-options="-w" --ghc-options="-Wwarn" --allow-newer=False # default rules +.PHONY: all all : exe lib -lib : $(LEXER_HS) +.PHONY: lib +lib : $(CABALBUILD) Cabal:libs -exe : $(LEXER_HS) +.PHONY: exe +exe : $(CABALBUILD) cabal-install:exes +.PHONY: init init: ## Set up git hooks and ignored revisions @git config core.hooksPath .githooks ## TODO +.PHONY: style style: ## Run the code styler @fourmolu -q -i Cabal Cabal-syntax cabal-install +.PHONY: style-modified style-modified: ## Run the code styler on modified files @git ls-files --modified Cabal Cabal-syntax cabal-install \ | grep '.hs$$' | xargs -P $(PROCS) -I {} fourmolu -q -i {} +.PHONY: style-commit style-commit: ## Run the code styler on the previous commit @git diff --name-only HEAD $(COMMIT) Cabal Cabal-syntax cabal-install \ | grep '.hs$$' | xargs -P $(PROCS) -I {} fourmolu -q -i {} @@ -35,28 +49,36 @@ style-commit: ## Run the code styler on the previous commit SPDX_LICENSE_HS:=Cabal-syntax/src/Distribution/SPDX/LicenseId.hs SPDX_EXCEPTION_HS:=Cabal-syntax/src/Distribution/SPDX/LicenseExceptionId.hs +# Note: the 'spdx' goal is used in .github/workflows/quick-jobs.yml. +# Any changes to this goal need to be reconciled with this workflow. +# +.PHONY: spdx spdx : $(SPDX_LICENSE_HS) $(SPDX_EXCEPTION_HS) -SPDX_LICENSE_VERSIONS:=3.0 3.2 3.6 3.9 3.10 3.16 +SPDX_LICENSE_VERSIONS:=3.0 3.2 3.6 3.9 3.10 3.16 3.23 $(SPDX_LICENSE_HS) : templates/SPDX.LicenseId.template.hs cabal-dev-scripts/src/GenUtils.hs cabal-dev-scripts/src/GenSPDX.hs license-list-data/licenses-3.0.json license-list-data/licenses-3.2.json - cabal run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-spdx -- templates/SPDX.LicenseId.template.hs $(SPDX_LICENSE_VERSIONS:%=license-list-data/licenses-%.json) $(SPDX_LICENSE_HS) + cabal run --builddir=dist-newstyle-meta --project-file=cabal.meta.project gen-spdx -- templates/SPDX.LicenseId.template.hs $(SPDX_LICENSE_VERSIONS:%=license-list-data/licenses-%.json) $(SPDX_LICENSE_HS) $(SPDX_EXCEPTION_HS) : templates/SPDX.LicenseExceptionId.template.hs cabal-dev-scripts/src/GenUtils.hs cabal-dev-scripts/src/GenSPDXExc.hs license-list-data/exceptions-3.0.json license-list-data/exceptions-3.2.json - cabal run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-spdx-exc -- templates/SPDX.LicenseExceptionId.template.hs $(SPDX_LICENSE_VERSIONS:%=license-list-data/exceptions-%.json) $(SPDX_EXCEPTION_HS) + cabal run --builddir=dist-newstyle-meta --project-file=cabal.meta.project gen-spdx-exc -- templates/SPDX.LicenseExceptionId.template.hs $(SPDX_LICENSE_VERSIONS:%=license-list-data/exceptions-%.json) $(SPDX_EXCEPTION_HS) # source generation: templates TEMPLATE_MACROS:=Cabal/src/Distribution/Simple/Build/Macros/Z.hs TEMPLATE_PATHS:=Cabal/src/Distribution/Simple/Build/PathsModule/Z.hs -templates : phony $(TEMPLATE_MACROS) $(TEMPLATE_PATHS) +# Note: the 'templates' goal is used in .github/workflows/quick-jobs.yml. +# Any changes to this goal need to be reconciled with this workflow. +# +.PHONY: templates +templates : $(TEMPLATE_MACROS) $(TEMPLATE_PATHS) $(TEMPLATE_MACROS) : templates/cabal_macros.template.h cabal-dev-scripts/src/GenCabalMacros.hs - cabal run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-cabal-macros -- $< $@ + cabal run --builddir=dist-newstyle-meta --project-file=cabal.meta.project gen-cabal-macros -- $< $@ $(TEMPLATE_PATHS) : templates/Paths_pkg.template.hs cabal-dev-scripts/src/GenPathsModule.hs - cabal run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-paths-module -- $< $@ + cabal run --builddir=dist-newstyle-meta --project-file=cabal.meta.project gen-paths-module -- $< $@ # generated docs # Use cabal build before cabal run to avoid output of the build on stdout when running @@ -65,31 +87,25 @@ doc/buildinfo-fields-reference.rst : \ $(wildcard Cabal-described/src/Distribution/Described.hs Cabal-described/src/Distribution/Utils/*.hs) \ buildinfo-reference-generator/src/Main.hs \ buildinfo-reference-generator/template.zinza - cabal build --project-file=cabal.project.buildinfo buildinfo-reference-generator - cabal run --project-file=cabal.project.buildinfo buildinfo-reference-generator buildinfo-reference-generator/template.zinza | tee $@ + cabal build buildinfo-reference-generator + cabal run buildinfo-reference-generator buildinfo-reference-generator/template.zinza | tee $@ git diff --exit-code $@ -# analyse-imports -analyse-imports : phony - find Cabal-syntax/src Cabal/src cabal-install/src -type f -name '*.hs' | xargs cabal run --builddir=dist-newstyle-meta --project-file=cabal.project.meta analyse-imports -- +.PHONY: analyse-imports +analyse-imports : + find Cabal-syntax/src Cabal/src cabal-install/src -type f -name '*.hs' | xargs cabal run --builddir=dist-newstyle-meta --project-file=cabal.meta.project analyse-imports -- # ghcid +.PHONY: ghcid-lib ghcid-lib : ghcid -c 'cabal repl Cabal' +.PHONY: ghcid-cli ghcid-cli : ghcid -c 'cabal repl cabal-install' -# Artem, 2023-02-03, https://github.com/haskell/cabal/issues/8504 -# The new and prefered way to call the doctest tool (as of now) is based on cabal repl --with-ghc=doctest. -# The call below reflects the current documentation of the doctest tool except one caveat, -# which is https://github.com/haskell/cabal/issues/6859, i.e. we have to hide allow-newer in our project -# file from cabal/doctest. This is easy: we just select a project file with no allow-newer (e.g. cabal.project.libonly). -# -# TODO: Cabal-described should be added here but its doctests currently broken, see: -# https://github.com/haskell/cabal/issues/8734 -# Just as well, cabal-install(-solver) doctests (the target below) bitrotted and need some care. +.PHONY: doctest doctest : $(DOCTEST) Cabal-syntax $(DOCTEST) Cabal-described @@ -98,32 +114,41 @@ doctest : $(DOCTEST) cabal-install # This is not run as part of validate.sh (we need hackage-security, which is tricky to get). +.PHONY: doctest-cli doctest-cli : doctest -D__DOCTEST__ --fast cabal-install/src cabal-install-solver/src cabal-install-solver/src-assertion +.PHONY: doctest-install doctest-install: cabal install doctest --overwrite-policy=always --ignore-project # tests +.PHONY: check-tests check-tests : $(CABALRUN) check-tests -- --cwd Cabal-tests ${TEST} +.PHONY: parser-tests parser-tests : $(CABALRUN) parser-tests -- --cwd Cabal-tests ${TEST} +.PHONY: parser-tests-accept parser-tests-accept : $(CABALRUN) parser-tests -- --cwd Cabal-tests --accept ${TEST} +.PHONY: custom-setup-tests custom-setup-tests : $(CABALRUN) custom-setup-tests -- +.PHONY: hackage-parsec-tests hackage-parsec-tests : $(CABALRUN) hackage-tests -- parsec +RTS -s -qg -I0 -A64M -N${THREADS} -RTS ${TEST} +.PHONY: hackage-rountrip-tests hackage-roundtrip-tests : $(CABALRUN) hackage-tests -- roundtrip +RTS -s -qg -I0 -A64M -N${THREADS} -RTS ${TEST} +.PHONY: cabal-install-test cabal-install-test: $(CABALBUILD) -j3 cabal-tests cabal rm -rf .ghc.environment.* @@ -131,6 +156,7 @@ cabal-install-test: # hackage-benchmarks (solver) +.PHONY: hackage-benchmarks-run hackage-benchmarks-run: $(CABALBUILD) -j3 hackage-benchmark cabal rm -rf .ghc.environment.* @@ -138,6 +164,7 @@ hackage-benchmarks-run: # This doesn't run build, as you first need to test with cabal-install-test :) +.PHONY: cabal-install-test-accept cabal-install-test-accept: rm -rf .ghc.environment.* cd cabal-testsuite && `cabal list-bin cabal-tests` --with-cabal=`cabal list-bin cabal` --hide-successes -j3 --accept ${TEST} @@ -148,12 +175,14 @@ cabal-install-test-accept: # # make validate-via-docker-all -j4 -O # +.PHONY: validate-via-docker-all validate-via-docker-all : validate-via-docker-8.2.2 validate-via-docker-all : validate-via-docker-8.4.4 validate-via-docker-all : validate-via-docker-8.6.5 validate-via-docker-all : validate-via-docker-8.8.4 validate-via-docker-all : validate-via-docker-8.10.4 +.PHONY: validate-dockerfiles validate-dockerfiles : .docker/validate-8.10.4.dockerfile validate-dockerfiles : .docker/validate-8.8.4.dockerfile validate-dockerfiles : .docker/validate-8.6.5.dockerfile @@ -161,35 +190,36 @@ validate-dockerfiles : .docker/validate-8.4.4.dockerfile validate-dockerfiles : .docker/validate-8.2.2.dockerfile .docker/validate-%.dockerfile : .docker/validate.dockerfile.zinza cabal-dev-scripts/src/GenValidateDockerfile.hs - cabal run --builddir=dist-newstyle-meta --project-file=cabal.project.meta gen-validate-dockerfile -- $* $< $@ + cabal run --builddir=dist-newstyle-meta --project-file=cabal.meta.project gen-validate-dockerfile -- $* $< $@ # This is good idea anyway # and we have a test relying on this limit being sufficiently small DOCKERARGS:=--ulimit nofile=1024:1024 +.PHONY: validate-via-docker-8.2.2 validate-via-docker-8.2.2: docker build $(DOCKERARGS) -t cabal-validate:8.2.2 -f .docker/validate-8.2.2.dockerfile . +.PHONY: validate-via-docker-8.4.4 validate-via-docker-8.4.4: docker build $(DOCKERARGS) -t cabal-validate:8.4.4 -f .docker/validate-8.4.4.dockerfile . +.PHONY: validate-via-docker-8.6.5 validate-via-docker-8.6.5: docker build $(DOCKERARGS) -t cabal-validate:8.6.5 -f .docker/validate-8.6.5.dockerfile . +.PHONY: validate-via-docker-8.8.4 validate-via-docker-8.8.4: docker build $(DOCKERARGS) -t cabal-validate:8.8.4 -f .docker/validate-8.8.4.dockerfile . +.PHONY: validate-via-docker-8.10.4 validate-via-docker-8.10.4: docker build $(DOCKERARGS) -t cabal-validate:8.10.4 -f .docker/validate-8.10.4.dockerfile . +.PHONY: validate-via-docker-old validate-via-docker-old: docker build $(DOCKERARGS) -t cabal-validate:older -f .docker/validate-old.dockerfile . -# Weeder -weeder : - cabal build all --project-file=cabal.project.weeder - weeder | less - # tags .PHONY : tags tags : @@ -199,14 +229,15 @@ tags : ############################################################################## bootstrap-json-%: phony - cabal build --project=cabal.project.release --with-compiler=ghc-$* --dry-run cabal-install:exe:cabal + cabal build --project-file=cabal.bootstrap.project --with-compiler=ghc-$* --dry-run cabal-install:exe:cabal cp dist-newstyle/cache/plan.json bootstrap/linux-$*.plan.json @# -v0 to avoid build output on stdout cd bootstrap && cabal run -v0 cabal-bootstrap-gen -- linux-$*.plan.json \ | python3 -m json.tool > linux-$*.json -BOOTSTRAP_GHC_VERSIONS := 8.10.7 9.0.2 9.2.7 9.4.4 +BOOTSTRAP_GHC_VERSIONS := 9.0.2 9.2.8 9.4.8 9.6.4 9.8.2 +.PHONY: bootstrap-jsons bootstrap-jsons: $(BOOTSTRAP_GHC_VERSIONS:%=bootstrap-json-%) # documentation diff --git a/README.md b/README.md index ef856af7efb..77e8db706ef 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ Currently, we only provide binaries for `x86_64` platforms. ``` Replace "Linux" with "Windows" or "macOS" as appropriate. - + The default Linux build is dynamically linked against `zlib`, `gmp` and `glibc`. You will need to have appropriate versions of these libraries installed to use it. Alternatively a statically linked "Linux-static" binary is also provided. @@ -50,7 +50,7 @@ Currently, we only provide binaries for `x86_64` platforms. You might need to add the following to your `cabal.project` file if your build fails because of an out-of-date `Cabal` library: ``` - allow-newer: + allow-newer: *:Cabal, *:Cabal-syntax @@ -83,7 +83,7 @@ Ways to build `cabal-install` for everyday use Git repository, move to its root, and run: ``` - cabal install --project-file=cabal.project.release cabal-install + cabal install --project-file=cabal.release.project cabal-install ``` 3. _Bootstrapping_: diff --git a/bootstrap/cabal-bootstrap-gen.cabal b/bootstrap/cabal-bootstrap-gen.cabal index c87e673c9a8..e073ea70bae 100644 --- a/bootstrap/cabal-bootstrap-gen.cabal +++ b/bootstrap/cabal-bootstrap-gen.cabal @@ -8,11 +8,11 @@ executable cabal-bootstrap-gen ghc-options: -Wall main-is: Main.hs build-depends: - , aeson ^>=1.5.2.0 || ^>=2.0.3.0 || ^>=2.1.0.0 - , base ^>=4.12.0.0 || ^>=4.13.0.0 || ^>=4.14.0.0 || ^>=4.15.0.0 || ^>=4.16.0.0 || ^>=4.17.0.0 + , aeson ^>=1.5.2.0 || ^>=2.0.3.0 || ^>=2.1.0.0 || ^>=2.2.0.0 + , base ^>=4.12.0.0 || ^>=4.13.0.0 || ^>=4.14.0.0 || ^>=4.15.0.0 || ^>=4.16.0.0 || ^>=4.17.0.0 || ^>=4.18.0.0 || ^>= 4.19.0.0 , bytestring ^>=0.10.8.2 || ^>=0.11.0.0 - , Cabal ^>=3.4.1.0 || ^>=3.6.3.0 || ^>=3.10.1.0 - , Cabal-syntax ^>=3.10.1.0 + , Cabal ^>=3.4.1.0 || ^>=3.6.3.0 || ^>=3.10.1.0 || ^>=3.12.0.0 + , Cabal-syntax ^>=3.10.1.0 || ^>=3.12.0.0 , cabal-install-parsers ^>=0.3.0.1 || ^>=0.4.5 || ^>=0.6 , cabal-plan ^>=0.7.0.0 , containers ^>=0.6.0.1 diff --git a/bootstrap/cabal.project b/bootstrap/cabal.project index d1eb5750c9d..55528fb216c 100644 --- a/bootstrap/cabal.project +++ b/bootstrap/cabal.project @@ -3,3 +3,6 @@ packages: . optimization: False + +allow-newer: + cabal-plan:base diff --git a/bootstrap/generate_bootstrap_plans b/bootstrap/generate_bootstrap_plans index d81b088bb64..19a3c5f4543 100755 --- a/bootstrap/generate_bootstrap_plans +++ b/bootstrap/generate_bootstrap_plans @@ -10,7 +10,7 @@ run() { local drv="ghc-$ver" echo "$ver" nix build -f "$ghcs_nix" $drv - (cd ../; rm -r dist-bootstrap; cabal --distdir=dist-bootstrap build --project-file=cabal.project.release --dry-run cabal-install:exe:cabal -w bootstrap/result/bin/ghc) + (cd ../; rm -r dist-bootstrap; cabal --distdir=dist-bootstrap build --project-file=cabal.bootstrap.project --dry-run cabal-install:exe:cabal -w bootstrap/result/bin/ghc) jq --sort-keys < ../dist-bootstrap/cache/plan.json > "plan-$ver.json" cabal run --with-ghc-pkg $PWD/boot_ghc/bin/ghc-pkg -w $PWD/boot_ghc/bin/ghc -v0 cabal-bootstrap-gen -- "plan-$ver.json" | jq --sort-keys | tee "linux-$(echo $ver | tr "_" ".").json" } diff --git a/bootstrap/linux-8.10.7.json b/bootstrap/linux-8.10.7.json deleted file mode 100644 index f20d989baa5..00000000000 --- a/bootstrap/linux-8.10.7.json +++ /dev/null @@ -1,560 +0,0 @@ -{ - "builtin": [ - { - "package": "rts", - "version": "1.0.1" - }, - { - "package": "ghc-prim", - "version": "0.6.1" - }, - { - "package": "integer-gmp", - "version": "1.0.3.0" - }, - { - "package": "base", - "version": "4.14.3.0" - }, - { - "package": "array", - "version": "0.5.4.0" - }, - { - "package": "deepseq", - "version": "1.4.4.0" - }, - { - "package": "containers", - "version": "0.6.5.1" - }, - { - "package": "ghc-boot-th", - "version": "8.10.7" - }, - { - "package": "pretty", - "version": "1.1.3.6" - }, - { - "package": "template-haskell", - "version": "2.16.0.0" - }, - { - "package": "transformers", - "version": "0.5.6.2" - }, - { - "package": "mtl", - "version": "2.2.2" - }, - { - "package": "stm", - "version": "2.5.0.1" - }, - { - "package": "exceptions", - "version": "0.10.4" - }, - { - "package": "time", - "version": "1.9.3" - } - ], - "dependencies": [ - { - "cabal_sha256": "ad89e28b2b046175698fbf542af2ce43e5d2af50aae9f48d12566b1bb3de1d3c", - "component": "lib:data-array-byte", - "flags": [], - "package": "data-array-byte", - "revision": 2, - "source": "hackage", - "src_sha256": "1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600", - "version": "0.1.0.1" - }, - { - "cabal_sha256": "9fc077ff5b7ed2246773c3ac4370ef8822e4834d4587522b68ae551a5968fb86", - "component": "lib:bytestring", - "flags": [], - "package": "bytestring", - "revision": 0, - "source": "hackage", - "src_sha256": "a93fe5fbc8062656bd611ab1529b4879bb61411eda6529b350c7bf3aaf7dba3e", - "version": "0.12.0.2" - }, - { - "cabal_sha256": "d9e181e1acae0ac505d8b217dec3805c68554878f1e32b3d8351b9ce17061623", - "component": "lib:filepath", - "flags": [ - "-cpphs" - ], - "package": "filepath", - "revision": 0, - "source": "hackage", - "src_sha256": "337a0b5bcf0898cb7f51ff327528cf26f4ac38baed7b66b28fbdea334699d8ed", - "version": "1.4.300.1" - }, - { - "cabal_sha256": "633f15ef0bd50a16a7b5c5e86e6659fee6e4e211e098cc8bd0029f452bfcfddc", - "component": "lib:unix", - "flags": [ - "-os-string" - ], - "package": "unix", - "revision": 0, - "source": "hackage", - "src_sha256": "d70b81e242ee7e2e866118616c5b97afca9047e76bbfd51baa085a38db92857d", - "version": "2.8.5.0" - }, - { - "cabal_sha256": "bd3b0a0947a365d2da80b9f4a960a864d42ffa7a46577fdc7a0611703486a7f9", - "component": "lib:directory", - "flags": [], - "package": "directory", - "revision": 1, - "source": "hackage", - "src_sha256": "bd8253197587d32d4553070d2de89d3817176860932b0e9ab7bb7ba3759d8e9c", - "version": "1.3.8.1" - }, - { - "cabal_sha256": "348778ae5f77f946e45b88c6c94b3a65c655954e5f07f6d7dfa6c99efde5248c", - "component": "exe:alex", - "flags": [], - "package": "alex", - "revision": 0, - "source": "hackage", - "src_sha256": "caed9f23b4bc1cdd6f8083b79a0bb86ba86ed81ab9a1238fe0e13ed544809fed", - "version": "3.5.0.0" - }, - { - "cabal_sha256": "81f468c1c75fd6535152ab69b2d32ac6cfcc03e345267b069abe4da56ec95801", - "component": "lib:binary", - "flags": [], - "package": "binary", - "revision": 0, - "source": "hackage", - "src_sha256": "ac21ca63452dfc9b0bcab87c57699c531d87f7a9bcb6230ca46fba1b7faeebc0", - "version": "0.8.9.1" - }, - { - "cabal_sha256": "471b9a22f88b1d51bc343e7d1db7bf88b84e1582eb6d5fbe643fe7afc683c256", - "component": "lib:text", - "flags": [ - "-developer", - "+simdutf" - ], - "package": "text", - "revision": 0, - "source": "hackage", - "src_sha256": "cbe65b04a28a96a1de364d19c5ee33dc63cd253aa2716d22ceb8496b2062b6c8", - "version": "2.1" - }, - { - "cabal_sha256": "6cf18e59d9f1c5b40385457b82ab679dc18d3c5bd3c2c67b2f94e1e8732e6624", - "component": "lib:parsec", - "flags": [], - "package": "parsec", - "revision": 0, - "source": "hackage", - "src_sha256": "58c500bec1ec3c849c8243ddfd675a5983b17a8e5da55acea6adade5ae179d36", - "version": "3.1.17.0" - }, - { - "cabal_sha256": null, - "component": "lib:Cabal-syntax", - "flags": [], - "package": "Cabal-syntax", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "8b4bce2749e4f61a440049e6088487003e8023c720e2019345e399d50888594f", - "component": "lib:process", - "flags": [], - "package": "process", - "revision": 2, - "source": "hackage", - "src_sha256": "aa5f4c4fe4974f89f5ab998c7509daa4bda3926cfb06daacd5eba892aad8a37e", - "version": "1.6.18.0" - }, - { - "cabal_sha256": null, - "component": "lib:Cabal", - "flags": [], - "package": "Cabal", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "488cca2a179a5141da8f35a3a7e6699a0ef690f834f589d6b152c4947aa8fe2d", - "component": "exe:hsc2hs", - "flags": [ - "-in-ghc-tree" - ], - "package": "hsc2hs", - "revision": 1, - "source": "hackage", - "src_sha256": "6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76", - "version": "0.68.10" - }, - { - "cabal_sha256": "e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def", - "component": "lib:network", - "flags": [ - "-devel" - ], - "package": "network", - "revision": 1, - "source": "hackage", - "src_sha256": "b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e", - "version": "3.1.4.0" - }, - { - "cabal_sha256": "f5f2c679ecc1c1b83d2d68db6cc564e5c78d53425e69e1b9e36784820e122d37", - "component": "lib:th-compat", - "flags": [], - "package": "th-compat", - "revision": 4, - "source": "hackage", - "src_sha256": "d8f97ac14ab47b6b8a7b0fdb4ff95426322ec56badd01652ac15da4a44d4bab8", - "version": "0.1.4" - }, - { - "cabal_sha256": "6fffb57373962b5651a2db8b0af732098b3bf029a7ced76a9855615de2026588", - "component": "lib:network-uri", - "flags": [], - "package": "network-uri", - "revision": 1, - "source": "hackage", - "src_sha256": "9c188973126e893250b881f20e8811dca06c223c23402b06f7a1f2e995797228", - "version": "2.6.4.2" - }, - { - "cabal_sha256": "0e37572590743e49d7a610f472e1618a594dc861410846f64d9f2347923c4f5b", - "component": "lib:HTTP", - "flags": [ - "-conduit10", - "+network-uri", - "-warn-as-error", - "-warp-tests" - ], - "package": "HTTP", - "revision": 3, - "source": "hackage", - "src_sha256": "df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453", - "version": "4000.4.1" - }, - { - "cabal_sha256": "c4733d09f798fc4304e936924a1a7d9fc2425aefad6c46ad4592035254b46051", - "component": "lib:base-orphans", - "flags": [], - "package": "base-orphans", - "revision": 0, - "source": "hackage", - "src_sha256": "5bbf2da382c5b212d6a8be2f8c49edee0eba30f272a15fd32c13e6e4091ef172", - "version": "0.9.1" - }, - { - "cabal_sha256": "f3bf68acfa0df7a064a378ef2cdcfeb55e6fb96100675f4c593556dcbf3d7194", - "component": "lib:hashable", - "flags": [ - "+integer-gmp", - "-random-initial-seed" - ], - "package": "hashable", - "revision": 1, - "source": "hackage", - "src_sha256": "32efb16c2891786209b7cbe5c39df9b3a9ae51e836f1a54f646bc4602b7ab0f5", - "version": "1.4.3.0" - }, - { - "cabal_sha256": "957d5ca4496e7048e3e78f108dbdc3e391eafe60b50417486e4c28957d430b05", - "component": "lib:async", - "flags": [ - "-bench" - ], - "package": "async", - "revision": 0, - "source": "hackage", - "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", - "version": "2.2.5" - }, - { - "cabal_sha256": "a694e88f9ec9fc79f0b03f233d3fea592b68f70a34aac2ddb5bcaecb6562e2fd", - "component": "lib:base16-bytestring", - "flags": [], - "package": "base16-bytestring", - "revision": 1, - "source": "hackage", - "src_sha256": "1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784", - "version": "1.0.2.0" - }, - { - "cabal_sha256": "45305ccf8914c66d385b518721472c7b8c858f1986945377f74f85c1e0d49803", - "component": "lib:base64-bytestring", - "flags": [], - "package": "base64-bytestring", - "revision": 1, - "source": "hackage", - "src_sha256": "fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9", - "version": "1.2.1.0" - }, - { - "cabal_sha256": "bac0ae8d46a04e410666b0c8081cff63f060f29157983b569ca86ddb6e6e0dc6", - "component": "lib:splitmix", - "flags": [ - "-optimised-mixer" - ], - "package": "splitmix", - "revision": 0, - "source": "hackage", - "src_sha256": "9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002", - "version": "0.1.0.5" - }, - { - "cabal_sha256": "32397de181e20ccaacf806ec70de9308cf044f089a2be37c936f3f8967bde867", - "component": "lib:random", - "flags": [], - "package": "random", - "revision": 0, - "source": "hackage", - "src_sha256": "790f4dc2d2327c453ff6aac7bf15399fd123d55e927935f68f84b5df42d9a4b4", - "version": "1.2.1.2" - }, - { - "cabal_sha256": "4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee", - "component": "lib:edit-distance", - "flags": [], - "package": "edit-distance", - "revision": 1, - "source": "hackage", - "src_sha256": "3e8885ee2f56ad4da940f043ae8f981ee2fe336b5e8e4ba3f7436cff4f526c4a", - "version": "0.2.2.1" - }, - { - "cabal_sha256": null, - "component": "lib:cabal-install-solver", - "flags": [ - "-debug-expensive-assertions", - "-debug-tracetree" - ], - "package": "cabal-install-solver", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "03db065161987f614a3a2bbcd16264f78e47efe231fb5bd161be2043eaf20488", - "component": "lib:cryptohash-sha256", - "flags": [ - "-exe", - "+use-cbits" - ], - "package": "cryptohash-sha256", - "revision": 3, - "source": "hackage", - "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", - "version": "0.11.102.1" - }, - { - "cabal_sha256": "ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42", - "component": "lib:echo", - "flags": [ - "-example" - ], - "package": "echo", - "revision": 0, - "source": "hackage", - "src_sha256": "c9fe1bf2904825a65b667251ec644f197b71dc5c209d2d254be5de3d496b0e43", - "version": "0.1.4" - }, - { - "cabal_sha256": "48383789821af5cc624498f3ee1d0939a070cda9468c0bfe63c951736be81c75", - "component": "lib:ed25519", - "flags": [ - "+no-donna", - "+test-doctests", - "+test-hlint", - "+test-properties" - ], - "package": "ed25519", - "revision": 8, - "source": "hackage", - "src_sha256": "d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d", - "version": "0.0.5.0" - }, - { - "cabal_sha256": "17786545dce60c4d5783ba6125c0a6499a1abddd3d7417b15500ccd767c35f07", - "component": "lib:lukko", - "flags": [ - "+ofd-locking" - ], - "package": "lukko", - "revision": 5, - "source": "hackage", - "src_sha256": "a80efb60cfa3dae18682c01980d76d5f7e413e191cd186992e1bf7388d48ab1f", - "version": "0.1.1.3" - }, - { - "cabal_sha256": "32fa47f8345a2c0662fb602fc42e4b674e41ec48079b68bdecb4b6f68032c24e", - "component": "lib:os-string", - "flags": [], - "package": "os-string", - "revision": 0, - "source": "hackage", - "src_sha256": "0953126e962966719753c98d71f596f5fea07e100bce191b7453735a1ff2caa1", - "version": "2.0.2" - }, - { - "cabal_sha256": "3ed979ee1bb00b4e488537988ee6bb3c2c67e66678804125e2df08a527822b4e", - "component": "lib:tar-internal", - "flags": [], - "package": "tar", - "revision": 0, - "source": "hackage", - "src_sha256": "edfef2e126440839d34f23fff7f3616d0bfffa0345ea13d4d0fee9a669d305da", - "version": "0.6.1.0" - }, - { - "cabal_sha256": "3ed979ee1bb00b4e488537988ee6bb3c2c67e66678804125e2df08a527822b4e", - "component": "lib:tar", - "flags": [], - "package": "tar", - "revision": 0, - "source": "hackage", - "src_sha256": "edfef2e126440839d34f23fff7f3616d0bfffa0345ea13d4d0fee9a669d305da", - "version": "0.6.1.0" - }, - { - "cabal_sha256": "13aee0a157b2362cf079a4fa0156927403aef2a9540694c9d170ac8339d17bda", - "component": "lib:zlib", - "flags": [ - "-bundled-c-zlib", - "+non-blocking-ffi", - "-pkg-config" - ], - "package": "zlib", - "revision": 0, - "source": "hackage", - "src_sha256": "7e43c205e1e1ff5a4b033086ec8cce82ab658879e977c8ba02a6701946ff7a47", - "version": "0.7.0.0" - }, - { - "cabal_sha256": "9695169282e5b1172b9595a99a955b013a2713ce53ccfcdf97d9be088fd67258", - "component": "lib:hackage-security", - "flags": [ - "+cabal-syntax", - "+lukko", - "+use-network-uri" - ], - "package": "hackage-security", - "revision": 1, - "source": "hackage", - "src_sha256": "8b925b3bb04b42e93ae60b4db1df65e263feb5642c7b0e76134e691887ed4c82", - "version": "0.6.2.4" - }, - { - "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", - "component": "lib:open-browser", - "flags": [], - "package": "open-browser", - "revision": 0, - "source": "hackage", - "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", - "version": "0.2.1.0" - }, - { - "cabal_sha256": "0322b2fcd1358f3355e0c8608efa60d27b14d1c9d476451dbcb9181363bd8b27", - "component": "lib:regex-base", - "flags": [], - "package": "regex-base", - "revision": 4, - "source": "hackage", - "src_sha256": "7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1", - "version": "0.94.0.2" - }, - { - "cabal_sha256": "816d6acc560cb86672f347a7bef8129578dde26ed760f9e79b4976ed9bd7b9fd", - "component": "lib:regex-posix", - "flags": [ - "-_regex-posix-clib" - ], - "package": "regex-posix", - "revision": 3, - "source": "hackage", - "src_sha256": "c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c", - "version": "0.96.0.1" - }, - { - "cabal_sha256": "4868265ab5760d2fdeb96625b138c8df25d41b9ee2651fa299ed019a69403045", - "component": "lib:resolv", - "flags": [], - "package": "resolv", - "revision": 3, - "source": "hackage", - "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b", - "version": "0.2.0.2" - }, - { - "cabal_sha256": "8bb7261bd54bd58acfcb154be6a161fb6d0d31a1852aadc8e927d2ad2d7651d1", - "component": "lib:safe-exceptions", - "flags": [], - "package": "safe-exceptions", - "revision": 1, - "source": "hackage", - "src_sha256": "3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6", - "version": "0.1.7.4" - }, - { - "cabal_sha256": "8ed6242cab5b0e1a8c654424275ac178035d108dfe4d651053947790fcf83017", - "component": "lib:semaphore-compat", - "flags": [], - "package": "semaphore-compat", - "revision": 1, - "source": "hackage", - "src_sha256": "1c6e6fab021c2ccee5d86112fb1c0bd016d15e0cf70c489dae5fb5ec156ed9e2", - "version": "1.0.0" - }, - { - "cabal_sha256": null, - "component": "lib:cabal-install", - "flags": [ - "+lukko", - "+native-dns" - ], - "package": "cabal-install", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": null, - "component": "exe:cabal", - "flags": [ - "+lukko", - "+native-dns" - ], - "package": "cabal-install", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", - "component": "exe:example", - "flags": [], - "package": "open-browser", - "revision": 0, - "source": "hackage", - "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", - "version": "0.2.1.0" - } - ] -} diff --git a/bootstrap/linux-9.0.2.json b/bootstrap/linux-9.0.2.json index 73c9d9c6519..4533f52fcf9 100644 --- a/bootstrap/linux-9.0.2.json +++ b/bootstrap/linux-9.0.2.json @@ -1,560 +1,563 @@ { - "builtin": [ - { - "package": "rts", - "version": "1.0.2" - }, - { - "package": "ghc-prim", - "version": "0.7.0" - }, - { - "package": "ghc-bignum", - "version": "1.1" - }, - { - "package": "base", - "version": "4.15.1.0" - }, - { - "package": "array", - "version": "0.5.4.0" - }, - { - "package": "deepseq", - "version": "1.4.5.0" - }, - { - "package": "containers", - "version": "0.6.4.1" - }, - { - "package": "ghc-boot-th", - "version": "9.0.2" - }, - { - "package": "pretty", - "version": "1.1.3.6" - }, - { - "package": "template-haskell", - "version": "2.17.0.0" - }, - { - "package": "transformers", - "version": "0.5.6.2" - }, - { - "package": "mtl", - "version": "2.2.2" - }, - { - "package": "stm", - "version": "2.5.0.0" - }, - { - "package": "exceptions", - "version": "0.10.4" - }, - { - "package": "time", - "version": "1.9.3" - } - ], - "dependencies": [ - { - "cabal_sha256": "ad89e28b2b046175698fbf542af2ce43e5d2af50aae9f48d12566b1bb3de1d3c", - "component": "lib:data-array-byte", - "flags": [], - "package": "data-array-byte", - "revision": 2, - "source": "hackage", - "src_sha256": "1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600", - "version": "0.1.0.1" - }, - { - "cabal_sha256": "9fc077ff5b7ed2246773c3ac4370ef8822e4834d4587522b68ae551a5968fb86", - "component": "lib:bytestring", - "flags": [], - "package": "bytestring", - "revision": 0, - "source": "hackage", - "src_sha256": "a93fe5fbc8062656bd611ab1529b4879bb61411eda6529b350c7bf3aaf7dba3e", - "version": "0.12.0.2" - }, - { - "cabal_sha256": "d9e181e1acae0ac505d8b217dec3805c68554878f1e32b3d8351b9ce17061623", - "component": "lib:filepath", - "flags": [ - "-cpphs" - ], - "package": "filepath", - "revision": 0, - "source": "hackage", - "src_sha256": "337a0b5bcf0898cb7f51ff327528cf26f4ac38baed7b66b28fbdea334699d8ed", - "version": "1.4.300.1" - }, - { - "cabal_sha256": "633f15ef0bd50a16a7b5c5e86e6659fee6e4e211e098cc8bd0029f452bfcfddc", - "component": "lib:unix", - "flags": [ - "-os-string" - ], - "package": "unix", - "revision": 0, - "source": "hackage", - "src_sha256": "d70b81e242ee7e2e866118616c5b97afca9047e76bbfd51baa085a38db92857d", - "version": "2.8.5.0" - }, - { - "cabal_sha256": "bd3b0a0947a365d2da80b9f4a960a864d42ffa7a46577fdc7a0611703486a7f9", - "component": "lib:directory", - "flags": [], - "package": "directory", - "revision": 1, - "source": "hackage", - "src_sha256": "bd8253197587d32d4553070d2de89d3817176860932b0e9ab7bb7ba3759d8e9c", - "version": "1.3.8.1" - }, - { - "cabal_sha256": "348778ae5f77f946e45b88c6c94b3a65c655954e5f07f6d7dfa6c99efde5248c", - "component": "exe:alex", - "flags": [], - "package": "alex", - "revision": 0, - "source": "hackage", - "src_sha256": "caed9f23b4bc1cdd6f8083b79a0bb86ba86ed81ab9a1238fe0e13ed544809fed", - "version": "3.5.0.0" - }, - { - "cabal_sha256": "81f468c1c75fd6535152ab69b2d32ac6cfcc03e345267b069abe4da56ec95801", - "component": "lib:binary", - "flags": [], - "package": "binary", - "revision": 0, - "source": "hackage", - "src_sha256": "ac21ca63452dfc9b0bcab87c57699c531d87f7a9bcb6230ca46fba1b7faeebc0", - "version": "0.8.9.1" - }, - { - "cabal_sha256": "471b9a22f88b1d51bc343e7d1db7bf88b84e1582eb6d5fbe643fe7afc683c256", - "component": "lib:text", - "flags": [ - "-developer", - "+simdutf" - ], - "package": "text", - "revision": 0, - "source": "hackage", - "src_sha256": "cbe65b04a28a96a1de364d19c5ee33dc63cd253aa2716d22ceb8496b2062b6c8", - "version": "2.1" - }, - { - "cabal_sha256": "6cf18e59d9f1c5b40385457b82ab679dc18d3c5bd3c2c67b2f94e1e8732e6624", - "component": "lib:parsec", - "flags": [], - "package": "parsec", - "revision": 0, - "source": "hackage", - "src_sha256": "58c500bec1ec3c849c8243ddfd675a5983b17a8e5da55acea6adade5ae179d36", - "version": "3.1.17.0" - }, - { - "cabal_sha256": null, - "component": "lib:Cabal-syntax", - "flags": [], - "package": "Cabal-syntax", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "8b4bce2749e4f61a440049e6088487003e8023c720e2019345e399d50888594f", - "component": "lib:process", - "flags": [], - "package": "process", - "revision": 2, - "source": "hackage", - "src_sha256": "aa5f4c4fe4974f89f5ab998c7509daa4bda3926cfb06daacd5eba892aad8a37e", - "version": "1.6.18.0" - }, - { - "cabal_sha256": null, - "component": "lib:Cabal", - "flags": [], - "package": "Cabal", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "488cca2a179a5141da8f35a3a7e6699a0ef690f834f589d6b152c4947aa8fe2d", - "component": "exe:hsc2hs", - "flags": [ - "-in-ghc-tree" - ], - "package": "hsc2hs", - "revision": 1, - "source": "hackage", - "src_sha256": "6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76", - "version": "0.68.10" - }, - { - "cabal_sha256": "e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def", - "component": "lib:network", - "flags": [ - "-devel" - ], - "package": "network", - "revision": 1, - "source": "hackage", - "src_sha256": "b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e", - "version": "3.1.4.0" - }, - { - "cabal_sha256": "f5f2c679ecc1c1b83d2d68db6cc564e5c78d53425e69e1b9e36784820e122d37", - "component": "lib:th-compat", - "flags": [], - "package": "th-compat", - "revision": 4, - "source": "hackage", - "src_sha256": "d8f97ac14ab47b6b8a7b0fdb4ff95426322ec56badd01652ac15da4a44d4bab8", - "version": "0.1.4" - }, - { - "cabal_sha256": "6fffb57373962b5651a2db8b0af732098b3bf029a7ced76a9855615de2026588", - "component": "lib:network-uri", - "flags": [], - "package": "network-uri", - "revision": 1, - "source": "hackage", - "src_sha256": "9c188973126e893250b881f20e8811dca06c223c23402b06f7a1f2e995797228", - "version": "2.6.4.2" - }, - { - "cabal_sha256": "0e37572590743e49d7a610f472e1618a594dc861410846f64d9f2347923c4f5b", - "component": "lib:HTTP", - "flags": [ - "-conduit10", - "+network-uri", - "-warn-as-error", - "-warp-tests" - ], - "package": "HTTP", - "revision": 3, - "source": "hackage", - "src_sha256": "df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453", - "version": "4000.4.1" - }, - { - "cabal_sha256": "c4733d09f798fc4304e936924a1a7d9fc2425aefad6c46ad4592035254b46051", - "component": "lib:base-orphans", - "flags": [], - "package": "base-orphans", - "revision": 0, - "source": "hackage", - "src_sha256": "5bbf2da382c5b212d6a8be2f8c49edee0eba30f272a15fd32c13e6e4091ef172", - "version": "0.9.1" - }, - { - "cabal_sha256": "f3bf68acfa0df7a064a378ef2cdcfeb55e6fb96100675f4c593556dcbf3d7194", - "component": "lib:hashable", - "flags": [ - "+integer-gmp", - "-random-initial-seed" - ], - "package": "hashable", - "revision": 1, - "source": "hackage", - "src_sha256": "32efb16c2891786209b7cbe5c39df9b3a9ae51e836f1a54f646bc4602b7ab0f5", - "version": "1.4.3.0" - }, - { - "cabal_sha256": "957d5ca4496e7048e3e78f108dbdc3e391eafe60b50417486e4c28957d430b05", - "component": "lib:async", - "flags": [ - "-bench" - ], - "package": "async", - "revision": 0, - "source": "hackage", - "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", - "version": "2.2.5" - }, - { - "cabal_sha256": "a694e88f9ec9fc79f0b03f233d3fea592b68f70a34aac2ddb5bcaecb6562e2fd", - "component": "lib:base16-bytestring", - "flags": [], - "package": "base16-bytestring", - "revision": 1, - "source": "hackage", - "src_sha256": "1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784", - "version": "1.0.2.0" - }, - { - "cabal_sha256": "45305ccf8914c66d385b518721472c7b8c858f1986945377f74f85c1e0d49803", - "component": "lib:base64-bytestring", - "flags": [], - "package": "base64-bytestring", - "revision": 1, - "source": "hackage", - "src_sha256": "fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9", - "version": "1.2.1.0" - }, - { - "cabal_sha256": "bac0ae8d46a04e410666b0c8081cff63f060f29157983b569ca86ddb6e6e0dc6", - "component": "lib:splitmix", - "flags": [ - "-optimised-mixer" - ], - "package": "splitmix", - "revision": 0, - "source": "hackage", - "src_sha256": "9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002", - "version": "0.1.0.5" - }, - { - "cabal_sha256": "32397de181e20ccaacf806ec70de9308cf044f089a2be37c936f3f8967bde867", - "component": "lib:random", - "flags": [], - "package": "random", - "revision": 0, - "source": "hackage", - "src_sha256": "790f4dc2d2327c453ff6aac7bf15399fd123d55e927935f68f84b5df42d9a4b4", - "version": "1.2.1.2" - }, - { - "cabal_sha256": "4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee", - "component": "lib:edit-distance", - "flags": [], - "package": "edit-distance", - "revision": 1, - "source": "hackage", - "src_sha256": "3e8885ee2f56ad4da940f043ae8f981ee2fe336b5e8e4ba3f7436cff4f526c4a", - "version": "0.2.2.1" - }, - { - "cabal_sha256": null, - "component": "lib:cabal-install-solver", - "flags": [ - "-debug-expensive-assertions", - "-debug-tracetree" - ], - "package": "cabal-install-solver", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "03db065161987f614a3a2bbcd16264f78e47efe231fb5bd161be2043eaf20488", - "component": "lib:cryptohash-sha256", - "flags": [ - "-exe", - "+use-cbits" - ], - "package": "cryptohash-sha256", - "revision": 3, - "source": "hackage", - "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", - "version": "0.11.102.1" - }, - { - "cabal_sha256": "ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42", - "component": "lib:echo", - "flags": [ - "-example" - ], - "package": "echo", - "revision": 0, - "source": "hackage", - "src_sha256": "c9fe1bf2904825a65b667251ec644f197b71dc5c209d2d254be5de3d496b0e43", - "version": "0.1.4" - }, - { - "cabal_sha256": "48383789821af5cc624498f3ee1d0939a070cda9468c0bfe63c951736be81c75", - "component": "lib:ed25519", - "flags": [ - "+no-donna", - "+test-doctests", - "+test-hlint", - "+test-properties" - ], - "package": "ed25519", - "revision": 8, - "source": "hackage", - "src_sha256": "d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d", - "version": "0.0.5.0" - }, - { - "cabal_sha256": "17786545dce60c4d5783ba6125c0a6499a1abddd3d7417b15500ccd767c35f07", - "component": "lib:lukko", - "flags": [ - "+ofd-locking" - ], - "package": "lukko", - "revision": 5, - "source": "hackage", - "src_sha256": "a80efb60cfa3dae18682c01980d76d5f7e413e191cd186992e1bf7388d48ab1f", - "version": "0.1.1.3" - }, - { - "cabal_sha256": "32fa47f8345a2c0662fb602fc42e4b674e41ec48079b68bdecb4b6f68032c24e", - "component": "lib:os-string", - "flags": [], - "package": "os-string", - "revision": 0, - "source": "hackage", - "src_sha256": "0953126e962966719753c98d71f596f5fea07e100bce191b7453735a1ff2caa1", - "version": "2.0.2" - }, - { - "cabal_sha256": "3ed979ee1bb00b4e488537988ee6bb3c2c67e66678804125e2df08a527822b4e", - "component": "lib:tar-internal", - "flags": [], - "package": "tar", - "revision": 0, - "source": "hackage", - "src_sha256": "edfef2e126440839d34f23fff7f3616d0bfffa0345ea13d4d0fee9a669d305da", - "version": "0.6.1.0" - }, - { - "cabal_sha256": "3ed979ee1bb00b4e488537988ee6bb3c2c67e66678804125e2df08a527822b4e", - "component": "lib:tar", - "flags": [], - "package": "tar", - "revision": 0, - "source": "hackage", - "src_sha256": "edfef2e126440839d34f23fff7f3616d0bfffa0345ea13d4d0fee9a669d305da", - "version": "0.6.1.0" - }, - { - "cabal_sha256": "13aee0a157b2362cf079a4fa0156927403aef2a9540694c9d170ac8339d17bda", - "component": "lib:zlib", - "flags": [ - "-bundled-c-zlib", - "+non-blocking-ffi", - "-pkg-config" - ], - "package": "zlib", - "revision": 0, - "source": "hackage", - "src_sha256": "7e43c205e1e1ff5a4b033086ec8cce82ab658879e977c8ba02a6701946ff7a47", - "version": "0.7.0.0" - }, - { - "cabal_sha256": "9695169282e5b1172b9595a99a955b013a2713ce53ccfcdf97d9be088fd67258", - "component": "lib:hackage-security", - "flags": [ - "+cabal-syntax", - "+lukko", - "+use-network-uri" - ], - "package": "hackage-security", - "revision": 1, - "source": "hackage", - "src_sha256": "8b925b3bb04b42e93ae60b4db1df65e263feb5642c7b0e76134e691887ed4c82", - "version": "0.6.2.4" - }, - { - "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", - "component": "lib:open-browser", - "flags": [], - "package": "open-browser", - "revision": 0, - "source": "hackage", - "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", - "version": "0.2.1.0" - }, - { - "cabal_sha256": "0322b2fcd1358f3355e0c8608efa60d27b14d1c9d476451dbcb9181363bd8b27", - "component": "lib:regex-base", - "flags": [], - "package": "regex-base", - "revision": 4, - "source": "hackage", - "src_sha256": "7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1", - "version": "0.94.0.2" - }, - { - "cabal_sha256": "816d6acc560cb86672f347a7bef8129578dde26ed760f9e79b4976ed9bd7b9fd", - "component": "lib:regex-posix", - "flags": [ - "-_regex-posix-clib" - ], - "package": "regex-posix", - "revision": 3, - "source": "hackage", - "src_sha256": "c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c", - "version": "0.96.0.1" - }, - { - "cabal_sha256": "4868265ab5760d2fdeb96625b138c8df25d41b9ee2651fa299ed019a69403045", - "component": "lib:resolv", - "flags": [], - "package": "resolv", - "revision": 3, - "source": "hackage", - "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b", - "version": "0.2.0.2" - }, - { - "cabal_sha256": "8bb7261bd54bd58acfcb154be6a161fb6d0d31a1852aadc8e927d2ad2d7651d1", - "component": "lib:safe-exceptions", - "flags": [], - "package": "safe-exceptions", - "revision": 1, - "source": "hackage", - "src_sha256": "3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6", - "version": "0.1.7.4" - }, - { - "cabal_sha256": "8ed6242cab5b0e1a8c654424275ac178035d108dfe4d651053947790fcf83017", - "component": "lib:semaphore-compat", - "flags": [], - "package": "semaphore-compat", - "revision": 1, - "source": "hackage", - "src_sha256": "1c6e6fab021c2ccee5d86112fb1c0bd016d15e0cf70c489dae5fb5ec156ed9e2", - "version": "1.0.0" - }, - { - "cabal_sha256": null, - "component": "lib:cabal-install", - "flags": [ - "+lukko", - "+native-dns" - ], - "package": "cabal-install", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": null, - "component": "exe:cabal", - "flags": [ - "+lukko", - "+native-dns" - ], - "package": "cabal-install", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", - "component": "exe:example", - "flags": [], - "package": "open-browser", - "revision": 0, - "source": "hackage", - "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", - "version": "0.2.1.0" - } - ] + "builtin": [ + { + "package": "rts", + "version": "1.0.2" + }, + { + "package": "ghc-prim", + "version": "0.7.0" + }, + { + "package": "ghc-bignum", + "version": "1.1" + }, + { + "package": "base", + "version": "4.15.1.0" + }, + { + "package": "array", + "version": "0.5.4.0" + }, + { + "package": "deepseq", + "version": "1.4.5.0" + }, + { + "package": "containers", + "version": "0.6.4.1" + }, + { + "package": "ghc-boot-th", + "version": "9.0.2" + }, + { + "package": "pretty", + "version": "1.1.3.6" + }, + { + "package": "template-haskell", + "version": "2.17.0.0" + }, + { + "package": "transformers", + "version": "0.5.6.2" + }, + { + "package": "mtl", + "version": "2.2.2" + }, + { + "package": "stm", + "version": "2.5.0.0" + }, + { + "package": "exceptions", + "version": "0.10.4" + }, + { + "package": "time", + "version": "1.9.3" + } + ], + "dependencies": [ + { + "cabal_sha256": "a4a1975fde77e289b605c45a3ef78d731d8c1834e4cef311152d910a1e94d98c", + "component": "lib:data-array-byte", + "flags": [], + "package": "data-array-byte", + "revision": 3, + "source": "hackage", + "src_sha256": "1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600", + "version": "0.1.0.1" + }, + { + "cabal_sha256": "98e79e1c97117143e4012983509ec95f7e5e4f6adff6914d07812a39f83404b9", + "component": "lib:bytestring", + "flags": [ + "-pure-haskell" + ], + "package": "bytestring", + "revision": 1, + "source": "hackage", + "src_sha256": "ebc3b8a6ef74a5cd6ddbb8d447d1c9a5fd4964c7975ebcae0b8ab0bcc406cc8c", + "version": "0.12.1.0" + }, + { + "cabal_sha256": "d9e181e1acae0ac505d8b217dec3805c68554878f1e32b3d8351b9ce17061623", + "component": "lib:filepath", + "flags": [ + "-cpphs" + ], + "package": "filepath", + "revision": 0, + "source": "hackage", + "src_sha256": "337a0b5bcf0898cb7f51ff327528cf26f4ac38baed7b66b28fbdea334699d8ed", + "version": "1.4.300.1" + }, + { + "cabal_sha256": "256e42f032dfd7ef13d0ea3f4104a1f0883d93ccade0b11f26ea790ef8001259", + "component": "lib:unix", + "flags": [ + "-os-string" + ], + "package": "unix", + "revision": 1, + "source": "hackage", + "src_sha256": "d70b81e242ee7e2e866118616c5b97afca9047e76bbfd51baa085a38db92857d", + "version": "2.8.5.0" + }, + { + "cabal_sha256": "bd3b0a0947a365d2da80b9f4a960a864d42ffa7a46577fdc7a0611703486a7f9", + "component": "lib:directory", + "flags": [], + "package": "directory", + "revision": 1, + "source": "hackage", + "src_sha256": "bd8253197587d32d4553070d2de89d3817176860932b0e9ab7bb7ba3759d8e9c", + "version": "1.3.8.1" + }, + { + "cabal_sha256": "de553eefe0b6548a560e9d8100486310548470a403c1fa21108dd03713da5fc7", + "component": "exe:alex", + "flags": [], + "package": "alex", + "revision": 0, + "source": "hackage", + "src_sha256": "c92efe86f8eb959ee03be6c04ee57ebc7e4abc75a6c4b26551215d7443e92a07", + "version": "3.5.1.0" + }, + { + "cabal_sha256": "81f468c1c75fd6535152ab69b2d32ac6cfcc03e345267b069abe4da56ec95801", + "component": "lib:binary", + "flags": [], + "package": "binary", + "revision": 0, + "source": "hackage", + "src_sha256": "ac21ca63452dfc9b0bcab87c57699c531d87f7a9bcb6230ca46fba1b7faeebc0", + "version": "0.8.9.1" + }, + { + "cabal_sha256": "aa7a5a92fe430a34d24d33878323c8a010021e05e410fe98b7fac3015c88dc74", + "component": "lib:text", + "flags": [ + "-developer", + "-pure-haskell", + "+simdutf" + ], + "package": "text", + "revision": 0, + "source": "hackage", + "src_sha256": "e40cdda8b285f4d72476ed35dc2f5f167d524e6b38bb5ec964d00ee1ff24feab", + "version": "2.1.1" + }, + { + "cabal_sha256": "6cf18e59d9f1c5b40385457b82ab679dc18d3c5bd3c2c67b2f94e1e8732e6624", + "component": "lib:parsec", + "flags": [], + "package": "parsec", + "revision": 0, + "source": "hackage", + "src_sha256": "58c500bec1ec3c849c8243ddfd675a5983b17a8e5da55acea6adade5ae179d36", + "version": "3.1.17.0" + }, + { + "cabal_sha256": null, + "component": "lib:Cabal-syntax", + "flags": [], + "package": "Cabal-syntax", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.12.0.0" + }, + { + "cabal_sha256": "8b4bce2749e4f61a440049e6088487003e8023c720e2019345e399d50888594f", + "component": "lib:process", + "flags": [], + "package": "process", + "revision": 2, + "source": "hackage", + "src_sha256": "aa5f4c4fe4974f89f5ab998c7509daa4bda3926cfb06daacd5eba892aad8a37e", + "version": "1.6.18.0" + }, + { + "cabal_sha256": null, + "component": "lib:Cabal", + "flags": [], + "package": "Cabal", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.12.0.0" + }, + { + "cabal_sha256": "60e78b6c60dc32a77ce6c37ed5ca4e838fc5f76f02836ef64d93cd21cc002325", + "component": "exe:hsc2hs", + "flags": [ + "-in-ghc-tree" + ], + "package": "hsc2hs", + "revision": 2, + "source": "hackage", + "src_sha256": "6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76", + "version": "0.68.10" + }, + { + "cabal_sha256": "e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def", + "component": "lib:network", + "flags": [ + "-devel" + ], + "package": "network", + "revision": 1, + "source": "hackage", + "src_sha256": "b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e", + "version": "3.1.4.0" + }, + { + "cabal_sha256": "177148ba8407fbaaef0231b8bf8af092eddf3b2b1a682dc88df8e86b87828e96", + "component": "lib:th-compat", + "flags": [], + "package": "th-compat", + "revision": 0, + "source": "hackage", + "src_sha256": "81f55fafc7afad7763c09cb8b7b4165ca3765edcf70ffa42c7393043a1382a1e", + "version": "0.1.5" + }, + { + "cabal_sha256": "6fffb57373962b5651a2db8b0af732098b3bf029a7ced76a9855615de2026588", + "component": "lib:network-uri", + "flags": [], + "package": "network-uri", + "revision": 1, + "source": "hackage", + "src_sha256": "9c188973126e893250b881f20e8811dca06c223c23402b06f7a1f2e995797228", + "version": "2.6.4.2" + }, + { + "cabal_sha256": "0e37572590743e49d7a610f472e1618a594dc861410846f64d9f2347923c4f5b", + "component": "lib:HTTP", + "flags": [ + "-conduit10", + "+network-uri", + "-warn-as-error", + "-warp-tests" + ], + "package": "HTTP", + "revision": 3, + "source": "hackage", + "src_sha256": "df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453", + "version": "4000.4.1" + }, + { + "cabal_sha256": "c4733d09f798fc4304e936924a1a7d9fc2425aefad6c46ad4592035254b46051", + "component": "lib:base-orphans", + "flags": [], + "package": "base-orphans", + "revision": 0, + "source": "hackage", + "src_sha256": "5bbf2da382c5b212d6a8be2f8c49edee0eba30f272a15fd32c13e6e4091ef172", + "version": "0.9.1" + }, + { + "cabal_sha256": "f3bf68acfa0df7a064a378ef2cdcfeb55e6fb96100675f4c593556dcbf3d7194", + "component": "lib:hashable", + "flags": [ + "+integer-gmp", + "-random-initial-seed" + ], + "package": "hashable", + "revision": 1, + "source": "hackage", + "src_sha256": "32efb16c2891786209b7cbe5c39df9b3a9ae51e836f1a54f646bc4602b7ab0f5", + "version": "1.4.3.0" + }, + { + "cabal_sha256": "957d5ca4496e7048e3e78f108dbdc3e391eafe60b50417486e4c28957d430b05", + "component": "lib:async", + "flags": [ + "-bench" + ], + "package": "async", + "revision": 0, + "source": "hackage", + "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", + "version": "2.2.5" + }, + { + "cabal_sha256": "a694e88f9ec9fc79f0b03f233d3fea592b68f70a34aac2ddb5bcaecb6562e2fd", + "component": "lib:base16-bytestring", + "flags": [], + "package": "base16-bytestring", + "revision": 1, + "source": "hackage", + "src_sha256": "1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784", + "version": "1.0.2.0" + }, + { + "cabal_sha256": "45305ccf8914c66d385b518721472c7b8c858f1986945377f74f85c1e0d49803", + "component": "lib:base64-bytestring", + "flags": [], + "package": "base64-bytestring", + "revision": 1, + "source": "hackage", + "src_sha256": "fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9", + "version": "1.2.1.0" + }, + { + "cabal_sha256": "bac0ae8d46a04e410666b0c8081cff63f060f29157983b569ca86ddb6e6e0dc6", + "component": "lib:splitmix", + "flags": [ + "-optimised-mixer" + ], + "package": "splitmix", + "revision": 0, + "source": "hackage", + "src_sha256": "9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002", + "version": "0.1.0.5" + }, + { + "cabal_sha256": "32397de181e20ccaacf806ec70de9308cf044f089a2be37c936f3f8967bde867", + "component": "lib:random", + "flags": [], + "package": "random", + "revision": 0, + "source": "hackage", + "src_sha256": "790f4dc2d2327c453ff6aac7bf15399fd123d55e927935f68f84b5df42d9a4b4", + "version": "1.2.1.2" + }, + { + "cabal_sha256": "4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee", + "component": "lib:edit-distance", + "flags": [], + "package": "edit-distance", + "revision": 1, + "source": "hackage", + "src_sha256": "3e8885ee2f56ad4da940f043ae8f981ee2fe336b5e8e4ba3f7436cff4f526c4a", + "version": "0.2.2.1" + }, + { + "cabal_sha256": null, + "component": "lib:cabal-install-solver", + "flags": [ + "-debug-expensive-assertions", + "-debug-tracetree" + ], + "package": "cabal-install-solver", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.11.0.0" + }, + { + "cabal_sha256": "03db065161987f614a3a2bbcd16264f78e47efe231fb5bd161be2043eaf20488", + "component": "lib:cryptohash-sha256", + "flags": [ + "-exe", + "+use-cbits" + ], + "package": "cryptohash-sha256", + "revision": 3, + "source": "hackage", + "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", + "version": "0.11.102.1" + }, + { + "cabal_sha256": "ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42", + "component": "lib:echo", + "flags": [ + "-example" + ], + "package": "echo", + "revision": 0, + "source": "hackage", + "src_sha256": "c9fe1bf2904825a65b667251ec644f197b71dc5c209d2d254be5de3d496b0e43", + "version": "0.1.4" + }, + { + "cabal_sha256": "48383789821af5cc624498f3ee1d0939a070cda9468c0bfe63c951736be81c75", + "component": "lib:ed25519", + "flags": [ + "+no-donna", + "+test-doctests", + "+test-hlint", + "+test-properties" + ], + "package": "ed25519", + "revision": 8, + "source": "hackage", + "src_sha256": "d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d", + "version": "0.0.5.0" + }, + { + "cabal_sha256": "17786545dce60c4d5783ba6125c0a6499a1abddd3d7417b15500ccd767c35f07", + "component": "lib:lukko", + "flags": [ + "+ofd-locking" + ], + "package": "lukko", + "revision": 5, + "source": "hackage", + "src_sha256": "a80efb60cfa3dae18682c01980d76d5f7e413e191cd186992e1bf7388d48ab1f", + "version": "0.1.1.3" + }, + { + "cabal_sha256": "32fa47f8345a2c0662fb602fc42e4b674e41ec48079b68bdecb4b6f68032c24e", + "component": "lib:os-string", + "flags": [], + "package": "os-string", + "revision": 0, + "source": "hackage", + "src_sha256": "0953126e962966719753c98d71f596f5fea07e100bce191b7453735a1ff2caa1", + "version": "2.0.2" + }, + { + "cabal_sha256": "619828cae098a7b6deeb0316e12f55011101d88f756787ed024ceedb81cf1eba", + "component": "lib:tar-internal", + "flags": [], + "package": "tar", + "revision": 0, + "source": "hackage", + "src_sha256": "08c61e82b59ed6fe7e85e9fe7cceaaf853ba54511d1ec57efa511ddc55ef1998", + "version": "0.6.2.0" + }, + { + "cabal_sha256": "619828cae098a7b6deeb0316e12f55011101d88f756787ed024ceedb81cf1eba", + "component": "lib:tar", + "flags": [], + "package": "tar", + "revision": 0, + "source": "hackage", + "src_sha256": "08c61e82b59ed6fe7e85e9fe7cceaaf853ba54511d1ec57efa511ddc55ef1998", + "version": "0.6.2.0" + }, + { + "cabal_sha256": "64a1925c93e9a26cd4c40c470736950c4b5ea7bae68418cb996c5c7df4873cba", + "component": "lib:zlib", + "flags": [ + "-bundled-c-zlib", + "+non-blocking-ffi", + "+pkg-config" + ], + "package": "zlib", + "revision": 1, + "source": "hackage", + "src_sha256": "7e43c205e1e1ff5a4b033086ec8cce82ab658879e977c8ba02a6701946ff7a47", + "version": "0.7.0.0" + }, + { + "cabal_sha256": "6c32c6826bc3fea3f08013a3fcf58fad28f7d42dca38a483872c1e0b6c7c5da4", + "component": "lib:hackage-security", + "flags": [ + "+cabal-syntax", + "+lukko", + "+use-network-uri" + ], + "package": "hackage-security", + "revision": 0, + "source": "hackage", + "src_sha256": "85c809236434de33e49eddd6960f2d247f9de9a4cb8aef56f8b40d1ee35fe2ab", + "version": "0.6.2.5" + }, + { + "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", + "component": "lib:open-browser", + "flags": [], + "package": "open-browser", + "revision": 0, + "source": "hackage", + "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", + "version": "0.2.1.0" + }, + { + "cabal_sha256": "0322b2fcd1358f3355e0c8608efa60d27b14d1c9d476451dbcb9181363bd8b27", + "component": "lib:regex-base", + "flags": [], + "package": "regex-base", + "revision": 4, + "source": "hackage", + "src_sha256": "7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1", + "version": "0.94.0.2" + }, + { + "cabal_sha256": "816d6acc560cb86672f347a7bef8129578dde26ed760f9e79b4976ed9bd7b9fd", + "component": "lib:regex-posix", + "flags": [ + "-_regex-posix-clib" + ], + "package": "regex-posix", + "revision": 3, + "source": "hackage", + "src_sha256": "c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c", + "version": "0.96.0.1" + }, + { + "cabal_sha256": "4868265ab5760d2fdeb96625b138c8df25d41b9ee2651fa299ed019a69403045", + "component": "lib:resolv", + "flags": [], + "package": "resolv", + "revision": 3, + "source": "hackage", + "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b", + "version": "0.2.0.2" + }, + { + "cabal_sha256": "8bb7261bd54bd58acfcb154be6a161fb6d0d31a1852aadc8e927d2ad2d7651d1", + "component": "lib:safe-exceptions", + "flags": [], + "package": "safe-exceptions", + "revision": 1, + "source": "hackage", + "src_sha256": "3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6", + "version": "0.1.7.4" + }, + { + "cabal_sha256": "8ed6242cab5b0e1a8c654424275ac178035d108dfe4d651053947790fcf83017", + "component": "lib:semaphore-compat", + "flags": [], + "package": "semaphore-compat", + "revision": 1, + "source": "hackage", + "src_sha256": "1c6e6fab021c2ccee5d86112fb1c0bd016d15e0cf70c489dae5fb5ec156ed9e2", + "version": "1.0.0" + }, + { + "cabal_sha256": null, + "component": "lib:cabal-install", + "flags": [ + "+lukko", + "+native-dns" + ], + "package": "cabal-install", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.11.0.0" + }, + { + "cabal_sha256": null, + "component": "exe:cabal", + "flags": [ + "+lukko", + "+native-dns" + ], + "package": "cabal-install", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.11.0.0" + }, + { + "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", + "component": "exe:example", + "flags": [], + "package": "open-browser", + "revision": 0, + "source": "hackage", + "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", + "version": "0.2.1.0" + } + ] } diff --git a/bootstrap/linux-9.2.8.json b/bootstrap/linux-9.2.8.json index d21f90ac673..9ce9847a68c 100644 --- a/bootstrap/linux-9.2.8.json +++ b/bootstrap/linux-9.2.8.json @@ -1,523 +1,523 @@ { - "builtin": [ - { - "package": "rts", - "version": "1.0.2" - }, - { - "package": "ghc-prim", - "version": "0.8.0" - }, - { - "package": "ghc-bignum", - "version": "1.2" - }, - { - "package": "base", - "version": "4.16.4.0" - }, - { - "package": "array", - "version": "0.5.4.0" - }, - { - "package": "deepseq", - "version": "1.4.6.1" - }, - { - "package": "containers", - "version": "0.6.5.1" - }, - { - "package": "ghc-boot-th", - "version": "9.2.8" - }, - { - "package": "pretty", - "version": "1.1.3.6" - }, - { - "package": "template-haskell", - "version": "2.18.0.0" - }, - { - "package": "bytestring", - "version": "0.11.4.0" - }, - { - "package": "transformers", - "version": "0.5.6.2" - }, - { - "package": "mtl", - "version": "2.2.2" - }, - { - "package": "stm", - "version": "2.5.0.2" - }, - { - "package": "exceptions", - "version": "0.10.4" - }, - { - "package": "time", - "version": "1.11.1.1" - }, - { - "package": "binary", - "version": "0.8.9.0" - }, - { - "package": "text", - "version": "1.2.5.0" - }, - { - "package": "parsec", - "version": "3.1.15.0" - } - ], - "dependencies": [ - { - "cabal_sha256": "d9e181e1acae0ac505d8b217dec3805c68554878f1e32b3d8351b9ce17061623", - "component": "lib:filepath", - "flags": [ - "-cpphs" - ], - "package": "filepath", - "revision": 0, - "source": "hackage", - "src_sha256": "337a0b5bcf0898cb7f51ff327528cf26f4ac38baed7b66b28fbdea334699d8ed", - "version": "1.4.300.1" - }, - { - "cabal_sha256": "633f15ef0bd50a16a7b5c5e86e6659fee6e4e211e098cc8bd0029f452bfcfddc", - "component": "lib:unix", - "flags": [ - "-os-string" - ], - "package": "unix", - "revision": 0, - "source": "hackage", - "src_sha256": "d70b81e242ee7e2e866118616c5b97afca9047e76bbfd51baa085a38db92857d", - "version": "2.8.5.0" - }, - { - "cabal_sha256": "bd3b0a0947a365d2da80b9f4a960a864d42ffa7a46577fdc7a0611703486a7f9", - "component": "lib:directory", - "flags": [], - "package": "directory", - "revision": 1, - "source": "hackage", - "src_sha256": "bd8253197587d32d4553070d2de89d3817176860932b0e9ab7bb7ba3759d8e9c", - "version": "1.3.8.1" - }, - { - "cabal_sha256": "348778ae5f77f946e45b88c6c94b3a65c655954e5f07f6d7dfa6c99efde5248c", - "component": "exe:alex", - "flags": [], - "package": "alex", - "revision": 0, - "source": "hackage", - "src_sha256": "caed9f23b4bc1cdd6f8083b79a0bb86ba86ed81ab9a1238fe0e13ed544809fed", - "version": "3.5.0.0" - }, - { - "cabal_sha256": null, - "component": "lib:Cabal-syntax", - "flags": [], - "package": "Cabal-syntax", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "8b4bce2749e4f61a440049e6088487003e8023c720e2019345e399d50888594f", - "component": "lib:process", - "flags": [], - "package": "process", - "revision": 2, - "source": "hackage", - "src_sha256": "aa5f4c4fe4974f89f5ab998c7509daa4bda3926cfb06daacd5eba892aad8a37e", - "version": "1.6.18.0" - }, - { - "cabal_sha256": null, - "component": "lib:Cabal", - "flags": [], - "package": "Cabal", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "488cca2a179a5141da8f35a3a7e6699a0ef690f834f589d6b152c4947aa8fe2d", - "component": "exe:hsc2hs", - "flags": [ - "-in-ghc-tree" - ], - "package": "hsc2hs", - "revision": 1, - "source": "hackage", - "src_sha256": "6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76", - "version": "0.68.10" - }, - { - "cabal_sha256": "e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def", - "component": "lib:network", - "flags": [ - "-devel" - ], - "package": "network", - "revision": 1, - "source": "hackage", - "src_sha256": "b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e", - "version": "3.1.4.0" - }, - { - "cabal_sha256": "f5f2c679ecc1c1b83d2d68db6cc564e5c78d53425e69e1b9e36784820e122d37", - "component": "lib:th-compat", - "flags": [], - "package": "th-compat", - "revision": 4, - "source": "hackage", - "src_sha256": "d8f97ac14ab47b6b8a7b0fdb4ff95426322ec56badd01652ac15da4a44d4bab8", - "version": "0.1.4" - }, - { - "cabal_sha256": "6fffb57373962b5651a2db8b0af732098b3bf029a7ced76a9855615de2026588", - "component": "lib:network-uri", - "flags": [], - "package": "network-uri", - "revision": 1, - "source": "hackage", - "src_sha256": "9c188973126e893250b881f20e8811dca06c223c23402b06f7a1f2e995797228", - "version": "2.6.4.2" - }, - { - "cabal_sha256": "0e37572590743e49d7a610f472e1618a594dc861410846f64d9f2347923c4f5b", - "component": "lib:HTTP", - "flags": [ - "-conduit10", - "+network-uri", - "-warn-as-error", - "-warp-tests" - ], - "package": "HTTP", - "revision": 3, - "source": "hackage", - "src_sha256": "df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453", - "version": "4000.4.1" - }, - { - "cabal_sha256": "ad89e28b2b046175698fbf542af2ce43e5d2af50aae9f48d12566b1bb3de1d3c", - "component": "lib:data-array-byte", - "flags": [], - "package": "data-array-byte", - "revision": 2, - "source": "hackage", - "src_sha256": "1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600", - "version": "0.1.0.1" - }, - { - "cabal_sha256": "f3bf68acfa0df7a064a378ef2cdcfeb55e6fb96100675f4c593556dcbf3d7194", - "component": "lib:hashable", - "flags": [ - "+integer-gmp", - "-random-initial-seed" - ], - "package": "hashable", - "revision": 1, - "source": "hackage", - "src_sha256": "32efb16c2891786209b7cbe5c39df9b3a9ae51e836f1a54f646bc4602b7ab0f5", - "version": "1.4.3.0" - }, - { - "cabal_sha256": "957d5ca4496e7048e3e78f108dbdc3e391eafe60b50417486e4c28957d430b05", - "component": "lib:async", - "flags": [ - "-bench" - ], - "package": "async", - "revision": 0, - "source": "hackage", - "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", - "version": "2.2.5" - }, - { - "cabal_sha256": "a694e88f9ec9fc79f0b03f233d3fea592b68f70a34aac2ddb5bcaecb6562e2fd", - "component": "lib:base16-bytestring", - "flags": [], - "package": "base16-bytestring", - "revision": 1, - "source": "hackage", - "src_sha256": "1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784", - "version": "1.0.2.0" - }, - { - "cabal_sha256": "45305ccf8914c66d385b518721472c7b8c858f1986945377f74f85c1e0d49803", - "component": "lib:base64-bytestring", - "flags": [], - "package": "base64-bytestring", - "revision": 1, - "source": "hackage", - "src_sha256": "fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9", - "version": "1.2.1.0" - }, - { - "cabal_sha256": "bac0ae8d46a04e410666b0c8081cff63f060f29157983b569ca86ddb6e6e0dc6", - "component": "lib:splitmix", - "flags": [ - "-optimised-mixer" - ], - "package": "splitmix", - "revision": 0, - "source": "hackage", - "src_sha256": "9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002", - "version": "0.1.0.5" - }, - { - "cabal_sha256": "32397de181e20ccaacf806ec70de9308cf044f089a2be37c936f3f8967bde867", - "component": "lib:random", - "flags": [], - "package": "random", - "revision": 0, - "source": "hackage", - "src_sha256": "790f4dc2d2327c453ff6aac7bf15399fd123d55e927935f68f84b5df42d9a4b4", - "version": "1.2.1.2" - }, - { - "cabal_sha256": "4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee", - "component": "lib:edit-distance", - "flags": [], - "package": "edit-distance", - "revision": 1, - "source": "hackage", - "src_sha256": "3e8885ee2f56ad4da940f043ae8f981ee2fe336b5e8e4ba3f7436cff4f526c4a", - "version": "0.2.2.1" - }, - { - "cabal_sha256": null, - "component": "lib:cabal-install-solver", - "flags": [ - "-debug-expensive-assertions", - "-debug-tracetree" - ], - "package": "cabal-install-solver", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "03db065161987f614a3a2bbcd16264f78e47efe231fb5bd161be2043eaf20488", - "component": "lib:cryptohash-sha256", - "flags": [ - "-exe", - "+use-cbits" - ], - "package": "cryptohash-sha256", - "revision": 3, - "source": "hackage", - "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", - "version": "0.11.102.1" - }, - { - "cabal_sha256": "ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42", - "component": "lib:echo", - "flags": [ - "-example" - ], - "package": "echo", - "revision": 0, - "source": "hackage", - "src_sha256": "c9fe1bf2904825a65b667251ec644f197b71dc5c209d2d254be5de3d496b0e43", - "version": "0.1.4" - }, - { - "cabal_sha256": "48383789821af5cc624498f3ee1d0939a070cda9468c0bfe63c951736be81c75", - "component": "lib:ed25519", - "flags": [ - "+no-donna", - "+test-doctests", - "+test-hlint", - "+test-properties" - ], - "package": "ed25519", - "revision": 8, - "source": "hackage", - "src_sha256": "d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d", - "version": "0.0.5.0" - }, - { - "cabal_sha256": "17786545dce60c4d5783ba6125c0a6499a1abddd3d7417b15500ccd767c35f07", - "component": "lib:lukko", - "flags": [ - "+ofd-locking" - ], - "package": "lukko", - "revision": 5, - "source": "hackage", - "src_sha256": "a80efb60cfa3dae18682c01980d76d5f7e413e191cd186992e1bf7388d48ab1f", - "version": "0.1.1.3" - }, - { - "cabal_sha256": "32fa47f8345a2c0662fb602fc42e4b674e41ec48079b68bdecb4b6f68032c24e", - "component": "lib:os-string", - "flags": [], - "package": "os-string", - "revision": 0, - "source": "hackage", - "src_sha256": "0953126e962966719753c98d71f596f5fea07e100bce191b7453735a1ff2caa1", - "version": "2.0.2" - }, - { - "cabal_sha256": "3ed979ee1bb00b4e488537988ee6bb3c2c67e66678804125e2df08a527822b4e", - "component": "lib:tar-internal", - "flags": [], - "package": "tar", - "revision": 0, - "source": "hackage", - "src_sha256": "edfef2e126440839d34f23fff7f3616d0bfffa0345ea13d4d0fee9a669d305da", - "version": "0.6.1.0" - }, - { - "cabal_sha256": "3ed979ee1bb00b4e488537988ee6bb3c2c67e66678804125e2df08a527822b4e", - "component": "lib:tar", - "flags": [], - "package": "tar", - "revision": 0, - "source": "hackage", - "src_sha256": "edfef2e126440839d34f23fff7f3616d0bfffa0345ea13d4d0fee9a669d305da", - "version": "0.6.1.0" - }, - { - "cabal_sha256": "13aee0a157b2362cf079a4fa0156927403aef2a9540694c9d170ac8339d17bda", - "component": "lib:zlib", - "flags": [ - "-bundled-c-zlib", - "+non-blocking-ffi", - "-pkg-config" - ], - "package": "zlib", - "revision": 0, - "source": "hackage", - "src_sha256": "7e43c205e1e1ff5a4b033086ec8cce82ab658879e977c8ba02a6701946ff7a47", - "version": "0.7.0.0" - }, - { - "cabal_sha256": "9695169282e5b1172b9595a99a955b013a2713ce53ccfcdf97d9be088fd67258", - "component": "lib:hackage-security", - "flags": [ - "+cabal-syntax", - "+lukko", - "+use-network-uri" - ], - "package": "hackage-security", - "revision": 1, - "source": "hackage", - "src_sha256": "8b925b3bb04b42e93ae60b4db1df65e263feb5642c7b0e76134e691887ed4c82", - "version": "0.6.2.4" - }, - { - "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", - "component": "lib:open-browser", - "flags": [], - "package": "open-browser", - "revision": 0, - "source": "hackage", - "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", - "version": "0.2.1.0" - }, - { - "cabal_sha256": "0322b2fcd1358f3355e0c8608efa60d27b14d1c9d476451dbcb9181363bd8b27", - "component": "lib:regex-base", - "flags": [], - "package": "regex-base", - "revision": 4, - "source": "hackage", - "src_sha256": "7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1", - "version": "0.94.0.2" - }, - { - "cabal_sha256": "816d6acc560cb86672f347a7bef8129578dde26ed760f9e79b4976ed9bd7b9fd", - "component": "lib:regex-posix", - "flags": [ - "-_regex-posix-clib" - ], - "package": "regex-posix", - "revision": 3, - "source": "hackage", - "src_sha256": "c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c", - "version": "0.96.0.1" - }, - { - "cabal_sha256": "4868265ab5760d2fdeb96625b138c8df25d41b9ee2651fa299ed019a69403045", - "component": "lib:resolv", - "flags": [], - "package": "resolv", - "revision": 3, - "source": "hackage", - "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b", - "version": "0.2.0.2" - }, - { - "cabal_sha256": "8bb7261bd54bd58acfcb154be6a161fb6d0d31a1852aadc8e927d2ad2d7651d1", - "component": "lib:safe-exceptions", - "flags": [], - "package": "safe-exceptions", - "revision": 1, - "source": "hackage", - "src_sha256": "3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6", - "version": "0.1.7.4" - }, - { - "cabal_sha256": "8ed6242cab5b0e1a8c654424275ac178035d108dfe4d651053947790fcf83017", - "component": "lib:semaphore-compat", - "flags": [], - "package": "semaphore-compat", - "revision": 1, - "source": "hackage", - "src_sha256": "1c6e6fab021c2ccee5d86112fb1c0bd016d15e0cf70c489dae5fb5ec156ed9e2", - "version": "1.0.0" - }, - { - "cabal_sha256": null, - "component": "lib:cabal-install", - "flags": [ - "+lukko", - "+native-dns" - ], - "package": "cabal-install", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": null, - "component": "exe:cabal", - "flags": [ - "+lukko", - "+native-dns" - ], - "package": "cabal-install", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", - "component": "exe:example", - "flags": [], - "package": "open-browser", - "revision": 0, - "source": "hackage", - "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", - "version": "0.2.1.0" - } - ] + "builtin": [ + { + "package": "rts", + "version": "1.0.2" + }, + { + "package": "ghc-prim", + "version": "0.8.0" + }, + { + "package": "ghc-bignum", + "version": "1.2" + }, + { + "package": "base", + "version": "4.16.4.0" + }, + { + "package": "array", + "version": "0.5.4.0" + }, + { + "package": "deepseq", + "version": "1.4.6.1" + }, + { + "package": "containers", + "version": "0.6.5.1" + }, + { + "package": "ghc-boot-th", + "version": "9.2.8" + }, + { + "package": "pretty", + "version": "1.1.3.6" + }, + { + "package": "template-haskell", + "version": "2.18.0.0" + }, + { + "package": "bytestring", + "version": "0.11.4.0" + }, + { + "package": "transformers", + "version": "0.5.6.2" + }, + { + "package": "mtl", + "version": "2.2.2" + }, + { + "package": "stm", + "version": "2.5.0.2" + }, + { + "package": "exceptions", + "version": "0.10.4" + }, + { + "package": "time", + "version": "1.11.1.1" + }, + { + "package": "binary", + "version": "0.8.9.0" + }, + { + "package": "text", + "version": "1.2.5.0" + }, + { + "package": "parsec", + "version": "3.1.15.0" + } + ], + "dependencies": [ + { + "cabal_sha256": "d9e181e1acae0ac505d8b217dec3805c68554878f1e32b3d8351b9ce17061623", + "component": "lib:filepath", + "flags": [ + "-cpphs" + ], + "package": "filepath", + "revision": 0, + "source": "hackage", + "src_sha256": "337a0b5bcf0898cb7f51ff327528cf26f4ac38baed7b66b28fbdea334699d8ed", + "version": "1.4.300.1" + }, + { + "cabal_sha256": "256e42f032dfd7ef13d0ea3f4104a1f0883d93ccade0b11f26ea790ef8001259", + "component": "lib:unix", + "flags": [ + "-os-string" + ], + "package": "unix", + "revision": 1, + "source": "hackage", + "src_sha256": "d70b81e242ee7e2e866118616c5b97afca9047e76bbfd51baa085a38db92857d", + "version": "2.8.5.0" + }, + { + "cabal_sha256": "bd3b0a0947a365d2da80b9f4a960a864d42ffa7a46577fdc7a0611703486a7f9", + "component": "lib:directory", + "flags": [], + "package": "directory", + "revision": 1, + "source": "hackage", + "src_sha256": "bd8253197587d32d4553070d2de89d3817176860932b0e9ab7bb7ba3759d8e9c", + "version": "1.3.8.1" + }, + { + "cabal_sha256": "de553eefe0b6548a560e9d8100486310548470a403c1fa21108dd03713da5fc7", + "component": "exe:alex", + "flags": [], + "package": "alex", + "revision": 0, + "source": "hackage", + "src_sha256": "c92efe86f8eb959ee03be6c04ee57ebc7e4abc75a6c4b26551215d7443e92a07", + "version": "3.5.1.0" + }, + { + "cabal_sha256": null, + "component": "lib:Cabal-syntax", + "flags": [], + "package": "Cabal-syntax", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.12.0.0" + }, + { + "cabal_sha256": "8b4bce2749e4f61a440049e6088487003e8023c720e2019345e399d50888594f", + "component": "lib:process", + "flags": [], + "package": "process", + "revision": 2, + "source": "hackage", + "src_sha256": "aa5f4c4fe4974f89f5ab998c7509daa4bda3926cfb06daacd5eba892aad8a37e", + "version": "1.6.18.0" + }, + { + "cabal_sha256": null, + "component": "lib:Cabal", + "flags": [], + "package": "Cabal", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.12.0.0" + }, + { + "cabal_sha256": "60e78b6c60dc32a77ce6c37ed5ca4e838fc5f76f02836ef64d93cd21cc002325", + "component": "exe:hsc2hs", + "flags": [ + "-in-ghc-tree" + ], + "package": "hsc2hs", + "revision": 2, + "source": "hackage", + "src_sha256": "6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76", + "version": "0.68.10" + }, + { + "cabal_sha256": "e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def", + "component": "lib:network", + "flags": [ + "-devel" + ], + "package": "network", + "revision": 1, + "source": "hackage", + "src_sha256": "b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e", + "version": "3.1.4.0" + }, + { + "cabal_sha256": "177148ba8407fbaaef0231b8bf8af092eddf3b2b1a682dc88df8e86b87828e96", + "component": "lib:th-compat", + "flags": [], + "package": "th-compat", + "revision": 0, + "source": "hackage", + "src_sha256": "81f55fafc7afad7763c09cb8b7b4165ca3765edcf70ffa42c7393043a1382a1e", + "version": "0.1.5" + }, + { + "cabal_sha256": "6fffb57373962b5651a2db8b0af732098b3bf029a7ced76a9855615de2026588", + "component": "lib:network-uri", + "flags": [], + "package": "network-uri", + "revision": 1, + "source": "hackage", + "src_sha256": "9c188973126e893250b881f20e8811dca06c223c23402b06f7a1f2e995797228", + "version": "2.6.4.2" + }, + { + "cabal_sha256": "0e37572590743e49d7a610f472e1618a594dc861410846f64d9f2347923c4f5b", + "component": "lib:HTTP", + "flags": [ + "-conduit10", + "+network-uri", + "-warn-as-error", + "-warp-tests" + ], + "package": "HTTP", + "revision": 3, + "source": "hackage", + "src_sha256": "df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453", + "version": "4000.4.1" + }, + { + "cabal_sha256": "a4a1975fde77e289b605c45a3ef78d731d8c1834e4cef311152d910a1e94d98c", + "component": "lib:data-array-byte", + "flags": [], + "package": "data-array-byte", + "revision": 3, + "source": "hackage", + "src_sha256": "1bb6eca0b3e02d057fe7f4e14c81ef395216f421ab30fdaa1b18017c9c025600", + "version": "0.1.0.1" + }, + { + "cabal_sha256": "f3bf68acfa0df7a064a378ef2cdcfeb55e6fb96100675f4c593556dcbf3d7194", + "component": "lib:hashable", + "flags": [ + "+integer-gmp", + "-random-initial-seed" + ], + "package": "hashable", + "revision": 1, + "source": "hackage", + "src_sha256": "32efb16c2891786209b7cbe5c39df9b3a9ae51e836f1a54f646bc4602b7ab0f5", + "version": "1.4.3.0" + }, + { + "cabal_sha256": "957d5ca4496e7048e3e78f108dbdc3e391eafe60b50417486e4c28957d430b05", + "component": "lib:async", + "flags": [ + "-bench" + ], + "package": "async", + "revision": 0, + "source": "hackage", + "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", + "version": "2.2.5" + }, + { + "cabal_sha256": "a694e88f9ec9fc79f0b03f233d3fea592b68f70a34aac2ddb5bcaecb6562e2fd", + "component": "lib:base16-bytestring", + "flags": [], + "package": "base16-bytestring", + "revision": 1, + "source": "hackage", + "src_sha256": "1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784", + "version": "1.0.2.0" + }, + { + "cabal_sha256": "45305ccf8914c66d385b518721472c7b8c858f1986945377f74f85c1e0d49803", + "component": "lib:base64-bytestring", + "flags": [], + "package": "base64-bytestring", + "revision": 1, + "source": "hackage", + "src_sha256": "fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9", + "version": "1.2.1.0" + }, + { + "cabal_sha256": "bac0ae8d46a04e410666b0c8081cff63f060f29157983b569ca86ddb6e6e0dc6", + "component": "lib:splitmix", + "flags": [ + "-optimised-mixer" + ], + "package": "splitmix", + "revision": 0, + "source": "hackage", + "src_sha256": "9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002", + "version": "0.1.0.5" + }, + { + "cabal_sha256": "32397de181e20ccaacf806ec70de9308cf044f089a2be37c936f3f8967bde867", + "component": "lib:random", + "flags": [], + "package": "random", + "revision": 0, + "source": "hackage", + "src_sha256": "790f4dc2d2327c453ff6aac7bf15399fd123d55e927935f68f84b5df42d9a4b4", + "version": "1.2.1.2" + }, + { + "cabal_sha256": "4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee", + "component": "lib:edit-distance", + "flags": [], + "package": "edit-distance", + "revision": 1, + "source": "hackage", + "src_sha256": "3e8885ee2f56ad4da940f043ae8f981ee2fe336b5e8e4ba3f7436cff4f526c4a", + "version": "0.2.2.1" + }, + { + "cabal_sha256": null, + "component": "lib:cabal-install-solver", + "flags": [ + "-debug-expensive-assertions", + "-debug-tracetree" + ], + "package": "cabal-install-solver", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.11.0.0" + }, + { + "cabal_sha256": "03db065161987f614a3a2bbcd16264f78e47efe231fb5bd161be2043eaf20488", + "component": "lib:cryptohash-sha256", + "flags": [ + "-exe", + "+use-cbits" + ], + "package": "cryptohash-sha256", + "revision": 3, + "source": "hackage", + "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", + "version": "0.11.102.1" + }, + { + "cabal_sha256": "ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42", + "component": "lib:echo", + "flags": [ + "-example" + ], + "package": "echo", + "revision": 0, + "source": "hackage", + "src_sha256": "c9fe1bf2904825a65b667251ec644f197b71dc5c209d2d254be5de3d496b0e43", + "version": "0.1.4" + }, + { + "cabal_sha256": "48383789821af5cc624498f3ee1d0939a070cda9468c0bfe63c951736be81c75", + "component": "lib:ed25519", + "flags": [ + "+no-donna", + "+test-doctests", + "+test-hlint", + "+test-properties" + ], + "package": "ed25519", + "revision": 8, + "source": "hackage", + "src_sha256": "d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d", + "version": "0.0.5.0" + }, + { + "cabal_sha256": "17786545dce60c4d5783ba6125c0a6499a1abddd3d7417b15500ccd767c35f07", + "component": "lib:lukko", + "flags": [ + "+ofd-locking" + ], + "package": "lukko", + "revision": 5, + "source": "hackage", + "src_sha256": "a80efb60cfa3dae18682c01980d76d5f7e413e191cd186992e1bf7388d48ab1f", + "version": "0.1.1.3" + }, + { + "cabal_sha256": "32fa47f8345a2c0662fb602fc42e4b674e41ec48079b68bdecb4b6f68032c24e", + "component": "lib:os-string", + "flags": [], + "package": "os-string", + "revision": 0, + "source": "hackage", + "src_sha256": "0953126e962966719753c98d71f596f5fea07e100bce191b7453735a1ff2caa1", + "version": "2.0.2" + }, + { + "cabal_sha256": "619828cae098a7b6deeb0316e12f55011101d88f756787ed024ceedb81cf1eba", + "component": "lib:tar-internal", + "flags": [], + "package": "tar", + "revision": 0, + "source": "hackage", + "src_sha256": "08c61e82b59ed6fe7e85e9fe7cceaaf853ba54511d1ec57efa511ddc55ef1998", + "version": "0.6.2.0" + }, + { + "cabal_sha256": "619828cae098a7b6deeb0316e12f55011101d88f756787ed024ceedb81cf1eba", + "component": "lib:tar", + "flags": [], + "package": "tar", + "revision": 0, + "source": "hackage", + "src_sha256": "08c61e82b59ed6fe7e85e9fe7cceaaf853ba54511d1ec57efa511ddc55ef1998", + "version": "0.6.2.0" + }, + { + "cabal_sha256": "64a1925c93e9a26cd4c40c470736950c4b5ea7bae68418cb996c5c7df4873cba", + "component": "lib:zlib", + "flags": [ + "-bundled-c-zlib", + "+non-blocking-ffi", + "+pkg-config" + ], + "package": "zlib", + "revision": 1, + "source": "hackage", + "src_sha256": "7e43c205e1e1ff5a4b033086ec8cce82ab658879e977c8ba02a6701946ff7a47", + "version": "0.7.0.0" + }, + { + "cabal_sha256": "6c32c6826bc3fea3f08013a3fcf58fad28f7d42dca38a483872c1e0b6c7c5da4", + "component": "lib:hackage-security", + "flags": [ + "+cabal-syntax", + "+lukko", + "+use-network-uri" + ], + "package": "hackage-security", + "revision": 0, + "source": "hackage", + "src_sha256": "85c809236434de33e49eddd6960f2d247f9de9a4cb8aef56f8b40d1ee35fe2ab", + "version": "0.6.2.5" + }, + { + "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", + "component": "lib:open-browser", + "flags": [], + "package": "open-browser", + "revision": 0, + "source": "hackage", + "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", + "version": "0.2.1.0" + }, + { + "cabal_sha256": "0322b2fcd1358f3355e0c8608efa60d27b14d1c9d476451dbcb9181363bd8b27", + "component": "lib:regex-base", + "flags": [], + "package": "regex-base", + "revision": 4, + "source": "hackage", + "src_sha256": "7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1", + "version": "0.94.0.2" + }, + { + "cabal_sha256": "816d6acc560cb86672f347a7bef8129578dde26ed760f9e79b4976ed9bd7b9fd", + "component": "lib:regex-posix", + "flags": [ + "-_regex-posix-clib" + ], + "package": "regex-posix", + "revision": 3, + "source": "hackage", + "src_sha256": "c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c", + "version": "0.96.0.1" + }, + { + "cabal_sha256": "4868265ab5760d2fdeb96625b138c8df25d41b9ee2651fa299ed019a69403045", + "component": "lib:resolv", + "flags": [], + "package": "resolv", + "revision": 3, + "source": "hackage", + "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b", + "version": "0.2.0.2" + }, + { + "cabal_sha256": "8bb7261bd54bd58acfcb154be6a161fb6d0d31a1852aadc8e927d2ad2d7651d1", + "component": "lib:safe-exceptions", + "flags": [], + "package": "safe-exceptions", + "revision": 1, + "source": "hackage", + "src_sha256": "3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6", + "version": "0.1.7.4" + }, + { + "cabal_sha256": "8ed6242cab5b0e1a8c654424275ac178035d108dfe4d651053947790fcf83017", + "component": "lib:semaphore-compat", + "flags": [], + "package": "semaphore-compat", + "revision": 1, + "source": "hackage", + "src_sha256": "1c6e6fab021c2ccee5d86112fb1c0bd016d15e0cf70c489dae5fb5ec156ed9e2", + "version": "1.0.0" + }, + { + "cabal_sha256": null, + "component": "lib:cabal-install", + "flags": [ + "+lukko", + "+native-dns" + ], + "package": "cabal-install", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.11.0.0" + }, + { + "cabal_sha256": null, + "component": "exe:cabal", + "flags": [ + "+lukko", + "+native-dns" + ], + "package": "cabal-install", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.11.0.0" + }, + { + "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", + "component": "exe:example", + "flags": [], + "package": "open-browser", + "revision": 0, + "source": "hackage", + "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", + "version": "0.2.1.0" + } + ] } diff --git a/bootstrap/linux-9.4.8.json b/bootstrap/linux-9.4.8.json index d7c3a2e9a2d..1d314b39002 100644 --- a/bootstrap/linux-9.4.8.json +++ b/bootstrap/linux-9.4.8.json @@ -1,513 +1,513 @@ { - "builtin": [ - { - "package": "rts", - "version": "1.0.2" - }, - { - "package": "ghc-prim", - "version": "0.9.1" - }, - { - "package": "ghc-bignum", - "version": "1.3" - }, - { - "package": "base", - "version": "4.17.2.1" - }, - { - "package": "array", - "version": "0.5.4.0" - }, - { - "package": "deepseq", - "version": "1.4.8.0" - }, - { - "package": "ghc-boot-th", - "version": "9.4.8" - }, - { - "package": "pretty", - "version": "1.1.3.6" - }, - { - "package": "template-haskell", - "version": "2.19.0.0" - }, - { - "package": "containers", - "version": "0.6.7" - }, - { - "package": "bytestring", - "version": "0.11.5.3" - }, - { - "package": "transformers", - "version": "0.5.6.2" - }, - { - "package": "mtl", - "version": "2.2.2" - }, - { - "package": "stm", - "version": "2.5.1.0" - }, - { - "package": "exceptions", - "version": "0.10.5" - }, - { - "package": "time", - "version": "1.12.2" - }, - { - "package": "binary", - "version": "0.8.9.1" - }, - { - "package": "text", - "version": "2.0.2" - }, - { - "package": "parsec", - "version": "3.1.16.1" - } - ], - "dependencies": [ - { - "cabal_sha256": "d9e181e1acae0ac505d8b217dec3805c68554878f1e32b3d8351b9ce17061623", - "component": "lib:filepath", - "flags": [ - "-cpphs" - ], - "package": "filepath", - "revision": 0, - "source": "hackage", - "src_sha256": "337a0b5bcf0898cb7f51ff327528cf26f4ac38baed7b66b28fbdea334699d8ed", - "version": "1.4.300.1" - }, - { - "cabal_sha256": "633f15ef0bd50a16a7b5c5e86e6659fee6e4e211e098cc8bd0029f452bfcfddc", - "component": "lib:unix", - "flags": [ - "-os-string" - ], - "package": "unix", - "revision": 0, - "source": "hackage", - "src_sha256": "d70b81e242ee7e2e866118616c5b97afca9047e76bbfd51baa085a38db92857d", - "version": "2.8.5.0" - }, - { - "cabal_sha256": "bd3b0a0947a365d2da80b9f4a960a864d42ffa7a46577fdc7a0611703486a7f9", - "component": "lib:directory", - "flags": [], - "package": "directory", - "revision": 1, - "source": "hackage", - "src_sha256": "bd8253197587d32d4553070d2de89d3817176860932b0e9ab7bb7ba3759d8e9c", - "version": "1.3.8.1" - }, - { - "cabal_sha256": "348778ae5f77f946e45b88c6c94b3a65c655954e5f07f6d7dfa6c99efde5248c", - "component": "exe:alex", - "flags": [], - "package": "alex", - "revision": 0, - "source": "hackage", - "src_sha256": "caed9f23b4bc1cdd6f8083b79a0bb86ba86ed81ab9a1238fe0e13ed544809fed", - "version": "3.5.0.0" - }, - { - "cabal_sha256": null, - "component": "lib:Cabal-syntax", - "flags": [], - "package": "Cabal-syntax", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "8b4bce2749e4f61a440049e6088487003e8023c720e2019345e399d50888594f", - "component": "lib:process", - "flags": [], - "package": "process", - "revision": 2, - "source": "hackage", - "src_sha256": "aa5f4c4fe4974f89f5ab998c7509daa4bda3926cfb06daacd5eba892aad8a37e", - "version": "1.6.18.0" - }, - { - "cabal_sha256": null, - "component": "lib:Cabal", - "flags": [], - "package": "Cabal", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "488cca2a179a5141da8f35a3a7e6699a0ef690f834f589d6b152c4947aa8fe2d", - "component": "exe:hsc2hs", - "flags": [ - "-in-ghc-tree" - ], - "package": "hsc2hs", - "revision": 1, - "source": "hackage", - "src_sha256": "6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76", - "version": "0.68.10" - }, - { - "cabal_sha256": "e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def", - "component": "lib:network", - "flags": [ - "-devel" - ], - "package": "network", - "revision": 1, - "source": "hackage", - "src_sha256": "b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e", - "version": "3.1.4.0" - }, - { - "cabal_sha256": "f5f2c679ecc1c1b83d2d68db6cc564e5c78d53425e69e1b9e36784820e122d37", - "component": "lib:th-compat", - "flags": [], - "package": "th-compat", - "revision": 4, - "source": "hackage", - "src_sha256": "d8f97ac14ab47b6b8a7b0fdb4ff95426322ec56badd01652ac15da4a44d4bab8", - "version": "0.1.4" - }, - { - "cabal_sha256": "6fffb57373962b5651a2db8b0af732098b3bf029a7ced76a9855615de2026588", - "component": "lib:network-uri", - "flags": [], - "package": "network-uri", - "revision": 1, - "source": "hackage", - "src_sha256": "9c188973126e893250b881f20e8811dca06c223c23402b06f7a1f2e995797228", - "version": "2.6.4.2" - }, - { - "cabal_sha256": "0e37572590743e49d7a610f472e1618a594dc861410846f64d9f2347923c4f5b", - "component": "lib:HTTP", - "flags": [ - "-conduit10", - "+network-uri", - "-warn-as-error", - "-warp-tests" - ], - "package": "HTTP", - "revision": 3, - "source": "hackage", - "src_sha256": "df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453", - "version": "4000.4.1" - }, - { - "cabal_sha256": "f3bf68acfa0df7a064a378ef2cdcfeb55e6fb96100675f4c593556dcbf3d7194", - "component": "lib:hashable", - "flags": [ - "+integer-gmp", - "-random-initial-seed" - ], - "package": "hashable", - "revision": 1, - "source": "hackage", - "src_sha256": "32efb16c2891786209b7cbe5c39df9b3a9ae51e836f1a54f646bc4602b7ab0f5", - "version": "1.4.3.0" - }, - { - "cabal_sha256": "957d5ca4496e7048e3e78f108dbdc3e391eafe60b50417486e4c28957d430b05", - "component": "lib:async", - "flags": [ - "-bench" - ], - "package": "async", - "revision": 0, - "source": "hackage", - "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", - "version": "2.2.5" - }, - { - "cabal_sha256": "a694e88f9ec9fc79f0b03f233d3fea592b68f70a34aac2ddb5bcaecb6562e2fd", - "component": "lib:base16-bytestring", - "flags": [], - "package": "base16-bytestring", - "revision": 1, - "source": "hackage", - "src_sha256": "1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784", - "version": "1.0.2.0" - }, - { - "cabal_sha256": "45305ccf8914c66d385b518721472c7b8c858f1986945377f74f85c1e0d49803", - "component": "lib:base64-bytestring", - "flags": [], - "package": "base64-bytestring", - "revision": 1, - "source": "hackage", - "src_sha256": "fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9", - "version": "1.2.1.0" - }, - { - "cabal_sha256": "bac0ae8d46a04e410666b0c8081cff63f060f29157983b569ca86ddb6e6e0dc6", - "component": "lib:splitmix", - "flags": [ - "-optimised-mixer" - ], - "package": "splitmix", - "revision": 0, - "source": "hackage", - "src_sha256": "9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002", - "version": "0.1.0.5" - }, - { - "cabal_sha256": "32397de181e20ccaacf806ec70de9308cf044f089a2be37c936f3f8967bde867", - "component": "lib:random", - "flags": [], - "package": "random", - "revision": 0, - "source": "hackage", - "src_sha256": "790f4dc2d2327c453ff6aac7bf15399fd123d55e927935f68f84b5df42d9a4b4", - "version": "1.2.1.2" - }, - { - "cabal_sha256": "4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee", - "component": "lib:edit-distance", - "flags": [], - "package": "edit-distance", - "revision": 1, - "source": "hackage", - "src_sha256": "3e8885ee2f56ad4da940f043ae8f981ee2fe336b5e8e4ba3f7436cff4f526c4a", - "version": "0.2.2.1" - }, - { - "cabal_sha256": null, - "component": "lib:cabal-install-solver", - "flags": [ - "-debug-expensive-assertions", - "-debug-tracetree" - ], - "package": "cabal-install-solver", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "03db065161987f614a3a2bbcd16264f78e47efe231fb5bd161be2043eaf20488", - "component": "lib:cryptohash-sha256", - "flags": [ - "-exe", - "+use-cbits" - ], - "package": "cryptohash-sha256", - "revision": 3, - "source": "hackage", - "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", - "version": "0.11.102.1" - }, - { - "cabal_sha256": "ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42", - "component": "lib:echo", - "flags": [ - "-example" - ], - "package": "echo", - "revision": 0, - "source": "hackage", - "src_sha256": "c9fe1bf2904825a65b667251ec644f197b71dc5c209d2d254be5de3d496b0e43", - "version": "0.1.4" - }, - { - "cabal_sha256": "48383789821af5cc624498f3ee1d0939a070cda9468c0bfe63c951736be81c75", - "component": "lib:ed25519", - "flags": [ - "+no-donna", - "+test-doctests", - "+test-hlint", - "+test-properties" - ], - "package": "ed25519", - "revision": 8, - "source": "hackage", - "src_sha256": "d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d", - "version": "0.0.5.0" - }, - { - "cabal_sha256": "17786545dce60c4d5783ba6125c0a6499a1abddd3d7417b15500ccd767c35f07", - "component": "lib:lukko", - "flags": [ - "+ofd-locking" - ], - "package": "lukko", - "revision": 5, - "source": "hackage", - "src_sha256": "a80efb60cfa3dae18682c01980d76d5f7e413e191cd186992e1bf7388d48ab1f", - "version": "0.1.1.3" - }, - { - "cabal_sha256": "32fa47f8345a2c0662fb602fc42e4b674e41ec48079b68bdecb4b6f68032c24e", - "component": "lib:os-string", - "flags": [], - "package": "os-string", - "revision": 0, - "source": "hackage", - "src_sha256": "0953126e962966719753c98d71f596f5fea07e100bce191b7453735a1ff2caa1", - "version": "2.0.2" - }, - { - "cabal_sha256": "3ed979ee1bb00b4e488537988ee6bb3c2c67e66678804125e2df08a527822b4e", - "component": "lib:tar-internal", - "flags": [], - "package": "tar", - "revision": 0, - "source": "hackage", - "src_sha256": "edfef2e126440839d34f23fff7f3616d0bfffa0345ea13d4d0fee9a669d305da", - "version": "0.6.1.0" - }, - { - "cabal_sha256": "3ed979ee1bb00b4e488537988ee6bb3c2c67e66678804125e2df08a527822b4e", - "component": "lib:tar", - "flags": [], - "package": "tar", - "revision": 0, - "source": "hackage", - "src_sha256": "edfef2e126440839d34f23fff7f3616d0bfffa0345ea13d4d0fee9a669d305da", - "version": "0.6.1.0" - }, - { - "cabal_sha256": "13aee0a157b2362cf079a4fa0156927403aef2a9540694c9d170ac8339d17bda", - "component": "lib:zlib", - "flags": [ - "-bundled-c-zlib", - "+non-blocking-ffi", - "-pkg-config" - ], - "package": "zlib", - "revision": 0, - "source": "hackage", - "src_sha256": "7e43c205e1e1ff5a4b033086ec8cce82ab658879e977c8ba02a6701946ff7a47", - "version": "0.7.0.0" - }, - { - "cabal_sha256": "9695169282e5b1172b9595a99a955b013a2713ce53ccfcdf97d9be088fd67258", - "component": "lib:hackage-security", - "flags": [ - "+cabal-syntax", - "+lukko", - "+use-network-uri" - ], - "package": "hackage-security", - "revision": 1, - "source": "hackage", - "src_sha256": "8b925b3bb04b42e93ae60b4db1df65e263feb5642c7b0e76134e691887ed4c82", - "version": "0.6.2.4" - }, - { - "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", - "component": "lib:open-browser", - "flags": [], - "package": "open-browser", - "revision": 0, - "source": "hackage", - "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", - "version": "0.2.1.0" - }, - { - "cabal_sha256": "0322b2fcd1358f3355e0c8608efa60d27b14d1c9d476451dbcb9181363bd8b27", - "component": "lib:regex-base", - "flags": [], - "package": "regex-base", - "revision": 4, - "source": "hackage", - "src_sha256": "7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1", - "version": "0.94.0.2" - }, - { - "cabal_sha256": "816d6acc560cb86672f347a7bef8129578dde26ed760f9e79b4976ed9bd7b9fd", - "component": "lib:regex-posix", - "flags": [ - "-_regex-posix-clib" - ], - "package": "regex-posix", - "revision": 3, - "source": "hackage", - "src_sha256": "c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c", - "version": "0.96.0.1" - }, - { - "cabal_sha256": "4868265ab5760d2fdeb96625b138c8df25d41b9ee2651fa299ed019a69403045", - "component": "lib:resolv", - "flags": [], - "package": "resolv", - "revision": 3, - "source": "hackage", - "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b", - "version": "0.2.0.2" - }, - { - "cabal_sha256": "8bb7261bd54bd58acfcb154be6a161fb6d0d31a1852aadc8e927d2ad2d7651d1", - "component": "lib:safe-exceptions", - "flags": [], - "package": "safe-exceptions", - "revision": 1, - "source": "hackage", - "src_sha256": "3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6", - "version": "0.1.7.4" - }, - { - "cabal_sha256": "8ed6242cab5b0e1a8c654424275ac178035d108dfe4d651053947790fcf83017", - "component": "lib:semaphore-compat", - "flags": [], - "package": "semaphore-compat", - "revision": 1, - "source": "hackage", - "src_sha256": "1c6e6fab021c2ccee5d86112fb1c0bd016d15e0cf70c489dae5fb5ec156ed9e2", - "version": "1.0.0" - }, - { - "cabal_sha256": null, - "component": "lib:cabal-install", - "flags": [ - "+lukko", - "+native-dns" - ], - "package": "cabal-install", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": null, - "component": "exe:cabal", - "flags": [ - "+lukko", - "+native-dns" - ], - "package": "cabal-install", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", - "component": "exe:example", - "flags": [], - "package": "open-browser", - "revision": 0, - "source": "hackage", - "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", - "version": "0.2.1.0" - } - ] + "builtin": [ + { + "package": "rts", + "version": "1.0.2" + }, + { + "package": "ghc-prim", + "version": "0.9.1" + }, + { + "package": "ghc-bignum", + "version": "1.3" + }, + { + "package": "base", + "version": "4.17.2.1" + }, + { + "package": "array", + "version": "0.5.4.0" + }, + { + "package": "deepseq", + "version": "1.4.8.0" + }, + { + "package": "ghc-boot-th", + "version": "9.4.8" + }, + { + "package": "pretty", + "version": "1.1.3.6" + }, + { + "package": "template-haskell", + "version": "2.19.0.0" + }, + { + "package": "containers", + "version": "0.6.7" + }, + { + "package": "bytestring", + "version": "0.11.5.3" + }, + { + "package": "transformers", + "version": "0.5.6.2" + }, + { + "package": "mtl", + "version": "2.2.2" + }, + { + "package": "stm", + "version": "2.5.1.0" + }, + { + "package": "exceptions", + "version": "0.10.5" + }, + { + "package": "time", + "version": "1.12.2" + }, + { + "package": "binary", + "version": "0.8.9.1" + }, + { + "package": "text", + "version": "2.0.2" + }, + { + "package": "parsec", + "version": "3.1.16.1" + } + ], + "dependencies": [ + { + "cabal_sha256": "d9e181e1acae0ac505d8b217dec3805c68554878f1e32b3d8351b9ce17061623", + "component": "lib:filepath", + "flags": [ + "-cpphs" + ], + "package": "filepath", + "revision": 0, + "source": "hackage", + "src_sha256": "337a0b5bcf0898cb7f51ff327528cf26f4ac38baed7b66b28fbdea334699d8ed", + "version": "1.4.300.1" + }, + { + "cabal_sha256": "256e42f032dfd7ef13d0ea3f4104a1f0883d93ccade0b11f26ea790ef8001259", + "component": "lib:unix", + "flags": [ + "-os-string" + ], + "package": "unix", + "revision": 1, + "source": "hackage", + "src_sha256": "d70b81e242ee7e2e866118616c5b97afca9047e76bbfd51baa085a38db92857d", + "version": "2.8.5.0" + }, + { + "cabal_sha256": "bd3b0a0947a365d2da80b9f4a960a864d42ffa7a46577fdc7a0611703486a7f9", + "component": "lib:directory", + "flags": [], + "package": "directory", + "revision": 1, + "source": "hackage", + "src_sha256": "bd8253197587d32d4553070d2de89d3817176860932b0e9ab7bb7ba3759d8e9c", + "version": "1.3.8.1" + }, + { + "cabal_sha256": "de553eefe0b6548a560e9d8100486310548470a403c1fa21108dd03713da5fc7", + "component": "exe:alex", + "flags": [], + "package": "alex", + "revision": 0, + "source": "hackage", + "src_sha256": "c92efe86f8eb959ee03be6c04ee57ebc7e4abc75a6c4b26551215d7443e92a07", + "version": "3.5.1.0" + }, + { + "cabal_sha256": null, + "component": "lib:Cabal-syntax", + "flags": [], + "package": "Cabal-syntax", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.12.0.0" + }, + { + "cabal_sha256": "8b4bce2749e4f61a440049e6088487003e8023c720e2019345e399d50888594f", + "component": "lib:process", + "flags": [], + "package": "process", + "revision": 2, + "source": "hackage", + "src_sha256": "aa5f4c4fe4974f89f5ab998c7509daa4bda3926cfb06daacd5eba892aad8a37e", + "version": "1.6.18.0" + }, + { + "cabal_sha256": null, + "component": "lib:Cabal", + "flags": [], + "package": "Cabal", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.12.0.0" + }, + { + "cabal_sha256": "60e78b6c60dc32a77ce6c37ed5ca4e838fc5f76f02836ef64d93cd21cc002325", + "component": "exe:hsc2hs", + "flags": [ + "-in-ghc-tree" + ], + "package": "hsc2hs", + "revision": 2, + "source": "hackage", + "src_sha256": "6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76", + "version": "0.68.10" + }, + { + "cabal_sha256": "e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def", + "component": "lib:network", + "flags": [ + "-devel" + ], + "package": "network", + "revision": 1, + "source": "hackage", + "src_sha256": "b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e", + "version": "3.1.4.0" + }, + { + "cabal_sha256": "177148ba8407fbaaef0231b8bf8af092eddf3b2b1a682dc88df8e86b87828e96", + "component": "lib:th-compat", + "flags": [], + "package": "th-compat", + "revision": 0, + "source": "hackage", + "src_sha256": "81f55fafc7afad7763c09cb8b7b4165ca3765edcf70ffa42c7393043a1382a1e", + "version": "0.1.5" + }, + { + "cabal_sha256": "6fffb57373962b5651a2db8b0af732098b3bf029a7ced76a9855615de2026588", + "component": "lib:network-uri", + "flags": [], + "package": "network-uri", + "revision": 1, + "source": "hackage", + "src_sha256": "9c188973126e893250b881f20e8811dca06c223c23402b06f7a1f2e995797228", + "version": "2.6.4.2" + }, + { + "cabal_sha256": "0e37572590743e49d7a610f472e1618a594dc861410846f64d9f2347923c4f5b", + "component": "lib:HTTP", + "flags": [ + "-conduit10", + "+network-uri", + "-warn-as-error", + "-warp-tests" + ], + "package": "HTTP", + "revision": 3, + "source": "hackage", + "src_sha256": "df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453", + "version": "4000.4.1" + }, + { + "cabal_sha256": "f3bf68acfa0df7a064a378ef2cdcfeb55e6fb96100675f4c593556dcbf3d7194", + "component": "lib:hashable", + "flags": [ + "+integer-gmp", + "-random-initial-seed" + ], + "package": "hashable", + "revision": 1, + "source": "hackage", + "src_sha256": "32efb16c2891786209b7cbe5c39df9b3a9ae51e836f1a54f646bc4602b7ab0f5", + "version": "1.4.3.0" + }, + { + "cabal_sha256": "957d5ca4496e7048e3e78f108dbdc3e391eafe60b50417486e4c28957d430b05", + "component": "lib:async", + "flags": [ + "-bench" + ], + "package": "async", + "revision": 0, + "source": "hackage", + "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", + "version": "2.2.5" + }, + { + "cabal_sha256": "a694e88f9ec9fc79f0b03f233d3fea592b68f70a34aac2ddb5bcaecb6562e2fd", + "component": "lib:base16-bytestring", + "flags": [], + "package": "base16-bytestring", + "revision": 1, + "source": "hackage", + "src_sha256": "1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784", + "version": "1.0.2.0" + }, + { + "cabal_sha256": "45305ccf8914c66d385b518721472c7b8c858f1986945377f74f85c1e0d49803", + "component": "lib:base64-bytestring", + "flags": [], + "package": "base64-bytestring", + "revision": 1, + "source": "hackage", + "src_sha256": "fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9", + "version": "1.2.1.0" + }, + { + "cabal_sha256": "bac0ae8d46a04e410666b0c8081cff63f060f29157983b569ca86ddb6e6e0dc6", + "component": "lib:splitmix", + "flags": [ + "-optimised-mixer" + ], + "package": "splitmix", + "revision": 0, + "source": "hackage", + "src_sha256": "9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002", + "version": "0.1.0.5" + }, + { + "cabal_sha256": "32397de181e20ccaacf806ec70de9308cf044f089a2be37c936f3f8967bde867", + "component": "lib:random", + "flags": [], + "package": "random", + "revision": 0, + "source": "hackage", + "src_sha256": "790f4dc2d2327c453ff6aac7bf15399fd123d55e927935f68f84b5df42d9a4b4", + "version": "1.2.1.2" + }, + { + "cabal_sha256": "4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee", + "component": "lib:edit-distance", + "flags": [], + "package": "edit-distance", + "revision": 1, + "source": "hackage", + "src_sha256": "3e8885ee2f56ad4da940f043ae8f981ee2fe336b5e8e4ba3f7436cff4f526c4a", + "version": "0.2.2.1" + }, + { + "cabal_sha256": null, + "component": "lib:cabal-install-solver", + "flags": [ + "-debug-expensive-assertions", + "-debug-tracetree" + ], + "package": "cabal-install-solver", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.11.0.0" + }, + { + "cabal_sha256": "03db065161987f614a3a2bbcd16264f78e47efe231fb5bd161be2043eaf20488", + "component": "lib:cryptohash-sha256", + "flags": [ + "-exe", + "+use-cbits" + ], + "package": "cryptohash-sha256", + "revision": 3, + "source": "hackage", + "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", + "version": "0.11.102.1" + }, + { + "cabal_sha256": "ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42", + "component": "lib:echo", + "flags": [ + "-example" + ], + "package": "echo", + "revision": 0, + "source": "hackage", + "src_sha256": "c9fe1bf2904825a65b667251ec644f197b71dc5c209d2d254be5de3d496b0e43", + "version": "0.1.4" + }, + { + "cabal_sha256": "48383789821af5cc624498f3ee1d0939a070cda9468c0bfe63c951736be81c75", + "component": "lib:ed25519", + "flags": [ + "+no-donna", + "+test-doctests", + "+test-hlint", + "+test-properties" + ], + "package": "ed25519", + "revision": 8, + "source": "hackage", + "src_sha256": "d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d", + "version": "0.0.5.0" + }, + { + "cabal_sha256": "17786545dce60c4d5783ba6125c0a6499a1abddd3d7417b15500ccd767c35f07", + "component": "lib:lukko", + "flags": [ + "+ofd-locking" + ], + "package": "lukko", + "revision": 5, + "source": "hackage", + "src_sha256": "a80efb60cfa3dae18682c01980d76d5f7e413e191cd186992e1bf7388d48ab1f", + "version": "0.1.1.3" + }, + { + "cabal_sha256": "32fa47f8345a2c0662fb602fc42e4b674e41ec48079b68bdecb4b6f68032c24e", + "component": "lib:os-string", + "flags": [], + "package": "os-string", + "revision": 0, + "source": "hackage", + "src_sha256": "0953126e962966719753c98d71f596f5fea07e100bce191b7453735a1ff2caa1", + "version": "2.0.2" + }, + { + "cabal_sha256": "619828cae098a7b6deeb0316e12f55011101d88f756787ed024ceedb81cf1eba", + "component": "lib:tar-internal", + "flags": [], + "package": "tar", + "revision": 0, + "source": "hackage", + "src_sha256": "08c61e82b59ed6fe7e85e9fe7cceaaf853ba54511d1ec57efa511ddc55ef1998", + "version": "0.6.2.0" + }, + { + "cabal_sha256": "619828cae098a7b6deeb0316e12f55011101d88f756787ed024ceedb81cf1eba", + "component": "lib:tar", + "flags": [], + "package": "tar", + "revision": 0, + "source": "hackage", + "src_sha256": "08c61e82b59ed6fe7e85e9fe7cceaaf853ba54511d1ec57efa511ddc55ef1998", + "version": "0.6.2.0" + }, + { + "cabal_sha256": "64a1925c93e9a26cd4c40c470736950c4b5ea7bae68418cb996c5c7df4873cba", + "component": "lib:zlib", + "flags": [ + "-bundled-c-zlib", + "+non-blocking-ffi", + "+pkg-config" + ], + "package": "zlib", + "revision": 1, + "source": "hackage", + "src_sha256": "7e43c205e1e1ff5a4b033086ec8cce82ab658879e977c8ba02a6701946ff7a47", + "version": "0.7.0.0" + }, + { + "cabal_sha256": "6c32c6826bc3fea3f08013a3fcf58fad28f7d42dca38a483872c1e0b6c7c5da4", + "component": "lib:hackage-security", + "flags": [ + "+cabal-syntax", + "+lukko", + "+use-network-uri" + ], + "package": "hackage-security", + "revision": 0, + "source": "hackage", + "src_sha256": "85c809236434de33e49eddd6960f2d247f9de9a4cb8aef56f8b40d1ee35fe2ab", + "version": "0.6.2.5" + }, + { + "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", + "component": "lib:open-browser", + "flags": [], + "package": "open-browser", + "revision": 0, + "source": "hackage", + "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", + "version": "0.2.1.0" + }, + { + "cabal_sha256": "0322b2fcd1358f3355e0c8608efa60d27b14d1c9d476451dbcb9181363bd8b27", + "component": "lib:regex-base", + "flags": [], + "package": "regex-base", + "revision": 4, + "source": "hackage", + "src_sha256": "7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1", + "version": "0.94.0.2" + }, + { + "cabal_sha256": "816d6acc560cb86672f347a7bef8129578dde26ed760f9e79b4976ed9bd7b9fd", + "component": "lib:regex-posix", + "flags": [ + "-_regex-posix-clib" + ], + "package": "regex-posix", + "revision": 3, + "source": "hackage", + "src_sha256": "c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c", + "version": "0.96.0.1" + }, + { + "cabal_sha256": "4868265ab5760d2fdeb96625b138c8df25d41b9ee2651fa299ed019a69403045", + "component": "lib:resolv", + "flags": [], + "package": "resolv", + "revision": 3, + "source": "hackage", + "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b", + "version": "0.2.0.2" + }, + { + "cabal_sha256": "8bb7261bd54bd58acfcb154be6a161fb6d0d31a1852aadc8e927d2ad2d7651d1", + "component": "lib:safe-exceptions", + "flags": [], + "package": "safe-exceptions", + "revision": 1, + "source": "hackage", + "src_sha256": "3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6", + "version": "0.1.7.4" + }, + { + "cabal_sha256": "8ed6242cab5b0e1a8c654424275ac178035d108dfe4d651053947790fcf83017", + "component": "lib:semaphore-compat", + "flags": [], + "package": "semaphore-compat", + "revision": 1, + "source": "hackage", + "src_sha256": "1c6e6fab021c2ccee5d86112fb1c0bd016d15e0cf70c489dae5fb5ec156ed9e2", + "version": "1.0.0" + }, + { + "cabal_sha256": null, + "component": "lib:cabal-install", + "flags": [ + "+lukko", + "+native-dns" + ], + "package": "cabal-install", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.11.0.0" + }, + { + "cabal_sha256": null, + "component": "exe:cabal", + "flags": [ + "+lukko", + "+native-dns" + ], + "package": "cabal-install", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.11.0.0" + }, + { + "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", + "component": "exe:example", + "flags": [], + "package": "open-browser", + "revision": 0, + "source": "hackage", + "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", + "version": "0.2.1.0" + } + ] } diff --git a/bootstrap/linux-9.6.4.json b/bootstrap/linux-9.6.4.json index 19c9d6d5352..c827a8e3987 100644 --- a/bootstrap/linux-9.6.4.json +++ b/bootstrap/linux-9.6.4.json @@ -1,485 +1,485 @@ { - "builtin": [ - { - "package": "rts", - "version": "1.0.2" - }, - { - "package": "ghc-prim", - "version": "0.10.0" - }, - { - "package": "ghc-bignum", - "version": "1.3" - }, - { - "package": "base", - "version": "4.18.2.0" - }, - { - "package": "array", - "version": "0.5.6.0" - }, - { - "package": "deepseq", - "version": "1.4.8.1" - }, - { - "package": "ghc-boot-th", - "version": "9.6.4" - }, - { - "package": "pretty", - "version": "1.1.3.6" - }, - { - "package": "template-haskell", - "version": "2.20.0.0" - }, - { - "package": "containers", - "version": "0.6.7" - }, - { - "package": "bytestring", - "version": "0.11.5.3" - }, - { - "package": "transformers", - "version": "0.6.1.0" - }, - { - "package": "mtl", - "version": "2.3.1" - }, - { - "package": "stm", - "version": "2.5.1.0" - }, - { - "package": "exceptions", - "version": "0.10.7" - }, - { - "package": "filepath", - "version": "1.4.200.1" - }, - { - "package": "time", - "version": "1.12.2" - }, - { - "package": "unix", - "version": "2.8.4.0" - }, - { - "package": "directory", - "version": "1.3.8.1" - }, - { - "package": "binary", - "version": "0.8.9.1" - }, - { - "package": "text", - "version": "2.0.2" - }, - { - "package": "parsec", - "version": "3.1.16.1" - }, - { - "package": "process", - "version": "1.6.17.0" - } - ], - "dependencies": [ - { - "cabal_sha256": "348778ae5f77f946e45b88c6c94b3a65c655954e5f07f6d7dfa6c99efde5248c", - "component": "exe:alex", - "flags": [], - "package": "alex", - "revision": 0, - "source": "hackage", - "src_sha256": "caed9f23b4bc1cdd6f8083b79a0bb86ba86ed81ab9a1238fe0e13ed544809fed", - "version": "3.5.0.0" - }, - { - "cabal_sha256": null, - "component": "lib:Cabal-syntax", - "flags": [], - "package": "Cabal-syntax", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": null, - "component": "lib:Cabal", - "flags": [], - "package": "Cabal", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "488cca2a179a5141da8f35a3a7e6699a0ef690f834f589d6b152c4947aa8fe2d", - "component": "exe:hsc2hs", - "flags": [ - "-in-ghc-tree" - ], - "package": "hsc2hs", - "revision": 1, - "source": "hackage", - "src_sha256": "6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76", - "version": "0.68.10" - }, - { - "cabal_sha256": "e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def", - "component": "lib:network", - "flags": [ - "-devel" - ], - "package": "network", - "revision": 1, - "source": "hackage", - "src_sha256": "b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e", - "version": "3.1.4.0" - }, - { - "cabal_sha256": "f5f2c679ecc1c1b83d2d68db6cc564e5c78d53425e69e1b9e36784820e122d37", - "component": "lib:th-compat", - "flags": [], - "package": "th-compat", - "revision": 4, - "source": "hackage", - "src_sha256": "d8f97ac14ab47b6b8a7b0fdb4ff95426322ec56badd01652ac15da4a44d4bab8", - "version": "0.1.4" - }, - { - "cabal_sha256": "6fffb57373962b5651a2db8b0af732098b3bf029a7ced76a9855615de2026588", - "component": "lib:network-uri", - "flags": [], - "package": "network-uri", - "revision": 1, - "source": "hackage", - "src_sha256": "9c188973126e893250b881f20e8811dca06c223c23402b06f7a1f2e995797228", - "version": "2.6.4.2" - }, - { - "cabal_sha256": "0e37572590743e49d7a610f472e1618a594dc861410846f64d9f2347923c4f5b", - "component": "lib:HTTP", - "flags": [ - "-conduit10", - "+network-uri", - "-warn-as-error", - "-warp-tests" - ], - "package": "HTTP", - "revision": 3, - "source": "hackage", - "src_sha256": "df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453", - "version": "4000.4.1" - }, - { - "cabal_sha256": "f3bf68acfa0df7a064a378ef2cdcfeb55e6fb96100675f4c593556dcbf3d7194", - "component": "lib:hashable", - "flags": [ - "+integer-gmp", - "-random-initial-seed" - ], - "package": "hashable", - "revision": 1, - "source": "hackage", - "src_sha256": "32efb16c2891786209b7cbe5c39df9b3a9ae51e836f1a54f646bc4602b7ab0f5", - "version": "1.4.3.0" - }, - { - "cabal_sha256": "957d5ca4496e7048e3e78f108dbdc3e391eafe60b50417486e4c28957d430b05", - "component": "lib:async", - "flags": [ - "-bench" - ], - "package": "async", - "revision": 0, - "source": "hackage", - "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", - "version": "2.2.5" - }, - { - "cabal_sha256": "a694e88f9ec9fc79f0b03f233d3fea592b68f70a34aac2ddb5bcaecb6562e2fd", - "component": "lib:base16-bytestring", - "flags": [], - "package": "base16-bytestring", - "revision": 1, - "source": "hackage", - "src_sha256": "1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784", - "version": "1.0.2.0" - }, - { - "cabal_sha256": "45305ccf8914c66d385b518721472c7b8c858f1986945377f74f85c1e0d49803", - "component": "lib:base64-bytestring", - "flags": [], - "package": "base64-bytestring", - "revision": 1, - "source": "hackage", - "src_sha256": "fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9", - "version": "1.2.1.0" - }, - { - "cabal_sha256": "bac0ae8d46a04e410666b0c8081cff63f060f29157983b569ca86ddb6e6e0dc6", - "component": "lib:splitmix", - "flags": [ - "-optimised-mixer" - ], - "package": "splitmix", - "revision": 0, - "source": "hackage", - "src_sha256": "9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002", - "version": "0.1.0.5" - }, - { - "cabal_sha256": "32397de181e20ccaacf806ec70de9308cf044f089a2be37c936f3f8967bde867", - "component": "lib:random", - "flags": [], - "package": "random", - "revision": 0, - "source": "hackage", - "src_sha256": "790f4dc2d2327c453ff6aac7bf15399fd123d55e927935f68f84b5df42d9a4b4", - "version": "1.2.1.2" - }, - { - "cabal_sha256": "4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee", - "component": "lib:edit-distance", - "flags": [], - "package": "edit-distance", - "revision": 1, - "source": "hackage", - "src_sha256": "3e8885ee2f56ad4da940f043ae8f981ee2fe336b5e8e4ba3f7436cff4f526c4a", - "version": "0.2.2.1" - }, - { - "cabal_sha256": null, - "component": "lib:cabal-install-solver", - "flags": [ - "-debug-expensive-assertions", - "-debug-tracetree" - ], - "package": "cabal-install-solver", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "03db065161987f614a3a2bbcd16264f78e47efe231fb5bd161be2043eaf20488", - "component": "lib:cryptohash-sha256", - "flags": [ - "-exe", - "+use-cbits" - ], - "package": "cryptohash-sha256", - "revision": 3, - "source": "hackage", - "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", - "version": "0.11.102.1" - }, - { - "cabal_sha256": "ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42", - "component": "lib:echo", - "flags": [ - "-example" - ], - "package": "echo", - "revision": 0, - "source": "hackage", - "src_sha256": "c9fe1bf2904825a65b667251ec644f197b71dc5c209d2d254be5de3d496b0e43", - "version": "0.1.4" - }, - { - "cabal_sha256": "48383789821af5cc624498f3ee1d0939a070cda9468c0bfe63c951736be81c75", - "component": "lib:ed25519", - "flags": [ - "+no-donna", - "+test-doctests", - "+test-hlint", - "+test-properties" - ], - "package": "ed25519", - "revision": 8, - "source": "hackage", - "src_sha256": "d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d", - "version": "0.0.5.0" - }, - { - "cabal_sha256": "17786545dce60c4d5783ba6125c0a6499a1abddd3d7417b15500ccd767c35f07", - "component": "lib:lukko", - "flags": [ - "+ofd-locking" - ], - "package": "lukko", - "revision": 5, - "source": "hackage", - "src_sha256": "a80efb60cfa3dae18682c01980d76d5f7e413e191cd186992e1bf7388d48ab1f", - "version": "0.1.1.3" - }, - { - "cabal_sha256": "32fa47f8345a2c0662fb602fc42e4b674e41ec48079b68bdecb4b6f68032c24e", - "component": "lib:os-string", - "flags": [], - "package": "os-string", - "revision": 0, - "source": "hackage", - "src_sha256": "0953126e962966719753c98d71f596f5fea07e100bce191b7453735a1ff2caa1", - "version": "2.0.2" - }, - { - "cabal_sha256": "3ed979ee1bb00b4e488537988ee6bb3c2c67e66678804125e2df08a527822b4e", - "component": "lib:tar-internal", - "flags": [], - "package": "tar", - "revision": 0, - "source": "hackage", - "src_sha256": "edfef2e126440839d34f23fff7f3616d0bfffa0345ea13d4d0fee9a669d305da", - "version": "0.6.1.0" - }, - { - "cabal_sha256": "3ed979ee1bb00b4e488537988ee6bb3c2c67e66678804125e2df08a527822b4e", - "component": "lib:tar", - "flags": [], - "package": "tar", - "revision": 0, - "source": "hackage", - "src_sha256": "edfef2e126440839d34f23fff7f3616d0bfffa0345ea13d4d0fee9a669d305da", - "version": "0.6.1.0" - }, - { - "cabal_sha256": "13aee0a157b2362cf079a4fa0156927403aef2a9540694c9d170ac8339d17bda", - "component": "lib:zlib", - "flags": [ - "-bundled-c-zlib", - "+non-blocking-ffi", - "-pkg-config" - ], - "package": "zlib", - "revision": 0, - "source": "hackage", - "src_sha256": "7e43c205e1e1ff5a4b033086ec8cce82ab658879e977c8ba02a6701946ff7a47", - "version": "0.7.0.0" - }, - { - "cabal_sha256": "9695169282e5b1172b9595a99a955b013a2713ce53ccfcdf97d9be088fd67258", - "component": "lib:hackage-security", - "flags": [ - "+cabal-syntax", - "+lukko", - "+use-network-uri" - ], - "package": "hackage-security", - "revision": 1, - "source": "hackage", - "src_sha256": "8b925b3bb04b42e93ae60b4db1df65e263feb5642c7b0e76134e691887ed4c82", - "version": "0.6.2.4" - }, - { - "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", - "component": "lib:open-browser", - "flags": [], - "package": "open-browser", - "revision": 0, - "source": "hackage", - "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", - "version": "0.2.1.0" - }, - { - "cabal_sha256": "0322b2fcd1358f3355e0c8608efa60d27b14d1c9d476451dbcb9181363bd8b27", - "component": "lib:regex-base", - "flags": [], - "package": "regex-base", - "revision": 4, - "source": "hackage", - "src_sha256": "7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1", - "version": "0.94.0.2" - }, - { - "cabal_sha256": "816d6acc560cb86672f347a7bef8129578dde26ed760f9e79b4976ed9bd7b9fd", - "component": "lib:regex-posix", - "flags": [ - "-_regex-posix-clib" - ], - "package": "regex-posix", - "revision": 3, - "source": "hackage", - "src_sha256": "c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c", - "version": "0.96.0.1" - }, - { - "cabal_sha256": "4868265ab5760d2fdeb96625b138c8df25d41b9ee2651fa299ed019a69403045", - "component": "lib:resolv", - "flags": [], - "package": "resolv", - "revision": 3, - "source": "hackage", - "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b", - "version": "0.2.0.2" - }, - { - "cabal_sha256": "8bb7261bd54bd58acfcb154be6a161fb6d0d31a1852aadc8e927d2ad2d7651d1", - "component": "lib:safe-exceptions", - "flags": [], - "package": "safe-exceptions", - "revision": 1, - "source": "hackage", - "src_sha256": "3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6", - "version": "0.1.7.4" - }, - { - "cabal_sha256": "8ed6242cab5b0e1a8c654424275ac178035d108dfe4d651053947790fcf83017", - "component": "lib:semaphore-compat", - "flags": [], - "package": "semaphore-compat", - "revision": 1, - "source": "hackage", - "src_sha256": "1c6e6fab021c2ccee5d86112fb1c0bd016d15e0cf70c489dae5fb5ec156ed9e2", - "version": "1.0.0" - }, - { - "cabal_sha256": null, - "component": "lib:cabal-install", - "flags": [ - "+lukko", - "+native-dns" - ], - "package": "cabal-install", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": null, - "component": "exe:cabal", - "flags": [ - "+lukko", - "+native-dns" - ], - "package": "cabal-install", - "revision": null, - "source": "local", - "src_sha256": null, - "version": "3.11.0.0" - }, - { - "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", - "component": "exe:example", - "flags": [], - "package": "open-browser", - "revision": 0, - "source": "hackage", - "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", - "version": "0.2.1.0" - } - ] + "builtin": [ + { + "package": "rts", + "version": "1.0.2" + }, + { + "package": "ghc-prim", + "version": "0.10.0" + }, + { + "package": "ghc-bignum", + "version": "1.3" + }, + { + "package": "base", + "version": "4.18.2.0" + }, + { + "package": "array", + "version": "0.5.6.0" + }, + { + "package": "deepseq", + "version": "1.4.8.1" + }, + { + "package": "ghc-boot-th", + "version": "9.6.4" + }, + { + "package": "pretty", + "version": "1.1.3.6" + }, + { + "package": "template-haskell", + "version": "2.20.0.0" + }, + { + "package": "containers", + "version": "0.6.7" + }, + { + "package": "bytestring", + "version": "0.11.5.3" + }, + { + "package": "transformers", + "version": "0.6.1.0" + }, + { + "package": "mtl", + "version": "2.3.1" + }, + { + "package": "stm", + "version": "2.5.1.0" + }, + { + "package": "exceptions", + "version": "0.10.7" + }, + { + "package": "filepath", + "version": "1.4.200.1" + }, + { + "package": "time", + "version": "1.12.2" + }, + { + "package": "unix", + "version": "2.8.4.0" + }, + { + "package": "directory", + "version": "1.3.8.1" + }, + { + "package": "binary", + "version": "0.8.9.1" + }, + { + "package": "text", + "version": "2.0.2" + }, + { + "package": "parsec", + "version": "3.1.16.1" + }, + { + "package": "process", + "version": "1.6.17.0" + } + ], + "dependencies": [ + { + "cabal_sha256": "de553eefe0b6548a560e9d8100486310548470a403c1fa21108dd03713da5fc7", + "component": "exe:alex", + "flags": [], + "package": "alex", + "revision": 0, + "source": "hackage", + "src_sha256": "c92efe86f8eb959ee03be6c04ee57ebc7e4abc75a6c4b26551215d7443e92a07", + "version": "3.5.1.0" + }, + { + "cabal_sha256": null, + "component": "lib:Cabal-syntax", + "flags": [], + "package": "Cabal-syntax", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.12.0.0" + }, + { + "cabal_sha256": null, + "component": "lib:Cabal", + "flags": [], + "package": "Cabal", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.12.0.0" + }, + { + "cabal_sha256": "60e78b6c60dc32a77ce6c37ed5ca4e838fc5f76f02836ef64d93cd21cc002325", + "component": "exe:hsc2hs", + "flags": [ + "-in-ghc-tree" + ], + "package": "hsc2hs", + "revision": 2, + "source": "hackage", + "src_sha256": "6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76", + "version": "0.68.10" + }, + { + "cabal_sha256": "e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def", + "component": "lib:network", + "flags": [ + "-devel" + ], + "package": "network", + "revision": 1, + "source": "hackage", + "src_sha256": "b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e", + "version": "3.1.4.0" + }, + { + "cabal_sha256": "177148ba8407fbaaef0231b8bf8af092eddf3b2b1a682dc88df8e86b87828e96", + "component": "lib:th-compat", + "flags": [], + "package": "th-compat", + "revision": 0, + "source": "hackage", + "src_sha256": "81f55fafc7afad7763c09cb8b7b4165ca3765edcf70ffa42c7393043a1382a1e", + "version": "0.1.5" + }, + { + "cabal_sha256": "6fffb57373962b5651a2db8b0af732098b3bf029a7ced76a9855615de2026588", + "component": "lib:network-uri", + "flags": [], + "package": "network-uri", + "revision": 1, + "source": "hackage", + "src_sha256": "9c188973126e893250b881f20e8811dca06c223c23402b06f7a1f2e995797228", + "version": "2.6.4.2" + }, + { + "cabal_sha256": "0e37572590743e49d7a610f472e1618a594dc861410846f64d9f2347923c4f5b", + "component": "lib:HTTP", + "flags": [ + "-conduit10", + "+network-uri", + "-warn-as-error", + "-warp-tests" + ], + "package": "HTTP", + "revision": 3, + "source": "hackage", + "src_sha256": "df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453", + "version": "4000.4.1" + }, + { + "cabal_sha256": "f3bf68acfa0df7a064a378ef2cdcfeb55e6fb96100675f4c593556dcbf3d7194", + "component": "lib:hashable", + "flags": [ + "+integer-gmp", + "-random-initial-seed" + ], + "package": "hashable", + "revision": 1, + "source": "hackage", + "src_sha256": "32efb16c2891786209b7cbe5c39df9b3a9ae51e836f1a54f646bc4602b7ab0f5", + "version": "1.4.3.0" + }, + { + "cabal_sha256": "957d5ca4496e7048e3e78f108dbdc3e391eafe60b50417486e4c28957d430b05", + "component": "lib:async", + "flags": [ + "-bench" + ], + "package": "async", + "revision": 0, + "source": "hackage", + "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", + "version": "2.2.5" + }, + { + "cabal_sha256": "a694e88f9ec9fc79f0b03f233d3fea592b68f70a34aac2ddb5bcaecb6562e2fd", + "component": "lib:base16-bytestring", + "flags": [], + "package": "base16-bytestring", + "revision": 1, + "source": "hackage", + "src_sha256": "1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784", + "version": "1.0.2.0" + }, + { + "cabal_sha256": "45305ccf8914c66d385b518721472c7b8c858f1986945377f74f85c1e0d49803", + "component": "lib:base64-bytestring", + "flags": [], + "package": "base64-bytestring", + "revision": 1, + "source": "hackage", + "src_sha256": "fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9", + "version": "1.2.1.0" + }, + { + "cabal_sha256": "bac0ae8d46a04e410666b0c8081cff63f060f29157983b569ca86ddb6e6e0dc6", + "component": "lib:splitmix", + "flags": [ + "-optimised-mixer" + ], + "package": "splitmix", + "revision": 0, + "source": "hackage", + "src_sha256": "9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002", + "version": "0.1.0.5" + }, + { + "cabal_sha256": "32397de181e20ccaacf806ec70de9308cf044f089a2be37c936f3f8967bde867", + "component": "lib:random", + "flags": [], + "package": "random", + "revision": 0, + "source": "hackage", + "src_sha256": "790f4dc2d2327c453ff6aac7bf15399fd123d55e927935f68f84b5df42d9a4b4", + "version": "1.2.1.2" + }, + { + "cabal_sha256": "4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee", + "component": "lib:edit-distance", + "flags": [], + "package": "edit-distance", + "revision": 1, + "source": "hackage", + "src_sha256": "3e8885ee2f56ad4da940f043ae8f981ee2fe336b5e8e4ba3f7436cff4f526c4a", + "version": "0.2.2.1" + }, + { + "cabal_sha256": null, + "component": "lib:cabal-install-solver", + "flags": [ + "-debug-expensive-assertions", + "-debug-tracetree" + ], + "package": "cabal-install-solver", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.11.0.0" + }, + { + "cabal_sha256": "03db065161987f614a3a2bbcd16264f78e47efe231fb5bd161be2043eaf20488", + "component": "lib:cryptohash-sha256", + "flags": [ + "-exe", + "+use-cbits" + ], + "package": "cryptohash-sha256", + "revision": 3, + "source": "hackage", + "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", + "version": "0.11.102.1" + }, + { + "cabal_sha256": "ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42", + "component": "lib:echo", + "flags": [ + "-example" + ], + "package": "echo", + "revision": 0, + "source": "hackage", + "src_sha256": "c9fe1bf2904825a65b667251ec644f197b71dc5c209d2d254be5de3d496b0e43", + "version": "0.1.4" + }, + { + "cabal_sha256": "48383789821af5cc624498f3ee1d0939a070cda9468c0bfe63c951736be81c75", + "component": "lib:ed25519", + "flags": [ + "+no-donna", + "+test-doctests", + "+test-hlint", + "+test-properties" + ], + "package": "ed25519", + "revision": 8, + "source": "hackage", + "src_sha256": "d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d", + "version": "0.0.5.0" + }, + { + "cabal_sha256": "17786545dce60c4d5783ba6125c0a6499a1abddd3d7417b15500ccd767c35f07", + "component": "lib:lukko", + "flags": [ + "+ofd-locking" + ], + "package": "lukko", + "revision": 5, + "source": "hackage", + "src_sha256": "a80efb60cfa3dae18682c01980d76d5f7e413e191cd186992e1bf7388d48ab1f", + "version": "0.1.1.3" + }, + { + "cabal_sha256": "32fa47f8345a2c0662fb602fc42e4b674e41ec48079b68bdecb4b6f68032c24e", + "component": "lib:os-string", + "flags": [], + "package": "os-string", + "revision": 0, + "source": "hackage", + "src_sha256": "0953126e962966719753c98d71f596f5fea07e100bce191b7453735a1ff2caa1", + "version": "2.0.2" + }, + { + "cabal_sha256": "619828cae098a7b6deeb0316e12f55011101d88f756787ed024ceedb81cf1eba", + "component": "lib:tar-internal", + "flags": [], + "package": "tar", + "revision": 0, + "source": "hackage", + "src_sha256": "08c61e82b59ed6fe7e85e9fe7cceaaf853ba54511d1ec57efa511ddc55ef1998", + "version": "0.6.2.0" + }, + { + "cabal_sha256": "619828cae098a7b6deeb0316e12f55011101d88f756787ed024ceedb81cf1eba", + "component": "lib:tar", + "flags": [], + "package": "tar", + "revision": 0, + "source": "hackage", + "src_sha256": "08c61e82b59ed6fe7e85e9fe7cceaaf853ba54511d1ec57efa511ddc55ef1998", + "version": "0.6.2.0" + }, + { + "cabal_sha256": "64a1925c93e9a26cd4c40c470736950c4b5ea7bae68418cb996c5c7df4873cba", + "component": "lib:zlib", + "flags": [ + "-bundled-c-zlib", + "+non-blocking-ffi", + "+pkg-config" + ], + "package": "zlib", + "revision": 1, + "source": "hackage", + "src_sha256": "7e43c205e1e1ff5a4b033086ec8cce82ab658879e977c8ba02a6701946ff7a47", + "version": "0.7.0.0" + }, + { + "cabal_sha256": "6c32c6826bc3fea3f08013a3fcf58fad28f7d42dca38a483872c1e0b6c7c5da4", + "component": "lib:hackage-security", + "flags": [ + "+cabal-syntax", + "+lukko", + "+use-network-uri" + ], + "package": "hackage-security", + "revision": 0, + "source": "hackage", + "src_sha256": "85c809236434de33e49eddd6960f2d247f9de9a4cb8aef56f8b40d1ee35fe2ab", + "version": "0.6.2.5" + }, + { + "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", + "component": "lib:open-browser", + "flags": [], + "package": "open-browser", + "revision": 0, + "source": "hackage", + "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", + "version": "0.2.1.0" + }, + { + "cabal_sha256": "0322b2fcd1358f3355e0c8608efa60d27b14d1c9d476451dbcb9181363bd8b27", + "component": "lib:regex-base", + "flags": [], + "package": "regex-base", + "revision": 4, + "source": "hackage", + "src_sha256": "7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1", + "version": "0.94.0.2" + }, + { + "cabal_sha256": "816d6acc560cb86672f347a7bef8129578dde26ed760f9e79b4976ed9bd7b9fd", + "component": "lib:regex-posix", + "flags": [ + "-_regex-posix-clib" + ], + "package": "regex-posix", + "revision": 3, + "source": "hackage", + "src_sha256": "c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c", + "version": "0.96.0.1" + }, + { + "cabal_sha256": "4868265ab5760d2fdeb96625b138c8df25d41b9ee2651fa299ed019a69403045", + "component": "lib:resolv", + "flags": [], + "package": "resolv", + "revision": 3, + "source": "hackage", + "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b", + "version": "0.2.0.2" + }, + { + "cabal_sha256": "8bb7261bd54bd58acfcb154be6a161fb6d0d31a1852aadc8e927d2ad2d7651d1", + "component": "lib:safe-exceptions", + "flags": [], + "package": "safe-exceptions", + "revision": 1, + "source": "hackage", + "src_sha256": "3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6", + "version": "0.1.7.4" + }, + { + "cabal_sha256": "8ed6242cab5b0e1a8c654424275ac178035d108dfe4d651053947790fcf83017", + "component": "lib:semaphore-compat", + "flags": [], + "package": "semaphore-compat", + "revision": 1, + "source": "hackage", + "src_sha256": "1c6e6fab021c2ccee5d86112fb1c0bd016d15e0cf70c489dae5fb5ec156ed9e2", + "version": "1.0.0" + }, + { + "cabal_sha256": null, + "component": "lib:cabal-install", + "flags": [ + "+lukko", + "+native-dns" + ], + "package": "cabal-install", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.11.0.0" + }, + { + "cabal_sha256": null, + "component": "exe:cabal", + "flags": [ + "+lukko", + "+native-dns" + ], + "package": "cabal-install", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.11.0.0" + }, + { + "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", + "component": "exe:example", + "flags": [], + "package": "open-browser", + "revision": 0, + "source": "hackage", + "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", + "version": "0.2.1.0" + } + ] } diff --git a/bootstrap/linux-9.8.2.json b/bootstrap/linux-9.8.2.json new file mode 100644 index 00000000000..de3c86efd58 --- /dev/null +++ b/bootstrap/linux-9.8.2.json @@ -0,0 +1,479 @@ +{ + "builtin": [ + { + "package": "rts", + "version": "1.0.2" + }, + { + "package": "ghc-prim", + "version": "0.11.0" + }, + { + "package": "ghc-bignum", + "version": "1.3" + }, + { + "package": "base", + "version": "4.19.1.0" + }, + { + "package": "array", + "version": "0.5.6.0" + }, + { + "package": "deepseq", + "version": "1.5.0.0" + }, + { + "package": "ghc-boot-th", + "version": "9.8.2" + }, + { + "package": "pretty", + "version": "1.1.3.6" + }, + { + "package": "template-haskell", + "version": "2.21.0.0" + }, + { + "package": "containers", + "version": "0.6.8" + }, + { + "package": "bytestring", + "version": "0.12.1.0" + }, + { + "package": "transformers", + "version": "0.6.1.0" + }, + { + "package": "mtl", + "version": "2.3.1" + }, + { + "package": "stm", + "version": "2.5.2.1" + }, + { + "package": "exceptions", + "version": "0.10.7" + }, + { + "package": "filepath", + "version": "1.4.200.1" + }, + { + "package": "time", + "version": "1.12.2" + }, + { + "package": "unix", + "version": "2.8.4.0" + }, + { + "package": "directory", + "version": "1.3.8.1" + }, + { + "package": "binary", + "version": "0.8.9.1" + }, + { + "package": "text", + "version": "2.1.1" + }, + { + "package": "parsec", + "version": "3.1.17.0" + }, + { + "package": "process", + "version": "1.6.18.0" + }, + { + "package": "semaphore-compat", + "version": "1.0.0" + } + ], + "dependencies": [ + { + "cabal_sha256": "de553eefe0b6548a560e9d8100486310548470a403c1fa21108dd03713da5fc7", + "component": "exe:alex", + "flags": [], + "package": "alex", + "revision": 0, + "source": "hackage", + "src_sha256": "c92efe86f8eb959ee03be6c04ee57ebc7e4abc75a6c4b26551215d7443e92a07", + "version": "3.5.1.0" + }, + { + "cabal_sha256": null, + "component": "lib:Cabal-syntax", + "flags": [], + "package": "Cabal-syntax", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.12.0.0" + }, + { + "cabal_sha256": null, + "component": "lib:Cabal", + "flags": [], + "package": "Cabal", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.12.0.0" + }, + { + "cabal_sha256": "60e78b6c60dc32a77ce6c37ed5ca4e838fc5f76f02836ef64d93cd21cc002325", + "component": "exe:hsc2hs", + "flags": [ + "-in-ghc-tree" + ], + "package": "hsc2hs", + "revision": 2, + "source": "hackage", + "src_sha256": "6f4e34d788fe2ca7091ee0a10307ee8a7c060a1ba890f2bffad16a7d4d5cef76", + "version": "0.68.10" + }, + { + "cabal_sha256": "e152cdb03243afb52bbc740cfbe96905ca298a6f6342f0c47b3f2e227ff19def", + "component": "lib:network", + "flags": [ + "-devel" + ], + "package": "network", + "revision": 1, + "source": "hackage", + "src_sha256": "b452a2afac95d9207357eb3820c719c7c7d27871ef4b6ed7bfcd03a036b9158e", + "version": "3.1.4.0" + }, + { + "cabal_sha256": "177148ba8407fbaaef0231b8bf8af092eddf3b2b1a682dc88df8e86b87828e96", + "component": "lib:th-compat", + "flags": [], + "package": "th-compat", + "revision": 0, + "source": "hackage", + "src_sha256": "81f55fafc7afad7763c09cb8b7b4165ca3765edcf70ffa42c7393043a1382a1e", + "version": "0.1.5" + }, + { + "cabal_sha256": "6fffb57373962b5651a2db8b0af732098b3bf029a7ced76a9855615de2026588", + "component": "lib:network-uri", + "flags": [], + "package": "network-uri", + "revision": 1, + "source": "hackage", + "src_sha256": "9c188973126e893250b881f20e8811dca06c223c23402b06f7a1f2e995797228", + "version": "2.6.4.2" + }, + { + "cabal_sha256": "0e37572590743e49d7a610f472e1618a594dc861410846f64d9f2347923c4f5b", + "component": "lib:HTTP", + "flags": [ + "-conduit10", + "+network-uri", + "-warn-as-error", + "-warp-tests" + ], + "package": "HTTP", + "revision": 3, + "source": "hackage", + "src_sha256": "df31d8efec775124dab856d7177ddcba31be9f9e0836ebdab03d94392f2dd453", + "version": "4000.4.1" + }, + { + "cabal_sha256": "f3bf68acfa0df7a064a378ef2cdcfeb55e6fb96100675f4c593556dcbf3d7194", + "component": "lib:hashable", + "flags": [ + "+integer-gmp", + "-random-initial-seed" + ], + "package": "hashable", + "revision": 1, + "source": "hackage", + "src_sha256": "32efb16c2891786209b7cbe5c39df9b3a9ae51e836f1a54f646bc4602b7ab0f5", + "version": "1.4.3.0" + }, + { + "cabal_sha256": "957d5ca4496e7048e3e78f108dbdc3e391eafe60b50417486e4c28957d430b05", + "component": "lib:async", + "flags": [ + "-bench" + ], + "package": "async", + "revision": 0, + "source": "hackage", + "src_sha256": "1818473ebab9212afad2ed76297aefde5fae8b5d4404daf36939aece6a8f16f7", + "version": "2.2.5" + }, + { + "cabal_sha256": "a694e88f9ec9fc79f0b03f233d3fea592b68f70a34aac2ddb5bcaecb6562e2fd", + "component": "lib:base16-bytestring", + "flags": [], + "package": "base16-bytestring", + "revision": 1, + "source": "hackage", + "src_sha256": "1d5a91143ef0e22157536093ec8e59d226a68220ec89378d5dcaeea86472c784", + "version": "1.0.2.0" + }, + { + "cabal_sha256": "45305ccf8914c66d385b518721472c7b8c858f1986945377f74f85c1e0d49803", + "component": "lib:base64-bytestring", + "flags": [], + "package": "base64-bytestring", + "revision": 1, + "source": "hackage", + "src_sha256": "fbf8ed30edde271eb605352021431d8f1b055f95a56af31fe2eacf6bdfdc49c9", + "version": "1.2.1.0" + }, + { + "cabal_sha256": "bac0ae8d46a04e410666b0c8081cff63f060f29157983b569ca86ddb6e6e0dc6", + "component": "lib:splitmix", + "flags": [ + "-optimised-mixer" + ], + "package": "splitmix", + "revision": 0, + "source": "hackage", + "src_sha256": "9df07a9611ef45f1b1258a0b412f4d02c920248f69d2e2ce8ccda328f7e13002", + "version": "0.1.0.5" + }, + { + "cabal_sha256": "32397de181e20ccaacf806ec70de9308cf044f089a2be37c936f3f8967bde867", + "component": "lib:random", + "flags": [], + "package": "random", + "revision": 0, + "source": "hackage", + "src_sha256": "790f4dc2d2327c453ff6aac7bf15399fd123d55e927935f68f84b5df42d9a4b4", + "version": "1.2.1.2" + }, + { + "cabal_sha256": "4d33a49cd383d50af090f1b888642d10116e43809f9da6023d9fc6f67d2656ee", + "component": "lib:edit-distance", + "flags": [], + "package": "edit-distance", + "revision": 1, + "source": "hackage", + "src_sha256": "3e8885ee2f56ad4da940f043ae8f981ee2fe336b5e8e4ba3f7436cff4f526c4a", + "version": "0.2.2.1" + }, + { + "cabal_sha256": null, + "component": "lib:cabal-install-solver", + "flags": [ + "-debug-expensive-assertions", + "-debug-tracetree" + ], + "package": "cabal-install-solver", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.11.0.0" + }, + { + "cabal_sha256": "03db065161987f614a3a2bbcd16264f78e47efe231fb5bd161be2043eaf20488", + "component": "lib:cryptohash-sha256", + "flags": [ + "-exe", + "+use-cbits" + ], + "package": "cryptohash-sha256", + "revision": 3, + "source": "hackage", + "src_sha256": "73a7dc7163871a80837495039a099967b11f5c4fe70a118277842f7a713c6bf6", + "version": "0.11.102.1" + }, + { + "cabal_sha256": "ccce771562c49a2b29a52046ca68c62179e97e8fbeacdae32ca84a85445e8f42", + "component": "lib:echo", + "flags": [ + "-example" + ], + "package": "echo", + "revision": 0, + "source": "hackage", + "src_sha256": "c9fe1bf2904825a65b667251ec644f197b71dc5c209d2d254be5de3d496b0e43", + "version": "0.1.4" + }, + { + "cabal_sha256": "48383789821af5cc624498f3ee1d0939a070cda9468c0bfe63c951736be81c75", + "component": "lib:ed25519", + "flags": [ + "+no-donna", + "+test-doctests", + "+test-hlint", + "+test-properties" + ], + "package": "ed25519", + "revision": 8, + "source": "hackage", + "src_sha256": "d8a5958ebfa9309790efade64275dc5c441b568645c45ceed1b0c6ff36d6156d", + "version": "0.0.5.0" + }, + { + "cabal_sha256": "17786545dce60c4d5783ba6125c0a6499a1abddd3d7417b15500ccd767c35f07", + "component": "lib:lukko", + "flags": [ + "+ofd-locking" + ], + "package": "lukko", + "revision": 5, + "source": "hackage", + "src_sha256": "a80efb60cfa3dae18682c01980d76d5f7e413e191cd186992e1bf7388d48ab1f", + "version": "0.1.1.3" + }, + { + "cabal_sha256": "32fa47f8345a2c0662fb602fc42e4b674e41ec48079b68bdecb4b6f68032c24e", + "component": "lib:os-string", + "flags": [], + "package": "os-string", + "revision": 0, + "source": "hackage", + "src_sha256": "0953126e962966719753c98d71f596f5fea07e100bce191b7453735a1ff2caa1", + "version": "2.0.2" + }, + { + "cabal_sha256": "619828cae098a7b6deeb0316e12f55011101d88f756787ed024ceedb81cf1eba", + "component": "lib:tar-internal", + "flags": [], + "package": "tar", + "revision": 0, + "source": "hackage", + "src_sha256": "08c61e82b59ed6fe7e85e9fe7cceaaf853ba54511d1ec57efa511ddc55ef1998", + "version": "0.6.2.0" + }, + { + "cabal_sha256": "619828cae098a7b6deeb0316e12f55011101d88f756787ed024ceedb81cf1eba", + "component": "lib:tar", + "flags": [], + "package": "tar", + "revision": 0, + "source": "hackage", + "src_sha256": "08c61e82b59ed6fe7e85e9fe7cceaaf853ba54511d1ec57efa511ddc55ef1998", + "version": "0.6.2.0" + }, + { + "cabal_sha256": "64a1925c93e9a26cd4c40c470736950c4b5ea7bae68418cb996c5c7df4873cba", + "component": "lib:zlib", + "flags": [ + "-bundled-c-zlib", + "+non-blocking-ffi", + "+pkg-config" + ], + "package": "zlib", + "revision": 1, + "source": "hackage", + "src_sha256": "7e43c205e1e1ff5a4b033086ec8cce82ab658879e977c8ba02a6701946ff7a47", + "version": "0.7.0.0" + }, + { + "cabal_sha256": "6c32c6826bc3fea3f08013a3fcf58fad28f7d42dca38a483872c1e0b6c7c5da4", + "component": "lib:hackage-security", + "flags": [ + "+cabal-syntax", + "+lukko", + "+use-network-uri" + ], + "package": "hackage-security", + "revision": 0, + "source": "hackage", + "src_sha256": "85c809236434de33e49eddd6960f2d247f9de9a4cb8aef56f8b40d1ee35fe2ab", + "version": "0.6.2.5" + }, + { + "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", + "component": "lib:open-browser", + "flags": [], + "package": "open-browser", + "revision": 0, + "source": "hackage", + "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", + "version": "0.2.1.0" + }, + { + "cabal_sha256": "0322b2fcd1358f3355e0c8608efa60d27b14d1c9d476451dbcb9181363bd8b27", + "component": "lib:regex-base", + "flags": [], + "package": "regex-base", + "revision": 4, + "source": "hackage", + "src_sha256": "7b99408f580f5bb67a1c413e0bc735886608251331ad36322020f2169aea2ef1", + "version": "0.94.0.2" + }, + { + "cabal_sha256": "816d6acc560cb86672f347a7bef8129578dde26ed760f9e79b4976ed9bd7b9fd", + "component": "lib:regex-posix", + "flags": [ + "-_regex-posix-clib" + ], + "package": "regex-posix", + "revision": 3, + "source": "hackage", + "src_sha256": "c7827c391919227711e1cff0a762b1678fd8739f9c902fc183041ff34f59259c", + "version": "0.96.0.1" + }, + { + "cabal_sha256": "4868265ab5760d2fdeb96625b138c8df25d41b9ee2651fa299ed019a69403045", + "component": "lib:resolv", + "flags": [], + "package": "resolv", + "revision": 3, + "source": "hackage", + "src_sha256": "880d283df9132a7375fa28670f71e86480a4f49972256dc2a204c648274ae74b", + "version": "0.2.0.2" + }, + { + "cabal_sha256": "8bb7261bd54bd58acfcb154be6a161fb6d0d31a1852aadc8e927d2ad2d7651d1", + "component": "lib:safe-exceptions", + "flags": [], + "package": "safe-exceptions", + "revision": 1, + "source": "hackage", + "src_sha256": "3c51d8d50c9b60ff8bf94f942fd92e3bea9e62c5afa778dfc9f707b79da41ef6", + "version": "0.1.7.4" + }, + { + "cabal_sha256": null, + "component": "lib:cabal-install", + "flags": [ + "+lukko", + "+native-dns" + ], + "package": "cabal-install", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.11.0.0" + }, + { + "cabal_sha256": null, + "component": "exe:cabal", + "flags": [ + "+lukko", + "+native-dns" + ], + "package": "cabal-install", + "revision": null, + "source": "local", + "src_sha256": null, + "version": "3.11.0.0" + }, + { + "cabal_sha256": "e4be4a206f5ab6ddb5ae4fbb39101529196e20af5670c5d33326fea6eff886fd", + "component": "exe:example", + "flags": [], + "package": "open-browser", + "revision": 0, + "source": "hackage", + "src_sha256": "0bed2e63800f738e78a4803ed22902accb50ac02068b96c17ce83a267244ca66", + "version": "0.2.1.0" + } + ] +} diff --git a/bootstrap/src/Main.hs b/bootstrap/src/Main.hs index 8f06acba2ce..04e3bd59dd1 100644 --- a/bootstrap/src/Main.hs +++ b/bootstrap/src/Main.hs @@ -113,7 +113,7 @@ main2 meta plan = do case P.uPkgSrc unit of Just (P.RepoTarballPackage (P.RepoSecure _uri)) -> return Hackage - Just (P.LocalUnpackedPackage _path) -> + Just (P.LocalUnpackedPackage _path) -> return Local pkgsrc -> die $ "package source not supported: " ++ show pkgsrc diff --git a/cabal-dev-scripts/cabal-dev-scripts.cabal b/cabal-dev-scripts/cabal-dev-scripts.cabal index 900908acbd2..399888dfb8d 100644 --- a/cabal-dev-scripts/cabal-dev-scripts.cabal +++ b/cabal-dev-scripts/cabal-dev-scripts.cabal @@ -18,7 +18,7 @@ executable gen-spdx ghc-options: -Wall build-depends: , aeson ^>=1.4.1.0 || ^>=1.5.2.0 || ^>=2.2.1.0 - , base >=4.10 && <4.20 + , base >=4.11 && <4.20 , bytestring , containers , Diff ^>=0.4 @@ -35,7 +35,7 @@ executable gen-spdx-exc ghc-options: -Wall build-depends: , aeson ^>=1.4.1.0 || ^>=1.5.2.0 || ^>=2.2.1.0 - , base >=4.10 && <4.20 + , base >=4.11 && <4.20 , bytestring , containers , Diff ^>=0.4 diff --git a/cabal-dev-scripts/src/GenSPDX.hs b/cabal-dev-scripts/src/GenSPDX.hs index 2de9229aa64..adb3276a1bd 100644 --- a/cabal-dev-scripts/src/GenSPDX.hs +++ b/cabal-dev-scripts/src/GenSPDX.hs @@ -35,6 +35,7 @@ main = generate =<< O.execParser opts where <*> licenses "3.9" <*> licenses "3.10" <*> licenses "3.16" + <*> licenses "3.23" template = O.strArgument $ mconcat [ O.metavar "SPDX.LicenseId.template.hs" diff --git a/cabal-dev-scripts/src/GenSPDXExc.hs b/cabal-dev-scripts/src/GenSPDXExc.hs index 4e770f4ccbc..c85438a828b 100644 --- a/cabal-dev-scripts/src/GenSPDXExc.hs +++ b/cabal-dev-scripts/src/GenSPDXExc.hs @@ -34,6 +34,7 @@ main = generate =<< O.execParser opts where <*> licenses "3.9" <*> licenses "3.10" <*> licenses "3.16" + <*> licenses "3.23" template = O.strArgument $ mconcat [ O.metavar "SPDX.LicenseExceptionId.template.hs" diff --git a/cabal-dev-scripts/src/GenUtils.hs b/cabal-dev-scripts/src/GenUtils.hs index 41834ef517a..7d7b39c2add 100644 --- a/cabal-dev-scripts/src/GenUtils.hs +++ b/cabal-dev-scripts/src/GenUtils.hs @@ -32,12 +32,14 @@ data SPDXLicenseListVersion | SPDXLicenseListVersion_3_9 | SPDXLicenseListVersion_3_10 | SPDXLicenseListVersion_3_16 + | SPDXLicenseListVersion_3_23 deriving (Eq, Ord, Show, Enum, Bounded) allVers :: Set.Set SPDXLicenseListVersion allVers = Set.fromList [minBound .. maxBound] prettyVer :: SPDXLicenseListVersion -> Text +prettyVer SPDXLicenseListVersion_3_23 = "SPDX License List 3.23" prettyVer SPDXLicenseListVersion_3_16 = "SPDX License List 3.16" prettyVer SPDXLicenseListVersion_3_10 = "SPDX License List 3.10" prettyVer SPDXLicenseListVersion_3_9 = "SPDX License List 3.9" @@ -46,6 +48,7 @@ prettyVer SPDXLicenseListVersion_3_2 = "SPDX License List 3.2" prettyVer SPDXLicenseListVersion_3_0 = "SPDX License List 3.0" suffixVer :: SPDXLicenseListVersion -> String +suffixVer SPDXLicenseListVersion_3_23 = "_3_23" suffixVer SPDXLicenseListVersion_3_16 = "_3_16" suffixVer SPDXLicenseListVersion_3_10 = "_3_10" suffixVer SPDXLicenseListVersion_3_9 = "_3_9" @@ -57,7 +60,7 @@ suffixVer SPDXLicenseListVersion_3_0 = "_3_0" -- Per version ------------------------------------------------------------------------------- -data PerV a = PerV a a a a a a +data PerV a = PerV a a a a a a a deriving (Show, Functor, Foldable, Traversable) class Functor f => Representable i f | f -> i where @@ -65,12 +68,13 @@ class Functor f => Representable i f | f -> i where tabulate :: (i -> a) -> f a instance Representable SPDXLicenseListVersion PerV where - index SPDXLicenseListVersion_3_0 (PerV x _ _ _ _ _) = x - index SPDXLicenseListVersion_3_2 (PerV _ x _ _ _ _) = x - index SPDXLicenseListVersion_3_6 (PerV _ _ x _ _ _) = x - index SPDXLicenseListVersion_3_9 (PerV _ _ _ x _ _) = x - index SPDXLicenseListVersion_3_10 (PerV _ _ _ _ x _) = x - index SPDXLicenseListVersion_3_16 (PerV _ _ _ _ _ x) = x + index SPDXLicenseListVersion_3_0 (PerV x _ _ _ _ _ _) = x + index SPDXLicenseListVersion_3_2 (PerV _ x _ _ _ _ _) = x + index SPDXLicenseListVersion_3_6 (PerV _ _ x _ _ _ _) = x + index SPDXLicenseListVersion_3_9 (PerV _ _ _ x _ _ _) = x + index SPDXLicenseListVersion_3_10 (PerV _ _ _ _ x _ _) = x + index SPDXLicenseListVersion_3_16 (PerV _ _ _ _ _ x _) = x + index SPDXLicenseListVersion_3_23 (PerV _ _ _ _ _ _ x) = x tabulate f = PerV (f SPDXLicenseListVersion_3_0) @@ -79,6 +83,7 @@ instance Representable SPDXLicenseListVersion PerV where (f SPDXLicenseListVersion_3_9) (f SPDXLicenseListVersion_3_10) (f SPDXLicenseListVersion_3_16) + (f SPDXLicenseListVersion_3_23) ------------------------------------------------------------------------------- -- Sorting diff --git a/cabal-install-solver/cabal-install-solver.cabal b/cabal-install-solver/cabal-install-solver.cabal index d3d3edd9aba..5c8bb1b8bbc 100644 --- a/cabal-install-solver/cabal-install-solver.cabal +++ b/cabal-install-solver/cabal-install-solver.cabal @@ -14,7 +14,7 @@ maintainer: Cabal Development Team copyright: 2003-2024, Cabal Development Team category: Distribution build-type: Simple -Extra-Source-Files: +extra-doc-files: ChangeLog.md source-repository head @@ -92,6 +92,7 @@ library Distribution.Solver.Types.PackagePreferences Distribution.Solver.Types.PkgConfigDb Distribution.Solver.Types.Progress + Distribution.Solver.Types.ProjectConfigPath Distribution.Solver.Types.ResolverPackage Distribution.Solver.Types.Settings Distribution.Solver.Types.SolverId @@ -101,14 +102,16 @@ library build-depends: , array >=0.4 && <0.6 - , base >=4.10 && <4.20 + , base >=4.11 && <4.20 , bytestring >=0.10.6.0 && <0.13 - , Cabal ^>=3.11 - , Cabal-syntax ^>=3.11 + , Cabal ^>=3.12 + , Cabal-syntax ^>=3.12 , containers >=0.5.6.2 && <0.8 , edit-distance ^>= 0.2.2 + , directory >= 1.3.7.0 && < 1.4 , filepath ^>=1.4.0.0 || ^>=1.5.0.0 , mtl >=2.0 && <2.4 + , network-uri >= 2.6.0.2 && < 2.7 , pretty ^>=1.1 , transformers >=0.4.2.0 && <0.7 , text (>= 1.2.3.0 && < 1.3) || (>= 2.0 && < 2.2) @@ -131,7 +134,7 @@ Test-Suite unit-tests UnitTests.Distribution.Solver.Modular.MessageUtils build-depends: - , base >= 4.10 && <4.20 + , base >= 4.11 && <4.20 , Cabal , Cabal-syntax , cabal-install-solver diff --git a/cabal-install-solver/src/Distribution/Solver/Modular/Message.hs b/cabal-install-solver/src/Distribution/Solver/Modular/Message.hs index 11fa7ca874d..e097d3e081c 100644 --- a/cabal-install-solver/src/Distribution/Solver/Modular/Message.hs +++ b/cabal-install-solver/src/Distribution/Solver/Modular/Message.hs @@ -7,13 +7,12 @@ module Distribution.Solver.Modular.Message ( showMessages ) where -import Data.Maybe (isJust) import qualified Data.List as L import Data.Map (Map) import qualified Data.Map as M import Data.Set (Set) import qualified Data.Set as S -import Data.Maybe (catMaybes, mapMaybe) +import Data.Maybe (catMaybes, mapMaybe, isJust) import Prelude hiding (pi) import Distribution.Pretty (prettyShow) -- from Cabal @@ -31,8 +30,10 @@ import Distribution.Solver.Modular.Version import Distribution.Solver.Types.ConstraintSource import Distribution.Solver.Types.PackagePath import Distribution.Solver.Types.Progress +import Distribution.Solver.Types.ProjectConfigPath (docProjectConfigPathFailReason) import Distribution.Types.LibraryName import Distribution.Types.UnqualComponentName +import Text.PrettyPrint (nest, render) data Message = Enter -- ^ increase indentation level @@ -234,7 +235,7 @@ blurbOption :: ProgressAction -> QPN -> POption -> String blurbOption a q p = blurb a ++ showOption q p blurbOptions :: ProgressAction -> QPN -> [POption] -> String -blurbOptions a q ps = blurb a ++ showIsOrVs q (tryVs ps) +blurbOptions a q ps = blurb a ++ showOptions q ps showOption :: QPN -> POption -> String showOption qpn@(Q _pp pn) (POption i linkedTo) = @@ -242,53 +243,33 @@ showOption qpn@(Q _pp pn) (POption i linkedTo) = Nothing -> showPI (PI qpn i) -- Consistent with prior to POption Just pp' -> showQPN qpn ++ "~>" ++ showPI (PI (Q pp' pn) i) --- | A list of versions, or a list of instances. -data IsOrVs = Is [POption] | Vs [Ver] deriving Show - --- | Try to convert a list of options to a list of versions, or a list of --- instances if any of the options is linked or installed. Singleton lists or --- empty lists are always converted to Is. --- >>> tryVs [v0, v1] --- Vs [mkVersion [0],mkVersion [1]] --- >>> tryVs [v0] --- Is [POption (I (mkVersion [0]) InRepo) Nothing] --- >>> tryVs [i0, i1] --- Is [POption (I (mkVersion [0]) (Inst (UnitId "foo-bar-0-inplace"))) Nothing,POption (I (mkVersion [1]) (Inst (UnitId "foo-bar-1-inplace"))) Nothing] --- >>> tryVs [i0, v1] --- Is [POption (I (mkVersion [0]) (Inst (UnitId "foo-bar-0-inplace"))) Nothing,POption (I (mkVersion [1]) InRepo) Nothing] --- >>> tryVs [v0, i1] --- Is [POption (I (mkVersion [0]) InRepo) Nothing,POption (I (mkVersion [1]) (Inst (UnitId "foo-bar-1-inplace"))) Nothing] --- >>> tryVs [i0] --- Is [POption (I (mkVersion [0]) (Inst (UnitId "foo-bar-0-inplace"))) Nothing] --- >>> tryVs [] --- Is [] -tryVs :: [POption] -> IsOrVs -tryVs xs@[] = Is xs -tryVs xs@[_] = Is xs -tryVs xs - | any (\(POption (instI -> b0) (isJust -> b1)) -> b0 || b1) xs = Is xs - | otherwise = - let (vs, is) = L.partition ((== InRepo) . snd) [(v, l) | POption i _ <- xs, let I v l = i] - in if null is then Vs (fst `map` vs) else Is xs - --- | Shows a list of versions in a human-friendly way, abbreviated. Shows a list --- of instances in full. --- >>> showIsOrVs foobarQPN $ tryVs [v0, v1] +-- | Shows a mixed list of instances and versions in a human-friendly way, +-- abbreviated. +-- >>> showOptions foobarQPN [v0, v1] -- "foo-bar; 0, 1" --- >>> showIsOrVs foobarQPN $ tryVs [v0] +-- >>> showOptions foobarQPN [v0] -- "foo-bar-0" --- >>> showIsOrVs foobarQPN $ tryVs [i0, i1] --- "foo-bar-0/installed-inplace, foo-bar-1/installed-inplace" --- >>> showIsOrVs foobarQPN $ tryVs [i0, v1] --- "foo-bar-0/installed-inplace, foo-bar-1" --- >>> showIsOrVs foobarQPN $ tryVs [v0, i1] --- "foo-bar-0, foo-bar-1/installed-inplace" --- >>> showIsOrVs foobarQPN $ tryVs [] +-- >>> showOptions foobarQPN [i0, i1] +-- "foo-bar; 0/installed-inplace, 1/installed-inplace" +-- >>> showOptions foobarQPN [i0, v1] +-- "foo-bar; 0/installed-inplace, 1" +-- >>> showOptions foobarQPN [v0, i1] +-- "foo-bar; 0, 1/installed-inplace" +-- >>> showOptions foobarQPN [] -- "unexpected empty list of versions" -showIsOrVs :: QPN -> IsOrVs -> String -showIsOrVs _ (Is []) = "unexpected empty list of versions" -showIsOrVs q (Is xs) = L.intercalate ", " (showOption q `map` xs) -showIsOrVs q (Vs xs) = showQPN q ++ "; " ++ L.intercalate ", " (showVer `map` xs) +-- >>> showOptions foobarQPN [k1, k2] +-- "foo-bar; foo-bar~>bazqux.foo-bar-1, foo-bar~>bazqux.foo-bar-2" +-- >>> showOptions foobarQPN [v0, i1, k2] +-- "foo-bar; 0, 1/installed-inplace, foo-bar~>bazqux.foo-bar-2" +showOptions :: QPN -> [POption] -> String +showOptions _ [] = "unexpected empty list of versions" +showOptions q [x] = showOption q x +showOptions q xs = showQPN q ++ "; " ++ (L.intercalate ", " + [if isJust linkedTo + then showOption q x + else showI i -- Don't show the package, just the version + | x@(POption i linkedTo) <- xs + ]) showGR :: QGoalReason -> String showGR UserGoal = " (user goal)" @@ -311,6 +292,7 @@ showFR _ NotExplicit = " (not a user-provided goal nor ment showFR _ Shadowed = " (shadowed by another installed package with same version)" showFR _ (Broken u) = " (package is broken, missing dependency " ++ prettyShow u ++ ")" showFR _ UnknownPackage = " (unknown package)" +showFR _ (GlobalConstraintVersion vr (ConstraintSourceProjectConfig pc)) = '\n' : (render . nest 6 $ docProjectConfigPathFailReason vr pc) showFR _ (GlobalConstraintVersion vr src) = " (" ++ constraintSource src ++ " requires " ++ prettyShow vr ++ ")" showFR _ (GlobalConstraintInstalled src) = " (" ++ constraintSource src ++ " requires installed instance)" showFR _ (GlobalConstraintSource src) = " (" ++ constraintSource src ++ " requires source instance)" @@ -353,8 +335,12 @@ showConflictingDep (ConflictingDep dr (PkgComponent qpn comp) ci) = -- >>> import Distribution.Solver.Types.PackagePath -- >>> import Distribution.Types.Version -- >>> import Distribution.Types.UnitId --- >>> let foobarQPN = Q (PackagePath DefaultNamespace QualToplevel) (mkPackageName "foo-bar") +-- >>> let foobarPN = PackagePath DefaultNamespace QualToplevel +-- >>> let bazquxPN = PackagePath (Independent $ mkPackageName "bazqux") QualToplevel +-- >>> let foobarQPN = Q foobarPN (mkPackageName "foo-bar") -- >>> let v0 = POption (I (mkVersion [0]) InRepo) Nothing -- >>> let v1 = POption (I (mkVersion [1]) InRepo) Nothing -- >>> let i0 = POption (I (mkVersion [0]) (Inst $ mkUnitId "foo-bar-0-inplace")) Nothing --- >>> let i1 = POption (I (mkVersion [1]) (Inst $ mkUnitId "foo-bar-1-inplace")) Nothing \ No newline at end of file +-- >>> let i1 = POption (I (mkVersion [1]) (Inst $ mkUnitId "foo-bar-1-inplace")) Nothing +-- >>> let k1 = POption (I (mkVersion [1]) InRepo) (Just bazquxPN) +-- >>> let k2 = POption (I (mkVersion [2]) InRepo) (Just bazquxPN) diff --git a/cabal-install-solver/src/Distribution/Solver/Types/ConstraintSource.hs b/cabal-install-solver/src/Distribution/Solver/Types/ConstraintSource.hs index dadf8bf08b1..3fdf64bde89 100644 --- a/cabal-install-solver/src/Distribution/Solver/Types/ConstraintSource.hs +++ b/cabal-install-solver/src/Distribution/Solver/Types/ConstraintSource.hs @@ -5,7 +5,8 @@ module Distribution.Solver.Types.ConstraintSource ) where import Distribution.Solver.Compat.Prelude -import Prelude () +import Distribution.Solver.Types.ProjectConfigPath (ProjectConfigPath, docProjectConfigPath) +import Text.PrettyPrint (render) -- | Source of a 'PackageConstraint'. data ConstraintSource = @@ -14,7 +15,7 @@ data ConstraintSource = ConstraintSourceMainConfig FilePath -- | Local cabal.project file - | ConstraintSourceProjectConfig FilePath + | ConstraintSourceProjectConfig ProjectConfigPath -- | User config file, which is ./cabal.config by default. | ConstraintSourceUserConfig FilePath @@ -60,7 +61,7 @@ showConstraintSource :: ConstraintSource -> String showConstraintSource (ConstraintSourceMainConfig path) = "main config " ++ path showConstraintSource (ConstraintSourceProjectConfig path) = - "project config " ++ path + "project config " ++ render (docProjectConfigPath path) showConstraintSource (ConstraintSourceUserConfig path)= "user config " ++ path showConstraintSource ConstraintSourceCommandlineFlag = "command line flag" showConstraintSource ConstraintSourceUserTarget = "user target" diff --git a/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs b/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs new file mode 100644 index 00000000000..c57ade0c3e3 --- /dev/null +++ b/cabal-install-solver/src/Distribution/Solver/Types/ProjectConfigPath.hs @@ -0,0 +1,243 @@ +{-# LANGUAGE DeriveGeneric #-} + +module Distribution.Solver.Types.ProjectConfigPath + ( + -- * Project Config Path Manipulation + ProjectConfigPath(..) + , projectConfigPathRoot + , nullProjectConfigPath + , consProjectConfigPath + + -- * Messages + , docProjectConfigPath + , docProjectConfigPaths + , cyclicalImportMsg + , docProjectConfigPathFailReason + + -- * Checks and Normalization + , isCyclicConfigPath + , canonicalizeConfigPath + ) where + +import Distribution.Solver.Compat.Prelude hiding (toList, (<>)) +import Prelude (sequence) + +import Data.Coerce (coerce) +import Data.List.NonEmpty ((<|)) +import Network.URI (parseURI) +import System.Directory +import System.FilePath +import qualified Data.List.NonEmpty as NE +import Distribution.Solver.Modular.Version (VR) +import Distribution.Pretty (prettyShow) +import Text.PrettyPrint + +-- | Path to a configuration file, either a singleton project root, or a longer +-- list representing a path to an import. The path is a non-empty list that we +-- build up by prepending relative imports with @consProjectConfigPath@. +-- +-- An import can be a URI, such as [a stackage +-- cabal.config](https://www.stackage.org/nightly/cabal.config), but we do not +-- support URIs in the middle of the path, URIs that import other URIs, or URIs +-- that import local files. +-- +-- List elements are relative to each other but once canonicalized, elements are +-- relative to the directory of the project root. +newtype ProjectConfigPath = ProjectConfigPath (NonEmpty FilePath) + deriving (Eq, Ord, Show, Generic) + +instance Binary ProjectConfigPath +instance Structured ProjectConfigPath + +-- | Renders the path like this; +-- @ +-- D.config +-- imported by: C.config +-- imported by: B.config +-- imported by: A.project +-- @ +-- >>> render . docProjectConfigPath $ ProjectConfigPath $ "D.config" :| ["C.config", "B.config", "A.project"] +-- "D.config\n imported by: C.config\n imported by: B.config\n imported by: A.project" +docProjectConfigPath :: ProjectConfigPath -> Doc +docProjectConfigPath (ProjectConfigPath (p :| [])) = text p +docProjectConfigPath (ProjectConfigPath (p :| ps)) = vcat $ + text p : [ text " " <+> text "imported by:" <+> text l | l <- ps ] + +-- | Renders the paths as a list without showing which path imports another, +-- like this; +-- @ +-- - cabal.project +-- - project-cabal/constraints.config +-- - project-cabal/ghc-latest.config +-- - project-cabal/ghc-options.config +-- - project-cabal/pkgs.config +-- - project-cabal/pkgs/benchmarks.config +-- - project-cabal/pkgs/buildinfo.config +-- - project-cabal/pkgs/cabal.config +-- - project-cabal/pkgs/install.config +-- - project-cabal/pkgs/integration-tests.config +-- - project-cabal/pkgs/tests.config +-- @ +-- +-- >>> :{ +-- do +-- let ps = +-- [ ProjectConfigPath ("cabal.project" :| []) +-- , ProjectConfigPath ("project-cabal/constraints.config" :| ["cabal.project"]) +-- , ProjectConfigPath ("project-cabal/ghc-latest.config" :| ["cabal.project"]) +-- , ProjectConfigPath ("project-cabal/ghc-options.config" :| ["cabal.project"]) +-- , ProjectConfigPath ("project-cabal/pkgs.config" :| ["cabal.project"]) +-- , ProjectConfigPath ("project-cabal/pkgs/benchmarks.config" :| ["project-cabal/pkgs.config","cabal.project"]) +-- , ProjectConfigPath ("project-cabal/pkgs/buildinfo.config" :| ["project-cabal/pkgs.config","cabal.project"]) +-- , ProjectConfigPath ("project-cabal/pkgs/cabal.config" :| ["project-cabal/pkgs.config","cabal.project"]) +-- , ProjectConfigPath ("project-cabal/pkgs/install.config" :| ["project-cabal/pkgs.config","cabal.project"]) +-- , ProjectConfigPath ("project-cabal/pkgs/integration-tests.config" :| ["project-cabal/pkgs.config","cabal.project"]) +-- , ProjectConfigPath ("project-cabal/pkgs/tests.config" :| ["project-cabal/pkgs.config","cabal.project"]) +-- ] +-- return . render $ docProjectConfigPaths ps +-- :} +-- "- cabal.project\n- project-cabal/constraints.config\n- project-cabal/ghc-latest.config\n- project-cabal/ghc-options.config\n- project-cabal/pkgs.config\n- project-cabal/pkgs/benchmarks.config\n- project-cabal/pkgs/buildinfo.config\n- project-cabal/pkgs/cabal.config\n- project-cabal/pkgs/install.config\n- project-cabal/pkgs/integration-tests.config\n- project-cabal/pkgs/tests.config" +docProjectConfigPaths :: [ProjectConfigPath] -> Doc +docProjectConfigPaths ps = vcat + [ text "-" <+> text p | ProjectConfigPath (p :| _) <- ps ] + +-- | A message for a cyclical import, assuming the head of the path is the +-- duplicate. +cyclicalImportMsg :: ProjectConfigPath -> Doc +cyclicalImportMsg path@(ProjectConfigPath (duplicate :| _)) = + vcat + [ text "cyclical import of" <+> text duplicate <> semi + , nest 2 (docProjectConfigPath path) + ] + +docProjectConfigPathFailReason :: VR -> ProjectConfigPath -> Doc +docProjectConfigPathFailReason vr pcp + | ProjectConfigPath (p :| []) <- pcp = + constraint p + | ProjectConfigPath (p :| ps) <- pcp = vcat + [ constraint p + , cat [nest 2 $ text "imported by:" <+> text l | l <- ps ] + ] + where + pathRequiresVersion p = text p <+> text "requires" <+> text (prettyShow vr) + constraint p = parens $ text "constraint from" <+> pathRequiresVersion p + +-- | The root of the path, the project itself. +projectConfigPathRoot :: ProjectConfigPath -> FilePath +projectConfigPathRoot (ProjectConfigPath xs) = last xs + +-- | Used by some tests as a dummy "unused" project root. +nullProjectConfigPath :: ProjectConfigPath +nullProjectConfigPath = ProjectConfigPath $ "unused" :| [] + +-- | Check if the path has duplicates. A cycle of imports is not allowed. This +-- check should only be done after the path has been canonicalized with +-- @canonicalizeConfigPath@. This is because the import path may contain paths +-- that are the same in relation to their importers but different in relation to +-- the project root directory. +isCyclicConfigPath :: ProjectConfigPath -> Bool +isCyclicConfigPath (ProjectConfigPath p) = length p /= length (NE.nub p) + +-- | Prepends the path of the importee to the importer path. +consProjectConfigPath :: FilePath -> ProjectConfigPath -> ProjectConfigPath +consProjectConfigPath p ps = ProjectConfigPath (p <| coerce ps) + +-- | Make paths relative to the directory of the root of the project, not +-- relative to the file they were imported from. +makeRelativeConfigPath :: FilePath -> ProjectConfigPath -> ProjectConfigPath +makeRelativeConfigPath dir (ProjectConfigPath p) = + ProjectConfigPath + $ (\segment -> (if isURI segment then segment else makeRelative dir segment)) + <$> p + +-- | Normalizes and canonicalizes a path removing '.' and '..' indirections. +-- Makes the path relative to the given directory (typically the project root) +-- instead of relative to the file it was imported from. +-- +-- It converts paths like this: +-- @ +-- └─ hops-0.project +-- └─ hops/hops-1.config +-- └─ ../hops-2.config +-- └─ hops/hops-3.config +-- └─ ../hops-4.config +-- └─ hops/hops-5.config +-- └─ ../hops-6.config +-- └─ hops/hops-7.config +-- └─ ../hops-8.config +-- └─ hops/hops-9.config +-- @ +-- +-- Into paths like this: +-- @ +-- └─ hops-0.project +-- └─ hops/hops-1.config +-- └─ hops-2.config +-- └─ hops/hops-3.config +-- └─ hops-4.config +-- └─ hops/hops-5.config +-- └─ hops-6.config +-- └─ hops/hops-7.config +-- └─ hops-8.config +-- └─ hops/hops-9.config +-- @ +-- +-- That way we have @hops-8.config@ instead of +-- @./hops/../hops/../hops/../hops/../hops-8.config@. +-- +-- Let's see how @canonicalizePath@ works that is used in the implementation +-- then we'll see how @canonicalizeConfigPath@ works. +-- +-- >>> let d = testDir +-- >>> makeRelative d <$> canonicalizePath (d "hops/../hops/../hops/../hops/../hops-8.config") +-- "hops-8.config" +-- +-- >>> let d = testDir +-- >>> p <- canonicalizeConfigPath d (ProjectConfigPath $ (d "hops/../hops/../hops/../hops/../hops-8.config") :| []) +-- >>> render $ docProjectConfigPath p +-- "hops-8.config" +-- +-- >>> :{ +-- do +-- let expected = unlines +-- [ "hops/hops-9.config" +-- , " imported by: hops-8.config" +-- , " imported by: hops/hops-7.config" +-- , " imported by: hops-6.config" +-- , " imported by: hops/hops-5.config" +-- , " imported by: hops-4.config" +-- , " imported by: hops/hops-3.config" +-- , " imported by: hops-2.config" +-- , " imported by: hops/hops-1.config" +-- , " imported by: hops-0.project" +-- ] +-- let d = testDir +-- let configPath = ProjectConfigPath ("hops/hops-9.config" :| +-- [ "../hops-8.config" +-- , "hops/hops-7.config" +-- , "../hops-6.config" +-- , "hops/hops-5.config" +-- , "../hops-4.config" +-- , "hops/hops-3.config" +-- , "../hops-2.config" +-- , "hops/hops-1.config" +-- , d "hops-0.project"]) +-- p <- canonicalizeConfigPath d configPath +-- return $ expected == render (docProjectConfigPath p) ++ "\n" +-- :} +-- True +canonicalizeConfigPath :: FilePath -> ProjectConfigPath -> IO ProjectConfigPath +canonicalizeConfigPath d (ProjectConfigPath p) = do + xs <- sequence $ NE.scanr (\importee -> (>>= \importer -> + if isURI importee + then pure importee + else canonicalizePath $ d takeDirectory importer importee)) + (pure ".") p + return . makeRelativeConfigPath d . ProjectConfigPath . NE.fromList $ NE.init xs + +isURI :: FilePath -> Bool +isURI = isJust . parseURI + +-- $setup +-- >>> import Data.List +-- >>> testDir <- makeAbsolute =<< canonicalizePath "../cabal-testsuite/PackageTests/ConditionalAndImport" diff --git a/cabal-install/cabal-install.cabal b/cabal-install/cabal-install.cabal index 33de6d0538a..dc8c62e65bd 100644 --- a/cabal-install/cabal-install.cabal +++ b/cabal-install/cabal-install.cabal @@ -17,8 +17,9 @@ Copyright: 2003-2024, Cabal Development Team Category: Distribution Build-type: Simple Extra-Source-Files: - README.md bash-completion/cabal +extra-doc-files: + README.md changelog source-repository head @@ -50,13 +51,13 @@ common warnings ghc-options: -Wunused-packages common base-dep - build-depends: base >=4.10 && <4.20 + build-depends: base >=4.11 && <4.20 common cabal-dep - build-depends: Cabal ^>=3.11 + build-depends: Cabal ^>=3.12 common cabal-syntax-dep - build-depends: Cabal-syntax ^>=3.11 + build-depends: Cabal-syntax ^>=3.12 common cabal-install-solver-dep build-depends: cabal-install-solver ^>=3.11 @@ -67,6 +68,8 @@ library default-extensions: TypeOperators hs-source-dirs: src + autogen-modules: + Paths_cabal_install other-modules: Paths_cabal_install exposed-modules: @@ -96,6 +99,7 @@ library Distribution.Client.CmdInstall.ClientInstallTargetSelector Distribution.Client.CmdLegacy Distribution.Client.CmdListBin + Distribution.Client.CmdPath Distribution.Client.CmdOutdated Distribution.Client.CmdRepl Distribution.Client.CmdRun @@ -235,7 +239,7 @@ library random >= 1.2 && < 1.3, stm >= 2.0 && < 2.6, tar >= 0.5.0.3 && < 0.7, - time >= 1.5.0.1 && < 1.13, + time >= 1.5.0.1 && < 1.15, zlib >= 0.5.3 && < 0.8, hackage-security >= 0.6.2.0 && < 0.7, text >= 1.2.3 && < 1.3 || >= 2.0 && < 2.2, @@ -346,6 +350,7 @@ test-suite unit-tests tasty >= 1.2.3 && <1.6, tasty-golden >=2.3.1.1 && <2.4, tasty-quickcheck, + tasty-expected-failure, tasty-hunit >= 0.10, tree-diff, QuickCheck >= 2.14.3 && <2.15 diff --git a/cabal-install/src/Distribution/Client/CmdExec.hs b/cabal-install/src/Distribution/Client/CmdExec.hs index 82fada98463..fc81f323fdc 100644 --- a/cabal-install/src/Distribution/Client/CmdExec.hs +++ b/cabal-install/src/Distribution/Client/CmdExec.hs @@ -76,8 +76,8 @@ import Distribution.Simple.Program , simpleProgram ) import Distribution.Simple.Program.Db - ( appendProgramSearchPath - , configuredPrograms + ( configuredPrograms + , prependProgramSearchPath , requireProgram ) import Distribution.Simple.Program.Run @@ -168,7 +168,7 @@ execAction flags@NixStyleFlags{..} extraArgs globalFlags = do let extraPaths = pathAdditions baseCtx buildCtx programDb <- - appendProgramSearchPath + prependProgramSearchPath verbosity extraPaths . pkgConfigCompilerProgs diff --git a/cabal-install/src/Distribution/Client/CmdInstall.hs b/cabal-install/src/Distribution/Client/CmdInstall.hs index 7b89b0ac302..b39b97278ae 100644 --- a/cabal-install/src/Distribution/Client/CmdInstall.hs +++ b/cabal-install/src/Distribution/Client/CmdInstall.hs @@ -154,8 +154,8 @@ import Distribution.Simple.GHC import qualified Distribution.Simple.InstallDirs as InstallDirs import qualified Distribution.Simple.PackageIndex as PI import Distribution.Simple.Program.Db - ( appendProgramSearchPath - , defaultProgramDb + ( defaultProgramDb + , prependProgramSearchPath , userSpecifyArgss , userSpecifyPaths ) @@ -426,7 +426,7 @@ installAction flags@NixStyleFlags{extraFlags, configFlags, installFlags, project hcPath = flagToMaybe projectConfigHcPath hcPkg = flagToMaybe projectConfigHcPkg - configProgDb <- appendProgramSearchPath verbosity ((fromNubList packageConfigProgramPathExtra) ++ (fromNubList projectConfigProgPathExtra)) defaultProgramDb + configProgDb <- prependProgramSearchPath verbosity ((fromNubList packageConfigProgramPathExtra) ++ (fromNubList projectConfigProgPathExtra)) defaultProgramDb let -- ProgramDb with directly user specified paths preProgDb = @@ -441,8 +441,8 @@ installAction flags@NixStyleFlags{extraFlags, configFlags, installFlags, project let GhcImplInfo{supportsPkgEnvFiles} = getImplInfo compiler - envFile <- getEnvFile clientInstallFlags platform compilerVersion - existingEnvEntries <- + (usedPackageEnvFlag, envFile) <- getEnvFile clientInstallFlags platform compilerVersion + (usedExistingPkgEnvFile, existingEnvEntries) <- getExistingEnvEntries verbosity compilerFlavor supportsPkgEnvFiles envFile packageDbs <- getPackageDbStack compiler projectConfigStoreDir projectConfigLogsDir projectConfigPackageDBs installedIndex <- getInstalledPackages verbosity compiler packageDbs progDb @@ -470,8 +470,7 @@ installAction flags@NixStyleFlags{extraFlags, configFlags, installFlags, project -- check for targets already in env let getPackageName :: PackageSpecifier UnresolvedSourcePackage -> PackageName - getPackageName (NamedPackage pn _) = pn - getPackageName (SpecificSourcePackage (SourcePackage pkgId _ _ _)) = pkgName pkgId + getPackageName = pkgSpecifierTarget targetNames = S.fromList $ map getPackageName (pkgSpecs ++ uriSpecs) envNames = S.fromList $ map getPackageName envSpecs forceInstall = fromFlagOrDefault False $ installOverrideReinstall installFlags @@ -534,11 +533,12 @@ installAction flags@NixStyleFlags{extraFlags, configFlags, installFlags, project packageDbs envFile nonGlobalEnvEntries' + (not usedExistingPkgEnvFile && not usedPackageEnvFlag) else -- Install any built exe by symlinking or copying it we don't use -- BuildOutcomes because we also need the component names traverseInstall (installCheckUnitExes InstallCheckInstall) installCfg where - configFlags' = disableTestsBenchsByDefault configFlags + configFlags' = disableTestsBenchsByDefault . ignoreProgramAffixes $ configFlags verbosity = fromFlagOrDefault normal (configVerbosity configFlags') ignoreProject = flagIgnoreProject projectFlags cliConfig = @@ -571,7 +571,7 @@ withProject verbosity cliConfig targetStrings installLibs = do if null unresolvedTargetStrings then return (parsedPkgSpecs, parsedTargets) else do - -- Anything that could not be parsed as a packageId (e.g. a pacakge name with not version or + -- Anything that could not be parsed as a packageId (e.g. a package name without a version or -- a target syntax using colons) must be resolved inside the project context. (resolvedPkgSpecs, resolvedTargets) <- resolveTargetSelectorsInProjectBaseContext verbosity baseCtx unresolvedTargetStrings targetFilter @@ -580,7 +580,7 @@ withProject verbosity cliConfig targetStrings installLibs = do -- Apply the local configuration (e.g. cli flags) to all direct targets of install command, see note -- in 'installAction'. -- - -- NOTE: If a target string had to be resolved inside the project conterxt, then pkgSpecs will include + -- NOTE: If a target string had to be resolved inside the project context, then pkgSpecs will include -- the project packages turned into source distributions (getSpecsAndTargetSelectors does this). -- We want to apply the local configuration only to the actual targets. let config = @@ -797,7 +797,16 @@ getSpecsAndTargetSelectors verbosity reducedVerbosity sourcePkgDb targetSelector TarGzArchive (distSdistFile distDirLayout (packageId pkg)) pkg - NamedPackage pkgName _ -> error $ "Got NamedPackage " ++ prettyShow pkgName + NamedPackage _ _ -> + -- This may happen if 'extra-packages' are listed in the project file. + -- We don't need to do extra work for NamedPackages since they will be + -- fetched from Hackage rather than locally 'sdistize'-d. Note how, + -- below, we already return the local 'sdistize'-d packages together + -- with the 'hackagePkgs' (which are 'NamedPackage's), and that + -- 'sdistize' is a no-op for 'NamedPackages', meaning the + -- 'NamedPackage's in 'localPkgs' will be treated just like + -- 'hackagePkgs' as they should. + pure () if null targetsMap then return (hackagePkgs, hackageTargets) @@ -951,6 +960,9 @@ installLibraries -> FilePath -- ^ Environment file -> [GhcEnvironmentFileEntry] + -> Bool + -- ^ Whether we need to show a warning (i.e. we created a new environment + -- file, and the user did not use --package-env) -> IO () installLibraries verbosity @@ -959,7 +971,8 @@ installLibraries compiler packageDbs' envFile - envEntries = do + envEntries + showWarning = do if supportsPkgEnvFiles $ getImplInfo compiler then do let validDb (SpecificPackageDB fp) = doesPathExist fp @@ -985,6 +998,27 @@ installLibraries contents' = renderGhcEnvironmentFile (baseEntries ++ pkgEntries) createDirectoryIfMissing True (takeDirectory envFile) writeFileAtomic envFile (BS.pack contents') + when showWarning $ + warn verbosity $ + "The libraries were installed by creating a global GHC environment file at:\n" + ++ envFile + ++ "\n" + ++ "\n" + ++ "The presence of such an environment file is likely to confuse or break other " + ++ "tools because it changes GHC's behaviour: it changes the default package set in " + ++ "ghc and ghci from its normal value (which is \"all boot libraries\"). GHC " + ++ "environment files are little-used and often not tested for.\n" + ++ "\n" + ++ "Furthermore, management of these environment files is still more difficult than " + ++ "it could be; see e.g. https://github.com/haskell/cabal/issues/6481 .\n" + ++ "\n" + ++ "Double-check that creating a global GHC environment file is really what you " + ++ "wanted! You can limit the effects of the environment file by creating it in a " + ++ "specific directory using the --package-env flag. For example, use:\n" + ++ "\n" + ++ "cabal install --lib --package-env .\n" + ++ "\n" + ++ "to create the file in the current directory." else warn verbosity $ "The current compiler doesn't support safely installing libraries, " @@ -1065,6 +1099,18 @@ disableTestsBenchsByDefault configFlags = , configBenchmarks = Flag False <> configBenchmarks configFlags } +-- | Disables program prefix and suffix, in order to get the /canonical/ +-- executable name in the store and thus: +-- +-- * avoid making the package hash depend on these options and needless rebuild; +-- * provide the correct executable path to the install methods (copy, symlink). +ignoreProgramAffixes :: ConfigFlags -> ConfigFlags +ignoreProgramAffixes configFlags = + configFlags + { configProgPrefix = NoFlag + , configProgSuffix = NoFlag + } + -- | Prepares a record containing the information needed to either symlink or -- copy an executable. symlink :: OverwritePolicy -> InstallExe -> UnitId -> UnqualComponentName -> Symlink @@ -1215,8 +1261,10 @@ entriesForLibraryComponents = Map.foldrWithKey' (\k v -> mappend (go k v)) [] | any hasLib targets = [GhcEnvFilePackageId unitId] | otherwise = [] --- | Gets the file path to the request environment file. -getEnvFile :: ClientInstallFlags -> Platform -> Version -> IO FilePath +-- | Gets the file path to the request environment file. The @Bool@ is @True@ +-- if we got an explicit instruction using @--package-env@, @False@ if we used +-- the default. +getEnvFile :: ClientInstallFlags -> Platform -> Version -> IO (Bool, FilePath) getEnvFile clientInstallFlags platform compilerVersion = do appDir <- getGhcAppDir case flagToMaybe (cinstEnvironmentPath clientInstallFlags) of @@ -1224,37 +1272,39 @@ getEnvFile clientInstallFlags platform compilerVersion = do -- Is spec a bare word without any "pathy" content, then it refers to -- a named global environment. | takeBaseName spec == spec -> - return (getGlobalEnv appDir platform compilerVersion spec) + return (True, getGlobalEnv appDir platform compilerVersion spec) | otherwise -> do spec' <- makeAbsolute spec isDir <- doesDirectoryExist spec' if isDir then -- If spec is a directory, then make an ambient environment inside -- that directory. - return (getLocalEnv spec' platform compilerVersion) + return (True, getLocalEnv spec' platform compilerVersion) else -- Otherwise, treat it like a literal file path. - return spec' + return (True, spec') Nothing -> - return (getGlobalEnv appDir platform compilerVersion "default") + return (False, getGlobalEnv appDir platform compilerVersion "default") --- | Returns the list of @GhcEnvFilePackageIj@ values already existing in the --- environment being operated on. -getExistingEnvEntries :: Verbosity -> CompilerFlavor -> Bool -> FilePath -> IO [GhcEnvironmentFileEntry] +-- | Returns the list of @GhcEnvFilePackageId@ values already existing in the +-- environment being operated on. The @Bool@ is @True@ if we took settings +-- from an existing file, @False@ otherwise. +getExistingEnvEntries :: Verbosity -> CompilerFlavor -> Bool -> FilePath -> IO (Bool, [GhcEnvironmentFileEntry]) getExistingEnvEntries verbosity compilerFlavor supportsPkgEnvFiles envFile = do envFileExists <- doesFileExist envFile - filterEnvEntries - <$> if (compilerFlavor == GHC || compilerFlavor == GHCJS) + (usedExisting, allEntries) <- + if (compilerFlavor == GHC || compilerFlavor == GHCJS) && supportsPkgEnvFiles && envFileExists - then catch (readGhcEnvironmentFile envFile) $ \(_ :: ParseErrorExc) -> + then catch ((True,) <$> readGhcEnvironmentFile envFile) $ \(_ :: ParseErrorExc) -> warn verbosity ( "The environment file " ++ envFile ++ " is unparsable. Libraries cannot be installed." ) - >> return [] - else return [] + >> return (False, []) + else return (False, []) + return (usedExisting, filterEnvEntries allEntries) where -- Why? We know what the first part will be, we only care about the packages. filterEnvEntries = filter $ \case diff --git a/cabal-install/src/Distribution/Client/CmdPath.hs b/cabal-install/src/Distribution/Client/CmdPath.hs new file mode 100644 index 00000000000..8ca8d6181f1 --- /dev/null +++ b/cabal-install/src/Distribution/Client/CmdPath.hs @@ -0,0 +1,408 @@ +{-# LANGUAGE CPP #-} +{-# LANGUAGE LambdaCase #-} +{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE RecordWildCards #-} + +----------------------------------------------------------------------------- + +----------------------------------------------------------------------------- + +-- | +-- Module : Distribution.Client.CmdPath +-- Maintainer : cabal-devel@haskell.org +-- Portability : portable +-- +-- Implementation of the 'path' command. Query for project configuration +-- information. +module Distribution.Client.CmdPath + ( pathCommand + , pathAction + ) where + +import Distribution.Client.Compat.Prelude +import Prelude () + +import Distribution.Client.CmdInstall.ClientInstallFlags + ( cinstInstalldir + ) +import Distribution.Client.Config + ( defaultCacheHome + , defaultInstallPath + , defaultStoreDir + , getConfigFilePath + ) +import Distribution.Client.DistDirLayout (CabalDirLayout (..), distProjectRootDirectory) +import Distribution.Client.Errors +import Distribution.Client.GlobalFlags +import Distribution.Client.NixStyleOptions + ( NixStyleFlags (..) + , defaultNixStyleFlags + , nixStyleOptions + ) +import Distribution.Client.ProjectConfig.Types + ( ProjectConfig (..) + , ProjectConfigBuildOnly (..) + , ProjectConfigShared (..) + ) +import Distribution.Client.ProjectOrchestration +import Distribution.Client.ProjectPlanning +import Distribution.Client.RebuildMonad (runRebuild) +import Distribution.Client.ScriptUtils +import Distribution.Client.Setup + ( ConfigFlags (..) + , yesNoOpt + ) +import Distribution.Client.Utils.Json + ( (.=) + ) +import qualified Distribution.Client.Utils.Json as Json +import Distribution.Client.Version + ( cabalInstallVersion + ) +import Distribution.ReadE + ( ReadE (ReadE) + ) +import Distribution.Simple.Command + ( CommandUI (..) + , OptionField + , ShowOrParseArgs + , noArg + , option + , reqArg + ) +import Distribution.Simple.Compiler +import Distribution.Simple.Flag + ( Flag (..) + , flagToList + , fromFlagOrDefault + ) +import Distribution.Simple.Program +import Distribution.Simple.Utils + ( die' + , dieWithException + , withOutputMarker + , wrapText + ) +import Distribution.Verbosity + ( normal + ) + +------------------------------------------------------------------------------- +-- Command +------------------------------------------------------------------------------- + +pathCommand :: CommandUI (NixStyleFlags PathFlags) +pathCommand = + CommandUI + { commandName = "path" + , commandSynopsis = "Query for simple project information" + , commandDescription = Just $ \_ -> + wrapText $ + "Query for configuration and project information such as project GHC.\n" + <> "The output order of query keys is implementation defined and should not be relied on.\n" + , commandNotes = Just $ \pname -> + "Examples:\n" + <> " " + <> pname + <> " path --store-dir\n" + <> " Print the store-dir location of cabal.\n" + <> " " + <> pname + <> " path --output-format=json --compiler-info\n" + <> " Print compiler information in json format.\n" + <> " " + <> pname + <> " path --output-format=json --installdir --compiler-info\n" + <> " Print compiler information and installation directory in json format.\n" + <> " " + <> pname + <> " path --output-format=key-value --installdir\n" + <> " Print the installation directory, taking project information into account.\n" + <> " " + <> pname + <> " path -z --output-format=key-value --installdir\n" + <> " Print the installation directory, without taking project information into account.\n" + , commandUsage = \pname -> + "Usage: " <> pname <> " path [FLAGS]\n" + , commandDefaultFlags = defaultNixStyleFlags defaultPathFlags + , commandOptions = nixStyleOptions pathOptions + } + +------------------------------------------------------------------------------- +-- Flags +------------------------------------------------------------------------------- + +data PathOutputFormat + = JSON + | KeyValue + deriving (Eq, Ord, Show, Read, Enum, Bounded) + +data PathFlags = PathFlags + { pathCompiler :: Flag Bool + , pathOutputFormat :: Flag PathOutputFormat + , pathDirectories :: Flag [ConfigPath] + } + deriving (Eq, Show) + +defaultPathFlags :: PathFlags +defaultPathFlags = + PathFlags + { pathCompiler = mempty + , pathOutputFormat = mempty + , pathDirectories = mempty + } + +pathOutputFormatParser :: ReadE (Flag PathOutputFormat) +pathOutputFormatParser = ReadE $ \case + "json" -> Right $ Flag JSON + "key-value" -> Right $ Flag KeyValue + policy -> + Left $ + "Cannot parse the status output format '" + <> policy + <> "'" + +pathOutputFormatString :: PathOutputFormat -> String +pathOutputFormatString JSON = "json" +pathOutputFormatString KeyValue = "key-value" + +pathOutputFormatPrinter + :: Flag PathOutputFormat -> [String] +pathOutputFormatPrinter = \case + (Flag format) -> [pathOutputFormatString format] + NoFlag -> [] + +pathOptions :: ShowOrParseArgs -> [OptionField PathFlags] +pathOptions showOrParseArgs = + [ option + [] + ["output-format"] + "Output format of the requested path locations" + pathOutputFormat + (\v flags -> flags{pathOutputFormat = v}) + ( reqArg + (intercalate "|" $ map pathOutputFormatString [minBound .. maxBound]) + pathOutputFormatParser + pathOutputFormatPrinter + ) + , option + [] + ["compiler-info"] + "Print information of the project compiler" + pathCompiler + (\v flags -> flags{pathCompiler = v}) + (yesNoOpt showOrParseArgs) + ] + <> map pathOption [minBound .. maxBound] + where + pathOption s = + option + [] + [pathName s] + ("Print cabal's " <> pathName s) + pathDirectories + (\v flags -> flags{pathDirectories = Flag $ concat (flagToList (pathDirectories flags) <> flagToList v)}) + (noArg (Flag [s])) + +-- | A path that can be retrieved by the @cabal path@ command. +data ConfigPath + = ConfigPathCacheHome + | ConfigPathRemoteRepoCache + | ConfigPathLogsDir + | ConfigPathStoreDir + | ConfigPathConfigFile + | ConfigPathInstallDir + deriving (Eq, Ord, Show, Enum, Bounded) + +-- | The configuration name for this path. +pathName :: ConfigPath -> String +pathName ConfigPathCacheHome = "cache-home" +pathName ConfigPathRemoteRepoCache = "remote-repo-cache" +pathName ConfigPathLogsDir = "logs-dir" +pathName ConfigPathStoreDir = "store-dir" +pathName ConfigPathConfigFile = "config-file" +pathName ConfigPathInstallDir = "installdir" + +------------------------------------------------------------------------------- +-- Action +------------------------------------------------------------------------------- + +-- | Entry point for the 'path' command. +pathAction :: NixStyleFlags PathFlags -> [String] -> GlobalFlags -> IO () +pathAction flags@NixStyleFlags{extraFlags = pathFlags', ..} cliTargetStrings globalFlags = withContextAndSelectors AcceptNoTargets Nothing flags [] globalFlags OtherCommand $ \_ baseCtx _ -> do + let pathFlags = + if pathCompiler pathFlags' == NoFlag && pathDirectories pathFlags' == NoFlag + then -- if not a single key to query is given, query everything! + + pathFlags' + { pathCompiler = Flag True + , pathDirectories = Flag [minBound .. maxBound] + } + else pathFlags' + when (not $ null cliTargetStrings) $ + dieWithException verbosity CmdPathAcceptsNoTargets + when (buildSettingDryRun (buildSettings baseCtx)) $ + dieWithException verbosity CmdPathCommandDoesn'tSupportDryRun + + compilerPathOutputs <- + if not $ fromFlagOrDefault False (pathCompiler pathFlags) + then pure Nothing + else do + (compiler, _, progDb) <- runRebuild (distProjectRootDirectory . distDirLayout $ baseCtx) $ configureCompiler verbosity (distDirLayout baseCtx) (projectConfig baseCtx) + compilerProg <- requireCompilerProg verbosity compiler + (configuredCompilerProg, _) <- requireProgram verbosity compilerProg progDb + pure $ Just $ mkCompilerInfo configuredCompilerProg compiler + + paths <- for (fromFlagOrDefault [] $ pathDirectories pathFlags) $ \p -> do + t <- getPathLocation baseCtx p + pure (pathName p, t) + + let pathOutputs = + PathOutputs + { pathOutputsCompilerInfo = compilerPathOutputs + , pathOutputsConfigPaths = paths + } + + let output = case fromFlagOrDefault KeyValue (pathOutputFormat pathFlags) of + JSON -> + Json.encodeToString (showAsJson pathOutputs) <> "\n" + KeyValue -> do + showAsKeyValuePair pathOutputs + + putStr $ withOutputMarker verbosity output + where + verbosity = fromFlagOrDefault normal (configVerbosity configFlags) + +-- | Find the FilePath location for common configuration paths. +-- +-- TODO: this should come from a common source of truth to avoid code path divergence +getPathLocation :: ProjectBaseContext -> ConfigPath -> IO FilePath +getPathLocation _ ConfigPathCacheHome = + defaultCacheHome +getPathLocation baseCtx ConfigPathRemoteRepoCache = + pure $ buildSettingCacheDir (buildSettings baseCtx) +getPathLocation baseCtx ConfigPathLogsDir = + pure $ cabalLogsDirectory (cabalDirLayout baseCtx) +getPathLocation baseCtx ConfigPathStoreDir = + fromFlagOrDefault + defaultStoreDir + (pure <$> projectConfigStoreDir (projectConfigShared (projectConfig baseCtx))) +getPathLocation baseCtx ConfigPathConfigFile = + getConfigFilePath (projectConfigConfigFile (projectConfigShared (projectConfig baseCtx))) +getPathLocation baseCtx ConfigPathInstallDir = + fromFlagOrDefault + defaultInstallPath + (pure <$> cinstInstalldir (projectConfigClientInstallFlags $ projectConfigBuildOnly (projectConfig baseCtx))) + +-- ---------------------------------------------------------------------------- +-- Helpers for determining compiler information +-- ---------------------------------------------------------------------------- + +requireCompilerProg :: Verbosity -> Compiler -> IO Program +requireCompilerProg verbosity compiler = + case compilerFlavor compiler of + GHC -> pure ghcProgram + GHCJS -> pure ghcjsProgram + flavour -> + die' verbosity $ + "path: Unsupported compiler flavour: " + <> prettyShow flavour + +-- ---------------------------------------------------------------------------- +-- Output +-- ---------------------------------------------------------------------------- + +data PathOutputs = PathOutputs + { pathOutputsCompilerInfo :: Maybe PathCompilerInfo + , pathOutputsConfigPaths :: [(String, FilePath)] + } + deriving (Show, Eq, Ord) + +data PathCompilerInfo = PathCompilerInfo + { pathCompilerInfoFlavour :: CompilerFlavor + , pathCompilerInfoId :: CompilerId + , pathCompilerInfoPath :: FilePath + } + deriving (Show, Eq, Ord) + +mkCompilerInfo :: ConfiguredProgram -> Compiler -> PathCompilerInfo +mkCompilerInfo compilerProgram compiler = + PathCompilerInfo + { pathCompilerInfoFlavour = compilerFlavor compiler + , pathCompilerInfoId = compilerId compiler + , pathCompilerInfoPath = programPath compilerProgram + } + +-- ---------------------------------------------------------------------------- +-- JSON +-- ---------------------------------------------------------------------------- + +showAsJson :: PathOutputs -> Json.Value +showAsJson pathOutputs = + let + cabalInstallJson = + Json.object + [ "cabal-version" .= jdisplay cabalInstallVersion + ] + + compilerInfoJson = case pathOutputsCompilerInfo pathOutputs of + Nothing -> Json.object [] + Just pci -> compilerInfoToJson pci + + pathsJson = Json.object $ map (\(k, v) -> k .= Json.String v) (pathOutputsConfigPaths pathOutputs) + in + mergeJsonObjects $ + [ cabalInstallJson + , compilerInfoJson + , pathsJson + ] + +jdisplay :: Pretty a => a -> Json.Value +jdisplay = Json.String . prettyShow + +mergeJsonObjects :: [Json.Value] -> Json.Value +mergeJsonObjects = Json.object . foldl' go [] + where + go acc (Json.Object objs) = + acc <> objs + go _ _ = + error "mergeJsonObjects: Only objects can be merged" + +compilerInfoToJson :: PathCompilerInfo -> Json.Value +compilerInfoToJson pci = + Json.object + [ "compiler" + .= Json.object + [ "flavour" .= jdisplay (pathCompilerInfoFlavour pci) + , "id" .= jdisplay (pathCompilerInfoId pci) + , "path" .= Json.String (pathCompilerInfoPath pci) + ] + ] + +-- ---------------------------------------------------------------------------- +-- Key Value Pair outputs +-- ---------------------------------------------------------------------------- + +showAsKeyValuePair :: PathOutputs -> String +showAsKeyValuePair pathOutputs = + let + cInfo = case pathOutputsCompilerInfo pathOutputs of + Nothing -> [] + Just pci -> compilerInfoToKeyValue pci + + paths = pathOutputsConfigPaths pathOutputs + + pairs = cInfo <> paths + + showPair (k, v) = k <> ": " <> v + in + case pairs of + [(_, v)] -> v + xs -> unlines $ map showPair xs + +compilerInfoToKeyValue :: PathCompilerInfo -> [(String, String)] +compilerInfoToKeyValue pci = + [ ("compiler-flavour", prettyShow $ pathCompilerInfoFlavour pci) + , ("compiler-id", prettyShow $ pathCompilerInfoId pci) + , ("compiler-path", pathCompilerInfoPath pci) + ] diff --git a/cabal-install/src/Distribution/Client/CmdRepl.hs b/cabal-install/src/Distribution/Client/CmdRepl.hs index e243eb82974..9d3670b52d2 100644 --- a/cabal-install/src/Distribution/Client/CmdRepl.hs +++ b/cabal-install/src/Distribution/Client/CmdRepl.hs @@ -138,6 +138,7 @@ import Distribution.Types.Library ( Library (..) , emptyLibrary ) +import Distribution.Types.ParStrat import Distribution.Types.Version ( Version , mkVersion @@ -466,6 +467,10 @@ replAction flags@NixStyleFlags{extraFlags = r@ReplFlags{..}, ..} targetStrings g in -- GHC considers the last unit passed to be the active one other_units ++ active_unit_files + render_j Serial = "1" + render_j (UseSem n) = show @Int n + render_j (NumJobs mn) = maybe "" (show @Int) mn + -- run ghc --interactive with runProgramInvocation verbosity $ programInvocation ghcProg' $ @@ -474,7 +479,7 @@ replAction flags@NixStyleFlags{extraFlags = r@ReplFlags{..}, ..} targetStrings g , "-package-env" , "-" -- to ignore ghc.environment.* files , "-j" - , show (buildSettingNumJobs (buildSettings ctx)) + , render_j (buildSettingNumJobs (buildSettings ctx)) ] : [ ["-unit", "@" ++ dir unit] | unit <- unit_files_ordered diff --git a/cabal-install/src/Distribution/Client/Config.hs b/cabal-install/src/Distribution/Client/Config.hs index 1c2b4dabb27..e522289ea6f 100644 --- a/cabal-install/src/Distribution/Client/Config.hs +++ b/cabal-install/src/Distribution/Client/Config.hs @@ -24,6 +24,7 @@ module Distribution.Client.Config , parseConfig , defaultConfigFile , defaultCacheDir + , defaultCacheHome , defaultScriptBuildsDir , defaultStoreDir , defaultCompiler @@ -795,6 +796,10 @@ defaultConfigFile :: IO FilePath defaultConfigFile = getDefaultDir XdgConfig "config" +defaultCacheHome :: IO FilePath +defaultCacheHome = + getDefaultDir XdgCache "" + defaultCacheDir :: IO FilePath defaultCacheDir = getDefaultDir XdgCache "packages" diff --git a/cabal-install/src/Distribution/Client/Errors.hs b/cabal-install/src/Distribution/Client/Errors.hs index ada3eca5268..d25c59af41e 100644 --- a/cabal-install/src/Distribution/Client/Errors.hs +++ b/cabal-install/src/Distribution/Client/Errors.hs @@ -184,6 +184,8 @@ data CabalInstallException | CorruptedIndexCache String | UnusableIndexState RemoteRepo Timestamp Timestamp | MissingPackageList RemoteRepo + | CmdPathAcceptsNoTargets + | CmdPathCommandDoesn'tSupportDryRun deriving (Show, Typeable) exceptionCodeCabalInstall :: CabalInstallException -> Int @@ -334,6 +336,8 @@ exceptionCodeCabalInstall e = case e of CorruptedIndexCache{} -> 7158 UnusableIndexState{} -> 7159 MissingPackageList{} -> 7160 + CmdPathAcceptsNoTargets{} -> 7161 + CmdPathCommandDoesn'tSupportDryRun -> 7163 exceptionMessageCabalInstall :: CabalInstallException -> String exceptionMessageCabalInstall e = case e of @@ -849,6 +853,10 @@ exceptionMessageCabalInstall e = case e of "The package list for '" ++ unRepoName (remoteRepoName repoRemote) ++ "' does not exist. Run 'cabal update' to download it." + CmdPathAcceptsNoTargets -> + "The 'path' command accepts no target arguments." + CmdPathCommandDoesn'tSupportDryRun -> + "The 'path' command doesn't support the flag '--dry-run'." instance Exception (VerboseException CabalInstallException) where displayException :: VerboseException CabalInstallException -> [Char] diff --git a/cabal-install/src/Distribution/Client/HttpUtils.hs b/cabal-install/src/Distribution/Client/HttpUtils.hs index 39bd264c744..c4d76df1e41 100644 --- a/cabal-install/src/Distribution/Client/HttpUtils.hs +++ b/cabal-install/src/Distribution/Client/HttpUtils.hs @@ -46,10 +46,10 @@ import Distribution.Simple.Program import Distribution.Simple.Program.Db ( ProgramDb , addKnownPrograms - , appendProgramSearchPath , configureAllKnownPrograms , emptyProgramDb , lookupProgram + , prependProgramSearchPath , requireProgram ) import Distribution.Simple.Program.Run @@ -192,7 +192,7 @@ downloadURI transport verbosity uri path = do -- Only use the external http transports if we actually have to -- (or have been told to do so) let transport' - | uriScheme uri == "http:" + | isHttpURI uri , not (transportManuallySelected transport) = plainHttpTransport | otherwise = @@ -251,20 +251,35 @@ downloadURI transport verbosity uri path = do -- Utilities for repo url management -- +-- | If the remote repo is accessed over HTTPS, ensure that the transport +-- supports HTTPS. remoteRepoCheckHttps :: Verbosity -> HttpTransport -> RemoteRepo -> IO () -remoteRepoCheckHttps verbosity transport repo - | uriScheme (remoteRepoURI repo) == "https:" - , not (transportSupportsHttps transport) = - dieWithException verbosity $ RemoteRepoCheckHttps (unRepoName (remoteRepoName repo)) requiresHttpsErrorMessage - | otherwise = return () +remoteRepoCheckHttps verbosity transport repo = + transportCheckHttpsWithError verbosity transport (remoteRepoURI repo) $ + RemoteRepoCheckHttps (unRepoName (remoteRepoName repo)) requiresHttpsErrorMessage +-- | If the URI scheme is HTTPS, ensure the transport supports HTTPS. transportCheckHttps :: Verbosity -> HttpTransport -> URI -> IO () -transportCheckHttps verbosity transport uri - | uriScheme uri == "https:" - , not (transportSupportsHttps transport) = - dieWithException verbosity $ TransportCheckHttps uri requiresHttpsErrorMessage +transportCheckHttps verbosity transport uri = + transportCheckHttpsWithError verbosity transport uri $ + TransportCheckHttps uri requiresHttpsErrorMessage + +-- | If the URI scheme is HTTPS, ensure the transport supports HTTPS. +-- If not, fail with the given error. +transportCheckHttpsWithError + :: Verbosity -> HttpTransport -> URI -> CabalInstallException -> IO () +transportCheckHttpsWithError verbosity transport uri err + | isHttpsURI uri + , not (transportSupportsHttps transport) + = dieWithException verbosity err | otherwise = return () +isHttpsURI :: URI -> Bool +isHttpsURI uri = uriScheme uri == "https:" + +isHttpURI :: URI -> Bool +isHttpURI uri = uriScheme uri == "http:" + requiresHttpsErrorMessage :: String requiresHttpsErrorMessage = "requires HTTPS however the built-in HTTP implementation " @@ -280,12 +295,12 @@ requiresHttpsErrorMessage = remoteRepoTryUpgradeToHttps :: Verbosity -> HttpTransport -> RemoteRepo -> IO RemoteRepo remoteRepoTryUpgradeToHttps verbosity transport repo | remoteRepoShouldTryHttps repo - , uriScheme (remoteRepoURI repo) == "http:" + , isHttpURI (remoteRepoURI repo) , not (transportSupportsHttps transport) , not (transportManuallySelected transport) = dieWithException verbosity $ TryUpgradeToHttps [name | (name, _, True, _) <- supportedTransports] | remoteRepoShouldTryHttps repo - , uriScheme (remoteRepoURI repo) == "http:" + , isHttpURI (remoteRepoURI repo) , transportSupportsHttps transport = return repo @@ -408,7 +423,7 @@ configureTransport verbosity extraPath (Just name) = case find (\(name', _, _, _) -> name' == name) supportedTransports of Just (_, mprog, _tls, mkTrans) -> do - baseProgDb <- appendProgramSearchPath verbosity extraPath emptyProgramDb + baseProgDb <- prependProgramSearchPath verbosity extraPath emptyProgramDb progdb <- case mprog of Nothing -> return emptyProgramDb Just prog -> snd <$> requireProgram verbosity prog baseProgDb @@ -424,7 +439,7 @@ configureTransport verbosity extraPath Nothing = do -- for all the transports except plain-http we need to try and find -- their external executable - baseProgDb <- appendProgramSearchPath verbosity extraPath emptyProgramDb + baseProgDb <- prependProgramSearchPath verbosity extraPath emptyProgramDb progdb <- configureAllKnownPrograms verbosity $ addKnownPrograms @@ -505,12 +520,18 @@ curlTransport prog = (Just (Left (uname, passwd)), _) -> Just $ Left (uname ++ ":" ++ passwd) (Nothing, Just a) -> Just $ Left a (Nothing, Nothing) -> Nothing + let authnSchemeArg + -- When using TLS, we can accept Basic authentication. Let curl + -- decide based on the scheme(s) offered by the server. + | isHttpsURI uri = "--anyauth" + -- When not using TLS, force Digest scheme + | otherwise = "--digest" case mbAuthStringToken of Just (Left up) -> progInvocation { progInvokeInput = Just . IODataText . unlines $ - [ "--digest" + [ authnSchemeArg , "--user " ++ up ] , progInvokeArgs = ["--config", "-"] ++ progInvokeArgs progInvocation diff --git a/cabal-install/src/Distribution/Client/Init/Interactive/Command.hs b/cabal-install/src/Distribution/Client/Init/Interactive/Command.hs index 676bf61a169..1e08e843d6f 100644 --- a/cabal-install/src/Distribution/Client/Init/Interactive/Command.hs +++ b/cabal-install/src/Distribution/Client/Init/Interactive/Command.hs @@ -456,11 +456,12 @@ languagePrompt flags pkgType = getLanguage flags $ do let h2010 = "Haskell2010" h98 = "Haskell98" ghc2021 = "GHC2021 (requires at least GHC 9.2)" + ghc2024 = "GHC2024 (requires at least GHC 9.10)" l <- promptList ("Choose a language for your " ++ pkgType) - [h2010, h98, ghc2021] + [h2010, h98, ghc2021, ghc2024] (DefaultPrompt h2010) Nothing True @@ -469,6 +470,7 @@ languagePrompt flags pkgType = getLanguage flags $ do | l == h2010 -> return Haskell2010 | l == h98 -> return Haskell98 | l == ghc2021 -> return GHC2021 + | l == ghc2024 -> return GHC2024 | otherwise -> return $ UnknownLanguage l noCommentsPrompt :: Interactive m => InitFlags -> m Bool diff --git a/cabal-install/src/Distribution/Client/Init/Licenses.hs b/cabal-install/src/Distribution/Client/Init/Licenses.hs index ef648e9351f..1f9177083bd 100644 --- a/cabal-install/src/Distribution/Client/Init/Licenses.hs +++ b/cabal-install/src/Distribution/Client/Init/Licenses.hs @@ -30,7 +30,6 @@ bsd2 :: String -> String -> License bsd2 authors year = unlines [ "Copyright (c) " ++ year ++ ", " ++ authors - , "All rights reserved." , "" , "Redistribution and use in source and binary forms, with or without" , "modification, are permitted provided that the following conditions are" @@ -48,7 +47,7 @@ bsd2 authors year = , "\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT" , "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR" , "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT" - , "OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL," + , "HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL," , "SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT" , "LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE," , "DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY" @@ -62,7 +61,6 @@ bsd3 authors year = unlines [ "Copyright (c) " ++ year ++ ", " ++ authors , "" - , "All rights reserved." , "" , "Redistribution and use in source and binary forms, with or without" , "modification, are permitted provided that the following conditions are met:" @@ -75,7 +73,7 @@ bsd3 authors year = , " disclaimer in the documentation and/or other materials provided" , " with the distribution." , "" - , " * Neither the name of " ++ authors ++ " nor the names of other" + , " * Neither the name of the copyright holder nor the names of its" , " contributors may be used to endorse or promote products derived" , " from this software without specific prior written permission." , "" @@ -83,7 +81,7 @@ bsd3 authors year = , "\"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT" , "LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR" , "A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT" - , "OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL," + , "HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL," , "SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT" , "LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE," , "DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY" diff --git a/cabal-install/src/Distribution/Client/JobControl.hs b/cabal-install/src/Distribution/Client/JobControl.hs index ec148478512..2b9f472d3dc 100644 --- a/cabal-install/src/Distribution/Client/JobControl.hs +++ b/cabal-install/src/Distribution/Client/JobControl.hs @@ -45,7 +45,6 @@ import Control.Monad (forever, replicateM_) import Distribution.Client.Compat.Semaphore import Distribution.Compat.Stack import Distribution.Simple.Utils -import Distribution.Verbosity import System.Semaphore -- | A simple concurrency abstraction. Jobs can be spawned and can complete @@ -171,13 +170,13 @@ readAllTChan qvar = go [] -- -- This uses the GHC -jsem option to allow GHC to take additional semaphore slots -- if we are not using them all. -newSemaphoreJobControl :: WithCallStack (Int -> IO (JobControl IO a)) -newSemaphoreJobControl n +newSemaphoreJobControl :: WithCallStack (Verbosity -> Int -> IO (JobControl IO a)) +newSemaphoreJobControl _ n | n < 1 || n > 1000 = error $ "newParallelJobControl: not a sensible number of jobs: " ++ show n -newSemaphoreJobControl maxJobLimit = do +newSemaphoreJobControl verbosity maxJobLimit = do sem <- freshSemaphore "cabal_semaphore" maxJobLimit - notice normal $ + notice verbosity $ "Created semaphore called " ++ getSemaphoreName (semaphoreName sem) ++ " with " diff --git a/cabal-install/src/Distribution/Client/Main.hs b/cabal-install/src/Distribution/Client/Main.hs index 6ef0a673717..59597533026 100644 --- a/cabal-install/src/Distribution/Client/Main.hs +++ b/cabal-install/src/Distribution/Client/Main.hs @@ -34,8 +34,6 @@ import Distribution.Client.Setup , InitFlags (initHcPath, initVerbosity) , InstallFlags (..) , ListFlags (..) - , Path (..) - , PathFlags (..) , ReportFlags (..) , UploadFlags (..) , UserConfigFlags (..) @@ -63,8 +61,6 @@ import Distribution.Client.Setup , listCommand , listNeedsCompiler , manpageCommand - , pathCommand - , pathName , reconfigureCommand , registerCommand , replCommand @@ -102,11 +98,7 @@ import Prelude () import Distribution.Client.Config ( SavedConfig (..) , createDefaultConfigFile - , defaultCacheDir , defaultConfigFile - , defaultInstallPath - , defaultLogsDir - , defaultStoreDir , getConfigFilePath , loadConfig , userConfigDiff @@ -137,6 +129,7 @@ import qualified Distribution.Client.CmdInstall as CmdInstall import Distribution.Client.CmdLegacy import qualified Distribution.Client.CmdListBin as CmdListBin import qualified Distribution.Client.CmdOutdated as CmdOutdated +import qualified Distribution.Client.CmdPath as CmdPath import qualified Distribution.Client.CmdRepl as CmdRepl import qualified Distribution.Client.CmdRun as CmdRun import qualified Distribution.Client.CmdSdist as CmdSdist @@ -152,7 +145,6 @@ import Distribution.Client.Install (install) -- import Distribution.Client.Clean (clean) -import Distribution.Client.CmdInstall.ClientInstallFlags (ClientInstallFlags (cinstInstalldir)) import Distribution.Client.Get (get) import Distribution.Client.Init (initCmd) import Distribution.Client.Manpage (manpageCmd) @@ -240,7 +232,6 @@ import Distribution.Simple.Utils , notice , topHandler , tryFindPackageDesc - , withOutputMarker ) import Distribution.Text ( display @@ -256,7 +247,6 @@ import Distribution.Version ) import Control.Exception (AssertionFailed, assert, try) -import Control.Monad (mapM_) import Data.Monoid (Any (..)) import Distribution.Client.Errors import Distribution.Compat.ResponseFile @@ -434,7 +424,7 @@ mainWorker args = do , regularCmd reportCommand reportAction , regularCmd initCommand initAction , regularCmd userConfigCommand userConfigAction - , regularCmd pathCommand pathAction + , regularCmd CmdPath.pathCommand CmdPath.pathAction , regularCmd genBoundsCommand genBoundsAction , regularCmd CmdOutdated.outdatedCommand CmdOutdated.outdatedAction , wrapperCmd hscolourCommand hscolourVerbosity hscolourDistPref @@ -1388,32 +1378,3 @@ manpageAction commands flags extraArgs _ = do then dropExtension pname else pname manpageCmd cabalCmd commands flags - -pathAction :: PathFlags -> [String] -> Action -pathAction pathflags extraArgs globalFlags = do - let verbosity = fromFlag (pathVerbosity pathflags) - unless (null extraArgs) $ - dieWithException verbosity $ - ManpageAction extraArgs - cfg <- loadConfig verbosity mempty - let getDir getDefault getGlobal = - maybe - getDefault - pure - (flagToMaybe $ getGlobal $ savedGlobalFlags cfg) - getSomeDir PathCacheDir = getDir defaultCacheDir globalCacheDir - getSomeDir PathLogsDir = getDir defaultLogsDir globalLogsDir - getSomeDir PathStoreDir = getDir defaultStoreDir globalStoreDir - getSomeDir PathConfigFile = getConfigFilePath (globalConfigFile globalFlags) - getSomeDir PathInstallDir = - fromFlagOrDefault defaultInstallPath (pure <$> cinstInstalldir (savedClientInstallFlags cfg)) - printPath p = putStrLn . withOutputMarker verbosity . ((pathName p ++ ": ") ++) =<< getSomeDir p - -- If no paths have been requested, print all paths with labels. - -- - -- If a single path has been requested, print that path without any label. - -- - -- If multiple paths have been requested, print each of them with labels. - case fromFlag $ pathDirs pathflags of - [] -> mapM_ printPath [minBound .. maxBound] - [d] -> putStrLn . withOutputMarker verbosity =<< getSomeDir d - ds -> mapM_ printPath ds diff --git a/cabal-install/src/Distribution/Client/ProjectBuilding.hs b/cabal-install/src/Distribution/Client/ProjectBuilding.hs index a0906686dd1..d969a109924 100644 --- a/cabal-install/src/Distribution/Client/ProjectBuilding.hs +++ b/cabal-install/src/Distribution/Client/ProjectBuilding.hs @@ -361,7 +361,7 @@ rebuildTargets NumJobs n -> newParallelJobControl (fromMaybe numberOfProcessors n) UseSem n -> if jsemSupported compiler - then newSemaphoreJobControl n + then newSemaphoreJobControl verbosity n else do warn verbosity "-jsem is not supported by the selected compiler, falling back to normal parallelism control." newParallelJobControl n diff --git a/cabal-install/src/Distribution/Client/ProjectConfig.hs b/cabal-install/src/Distribution/Client/ProjectConfig.hs index 1a19eb3f621..a66f8223d89 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig.hs @@ -8,6 +8,7 @@ module Distribution.Client.ProjectConfig ( -- * Types for project config ProjectConfig (..) + , ProjectConfigToParse (..) , ProjectConfigBuildOnly (..) , ProjectConfigShared (..) , ProjectConfigProvenance (..) @@ -57,6 +58,7 @@ module Distribution.Client.ProjectConfig ) where import Distribution.Client.Compat.Prelude +import Text.PrettyPrint (nest, render, text, vcat) import Prelude () import Distribution.Client.Glob @@ -223,6 +225,8 @@ import System.IO , withBinaryFile ) +import Distribution.Solver.Types.ProjectConfigPath + ---------------------------------------- -- Resolving configuration to settings -- @@ -741,7 +745,7 @@ readProjectFileSkeleton then do monitorFiles [monitorFileHashed extensionFile] pcs <- liftIO readExtensionFile - monitorFiles $ map monitorFileHashed (projectSkeletonImports pcs) + monitorFiles $ map monitorFileHashed (projectConfigPathRoot <$> projectSkeletonImports pcs) pure pcs else do monitorFiles [monitorNonExistentFile extensionFile] @@ -751,7 +755,7 @@ readProjectFileSkeleton readExtensionFile = reportParseResult verbosity extensionDescription extensionFile - =<< parseProjectSkeleton distDownloadSrcDirectory httpTransport verbosity [] extensionFile + =<< parseProject extensionFile distDownloadSrcDirectory httpTransport verbosity . ProjectConfigToParse =<< BS.readFile extensionFile -- | Render the 'ProjectConfig' format. @@ -788,7 +792,7 @@ readGlobalConfig verbosity configFileFlag = do reportParseResult :: Verbosity -> String -> FilePath -> OldParser.ParseResult ProjectConfigSkeleton -> IO ProjectConfigSkeleton reportParseResult verbosity _filetype filename (OldParser.ParseOk warnings x) = do unless (null warnings) $ - let msg = unlines (map (OldParser.showPWarning (intercalate ", " $ filename : projectSkeletonImports x)) warnings) + let msg = unlines (map (OldParser.showPWarning (intercalate ", " $ filename : (projectConfigPathRoot <$> projectSkeletonImports x))) warnings) in warn verbosity msg return x reportParseResult verbosity filetype filename (OldParser.ParseFailed err) = @@ -871,10 +875,10 @@ renderBadPackageLocations (BadPackageLocations provenance bpls) renderErrors f = unlines (map f bpls) renderExplicit = - "When using configuration(s) from " - ++ intercalate ", " (mapMaybe getExplicit (Set.toList provenance)) - ++ ", the following errors occurred:\n" - ++ renderErrors renderBadPackageLocation + "When using configuration from:\n" + ++ render (nest 2 . docProjectConfigPaths $ mapMaybe getExplicit (Set.toList provenance)) + ++ "\nThe following errors occurred:\n" + ++ render (nest 2 $ vcat ((text "-" <+>) . text <$> map renderBadPackageLocation bpls)) getExplicit (Explicit path) = Just path getExplicit Implicit = Nothing @@ -1192,6 +1196,7 @@ fetchAndReadSourcePackages verbosity distDirLayout projectConfigShared + (fromFlag (projectConfigOfflineMode projectConfigBuildOnly)) [repo | ProjectPackageRemoteRepo repo <- pkgLocations] let pkgsNamed = @@ -1308,6 +1313,7 @@ syncAndReadSourcePackagesRemoteRepos :: Verbosity -> DistDirLayout -> ProjectConfigShared + -> Bool -> [SourceRepoList] -> Rebuild [PackageSpecifier (SourcePackage UnresolvedPkgLoc)] syncAndReadSourcePackagesRemoteRepos @@ -1316,6 +1322,7 @@ syncAndReadSourcePackagesRemoteRepos ProjectConfigShared { projectConfigProgPathExtra } + offlineMode repos = do repos' <- either reportSourceRepoProblems return $ @@ -1370,12 +1377,18 @@ syncAndReadSourcePackagesRemoteRepos -- For syncing we don't care about different 'SourceRepo' values that -- are just different subdirs in the same repo. - syncSourceRepos - verbosity - vcs - [ (repo, repoPath) - | (repo, _, repoPath) <- repoGroupWithPaths - ] + -- Do not sync source repositories when `--offline` flag applied. + if not offlineMode + then + syncSourceRepos + verbosity + vcs + [ (repo, repoPath) + | (repo, _, repoPath) <- repoGroupWithPaths + ] + else do + liftIO . warn verbosity $ "--offline was specified, skipping sync of repositories:" + liftIO . for_ repoGroupWithPaths $ \(repo, _, _) -> warn verbosity $ srpLocation repo -- Run post-checkout-command if it is specified for_ repoGroupWithPaths $ \(repo, _, repoPath) -> diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs b/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs index d949437f5d6..3c9253c2b59 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs @@ -1,14 +1,15 @@ {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DeriveGeneric #-} -{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE ViewPatterns #-} -- | Project configuration, implementation in terms of legacy types. module Distribution.Client.ProjectConfig.Legacy ( -- Project config skeletons ProjectConfigSkeleton - , parseProjectSkeleton + , parseProject , instantiateProjectConfigSkeletonFetchingCompiler , instantiateProjectConfigSkeletonWithCompiler , singletonProjectConfigSkeleton @@ -30,6 +31,7 @@ module Distribution.Client.ProjectConfig.Legacy , renderPackageLocationToken ) where +import Data.Coerce (coerce) import Distribution.Client.Compat.Prelude import Distribution.Types.Flag (FlagName, parsecFlagAssignment) @@ -55,6 +57,7 @@ import Distribution.Client.CmdInstall.ClientInstallFlags import Distribution.Compat.Lens (toListOf, view) import Distribution.Solver.Types.ConstraintSource +import Distribution.Solver.Types.ProjectConfigPath import Distribution.Client.NixStyleOptions (NixStyleFlags (..)) import Distribution.Client.ProjectFlags (ProjectFlags (..), defaultProjectFlags, projectFlagsOptions) @@ -118,7 +121,8 @@ import Distribution.Simple.Setup , toFlag ) import Distribution.Simple.Utils - ( lowercase + ( debug + , lowercase ) import Distribution.Types.CondTree ( CondBranch (..) @@ -167,24 +171,24 @@ import Distribution.System (Arch, OS) import Distribution.Types.PackageVersionConstraint ( PackageVersionConstraint ) -import Text.PrettyPrint - ( Doc - , ($+$) - ) -import qualified Text.PrettyPrint as Disp import qualified Data.ByteString.Char8 as BS import qualified Data.Map as Map import qualified Data.Set as Set - import Network.URI (URI (..), parseURI) +import System.Directory (createDirectoryIfMissing, makeAbsolute) +import System.FilePath (isAbsolute, isPathSeparator, makeValid, splitFileName, ()) +import Text.PrettyPrint + ( Doc + , render + , ($+$) + ) +import qualified Text.PrettyPrint as Disp import Distribution.Fields.ConfVar (parseConditionConfVarFromClause) import Distribution.Client.HttpUtils import Distribution.Client.ReplFlags (multiReplOption) -import System.Directory (createDirectoryIfMissing) -import System.FilePath (isAbsolute, isPathSeparator, makeValid, takeDirectory, ()) ------------------------------------------------------------------ -- Handle extended project config files with conditionals and imports. @@ -192,9 +196,7 @@ import System.FilePath (isAbsolute, isPathSeparator, makeValid, takeDirectory, ( -- | ProjectConfigSkeleton is a tree of conditional blocks and imports wrapping a config. It can be finalized by providing the conditional resolution info -- and then resolving and downloading the imports -type ProjectConfigSkeleton = CondTree ConfVar [ProjectConfigImport] ProjectConfig - -type ProjectConfigImport = String +type ProjectConfigSkeleton = CondTree ConfVar [ProjectConfigPath] ProjectConfig singletonProjectConfigSkeleton :: ProjectConfig -> ProjectConfigSkeleton singletonProjectConfigSkeleton x = CondNode x mempty mempty @@ -212,7 +214,7 @@ instantiateProjectConfigSkeletonWithCompiler os arch impl _flags skel = go $ map go :: CondTree FlagName - [ProjectConfigImport] + [ProjectConfigPath] ProjectConfig -> ProjectConfig go (CondNode l _imps ts) = @@ -223,25 +225,60 @@ instantiateProjectConfigSkeletonWithCompiler os arch impl _flags skel = go $ map (Lit False) -> maybe ([]) ((: []) . go) mf _ -> error $ "unable to process condition: " ++ show cnd -- TODO it would be nice if there were a pretty printer -projectSkeletonImports :: ProjectConfigSkeleton -> [ProjectConfigImport] +projectSkeletonImports :: ProjectConfigSkeleton -> [ProjectConfigPath] projectSkeletonImports = view traverseCondTreeC -parseProjectSkeleton :: FilePath -> HttpTransport -> Verbosity -> [ProjectConfigImport] -> FilePath -> BS.ByteString -> IO (ParseResult ProjectConfigSkeleton) -parseProjectSkeleton cacheDir httpTransport verbosity seenImports source bs = (sanityWalkPCS False =<<) <$> liftPR (go []) (ParseUtils.readFields bs) +-- | Parses a project from its root config file, typically cabal.project. +parseProject + :: FilePath + -- ^ The root of the project configuration, typically cabal.project + -> FilePath + -> HttpTransport + -> Verbosity + -> ProjectConfigToParse + -- ^ The contents of the file to parse + -> IO (ParseResult ProjectConfigSkeleton) +parseProject rootPath cacheDir httpTransport verbosity configToParse = do + let (dir, projectFileName) = splitFileName rootPath + projectDir <- makeAbsolute dir + projectPath <- canonicalizeConfigPath projectDir (ProjectConfigPath $ projectFileName :| []) + parseProjectSkeleton cacheDir httpTransport verbosity projectDir projectPath configToParse + +parseProjectSkeleton + :: FilePath + -> HttpTransport + -> Verbosity + -> FilePath + -- ^ The directory of the project configuration, typically the directory of cabal.project + -> ProjectConfigPath + -- ^ The path of the file being parsed, either the root or an import + -> ProjectConfigToParse + -- ^ The contents of the file to parse + -> IO (ParseResult ProjectConfigSkeleton) +parseProjectSkeleton cacheDir httpTransport verbosity projectDir source (ProjectConfigToParse bs) = + (sanityWalkPCS False =<<) <$> liftPR (go []) (ParseUtils.readFields bs) where go :: [ParseUtils.Field] -> [ParseUtils.Field] -> IO (ParseResult ProjectConfigSkeleton) go acc (x : xs) = case x of - (ParseUtils.F l "import" importLoc) -> - if importLoc `elem` seenImports - then pure . parseFail $ ParseUtils.FromString ("cyclical import of " ++ importLoc) (Just l) + (ParseUtils.F _ "import" importLoc) -> do + let importLocPath = importLoc `consProjectConfigPath` source + + -- Once we canonicalize the import path, we can check for cyclical imports + normLocPath <- canonicalizeConfigPath projectDir importLocPath + + debug verbosity $ "\nimport path, normalized\n=======================\n" ++ render (docProjectConfigPath normLocPath) + + if isCyclicConfigPath normLocPath + then pure . parseFail $ ParseUtils.FromString (render $ cyclicalImportMsg normLocPath) Nothing else do - let fs = fmap (\z -> CondNode z [importLoc] mempty) $ fieldsToConfig (reverse acc) - res <- parseProjectSkeleton cacheDir httpTransport verbosity (importLoc : seenImports) importLoc =<< fetchImportConfig importLoc + normSource <- canonicalizeConfigPath projectDir source + let fs = (\z -> CondNode z [normLocPath] mempty) <$> fieldsToConfig normSource (reverse acc) + res <- parseProjectSkeleton cacheDir httpTransport verbosity projectDir importLocPath . ProjectConfigToParse =<< fetchImportConfig normLocPath rest <- go [] xs pure . fmap mconcat . sequence $ [fs, res, rest] (ParseUtils.Section l "if" p xs') -> do subpcs <- go [] xs' - let fs = fmap singletonProjectConfigSkeleton $ fieldsToConfig (reverse acc) + let fs = singletonProjectConfigSkeleton <$> fieldsToConfig source (reverse acc) (elseClauses, rest) <- parseElseClauses xs let condNode = (\c pcs e -> CondNode mempty mempty [CondBranch c pcs e]) @@ -252,7 +289,9 @@ parseProjectSkeleton cacheDir httpTransport verbosity seenImports source bs = (s <*> elseClauses pure . fmap mconcat . sequence $ [fs, condNode, rest] _ -> go (x : acc) xs - go acc [] = pure . fmap singletonProjectConfigSkeleton . fieldsToConfig $ reverse acc + go acc [] = do + normSource <- canonicalizeConfigPath projectDir source + pure . fmap singletonProjectConfigSkeleton . fieldsToConfig normSource $ reverse acc parseElseClauses :: [ParseUtils.Field] -> IO (ParseResult (Maybe ProjectConfigSkeleton), ParseResult ProjectConfigSkeleton) parseElseClauses x = case x of @@ -271,8 +310,18 @@ parseProjectSkeleton cacheDir httpTransport verbosity seenImports source bs = (s pure (Just <$> condNode, rest) _ -> (\r -> (pure Nothing, r)) <$> go [] x - fieldsToConfig xs = fmap (addProvenance . convertLegacyProjectConfig) $ parseLegacyProjectConfigFields source xs - addProvenance x = x{projectConfigProvenance = Set.singleton (Explicit source)} + -- We want a normalized path for @fieldsToConfig@. This eventually surfaces + -- in solver rejection messages and build messages "this build was affected + -- by the following (project) config files" so we want all paths shown there + -- to be relative to the directory of the project, not relative to the file + -- they were imported from. + fieldsToConfig :: ProjectConfigPath -> [ParseUtils.Field] -> ParseResult ProjectConfig + fieldsToConfig sourceConfigPath xs = + addProvenance sourceConfigPath . convertLegacyProjectConfig + <$> parseLegacyProjectConfigFields sourceConfigPath xs + + addProvenance :: ProjectConfigPath -> ProjectConfig -> ProjectConfig + addProvenance sourcePath x = x{projectConfigProvenance = Set.singleton $ Explicit sourcePath} adaptParseError _ (Right x) = pure x adaptParseError l (Left e) = parseFail $ ParseUtils.FromString (show e) (Just l) @@ -284,8 +333,13 @@ parseProjectSkeleton cacheDir httpTransport verbosity seenImports source bs = (s addWarnings x' = x' liftPR _ (ParseFailed e) = pure $ ParseFailed e - fetchImportConfig :: ProjectConfigImport -> IO BS.ByteString - fetchImportConfig pci = case parseURI pci of + fetchImportConfig :: ProjectConfigPath -> IO BS.ByteString + fetchImportConfig (ProjectConfigPath (pci :| _)) = do + debug verbosity $ "fetching import: " ++ pci + fetch pci + + fetch :: FilePath -> IO BS.ByteString + fetch pci = case parseURI pci of Just uri -> do let fp = cacheDir map (\x -> if isPathSeparator x then '_' else x) (makeValid $ show uri) createDirectoryIfMissing True cacheDir @@ -293,7 +347,7 @@ parseProjectSkeleton cacheDir httpTransport verbosity seenImports source bs = (s BS.readFile fp Nothing -> BS.readFile $ - if isAbsolute pci then pci else takeDirectory source pci + if isAbsolute pci then pci else coerce projectDir pci modifiesCompiler :: ProjectConfig -> Bool modifiesCompiler pc = isSet projectConfigHcFlavor || isSet projectConfigHcPath || isSet projectConfigHcPkg @@ -305,8 +359,8 @@ parseProjectSkeleton cacheDir httpTransport verbosity seenImports source bs = (s | underConditional && modifiesCompiler d = parseFail $ ParseUtils.FromString "Cannot set compiler in a conditional clause of a cabal project file" Nothing | otherwise = mapM_ sanityWalkBranch comps >> pure t - sanityWalkBranch :: CondBranch ConfVar [ProjectConfigImport] ProjectConfig -> ParseResult () - sanityWalkBranch (CondBranch _c t f) = traverse (sanityWalkPCS True) f >> sanityWalkPCS True t >> pure () + sanityWalkBranch :: CondBranch ConfVar [ProjectConfigPath] ProjectConfig -> ParseResult () + sanityWalkBranch (CondBranch _c t f) = traverse_ (sanityWalkPCS True) f >> sanityWalkPCS True t >> pure () ------------------------------------------------------------------ -- Representing the project config file in terms of legacy types @@ -1177,18 +1231,17 @@ convertToLegacyPerPackageConfig PackageConfig{..} = -- Parsing and showing the project config file -- -parseLegacyProjectConfigFields :: FilePath -> [ParseUtils.Field] -> ParseResult LegacyProjectConfig -parseLegacyProjectConfigFields source = +parseLegacyProjectConfigFields :: ProjectConfigPath -> [ParseUtils.Field] -> ParseResult LegacyProjectConfig +parseLegacyProjectConfigFields (ConstraintSourceProjectConfig -> constraintSrc) = parseFieldsAndSections (legacyProjectConfigFieldDescrs constraintSrc) legacyPackageConfigSectionDescrs legacyPackageConfigFGSectionDescrs mempty - where - constraintSrc = ConstraintSourceProjectConfig source parseLegacyProjectConfig :: FilePath -> BS.ByteString -> ParseResult LegacyProjectConfig -parseLegacyProjectConfig source bs = parseLegacyProjectConfigFields source =<< ParseUtils.readFields bs +parseLegacyProjectConfig rootConfig bs = + parseLegacyProjectConfigFields (ProjectConfigPath $ rootConfig :| []) =<< ParseUtils.readFields bs showLegacyProjectConfig :: LegacyProjectConfig -> String showLegacyProjectConfig config = @@ -1203,7 +1256,7 @@ showLegacyProjectConfig config = -- Note: ConstraintSource is unused when pretty-printing. We fake -- it here to avoid having to pass it on call-sites. It's not great -- but requires re-work of how we annotate provenance. - constraintSrc = ConstraintSourceProjectConfig "unused" + constraintSrc = ConstraintSourceProjectConfig nullProjectConfigPath legacyProjectConfigFieldDescrs :: ConstraintSource -> [FieldDescr LegacyProjectConfig] legacyProjectConfigFieldDescrs constraintSrc = diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs b/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs index 744a50ddc37..3e8e3ba1b07 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs @@ -6,6 +6,7 @@ module Distribution.Client.ProjectConfig.Types ( -- * Types for project config ProjectConfig (..) + , ProjectConfigToParse (..) , ProjectConfigBuildOnly (..) , ProjectConfigShared (..) , ProjectConfigProvenance (..) @@ -26,6 +27,7 @@ module Distribution.Client.ProjectConfig.Types import Distribution.Client.Compat.Prelude import Prelude () +import qualified Data.ByteString.Char8 as BS import Distribution.Client.BuildReports.Types ( ReportLevel (..) ) @@ -94,12 +96,18 @@ import Distribution.Version ) import qualified Data.Map as Map +import Distribution.Solver.Types.ProjectConfigPath (ProjectConfigPath) import Distribution.Types.ParStrat ------------------------------- -- Project config types -- +-- | The project configuration is configuration that is parsed but parse +-- configuration may import more configuration. Holds the unparsed contents of +-- an imported file contributing to the project config. +newtype ProjectConfigToParse = ProjectConfigToParse BS.ByteString + -- | This type corresponds directly to what can be written in the -- @cabal.project@ file. Other sources of configuration can also be injected -- into this type, such as the user-wide config file and the @@ -238,8 +246,8 @@ data ProjectConfigProvenance -- for how implicit configuration is determined. Implicit | -- | The path the project configuration was explicitly read from. - -- | The configuration was explicitly read from the specified 'FilePath'. - Explicit FilePath + -- | The configuration was explicitly read from the specified 'ProjectConfigPath'. + Explicit ProjectConfigPath deriving (Eq, Ord, Show, Generic) -- | Project configuration that is specific to each package, that is where we diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning.hs b/cabal-install/src/Distribution/Client/ProjectPlanning.hs index f779001dc91..0c4facf1cf5 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning.hs @@ -98,6 +98,7 @@ module Distribution.Client.ProjectPlanning ) where import Distribution.Client.Compat.Prelude +import Text.PrettyPrint (render) import Prelude () import Distribution.Client.Config @@ -208,6 +209,7 @@ import qualified Data.List.NonEmpty as NE import qualified Data.Map as Map import qualified Data.Set as Set import Distribution.Client.Errors +import Distribution.Solver.Types.ProjectConfigPath import System.FilePath import Text.PrettyPrint (colon, comma, fsep, hang, punctuate, quotes, text, vcat, ($$)) import qualified Text.PrettyPrint as Disp @@ -384,12 +386,13 @@ rebuildProjectConfig localPackages <- phaseReadLocalPackages (projectConfig <> cliConfig) return (projectConfig, localPackages) - info verbosity $ - unlines $ - ("this build was affected by the following (project) config files:" :) $ - [ "- " ++ path - | Explicit path <- Set.toList $ projectConfigProvenance projectConfig - ] + sequence_ + [ do + info verbosity . render . vcat $ + text "this build was affected by the following (project) config files:" + : [text "-" <+> docProjectConfigPath path] + | Explicit path <- Set.toList $ projectConfigProvenance projectConfig + ] return (projectConfig <> cliConfig, localPackages) where @@ -471,7 +474,7 @@ configureCompiler ) $ do liftIO $ info verbosity "Compiler settings changed, reconfiguring..." - progdb <- liftIO $ appendProgramSearchPath verbosity (fromNubList packageConfigProgramPathExtra) defaultProgramDb + progdb <- liftIO $ prependProgramSearchPath verbosity (fromNubList packageConfigProgramPathExtra) defaultProgramDb let progdb' = userSpecifyPaths (Map.toList (getMapLast packageConfigProgramPaths)) progdb result@(_, _, progdb'') <- liftIO $ @@ -1366,6 +1369,7 @@ planPackages -- TODO: long-term, this compatibility matrix should be -- stored as a field inside 'Distribution.Compiler.Compiler' setupMinCabalVersionConstraint + | isGHC, compVer >= mkVersion [9, 10] = mkVersion [3, 12] | isGHC, compVer >= mkVersion [9, 6] = mkVersion [3, 10] | isGHC, compVer >= mkVersion [9, 4] = mkVersion [3, 8] | isGHC, compVer >= mkVersion [9, 2] = mkVersion [3, 6] diff --git a/cabal-install/src/Distribution/Client/ScriptUtils.hs b/cabal-install/src/Distribution/Client/ScriptUtils.hs index 1793f6aa07d..cb2e05c1676 100644 --- a/cabal-install/src/Distribution/Client/ScriptUtils.hs +++ b/cabal-install/src/Distribution/Client/ScriptUtils.hs @@ -59,8 +59,9 @@ import Distribution.Client.ProjectConfig import Distribution.Client.ProjectConfig.Legacy ( ProjectConfigSkeleton , instantiateProjectConfigSkeletonFetchingCompiler - , parseProjectSkeleton + , parseProject ) +import Distribution.Client.ProjectConfig.Types (ProjectConfigToParse (..)) import Distribution.Client.ProjectFlags ( flagIgnoreProject ) @@ -299,15 +300,23 @@ withContextAndSelectors noTargets kind flags@NixStyleFlags{..} targetStrings glo (withGlobalConfig verbosity globalConfigFlag $ withoutProject mkTmpDir) (tc', ctx', sels) <- case targetStrings of - -- Only script targets may contain spaces and or end with ':'. + -- Only script targets may end with ':'. -- Trying to readTargetSelectors such a target leads to a parse error. - [target] | any (\c -> isSpace c) target || ":" `isSuffixOf` target -> do + [target] | ":" `isSuffixOf` target -> do scriptOrError target [TargetSelectorNoScript $ TargetString1 target] _ -> do -- In the case where a selector is both a valid target and script, assume it is a target, -- because you can disambiguate the script with "./script" readTargetSelectors (localPackages ctx) kind targetStrings >>= \case + -- If there are no target selectors and no targets are fine, return + -- the context + Left (TargetSelectorNoTargetsInCwd{} : _) + | [] <- targetStrings + , AcceptNoTargets <- noTargets -> + return (tc, ctx, defaultTarget) Left err@(TargetSelectorNoTargetsInProject : _) + -- If there are no target selectors and no targets are fine, return + -- the context | [] <- targetStrings , AcceptNoTargets <- noTargets -> return (tc, ctx, defaultTarget) @@ -510,7 +519,7 @@ readProjectBlockFromScript verbosity httpTransport DistDirLayout{distDownloadSrc Left _ -> return mempty Right x -> reportParseResult verbosity "script" scriptName - =<< parseProjectSkeleton distDownloadSrcDirectory httpTransport verbosity [] scriptName x + =<< parseProject scriptName distDownloadSrcDirectory httpTransport verbosity (ProjectConfigToParse x) -- | Extract the first encountered script metadata block started end -- terminated by the tokens diff --git a/cabal-install/src/Distribution/Client/Setup.hs b/cabal-install/src/Distribution/Client/Setup.hs index 85cc7665647..222b53b9967 100644 --- a/cabal-install/src/Distribution/Client/Setup.hs +++ b/cabal-install/src/Distribution/Client/Setup.hs @@ -86,10 +86,6 @@ module Distribution.Client.Setup , cleanCommand , copyCommand , registerCommand - , Path (..) - , pathName - , PathFlags (..) - , pathCommand , liftOptions , yesNoOpt ) where @@ -354,7 +350,6 @@ globalCommand commands = ++ unlines ( [ startGroup "global" , addCmd "user-config" - , addCmd "path" , addCmd "help" , par , startGroup "package database" @@ -372,6 +367,7 @@ globalCommand commands = , addCmd "freeze" , addCmd "gen-bounds" , addCmd "outdated" + , addCmd "path" , par , startGroup "project building and installing" , addCmd "build" @@ -3366,73 +3362,6 @@ userConfigCommand = -- ------------------------------------------------------------ --- * Dirs - --- ------------------------------------------------------------ - --- | A path that can be retrieved by the @cabal path@ command. -data Path - = PathCacheDir - | PathLogsDir - | PathStoreDir - | PathConfigFile - | PathInstallDir - deriving (Eq, Ord, Show, Enum, Bounded) - --- | The configuration name for this path. -pathName :: Path -> String -pathName PathCacheDir = "cache-dir" -pathName PathLogsDir = "logs-dir" -pathName PathStoreDir = "store-dir" -pathName PathConfigFile = "config-file" -pathName PathInstallDir = "installdir" - -data PathFlags = PathFlags - { pathVerbosity :: Flag Verbosity - , pathDirs :: Flag [Path] - } - deriving (Generic) - -instance Monoid PathFlags where - mempty = - PathFlags - { pathVerbosity = toFlag normal - , pathDirs = toFlag [] - } - mappend = (<>) - -instance Semigroup PathFlags where - (<>) = gmappend - -pathCommand :: CommandUI PathFlags -pathCommand = - CommandUI - { commandName = "path" - , commandSynopsis = "Display paths used by cabal" - , commandDescription = Just $ \_ -> - wrapText $ - "This command prints the directories that are used by cabal," - ++ " taking into account the contents of the configuration file and any" - ++ " environment variables." - , commandNotes = Nothing - , commandUsage = \pname -> "Usage: " ++ pname ++ " path\n" - , commandDefaultFlags = mempty - , commandOptions = \_ -> - map pathOption [minBound .. maxBound] - ++ [optionVerbosity pathVerbosity (\v flags -> flags{pathVerbosity = v})] - } - where - pathOption s = - option - [] - [pathName s] - ("Print " <> pathName s) - pathDirs - (\v flags -> flags{pathDirs = Flag $ concat (flagToList (pathDirs flags) ++ flagToList v)}) - (noArg (Flag [s])) - --- ------------------------------------------------------------ - -- * GetOpt Utils -- ------------------------------------------------------------ diff --git a/cabal-install/src/Distribution/Client/SetupWrapper.hs b/cabal-install/src/Distribution/Client/SetupWrapper.hs index eba9b833d9d..b3174c96751 100644 --- a/cabal-install/src/Distribution/Client/SetupWrapper.hs +++ b/cabal-install/src/Distribution/Client/SetupWrapper.hs @@ -89,7 +89,7 @@ import Distribution.Simple.Program , runDbProgram ) import Distribution.Simple.Program.Db - ( appendProgramSearchPath + ( prependProgramSearchPath ) import Distribution.Simple.Program.Find ( programSearchPathAsPATHVar @@ -539,7 +539,7 @@ invoke verbosity path args options = do Nothing -> return () Just logHandle -> info verbosity $ "Redirecting build log to " ++ show logHandle - progDb <- appendProgramSearchPath verbosity (useExtraPathEnv options) (useProgramDb options) + progDb <- prependProgramSearchPath verbosity (useExtraPathEnv options) (useProgramDb options) searchpath <- programSearchPathAsPATHVar $ getProgramSearchPath progDb diff --git a/cabal-install/src/Distribution/Client/TargetSelector.hs b/cabal-install/src/Distribution/Client/TargetSelector.hs index d29413642de..2390006d231 100644 --- a/cabal-install/src/Distribution/Client/TargetSelector.hs +++ b/cabal-install/src/Distribution/Client/TargetSelector.hs @@ -101,6 +101,11 @@ import Control.Arrow ((&&&)) import Control.Monad hiding ( mfilter ) +#if MIN_VERSION_base(4,20,0) +import Data.Functor as UZ (unzip) +#else +import qualified Data.List.NonEmpty as UZ (unzip) +#endif import Data.List ( stripPrefix ) @@ -322,13 +327,13 @@ parseTargetString = parseTargetApprox :: Parse.ReadP r TargetString parseTargetApprox = ( do - a <- tokenQ + a <- tokenQEnd return (TargetString1 a) ) +++ ( do a <- tokenQ0 _ <- Parse.char ':' - b <- tokenQ + b <- tokenQEnd return (TargetString2 a b) ) +++ ( do @@ -336,7 +341,7 @@ parseTargetString = _ <- Parse.char ':' b <- tokenQ _ <- Parse.char ':' - c <- tokenQ + c <- tokenQEnd return (TargetString3 a b c) ) +++ ( do @@ -346,7 +351,7 @@ parseTargetString = _ <- Parse.char ':' c <- tokenQ _ <- Parse.char ':' - d <- tokenQ + d <- tokenQEnd return (TargetString4 a b c d) ) +++ ( do @@ -358,7 +363,7 @@ parseTargetString = _ <- Parse.char ':' d <- tokenQ _ <- Parse.char ':' - e <- tokenQ + e <- tokenQEnd return (TargetString5 a b c d e) ) +++ ( do @@ -374,7 +379,7 @@ parseTargetString = _ <- Parse.char ':' f <- tokenQ _ <- Parse.char ':' - g <- tokenQ + g <- tokenQEnd return (TargetString7 a b c d e f g) ) @@ -382,6 +387,8 @@ parseTargetString = tokenQ = parseHaskellString <++ token token0 = Parse.munch (\x -> not (isSpace x) && x /= ':') tokenQ0 = parseHaskellString <++ token0 + tokenEnd = Parse.munch1 (/= ':') + tokenQEnd = parseHaskellString <++ tokenEnd parseHaskellString :: Parse.ReadP r String parseHaskellString = Parse.readS_to_P reads @@ -581,7 +588,7 @@ resolveTargetSelector knowntargets@KnownTargets{..} mfilter targetStrStatus = classifyMatchErrors errs | Just expectedNE <- NE.nonEmpty expected = - let (things, got :| _) = NE.unzip expectedNE + let (things, got :| _) = UZ.unzip expectedNE in TargetSelectorExpected targetStr (NE.toList things) got | not (null nosuch) = TargetSelectorNoSuch targetStr nosuch diff --git a/cabal-install/src/Distribution/Client/VCS.hs b/cabal-install/src/Distribution/Client/VCS.hs index f3403029827..7c071de31eb 100644 --- a/cabal-install/src/Distribution/Client/VCS.hs +++ b/cabal-install/src/Distribution/Client/VCS.hs @@ -62,7 +62,7 @@ import Distribution.Simple.Program , simpleProgram ) import Distribution.Simple.Program.Db - ( appendProgramSearchPath + ( prependProgramSearchPath ) import Distribution.Types.SourceRepo ( KnownRepoType (..) @@ -206,7 +206,7 @@ configureVCS -> VCS Program -> IO (VCS ConfiguredProgram) configureVCS verbosity progPaths vcs@VCS{vcsProgram = prog} = do - progPath <- appendProgramSearchPath verbosity progPaths emptyProgramDb + progPath <- prependProgramSearchPath verbosity progPaths emptyProgramDb asVcsConfigured <$> requireProgram verbosity prog progPath where asVcsConfigured (prog', _) = vcs{vcsProgram = prog'} diff --git a/cabal-install/tests/IntegrationTests2.hs b/cabal-install/tests/IntegrationTests2.hs index 55ea3747b9f..487c99d8819 100644 --- a/cabal-install/tests/IntegrationTests2.hs +++ b/cabal-install/tests/IntegrationTests2.hs @@ -260,11 +260,14 @@ testTargetSelectors reportSubCase = do ":pkg:q:lib:q:file:Q.y" , "app/Main.hs", "p:app/Main.hs", "exe:ppexe:app/Main.hs", "p:ppexe:app/Main.hs", ":pkg:p:exe:ppexe:file:app/Main.hs" + , "a p p/Main.hs", "p:a p p/Main.hs", "exe:pppexe:a p p/Main.hs", "p:pppexe:a p p/Main.hs", + ":pkg:p:exe:pppexe:file:a p p/Main.hs" ] ts @?= replicate 5 (TargetComponent "p-0.1" (CLibName LMainLibName) (FileTarget "P")) ++ replicate 5 (TargetComponent "q-0.1" (CLibName LMainLibName) (FileTarget "QQ")) ++ replicate 5 (TargetComponent "q-0.1" (CLibName LMainLibName) (FileTarget "Q")) ++ replicate 5 (TargetComponent "p-0.1" (CExeName "ppexe") (FileTarget ("app" "Main.hs"))) + ++ replicate 5 (TargetComponent "p-0.1" (CExeName "pppexe") (FileTarget ("a p p" "Main.hs"))) -- Note there's a bit of an inconsistency here: for the single-part -- syntax the target has to point to a file that exists, whereas for -- all the other forms we don't require that. @@ -278,9 +281,8 @@ testTargetSelectors reportSubCase = do testTargetSelectorBadSyntax :: Assertion testTargetSelectorBadSyntax = do (_, _, _, localPackages, _) <- configureProject testdir config - let targets = [ "foo bar", " foo" - , "foo:", "foo::bar" - , "foo: ", "foo: :bar" + let targets = [ "foo:", "foo::bar" + , " :foo", "foo: :bar" , "a:b:c:d:e:f", "a:b:c:d:e:f:g:h" ] Left errs <- readTargetSelectors localPackages Nothing targets zipWithM_ (@?=) errs (map TargetSelectorUnrecognised targets) @@ -1436,9 +1438,11 @@ testSetupScriptStyles config reportSubCase = do let isOSX (Platform _ OSX) = True isOSX _ = False + compilerVer = compilerVersion (pkgConfigCompiler sharedConfig) -- Skip the Custom tests when the shipped Cabal library is buggy - unless (isOSX (pkgConfigPlatform sharedConfig) - && compilerVersion (pkgConfigCompiler sharedConfig) < mkVersion [7,10]) $ do + unless ((isOSX (pkgConfigPlatform sharedConfig) && (compilerVer < mkVersion [7,10])) + -- 9.10 ships Cabal 3.12.0.0 affected by #9940 + || (mkVersion [9,10] <= compilerVer && compilerVer < mkVersion [9,11])) $ do (plan1, res1) <- executePlan plan0 pkg1 <- expectPackageInstalled plan1 res1 pkgidA diff --git a/cabal-install/tests/IntegrationTests2/.gitignore b/cabal-install/tests/IntegrationTests2/.gitignore index ceb5549d4e8..7df6974cf10 100644 --- a/cabal-install/tests/IntegrationTests2/.gitignore +++ b/cabal-install/tests/IntegrationTests2/.gitignore @@ -1 +1 @@ -config/default-config \ No newline at end of file +config/default-config diff --git a/cabal-install/tests/IntegrationTests2/build/ignore-project/cabal.project b/cabal-install/tests/IntegrationTests2/build/ignore-project/cabal.project index 3b1b4b67d20..f704d26df20 100644 --- a/cabal-install/tests/IntegrationTests2/build/ignore-project/cabal.project +++ b/cabal-install/tests/IntegrationTests2/build/ignore-project/cabal.project @@ -1,3 +1,3 @@ packages: . -coverage: true \ No newline at end of file +coverage: true diff --git a/cabal-install/tests/IntegrationTests2/targets/simple/a p p/Main.hs b/cabal-install/tests/IntegrationTests2/targets/simple/a p p/Main.hs new file mode 100644 index 00000000000..e69de29bb2d diff --git a/cabal-install/tests/IntegrationTests2/targets/simple/p.cabal b/cabal-install/tests/IntegrationTests2/targets/simple/p.cabal index 75b24e0eadc..33ffc0d3a5f 100644 --- a/cabal-install/tests/IntegrationTests2/targets/simple/p.cabal +++ b/cabal-install/tests/IntegrationTests2/targets/simple/p.cabal @@ -15,3 +15,8 @@ executable ppexe main-is: Main.hs hs-source-dirs: app other-modules: PMain + +executable pppexe + main-is: Main.hs + hs-source-dirs: "a p p" + other-modules: PMain diff --git a/cabal-install/tests/UnitTests/Distribution/Client/Configure.hs b/cabal-install/tests/UnitTests/Distribution/Client/Configure.hs index c570d7a738a..52a23a80ef2 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/Configure.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/Configure.hs @@ -23,13 +23,22 @@ tests = [ configureTests ] +defaultTestFlags :: NixStyleFlags () +defaultTestFlags = + (defaultNixStyleFlags ()) + { projectFlags = + mempty + { flagProjectDir = Flag projectDir + } + } + configureTests :: TestTree configureTests = testGroup "Configure tests" [ testCase "New config" $ do let flags = - (defaultNixStyleFlags ()) + defaultTestFlags { configFlags = mempty { configOptimization = Flag MaximumOptimisation @@ -42,7 +51,7 @@ configureTests = @=? (packageConfigOptimization . projectConfigLocalPackages $ snd projConfig) , testCase "Replacement + new config" $ do let flags = - (defaultNixStyleFlags ()) + defaultTestFlags { configExFlags = mempty { configAppend = Flag True @@ -52,10 +61,6 @@ configureTests = { configOptimization = Flag NoOptimisation , configVerbosity = Flag silent } - , projectFlags = - mempty - { flagProjectDir = Flag projectDir - } } (_, ProjectConfig{..}) <- configureAction' flags [] defaultGlobalFlags @@ -63,7 +68,7 @@ configureTests = Flag silent @=? projectConfigVerbosity projectConfigBuildOnly , testCase "Old + new config" $ do let flags = - (defaultNixStyleFlags ()) + defaultTestFlags { configExFlags = mempty { configAppend = Flag True @@ -72,10 +77,6 @@ configureTests = mempty { configVerbosity = Flag silent } - , projectFlags = - mempty - { flagProjectDir = Flag projectDir - } } (_, ProjectConfig{..}) <- configureAction' flags [] defaultGlobalFlags @@ -83,15 +84,11 @@ configureTests = Flag silent @=? projectConfigVerbosity projectConfigBuildOnly , testCase "Old + new config, no appending" $ do let flags = - (defaultNixStyleFlags ()) + defaultTestFlags { configFlags = mempty { configVerbosity = Flag silent } - , projectFlags = - mempty - { flagProjectDir = Flag projectDir - } } (_, ProjectConfig{..}) <- configureAction' flags [] defaultGlobalFlags @@ -99,15 +96,11 @@ configureTests = Flag silent @=? projectConfigVerbosity projectConfigBuildOnly , testCase "Old + new config, backup check" $ do let flags = - (defaultNixStyleFlags ()) + defaultTestFlags { configFlags = mempty { configVerbosity = Flag silent } - , projectFlags = - mempty - { flagProjectDir = Flag projectDir - } } backup = projectDir "cabal.project.local~" @@ -122,16 +115,12 @@ configureTests = , testCase "Local program options" $ do let ghcFlags = ["-fno-full-laziness"] flags = - (defaultNixStyleFlags ()) + defaultTestFlags { configFlags = mempty { configVerbosity = Flag silent , configProgramArgs = [("ghc", ghcFlags)] } - , projectFlags = - mempty - { flagProjectDir = Flag projectDir - } } (_, ProjectConfig{..}) <- configureAction' flags [] defaultGlobalFlags diff --git a/cabal-install/tests/UnitTests/Distribution/Client/Get.hs b/cabal-install/tests/UnitTests/Distribution/Client/Get.hs index c033c05f93a..2788a21ac00 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/Get.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/Get.hs @@ -216,7 +216,7 @@ testNetworkGitClone = Nothing [] [(mkpkgid "zlib1", [repo1])] - assertFileContains (tmpdir "zlib1/zlib.cabal") ["name:", "zlib"] + assertFileContains (tmpdir "zlib1/zlib/zlib.cabal") ["name:", "zlib"] let repo2 = (emptySourceRepo RepoHead) @@ -229,7 +229,7 @@ testNetworkGitClone = Nothing [] [(mkpkgid "zlib2", [repo2])] - assertFileContains (tmpdir "zlib2/zlib.cabal") ["name:", "zlib"] + assertFileContains (tmpdir "zlib2/zlib/zlib.cabal") ["name:", "zlib"] let repo3 = (emptySourceRepo RepoHead) diff --git a/cabal-install/tests/UnitTests/Distribution/Client/Init/Interactive.hs b/cabal-install/tests/UnitTests/Distribution/Client/Init/Interactive.hs index c0e0bc7dcc8..15714bba952 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/Init/Interactive.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/Init/Interactive.hs @@ -1014,19 +1014,19 @@ interactiveTests srcDb = [ testNumberedPrompt "Language indices" (`languagePrompt` "test") - [Haskell2010, Haskell98, GHC2021] + [Haskell2010, Haskell98, GHC2021, GHC2024] , testSimplePrompt "Other language" (`languagePrompt` "test") (UnknownLanguage "Haskell2022") - [ "4" + [ "5" , "Haskell2022" ] , testSimplePrompt "Invalid language" (`languagePrompt` "test") (UnknownLanguage "Lang_TS!") - [ "4" + [ "5" , "Lang_TS!" ] ] diff --git a/cabal-install/tests/UnitTests/Distribution/Client/Init/NonInteractive.hs b/cabal-install/tests/UnitTests/Distribution/Client/Init/NonInteractive.hs index d35ab35a659..cd618622201 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/Init/NonInteractive.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/Init/NonInteractive.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE LambdaCase #-} module UnitTests.Distribution.Client.Init.NonInteractive @@ -12,7 +13,9 @@ import UnitTests.Distribution.Client.Init.Utils import qualified Data.List.NonEmpty as NEL import qualified Distribution.SPDX as SPDX +#if !MIN_VERSION_base(4,20,0) import Data.List (foldl') +#endif import qualified Data.Set as Set import Distribution.CabalSpecVersion import Distribution.Client.Init.Defaults diff --git a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs index cdb34a3534c..abdc1e79390 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs @@ -18,6 +18,7 @@ import Control.Monad import Data.Either (isRight) import Data.Foldable (for_) import Data.List (intercalate, isPrefixOf, (\\)) +import Data.List.NonEmpty (NonEmpty (..)) import Data.Map (Map) import qualified Data.Map as Map import Data.Maybe (fromMaybe) @@ -53,6 +54,7 @@ import Distribution.Verbosity (silent) import Distribution.Solver.Types.ConstraintSource import Distribution.Solver.Types.PackageConstraint +import Distribution.Solver.Types.ProjectConfigPath import Distribution.Solver.Types.Settings import Distribution.Client.ProjectConfig @@ -645,11 +647,10 @@ instance Arbitrary ProjectConfigShared where postShrink_Constraints = map (\uc -> (uc, projectConfigConstraintSource)) projectConfigConstraintSource :: ConstraintSource -projectConfigConstraintSource = - ConstraintSourceProjectConfig "unused" +projectConfigConstraintSource = ConstraintSourceProjectConfig nullProjectConfigPath instance Arbitrary ProjectConfigProvenance where - arbitrary = elements [Implicit, Explicit "cabal.project"] + arbitrary = elements [Implicit, Explicit (ProjectConfigPath $ "cabal.project" :| [])] instance Arbitrary PackageConfig where arbitrary = diff --git a/cabal-install/tests/UnitTests/Distribution/Client/TreeDiffInstances.hs b/cabal-install/tests/UnitTests/Distribution/Client/TreeDiffInstances.hs index 495c4cbf402..0dede72858a 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/TreeDiffInstances.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/TreeDiffInstances.hs @@ -6,6 +6,7 @@ module UnitTests.Distribution.Client.TreeDiffInstances () where import Distribution.Solver.Types.ConstraintSource import Distribution.Solver.Types.OptionalStanza import Distribution.Solver.Types.PackageConstraint +import Distribution.Solver.Types.ProjectConfigPath import Distribution.Solver.Types.Settings import Distribution.Client.BuildReports.Types @@ -39,6 +40,7 @@ instance ToExpr AllowOlder instance ToExpr BuildReport instance ToExpr ClientInstallFlags instance ToExpr CombineStrategy +instance ToExpr ProjectConfigPath instance ToExpr ConstraintSource instance ToExpr CountConflicts instance ToExpr FineGrainedConflicts diff --git a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/Solver.hs b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/Solver.hs index 3d5b965ba06..a1f5eed3c62 100644 --- a/cabal-install/tests/UnitTests/Distribution/Solver/Modular/Solver.hs +++ b/cabal-install/tests/UnitTests/Distribution/Solver/Modular/Solver.hs @@ -13,6 +13,7 @@ import qualified Distribution.Version as V -- test-framework import Test.Tasty as TF +import Test.Tasty.ExpectedFailure -- Cabal import Language.Haskell.Extension @@ -181,6 +182,8 @@ tests = , runTest $ mkTest db9 "setupDeps7" ["F", "G"] (solverSuccess [("A", 1), ("B", 1), ("B", 2), ("C", 1), ("D", 1), ("E", 1), ("E", 2), ("F", 1), ("G", 1)]) , runTest $ mkTest db10 "setupDeps8" ["C"] (solverSuccess [("C", 1)]) , runTest $ indep $ mkTest dbSetupDeps "setupDeps9" ["A", "B"] (solverSuccess [("A", 1), ("B", 1), ("C", 1), ("D", 1), ("D", 2)]) + , runTest $ setupStanzaTest1 + , runTest $ setupStanzaTest2 ] , testGroup "Base shim" @@ -190,6 +193,9 @@ tests = , runTest $ mkTest db12 "baseShim4" ["C"] (solverSuccess [("A", 1), ("B", 1), ("C", 1)]) , runTest $ mkTest db12 "baseShim5" ["D"] anySolverFailure , runTest $ mkTest db12 "baseShim6" ["E"] (solverSuccess [("E", 1), ("syb", 2)]) + , expectFailBecause "#9467" $ runTest $ mkTest db12s "baseShim7" ["A"] (solverSuccess [("A", 1)]) + , expectFailBecause "#9467" $ runTest $ mkTest db11s "baseShim7-simple" ["A"] (solverSuccess [("A", 1)]) + , runTest $ mkTest db11s2 "baseShim8" ["A"] (solverSuccess [("A", 1)]) ] , testGroup "Base and non-reinstallable" @@ -357,6 +363,8 @@ tests = , runTest $ testIndepGoals5 "indepGoals5 - default goal order" DefaultGoalOrder , runTest $ testIndepGoals6 "indepGoals6 - fixed goal order" FixedGoalOrder , runTest $ testIndepGoals6 "indepGoals6 - default goal order" DefaultGoalOrder + , expectFailBecause "#9466" $ runTest $ testIndepGoals7 "indepGoals7" + , runTest $ testIndepGoals8 "indepGoals8" ] , -- Tests designed for the backjumping blog post testGroup @@ -953,7 +961,7 @@ tests = , Right $ exAv "B" 1 [ExFix "A" 4] ] rejecting = "rejecting: A-3.0.0/installed-3.0.0" - skipping = "skipping: A-2.0.0/installed-2.0.0, A-1.0.0/installed-1.0.0" + skipping = "skipping: A; 2.0.0/installed-2.0.0, 1.0.0/installed-1.0.0" in mkTest db "show skipping versions list, installed" ["B"] $ solverFailure (\msg -> rejecting `isInfixOf` msg && skipping `isInfixOf` msg) ] @@ -1325,6 +1333,61 @@ db12 = , Right $ exAv "E" 1 [ExFix "base" 4, ExFix "syb" 2] ] +-- | A version of db12 where the dependency on base happens via a setup dependency +-- +-- * The setup dependency is solved in it's own qualified scope, so should be solved +-- independently of the rest of the build plan. +-- +-- * The setup dependency depends on `base-3` and hence `syb1` +-- +-- * A depends on `base-4` and `syb-2`, should be fine as the setup stanza should +-- be solved independently. +db12s :: ExampleDb +db12s = + let base3 = exInst "base" 3 "base-3-inst" [base4, syb1] + base4 = exInst "base" 4 "base-4-inst" [] + syb1 = exInst "syb" 1 "syb-1-inst" [base4] + in [ Left base3 + , Left base4 + , Left syb1 + , Right $ exAv "syb" 2 [ExFix "base" 4] + , Right $ + exAv "A" 1 [ExFix "base" 4, ExFix "syb" 2] + `withSetupDeps` [ExFix "base" 3] + ] + +-- | A version of db11 where the dependency on base happens via a setup dependency +-- +-- * The setup dependency is solved in it's own qualified scope, so should be solved +-- independently of the rest of the build plan. +-- +-- * The setup dependency depends on `base-3` +-- +-- * A depends on `base-4`, should be fine as the setup stanza should +-- be solved independently. +db11s :: ExampleDb +db11s = + let base3 = exInst "base" 3 "base-3-inst" [base4] + base4 = exInst "base" 4 "base-4-inst" [] + in [ Left base3 + , Left base4 + , Right $ + exAv "A" 1 [ExFix "base" 4] + `withSetupDeps` [ExFix "base" 3] + ] + +-- Works without the base-shimness, choosing different versions of base +db11s2 :: ExampleDb +db11s2 = + let base3 = exInst "base" 3 "base-3-inst" [] + base4 = exInst "base" 4 "base-4-inst" [] + in [ Left base3 + , Left base4 + , Right $ + exAv "A" 1 [ExFix "base" 4] + `withSetupDeps` [ExFix "base" 3] + ] + dbBase :: ExampleDb dbBase = [ Right $ @@ -1954,6 +2017,33 @@ dbLangs1 = , Right $ exAv "C" 1 [ExLang (UnknownLanguage "Haskell3000"), ExAny "B"] ] +-- This test checks how the scope of a constraint interacts with qualified goals. +-- If you specify `A == 2`, that top-level should /not/ apply to an independent goal! +testIndepGoals7 :: String -> SolverTest +testIndepGoals7 name = + constraints [ExVersionConstraint (scopeToplevel "A") (V.thisVersion (V.mkVersion [2, 0, 0]))] $ + independentGoals $ + mkTest dbIndepGoals78 name ["A"] $ + -- The more recent version should be picked by the solver. As said + -- above, the top-level A==2 should not apply to an independent goal. + solverSuccess [("A", 3)] + +dbIndepGoals78 :: ExampleDb +dbIndepGoals78 = + [ Right $ exAv "A" 1 [] + , Right $ exAv "A" 2 [] + , Right $ exAv "A" 3 [] + ] + +-- This test checks how the scope of a constraint interacts with qualified goals. +-- If you specify `any.A == 2`, then that should apply inside an independent goal. +testIndepGoals8 :: String -> SolverTest +testIndepGoals8 name = + constraints [ExVersionConstraint (ScopeAnyQualifier "A") (V.thisVersion (V.mkVersion [2, 0, 0]))] $ + independentGoals $ + mkTest dbIndepGoals78 name ["A"] $ + solverSuccess [("A", 2)] + -- | cabal must set enable-exe to false in order to avoid the unavailable -- dependency. Flags are true by default. The flag choice causes "pkg" to -- depend on "false-dep". @@ -2467,6 +2557,32 @@ dbIssue3775 = , Right $ exAv "B" 2 [ExAny "A", ExAny "warp"] ] +-- A database where the setup depends on something which has a test stanza, does the +-- test stanza get enabled? +dbSetupStanza :: ExampleDb +dbSetupStanza = + [ Right $ + exAv "A" 1 [] + `withSetupDeps` [ExAny "B"] + , Right $ + exAv "B" 1 [] + `withTest` exTest "test" [ExAny "C"] + ] + +-- With the "top-level" qualifier syntax +setupStanzaTest1 :: SolverTest +setupStanzaTest1 = constraints [ExStanzaConstraint (scopeToplevel "B") [TestStanzas]] $ mkTest dbSetupStanza "setupStanzaTest1" ["A"] (solverSuccess [("A", 1), ("B", 1)]) + +-- With the "any" qualifier syntax +setupStanzaTest2 :: SolverTest +setupStanzaTest2 = + constraints [ExStanzaConstraint (ScopeAnyQualifier "B") [TestStanzas]] $ + mkTest + dbSetupStanza + "setupStanzaTest2" + ["A"] + (solverFailure ("unknown package: A:setup.C (dependency of A:setup.B *test)" `isInfixOf`)) + -- | Returns true if the second list contains all elements of the first list, in -- order. containsInOrder :: Eq a => [a] -> [a] -> Bool diff --git a/cabal-install/tests/fixtures/configure/cabal.project b/cabal-install/tests/fixtures/configure/cabal.project index 863b8879eb7..8d7afa6e902 100644 --- a/cabal-install/tests/fixtures/configure/cabal.project +++ b/cabal-install/tests/fixtures/configure/cabal.project @@ -1,2 +1,2 @@ ignore-project: False -optimization: 2 \ No newline at end of file +optimization: 2 diff --git a/cabal-testsuite/PackageTests/Backpack/Includes2/setup-per-component.test.hs b/cabal-testsuite/PackageTests/Backpack/Includes2/setup-per-component.test.hs index e94d2018d7c..5bbb1b02af2 100644 --- a/cabal-testsuite/PackageTests/Backpack/Includes2/setup-per-component.test.hs +++ b/cabal-testsuite/PackageTests/Backpack/Includes2/setup-per-component.test.hs @@ -4,7 +4,7 @@ main = setupTest $ do skipUnlessGhcVersion ">= 8.1" ghc <- isGhcVersion "== 9.0.2 || == 9.2.* || == 9.4.* || == 9.6.*" expectBrokenIf ghc 7987 $ - withPackageDb $ + withPackageDb $ withDirectory "Includes2" $ do let setup_install' args = setup_install_with_docs args setup_install' ["mylib", "--cid", "mylib-0.1.0.0"] diff --git a/cabal-testsuite/PackageTests/Backpack/Includes3/cabal-repo.test.hs b/cabal-testsuite/PackageTests/Backpack/Includes3/cabal-repo.test.hs index d0557c828b8..00e2aff3c84 100644 --- a/cabal-testsuite/PackageTests/Backpack/Includes3/cabal-repo.test.hs +++ b/cabal-testsuite/PackageTests/Backpack/Includes3/cabal-repo.test.hs @@ -1,8 +1,7 @@ import Test.Cabal.Prelude -main = withShorterPathForNewBuildStore $ \storeDir -> - cabalTest $ do +main = cabalTest $ withShorterPathForNewBuildStore $ do skipUnlessGhcVersion ">= 8.1" skipIfWindows -- TODO: https://github.com/haskell/cabal/issues/6271 withProjectFile "cabal.repo.project" $ do withRepo "repo" $ do - cabalG ["--store-dir=" ++ storeDir] "v2-build" ["exe"] + cabal "v2-build" ["exe"] diff --git a/cabal-testsuite/PackageTests/Backpack/T6385/cabal.test.hs b/cabal-testsuite/PackageTests/Backpack/T6385/cabal.test.hs index 1555552cd08..0a31702615c 100644 --- a/cabal-testsuite/PackageTests/Backpack/T6385/cabal.test.hs +++ b/cabal-testsuite/PackageTests/Backpack/T6385/cabal.test.hs @@ -1,7 +1,7 @@ import Test.Cabal.Prelude -main = withShorterPathForNewBuildStore $ \storeDir -> - cabalTest $ do +main = + cabalTest $ withShorterPathForNewBuildStore $ do skipUnlessGhcVersion ">= 8.1" skipIfWindows -- TODO: https://github.com/haskell/cabal/issues/6271 withRepo "repo" $ do - cabalG ["--store-dir=" ++ storeDir] "v2-build" ["T6385"] + cabal "v2-build" ["T6385"] diff --git a/cabal-testsuite/PackageTests/BuildTargets/UseLocalPackageForSetup/use-local-package-as-setup-dep.test.hs b/cabal-testsuite/PackageTests/BuildTargets/UseLocalPackageForSetup/use-local-package-as-setup-dep.test.hs index b0aee40b9ee..35011eee42e 100644 --- a/cabal-testsuite/PackageTests/BuildTargets/UseLocalPackageForSetup/use-local-package-as-setup-dep.test.hs +++ b/cabal-testsuite/PackageTests/BuildTargets/UseLocalPackageForSetup/use-local-package-as-setup-dep.test.hs @@ -10,16 +10,16 @@ import Test.Cabal.Prelude -- qualifier as pkg, even though they are both build targets of the project. -- The solution must use --independent-goals to give pkg and setup-dep different -- qualifiers. -main = withShorterPathForNewBuildStore $ \storeDir -> - cabalTest $ do +main = + cabalTest $ withShorterPathForNewBuildStore $ do skipUnless "no v2-build compatible boot-Cabal" =<< hasNewBuildCompatBootCabal withRepo "repo" $ do - fails $ cabalG ["--store-dir=" ++ storeDir] "v2-build" ["pkg:my-exe", "--dry-run"] + fails $ cabal "v2-build" ["pkg:my-exe", "--dry-run"] -- Disabled recording because whether or not we get -- detailed information for the build of my-exe depends -- on whether or not the Cabal library version is recent -- enough - r1 <- recordMode DoNotRecord $ cabalG' ["--store-dir=" ++ storeDir] "v2-build" ["pkg:my-exe", "--independent-goals"] + r1 <- recordMode DoNotRecord $ cabal' "v2-build" ["pkg:my-exe", "--independent-goals"] assertOutputContains "Setup.hs: setup-dep from project" r1 withPlan $ do r2 <- runPlanExe' "pkg" "my-exe" [] diff --git a/cabal-testsuite/PackageTests/CCompilerOverride/foo.c b/cabal-testsuite/PackageTests/CCompilerOverride/foo.c index 30892bef07e..03ddd01e14b 100644 --- a/cabal-testsuite/PackageTests/CCompilerOverride/foo.c +++ b/cabal-testsuite/PackageTests/CCompilerOverride/foo.c @@ -1,16 +1,8 @@ -#ifndef NOERROR1 -#error "NOERROR1 was not passed" -#endif - #ifndef NOERROR2 #error "NOERROR2 was not passed" #endif -#ifndef NOERROR3 -#error "NOERROR3 was not passed" -#endif - #ifndef NOERROR4 #error "NOERROR4 was not passed" #endif diff --git a/cabal-testsuite/PackageTests/CCompilerOverride/my.cabal b/cabal-testsuite/PackageTests/CCompilerOverride/my.cabal index 31a79f93a60..14772f3894f 100644 --- a/cabal-testsuite/PackageTests/CCompilerOverride/my.cabal +++ b/cabal-testsuite/PackageTests/CCompilerOverride/my.cabal @@ -9,5 +9,5 @@ executable foo main-is: Main.hs c-sources: foo.c build-depends: base - ghc-options: -DNOERROR4 + ghc-options: -optc=-DNOERROR4 cc-options: -DNOERROR5 -march=native diff --git a/cabal-testsuite/PackageTests/CCompilerOverride/setup.cabal.out b/cabal-testsuite/PackageTests/CCompilerOverride/setup.cabal.out index 21981fd9b76..6d0c3265de9 100644 --- a/cabal-testsuite/PackageTests/CCompilerOverride/setup.cabal.out +++ b/cabal-testsuite/PackageTests/CCompilerOverride/setup.cabal.out @@ -1,4 +1,3 @@ # Setup configure Configuring my-0.1... -Warning: [misplaced-c-opt] Instead of 'ghc-options: -DNOERROR4' use 'cpp-options: -DNOERROR4' # Setup build diff --git a/cabal-testsuite/PackageTests/CCompilerOverride/setup.out b/cabal-testsuite/PackageTests/CCompilerOverride/setup.out index 21981fd9b76..6d0c3265de9 100644 --- a/cabal-testsuite/PackageTests/CCompilerOverride/setup.out +++ b/cabal-testsuite/PackageTests/CCompilerOverride/setup.out @@ -1,4 +1,3 @@ # Setup configure Configuring my-0.1... -Warning: [misplaced-c-opt] Instead of 'ghc-options: -DNOERROR4' use 'cpp-options: -DNOERROR4' # Setup build diff --git a/cabal-testsuite/PackageTests/CCompilerOverride/setup.test.hs b/cabal-testsuite/PackageTests/CCompilerOverride/setup.test.hs index 5843cb2b7df..b4f7f04ddb1 100644 --- a/cabal-testsuite/PackageTests/CCompilerOverride/setup.test.hs +++ b/cabal-testsuite/PackageTests/CCompilerOverride/setup.test.hs @@ -3,6 +3,10 @@ import Test.Cabal.Prelude -- Test that all the respective defines -DNOERROR... specified in various ways -- all end up routed to the C compiler. Otherwise the C file we depend on will -- not compile. +-- +-- This has been largely gutted, as ghc 9.10 no longer passes through most +-- of the defines we were testing; see +-- https://gitlab.haskell.org/ghc/ghc/-/commit/8ff3134ed4aa323b0199ad683f72165e51a59ab6 main = setupAndCabalTest $ do skipUnlessGhcVersion ">= 8.8" isWin <- isWindows @@ -14,9 +18,7 @@ main = setupAndCabalTest $ do pwd ++ "/custom-cc" ++ if isWin then win_suffix else "" setup "configure" - [ "--ghc-option=-DNOERROR1" - , "--ghc-option=-optc=-DNOERROR2" - , "--ghc-option=-optP=-DNOERROR3" + [ "--ghc-option=-optc=-DNOERROR2" , "--with-gcc=" ++ customCC ] setup "build" ["-v2"] diff --git a/cabal-testsuite/PackageTests/Check/Cond/After/cabal.out b/cabal-testsuite/PackageTests/Check/Cond/After/cabal.out new file mode 100644 index 00000000000..37aa169b416 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/Cond/After/cabal.out @@ -0,0 +1,2 @@ +# cabal check +No errors or warnings could be found in the package. diff --git a/cabal-testsuite/PackageTests/Check/Cond/After/cabal.test.hs b/cabal-testsuite/PackageTests/Check/Cond/After/cabal.test.hs new file mode 100644 index 00000000000..c920553d855 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/Cond/After/cabal.test.hs @@ -0,0 +1,5 @@ +import Test.Cabal.Prelude + +-- `main-is` in both branches is not missing (after). +main = cabalTest $ + cabal "check" [] diff --git a/cabal-testsuite/PackageTests/Check/Cond/After/pkg.cabal b/cabal-testsuite/PackageTests/Check/Cond/After/pkg.cabal new file mode 100644 index 00000000000..3d4925b9a26 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/Cond/After/pkg.cabal @@ -0,0 +1,26 @@ +cabal-version: 3.0 +name: pkg +synopsis: synopsis +description: description +version: 0 +category: example +maintainer: none@example.com +license: GPL-3.0-or-later + +flag my-flag + description: Test for branches. + default: False + manual: True + +executable exe + if os(windows) + ghc-options: -pgml misc/static-libstdc++ + + if flag(my-flag) + main-is: Main.hs + build-depends: async, unix + c-sources: executable/link.c + else + main-is: ParallelMain.hs + + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/Check/Cond/Before/cabal.out b/cabal-testsuite/PackageTests/Check/Cond/Before/cabal.out new file mode 100644 index 00000000000..37aa169b416 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/Cond/Before/cabal.out @@ -0,0 +1,2 @@ +# cabal check +No errors or warnings could be found in the package. diff --git a/cabal-testsuite/PackageTests/Check/Cond/Before/cabal.test.hs b/cabal-testsuite/PackageTests/Check/Cond/Before/cabal.test.hs new file mode 100644 index 00000000000..777f542cd27 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/Cond/Before/cabal.test.hs @@ -0,0 +1,5 @@ +import Test.Cabal.Prelude + +-- `main-is` in both branches is not missing. +main = cabalTest $ + cabal "check" [] diff --git a/cabal-testsuite/PackageTests/Check/Cond/Before/pkg.cabal b/cabal-testsuite/PackageTests/Check/Cond/Before/pkg.cabal new file mode 100644 index 00000000000..28a8369d248 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/Cond/Before/pkg.cabal @@ -0,0 +1,26 @@ +cabal-version: 3.0 +name: pkg +synopsis: synopsis +description: description +version: 0 +category: example +maintainer: none@example.com +license: GPL-3.0-or-later + +flag my-flag + description: Test for branches. + default: False + manual: True + +executable exe + if flag(my-flag) + main-is: Main.hs + build-depends: async, unix + c-sources: executable/link.c + else + main-is: ParallelMain.hs + + if os(windows) + ghc-options: -pgml misc/static-libstdc++ + + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/Check/Cond/Deep/cabal.out b/cabal-testsuite/PackageTests/Check/Cond/Deep/cabal.out new file mode 100644 index 00000000000..37aa169b416 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/Cond/Deep/cabal.out @@ -0,0 +1,2 @@ +# cabal check +No errors or warnings could be found in the package. diff --git a/cabal-testsuite/PackageTests/Check/Cond/Deep/cabal.test.hs b/cabal-testsuite/PackageTests/Check/Cond/Deep/cabal.test.hs new file mode 100644 index 00000000000..28f534e4037 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/Cond/Deep/cabal.test.hs @@ -0,0 +1,5 @@ +import Test.Cabal.Prelude + +-- `main-is` in both branches is not missing (deep). +main = cabalTest $ + cabal "check" [] diff --git a/cabal-testsuite/PackageTests/Check/Cond/Deep/pkg.cabal b/cabal-testsuite/PackageTests/Check/Cond/Deep/pkg.cabal new file mode 100644 index 00000000000..2eca675b720 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/Cond/Deep/pkg.cabal @@ -0,0 +1,34 @@ +cabal-version: 3.0 +name: pkg +synopsis: synopsis +description: description +version: 0 +category: example +maintainer: none@example.com +license: GPL-3.0-or-later + +flag my-flag + description: Test for branches. + default: False + manual: True + +flag another-flag + description: Deep test for branches. + default: False + manual: True + +executable exe + if flag(my-flag) + if flag(another-flag) + main-is: Main.hs + build-depends: async, unix + c-sources: executable/link.c + else + main-is: AnotherMain.hs + else + main-is: ParallelMain.hs + + if os(windows) + ghc-options: -pgml misc/static-libstdc++ + + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/Check/Cond/DeepMissing/cabal.out b/cabal-testsuite/PackageTests/Check/Cond/DeepMissing/cabal.out new file mode 100644 index 00000000000..3144e6704d1 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/Cond/DeepMissing/cabal.out @@ -0,0 +1,5 @@ +# cabal check +The package will not build sanely due to these errors: +Error: [no-main-is] No 'main-is' field found for executable exe +Error: Hackage would reject this package. + diff --git a/cabal-testsuite/PackageTests/Check/Cond/DeepMissing/cabal.test.hs b/cabal-testsuite/PackageTests/Check/Cond/DeepMissing/cabal.test.hs new file mode 100644 index 00000000000..f0509f39750 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/Cond/DeepMissing/cabal.test.hs @@ -0,0 +1,5 @@ +import Test.Cabal.Prelude + +-- `main-is` in both branches is not missing (deep, actually missing). +main = cabalTest $ + fails $ cabal "check" [] diff --git a/cabal-testsuite/PackageTests/Check/Cond/DeepMissing/pkg.cabal b/cabal-testsuite/PackageTests/Check/Cond/DeepMissing/pkg.cabal new file mode 100644 index 00000000000..241e92623c9 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/Cond/DeepMissing/pkg.cabal @@ -0,0 +1,35 @@ +cabal-version: 3.0 +name: pkg +synopsis: synopsis +description: description +version: 0 +category: example +maintainer: none@example.com +license: GPL-3.0-or-later + +flag my-flag + description: Test for branches. + default: False + manual: True + +flag another-flag + description: Deep test for branches. + default: False + manual: True + +executable exe + if flag(my-flag) + if flag(another-flag) + main-is: Main.hs + build-depends: async, unix + c-sources: executable/link.c + else + build-depends: async, unix + c-sources: executable/link.c + else + main-is: ParallelMain.hs + + if os(windows) + ghc-options: -pgml misc/static-libstdc++ + + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/CabalVersion/DefaultLanguageSoft/cabal.out b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/CabalVersion/DefaultLanguageSoft/cabal.out new file mode 100644 index 00000000000..a45ec56e686 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/CabalVersion/DefaultLanguageSoft/cabal.out @@ -0,0 +1,4 @@ +# cabal check +The following errors will cause portability problems on other environments: +Error: [add-language] Without `default-language`, cabal will default to Haskell98, which is probably not what you want. Please add `default-language` to all targets. +Error: Hackage would reject this package. diff --git a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/CabalVersion/DefaultLanguageSoft/cabal.test.hs b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/CabalVersion/DefaultLanguageSoft/cabal.test.hs new file mode 100644 index 00000000000..dc290190595 --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/CabalVersion/DefaultLanguageSoft/cabal.test.hs @@ -0,0 +1,5 @@ +import Test.Cabal.Prelude + +-- Please specify `default-language`. +main = cabalTest $ + fails $ cabal "check" [] diff --git a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/CabalVersion/DefaultLanguageSoft/pkg.cabal b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/CabalVersion/DefaultLanguageSoft/pkg.cabal new file mode 100644 index 00000000000..f89c160813a --- /dev/null +++ b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/CabalVersion/DefaultLanguageSoft/pkg.cabal @@ -0,0 +1,11 @@ +cabal-version: 3.4 +name: pkg +synopsis: synopsis +description: description +version: 0 +category: example +maintainer: none@example.com +license: GPL-3.0-or-later + +library + exposed-modules: Module diff --git a/cabal-testsuite/PackageTests/CmmSourcesExe/cmmexperiment.cabal b/cabal-testsuite/PackageTests/CmmSourcesExe/cmmexperiment.cabal index b26391e6e84..c07aa265b4e 100644 --- a/cabal-testsuite/PackageTests/CmmSourcesExe/cmmexperiment.cabal +++ b/cabal-testsuite/PackageTests/CmmSourcesExe/cmmexperiment.cabal @@ -20,4 +20,3 @@ executable demo else cmm-options: -ddump-cmm - diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/cabal-missing-package.project b/cabal-testsuite/PackageTests/ConditionalAndImport/cabal-missing-package.project new file mode 100644 index 00000000000..136ebb028a2 --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/cabal-missing-package.project @@ -0,0 +1 @@ +import: missing/pkgs.config diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out b/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out index fa224a62cae..7a6333d21bc 100644 --- a/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.out @@ -13,33 +13,53 @@ Warning: The directory /cabal.dist/home/.cabal/store/ghc-/incoming # checking cyclical loopback of a project importing itself # cabal v2-build Error: [Cabal-7090] -Error parsing project file /cyclical-0-self.project:3: -cyclical import of cyclical-0-self.project +Error parsing project file /cyclical-0-self.project: +cyclical import of cyclical-0-self.project; + cyclical-0-self.project + imported by: cyclical-0-self.project # checking cyclical with hops; out and back # cabal v2-build Error: [Cabal-7090] -Error parsing project file /cyclical-1-out-back.project:3: -cyclical import of cyclical-1-out-back.config +Error parsing project file /cyclical-1-out-back.project: +cyclical import of cyclical-1-out-back.project; + cyclical-1-out-back.project + imported by: cyclical-1-out-back.config + imported by: cyclical-1-out-back.project # checking cyclical with hops; out to a config that imports itself # cabal v2-build Error: [Cabal-7090] -Error parsing project file /cyclical-1-out-self.project:1: -cyclical import of cyclical-1-out-self.config +Error parsing project file /cyclical-1-out-self.project: +cyclical import of cyclical-1-out-self.config; + cyclical-1-out-self.config + imported by: cyclical-1-out-self.config + imported by: cyclical-1-out-self.project # checking cyclical with hops; out, out, twice back # cabal v2-build Error: [Cabal-7090] -Error parsing project file /cyclical-2-out-out-backback.project:3: -cyclical import of cyclical-2-out-out-backback-a.config +Error parsing project file /cyclical-2-out-out-backback.project: +cyclical import of cyclical-2-out-out-backback.project; + cyclical-2-out-out-backback.project + imported by: cyclical-2-out-out-backback-b.config + imported by: cyclical-2-out-out-backback-a.config + imported by: cyclical-2-out-out-backback.project # checking cyclical with hops; out, out, once back # cabal v2-build Error: [Cabal-7090] -Error parsing project file /cyclical-2-out-out-back.project:1: -cyclical import of cyclical-2-out-out-back-a.config +Error parsing project file /cyclical-2-out-out-back.project: +cyclical import of cyclical-2-out-out-back-a.config; + cyclical-2-out-out-back-a.config + imported by: cyclical-2-out-out-back-b.config + imported by: cyclical-2-out-out-back-a.config + imported by: cyclical-2-out-out-back.project # checking cyclical with hops; out, out to a config that imports itself # cabal v2-build Error: [Cabal-7090] -Error parsing project file /cyclical-2-out-out-self.project:1: -cyclical import of cyclical-2-out-out-self-b.config +Error parsing project file /cyclical-2-out-out-self.project: +cyclical import of cyclical-2-out-out-self-b.config; + cyclical-2-out-out-self-b.config + imported by: cyclical-2-out-out-self-b.config + imported by: cyclical-2-out-out-self-a.config + imported by: cyclical-2-out-out-self.project # checking that cyclical check doesn't false-positive on same file names in different folders; hoping within a folder and then into a subfolder # cabal v2-build Resolving dependencies... @@ -51,25 +71,63 @@ Preprocessing library for my-0.1... Building library for my-0.1... # checking that cyclical check doesn't false-positive on same file names in different folders; hoping into a subfolder and then back out again # cabal v2-build +Up to date # checking that cyclical check catches a same file name that imports itself # cabal v2-build Error: [Cabal-7090] -Error parsing project file /cyclical-same-filename-out-out-self.project:1: -cyclical import of cyclical-same-filename-out-out-self.config +Error parsing project file /cyclical-same-filename-out-out-self.project: +cyclical import of same-filename/cyclical-same-filename-out-out-self.config; + same-filename/cyclical-same-filename-out-out-self.config + imported by: same-filename/cyclical-same-filename-out-out-self.config + imported by: cyclical-same-filename-out-out-self.config + imported by: cyclical-same-filename-out-out-self.project # checking that cyclical check catches importing its importer (with the same file name) # cabal v2-build Error: [Cabal-7090] -Error parsing project file /cyclical-same-filename-out-out-backback.project:3: -cyclical import of cyclical-same-filename-out-out-backback.config +Error parsing project file /cyclical-same-filename-out-out-backback.project: +cyclical import of cyclical-same-filename-out-out-backback.project; + cyclical-same-filename-out-out-backback.project + imported by: same-filename/cyclical-same-filename-out-out-backback.config + imported by: cyclical-same-filename-out-out-backback.config + imported by: cyclical-same-filename-out-out-backback.project # checking that cyclical check catches importing its importer's importer (hopping over same file names) # cabal v2-build Error: [Cabal-7090] -Error parsing project file /cyclical-same-filename-out-out-back.project:1: -cyclical import of same-filename/cyclical-same-filename-out-out-back.config +Error parsing project file /cyclical-same-filename-out-out-back.project: +cyclical import of cyclical-same-filename-out-out-back.config; + cyclical-same-filename-out-out-back.config + imported by: same-filename/cyclical-same-filename-out-out-back.config + imported by: cyclical-same-filename-out-out-back.config + imported by: cyclical-same-filename-out-out-back.project # checking that imports work skipping into a subfolder and then back out again and again # cabal v2-build +Up to date +# checking conflicting constraints skipping into a subfolder and then back out again and again +# cabal v2-build +Resolving dependencies... +Error: [Cabal-7107] +Could not resolve dependencies: +[__0] trying: oops-0.1 (user goal) +[__1] next goal: hashable (dependency of oops) +[__1] rejecting: hashable-1.4.3.0 + (constraint from oops/oops-9.config requires ==1.4.2.0) + imported by: oops-8.config + imported by: oops/oops-7.config + imported by: oops-6.config + imported by: oops/oops-5.config + imported by: oops-4.config + imported by: oops/oops-3.config + imported by: oops-2.config + imported by: oops/oops-1.config + imported by: oops-0.project +[__1] rejecting: hashable-1.4.2.0 + (constraint from oops-0.project requires ==1.4.3.0) +[__1] fail (backjumping, conflict set: hashable, oops) +After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), oops (2) # checking bad conditional # cabal v2-build Error: [Cabal-7090] Error parsing project file /bad-conditional.project: Cannot set compiler in a conditional clause of a cabal project file +# checking that missing package message lists configuration provenance +# cabal v2-build diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.test.hs b/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.test.hs index 7998ee8075d..f0ba4299c7a 100644 --- a/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.test.hs +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/cabal.test.hs @@ -18,8 +18,7 @@ main = cabalTest . withRepo "repo" . recordMode RecordMarked $ do -- +-- etc log "checking cyclical with hops; out and back" cyclical1a <- fails $ cabal' "v2-build" [ "--project-file=cyclical-1-out-back.project" ] - -- This test should pass the following check but doesn't: - -- assertOutputContains "cyclical import of cyclical-1-out-back.project" cyclical1a + assertOutputContains "cyclical import of cyclical-1-out-back.project" cyclical1a -- +-- cyclical-1-out-self.project -- +-- cyclical-1-out-self.config (imports cyclical-1-out-self.config) @@ -36,8 +35,7 @@ main = cabalTest . withRepo "repo" . recordMode RecordMarked $ do -- +-- etc log "checking cyclical with hops; out, out, twice back" cyclical2a <- fails $ cabal' "v2-build" [ "--project-file=cyclical-2-out-out-backback.project" ] - -- This test should pass the following check but doesn't: - -- assertOutputContains "cyclical import of cyclical-2-out-out-backback.project" cyclical2a + assertOutputContains "cyclical import of cyclical-2-out-out-backback.project" cyclical2a -- +-- cyclical-2-out-out-back.project -- +-- cyclical-2-out-out-back-a.config @@ -68,7 +66,7 @@ main = cabalTest . withRepo "repo" . recordMode RecordMarked $ do -- +-- same-filename/noncyclical-same-filename-b.config -- +-- noncyclical-same-filename-b.config (no further imports so not cyclical) log "checking that cyclical check doesn't false-positive on same file names in different folders; hoping into a subfolder and then back out again" - cyclical3c <- fails $ cabal' "v2-build" [ "--project-file=noncyclical-same-filename-b.project" ] + cyclical3c <- cabal' "v2-build" [ "--project-file=noncyclical-same-filename-b.project" ] assertOutputDoesNotContain "cyclical import of" cyclical3c -- +-- cyclical-same-filename-out-out-self.project @@ -78,7 +76,7 @@ main = cabalTest . withRepo "repo" . recordMode RecordMarked $ do -- +-- etc log "checking that cyclical check catches a same file name that imports itself" cyclical4a <- fails $ cabal' "v2-build" [ "--project-file=cyclical-same-filename-out-out-self.project" ] - assertOutputContains "cyclical import of cyclical-same-filename-out-out-self.config" cyclical4a + assertOutputContains "cyclical import of same-filename/cyclical-same-filename-out-out-self.config" cyclical4a -- +-- cyclical-same-filename-out-out-backback.project -- +-- cyclical-same-filename-out-out-backback.config @@ -87,8 +85,7 @@ main = cabalTest . withRepo "repo" . recordMode RecordMarked $ do -- +-- etc log "checking that cyclical check catches importing its importer (with the same file name)" cyclical4b <- fails $ cabal' "v2-build" [ "--project-file=cyclical-same-filename-out-out-backback.project" ] - -- This test should pass the following check but doesn't: - -- assertOutputContains "cyclical import of cyclical-same-filename-out-out-backback.project" cyclical4b + assertOutputContains "cyclical import of cyclical-same-filename-out-out-backback.project" cyclical4b -- +-- cyclical-same-filename-out-out-back.project -- +-- cyclical-same-filename-out-out-back.config @@ -97,8 +94,7 @@ main = cabalTest . withRepo "repo" . recordMode RecordMarked $ do -- +-- etc log "checking that cyclical check catches importing its importer's importer (hopping over same file names)" cyclical4c <- fails $ cabal' "v2-build" [ "--project-file=cyclical-same-filename-out-out-back.project" ] - -- This test should pass the following check but doesn't: - -- assertOutputContains "cyclical import of cyclical-same-filename-out-out-back.config" cyclical4c + assertOutputContains "cyclical import of cyclical-same-filename-out-out-back.config" cyclical4c -- +-- hops-0.project -- +-- hops/hops-1.config @@ -111,22 +107,134 @@ main = cabalTest . withRepo "repo" . recordMode RecordMarked $ do -- +-- hops-8.config -- +-- hops/hops-9.config (no further imports so not cyclical) log "checking that imports work skipping into a subfolder and then back out again and again" - -- This test should pass the following checks but doesn't, it fails (but it shouldn't): - hopping <- fails $ cabal' "v2-build" [ "--project-file=hops-0.project" ] - -- assertOutputContains "this build was affected by the following (project) config files:" hopping - -- assertOutputContains "hops-0.project" hopping - -- assertOutputContains "../hops-2.config" hopping - -- assertOutputContains "../hops-4.config" hopping - -- assertOutputContains "../hops-6.config" hopping - -- assertOutputContains "../hops-8.config" hopping - -- assertOutputContains "hops/hops-1.config" hopping - -- assertOutputContains "hops/hops-3.config" hopping - -- assertOutputContains "hops/hops-5.config" hopping - -- assertOutputContains "hops/hops-7.config" hopping - -- assertOutputContains "hops/hops-9.config" hopping + hopping <- cabal' "v2-build" [ "--project-file=hops-0.project" ] + assertOutputContains "this build was affected by the following (project) config files:" hopping + assertOutputContains "- hops-0.project" hopping + + assertOutputContains + "- hops-2.config \ + \ imported by: hops/hops-1.config \ + \ imported by: hops-0.project" + hopping + + assertOutputContains + "- hops-4.config \ + \ imported by: hops/hops-3.config \ + \ imported by: hops-2.config \ + \ imported by: hops/hops-1.config \ + \ imported by: hops-0.project" + hopping + + assertOutputContains + "- hops-6.config \ + \ imported by: hops/hops-5.config \ + \ imported by: hops-4.config \ + \ imported by: hops/hops-3.config \ + \ imported by: hops-2.config \ + \ imported by: hops/hops-1.config \ + \ imported by: hops-0.project" + hopping + + assertOutputContains + "- hops-8.config \ + \ imported by: hops/hops-7.config \ + \ imported by: hops-6.config \ + \ imported by: hops/hops-5.config \ + \ imported by: hops-4.config \ + \ imported by: hops/hops-3.config \ + \ imported by: hops-2.config \ + \ imported by: hops/hops-1.config \ + \ imported by: hops-0.project" + hopping + + assertOutputContains + "- hops/hops-1.config \ + \ imported by: hops-0.project" + hopping + + assertOutputContains + "- hops/hops-3.config \ + \ imported by: hops-2.config \ + \ imported by: hops/hops-1.config \ + \ imported by: hops-0.project" + hopping + + assertOutputContains + "- hops/hops-5.config \ + \ imported by: hops-4.config \ + \ imported by: hops/hops-3.config \ + \ imported by: hops-2.config \ + \ imported by: hops/hops-1.config \ + \ imported by: hops-0.project" + hopping + + assertOutputContains + "- hops/hops-7.config \ + \ imported by: hops-6.config \ + \ imported by: hops/hops-5.config \ + \ imported by: hops-4.config \ + \ imported by: hops/hops-3.config \ + \ imported by: hops-2.config \ + \ imported by: hops/hops-1.config \ + \ imported by: hops-0.project" + hopping + + assertOutputContains + "- hops/hops-9.config \ + \ imported by: hops-8.config \ + \ imported by: hops/hops-7.config \ + \ imported by: hops-6.config \ + \ imported by: hops/hops-5.config \ + \ imported by: hops-4.config \ + \ imported by: hops/hops-3.config \ + \ imported by: hops-2.config \ + \ imported by: hops/hops-1.config \ + \ imported by: hops-0.project" + hopping + + -- The project is named oops as it is like hops but has conflicting constraints. + -- +-- oops-0.project + -- +-- oops/oops-1.config + -- +-- oops-2.config + -- +-- oops/oops-3.config + -- +-- oops-4.config + -- +-- oops/oops-5.config + -- +-- oops-6.config + -- +-- oops/oops-7.config + -- +-- oops-8.config + -- +-- oops/oops-9.config (has conflicting constraints) + log "checking conflicting constraints skipping into a subfolder and then back out again and again" + oopsing <- fails $ cabal' "v2-build" [ "all", "--project-file=oops-0.project" ] + assertOutputContains "rejecting: hashable-1.4.2.0" oopsing + assertOutputContains "rejecting: hashable-1.4.3.0" oopsing + assertOutputContains "(constraint from oops-0.project requires ==1.4.3.0)" oopsing + + assertOutputContains + " (constraint from oops/oops-9.config requires ==1.4.2.0) \ + \ imported by: oops-8.config \ + \ imported by: oops/oops-7.config \ + \ imported by: oops-6.config \ + \ imported by: oops/oops-5.config \ + \ imported by: oops-4.config \ + \ imported by: oops/oops-3.config \ + \ imported by: oops-2.config \ + \ imported by: oops/oops-1.config \ + \ imported by: oops-0.project" + oopsing log "checking bad conditional" badIf <- fails $ cabal' "v2-build" [ "--project-file=bad-conditional.project" ] assertOutputContains "Cannot set compiler in a conditional clause of a cabal project file" badIf + log "checking that missing package message lists configuration provenance" + missing <- fails $ cabal' "v2-build" [ "--project-file=cabal-missing-package.project" ] + assertOutputContains + "When using configuration from: \ + \ - cabal-missing-package.project \ + \ - missing/pkgs.config \ + \ - missing/pkgs/default.config \ + \The following errors occurred: \ + \ - The package location 'pkg-doesnt-exist' does not exist." + missing + return () diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/missing/pkgs.config b/cabal-testsuite/PackageTests/ConditionalAndImport/missing/pkgs.config new file mode 100644 index 00000000000..afca189fce6 --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/missing/pkgs.config @@ -0,0 +1 @@ +import: pkgs/default.config diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/missing/pkgs/default.config b/cabal-testsuite/PackageTests/ConditionalAndImport/missing/pkgs/default.config new file mode 100644 index 00000000000..fbdd530d3ed --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/missing/pkgs/default.config @@ -0,0 +1 @@ +packages: pkg-doesnt-exist diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/oops-0.project b/cabal-testsuite/PackageTests/ConditionalAndImport/oops-0.project new file mode 100644 index 00000000000..c66f042c7f6 --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/oops-0.project @@ -0,0 +1,4 @@ +packages: ./oops/oops.cabal + +import: oops/oops-1.config +constraints: hashable ==1.4.3.0 diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/oops-2.config b/cabal-testsuite/PackageTests/ConditionalAndImport/oops-2.config new file mode 100644 index 00000000000..a8fc298eb26 --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/oops-2.config @@ -0,0 +1 @@ +import: oops/oops-3.config diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/oops-4.config b/cabal-testsuite/PackageTests/ConditionalAndImport/oops-4.config new file mode 100644 index 00000000000..904b9f8d1e4 --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/oops-4.config @@ -0,0 +1 @@ +import: oops/oops-5.config diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/oops-6.config b/cabal-testsuite/PackageTests/ConditionalAndImport/oops-6.config new file mode 100644 index 00000000000..78251069a25 --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/oops-6.config @@ -0,0 +1 @@ +import: oops/oops-7.config diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/oops-8.config b/cabal-testsuite/PackageTests/ConditionalAndImport/oops-8.config new file mode 100644 index 00000000000..34156d78b37 --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/oops-8.config @@ -0,0 +1 @@ +import: oops/oops-9.config diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops-1.config b/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops-1.config new file mode 100644 index 00000000000..27afba05e1f --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops-1.config @@ -0,0 +1 @@ +import: ../oops-2.config diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops-3.config b/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops-3.config new file mode 100644 index 00000000000..d71ae82df04 --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops-3.config @@ -0,0 +1 @@ +import: ../oops-4.config diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops-5.config b/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops-5.config new file mode 100644 index 00000000000..8f572fe21ee --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops-5.config @@ -0,0 +1 @@ +import: ../oops-6.config diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops-7.config b/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops-7.config new file mode 100644 index 00000000000..34b2fea1201 --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops-7.config @@ -0,0 +1 @@ +import: ../oops-8.config diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops-9.config b/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops-9.config new file mode 100644 index 00000000000..439357f5a19 --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops-9.config @@ -0,0 +1,2 @@ +-- No imports here +constraints: hashable ==1.4.2.0 diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops.cabal b/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops.cabal new file mode 100644 index 00000000000..faddb54ac45 --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/oops/oops.cabal @@ -0,0 +1,9 @@ +name: oops +version: 0.1 +license: BSD3 +cabal-version: >= 1.2 +build-type: Simple + +library + exposed-modules: Foo + build-depends: base, hashable diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/repo/hashable-1.4.2.0/hashable.cabal b/cabal-testsuite/PackageTests/ConditionalAndImport/repo/hashable-1.4.2.0/hashable.cabal new file mode 100644 index 00000000000..de0cf79f7d8 --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/repo/hashable-1.4.2.0/hashable.cabal @@ -0,0 +1,3 @@ +cabal-version: 1.12 +name: hashable +version: 1.4.2.0 diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/repo/hashable-1.4.3.0/hashable.cabal b/cabal-testsuite/PackageTests/ConditionalAndImport/repo/hashable-1.4.3.0/hashable.cabal new file mode 100644 index 00000000000..b6475a1f15a --- /dev/null +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/repo/hashable-1.4.3.0/hashable.cabal @@ -0,0 +1,3 @@ +cabal-version: 1.12 +name: hashable +version: 1.4.3.0 diff --git a/cabal-testsuite/PackageTests/ConditionalAndImport/same-filename/noncyclical-same-filename-b.config b/cabal-testsuite/PackageTests/ConditionalAndImport/same-filename/noncyclical-same-filename-b.config index dc692490257..09d8f95ef31 100644 --- a/cabal-testsuite/PackageTests/ConditionalAndImport/same-filename/noncyclical-same-filename-b.config +++ b/cabal-testsuite/PackageTests/ConditionalAndImport/same-filename/noncyclical-same-filename-b.config @@ -1 +1 @@ -import: ../noncylical-same-filename-b.config +import: ../noncyclical-same-filename-b.config diff --git a/cabal-testsuite/PackageTests/CopyHie/cabal.test.hs b/cabal-testsuite/PackageTests/CopyHie/cabal.test.hs index b1055c73060..aa6ea3884dd 100644 --- a/cabal-testsuite/PackageTests/CopyHie/cabal.test.hs +++ b/cabal-testsuite/PackageTests/CopyHie/cabal.test.hs @@ -1,8 +1,7 @@ import Test.Cabal.Prelude -main = withShorterPathForNewBuildStore $ \storeDir -> cabalTest $ withRepo "repo" $ do +main = cabalTest $ withShorterPathForNewBuildStore $ withRepo "repo" $ do skipUnlessGhcVersion ">= 8.8" - cabalG ["--store-dir=" ++ storeDir] "v2-build" ["hie"] - liftIO $ do - installedDependencyLibDir <- findDependencyInStore storeDir "hie-dependency" - shouldExist $ installedDependencyLibDir "lib" "extra-compilation-artifacts" "hie" "HieDependency.hie" + cabal "v2-build" ["hie"] + installedDependencyLibDir <- findDependencyInStore "hie-dependency" + shouldExist $ installedDependencyLibDir "lib" "extra-compilation-artifacts" "hie" "HieDependency.hie" diff --git a/cabal-testsuite/PackageTests/CustomDep/cabal.test.hs b/cabal-testsuite/PackageTests/CustomDep/cabal.test.hs index b1c3aa98802..9058afe19c0 100644 --- a/cabal-testsuite/PackageTests/CustomDep/cabal.test.hs +++ b/cabal-testsuite/PackageTests/CustomDep/cabal.test.hs @@ -1,7 +1,5 @@ import Test.Cabal.Prelude main = cabalTest $ do - -- NB: This variant seems to use the bootstrapped Cabal? - skipUnless "no Cabal for GHC" =<< hasCabalForGhc -- implicit setup-depends conflict with GHC >= 8.2; c.f. #415 skipUnlessGhcVersion "< 8.2" -- This test depends heavily on what packages are in the global diff --git a/cabal-testsuite/PackageTests/CustomPlain/setup.test.hs b/cabal-testsuite/PackageTests/CustomPlain/setup.test.hs index 2b4a27b1388..abf668397b8 100644 --- a/cabal-testsuite/PackageTests/CustomPlain/setup.test.hs +++ b/cabal-testsuite/PackageTests/CustomPlain/setup.test.hs @@ -1,5 +1,4 @@ import Test.Cabal.Prelude main = setupTest $ do - skipUnless "no Cabal for GHC" =<< hasCabalForGhc setup' "configure" [] >>= assertOutputContains "ThisIsCustomYeah" setup' "build" [] >>= assertOutputContains "ThisIsCustomYeah" diff --git a/cabal-testsuite/PackageTests/CustomPreProcess/cabal.test.hs b/cabal-testsuite/PackageTests/CustomPreProcess/cabal.test.hs index 93588d88c3f..3c20b50a160 100644 --- a/cabal-testsuite/PackageTests/CustomPreProcess/cabal.test.hs +++ b/cabal-testsuite/PackageTests/CustomPreProcess/cabal.test.hs @@ -1,8 +1,6 @@ import Test.Cabal.Prelude -- Test internal custom preprocessor main = cabalTest $ do - skipUnless "no Cabal for GHC" =<< hasCabalForGhc - -- old Cabal's ./Setup.hs output is difficult to normalise recordMode DoNotRecord $ cabal "v2-build" [] diff --git a/cabal-testsuite/PackageTests/CustomPreProcess/setup.test.hs b/cabal-testsuite/PackageTests/CustomPreProcess/setup.test.hs index 2dab697b8d4..b3d1f3c0a46 100644 --- a/cabal-testsuite/PackageTests/CustomPreProcess/setup.test.hs +++ b/cabal-testsuite/PackageTests/CustomPreProcess/setup.test.hs @@ -1,7 +1,6 @@ import Test.Cabal.Prelude -- Test internal custom preprocessor main = setupTest $ do - skipUnless "no Cabal for GHC" =<< hasCabalForGhc setup_build [] runExe' "hello-world" [] >>= assertOutputContains "hello from A" diff --git a/cabal-testsuite/PackageTests/CustomTestCoverage/cabal.out b/cabal-testsuite/PackageTests/CustomTestCoverage/cabal.out index a650ce81c42..8597dcc94df 100644 --- a/cabal-testsuite/PackageTests/CustomTestCoverage/cabal.out +++ b/cabal-testsuite/PackageTests/CustomTestCoverage/cabal.out @@ -4,14 +4,14 @@ Build profile: -w ghc- -O1 In order, the following will be built: - plain-0.1.0.0 *test (first run) Configuring plain-0.1.0.0... -Preprocessing library for plain-0.1.0.0.. -Building library for plain-0.1.0.0.. -Preprocessing test suite 'test' for plain-0.1.0.0.. -Building test suite 'test' for plain-0.1.0.0.. +Preprocessing library for plain-0.1.0.0... +Building library for plain-0.1.0.0... +Preprocessing test suite 'test' for plain-0.1.0.0... +Building test suite 'test' for plain-0.1.0.0... Running 1 test suites... Test suite test: RUNNING... Test suite test: PASS Test suite logged to: /cabal.dist/work/./dist/build//ghc-/plain-0.1.0.0/test/plain-0.1.0.0-test.log -Test coverage report written to /cabal.dist/work/./dist/build//ghc-/plain-0.1.0.0/hpc/vanilla/html/test/hpc_index.html +Package coverage report written to /cabal.dist/work/./dist/build//ghc-/plain-0.1.0.0/hpc/vanilla/html/hpc_index.html 1 of 1 test suites (1 of 1 test cases) passed. -Package coverage report written to /cabal.dist/work/./dist/build//ghc-/plain-0.1.0.0/hpc/vanilla/html/plain-0.1.0.0/hpc_index.html +Package coverage report written to /cabal.dist/work/./dist/build//ghc-/plain-0.1.0.0/hpc/vanilla/html/hpc_index.html diff --git a/cabal-testsuite/PackageTests/CustomTestCoverage/setup.test.hs b/cabal-testsuite/PackageTests/CustomTestCoverage/setup.test.hs index 7f40ed74bc8..86cc6a258ab 100644 --- a/cabal-testsuite/PackageTests/CustomTestCoverage/setup.test.hs +++ b/cabal-testsuite/PackageTests/CustomTestCoverage/setup.test.hs @@ -1,7 +1,7 @@ import Test.Cabal.Prelude main = setupTest $ do + skipIfGhcVersion "== 7.8.4" recordMode DoNotRecord $ do - skipUnless "no Cabal for GHC" =<< hasCabalForGhc setup' "configure" ["--enable-tests", "--enable-coverage"] >>= assertOutputContains "ThisIsCustomYeah" setup' "build" [] setup' "test" [] >>= assertOutputContains "Package coverage report written to" diff --git a/cabal-testsuite/PackageTests/DuplicateModuleName/setup.test.hs b/cabal-testsuite/PackageTests/DuplicateModuleName/setup.test.hs index 3739c793e8f..005578ce184 100644 --- a/cabal-testsuite/PackageTests/DuplicateModuleName/setup.test.hs +++ b/cabal-testsuite/PackageTests/DuplicateModuleName/setup.test.hs @@ -2,7 +2,7 @@ import Test.Cabal.Prelude -- Test that if two components have the same module name, they do not -- clobber each other. main = setupAndCabalTest $ do - skipUnless "no Cabal for GHC" =<< hasCabalForGhc -- use of library test suite + skipIfAllCabalVersion "< 2.2" setup_build ["--enable-tests"] r1 <- fails $ setup' "test" ["foo"] assertOutputContains "test B" r1 diff --git a/cabal-testsuite/PackageTests/ExternalCommandSetup/setup.cabal.hs b/cabal-testsuite/PackageTests/ExternalCommandSetup/setup.cabal.hs index d6bea04003f..7fb49a41923 100644 --- a/cabal-testsuite/PackageTests/ExternalCommandSetup/setup.cabal.hs +++ b/cabal-testsuite/PackageTests/ExternalCommandSetup/setup.cabal.hs @@ -11,4 +11,3 @@ main = setupTest $ do res <- fails $ withDirectory "custom" $ setup' "aaaa" [] assertOutputContains "unrecognised command" res - diff --git a/cabal-testsuite/PackageTests/ExtraProgPath/cabal.project b/cabal-testsuite/PackageTests/ExtraProgPath/cabal.project index 5a93e28e878..0d7f076e888 100644 --- a/cabal-testsuite/PackageTests/ExtraProgPath/cabal.project +++ b/cabal-testsuite/PackageTests/ExtraProgPath/cabal.project @@ -1 +1 @@ -packages: *.cabal \ No newline at end of file +packages: *.cabal diff --git a/cabal-testsuite/PackageTests/ForeignLibs/setup.test.hs b/cabal-testsuite/PackageTests/ForeignLibs/setup.test.hs index f667c93eb91..1dcf918eaed 100644 --- a/cabal-testsuite/PackageTests/ForeignLibs/setup.test.hs +++ b/cabal-testsuite/PackageTests/ForeignLibs/setup.test.hs @@ -29,8 +29,7 @@ main = setupAndCabalTest . recordMode DoNotRecord $ do skipUnlessGhcVersion ">= 7.8" win <- isWindows ghc94 <- isGhcVersion ">= 9.4.1" - ghc844 <- isGhcVersion "== 8.4.4" - expectBrokenIf (ghc844 || (win && ghc94)) 8451 $ + expectBrokenIf (win && ghc94) 8451 $ withPackageDb $ do setup_install [] setup "copy" [] -- regression test #4156 diff --git a/cabal-testsuite/PackageTests/HaddockArgs/cabal.project b/cabal-testsuite/PackageTests/HaddockArgs/cabal.project index 5356e76f67c..e6fdbadb439 100644 --- a/cabal-testsuite/PackageTests/HaddockArgs/cabal.project +++ b/cabal-testsuite/PackageTests/HaddockArgs/cabal.project @@ -1 +1 @@ -packages: . \ No newline at end of file +packages: . diff --git a/cabal-testsuite/PackageTests/HaddockArgs/hoogle.test.hs b/cabal-testsuite/PackageTests/HaddockArgs/hoogle.test.hs index 531072e3139..a974ac44455 100644 --- a/cabal-testsuite/PackageTests/HaddockArgs/hoogle.test.hs +++ b/cabal-testsuite/PackageTests/HaddockArgs/hoogle.test.hs @@ -1,10 +1,10 @@ import Test.Cabal.Prelude -main = withShorterPathForNewBuildStore $ \storeDir -> cabalTest $ withRepo "repo" $ do +main = cabalTest $ withShorterPathForNewBuildStore $ withRepo "repo" $ do -- Checks if hoogle txt files are generated. -- Logs contain something like "Documentation created: dist/doc/html/indef/indef.txt", so we don't need -- to do extra check - cabalG ["--store-dir=" ++ storeDir] "v2-build" + cabal "v2-build" [ "example" , "--enable-documentation" , "--haddock-hoogle" diff --git a/cabal-testsuite/PackageTests/HaddockArgs/quickjump.test.hs b/cabal-testsuite/PackageTests/HaddockArgs/quickjump.test.hs index 3b8a3281d69..de2df0f01e3 100644 --- a/cabal-testsuite/PackageTests/HaddockArgs/quickjump.test.hs +++ b/cabal-testsuite/PackageTests/HaddockArgs/quickjump.test.hs @@ -3,14 +3,13 @@ import Test.Cabal.Prelude import System.Directory import System.FilePath -main = withShorterPathForNewBuildStore $ \storeDir -> cabalTest $ withRepo "repo" $ do - cabalG ["--store-dir=" ++ storeDir] "v2-build" +main = cabalTest $ withShorterPathForNewBuildStore $ withRepo "repo" $ do + cabal "v2-build" [ "example" , "--enable-documentation" , "--haddock-quickjump" ] - liftIO $ do - libDir <- findDependencyInStore storeDir "indef" - assertFileDoesContain (libDir "cabal-hash.txt") "haddock-quickjump: True" - docIndexJsonExists <- doesFileExist (libDir "share" "doc" "html" "doc-index.json") - assertBool "doc-index.json doesn't exist, --quickjump is probably not passed to haddock" docIndexJsonExists + libDir <- findDependencyInStore "indef" + assertFileDoesContain (libDir "cabal-hash.txt") "haddock-quickjump: True" + docIndexJsonExists <- liftIO $ doesFileExist (libDir "share" "doc" "html" "doc-index.json") + assertBool "doc-index.json doesn't exist, --quickjump is probably not passed to haddock" docIndexJsonExists diff --git a/cabal-testsuite/PackageTests/HaddockBuildDepends/cabal.test.hs b/cabal-testsuite/PackageTests/HaddockBuildDepends/cabal.test.hs index 28821c5e858..6dee566fcec 100644 --- a/cabal-testsuite/PackageTests/HaddockBuildDepends/cabal.test.hs +++ b/cabal-testsuite/PackageTests/HaddockBuildDepends/cabal.test.hs @@ -5,17 +5,16 @@ main = cabalTest . withRepo "repo" $ do cabal "build" ["--enable-documentation"] env <- getTestEnv - let storeDir = testCabalDir env "store" -- Check properties of executable component - libDir <- liftIO $ findDependencyInStore storeDir "exe" + libDir <- findDependencyInStore "exe" -- Documentation is enabled.. assertFileDoesContain (libDir "cabal-hash.txt") "documentation: True" -- But not built shouldDirectoryNotExist ( libDir "share" "doc" ) -- Check properties of library - libDir <- liftIO $ findDependencyInStore storeDir "lib" + libDir <- findDependencyInStore "lib" -- Documentation is enabled.. assertFileDoesContain (libDir "cabal-hash.txt") "documentation: True" -- and has been built diff --git a/cabal-testsuite/PackageTests/HaddockWarn/cabal.project b/cabal-testsuite/PackageTests/HaddockWarn/cabal.project index 5356e76f67c..e6fdbadb439 100644 --- a/cabal-testsuite/PackageTests/HaddockWarn/cabal.project +++ b/cabal-testsuite/PackageTests/HaddockWarn/cabal.project @@ -1 +1 @@ -packages: . \ No newline at end of file +packages: . diff --git a/cabal-testsuite/PackageTests/Install/ProgramAffixes/Main.hs b/cabal-testsuite/PackageTests/Install/ProgramAffixes/Main.hs new file mode 100644 index 00000000000..76a9bdb5d48 --- /dev/null +++ b/cabal-testsuite/PackageTests/Install/ProgramAffixes/Main.hs @@ -0,0 +1 @@ +main = pure () diff --git a/cabal-testsuite/PackageTests/Install/ProgramAffixes/cabal.project b/cabal-testsuite/PackageTests/Install/ProgramAffixes/cabal.project new file mode 100644 index 00000000000..e6fdbadb439 --- /dev/null +++ b/cabal-testsuite/PackageTests/Install/ProgramAffixes/cabal.project @@ -0,0 +1 @@ +packages: . diff --git a/cabal-testsuite/PackageTests/Install/ProgramAffixes/cabal.test.hs b/cabal-testsuite/PackageTests/Install/ProgramAffixes/cabal.test.hs new file mode 100644 index 00000000000..c02eda531f6 --- /dev/null +++ b/cabal-testsuite/PackageTests/Install/ProgramAffixes/cabal.test.hs @@ -0,0 +1,27 @@ +import Test.Cabal.Prelude +import Data.Foldable (traverse_) + +-- Test that program affixes options result in successful installation: +-- • Valid symlinks (--install-method=symlink) +-- • Valid copy of executables (--install-method=copy) +main = cabalTest $ do + env <- getTestEnv + recordMode DoNotRecord $ do + let installdir = testPrefixDir env "bin" + commonOpts = ["p", "--installdir", installdir, "--overwrite-policy=always"] + testAllAffixes installMethod = do + let testAffixes' = testAffixes + (commonOpts ++ ["--install-method", installMethod]) + testAffixes' Nothing Nothing + testAffixes' (Just "a-") Nothing + testAffixes' Nothing (Just "-z") + testAffixes' (Just "a-") (Just "-z") + traverse_ testAllAffixes ["symlink", "copy"] + where + mkAffixOption option = maybe [] (\a -> ["--program-" ++ option, a]) + mkProgramName p s = maybe [] id p ++ "p" ++ maybe [] id s + testAffixes commonOpts prefix suffix = do + cabal "install" ( commonOpts + ++ mkAffixOption "prefix" prefix + ++ mkAffixOption "suffix" suffix) + runInstalledExe (mkProgramName prefix suffix) [] diff --git a/cabal-testsuite/PackageTests/Install/ProgramAffixes/p.cabal b/cabal-testsuite/PackageTests/Install/ProgramAffixes/p.cabal new file mode 100644 index 00000000000..30428ef4ac3 --- /dev/null +++ b/cabal-testsuite/PackageTests/Install/ProgramAffixes/p.cabal @@ -0,0 +1,8 @@ +name: p +version: 1.0 +build-type: Simple +cabal-version: >= 1.2 + +executable p + main-is: Main.hs + build-depends: base diff --git a/cabal-testsuite/PackageTests/Install/T8848/Main.hs b/cabal-testsuite/PackageTests/Install/T8848/Main.hs new file mode 100644 index 00000000000..76a9bdb5d48 --- /dev/null +++ b/cabal-testsuite/PackageTests/Install/T8848/Main.hs @@ -0,0 +1 @@ +main = pure () diff --git a/cabal-testsuite/PackageTests/Install/T8848/cabal.project b/cabal-testsuite/PackageTests/Install/T8848/cabal.project new file mode 100644 index 00000000000..ac8175d95e0 --- /dev/null +++ b/cabal-testsuite/PackageTests/Install/T8848/cabal.project @@ -0,0 +1,2 @@ +packages: . +extra-packages: containers diff --git a/cabal-testsuite/PackageTests/Install/T8848/cabal.test.hs b/cabal-testsuite/PackageTests/Install/T8848/cabal.test.hs new file mode 100644 index 00000000000..000662fd82b --- /dev/null +++ b/cabal-testsuite/PackageTests/Install/T8848/cabal.test.hs @@ -0,0 +1,6 @@ +import Test.Cabal.Prelude + +main = cabalTest $ do + recordMode DoNotRecord $ + cabal' "install" ["t8848"] + >>= assertOutputContains "Wrote tarball sdist to" diff --git a/cabal-testsuite/PackageTests/Install/T8848/t8848.cabal b/cabal-testsuite/PackageTests/Install/T8848/t8848.cabal new file mode 100644 index 00000000000..df445b7d99d --- /dev/null +++ b/cabal-testsuite/PackageTests/Install/T8848/t8848.cabal @@ -0,0 +1,8 @@ +name: t8848 +version: 1.0 +build-type: Simple +cabal-version: >= 1.2 + +executable t8848 + main-is: Main.hs + build-depends: base diff --git a/cabal-testsuite/PackageTests/Manpage/cabal.test.hs b/cabal-testsuite/PackageTests/Manpage/cabal.test.hs index 6b19fa4d7ce..68def219070 100644 --- a/cabal-testsuite/PackageTests/Manpage/cabal.test.hs +++ b/cabal-testsuite/PackageTests/Manpage/cabal.test.hs @@ -7,8 +7,8 @@ main = cabalTest $ do assertOutputContains ".B cabal install" r assertOutputDoesNotContain ".B cabal manpage" r - -- The following test of `cabal man` needs `nroff` which is not available under Windows. - unless (buildOS == Windows) $ do + -- The following test of `cabal man` needs `nroff` which is not available under Windows and OSX. + unless (buildOS == Windows || buildOS ==OSX) $ do -- Check that output of `cabal man --raw` can be passed through `nroff -man` -- without producing any warnings (which are printed to stderr). diff --git a/cabal-testsuite/PackageTests/MultiRepl/CabalTooOld/cabal.out b/cabal-testsuite/PackageTests/MultiRepl/CabalTooOld/cabal.out index f2253c67190..e69de29bb2d 100644 --- a/cabal-testsuite/PackageTests/MultiRepl/CabalTooOld/cabal.out +++ b/cabal-testsuite/PackageTests/MultiRepl/CabalTooOld/cabal.out @@ -1,11 +0,0 @@ -# cabal v2-update -Downloading the latest package list from test-local-repo -# cabal v2-repl -Resolving dependencies... -Error: [Cabal-7107] -Could not resolve dependencies: -[__0] trying: pkg-a-0 (user goal) -[__1] next goal: pkg-a:setup.Cabal (dependency of pkg-a) -[__1] rejecting: pkg-a:setup.Cabal-/installed-, pkg-a:setup.Cabal-3.8.0.0 (constraint from --enable-multi-repl requires >=3.11) -[__1] fail (backjumping, conflict set: pkg-a, pkg-a:setup.Cabal) -After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: pkg-a:setup.Cabal (3), pkg-a (2) diff --git a/cabal-testsuite/PackageTests/MultiRepl/CabalTooOld/cabal.test.hs b/cabal-testsuite/PackageTests/MultiRepl/CabalTooOld/cabal.test.hs index 978b52e72ec..2f4faa0c24d 100644 --- a/cabal-testsuite/PackageTests/MultiRepl/CabalTooOld/cabal.test.hs +++ b/cabal-testsuite/PackageTests/MultiRepl/CabalTooOld/cabal.test.hs @@ -1,5 +1,8 @@ import Test.Cabal.Prelude -main = cabalTest $ withRepo "repo" $ do +main = cabalTest $ recordMode DoNotRecord . withRepo "repo" $ do + -- For the multi-repl command skipUnlessGhcVersion ">= 9.4" - void $ fails $ cabalWithStdin "v2-repl" ["--keep-temp-files","--enable-multi-repl","pkg-a", "pkg-b"] "" + skipUnlessAnyCabalVersion "< 3.11" + res <- fails $ cabalWithStdin "v2-repl" ["--keep-temp-files","--enable-multi-repl","pkg-a", "pkg-b"] "" + assertOutputContains "constraint from --enable-multi-repl requires >=3.11" res diff --git a/cabal-testsuite/PackageTests/MultiRepl/EnabledBadClosure/cabal.out b/cabal-testsuite/PackageTests/MultiRepl/EnabledBadClosure/cabal.out index e92fa0c9fba..e69de29bb2d 100644 --- a/cabal-testsuite/PackageTests/MultiRepl/EnabledBadClosure/cabal.out +++ b/cabal-testsuite/PackageTests/MultiRepl/EnabledBadClosure/cabal.out @@ -1,9 +0,0 @@ -# cabal v2-repl -Resolving dependencies... -Error: [Cabal-7107] -Could not resolve dependencies: -[__0] trying: pkg-b-0 (user goal) -[__1] next goal: pkg-b:setup.Cabal (dependency of pkg-b) -[__1] rejecting: pkg-b:setup.Cabal-/installed- (constraint from --enable-multi-repl requires >=3.11) -[__1] fail (backjumping, conflict set: pkg-b, pkg-b:setup.Cabal) -After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: pkg-b (2), pkg-b:setup.Cabal (2) diff --git a/cabal-testsuite/PackageTests/MultiRepl/EnabledBadClosure/cabal.test.hs b/cabal-testsuite/PackageTests/MultiRepl/EnabledBadClosure/cabal.test.hs index 2fcfe8e6533..3f86e566dfa 100644 --- a/cabal-testsuite/PackageTests/MultiRepl/EnabledBadClosure/cabal.test.hs +++ b/cabal-testsuite/PackageTests/MultiRepl/EnabledBadClosure/cabal.test.hs @@ -1,9 +1,8 @@ import Test.Cabal.Prelude main = do - cabalTest $ do - -- MP: TODO: This should query Cabal library version - skipIfGhcVersion ">= 9.10" + cabalTest $ recordMode DoNotRecord $ do + skipUnlessAnyCabalVersion "< 3.11" -- Note: only the last package is interactive. -- this test should load pkg-b too. res <- fails $ cabalWithStdin "v2-repl" ["--enable-multi-repl","pkg-c", "pkg-a"] "Quu.quu" diff --git a/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/CHANGELOG.md b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/CHANGELOG.md new file mode 100644 index 00000000000..fd67fc8144e --- /dev/null +++ b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/CHANGELOG.md @@ -0,0 +1,5 @@ +# Revision history for extra-options + +## 0.1.0.0 -- YYYY-mm-dd + +* First version. Released on an unsuspecting world. diff --git a/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/LICENSE b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/LICENSE new file mode 100644 index 00000000000..5c92e310c86 --- /dev/null +++ b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/LICENSE @@ -0,0 +1,30 @@ +Copyright (c) 2024, Matthew Pickering + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * Neither the name of Matthew Pickering nor the names of other + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/app/Main.hs b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/app/Main.hs new file mode 100644 index 00000000000..576a1174fe8 --- /dev/null +++ b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/app/Main.hs @@ -0,0 +1,10 @@ +module Main where + +import qualified MyLib (someFunc) + +#ifdef FOO +main :: IO () +main = do + putStrLn "Hello, Haskell!" + MyLib.someFunc +#endif diff --git a/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/cabal.out b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/cabal.out new file mode 100644 index 00000000000..2032e6d4542 --- /dev/null +++ b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/cabal.out @@ -0,0 +1,13 @@ +# cabal v2-repl +Resolving dependencies... +Build profile: -w ghc- -O1 +In order, the following will be built: + - extra-options-0.1.0.0 (interactive) (lib) (first run) + - extra-options-0.1.0.0 (interactive) (test:extra-options-test) (first run) + - extra-options-0.1.0.0 (interactive) (exe:extra-options) (first run) +Configuring library for extra-options-0.1.0.0... +Preprocessing library for extra-options-0.1.0.0... +Configuring test suite 'extra-options-test' for extra-options-0.1.0.0... +Preprocessing test suite 'extra-options-test' for extra-options-0.1.0.0... +Configuring executable 'extra-options' for extra-options-0.1.0.0... +Preprocessing executable 'extra-options' for extra-options-0.1.0.0... diff --git a/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/cabal.project b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/cabal.project new file mode 100644 index 00000000000..f991c04133a --- /dev/null +++ b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/cabal.project @@ -0,0 +1,6 @@ +packages: . + +tests: True + +program-options + ghc-options: -XCPP -DFOO diff --git a/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/cabal.test.hs b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/cabal.test.hs new file mode 100644 index 00000000000..313609f30ad --- /dev/null +++ b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/cabal.test.hs @@ -0,0 +1,6 @@ +import Test.Cabal.Prelude + +main = do + cabalTest $ do + skipUnlessGhcVersion ">= 9.4" + void $ cabalWithStdin "v2-repl" ["--enable-multi-repl","all"] "" diff --git a/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/extra-options.cabal b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/extra-options.cabal new file mode 100644 index 00000000000..e1b9c13aadc --- /dev/null +++ b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/extra-options.cabal @@ -0,0 +1,39 @@ +cabal-version: 3.0 +name: extra-options +version: 0.1.0.0 +license: BSD-3-Clause +license-file: LICENSE +author: Matthew Pickering +maintainer: matthewtpickering@gmail.com +build-type: Simple +extra-doc-files: CHANGELOG.md + +common warnings + ghc-options: -Wall + +library + import: warnings + exposed-modules: MyLib + build-depends: base + hs-source-dirs: src + default-language: Haskell2010 + +executable extra-options + import: warnings + main-is: Main.hs + build-depends: + base, + extra-options + + hs-source-dirs: app + default-language: Haskell2010 + +test-suite extra-options-test + import: warnings + default-language: Haskell2010 + type: exitcode-stdio-1.0 + hs-source-dirs: test + main-is: Main.hs + build-depends: + base, + extra-options diff --git a/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/src/MyLib.hs b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/src/MyLib.hs new file mode 100644 index 00000000000..acdf14c0c9e --- /dev/null +++ b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/src/MyLib.hs @@ -0,0 +1,6 @@ +module MyLib (someFunc) where + +#ifdef FOO +someFunc :: IO () +someFunc = putStrLn "someFunc" +#endif diff --git a/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/test/Main.hs b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/test/Main.hs new file mode 100644 index 00000000000..f60b8ae5379 --- /dev/null +++ b/cabal-testsuite/PackageTests/MultiRepl/ExtraOptions/test/Main.hs @@ -0,0 +1,6 @@ +module Main (main) where + +#ifdef FOO +main :: IO () +main = putStrLn "Test suite not yet implemented." +#endif diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRepl/CustomSetup/foo/Setup.hs b/cabal-testsuite/PackageTests/NewBuild/CmdRepl/CustomSetup/foo/Setup.hs index 4cfb12a5527..5f30459ab90 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRepl/CustomSetup/foo/Setup.hs +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRepl/CustomSetup/foo/Setup.hs @@ -5,4 +5,4 @@ import qualified Distribution.Simple as DS import Distribution.Simple.Setup main :: IO () -main = DS.defaultMainWithHooks DS.simpleUserHooks +main = DS.defaultMainWithHooks DS.simpleUserHooks diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Script/cabal.project b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Script/cabal.project index 5356e76f67c..e6fdbadb439 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Script/cabal.project +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Script/cabal.project @@ -1 +1 @@ -packages: . \ No newline at end of file +packages: . diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/ScriptLiterate/cabal.project b/cabal-testsuite/PackageTests/NewBuild/CmdRun/ScriptLiterate/cabal.project index 5356e76f67c..e6fdbadb439 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/ScriptLiterate/cabal.project +++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/ScriptLiterate/cabal.project @@ -1 +1 @@ -packages: . \ No newline at end of file +packages: . diff --git a/cabal-testsuite/PackageTests/NewBuild/CustomSetup/LocalPackageWithCustomSetup/build-local-package-with-custom-setup.test.hs b/cabal-testsuite/PackageTests/NewBuild/CustomSetup/LocalPackageWithCustomSetup/build-local-package-with-custom-setup.test.hs index 242289958e0..0bb3432caa9 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CustomSetup/LocalPackageWithCustomSetup/build-local-package-with-custom-setup.test.hs +++ b/cabal-testsuite/PackageTests/NewBuild/CustomSetup/LocalPackageWithCustomSetup/build-local-package-with-custom-setup.test.hs @@ -2,11 +2,10 @@ import Test.Cabal.Prelude -- The one local package, pkg, has a setup dependency on setup-dep-2.0, which is -- in the repository. -main = withShorterPathForNewBuildStore $ \storeDir -> - cabalTest $ do +main = cabalTest $ withShorterPathForNewBuildStore $ do skipUnless "no v2-build compatible boot-Cabal" =<< hasNewBuildCompatBootCabal withRepo "repo" $ do - r <- recordMode DoNotRecord $ cabalG' ["--store-dir=" ++ storeDir] "v2-build" ["pkg"] + r <- recordMode DoNotRecord $ cabal' "v2-build" ["pkg"] -- pkg's setup script should print out a message that it imported from -- setup-dep: assertOutputContains "pkg Setup.hs: setup-dep-2.0" r diff --git a/cabal-testsuite/PackageTests/NewBuild/CustomSetup/RemotePackageWithCustomSetup/build-package-from-repo-with-custom-setup.test.hs b/cabal-testsuite/PackageTests/NewBuild/CustomSetup/RemotePackageWithCustomSetup/build-package-from-repo-with-custom-setup.test.hs index 5df3bd44e2e..f3774f78cd7 100644 --- a/cabal-testsuite/PackageTests/NewBuild/CustomSetup/RemotePackageWithCustomSetup/build-package-from-repo-with-custom-setup.test.hs +++ b/cabal-testsuite/PackageTests/NewBuild/CustomSetup/RemotePackageWithCustomSetup/build-package-from-repo-with-custom-setup.test.hs @@ -2,15 +2,15 @@ import Test.Cabal.Prelude -- The one local package, pkg, has a dependency on remote-pkg-2.0, which has a -- setup dependency on remote-setup-dep-3.0. -main = withShorterPathForNewBuildStore $ \storeDir -> - cabalTest $ do +main = + cabalTest $ withShorterPathForNewBuildStore $ do -- TODO: Debug this failure on Windows. skipIfWindows skipUnless "no v2-build compatible boot-Cabal" =<< hasNewBuildCompatBootCabal withRepo "repo" $ do - r1 <- recordMode DoNotRecord $ cabalG' ["--store-dir=" ++ storeDir] "v2-build" ["pkg:my-exe"] + r1 <- recordMode DoNotRecord $ cabal' "v2-build" ["pkg:my-exe"] -- remote-pkg's setup script should print out a message that it imported from -- remote-setup-dep: assertOutputContains "remote-pkg Setup.hs: remote-setup-dep-3.0" r1 diff --git a/cabal-testsuite/PackageTests/NewBuild/T4375/cabal.test.hs b/cabal-testsuite/PackageTests/NewBuild/T4375/cabal.test.hs index e13a7dfdeaf..b42f3f28c7a 100644 --- a/cabal-testsuite/PackageTests/NewBuild/T4375/cabal.test.hs +++ b/cabal-testsuite/PackageTests/NewBuild/T4375/cabal.test.hs @@ -1,7 +1,7 @@ import Test.Cabal.Prelude -main = withShorterPathForNewBuildStore $ \storeDir -> +main = -- TODO: is this test ever run? - cabalTest $ do + cabalTest $ withShorterPathForNewBuildStore $ do -- Don't run this test unless the GHC is sufficiently recent -- to not ship boot old-time/old-locale skipUnlessGhcVersion ">= 7.11" @@ -10,4 +10,4 @@ main = withShorterPathForNewBuildStore $ \storeDir -> -- we had the full Hackage index, we'd try it.) skipUnlessGhcVersion "< 8.1" withRepo "repo" $ do - cabalG ["--store-dir=" ++ storeDir] "v2-build" ["a"] + cabal "v2-build" ["a"] diff --git a/cabal-testsuite/PackageTests/NewBuild/T8875/T8875.cabal b/cabal-testsuite/PackageTests/NewBuild/T8875/T8875.cabal new file mode 100644 index 00000000000..9372c1977f9 --- /dev/null +++ b/cabal-testsuite/PackageTests/NewBuild/T8875/T8875.cabal @@ -0,0 +1,9 @@ +cabal-version: 3.0 +name: T8875 +version: 0.1.0.0 + +executable foo + main-is: Main.hs + build-depends: base + hs-source-dirs: "a app" + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/NewBuild/T8875/a app/Main.hs b/cabal-testsuite/PackageTests/NewBuild/T8875/a app/Main.hs new file mode 100644 index 00000000000..b3549c2fe3d --- /dev/null +++ b/cabal-testsuite/PackageTests/NewBuild/T8875/a app/Main.hs @@ -0,0 +1 @@ +main = return () diff --git a/cabal-testsuite/PackageTests/NewBuild/T8875/cabal.out b/cabal-testsuite/PackageTests/NewBuild/T8875/cabal.out new file mode 100644 index 00000000000..7bb94dd545c --- /dev/null +++ b/cabal-testsuite/PackageTests/NewBuild/T8875/cabal.out @@ -0,0 +1,8 @@ +# cabal v2-build +Resolving dependencies... +Build profile: -w ghc- -O1 +In order, the following will be built: + - T8875-0.1.0.0 (exe:foo) (first run) +Configuring executable 'foo' for T8875-0.1.0.0... +Preprocessing executable 'foo' for T8875-0.1.0.0... +Building executable 'foo' for T8875-0.1.0.0... diff --git a/cabal-testsuite/PackageTests/NewBuild/T8875/cabal.project b/cabal-testsuite/PackageTests/NewBuild/T8875/cabal.project new file mode 100644 index 00000000000..e6fdbadb439 --- /dev/null +++ b/cabal-testsuite/PackageTests/NewBuild/T8875/cabal.project @@ -0,0 +1 @@ +packages: . diff --git a/cabal-testsuite/PackageTests/NewBuild/T8875/cabal.test.hs b/cabal-testsuite/PackageTests/NewBuild/T8875/cabal.test.hs new file mode 100644 index 00000000000..a9120447cb9 --- /dev/null +++ b/cabal-testsuite/PackageTests/NewBuild/T8875/cabal.test.hs @@ -0,0 +1,5 @@ +import Test.Cabal.Prelude + +main = cabalTest . void $ do + -- Building a target that contains whitespace + cabal' "v2-build" ["a app/Main.hs"] diff --git a/cabal-testsuite/PackageTests/NewConfigure/ConfigFile/cabal.test.hs b/cabal-testsuite/PackageTests/NewConfigure/ConfigFile/cabal.test.hs index 1e10c0fc284..2129c7c9ac7 100644 --- a/cabal-testsuite/PackageTests/NewConfigure/ConfigFile/cabal.test.hs +++ b/cabal-testsuite/PackageTests/NewConfigure/ConfigFile/cabal.test.hs @@ -1,18 +1,18 @@ import Test.Cabal.Prelude -- Test that 'cabal v2-configure' generates the config file appropriately -main = withShorterPathForNewBuildStore $ \storeDir -> - cabalTest $ do +main = + cabalTest . withShorterPathForNewBuildStore $ do cwd <- fmap testCurrentDir getTestEnv let configFile = cwd "cabal.project.local" shouldNotExist configFile -- should not create config file with --dry-run or --only-download - cabalG ["--store-dir=" ++ storeDir] "v2-configure" ["--dry-run"] - cabalG ["--store-dir=" ++ storeDir] "v2-configure" ["--only-download"] + cabal "v2-configure" ["--dry-run"] + cabal "v2-configure" ["--only-download"] shouldNotExist configFile -- should create the config file - cabalG ["--store-dir=" ++ storeDir] "v2-configure" [] + cabal "v2-configure" [] shouldExist configFile diff --git a/cabal-testsuite/PackageTests/NewFreeze/FreezeFile/new_freeze.test.hs b/cabal-testsuite/PackageTests/NewFreeze/FreezeFile/new_freeze.test.hs index b59c0ee7f31..8a2718f6d03 100644 --- a/cabal-testsuite/PackageTests/NewFreeze/FreezeFile/new_freeze.test.hs +++ b/cabal-testsuite/PackageTests/NewFreeze/FreezeFile/new_freeze.test.hs @@ -5,8 +5,8 @@ import System.Directory -- Test for 'cabal v2-freeze' with only a single library dependency. -- my-local-package depends on my-library-dep, which has versions 1.0 and 2.0. -main = withShorterPathForNewBuildStore $ \storeDir -> - cabalTest $ +main = + cabalTest $ withShorterPathForNewBuildStore $ withRepo "repo" $ do cwd <- fmap testCurrentDir getTestEnv let freezeFile = cwd "cabal.project.freeze" @@ -14,15 +14,15 @@ main = withShorterPathForNewBuildStore $ \storeDir -> shouldNotExist freezeFile -- v2-build should choose the latest version for the dependency. - cabalG' ["--store-dir=" ++ storeDir] "v2-build" ["--dry-run"] >>= assertUsesLatestDependency + cabal' "v2-build" ["--dry-run"] >>= assertUsesLatestDependency -- should not create freeze file with --dry-run or --only-download flags - cabalG' ["--store-dir=" ++ storeDir] "v2-freeze" ["--dry-run"] - cabalG' ["--store-dir=" ++ storeDir] "v2-freeze" ["--only-download"] + cabal' "v2-freeze" ["--dry-run"] + cabal' "v2-freeze" ["--only-download"] shouldNotExist freezeFile -- Freeze a dependency on the older version. - cabalG ["--store-dir=" ++ storeDir] "v2-freeze" ["--constraint=my-library-dep==1.0"] + cabal "v2-freeze" ["--constraint=my-library-dep==1.0"] -- The file should constrain the dependency, but not the local package. shouldExist freezeFile @@ -31,21 +31,21 @@ main = withShorterPathForNewBuildStore $ \storeDir -> -- cabal should be able to build the package using the constraint from the -- freeze file. - cabalG' ["--store-dir=" ++ storeDir] "v2-build" [] >>= assertDoesNotUseLatestDependency + cabal' "v2-build" [] >>= assertDoesNotUseLatestDependency -- Re-running v2-freeze should not change the constraints, because cabal -- should use the existing freeze file when choosing the new install plan. - cabalG ["--store-dir=" ++ storeDir] "v2-freeze" [] + cabal "v2-freeze" [] assertFileDoesContain freezeFile "any.my-library-dep ==1.0" -- cabal should choose the latest version again after the freeze file is -- removed. liftIO $ removeFile freezeFile - cabalG' ["--store-dir=" ++ storeDir] "v2-build" ["--dry-run"] >>= assertUsesLatestDependency + cabal' "v2-build" ["--dry-run"] >>= assertUsesLatestDependency -- Re-running v2-freeze with no constraints or freeze file should constrain -- the dependency to the latest version. - cabalG ["--store-dir=" ++ storeDir] "v2-freeze" [] + cabal "v2-freeze" [] assertFileDoesContain freezeFile "any.my-library-dep ==2.0" assertFileDoesNotContain freezeFile "my-local-package" where diff --git a/cabal-testsuite/PackageTests/NewHaddock/Fails/cabal.project b/cabal-testsuite/PackageTests/NewHaddock/Fails/cabal.project index 5356e76f67c..e6fdbadb439 100644 --- a/cabal-testsuite/PackageTests/NewHaddock/Fails/cabal.project +++ b/cabal-testsuite/PackageTests/NewHaddock/Fails/cabal.project @@ -1 +1 @@ -packages: . \ No newline at end of file +packages: . diff --git a/cabal-testsuite/PackageTests/NewSdist/DeterministicTrivial/cabal.project b/cabal-testsuite/PackageTests/NewSdist/DeterministicTrivial/cabal.project index 5356e76f67c..e6fdbadb439 100644 --- a/cabal-testsuite/PackageTests/NewSdist/DeterministicTrivial/cabal.project +++ b/cabal-testsuite/PackageTests/NewSdist/DeterministicTrivial/cabal.project @@ -1 +1 @@ -packages: . \ No newline at end of file +packages: . diff --git a/cabal-testsuite/PackageTests/NewUpdate/RejectFutureIndexStates/cabal.test.hs b/cabal-testsuite/PackageTests/NewUpdate/RejectFutureIndexStates/cabal.test.hs index 8d22aed3494..475a093360d 100644 --- a/cabal-testsuite/PackageTests/NewUpdate/RejectFutureIndexStates/cabal.test.hs +++ b/cabal-testsuite/PackageTests/NewUpdate/RejectFutureIndexStates/cabal.test.hs @@ -1,10 +1,14 @@ import Test.Cabal.Prelude import Data.List (isPrefixOf) -main = cabalTest $ withProjectFile "cabal.project" $ withRemoteRepo "repo" $ do +main = cabalTest $ do skip "Flaky test failing in `curl`, see #9530" + testBody + +testBody = withProjectFile "cabal.project" $ withRemoteRepo "repo" $ do + output <- last . words . head diff --git a/cabal-testsuite/PackageTests/NewUpdate/UpdateIndexState/update-index-state.test.hs b/cabal-testsuite/PackageTests/NewUpdate/UpdateIndexState/update-index-state.test.hs index 24b1e7b5dd6..e6485d51f71 100644 --- a/cabal-testsuite/PackageTests/NewUpdate/UpdateIndexState/update-index-state.test.hs +++ b/cabal-testsuite/PackageTests/NewUpdate/UpdateIndexState/update-index-state.test.hs @@ -1,9 +1,13 @@ import Test.Cabal.Prelude -main = cabalTest $ withRemoteRepo "repo" $ do +main = cabalTest $ do skip "Flaky test failing in `curl`, see #9530" + testBody + +testBody = withRemoteRepo "repo" $ do + -- The _first_ update call causes a warning about missing mirrors, the warning -- is platform-dependent and it's not part of the test expectations, so we -- check the output manually. diff --git a/cabal-testsuite/PackageTests/OfflineFlag/offlineFlag.test.hs b/cabal-testsuite/PackageTests/OfflineFlag/offlineFlag.test.hs index 38132f0c132..7c9617a623c 100644 --- a/cabal-testsuite/PackageTests/OfflineFlag/offlineFlag.test.hs +++ b/cabal-testsuite/PackageTests/OfflineFlag/offlineFlag.test.hs @@ -1,11 +1,11 @@ import Test.Cabal.Prelude -main = withShorterPathForNewBuildStore $ \storeDir -> - cabalTest $ do +main = + cabalTest $ withShorterPathForNewBuildStore $ do skipUnlessGhcVersion ">= 8.1" skipIfWindows withProjectFile "cabal.repo.project" $ do withRepo "repo" $ do - fails $ cabalG ["--store-dir=" ++ storeDir] "v2-build" ["current", "--offline"] - cabalG ["--store-dir=" ++ storeDir] "v2-build" ["current"] - cabalG ["--store-dir=" ++ storeDir] "v2-build" ["current", "--offline"] + fails $ cabal "v2-build" ["current", "--offline"] + cabal "v2-build" ["current"] + cabal "v2-build" ["current", "--offline"] diff --git a/cabal-testsuite/PackageTests/OnlyTestSuite/OnlyTestSuite.cabal b/cabal-testsuite/PackageTests/OnlyTestSuite/OnlyTestSuite.cabal new file mode 100644 index 00000000000..c449f91998c --- /dev/null +++ b/cabal-testsuite/PackageTests/OnlyTestSuite/OnlyTestSuite.cabal @@ -0,0 +1,15 @@ +cabal-version: 3.0 +name: OnlyTestSuite +version: 0.1.0.0 +build-type: Simple + +common warnings + ghc-options: -Wall + +test-suite OnlyTestSuite-test + import: warnings + default-language: Haskell2010 + type: exitcode-stdio-1.0 + hs-source-dirs: test + main-is: Main.hs + build-depends: base diff --git a/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.cabal.out b/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.cabal.out new file mode 100644 index 00000000000..829de87b0cc --- /dev/null +++ b/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.cabal.out @@ -0,0 +1,6 @@ +# Setup configure +Configuring OnlyTestSuite-0.1.0.0... +# Setup build +Building OnlyTestSuite-0.1.0.0... +# Setup copy +Warning: No executables and no library found. Nothing to do. diff --git a/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.out b/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.out new file mode 100644 index 00000000000..829de87b0cc --- /dev/null +++ b/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.out @@ -0,0 +1,6 @@ +# Setup configure +Configuring OnlyTestSuite-0.1.0.0... +# Setup build +Building OnlyTestSuite-0.1.0.0... +# Setup copy +Warning: No executables and no library found. Nothing to do. diff --git a/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.test.hs b/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.test.hs new file mode 100644 index 00000000000..6e715d370e8 --- /dev/null +++ b/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.test.hs @@ -0,0 +1,6 @@ +import Test.Cabal.Prelude +main = setupAndCabalTest $ do + withPackageDb $ do + setup "configure" [] + setup "build" [] + setup "copy" [] diff --git a/cabal-testsuite/PackageTests/OnlyTestSuite/test/Main.hs b/cabal-testsuite/PackageTests/OnlyTestSuite/test/Main.hs new file mode 100644 index 00000000000..3e2059e31f5 --- /dev/null +++ b/cabal-testsuite/PackageTests/OnlyTestSuite/test/Main.hs @@ -0,0 +1,4 @@ +module Main (main) where + +main :: IO () +main = putStrLn "Test suite not yet implemented." diff --git a/cabal-testsuite/PackageTests/PackageDB/cabal-fail-no-packagedbs.test.hs b/cabal-testsuite/PackageTests/PackageDB/cabal-fail-no-packagedbs.test.hs index 1cc0f54d159..5335d960ab8 100644 --- a/cabal-testsuite/PackageTests/PackageDB/cabal-fail-no-packagedbs.test.hs +++ b/cabal-testsuite/PackageTests/PackageDB/cabal-fail-no-packagedbs.test.hs @@ -1,6 +1,6 @@ import Test.Cabal.Prelude main = cabalTest $ do - withPackageDb $ do + noCabalPackageDb . withPackageDb $ do withDirectory "p-no-package-dbs" $ do res <- fails $ cabal' "v2-build" [] assertOutputContains "No package databases have been specified." res diff --git a/cabal-testsuite/PackageTests/Path/All/cabal.out b/cabal-testsuite/PackageTests/Path/All/cabal.out index 55d8b94bc3a..0f710cc0fb1 100644 --- a/cabal-testsuite/PackageTests/Path/All/cabal.out +++ b/cabal-testsuite/PackageTests/Path/All/cabal.out @@ -1,6 +1,98 @@ # cabal path -cache-dir: /cabal.dist/home/.cabal/packages +{"cabal-version":"","compiler":{"flavour":"ghc","id":"ghc-","path":""},"logs-dir":"/cabal.dist/home/.cabal/logs","installdir":"/cabal.dist/home/.cabal/bin"} +# cabal path +{"cabal-version":"","compiler":{"flavour":"ghc","id":"ghc-","path":""},"store-dir":"/cabal.dist/home/.cabal/store","config-file":"/cabal.dist/home/.cabal/config"} +# cabal path +{"cabal-version":"","compiler":{"flavour":"ghc","id":"ghc-","path":""},"remote-repo-cache":"/cabal.dist/home/.cabal/packages"} +# cabal path +{"cabal-version":"","compiler":{"flavour":"ghc","id":"ghc-","path":""},"cache-home":"/cabal.dist/home/.cabal","remote-repo-cache":"/cabal.dist/home/.cabal/packages","logs-dir":"/cabal.dist/home/.cabal/logs","store-dir":"/cabal.dist/home/.cabal/store","config-file":"/cabal.dist/home/.cabal/config","installdir":"/cabal.dist/home/.cabal/bin"} +# cabal path +{"cabal-version":"","cache-home":"/cabal.dist/home/.cabal"} +# cabal path +{"cabal-version":"","remote-repo-cache":"/cabal.dist/home/.cabal/packages"} +# cabal path +{"cabal-version":"","logs-dir":"/cabal.dist/home/.cabal/logs"} +# cabal path +{"cabal-version":"","store-dir":"/cabal.dist/home/.cabal/store"} +# cabal path +{"cabal-version":"","config-file":"/cabal.dist/home/.cabal/config"} +# cabal path +{"cabal-version":"","installdir":"/cabal.dist/home/.cabal/bin"} +# cabal path +compiler-flavour: ghc +compiler-id: ghc- +compiler-path: +logs-dir: /cabal.dist/home/.cabal/logs +installdir: /cabal.dist/home/.cabal/bin +# cabal path +compiler-flavour: ghc +compiler-id: ghc- +compiler-path: +store-dir: /cabal.dist/home/.cabal/store +config-file: /cabal.dist/home/.cabal/config +# cabal path +compiler-flavour: ghc +compiler-id: ghc- +compiler-path: +remote-repo-cache: /cabal.dist/home/.cabal/packages +# cabal path +compiler-flavour: ghc +compiler-id: ghc- +compiler-path: +cache-home: /cabal.dist/home/.cabal +remote-repo-cache: /cabal.dist/home/.cabal/packages logs-dir: /cabal.dist/home/.cabal/logs store-dir: /cabal.dist/home/.cabal/store config-file: /cabal.dist/home/.cabal/config installdir: /cabal.dist/home/.cabal/bin +# cabal path +/cabal.dist/home/.cabal +# cabal path +/cabal.dist/home/.cabal/packages +# cabal path +/cabal.dist/home/.cabal/logs +# cabal path +/cabal.dist/home/.cabal/store +# cabal path +/cabal.dist/home/.cabal/config +# cabal path +/cabal.dist/home/.cabal/bin +# cabal path +compiler-flavour: ghc +compiler-id: ghc- +compiler-path: +logs-dir: /cabal.dist/home/.cabal/logs +installdir: /cabal.dist/home/.cabal/bin +# cabal path +compiler-flavour: ghc +compiler-id: ghc- +compiler-path: +store-dir: /cabal.dist/home/.cabal/store +config-file: /cabal.dist/home/.cabal/config +# cabal path +compiler-flavour: ghc +compiler-id: ghc- +compiler-path: +remote-repo-cache: /cabal.dist/home/.cabal/packages +# cabal path +compiler-flavour: ghc +compiler-id: ghc- +compiler-path: +cache-home: /cabal.dist/home/.cabal +remote-repo-cache: /cabal.dist/home/.cabal/packages +logs-dir: /cabal.dist/home/.cabal/logs +store-dir: /cabal.dist/home/.cabal/store +config-file: /cabal.dist/home/.cabal/config +installdir: /cabal.dist/home/.cabal/bin +# cabal path +/cabal.dist/home/.cabal +# cabal path +/cabal.dist/home/.cabal/packages +# cabal path +/cabal.dist/home/.cabal/logs +# cabal path +/cabal.dist/home/.cabal/store +# cabal path +/cabal.dist/home/.cabal/config +# cabal path +/cabal.dist/home/.cabal/bin diff --git a/cabal-testsuite/PackageTests/Path/All/cabal.test.hs b/cabal-testsuite/PackageTests/Path/All/cabal.test.hs index b8157a83ee8..a1c0db98e8c 100644 --- a/cabal-testsuite/PackageTests/Path/All/cabal.test.hs +++ b/cabal-testsuite/PackageTests/Path/All/cabal.test.hs @@ -1,3 +1,29 @@ import Test.Cabal.Prelude +import Data.List (subsequences) -main = cabalTest . void $ cabal "path" [] +allOutputFormats = + [ ["--output-format", "json"] + , ["--output-format", "key-value"] + , [] -- no specific output format + ] + +cabalPathPathFlags = + [ "--cache-home" + , "--remote-repo-cache" + , "--logs-dir" + , "--store-dir" + , "--config-file" + , "--installdir" + ] + +main = cabalTest $ do + forM_ allOutputFormats $ \outputFormat -> do + -- Mix and match with some flags + cabal "path" $ outputFormat <> ["--compiler-info", "--logs-dir", "--installdir"] + cabal "path" $ outputFormat <> ["--store-dir", "--compiler-info", "--config-file"] + cabal "path" $ outputFormat <> ["--remote-repo-cache", "--compiler-info"] + cabal "path" $ outputFormat <> [] + -- 'cabal path' works when the compiler is unknown but no compiler info is asked. + -- requires '-z' flag. + forM_ cabalPathPathFlags $ \pathFlag -> do + cabal "path" $ ["-w", "unknown-compiler", "-z"] <> outputFormat <> [pathFlag] diff --git a/cabal-testsuite/PackageTests/Path/Compiler/cabal.out b/cabal-testsuite/PackageTests/Path/Compiler/cabal.out new file mode 100644 index 00000000000..a640aa60948 --- /dev/null +++ b/cabal-testsuite/PackageTests/Path/Compiler/cabal.out @@ -0,0 +1,10 @@ +# cabal path +compiler-flavour: ghc +compiler-id: ghc- +compiler-path: +# cabal path +{"cabal-version":"","compiler":{"flavour":"ghc","id":"ghc-","path":""}} +# cabal path +compiler-flavour: ghc +compiler-id: ghc- +compiler-path: diff --git a/cabal-testsuite/PackageTests/Path/Compiler/cabal.test.hs b/cabal-testsuite/PackageTests/Path/Compiler/cabal.test.hs new file mode 100644 index 00000000000..b70251cf574 --- /dev/null +++ b/cabal-testsuite/PackageTests/Path/Compiler/cabal.test.hs @@ -0,0 +1,7 @@ +import Test.Cabal.Prelude + +main = cabalTest $ do + -- Basic output + void $ cabal "path" ["-z", "--output-format=key-value", "--compiler-info"] + void $ cabal "path" ["-z", "--output-format=json", "--compiler-info"] + void $ cabal "path" ["-z", "--compiler-info"] diff --git a/cabal-testsuite/PackageTests/Path/Config/cabal.out b/cabal-testsuite/PackageTests/Path/Config/cabal.out new file mode 100644 index 00000000000..2263588109f --- /dev/null +++ b/cabal-testsuite/PackageTests/Path/Config/cabal.out @@ -0,0 +1,150 @@ +# cabal path +/cabal.dist/home/.cabal +# cabal path +{"cabal-version":"","cache-home":"/cabal.dist/home/.cabal"} +# cabal path +/cabal.dist/home/.cabal +# cabal path +/cabal.dist/home/.cabal/packages +# cabal path +{"cabal-version":"","remote-repo-cache":"/cabal.dist/home/.cabal/packages"} +# cabal path +/cabal.dist/home/.cabal/packages +# cabal path +/cabal.dist/home/.cabal/logs +# cabal path +{"cabal-version":"","logs-dir":"/cabal.dist/home/.cabal/logs"} +# cabal path +/cabal.dist/home/.cabal/logs +# cabal path +/cabal.dist/home/.cabal/store +# cabal path +{"cabal-version":"","store-dir":"/cabal.dist/home/.cabal/store"} +# cabal path +/cabal.dist/home/.cabal/store +# cabal path +/cabal.dist/home/.cabal/config +# cabal path +{"cabal-version":"","config-file":"/cabal.dist/home/.cabal/config"} +# cabal path +/cabal.dist/home/.cabal/config +# cabal path +/cabal.dist/home/.cabal/bin +# cabal path +{"cabal-version":"","installdir":"/cabal.dist/home/.cabal/bin"} +# cabal path +/cabal.dist/home/.cabal/bin +# cabal path +test-dir +# cabal path +{"cabal-version":"","store-dir":"test-dir"} +# cabal path +test-dir +# cabal path +/cabal.dist/home/.cabal +# cabal path +{"cabal-version":"","cache-home":"/cabal.dist/home/.cabal"} +# cabal path +/cabal.dist/home/.cabal +# cabal path +/cabal.dist/home/.cabal +# cabal path +{"cabal-version":"","cache-home":"/cabal.dist/home/.cabal"} +# cabal path +/cabal.dist/home/.cabal +# cabal path +/cabal.dist/home/.cabal +# cabal path +{"cabal-version":"","cache-home":"/cabal.dist/home/.cabal"} +# cabal path +/cabal.dist/home/.cabal +# cabal path +my-cache-dir +# cabal path +{"cabal-version":"","remote-repo-cache":"my-cache-dir"} +# cabal path +my-cache-dir +# cabal path +/cabal.dist/home/.cabal/packages +# cabal path +{"cabal-version":"","remote-repo-cache":"/cabal.dist/home/.cabal/packages"} +# cabal path +/cabal.dist/home/.cabal/packages +# cabal path +my-cache-dir +# cabal path +{"cabal-version":"","remote-repo-cache":"my-cache-dir"} +# cabal path +my-cache-dir +# cabal path +my-logs-dir +# cabal path +{"cabal-version":"","logs-dir":"my-logs-dir"} +# cabal path +my-logs-dir +# cabal path +/cabal.dist/home/.cabal/logs +# cabal path +{"cabal-version":"","logs-dir":"/cabal.dist/home/.cabal/logs"} +# cabal path +/cabal.dist/home/.cabal/logs +# cabal path +my-logs-dir +# cabal path +{"cabal-version":"","logs-dir":"my-logs-dir"} +# cabal path +my-logs-dir +# cabal path +my-store-dir +# cabal path +{"cabal-version":"","store-dir":"my-store-dir"} +# cabal path +my-store-dir +# cabal path +/cabal.dist/home/.cabal/store +# cabal path +{"cabal-version":"","store-dir":"/cabal.dist/home/.cabal/store"} +# cabal path +/cabal.dist/home/.cabal/store +# cabal path +my-store-dir +# cabal path +{"cabal-version":"","store-dir":"my-store-dir"} +# cabal path +my-store-dir +# cabal path +fake-cabal.config +# cabal path +{"cabal-version":"","config-file":"fake-cabal.config"} +# cabal path +fake-cabal.config +# cabal path +/cabal.dist/home/.cabal/config +# cabal path +{"cabal-version":"","config-file":"/cabal.dist/home/.cabal/config"} +# cabal path +/cabal.dist/home/.cabal/config +# cabal path +fake-cabal.config +# cabal path +{"cabal-version":"","config-file":"fake-cabal.config"} +# cabal path +fake-cabal.config +# cabal path +my-installdir +# cabal path +{"cabal-version":"","installdir":"my-installdir"} +# cabal path +my-installdir +# cabal path +/cabal.dist/home/.cabal/bin +# cabal path +{"cabal-version":"","installdir":"/cabal.dist/home/.cabal/bin"} +# cabal path +/cabal.dist/home/.cabal/bin +# cabal path +my-installdir +# cabal path +{"cabal-version":"","installdir":"my-installdir"} +# cabal path +my-installdir diff --git a/cabal-testsuite/PackageTests/Path/Config/cabal.test.hs b/cabal-testsuite/PackageTests/Path/Config/cabal.test.hs new file mode 100644 index 00000000000..2397fbe4662 --- /dev/null +++ b/cabal-testsuite/PackageTests/Path/Config/cabal.test.hs @@ -0,0 +1,36 @@ +import Test.Cabal.Prelude + +cabalPathFlags = + [ "--cache-home" + , "--remote-repo-cache" + , "--logs-dir" + , "--store-dir" + , "--config-file" + , "--installdir" + ] + +main = cabalTest $ do + forM_ cabalPathFlags $ \flag -> do + -- Basic output + cabal "path" ["-z", "--output-format=key-value", flag] + -- Works for json, too + cabal "path" ["-z", "--output-format=json", flag] + -- defaults to key-value + cabal "path" ["-z", flag] + -- Honours cli overwrites + cabalG ["--store-dir=test-dir"] "path" ["-z", "--output-format=key-value", "--store-dir"] + cabalG ["--store-dir=test-dir"] "path" ["-z", "--output-format=json", "--store-dir"] + cabalG ["--store-dir=test-dir"] "path" ["-z", "--store-dir"] + forM_ cabalPathFlags $ \flag -> do + -- Honour config file overwrites: + cabalG ["--config-file=fake-cabal.config"] "path" ["-z", "--output-format=key-value", flag] + cabalG ["--config-file=fake-cabal.config"] "path" ["-z", "--output-format=json", flag] + cabalG ["--config-file=fake-cabal.config"] "path" ["-z", flag] + -- Honour cabal.project file + cabal "path" ["--output-format=key-value", flag] + cabal "path" ["--output-format=json", flag] + cabal "path" [flag] + -- Honour config file and project file overwrites: + cabalG ["--config-file=fake-cabal.config"] "path" ["--project-file=fake.cabal.project", "--output-format=key-value", flag] + cabalG ["--config-file=fake-cabal.config"] "path" ["--project-file=fake.cabal.project", "--output-format=json", flag] + cabalG ["--config-file=fake-cabal.config"] "path" ["--project-file=fake.cabal.project", flag] diff --git a/cabal-testsuite/PackageTests/Path/Config/config.cabal b/cabal-testsuite/PackageTests/Path/Config/config.cabal new file mode 100644 index 00000000000..f29aefce3f3 --- /dev/null +++ b/cabal-testsuite/PackageTests/Path/Config/config.cabal @@ -0,0 +1,5 @@ +cabal-version: 3.0 +name: config +version: 0.1 + +library diff --git a/cabal-testsuite/PackageTests/Path/Config/fake-cabal.config b/cabal-testsuite/PackageTests/Path/Config/fake-cabal.config new file mode 100644 index 00000000000..641b576fa39 --- /dev/null +++ b/cabal-testsuite/PackageTests/Path/Config/fake-cabal.config @@ -0,0 +1,11 @@ +-- this is a test file, dont use it +repository hackage.haskell.org + url: http://hackage.haskell.org/ + -- secure: True + -- root-keys: + -- key-threshold: 3 + +logs-dir: my-logs-dir +store-dir: my-store-dir +remote-repo-cache: my-cache-dir +installdir: my-installdir diff --git a/cabal-testsuite/PackageTests/Path/Config/fake.cabal.project b/cabal-testsuite/PackageTests/Path/Config/fake.cabal.project new file mode 100644 index 00000000000..34ebb745e8e --- /dev/null +++ b/cabal-testsuite/PackageTests/Path/Config/fake.cabal.project @@ -0,0 +1,6 @@ +packages: ./ + +logs-dir: my-logs-dir +store-dir: my-store-dir +remote-repo-cache: my-cache-dir +installdir: my-installdir diff --git a/cabal-testsuite/PackageTests/Path/Single/cabal.out b/cabal-testsuite/PackageTests/Path/Single/cabal.out deleted file mode 100644 index 1ae82037846..00000000000 --- a/cabal-testsuite/PackageTests/Path/Single/cabal.out +++ /dev/null @@ -1,2 +0,0 @@ -# cabal path -/cabal.dist/home/.cabal/bin diff --git a/cabal-testsuite/PackageTests/Path/Single/cabal.test.hs b/cabal-testsuite/PackageTests/Path/Single/cabal.test.hs deleted file mode 100644 index 8eac59024f3..00000000000 --- a/cabal-testsuite/PackageTests/Path/Single/cabal.test.hs +++ /dev/null @@ -1,3 +0,0 @@ -import Test.Cabal.Prelude - -main = cabalTest . void $ cabal "path" ["--installdir"] diff --git a/cabal-testsuite/PackageTests/PkgConfigParse/cabal.project b/cabal-testsuite/PackageTests/PkgConfigParse/cabal.project index 5a93e28e878..0d7f076e888 100644 --- a/cabal-testsuite/PackageTests/PkgConfigParse/cabal.project +++ b/cabal-testsuite/PackageTests/PkgConfigParse/cabal.project @@ -1 +1 @@ -packages: *.cabal \ No newline at end of file +packages: *.cabal diff --git a/cabal-testsuite/PackageTests/Regression/T4270/setup.test.hs b/cabal-testsuite/PackageTests/Regression/T4270/setup.test.hs index cf3d7afbdfb..258dcc21e16 100644 --- a/cabal-testsuite/PackageTests/Regression/T4270/setup.test.hs +++ b/cabal-testsuite/PackageTests/Regression/T4270/setup.test.hs @@ -3,9 +3,9 @@ import Test.Cabal.Prelude -- when linked dynamically -- See https://github.com/haskell/cabal/issues/4270 main = setupAndCabalTest $ do + skipIfAllCabalVersion "< 2.2" skipUnless "no shared libs" =<< hasSharedLibraries skipUnless "no shared Cabal" =<< hasCabalShared - skipUnless "no Cabal for GHC" =<< hasCabalForGhc ghc <- isGhcVersion "== 8.0.2" osx <- isOSX expectBrokenIf (osx && ghc) 8028 $ do diff --git a/cabal-testsuite/PackageTests/Regression/T5213ExeCoverage/cabal.project b/cabal-testsuite/PackageTests/Regression/T5213ExeCoverage/cabal.project index ee157cb0f02..122a107db70 100644 --- a/cabal-testsuite/PackageTests/Regression/T5213ExeCoverage/cabal.project +++ b/cabal-testsuite/PackageTests/Regression/T5213ExeCoverage/cabal.project @@ -2,4 +2,4 @@ packages: . package cabal-gh5213 coverage: True - optimization: False \ No newline at end of file + optimization: False diff --git a/cabal-testsuite/PackageTests/Regression/T5409/use-different-versions-of-dependency-for-library-and-build-tool.test.hs b/cabal-testsuite/PackageTests/Regression/T5409/use-different-versions-of-dependency-for-library-and-build-tool.test.hs index 13215e65c6d..2a3eb3c093c 100644 --- a/cabal-testsuite/PackageTests/Regression/T5409/use-different-versions-of-dependency-for-library-and-build-tool.test.hs +++ b/cabal-testsuite/PackageTests/Regression/T5409/use-different-versions-of-dependency-for-library-and-build-tool.test.hs @@ -10,12 +10,11 @@ import Test.Cabal.Prelude -- Issue #5409 caused v2-build to use the same instance of build-tool-pkg for -- the build-depends and build-tool-depends dependencies, even though it -- violated the version constraints. -main = withShorterPathForNewBuildStore $ \storeDir -> - cabalTest $ do +main = cabalTest $ withShorterPathForNewBuildStore $ do skipUnless "not v2-build compatible boot Cabal" =<< hasNewBuildCompatBootCabal withRepo "repo" $ do r1 <- recordMode DoNotRecord $ - cabalG' ["--store-dir=" ++ storeDir] "v2-build" ["pkg:my-exe"] + cabal' "v2-build" ["pkg:my-exe"] let msg = concat [ "In order, the following will be built:" diff --git a/cabal-testsuite/PackageTests/Regression/T5782Diamond/cabal.project b/cabal-testsuite/PackageTests/Regression/T5782Diamond/cabal.project index 0d2e55b4b44..858544b8292 100644 --- a/cabal-testsuite/PackageTests/Regression/T5782Diamond/cabal.project +++ b/cabal-testsuite/PackageTests/Regression/T5782Diamond/cabal.project @@ -1 +1 @@ -packages: issue5782 \ No newline at end of file +packages: issue5782 diff --git a/cabal-testsuite/PackageTests/Regression/T5782Diamond/cabal.test.hs b/cabal-testsuite/PackageTests/Regression/T5782Diamond/cabal.test.hs index 2ec30f1c876..d7157473c67 100644 --- a/cabal-testsuite/PackageTests/Regression/T5782Diamond/cabal.test.hs +++ b/cabal-testsuite/PackageTests/Regression/T5782Diamond/cabal.test.hs @@ -20,25 +20,27 @@ -- as failed compilation or wrong exe output, which I do check. import Test.Cabal.Prelude -main = withShorterPathForNewBuildStore $ \storeDir -> - cabalTest $ withDelay $ do +main = + cabalTest $ withShorterPathForNewBuildStore . + withDelay $ do + storeDir <- testStoreDir <$> getTestEnv writeSourceFile "issue5782/src/Module.hs" "module Module where\nf = \"AAA\"" recordMode DoNotRecord $ - cabalG ["--store-dir=" ++ storeDir, "--installdir=" ++ storeDir, "--overwrite-policy=always"] "v2-install" ["issue5782"] + cabalG ["--installdir=" ++ storeDir, "--overwrite-policy=always"] "v2-install" ["issue5782"] withPlan $ runPlanExe' "issue5782" "E" [] >>= assertOutputContains "AAA" delay writeSourceFile "issue5782/src/Module.hs" "module Module where\nf = \"BBB\"" recordMode DoNotRecord $ - cabalG ["--store-dir=" ++ storeDir, "--installdir=" ++ storeDir, "--overwrite-policy=always"] "v2-install" ["issue5782"] + cabalG ["--installdir=" ++ storeDir, "--overwrite-policy=always"] "v2-install" ["issue5782"] withPlan $ runPlanExe' "issue5782" "E" [] >>= assertOutputContains "BBB" writeSourceFile "issue5782/src/Module.hs" "module Module where\nf = \"CCC\"" delay -- different spot to try another scenario recordMode DoNotRecord $ - cabalG ["--store-dir=" ++ storeDir, "--installdir=" ++ storeDir, "--overwrite-policy=always"] "v2-install" ["issue5782"] + cabalG ["--installdir=" ++ storeDir, "--overwrite-policy=always"] "v2-install" ["issue5782"] withPlan $ runPlanExe' "issue5782" "E" [] >>= assertOutputContains "CCC" diff --git a/cabal-testsuite/PackageTests/Regression/T9640/cabal.out b/cabal-testsuite/PackageTests/Regression/T9640/cabal.out index 8ec3628aadb..4c0f119823f 100644 --- a/cabal-testsuite/PackageTests/Regression/T9640/cabal.out +++ b/cabal-testsuite/PackageTests/Regression/T9640/cabal.out @@ -7,8 +7,8 @@ In order, the following will be built: - one-custom-0.1.0.0 (lib:one-custom) (requires build) - depend-on-custom-with-exe-0.1.0.0 (lib) (first run) Configuring one-custom-0.1.0.0... -Preprocessing library for one-custom-0.1.0.0.. -Building library for one-custom-0.1.0.0.. +Preprocessing library for one-custom-0.1.0.0... +Building library for one-custom-0.1.0.0... Installing library in Warning: depend-on-custom-with-exe.cabal:16:1: Ignoring trailing fields after sections: "ghc-options" Configuring library for depend-on-custom-with-exe-0.1.0.0... diff --git a/cabal-testsuite/PackageTests/Regression/T9756/OK.hs b/cabal-testsuite/PackageTests/Regression/T9756/OK.hs new file mode 100644 index 00000000000..1846f8c9d0e --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T9756/OK.hs @@ -0,0 +1,14 @@ +{-# LANGUAGE TemplateHaskell #-} +module OK where + +import Data.List +import System.Process +import Language.Haskell.TH + +$(do + out <- runIO $ readProcess "mybuilder" [] "" + if "0.2.0.0" `isInfixOf` out then + [d| x = () |] + else + error ("Expecting Version 0.2.0.0, but got: " ++ out) + ) diff --git a/cabal-testsuite/PackageTests/Regression/T9756/cabal-bug-build-tool.cabal b/cabal-testsuite/PackageTests/Regression/T9756/cabal-bug-build-tool.cabal new file mode 100644 index 00000000000..941ac8fbca6 --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T9756/cabal-bug-build-tool.cabal @@ -0,0 +1,10 @@ +cabal-version: 1.12 +name: cabal-bug-build-tool +version: 0 +build-type: Simple + +library + exposed-modules: OK + default-language: Haskell2010 + build-depends: base, template-haskell, process + build-tool-depends: mybuilder:mybuilder >=0.2.0.0 diff --git a/cabal-testsuite/PackageTests/Regression/T9756/cabal.out b/cabal-testsuite/PackageTests/Regression/T9756/cabal.out new file mode 100644 index 00000000000..61a814acd68 --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T9756/cabal.out @@ -0,0 +1,27 @@ +# cabal v2-update +Downloading the latest package list from test-local-repo +# cabal v2-install +Resolving dependencies... +Build profile: -w ghc- -O1 +In order, the following will be built: + - mybuilder-0.1.0.0 (exe:mybuilder) (requires build) +Configuring executable 'mybuilder' for mybuilder-0.1.0.0... +Preprocessing executable 'mybuilder' for mybuilder-0.1.0.0... +Building executable 'mybuilder' for mybuilder-0.1.0.0... +Installing executable mybuilder in +Warning: The directory /cabal.dist/home/.cabal/store/ghc-/incoming/new-/cabal.dist/home/.cabal/store/ghc-/-/bin is not in the system search path. +Symlinking 'mybuilder' to '/cabal.dist/install/mybuilder' +# cabal v2-build +Resolving dependencies... +Build profile: -w ghc- -O1 +In order, the following will be built: + - mybuilder-0.2.0.0 (exe:mybuilder) (requires build) + - cabal-bug-build-tool-0 (lib) (first run) +Configuring executable 'mybuilder' for mybuilder-0.2.0.0... +Preprocessing executable 'mybuilder' for mybuilder-0.2.0.0... +Building executable 'mybuilder' for mybuilder-0.2.0.0... +Installing executable mybuilder in +Warning: The directory /cabal.dist/home/.cabal/store/ghc-/incoming/new-/cabal.dist/home/.cabal/store/ghc-/-/bin is not in the system search path. +Configuring library for cabal-bug-build-tool-0... +Preprocessing library for cabal-bug-build-tool-0... +Building library for cabal-bug-build-tool-0... diff --git a/cabal-testsuite/PackageTests/Regression/T9756/cabal.project b/cabal-testsuite/PackageTests/Regression/T9756/cabal.project new file mode 100644 index 00000000000..e6fdbadb439 --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T9756/cabal.project @@ -0,0 +1 @@ +packages: . diff --git a/cabal-testsuite/PackageTests/Regression/T9756/cabal.test.hs b/cabal-testsuite/PackageTests/Regression/T9756/cabal.test.hs new file mode 100644 index 00000000000..65b1acb5b70 --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T9756/cabal.test.hs @@ -0,0 +1,13 @@ +import Test.Cabal.Prelude + +-- We are testing if the build-tools program is found in path before programs e.g. in extra-prog-path or the system path +-- For that, we need +-- * A repo with a build tool that is up to date +-- * An older version of the build tool in the extra-prog-path +-- * A project that requires the more up-to-date version of the build-tool + +main = cabalTest $ withRepo "repo" $ do + dir <- testWorkDir <$> getTestEnv + cabal "v2-install" ["mybuilder-0.1.0.0", "--installdir=" ++ dir ++ "/install", "--overwrite-policy=always"] + cabal "v2-build" ["cabal-bug-build-tool", "--extra-prog-path=" ++ dir ++ "/install"] + diff --git a/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.1.0.0/CHANGELOG.md b/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.1.0.0/CHANGELOG.md new file mode 100644 index 00000000000..60a3351b163 --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.1.0.0/CHANGELOG.md @@ -0,0 +1,5 @@ +# Revision history for mybuilder0100 + +## 0.1.0.0 -- YYYY-mm-dd + +* First version. Released on an unsuspecting world. diff --git a/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.1.0.0/app/Main.hs b/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.1.0.0/app/Main.hs new file mode 100644 index 00000000000..7de3bfe00bb --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.1.0.0/app/Main.hs @@ -0,0 +1,4 @@ +module Main where + +main :: IO () +main = putStrLn "0.1.0.0" diff --git a/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.1.0.0/mybuilder.cabal b/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.1.0.0/mybuilder.cabal new file mode 100644 index 00000000000..0649d81c4e0 --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.1.0.0/mybuilder.cabal @@ -0,0 +1,18 @@ +cabal-version: 3.0 +name: mybuilder +version: 0.1.0.0 +license: NONE +author: Rodrigo Mesquita +maintainer: rodrigo.m.mesquita@gmail.com +build-type: Simple +extra-doc-files: CHANGELOG.md + +common warnings + ghc-options: -Wall + +executable mybuilder + import: warnings + main-is: Main.hs + build-depends: base + hs-source-dirs: app + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.2.0.0/CHANGELOG.md b/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.2.0.0/CHANGELOG.md new file mode 100644 index 00000000000..60a3351b163 --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.2.0.0/CHANGELOG.md @@ -0,0 +1,5 @@ +# Revision history for mybuilder0100 + +## 0.1.0.0 -- YYYY-mm-dd + +* First version. Released on an unsuspecting world. diff --git a/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.2.0.0/app/Main.hs b/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.2.0.0/app/Main.hs new file mode 100644 index 00000000000..3550f30bd2f --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.2.0.0/app/Main.hs @@ -0,0 +1,4 @@ +module Main where + +main :: IO () +main = putStrLn "0.2.0.0" diff --git a/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.2.0.0/mybuilder.cabal b/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.2.0.0/mybuilder.cabal new file mode 100644 index 00000000000..c98f493aa14 --- /dev/null +++ b/cabal-testsuite/PackageTests/Regression/T9756/repo/mybuilder-0.2.0.0/mybuilder.cabal @@ -0,0 +1,18 @@ +cabal-version: 3.0 +name: mybuilder +version: 0.2.0.0 +license: NONE +author: Rodrigo Mesquita +maintainer: rodrigo.m.mesquita@gmail.com +build-type: Simple +extra-doc-files: CHANGELOG.md + +common warnings + ghc-options: -Wall + +executable mybuilder + import: warnings + main-is: Main.hs + build-depends: base + hs-source-dirs: app + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/RelativePathProjectImports/cabal.project b/cabal-testsuite/PackageTests/RelativePathProjectImports/cabal.project index 8eceb95e1a5..c95da21fb66 100644 --- a/cabal-testsuite/PackageTests/RelativePathProjectImports/cabal.project +++ b/cabal-testsuite/PackageTests/RelativePathProjectImports/cabal.project @@ -3,4 +3,4 @@ import: ./dep/cabal.project packages: main.cabal dep/dep.cabal - dep2/dep2.cabal \ No newline at end of file + dep2/dep2.cabal diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.dot-uv.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.dot-uv.test.hs index 03f2535de4a..f45ed508b31 100644 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.dot-uv.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.dot-uv.test.hs @@ -9,4 +9,4 @@ import Test.Cabal.Prelude -- TODO: Fix this behaviour and apply the patch cabal.dot-uv.patch to update the -- expected output to what we'd expect if "cabal sdist" respected the project. main = cabalTest . withProjectFile "cabal.dot-uv.project" $ do - cabal "sdist" ["all"] \ No newline at end of file + cabal "sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.dot-uv.v2.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.dot-uv.v2.test.hs index 5f6c3ba1a83..c39feac79b3 100644 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.dot-uv.v2.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.dot-uv.v2.test.hs @@ -3,4 +3,4 @@ import Test.Cabal.Prelude -- cabal.dot-uv.project has "packages: .". That package is uv.cabal and "cabal -- v2-sdist" writes sdist/uv-0.1.tar.gz. This is correct. main = cabalTest . withProjectFile "cabal.dot-uv.project" $ do - cabal "v2-sdist" ["all"] \ No newline at end of file + cabal "v2-sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.ignore-project.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.ignore-project.test.hs index 6b77d12d2fe..90432e4fbb8 100755 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.ignore-project.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.ignore-project.test.hs @@ -2,4 +2,4 @@ import Test.Cabal.Prelude -- This test correctly writes sdist/uv-0.1.tar.gz for the uv.cabal package. main = cabalTest $ do - cabal "sdist" ["all", "--ignore-project"] \ No newline at end of file + cabal "sdist" ["all", "--ignore-project"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.ignore-project.v2.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.ignore-project.v2.test.hs index a159257eb68..94abd67e057 100755 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.ignore-project.v2.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.ignore-project.v2.test.hs @@ -5,4 +5,4 @@ import Test.Cabal.Prelude -- and wrote sdist/p-0.1.tar.gz. That is incorrect. It didn't ignore the -- project. main = cabalTest $ do - cabal "v2-sdist" ["all", "--ignore-project"] \ No newline at end of file + cabal "v2-sdist" ["all", "--ignore-project"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.no-project.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.no-project.test.hs index 0002f9f4004..49bd8ecf713 100755 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.no-project.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.no-project.test.hs @@ -6,4 +6,4 @@ import Test.Cabal.Prelude -- project probing would not occur and "cabal sdist" would work on the local -- uv.cabal package. main = cabalTest $ do - cabal "sdist" ["all"] \ No newline at end of file + cabal "sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.no-project.v2.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.no-project.v2.test.hs index 5030fff5141..6cdef39733a 100755 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.no-project.v2.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.no-project.v2.test.hs @@ -6,4 +6,4 @@ import Test.Cabal.Prelude -- seen) is that project probing would not occur and "cabal v2-sdist" would work -- on the local uv.cabal package. main = cabalTest $ do - cabal "v2-sdist" ["all"] \ No newline at end of file + cabal "v2-sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.sub-pq.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.sub-pq.test.hs index 19447044121..8ad8bbd1233 100644 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.sub-pq.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.sub-pq.test.hs @@ -9,4 +9,4 @@ import Test.Cabal.Prelude -- TODO: Fix this behaviour and apply the patch cabal.sub-pq.patch to update the -- expected output to what we'd expect if "cabal sdist" respected the project. main = cabalTest . withProjectFile "cabal.sub-pq.project" $ do - cabal "sdist" ["all"] \ No newline at end of file + cabal "sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.sub-pq.v2.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.sub-pq.v2.test.hs index aec07983845..a82397a4ef6 100644 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.sub-pq.v2.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.sub-pq.v2.test.hs @@ -3,4 +3,4 @@ import Test.Cabal.Prelude -- cabal.sub-pq.project has "packages: p/ q/" and "cabal v2-sdist" writes -- sdist/p-0.1.tar.gz and sdist/q-0.1.tar.gz. This is correct. main = cabalTest . withProjectFile "cabal.sub-pq.project" $ do - cabal "v2-sdist" ["all"] \ No newline at end of file + cabal "v2-sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.sub-rs.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.sub-rs.test.hs index 3dd58bf6b97..d6ecf063192 100644 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.sub-rs.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.sub-rs.test.hs @@ -9,4 +9,4 @@ import Test.Cabal.Prelude -- TODO: Fix this behaviour and apply the patch cabal.sub-rs.patch to update the -- expected output to what we'd expect if "cabal sdist" respected the project. main = cabalTest . withProjectFile "cabal.sub-rs.project" $ do - cabal "sdist" ["all"] \ No newline at end of file + cabal "sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.sub-rs.v2.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.sub-rs.v2.test.hs index 66b8378a1cd..a0c14d19645 100644 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.sub-rs.v2.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-No/cabal.sub-rs.v2.test.hs @@ -3,4 +3,4 @@ import Test.Cabal.Prelude -- cabal.sub-rs.project has "packages: r/ s/" and "cabal v2-sdist" writes -- sdist/r-0.1.tar.gz and sdist/s-0.1.tar.gz. This is correct. main = cabalTest . withProjectFile "cabal.sub-rs.project" $ do - cabal "v2-sdist" ["all"] \ No newline at end of file + cabal "v2-sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.dot-uv.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.dot-uv.test.hs index 7ca9d1fa282..3c0f776a70c 100644 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.dot-uv.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.dot-uv.test.hs @@ -9,4 +9,4 @@ import Test.Cabal.Prelude -- TODO: Fix this behaviour and apply the patch cabal.dot-uv.patch to update the -- expected output to what we'd expect if "cabal sdist" respected the project. main = cabalTest . withProjectFile "cabal.dot-uv.project" $ do - cabal "sdist" ["all"] \ No newline at end of file + cabal "sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.dot-uv.v2.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.dot-uv.v2.test.hs index 2df773c5510..4f12de028e9 100644 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.dot-uv.v2.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.dot-uv.v2.test.hs @@ -3,4 +3,4 @@ import Test.Cabal.Prelude -- cabal.dot-uv.project has "packages: .". That package is uv.cabal and "cabal -- v2-sdist" writes sdist/p-0.1.tar.gz and sdist/q-0.1.tar.gz. That is correct. main = cabalTest . withProjectFile "cabal.dot-uv.project" $ do - cabal "v2-sdist" ["all"] \ No newline at end of file + cabal "v2-sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.ignore-project.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.ignore-project.test.hs index 6b77d12d2fe..90432e4fbb8 100755 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.ignore-project.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.ignore-project.test.hs @@ -2,4 +2,4 @@ import Test.Cabal.Prelude -- This test correctly writes sdist/uv-0.1.tar.gz for the uv.cabal package. main = cabalTest $ do - cabal "sdist" ["all", "--ignore-project"] \ No newline at end of file + cabal "sdist" ["all", "--ignore-project"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.ignore-project.v2.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.ignore-project.v2.test.hs index e98c7717e4d..d017d47317a 100755 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.ignore-project.v2.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.ignore-project.v2.test.hs @@ -4,4 +4,4 @@ import Test.Cabal.Prelude -- sdist/uv-0.1.tar.gz for the uv.cabal package but instead it wrote -- sdist/p-0.1.tar.gz and sdist/q-0.1.tar.gz. main = cabalTest $ do - cabal "v2-sdist" ["all", "--ignore-project"] \ No newline at end of file + cabal "v2-sdist" ["all", "--ignore-project"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.no-project.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.no-project.test.hs index 1699b269a2c..b25efe2a0d9 100755 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.no-project.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.no-project.test.hs @@ -7,4 +7,4 @@ import Test.Cabal.Prelude -- TODO: Check that the code is behaving the same as it would have if -- "--project-file=cabal.project" was given or if it is using project probing. main = cabalTest $ do - cabal "sdist" ["all"] \ No newline at end of file + cabal "sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.no-project.v2.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.no-project.v2.test.hs index 10ffa0c5a4d..4f9189489cb 100755 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.no-project.v2.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.no-project.v2.test.hs @@ -4,4 +4,4 @@ import Test.Cabal.Prelude -- has "packages: p/ q/" and writes sdist/p-0.1.tar.gz and sdist/q-0.1.tar.gz. -- This is correct. main = cabalTest $ do - cabal "v2-sdist" ["all"] \ No newline at end of file + cabal "v2-sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.project.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.project.test.hs index 6be41cfc24f..81b6cc511b1 100644 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.project.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.project.test.hs @@ -4,4 +4,4 @@ import Test.Cabal.Prelude -- sdist/p-0.1.tar.gz and sdist/q-0.1.tar.gz. This is correct but likely -- accidental as the default cabal.project has the same packages. main = cabalTest . withProjectFile "cabal.project" $ do - cabal "sdist" ["all"] \ No newline at end of file + cabal "sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.project.v2.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.project.v2.test.hs index f94f478f6ae..29aafe0c99d 100644 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.project.v2.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.project.v2.test.hs @@ -3,4 +3,4 @@ import Test.Cabal.Prelude -- The given cabal.project has has "packages: p/ q/" and "cabal v2-sdist" writes -- sdist/p-0.1.tar.gz and sdist/q-0.1.tar.gz. This is correct. main = cabalTest . withProjectFile "cabal.project" $ do - cabal "v2-sdist" ["all"] \ No newline at end of file + cabal "v2-sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.sub-pq.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.sub-pq.test.hs index 92995d4994b..63803ba8851 100644 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.sub-pq.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.sub-pq.test.hs @@ -3,4 +3,4 @@ import Test.Cabal.Prelude -- cabal.sub-pq.project has "packages: p/ q/" and "cabal sdist" writes -- sdist/p-0.1.tar.gz and sdist/q-0.1.tar.gz. This is correct. main = cabalTest . withProjectFile "cabal.sub-pq.project" $ do - cabal "sdist" ["all"] \ No newline at end of file + cabal "sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.sub-pq.v2.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.sub-pq.v2.test.hs index aec07983845..a82397a4ef6 100644 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.sub-pq.v2.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.sub-pq.v2.test.hs @@ -3,4 +3,4 @@ import Test.Cabal.Prelude -- cabal.sub-pq.project has "packages: p/ q/" and "cabal v2-sdist" writes -- sdist/p-0.1.tar.gz and sdist/q-0.1.tar.gz. This is correct. main = cabalTest . withProjectFile "cabal.sub-pq.project" $ do - cabal "v2-sdist" ["all"] \ No newline at end of file + cabal "v2-sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.sub-rs.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.sub-rs.test.hs index e20c7337d49..e8977aa1770 100644 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.sub-rs.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.sub-rs.test.hs @@ -9,4 +9,4 @@ import Test.Cabal.Prelude -- TODO: Fix this behaviour and apply the patch cabal.sub-rs.patch to update the -- expected output to what we'd expect if "cabal sdist" respected the project. main = cabalTest . withProjectFile "cabal.sub-rs.project" $ do - cabal "sdist" ["all"] \ No newline at end of file + cabal "sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.sub-rs.v2.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.sub-rs.v2.test.hs index 239f91b1e28..fa7bb0b266f 100644 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.sub-rs.v2.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/Projects-Default-Yes/cabal.sub-rs.v2.test.hs @@ -3,4 +3,4 @@ import Test.Cabal.Prelude -- cabal.sub-rs.project has "packages: r/ s/" and "cabal v2-sdist" writes -- sdist/r-0.1.tar.gz and sdist/s-0.1.tar.gz. That is correct. main = cabalTest . withProjectFile "cabal.sub-rs.project" $ do - cabal "v2-sdist" ["all"] \ No newline at end of file + cabal "v2-sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/README.md b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/README.md index 0b3da4f9090..e400102d3a4 100644 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/README.md +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/README.md @@ -51,7 +51,7 @@ with these tests. `cabal.project` instead; either the one one in the current directory or the one from the parent directory, one level up. I think this behaviour is wrong and the supplied `--project-file` option should be respected. - + Before I'd put a project there, one level up, the project probing had gone all the way up to Cabal's own `cabal.project` as can be seen by this diff after that change: diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.ignore-project.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.ignore-project.test.hs index 7d3628c2b43..3145737a646 100755 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.ignore-project.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.ignore-project.test.hs @@ -2,4 +2,4 @@ import Test.Cabal.Prelude -- This test correctly writes sdist/z-0.1.tar.gz for the z.cabal package. main = cabalTest $ do - cabal "sdist" ["all", "--ignore-project"] \ No newline at end of file + cabal "sdist" ["all", "--ignore-project"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.ignore-project.v2.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.ignore-project.v2.test.hs index 7d3628c2b43..3145737a646 100755 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.ignore-project.v2.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.ignore-project.v2.test.hs @@ -2,4 +2,4 @@ import Test.Cabal.Prelude -- This test correctly writes sdist/z-0.1.tar.gz for the z.cabal package. main = cabalTest $ do - cabal "sdist" ["all", "--ignore-project"] \ No newline at end of file + cabal "sdist" ["all", "--ignore-project"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.no-project.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.no-project.test.hs index defb9406c3c..8f440b78ca6 100755 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.no-project.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.no-project.test.hs @@ -4,4 +4,4 @@ import Test.Cabal.Prelude -- has "packages: Projects-Default-No/p" and writes sdist/p-0.1.tar.gz. This is -- correct. main = cabalTest $ do - cabal "sdist" ["all"] \ No newline at end of file + cabal "sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.no-project.v2.test.hs b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.no-project.v2.test.hs index d86a6792458..54cc62f9608 100755 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.no-project.v2.test.hs +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.no-project.v2.test.hs @@ -4,4 +4,4 @@ import Test.Cabal.Prelude -- has "packages: Projects-Default-No/p" and writes sdist/p-0.1.tar.gz. This is -- correct. main = cabalTest $ do - cabal "v2-sdist" ["all"] \ No newline at end of file + cabal "v2-sdist" ["all"] diff --git a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.project b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.project index c46fad9d90b..87a9ca689a2 100644 --- a/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.project +++ b/cabal-testsuite/PackageTests/SDist/Respect-Project-File/cabal.project @@ -1 +1 @@ -packages: Projects-Default-No/p \ No newline at end of file +packages: Projects-Default-No/p diff --git a/cabal-testsuite/PackageTests/SDist/T5195and5349/cabal.project b/cabal-testsuite/PackageTests/SDist/T5195and5349/cabal.project index bfe62896560..6f920794c80 100644 --- a/cabal-testsuite/PackageTests/SDist/T5195and5349/cabal.project +++ b/cabal-testsuite/PackageTests/SDist/T5195and5349/cabal.project @@ -1 +1 @@ -packages: ./ \ No newline at end of file +packages: ./ diff --git a/cabal-testsuite/PackageTests/SetupDep/Setup.hs b/cabal-testsuite/PackageTests/SetupDep/Setup.hs new file mode 100644 index 00000000000..89d816ae6d9 --- /dev/null +++ b/cabal-testsuite/PackageTests/SetupDep/Setup.hs @@ -0,0 +1,6 @@ +module Main where + +import SetupDep ( depMain ) + +main :: IO () +main = depMain diff --git a/cabal-testsuite/PackageTests/SetupDep/SetupDep.hs b/cabal-testsuite/PackageTests/SetupDep/SetupDep.hs new file mode 100644 index 00000000000..55220d8ba41 --- /dev/null +++ b/cabal-testsuite/PackageTests/SetupDep/SetupDep.hs @@ -0,0 +1,6 @@ +module SetupDep where + +import Distribution.Simple + +depMain :: IO () +depMain = defaultMain diff --git a/cabal-testsuite/PackageTests/SetupDep/cabal.project b/cabal-testsuite/PackageTests/SetupDep/cabal.project new file mode 100644 index 00000000000..e6fdbadb439 --- /dev/null +++ b/cabal-testsuite/PackageTests/SetupDep/cabal.project @@ -0,0 +1 @@ +packages: . diff --git a/cabal-testsuite/PackageTests/SetupDep/setup-dep.cabal b/cabal-testsuite/PackageTests/SetupDep/setup-dep.cabal new file mode 100644 index 00000000000..78d47d16da3 --- /dev/null +++ b/cabal-testsuite/PackageTests/SetupDep/setup-dep.cabal @@ -0,0 +1,16 @@ +cabal-version: 2.2 +name: setup-dep +version: 0.1.0.0 +synopsis: Test for a Setup.hs with a dependency +license: BSD-3-Clause +author: NA +maintainer: NA +category: Testing +build-type: Custom + +custom-setup + setup-depends: Cabal, base + +library + build-depends: base + default-language: Haskell2010 diff --git a/cabal-testsuite/PackageTests/SetupDep/setup.out b/cabal-testsuite/PackageTests/SetupDep/setup.out new file mode 100644 index 00000000000..1e49680dc04 --- /dev/null +++ b/cabal-testsuite/PackageTests/SetupDep/setup.out @@ -0,0 +1,5 @@ +# Setup configure +Configuring setup-dep-0.1.0.0... +# Setup build +Preprocessing library for setup-dep-0.1.0.0... +Building library for setup-dep-0.1.0.0... diff --git a/cabal-testsuite/PackageTests/SetupDep/setup.test.hs b/cabal-testsuite/PackageTests/SetupDep/setup.test.hs new file mode 100644 index 00000000000..2df426a5dbf --- /dev/null +++ b/cabal-testsuite/PackageTests/SetupDep/setup.test.hs @@ -0,0 +1,4 @@ +import Test.Cabal.Prelude +main = setupTest $ do + setup "configure" [] + setup "build" [] diff --git a/cabal-testsuite/PackageTests/TestNameCollision/setup.test.hs b/cabal-testsuite/PackageTests/TestNameCollision/setup.test.hs index 19d2fc90468..93e8a820b30 100644 --- a/cabal-testsuite/PackageTests/TestNameCollision/setup.test.hs +++ b/cabal-testsuite/PackageTests/TestNameCollision/setup.test.hs @@ -3,7 +3,7 @@ import Test.Cabal.Prelude -- which is in the database, we can still use the test case (they -- should NOT shadow). main = setupAndCabalTest $ do - skipUnless "cabal for ghc" =<< hasCabalForGhc -- use of library test suite + skipIfAllCabalVersion "< 2.2" withPackageDb $ do withDirectory "parent" $ setup_install [] withDirectory "child" $ do diff --git a/cabal-testsuite/PackageTests/TestSuiteTests/LibV09/setup-deadlock.test.hs b/cabal-testsuite/PackageTests/TestSuiteTests/LibV09/setup-deadlock.test.hs index 69529404d97..d9b8f3c3d15 100644 --- a/cabal-testsuite/PackageTests/TestSuiteTests/LibV09/setup-deadlock.test.hs +++ b/cabal-testsuite/PackageTests/TestSuiteTests/LibV09/setup-deadlock.test.hs @@ -1,5 +1,5 @@ import Test.Cabal.Prelude main = setupAndCabalTest $ do - skipUnless "no Cabal for GHC" =<< hasCabalForGhc + skipIfAllCabalVersion "< 2.2" setup_build ["--enable-tests"] fails $ setup "test" [] diff --git a/cabal-testsuite/PackageTests/TestSuiteTests/LibV09/setup.test.hs b/cabal-testsuite/PackageTests/TestSuiteTests/LibV09/setup.test.hs index 1a50e4d67e4..42c5556cfa3 100644 --- a/cabal-testsuite/PackageTests/TestSuiteTests/LibV09/setup.test.hs +++ b/cabal-testsuite/PackageTests/TestSuiteTests/LibV09/setup.test.hs @@ -1,5 +1,5 @@ import Test.Cabal.Prelude -- Test if detailed-0.9 builds correctly main = setupAndCabalTest $ do - skipUnless "no Cabal for GHC" =<< hasCabalForGhc + skipIfAllCabalVersion "< 1.20" setup_build ["--enable-tests"] diff --git a/cabal-testsuite/PackageTests/VersionPriority/0-local.out b/cabal-testsuite/PackageTests/VersionPriority/0-local.out index 309b61103e3..f57e8b4db97 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/0-local.out +++ b/cabal-testsuite/PackageTests/VersionPriority/0-local.out @@ -6,7 +6,9 @@ Error: [Cabal-7107] Could not resolve dependencies: [__0] trying: cabal-version-override-0.1.0.0 (user goal) [__1] next goal: hashable (dependency of cabal-version-override) -[__1] rejecting: hashable-1.4.3.0 (constraint from project config /0-local.project requires ==1.4.2.0) -[__1] rejecting: hashable-1.4.2.0 (constraint from project config /0-local.project requires ==1.4.3.0) +[__1] rejecting: hashable-1.4.3.0 + (constraint from 0-local.project requires ==1.4.2.0) +[__1] rejecting: hashable-1.4.2.0 + (constraint from 0-local.project requires ==1.4.3.0) [__1] fail (backjumping, conflict set: cabal-version-override, hashable) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), cabal-version-override (2) diff --git a/cabal-testsuite/PackageTests/VersionPriority/0-local.test.hs b/cabal-testsuite/PackageTests/VersionPriority/0-local.test.hs index 07fe0af96a9..cb94faaa1e2 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/0-local.test.hs +++ b/cabal-testsuite/PackageTests/VersionPriority/0-local.test.hs @@ -1,4 +1,4 @@ import Test.Cabal.Prelude main = cabalTest . withRepo "repo" . withProjectFile "0-local.project" $ do - fails $ cabal "v2-build" ["--dry-run"] \ No newline at end of file + fails $ cabal "v2-build" ["--dry-run"] diff --git a/cabal-testsuite/PackageTests/VersionPriority/1-local.out b/cabal-testsuite/PackageTests/VersionPriority/1-local.out index c9aca7097d4..0de3c6d5f1f 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/1-local.out +++ b/cabal-testsuite/PackageTests/VersionPriority/1-local.out @@ -6,8 +6,11 @@ Error: [Cabal-7107] Could not resolve dependencies: [__0] trying: cabal-version-override-0.1.0.0 (user goal) [__1] next goal: hashable (dependency of cabal-version-override) -[__1] rejecting: hashable-1.4.3.0 (constraint from project config /1-local-constraints-import.project requires ==1.4.2.0) -[__1] rejecting: hashable-1.4.2.0 (constraint from project config stackage-local.config requires ==1.4.3.0) +[__1] rejecting: hashable-1.4.3.0 + (constraint from 1-local-constraints-import.project requires ==1.4.2.0) +[__1] rejecting: hashable-1.4.2.0 + (constraint from stackage-local.config requires ==1.4.3.0) + imported by: 1-local-constraints-import.project [__1] fail (backjumping, conflict set: cabal-version-override, hashable) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), cabal-version-override (2) # cabal v2-build @@ -16,7 +19,10 @@ Error: [Cabal-7107] Could not resolve dependencies: [__0] trying: cabal-version-override-0.1.0.0 (user goal) [__1] next goal: hashable (dependency of cabal-version-override) -[__1] rejecting: hashable-1.4.3.0 (constraint from project config /1-local-import-constraints.project requires ==1.4.2.0) -[__1] rejecting: hashable-1.4.2.0 (constraint from project config stackage-local.config requires ==1.4.3.0) +[__1] rejecting: hashable-1.4.3.0 + (constraint from 1-local-import-constraints.project requires ==1.4.2.0) +[__1] rejecting: hashable-1.4.2.0 + (constraint from stackage-local.config requires ==1.4.3.0) + imported by: 1-local-import-constraints.project [__1] fail (backjumping, conflict set: cabal-version-override, hashable) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), cabal-version-override (2) diff --git a/cabal-testsuite/PackageTests/VersionPriority/1-local.test.hs b/cabal-testsuite/PackageTests/VersionPriority/1-local.test.hs index 14723adb067..2b19536eb30 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/1-local.test.hs +++ b/cabal-testsuite/PackageTests/VersionPriority/1-local.test.hs @@ -6,4 +6,4 @@ testVersionWin project = main = cabalTest . withRepo "repo" $ do testVersionWin "1-local-constraints-import.project" - testVersionWin "1-local-import-constraints.project" \ No newline at end of file + testVersionWin "1-local-import-constraints.project" diff --git a/cabal-testsuite/PackageTests/VersionPriority/1-web.out b/cabal-testsuite/PackageTests/VersionPriority/1-web.out index 9fb08252222..cfdaa0d2dbc 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/1-web.out +++ b/cabal-testsuite/PackageTests/VersionPriority/1-web.out @@ -6,8 +6,11 @@ Error: [Cabal-7107] Could not resolve dependencies: [__0] trying: cabal-version-override-0.1.0.0 (user goal) [__1] next goal: hashable (dependency of cabal-version-override) -[__1] rejecting: hashable-1.4.3.0 (constraint from project config /1-web-constraints-import.project requires ==1.4.2.0) -[__1] rejecting: hashable-1.4.2.0 (constraint from project config project-stackage/nightly-2023-12-07.config requires ==1.4.3.0) +[__1] rejecting: hashable-1.4.3.0 + (constraint from 1-web-constraints-import.project requires ==1.4.2.0) +[__1] rejecting: hashable-1.4.2.0 + (constraint from project-stackage/nightly-2023-12-07.config requires ==1.4.3.0) + imported by: 1-web-constraints-import.project [__1] fail (backjumping, conflict set: cabal-version-override, hashable) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), cabal-version-override (2) # cabal v2-build @@ -16,7 +19,10 @@ Error: [Cabal-7107] Could not resolve dependencies: [__0] trying: cabal-version-override-0.1.0.0 (user goal) [__1] next goal: hashable (dependency of cabal-version-override) -[__1] rejecting: hashable-1.4.3.0 (constraint from project config /1-web-import-constraints.project requires ==1.4.2.0) -[__1] rejecting: hashable-1.4.2.0 (constraint from project config project-stackage/nightly-2023-12-07.config requires ==1.4.3.0) +[__1] rejecting: hashable-1.4.3.0 + (constraint from 1-web-import-constraints.project requires ==1.4.2.0) +[__1] rejecting: hashable-1.4.2.0 + (constraint from project-stackage/nightly-2023-12-07.config requires ==1.4.3.0) + imported by: 1-web-import-constraints.project [__1] fail (backjumping, conflict set: cabal-version-override, hashable) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), cabal-version-override (2) diff --git a/cabal-testsuite/PackageTests/VersionPriority/1-web.test.hs b/cabal-testsuite/PackageTests/VersionPriority/1-web.test.hs index 8d695dfe710..b31f0fd8788 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/1-web.test.hs +++ b/cabal-testsuite/PackageTests/VersionPriority/1-web.test.hs @@ -5,9 +5,5 @@ testVersionWin project = fails $ cabal "v2-build" ["--dry-run"] main = cabalTest . withRepo "repo" $ do - -- To avoid this diff: - -- -Build profile: -w ghc-9.6.3 -O1 - -- +Build profile: -w ghc- -O1 - skipIfGhcVersion "== 9.6.3" testVersionWin "1-web-constraints-import.project" testVersionWin "1-web-import-constraints.project" diff --git a/cabal-testsuite/PackageTests/VersionPriority/2-local.out b/cabal-testsuite/PackageTests/VersionPriority/2-local.out index cefdd961637..ccb733ca12e 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/2-local.out +++ b/cabal-testsuite/PackageTests/VersionPriority/2-local.out @@ -6,8 +6,12 @@ Error: [Cabal-7107] Could not resolve dependencies: [__0] trying: cabal-version-override-0.1.0.0 (user goal) [__1] next goal: hashable (dependency of cabal-version-override) -[__1] rejecting: hashable-1.4.3.0 (constraint from project config /2-local-constraints-import.project requires ==1.4.2.0) -[__1] rejecting: hashable-1.4.2.0 (constraint from project config stackage-local.config requires ==1.4.3.0) +[__1] rejecting: hashable-1.4.3.0 + (constraint from 2-local-constraints-import.project requires ==1.4.2.0) +[__1] rejecting: hashable-1.4.2.0 + (constraint from stackage-local.config requires ==1.4.3.0) + imported by: hop-local.config + imported by: 2-local-constraints-import.project [__1] fail (backjumping, conflict set: cabal-version-override, hashable) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), cabal-version-override (2) # cabal v2-build @@ -16,7 +20,11 @@ Error: [Cabal-7107] Could not resolve dependencies: [__0] trying: cabal-version-override-0.1.0.0 (user goal) [__1] next goal: hashable (dependency of cabal-version-override) -[__1] rejecting: hashable-1.4.3.0 (constraint from project config /2-local-import-constraints.project requires ==1.4.2.0) -[__1] rejecting: hashable-1.4.2.0 (constraint from project config stackage-local.config requires ==1.4.3.0) +[__1] rejecting: hashable-1.4.3.0 + (constraint from 2-local-import-constraints.project requires ==1.4.2.0) +[__1] rejecting: hashable-1.4.2.0 + (constraint from stackage-local.config requires ==1.4.3.0) + imported by: hop-local.config + imported by: 2-local-import-constraints.project [__1] fail (backjumping, conflict set: cabal-version-override, hashable) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), cabal-version-override (2) diff --git a/cabal-testsuite/PackageTests/VersionPriority/2-local.test.hs b/cabal-testsuite/PackageTests/VersionPriority/2-local.test.hs index 4e4e61266be..9289e16d0d6 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/2-local.test.hs +++ b/cabal-testsuite/PackageTests/VersionPriority/2-local.test.hs @@ -6,4 +6,4 @@ testVersionWin project = main = cabalTest . withRepo "repo" $ do testVersionWin "2-local-constraints-import.project" - testVersionWin "2-local-import-constraints.project" \ No newline at end of file + testVersionWin "2-local-import-constraints.project" diff --git a/cabal-testsuite/PackageTests/VersionPriority/2-web.out b/cabal-testsuite/PackageTests/VersionPriority/2-web.out index 0b6fd6cf30f..15e5c01517b 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/2-web.out +++ b/cabal-testsuite/PackageTests/VersionPriority/2-web.out @@ -6,8 +6,12 @@ Error: [Cabal-7107] Could not resolve dependencies: [__0] trying: cabal-version-override-0.1.0.0 (user goal) [__1] next goal: hashable (dependency of cabal-version-override) -[__1] rejecting: hashable-1.4.3.0 (constraint from project config /2-web-constraints-import.project requires ==1.4.2.0) -[__1] rejecting: hashable-1.4.2.0 (constraint from project config project-stackage/nightly-2023-12-07.config requires ==1.4.3.0) +[__1] rejecting: hashable-1.4.3.0 + (constraint from 2-web-constraints-import.project requires ==1.4.2.0) +[__1] rejecting: hashable-1.4.2.0 + (constraint from project-stackage/nightly-2023-12-07.config requires ==1.4.3.0) + imported by: stackage-web.config + imported by: 2-web-constraints-import.project [__1] fail (backjumping, conflict set: cabal-version-override, hashable) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), cabal-version-override (2) # cabal v2-build @@ -16,7 +20,11 @@ Error: [Cabal-7107] Could not resolve dependencies: [__0] trying: cabal-version-override-0.1.0.0 (user goal) [__1] next goal: hashable (dependency of cabal-version-override) -[__1] rejecting: hashable-1.4.3.0 (constraint from project config /2-web-import-constraints.project requires ==1.4.2.0) -[__1] rejecting: hashable-1.4.2.0 (constraint from project config project-stackage/nightly-2023-12-07.config requires ==1.4.3.0) +[__1] rejecting: hashable-1.4.3.0 + (constraint from 2-web-import-constraints.project requires ==1.4.2.0) +[__1] rejecting: hashable-1.4.2.0 + (constraint from project-stackage/nightly-2023-12-07.config requires ==1.4.3.0) + imported by: stackage-web.config + imported by: 2-web-import-constraints.project [__1] fail (backjumping, conflict set: cabal-version-override, hashable) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), cabal-version-override (2) diff --git a/cabal-testsuite/PackageTests/VersionPriority/2-web.test.hs b/cabal-testsuite/PackageTests/VersionPriority/2-web.test.hs index 11450ddd396..d88328b436e 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/2-web.test.hs +++ b/cabal-testsuite/PackageTests/VersionPriority/2-web.test.hs @@ -5,9 +5,5 @@ testVersionWin project = fails $ cabal "v2-build" ["--dry-run"] main = cabalTest . withRepo "repo" $ do - -- To avoid this diff: - -- -Build profile: -w ghc-9.6.3 -O1 - -- +Build profile: -w ghc- -O1 - skipIfGhcVersion "== 9.6.3" testVersionWin "2-web-constraints-import.project" testVersionWin "2-web-import-constraints.project" diff --git a/cabal-testsuite/PackageTests/VersionPriority/3-web-constraints-import.project b/cabal-testsuite/PackageTests/VersionPriority/3-web-constraints-import.project index 74f5ef66fd9..b9d046a4c59 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/3-web-constraints-import.project +++ b/cabal-testsuite/PackageTests/VersionPriority/3-web-constraints-import.project @@ -2,4 +2,4 @@ packages: . allow-newer: hashable:* constraints: hashable ==1.4.2.0 import: hop-web.config -import: with-ghc.config \ No newline at end of file +import: with-ghc.config diff --git a/cabal-testsuite/PackageTests/VersionPriority/3-web-import-constraints.project b/cabal-testsuite/PackageTests/VersionPriority/3-web-import-constraints.project index 5a103e19a80..b37fb3bbb72 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/3-web-import-constraints.project +++ b/cabal-testsuite/PackageTests/VersionPriority/3-web-import-constraints.project @@ -2,4 +2,4 @@ packages: . allow-newer: hashable:* import: hop-web.config constraints: hashable ==1.4.2.0 -import: with-ghc.config \ No newline at end of file +import: with-ghc.config diff --git a/cabal-testsuite/PackageTests/VersionPriority/3-web.out b/cabal-testsuite/PackageTests/VersionPriority/3-web.out index 13d974b8605..9321613639e 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/3-web.out +++ b/cabal-testsuite/PackageTests/VersionPriority/3-web.out @@ -6,8 +6,13 @@ Error: [Cabal-7107] Could not resolve dependencies: [__0] trying: cabal-version-override-0.1.0.0 (user goal) [__1] next goal: hashable (dependency of cabal-version-override) -[__1] rejecting: hashable-1.4.3.0 (constraint from project config /3-web-constraints-import.project requires ==1.4.2.0) -[__1] rejecting: hashable-1.4.2.0 (constraint from project config project-stackage/nightly-2023-12-07.config requires ==1.4.3.0) +[__1] rejecting: hashable-1.4.3.0 + (constraint from 3-web-constraints-import.project requires ==1.4.2.0) +[__1] rejecting: hashable-1.4.2.0 + (constraint from project-stackage/nightly-2023-12-07.config requires ==1.4.3.0) + imported by: stackage-web.config + imported by: hop-web.config + imported by: 3-web-constraints-import.project [__1] fail (backjumping, conflict set: cabal-version-override, hashable) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), cabal-version-override (2) # cabal v2-build @@ -16,7 +21,12 @@ Error: [Cabal-7107] Could not resolve dependencies: [__0] trying: cabal-version-override-0.1.0.0 (user goal) [__1] next goal: hashable (dependency of cabal-version-override) -[__1] rejecting: hashable-1.4.3.0 (constraint from project config /3-web-import-constraints.project requires ==1.4.2.0) -[__1] rejecting: hashable-1.4.2.0 (constraint from project config project-stackage/nightly-2023-12-07.config requires ==1.4.3.0) +[__1] rejecting: hashable-1.4.3.0 + (constraint from 3-web-import-constraints.project requires ==1.4.2.0) +[__1] rejecting: hashable-1.4.2.0 + (constraint from project-stackage/nightly-2023-12-07.config requires ==1.4.3.0) + imported by: stackage-web.config + imported by: hop-web.config + imported by: 3-web-import-constraints.project [__1] fail (backjumping, conflict set: cabal-version-override, hashable) After searching the rest of the dependency tree exhaustively, these were the goals I've had most trouble fulfilling: hashable (3), cabal-version-override (2) diff --git a/cabal-testsuite/PackageTests/VersionPriority/3-web.test.hs b/cabal-testsuite/PackageTests/VersionPriority/3-web.test.hs index 94a0cbc86b8..984165dcf20 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/3-web.test.hs +++ b/cabal-testsuite/PackageTests/VersionPriority/3-web.test.hs @@ -5,9 +5,5 @@ testVersionWin project = fails $ cabal "v2-build" ["--dry-run"] main = cabalTest . withRepo "repo" $ do - -- To avoid this diff: - -- -Build profile: -w ghc-9.6.3 -O1 - -- +Build profile: -w ghc- -O1 - skipIfGhcVersion "== 9.6.3" testVersionWin "3-web-constraints-import.project" testVersionWin "3-web-import-constraints.project" diff --git a/cabal-testsuite/PackageTests/VersionPriority/repo/hashable-1.4.2.0/hashable.cabal b/cabal-testsuite/PackageTests/VersionPriority/repo/hashable-1.4.2.0/hashable.cabal index be8d96b783d..de0cf79f7d8 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/repo/hashable-1.4.2.0/hashable.cabal +++ b/cabal-testsuite/PackageTests/VersionPriority/repo/hashable-1.4.2.0/hashable.cabal @@ -1,186 +1,3 @@ cabal-version: 1.12 name: hashable version: 1.4.2.0 -synopsis: A class for types that can be converted to a hash value -description: - This package defines a class, 'Hashable', for types that - can be converted to a hash value. This class - exists for the benefit of hashing-based data - structures. The package provides instances for - basic types and a way to combine hash values. - -homepage: http://github.com/haskell-unordered-containers/hashable - --- SPDX-License-Identifier : BSD-3-Clause -license: BSD3 -license-file: LICENSE -author: - Milan Straka - Johan Tibell - -maintainer: Oleg Grenrus -bug-reports: - https://github.com/haskell-unordered-containers/hashable/issues - -stability: Provisional -category: Data -build-type: Simple -tested-with: - GHC ==8.2.2 - || ==8.4.4 - || ==8.6.5 - || ==8.8.3 - || ==8.10.4 - || ==8.10.7 - || ==9.0.1 - || ==9.0.2 - || ==9.2.5 - || ==9.4.4 - -extra-source-files: - CHANGES.md - include/HsHashable.h - README.md - -flag integer-gmp - description: - Are we using @integer-gmp@ to provide fast Integer instances? No effect on GHC-9.0 or later. - - manual: False - default: True - -flag random-initial-seed - description: - Randomly initialize the initial seed on each final executable invocation - This is useful for catching cases when you rely on (non-existent) - stability of hashable's hash functions. - This is not a security feature. - - manual: True - default: False - -library - exposed-modules: - Data.Hashable - Data.Hashable.Generic - Data.Hashable.Lifted - - other-modules: - Data.Hashable.Class - Data.Hashable.Generic.Instances - Data.Hashable.Imports - Data.Hashable.LowLevel - - c-sources: cbits/fnv.c - include-dirs: include - hs-source-dirs: src - build-depends: - -- REMOVED constraint on base for test - -- base >=4.10.1.0 && <4.18 - base - , bytestring >=0.10.8.2 && <0.12 - , containers >=0.5.10.2 && <0.7 - , deepseq >=1.4.3.0 && <1.5 - , filepath >=1.4.1.2 && <1.5 - , ghc-prim - , text >=1.2.3.0 && <1.3 || >=2.0 && <2.1 - - -- REMOVED conditional compilation pulling in extra dependencies - -- if !impl(ghc >=9.2) - -- build-depends: base-orphans >=0.8.6 && <0.9 - - -- if !impl(ghc >=9.4) - -- build-depends: data-array-byte >=0.1.0.1 && <0.2 - - -- Integer internals - if impl(ghc >=9) - build-depends: ghc-bignum >=1.0 && <1.4 - - if !impl(ghc >=9.0.2) - build-depends: ghc-bignum-orphans >=0.1 && <0.2 - - else - if flag(integer-gmp) - build-depends: integer-gmp >=0.4 && <1.1 - - else - -- this is needed for the automatic flag to be well-balanced - build-depends: integer-simple - - if (flag(random-initial-seed) && impl(ghc)) - cpp-options: -DHASHABLE_RANDOM_SEED=1 - - if os(windows) - c-sources: cbits-win/init.c - - else - c-sources: cbits-unix/init.c - - default-language: Haskell2010 - other-extensions: - BangPatterns - CPP - DeriveDataTypeable - FlexibleContexts - FlexibleInstances - GADTs - KindSignatures - MagicHash - MultiParamTypeClasses - ScopedTypeVariables - Trustworthy - TypeOperators - UnliftedFFITypes - - ghc-options: -Wall -fwarn-tabs - - if impl(ghc >=9.0) - -- these flags may abort compilation with GHC-8.10 - -- https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3295 - ghc-options: -Winferred-safe-imports -Wmissing-safe-haskell-mode - -test-suite hashable-tests - type: exitcode-stdio-1.0 - hs-source-dirs: tests - main-is: Main.hs - other-modules: - Properties - Regress - - build-depends: - base - , bytestring - , ghc-prim - , hashable - , HUnit - , QuickCheck >=2.4.0.1 - , random >=1.0 && <1.3 - , test-framework >=0.3.3 - , test-framework-hunit - , test-framework-quickcheck2 >=0.2.9 - , text >=0.11.0.5 - - if !os(windows) - build-depends: unix - cpp-options: -DHAVE_MMAP - other-modules: Regress.Mmap - other-extensions: CApiFFI - - ghc-options: -Wall -fno-warn-orphans - default-language: Haskell2010 - -test-suite hashable-examples - type: exitcode-stdio-1.0 - build-depends: - base - , ghc-prim - , hashable - - hs-source-dirs: examples - main-is: Main.hs - default-language: Haskell2010 - -source-repository head - type: git - location: - https://github.com/haskell-unordered-containers/hashable.git diff --git a/cabal-testsuite/PackageTests/VersionPriority/repo/hashable-1.4.3.0/hashable.cabal b/cabal-testsuite/PackageTests/VersionPriority/repo/hashable-1.4.3.0/hashable.cabal index 69efe15c086..b6475a1f15a 100644 --- a/cabal-testsuite/PackageTests/VersionPriority/repo/hashable-1.4.3.0/hashable.cabal +++ b/cabal-testsuite/PackageTests/VersionPriority/repo/hashable-1.4.3.0/hashable.cabal @@ -1,188 +1,3 @@ cabal-version: 1.12 name: hashable version: 1.4.3.0 -synopsis: A class for types that can be converted to a hash value -description: - This package defines a class, 'Hashable', for types that - can be converted to a hash value. This class - exists for the benefit of hashing-based data - structures. The package provides instances for - basic types and a way to combine hash values. - . - The 'Hashable' 'hash' values are not guaranteed to be stable across library versions, operating systems or architectures. For stable hashing use named hashes: SHA256, CRC32 etc. - -homepage: http://github.com/haskell-unordered-containers/hashable - --- SPDX-License-Identifier : BSD-3-Clause -license: BSD3 -license-file: LICENSE -author: - Milan Straka - Johan Tibell - -maintainer: Oleg Grenrus -bug-reports: - https://github.com/haskell-unordered-containers/hashable/issues - -stability: Provisional -category: Data -build-type: Simple -tested-with: - GHC ==8.2.2 - || ==8.4.4 - || ==8.6.5 - || ==8.8.3 - || ==8.10.4 - || ==8.10.7 - || ==9.0.1 - || ==9.0.2 - || ==9.2.5 - || ==9.4.4 - || ==9.6.1 - -extra-source-files: - CHANGES.md - include/HsHashable.h - README.md - -flag integer-gmp - description: - Are we using @integer-gmp@ to provide fast Integer instances? No effect on GHC-9.0 or later. - - manual: False - default: True - -flag random-initial-seed - description: - Randomly initialize the initial seed on each final executable invocation - This is useful for catching cases when you rely on (non-existent) - stability of hashable's hash functions. - This is not a security feature. - - manual: True - default: False - -library - exposed-modules: - Data.Hashable - Data.Hashable.Generic - Data.Hashable.Lifted - - other-modules: - Data.Hashable.Class - Data.Hashable.Generic.Instances - Data.Hashable.Imports - Data.Hashable.LowLevel - - c-sources: cbits/fnv.c - include-dirs: include - hs-source-dirs: src - build-depends: - -- REMOVED constraint on base for test - -- base >=4.10.1.0 && <4.19 - base - , bytestring >=0.10.8.2 && <0.12 - , containers >=0.5.10.2 && <0.7 - , deepseq >=1.4.3.0 && <1.5 - , filepath >=1.4.1.2 && <1.5 - , ghc-prim - , text >=1.2.3.0 && <1.3 || >=2.0 && <2.1 - - if !impl(ghc >=9.2) - build-depends: base-orphans >=0.8.6 && <0.10 - - if !impl(ghc >=9.4) - build-depends: data-array-byte >=0.1.0.1 && <0.2 - - -- Integer internals - if impl(ghc >=9) - build-depends: ghc-bignum >=1.0 && <1.4 - - if !impl(ghc >=9.0.2) - build-depends: ghc-bignum-orphans >=0.1 && <0.2 - - else - if flag(integer-gmp) - build-depends: integer-gmp >=0.4 && <1.1 - - else - -- this is needed for the automatic flag to be well-balanced - build-depends: integer-simple - - if (flag(random-initial-seed) && impl(ghc)) - cpp-options: -DHASHABLE_RANDOM_SEED=1 - - if os(windows) - c-sources: cbits-win/init.c - - else - c-sources: cbits-unix/init.c - - default-language: Haskell2010 - other-extensions: - BangPatterns - CPP - DeriveDataTypeable - FlexibleContexts - FlexibleInstances - GADTs - KindSignatures - MagicHash - MultiParamTypeClasses - ScopedTypeVariables - Trustworthy - TypeOperators - UnliftedFFITypes - - ghc-options: -Wall -fwarn-tabs - - if impl(ghc >=9.0) - -- these flags may abort compilation with GHC-8.10 - -- https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3295 - ghc-options: -Winferred-safe-imports -Wmissing-safe-haskell-mode - -test-suite hashable-tests - type: exitcode-stdio-1.0 - hs-source-dirs: tests - main-is: Main.hs - other-modules: - Properties - Regress - - build-depends: - base - , bytestring - , ghc-prim - , hashable - , HUnit - , QuickCheck >=2.4.0.1 - , random >=1.0 && <1.3 - , test-framework >=0.3.3 - , test-framework-hunit - , test-framework-quickcheck2 >=0.2.9 - , text >=0.11.0.5 - - if !os(windows) - build-depends: unix - cpp-options: -DHAVE_MMAP - other-modules: Regress.Mmap - other-extensions: CApiFFI - - ghc-options: -Wall -fno-warn-orphans - default-language: Haskell2010 - -test-suite hashable-examples - type: exitcode-stdio-1.0 - build-depends: - base - , ghc-prim - , hashable - - hs-source-dirs: examples - main-is: Main.hs - default-language: Haskell2010 - -source-repository head - type: git - location: - https://github.com/haskell-unordered-containers/hashable.git diff --git a/cabal-testsuite/PackageTests/WarnEarlyOverwrite/cabal.project b/cabal-testsuite/PackageTests/WarnEarlyOverwrite/cabal.project index 5356e76f67c..e6fdbadb439 100644 --- a/cabal-testsuite/PackageTests/WarnEarlyOverwrite/cabal.project +++ b/cabal-testsuite/PackageTests/WarnEarlyOverwrite/cabal.project @@ -1 +1 @@ -packages: . \ No newline at end of file +packages: . diff --git a/cabal-testsuite/PackageTests/WarnEarlyOverwrite/clean-install-by-copy.test.hs b/cabal-testsuite/PackageTests/WarnEarlyOverwrite/clean-install-by-copy.test.hs index af7d6f33625..710878ce1f0 100644 --- a/cabal-testsuite/PackageTests/WarnEarlyOverwrite/clean-install-by-copy.test.hs +++ b/cabal-testsuite/PackageTests/WarnEarlyOverwrite/clean-install-by-copy.test.hs @@ -1,7 +1,8 @@ import Test.Cabal.Prelude -main = withShorterPathForNewBuildStore $ \storeDir -> cabalTest $ do - let options = ["--store-dir=" ++ storeDir, "--installdir=" ++ storeDir] +main = cabalTest $ withShorterPathForNewBuildStore $ do + storeDir <- testStoreDir <$> getTestEnv + let options = ["--installdir=" ++ storeDir] -- Use install method copy that should surely work on Windows too but our -- path normalization for testing is not good enough yet as can be seen in -- this CI failure snippet diff: @@ -10,4 +11,4 @@ main = withShorterPathForNewBuildStore $ \storeDir -> cabalTest $ do -- +Warning: The directory /incoming/new-2448/Users/RUNNER~1/AppData/Local/Temp/cabal-test-store-28260/ghc-/WarnEarlyOver_-0.1.0.0-4c19059e06a32b93b2812983631117e77a2d3833/bin is not in the system search path. -- +Copying 'warn-early-overwrite' to '' skipIfWindows - cabalG options "v2-install" ["--install-method=copy"] \ No newline at end of file + cabalG options "v2-install" ["--install-method=copy"] diff --git a/cabal-testsuite/PackageTests/WarnEarlyOverwrite/clean-install-by-symlink.test.hs b/cabal-testsuite/PackageTests/WarnEarlyOverwrite/clean-install-by-symlink.test.hs index 1fa303cb2bc..f4e6556b167 100644 --- a/cabal-testsuite/PackageTests/WarnEarlyOverwrite/clean-install-by-symlink.test.hs +++ b/cabal-testsuite/PackageTests/WarnEarlyOverwrite/clean-install-by-symlink.test.hs @@ -1,7 +1,8 @@ import Test.Cabal.Prelude -main = withShorterPathForNewBuildStore $ \storeDir -> cabalTest $ do +main = cabalTest $ withShorterPathForNewBuildStore $ do + storeDir <- testStoreDir <$> getTestEnv -- The default install method is symlink that may not work on Windows. skipIfWindows - let options = ["--store-dir=" ++ storeDir, "--installdir=" ++ storeDir] - cabalG options "v2-install" [] \ No newline at end of file + let options = ["--installdir=" ++ storeDir] + cabalG options "v2-install" [] diff --git a/cabal-testsuite/PackageTests/WarnEarlyOverwrite/dirty-install.test.hs b/cabal-testsuite/PackageTests/WarnEarlyOverwrite/dirty-install.test.hs index 6578a891c0d..8d2ae8e6cc5 100644 --- a/cabal-testsuite/PackageTests/WarnEarlyOverwrite/dirty-install.test.hs +++ b/cabal-testsuite/PackageTests/WarnEarlyOverwrite/dirty-install.test.hs @@ -2,12 +2,14 @@ import Test.Cabal.Prelude import System.FilePath -main = withShorterPathForNewBuildStore $ \storeDir -> cabalTest $ do +main = cabalTest $ withShorterPathForNewBuildStore $ do + + storeDir <- testStoreDir <$> getTestEnv -- Windows does not natively include a touch command. -- SEE: https://stackoverflow.com/questions/30011267/create-an-empty-file-on-the-commandline-in-windows-like-the-linux-touch-command skipIfWindows - let options = ["--store-dir=" ++ storeDir, "--installdir=" ++ storeDir] + let options = ["--installdir=" ++ storeDir] -- Touch the target to see if the warning is made early before the build. _ <- runM "touch" [storeDir "warn-early-overwrite"] Nothing fails $ cabalG options "v2-install" [] - cabalG options "v2-install" ["--overwrite-policy=always"] \ No newline at end of file + cabalG options "v2-install" ["--overwrite-policy=always"] diff --git a/cabal-testsuite/README.md b/cabal-testsuite/README.md index f217617e932..79b9185fecb 100644 --- a/cabal-testsuite/README.md +++ b/cabal-testsuite/README.md @@ -28,6 +28,31 @@ There are a few useful flags: * `--keep-tmp-files` can be used to keep the temporary directories that tests are run in. +## Which Cabal library version do cabal-install tests use? + +By default the `cabal-install` tests will use the `Cabal` library which comes with +the boot compiler when it needs to build a custom `Setup.hs`. + +This can be very confusing if you are modifying the Cabal library, writing a test +which relies on a custom setup script and you are wondering why the test is not +responding at all to your changes. + +There are some flags which allow you to instruct `cabal-install` to use a different +`Cabal` library version. + +1. `--boot-cabal-lib` specifies to use the Cabal library bundled with the + test compiler, this is the default. +2. `--intree-cabal-lib=` specifies to use Cabal and Cabal-syntax + from a specific directory, and `--test-tmp` indicates where to put + the package database they are built into. +3. `--specific-cabal-lib=` specifies to use a specific Cabal + version from hackage (ie 3.10.2.0) and installs the package database + into `--test-tmp=` + +The CI scripts use the `--intree-cabal-lib` option for the most part but in +the future there should be a variety of jobs which test `cabal-install` built +against newer `Cabal` versions but forced to interact with older `Cabal` versions. + ### How to run the doctests You need to install the `doctest` tool. Make sure it's compiled with your current @@ -40,7 +65,7 @@ cabal install doctest --overwrite-policy=always --ignore-project After that you can run doctests for a component of your choice via the following command: ``` shellsession -cabal repl --with-ghc=doctest --build-depends=QuickCheck --build-depends=template-haskell --repl-options="-w" --project-file="cabal.project.validate" Cabal-syntax +cabal repl --with-ghc=doctest --build-depends=QuickCheck --build-depends=template-haskell --repl-options="-w" --project-file="cabal.validate.project" Cabal-syntax ``` In this example we have run doctests in `Cabal-syntax`. Notice, that some @@ -173,8 +198,7 @@ and stderr. **How do I skip running a test in some environments?** Use the `skipIf` and `skipUnless` combinators. Useful parameters to test these with include `hasSharedLibraries`, `hasProfiledLibraries`, -`hasCabalShared`, `isGhcVersion`, `isWindows`, `isLinux`, `isOSX` -and `hasCabalForGhc`. +`hasCabalShared`, `isGhcVersion`, `isWindows`, `isLinux`, `isOSX`. **I programmatically modified a file in my test suite, but Cabal/GHC doesn't seem to be picking it up.** You need to sleep sufficiently diff --git a/cabal-testsuite/cabal-testsuite.cabal b/cabal-testsuite/cabal-testsuite.cabal index e99ea880d24..1a58e65b984 100644 --- a/cabal-testsuite/cabal-testsuite.cabal +++ b/cabal-testsuite/cabal-testsuite.cabal @@ -26,10 +26,10 @@ common shared default-language: Haskell2010 build-depends: - , base >= 4.9 && <4.20 + , base >= 4.11 && < 4.20 -- this needs to match the in-tree lib:Cabal version - , Cabal ^>= 3.11.0.0 - , Cabal-syntax ^>= 3.11.0.0 + , Cabal ^>= 3.12.0.0 + , Cabal-syntax ^>= 3.12.0.0 , Cabal-tests ghc-options: -Wall -fwarn-tabs -fwarn-incomplete-uni-patterns @@ -104,6 +104,7 @@ executable cabal-tests , transformers -- dependencies specific to exe:cabal-tests , clock ^>= 0.7.2 || ^>=0.8 + , directory build-tool-depends: cabal-testsuite:setup default-extensions: TypeOperators diff --git a/cabal-testsuite/cabal.project b/cabal-testsuite/cabal.project new file mode 100644 index 00000000000..17b04a2b56f --- /dev/null +++ b/cabal-testsuite/cabal.project @@ -0,0 +1,6 @@ +-- This intercepting project is here to avoid tests picking up a cabal.project +-- from a parent directory, such as the one in the root of the `haskell/cabal` +-- project itself. Having `optional-packages: .` avoids the folowing warning +-- being added to the `.out` file: +-- Warning: There are no packages or optional-packages in the project +optional-packages: . diff --git a/cabal-testsuite/main/cabal-tests.hs b/cabal-testsuite/main/cabal-tests.hs index 8f8e8ec2807..b6a76ccf485 100644 --- a/cabal-testsuite/main/cabal-tests.hs +++ b/cabal-testsuite/main/cabal-tests.hs @@ -11,6 +11,7 @@ import Test.Cabal.TestCode import Distribution.Verbosity (normal, verbose, Verbosity) import Distribution.Simple.Utils (getDirectoryContentsRecursive) +import Distribution.Simple.Program import Options.Applicative import Control.Concurrent.MVar @@ -26,6 +27,9 @@ import System.IO import System.FilePath import System.Exit import System.Process (callProcess, showCommandForUser) +import System.Directory +import Distribution.Pretty +import Data.Maybe #if !MIN_VERSION_base(4,12,0) import Data.Monoid ((<>)) @@ -71,9 +75,22 @@ data MainArgs = MainArgs { mainArgVerbose :: Bool, mainArgQuiet :: Bool, mainArgDistDir :: Maybe FilePath, + mainArgCabalSpec :: Maybe CabalLibSpec, mainCommonArgs :: CommonArgs } +data CabalLibSpec = BootCabalLib | InTreeCabalLib FilePath FilePath | SpecificCabalLib String FilePath + +cabalLibSpecParser :: Parser CabalLibSpec +cabalLibSpecParser = bootParser <|> intreeParser <|> specificParser + where + bootParser = flag' BootCabalLib (long "boot-cabal-lib") + intreeParser = InTreeCabalLib <$> strOption (long "intree-cabal-lib" <> metavar "ROOT") + <*> option str ( help "Test TMP" <> long "test-tmp" ) + specificParser = SpecificCabalLib <$> strOption (long "specific-cabal-lib" <> metavar "VERSION") + <*> option str ( help "Test TMP" <> long "test-tmp" ) + + -- | optparse-applicative parser for 'MainArgs' mainArgParser :: Parser MainArgs mainArgParser = MainArgs @@ -102,8 +119,52 @@ mainArgParser = MainArgs ( help "Dist directory we were built with" <> long "builddir" <> metavar "DIR")) + <*> optional cabalLibSpecParser <*> commonArgParser +-- Unpack and build a specific released version of Cabal and Cabal-syntax libraries +buildCabalLibsProject :: String -> Verbosity -> Maybe FilePath -> FilePath -> IO FilePath +buildCabalLibsProject projString verb mbGhc dir = do + let prog_db = userSpecifyPaths [("ghc", path) | Just path <- [mbGhc] ] defaultProgramDb + (cabal, _) <- requireProgram verb (simpleProgram "cabal") prog_db + (ghc, _) <- requireProgram verb ghcProgram prog_db + + let pv = fromMaybe (error "no ghc version") (programVersion ghc) + let final_package_db = dir "dist-newstyle" "packagedb" "ghc-" ++ prettyShow pv + createDirectoryIfMissing True dir + writeFile (dir "cabal.project-test") projString + + runProgramInvocation verb + ((programInvocation cabal + ["--store-dir", dir "store" + , "--project-file=" ++ dir "cabal.project-test" + , "build" + , "-w", programPath ghc + , "Cabal", "Cabal-syntax"] ) { progInvokeCwd = Just dir }) + return final_package_db + + +buildCabalLibsSpecific :: String -> Verbosity -> Maybe FilePath -> FilePath -> IO FilePath +buildCabalLibsSpecific ver verb mbGhc builddir_rel = do + let prog_db = userSpecifyPaths [("ghc", path) | Just path <- [mbGhc] ] defaultProgramDb + (cabal, _) <- requireProgram verb (simpleProgram "cabal") prog_db + dir <- canonicalizePath (builddir_rel "specific" ver) + cgot <- doesDirectoryExist (dir "Cabal-" ++ ver) + unless cgot $ + runProgramInvocation verb ((programInvocation cabal ["get", "Cabal-" ++ ver]) { progInvokeCwd = Just dir }) + csgot <- doesDirectoryExist (dir "Cabal-syntax-" ++ ver) + unless csgot $ + runProgramInvocation verb ((programInvocation cabal ["get", "Cabal-syntax-" ++ ver]) { progInvokeCwd = Just dir }) + + buildCabalLibsProject ("packages: Cabal-" ++ ver ++ " Cabal-syntax-" ++ ver) verb mbGhc dir + + +buildCabalLibsIntree :: String -> Verbosity -> Maybe FilePath -> FilePath -> IO FilePath +buildCabalLibsIntree root verb mbGhc builddir_rel = do + dir <- canonicalizePath (builddir_rel "intree") + buildCabalLibsProject ("packages: " ++ root "Cabal" ++ " " ++ root "Cabal-syntax") verb mbGhc dir + + main :: IO () main = do -- By default, stderr is not buffered. This isn't really necessary @@ -115,6 +176,27 @@ main = do args <- execParser $ info (mainArgParser <**> helper) mempty let verbosity = if mainArgVerbose args then verbose else normal + mpkg_db <- + -- Not path to cabal-install so we're not going to run cabal-install tests so we + -- can skip setting up a Cabal library to use with cabal-install. + case argCabalInstallPath (mainCommonArgs args) of + Nothing -> do + when (isJust $ mainArgCabalSpec args) + (putStrLn "Ignoring Cabal library specification as cabal-install tests are not running") + return Nothing + -- Path to cabal-install is passed, so need to install the requested relevant version of Cabal + -- library. + Just {} -> + case mainArgCabalSpec args of + Nothing -> do + putStrLn "No Cabal library specified, using boot Cabal library with cabal-install tests" + return Nothing + Just BootCabalLib -> return Nothing + Just (InTreeCabalLib root build_dir) -> + Just <$> buildCabalLibsIntree root verbosity (argGhcPath (mainCommonArgs args)) build_dir + Just (SpecificCabalLib ver build_dir) -> + Just <$> buildCabalLibsSpecific ver verbosity (argGhcPath (mainCommonArgs args)) build_dir + -- To run our test scripts, we need to be able to run Haskell code -- linked against the Cabal library under test. The most efficient -- way to get this information is by querying the *host* build @@ -140,7 +222,7 @@ main = do -> IO result runTest runner path = runner Nothing [] path $ - ["--builddir", dist_dir, path] ++ renderCommonArgs (mainCommonArgs args) + ["--builddir", dist_dir, path] ++ ["--extra-package-db=" ++ pkg_db | Just pkg_db <- [mpkg_db]] ++ renderCommonArgs (mainCommonArgs args) case mainArgTestPaths args of [path] -> do diff --git a/cabal-testsuite/src/Test/Cabal/DecodeShowBuildInfo.hs b/cabal-testsuite/src/Test/Cabal/DecodeShowBuildInfo.hs index 02c1cb7e733..e335d6b93db 100644 --- a/cabal-testsuite/src/Test/Cabal/DecodeShowBuildInfo.hs +++ b/cabal-testsuite/src/Test/Cabal/DecodeShowBuildInfo.hs @@ -21,7 +21,7 @@ import System.Exit -- -- Results can be read via 'withPlan', 'buildInfoFile' and 'decodeBuildInfoFile'. runShowBuildInfo :: [String] -> TestM () -runShowBuildInfo args = cabal "build" ("--enable-build-info":args) +runShowBuildInfo args = noCabalPackageDb $ cabal "build" ("--enable-build-info":args) -- | Read 'build-info.json' for a given package and component -- from disk and record the content. Helpful for defining test-cases diff --git a/cabal-testsuite/src/Test/Cabal/Monad.hs b/cabal-testsuite/src/Test/Cabal/Monad.hs index 14e93135064..0ebc18d613b 100644 --- a/cabal-testsuite/src/Test/Cabal/Monad.hs +++ b/cabal-testsuite/src/Test/Cabal/Monad.hs @@ -40,6 +40,7 @@ module Test.Cabal.Monad ( testKeysDir, testSourceCopyDir, testCabalDir, + testStoreDir, testUserCabalConfigFile, testActualFile, -- * Skipping tests @@ -157,6 +158,7 @@ renderCommonArgs args = data TestArgs = TestArgs { testArgDistDir :: FilePath, + testArgPackageDb :: Maybe FilePath, testArgScriptPath :: FilePath, testCommonArgs :: CommonArgs } @@ -167,6 +169,10 @@ testArgParser = TestArgs ( help "Build directory of cabal-testsuite" <> long "builddir" <> metavar "DIR") + <*> optional (option str + ( help "Package DB which contains Cabal and Cabal-syntax" + <> long "extra-package-db" + <> metavar "DIR")) <*> argument str ( metavar "FILE") <*> commonArgParser @@ -295,6 +301,8 @@ runTestM mode m = program_db1 verbosity + (configuredGhcProg, _) <- requireProgram verbosity ghcProgram program_db2 + program_db3 <- reconfigurePrograms verbosity ([("cabal", p) | p <- maybeToList (argCabalInstallPath cargs)] ++ @@ -316,11 +324,13 @@ runTestM mode m = testProgramDb = program_db, testPlatform = platform, testCompiler = comp, + testCompilerPath = programPath configuredGhcProg, testPackageDBStack = db_stack, testVerbosity = verbosity, testMtimeChangeDelay = Nothing, testScriptEnv = senv, testSetupPath = dist_dir "build" "setup" "setup", + testPackageDbPath = testArgPackageDb args, testSkipSetupTests = argSkipSetupTests (testCommonArgs args), testHaveCabalShared = runnerWithSharedLib senv, testEnvironment = @@ -341,7 +351,8 @@ runTestM mode m = testCabalProjectFile = Nothing, testPlan = Nothing, testRecordDefaultMode = DoNotRecord, - testRecordUserMode = Nothing + testRecordUserMode = Nothing, + testMaybeStoreDir = Nothing } let go = do cleanup r <- withSourceCopy m @@ -400,8 +411,6 @@ onlyIfExists m = -- This requires the test repository to be a Git checkout, because -- we use the Git metadata to figure out what files to copy into the -- hermetic copy. --- --- Also see 'withSourceCopyDir'. withSourceCopy :: TestM a -> TestM a withSourceCopy m = do env <- getTestEnv @@ -521,6 +530,16 @@ mkNormalizerEnv = do canonicalizedTestTmpDir <- liftIO $ canonicalizePath (testTmpDir env) + -- 'cabal' is configured in the package-db, but doesn't specify how to find the program version + -- Thus we find the program location, if it exists, and query for the program version for + -- output normalisation. + cabalVersionM <- do + cabalProgM <- needProgramM "cabal" + case cabalProgM of + Nothing -> pure Nothing + Just cabalProg -> do + liftIO (findProgramVersion "--numeric-version" id (testVerbosity env) (programPath cabalProg)) + return NormalizerEnv { normalizerRoot = addTrailingPathSeparator (testSourceDir env), @@ -532,12 +551,16 @@ mkNormalizerEnv = do = addTrailingPathSeparator tmpDir, normalizerGhcVersion = compilerVersion (testCompiler env), + normalizerGhcPath + = testCompilerPath env, normalizerKnownPackages = mapMaybe simpleParse (words list_out), normalizerPlatform = testPlatform env, normalizerCabalVersion - = cabalVersionLibrary + = cabalVersionLibrary, + normalizerCabalInstallVersion + = cabalVersionM } cabalVersionLibrary :: Version @@ -550,6 +573,11 @@ requireProgramM program = do requireProgram (testVerbosity env) program (testProgramDb env) return configured_program +needProgramM :: String -> TestM (Maybe ConfiguredProgram) +needProgramM program = do + env <- getTestEnv + return $ lookupProgramByName program (testProgramDb env) + programPathM :: Program -> TestM FilePath programPathM program = do fmap programPath (requireProgramM program) @@ -591,6 +619,7 @@ data TestEnv = TestEnv testSourceDir :: FilePath -- | Somewhere to stow temporary files needed by the test. , testTmpDir :: FilePath + -- | Test sub-name, used to qualify dist/database directory to avoid -- conflicts. , testSubName :: String @@ -601,6 +630,7 @@ data TestEnv = TestEnv , testProgramDb :: ProgramDb -- | Compiler we are running tests for , testCompiler :: Compiler + , testCompilerPath :: FilePath -- | Platform we are running tests on , testPlatform :: Platform -- | Package database stack (actually this changes lol) @@ -615,6 +645,9 @@ data TestEnv = TestEnv , testScriptEnv :: ScriptEnv -- | Setup script path , testSetupPath :: FilePath + -- | Setup package-db path which contains Cabal and Cabal-syntax for cabal-install to + -- use when compiling custom setups. + , testPackageDbPath :: Maybe FilePath -- | Skip Setup tests? , testSkipSetupTests :: Bool -- | Do we have shared libraries for the Cabal-under-tests? @@ -645,6 +678,8 @@ data TestEnv = TestEnv , testRecordDefaultMode :: RecordMode -- | User explicitly set record mode. Not implemented ATM. , testRecordUserMode :: Maybe RecordMode + -- | Path to the storedir used by the test, if not the default + , testMaybeStoreDir :: Maybe FilePath } deriving Show @@ -720,6 +755,11 @@ testSourceCopyDir env = testTmpDir env testCabalDir :: TestEnv -> FilePath testCabalDir env = testHomeDir env ".cabal" +testStoreDir :: TestEnv -> FilePath +testStoreDir env = case testMaybeStoreDir env of + Just dir -> dir + Nothing -> testCabalDir env "store" + -- | The user cabal config file testUserCabalConfigFile :: TestEnv -> FilePath testUserCabalConfigFile env = testCabalDir env "config" diff --git a/cabal-testsuite/src/Test/Cabal/OutputNormalizer.hs b/cabal-testsuite/src/Test/Cabal/OutputNormalizer.hs index a0b7d3ac669..a4f38633965 100644 --- a/cabal-testsuite/src/Test/Cabal/OutputNormalizer.hs +++ b/cabal-testsuite/src/Test/Cabal/OutputNormalizer.hs @@ -49,7 +49,6 @@ normalizeOutput nenv = "/incoming/new-" -- Normalize architecture . resub (posixRegexEscape (display (normalizerPlatform nenv))) "" - . normalizeBuildInfoJson -- Some GHC versions are chattier than others . resub "^ignoring \\(possibly broken\\) abi-depends field for packages" "" -- Normalize the current GHC version. Apply this BEFORE packageIdRegex, @@ -63,6 +62,8 @@ normalizeOutput nenv = ++ "(-[a-z0-9]+)?") "" else id) + . normalizeBuildInfoJson + . maybe id normalizePathCmdOutput (normalizerCabalInstallVersion nenv) -- hackage-security locks occur non-deterministically . resub "(Released|Acquired|Waiting) .*hackage-security-lock\n" "" where @@ -70,16 +71,27 @@ normalizeOutput nenv = resub (posixRegexEscape (display pid) ++ "(-[A-Za-z0-9.-]+)?") (prettyShow (packageName pid) ++ "-") + normalizePathCmdOutput cabalInstallVersion = + -- clear the ghc path out of all supported output formats + resub ("compiler-path: " <> posixRegexEscape (normalizerGhcPath nenv)) + "compiler-path: " + -- ghc compiler path is already covered by 'normalizeBuildInfoJson' + . resub ("{\"cabal-version\":\"" ++ posixRegexEscape (display cabalInstallVersion) ++ "\"") + "{\"cabal-version\":\"\"" + -- Replace windows filepaths that contain `\\` in the json output. + -- since we need to escape each '\' ourselves, these 8 backslashes match on exactly 2 backslashes + -- in the test output. + -- As the json output is escaped, we need to re-escape the path. + . resub "\\\\\\\\" "\\" + -- 'build-info.json' contains a plethora of host system specific information. -- -- This must happen before the root-dir normalisation. normalizeBuildInfoJson = -- Remove ghc path from show-build-info output - resub ("\"path\":\"[^\"]*\"}") - "\"path\":\"\"}" + resub ("\"path\":\"" <> posixRegexEscape (normalizerGhcPath nenv) <> "\"") + "\"path\":\"\"" -- Remove cabal version output from show-build-info output - . resub ("{\"cabal-version\":\"" ++ posixRegexEscape (display (normalizerCabalVersion nenv)) ++ "\"") - "{\"cabal-version\":\"\"" . resub ("{\"cabal-lib-version\":\"" ++ posixRegexEscape (display (normalizerCabalVersion nenv)) ++ "\"") "{\"cabal-lib-version\":\"\"" -- Remove the package id for stuff such as: @@ -104,9 +116,11 @@ data NormalizerEnv = NormalizerEnv -- `/var` is a symlink for `/private/var`. , normalizerGblTmpDir :: FilePath , normalizerGhcVersion :: Version + , normalizerGhcPath :: FilePath , normalizerKnownPackages :: [PackageId] , normalizerPlatform :: Platform , normalizerCabalVersion :: Version + , normalizerCabalInstallVersion :: Maybe Version } posixSpecialChars :: [Char] diff --git a/cabal-testsuite/src/Test/Cabal/Prelude.hs b/cabal-testsuite/src/Test/Cabal/Prelude.hs index 22f109f16af..f1656eecaf6 100644 --- a/cabal-testsuite/src/Test/Cabal/Prelude.hs +++ b/cabal-testsuite/src/Test/Cabal/Prelude.hs @@ -35,7 +35,7 @@ import Distribution.Simple.Utils ( withFileContents, tryFindPackageDesc ) import Distribution.Version import Distribution.Package -import Distribution.Parsec (eitherParsec) +import Distribution.Parsec (eitherParsec, simpleParsec) import Distribution.Types.UnqualComponentName import Distribution.Types.LocalBuildInfo import Distribution.PackageDescription @@ -108,6 +108,10 @@ withDirectory :: FilePath -> TestM a -> TestM a withDirectory f = withReaderT (\env -> env { testRelativeCurrentDir = testRelativeCurrentDir env f }) +withStoreDir :: FilePath -> TestM a -> TestM a +withStoreDir fp = + withReaderT (\env -> env { testMaybeStoreDir = Just fp }) + -- We append to the environment list, as per 'getEffectiveEnvironment' -- which prefers the latest override. withEnv :: [(String, Maybe String)] -> TestM a -> TestM a @@ -302,15 +306,14 @@ cabalGArgs global_args cmd args input = do , "info" , "init" , "haddock-project" - , "path" ] = [ ] -- new-build commands are affected by testCabalProjectFile - | cmd == "v2-sdist" + | cmd `elem` ["v2-sdist", "path"] = [ "--project-file=" ++ fp | Just fp <- [testCabalProjectFile env] ] - | cmd == "v2-clean" + | cmd == "v2-clean" || cmd == "clean" = [ "--builddir", testDistDir env ] ++ [ "--project-file=" ++ fp | Just fp <- [testCabalProjectFile env] ] @@ -318,16 +321,25 @@ cabalGArgs global_args cmd args input = do = [ "--builddir", testDistDir env , "-j1" ] ++ [ "--project-file=" ++ fp | Just fp <- [testCabalProjectFile env] ] + ++ ["--package-db=" ++ db | Just db <- [testPackageDbPath env]] + | "v1-" `isPrefixOf` cmd + = [ "--builddir", testDistDir env ] + ++ install_args | otherwise - = [ "--builddir", testDistDir env ] ++ - install_args + = [ "--builddir", testDistDir env ] + ++ ["--package-db=" ++ db | Just db <- [testPackageDbPath env]] + ++ install_args install_args | cmd == "v1-install" || cmd == "v1-build" = [ "-j1" ] | otherwise = [] - cabal_args = global_args + global_args' = + [ "--store-dir=" ++ storeDir | Just storeDir <- [testMaybeStoreDir env] ] + ++ global_args + + cabal_args = global_args' ++ [ cmd, marked_verbose ] ++ extra_args ++ args @@ -399,6 +411,12 @@ withPackageDb m = do $ do ghcPkg "init" [db_path] m +-- | Don't pass `--package-db` to cabal-install, so it won't find the specific version of +-- `Cabal` which you have configured the testsuite to run with. You probably don't want to use +-- this unless you are testing the `--package-db` flag itself. +noCabalPackageDb :: TestM a -> TestM a +noCabalPackageDb m = withReaderT (\nenv -> nenv { testPackageDbPath = Nothing }) m + ghcPkg :: String -> [String] -> TestM () ghcPkg cmd args = void (ghcPkg' cmd args) @@ -840,6 +858,44 @@ hasCabalShared = do env <- getTestEnv return (testHaveCabalShared env) + +anyCabalVersion :: WithCallStack ( String -> TestM Bool ) +anyCabalVersion = isCabalVersion any + +allCabalVersion :: WithCallStack ( String -> TestM Bool ) +allCabalVersion = isCabalVersion all + +-- Used by cabal-install tests to determine which Cabal library versions are +-- available. Given a version range, and a predicate on version ranges, +-- are there any installed packages Cabal library +-- versions which satisfy these. +isCabalVersion :: WithCallStack (((Version -> Bool) -> [Version] -> Bool) -> String -> TestM Bool) +isCabalVersion decide range = do + env <- getTestEnv + cabal_pkgs <- ghcPkg_raw' $ ["--global", "list", "Cabal", "--simple"] ++ ["--package-db=" ++ db | Just db <- [testPackageDbPath env]] + let pkg_versions :: [PackageIdentifier] = mapMaybe simpleParsec (words (resultOutput cabal_pkgs)) + vr <- case eitherParsec range of + Left err -> fail err + Right vr -> return vr + return $ decide (`withinRange` vr) (map pkgVersion pkg_versions) + +-- | Skip a test unless any available Cabal library version matches the predicate. +skipUnlessAnyCabalVersion :: String -> TestM () +skipUnlessAnyCabalVersion range = skipUnless ("needs any Cabal " ++ range) =<< anyCabalVersion range + + +-- | Skip a test if any available Cabal library version matches the predicate. +skipIfAnyCabalVersion :: String -> TestM () +skipIfAnyCabalVersion range = skipIf ("incompatible with Cabal " ++ range) =<< anyCabalVersion range + +-- | Skip a test unless all Cabal library versions match the predicate. +skipUnlessAllCabalVersion :: String -> TestM () +skipUnlessAllCabalVersion range = skipUnless ("needs all Cabal " ++ range) =<< allCabalVersion range + +-- | Skip a test if all the Cabal library version matches a predicate. +skipIfAllCabalVersion :: String -> TestM () +skipIfAllCabalVersion range = skipIf ("incompatible with Cabal " ++ range) =<< allCabalVersion range + isGhcVersion :: WithCallStack (String -> TestM Bool) isGhcVersion range = do ghc_program <- requireProgramM ghcProgram @@ -894,24 +950,6 @@ getOpenFilesLimit = liftIO $ do _ -> return Nothing #endif -hasCabalForGhc :: TestM Bool -hasCabalForGhc = do - env <- getTestEnv - ghc_program <- requireProgramM ghcProgram - (runner_ghc_program, _) <- liftIO $ requireProgram - (testVerbosity env) - ghcProgram - (runnerProgramDb (testScriptEnv env)) - - -- TODO: I guess, to be more robust what we should check for - -- specifically is that the Cabal library we want to use - -- will be picked up by the package db stack of ghc-program - - -- liftIO $ putStrLn $ "ghc_program: " ++ show ghc_program - -- liftIO $ putStrLn $ "runner_ghc_program: " ++ show runner_ghc_program - - return (programPath ghc_program == programPath runner_ghc_program) - -- | If you want to use a Custom setup with new-build, it needs to -- be 1.20 or later. Ordinarily, Cabal can go off and build a -- sufficiently recent Cabal if necessary, but in our test suite, @@ -972,6 +1010,12 @@ ghc' args = do recordHeader ["ghc"] runProgramM ghcProgram args Nothing +ghcPkg_raw' :: [String] -> TestM Result +ghcPkg_raw' args = do + recordHeader ["ghc-pkg"] + runProgramM ghcPkgProgram args Nothing + + python3 :: [String] -> TestM () python3 args = void $ python3' args @@ -1053,26 +1097,27 @@ copySourceFileTo src dest = do -- limit) by creating a temporary directory for the new-build store. This -- function creates a directory immediately under the current drive on Windows. -- The directory must be passed to new- commands with --store-dir. -withShorterPathForNewBuildStore :: (FilePath -> IO a) -> IO a +withShorterPathForNewBuildStore :: TestM a -> TestM a withShorterPathForNewBuildStore test = - withTestDir normal "cabal-test-store" test + withTestDir normal "cabal-test-store" (\f -> withStoreDir f test) -- | Find where a package locates in the store dir. This works only if there is exactly one 1 ghc version -- and exactly 1 directory for the given package in the store dir. -findDependencyInStore :: FilePath -- ^store dir - -> String -- ^package name prefix - -> IO FilePath -- ^package dir -findDependencyInStore storeDir pkgName = do - (storeDirForGhcVersion : _) <- listDirectory storeDir - packageDirs <- listDirectory (storeDir storeDirForGhcVersion) - -- Ideally, we should call 'hashedInstalledPackageId' from 'Distribution.Client.PackageHash'. - -- But 'PackageHashInputs', especially 'PackageHashConfigInputs', is too hard to construct. - let pkgName' = - if buildOS == OSX - then filter (not . flip elem "aeiou") pkgName - -- simulates the way 'hashedInstalledPackageId' uses to compress package name - else pkgName - let libDir = case filter (pkgName' `isPrefixOf`) packageDirs of - [] -> error $ "Could not find " <> pkgName' <> " when searching for " <> pkgName' <> " in\n" <> show packageDirs - (dir:_) -> dir - pure (storeDir storeDirForGhcVersion libDir) +findDependencyInStore :: String -- ^package name prefix + -> TestM FilePath -- ^package dir +findDependencyInStore pkgName = do + storeDir <- testStoreDir <$> getTestEnv + liftIO $ do + storeDirForGhcVersion:_ <- listDirectory storeDir + packageDirs <- listDirectory (storeDir storeDirForGhcVersion) + -- Ideally, we should call 'hashedInstalledPackageId' from 'Distribution.Client.PackageHash'. + -- But 'PackageHashInputs', especially 'PackageHashConfigInputs', is too hard to construct. + let pkgName' = + if buildOS == OSX + then filter (not . flip elem "aeiou") pkgName + -- simulates the way 'hashedInstalledPackageId' uses to compress package name + else pkgName + let libDir = case filter (pkgName' `isPrefixOf`) packageDirs of + [] -> error $ "Could not find " <> pkgName' <> " when searching for " <> pkgName' <> " in\n" <> show packageDirs + (dir:_) -> dir + pure (storeDir storeDirForGhcVersion libDir) diff --git a/cabal-testsuite/src/Test/Cabal/Script.hs b/cabal-testsuite/src/Test/Cabal/Script.hs index 943ea784c8d..308c390140b 100644 --- a/cabal-testsuite/src/Test/Cabal/Script.hs +++ b/cabal-testsuite/src/Test/Cabal/Script.hs @@ -77,23 +77,32 @@ runghc senv mb_cwd env_overrides script_path args = do -- script with 'runghc'. runnerCommand :: ScriptEnv -> Maybe FilePath -> [(String, Maybe String)] -> FilePath -> [String] -> IO (FilePath, [String]) -runnerCommand senv _mb_cwd _env_overrides script_path args = do +runnerCommand senv mb_cwd _env_overrides script_path args = do (prog, _) <- requireProgram verbosity runghcProgram (runnerProgramDb senv) return (programPath prog, runghc_args ++ ["--"] ++ map ("--ghc-arg="++) ghc_args ++ [script_path] ++ args) where verbosity = runnerVerbosity senv runghc_args = [] - ghc_args = runnerGhcArgs senv + ghc_args = runnerGhcArgs senv mb_cwd -- | Compute the GHC flags to invoke 'runghc' with under a 'ScriptEnv'. -runnerGhcArgs :: ScriptEnv -> [String] -runnerGhcArgs senv = +runnerGhcArgs :: ScriptEnv -> Maybe FilePath -> [String] +runnerGhcArgs senv mb_cwd = renderGhcOptions (runnerCompiler senv) (runnerPlatform senv) ghc_options where ghc_options = M.mempty { ghcOptPackageDBs = runnerPackageDbStack senv , ghcOptPackages = toNubListR (runnerPackages senv) , ghcOptHideAllPackages = Flag True -- Avoid picking stray module files that look - -- like our imports - , ghcOptSourcePathClear = Flag True } + -- like our imports... + , ghcOptSourcePathClear = Flag True + -- ... yet retain the current directory as an included + -- directory, e.g. so that we can compile a Setup.hs + -- script which imports a locally defined module. + -- See the PackageTests/SetupDep test. + , ghcOptSourcePath = toNubListR $ + case mb_cwd of + Nothing -> [] + Just wd -> [wd] + } diff --git a/cabal-testsuite/src/Test/Cabal/Server.hs b/cabal-testsuite/src/Test/Cabal/Server.hs index 450c6f660c7..6f94798b688 100644 --- a/cabal-testsuite/src/Test/Cabal/Server.hs +++ b/cabal-testsuite/src/Test/Cabal/Server.hs @@ -40,6 +40,9 @@ import qualified GHC.IO.Exception as GHC import Distribution.Verbosity import System.Process.Internals + ( ProcessHandle__( OpenHandle ) + , withProcessHandle + ) #if mingw32_HOST_OS import qualified System.Win32.Process as Win32 #endif @@ -215,7 +218,7 @@ runMain ref m = do startServer :: Chan ServerLogMsg -> ScriptEnv -> IO Server startServer chan senv = do (prog, _) <- requireProgram verbosity ghcProgram (runnerProgramDb senv) - let ghc_args = runnerGhcArgs senv ++ ["--interactive", "-v0", "-ignore-dot-ghci"] + let ghc_args = runnerGhcArgs senv Nothing ++ ["--interactive", "-v0", "-ignore-dot-ghci"] proc_spec = (proc (programPath prog) ghc_args) { create_group = True, -- Closing fds is VERY important to avoid diff --git a/cabal-testsuite/static/Main.hs b/cabal-testsuite/static/Main.hs index de106fe48f9..d82a4bd93b7 100644 --- a/cabal-testsuite/static/Main.hs +++ b/cabal-testsuite/static/Main.hs @@ -1,3 +1,4 @@ module Main where +main :: IO () main = return () diff --git a/cabal.bootstrap.project b/cabal.bootstrap.project new file mode 100644 index 00000000000..845a3fca7fd --- /dev/null +++ b/cabal.bootstrap.project @@ -0,0 +1,12 @@ +packages: + Cabal + , Cabal-syntax + , Cabal-hooks + , cabal-install + , cabal-install-solver + +-- Don't include tests or benchmarks for bootstrapping +tests: False +benchmarks: False + +index-state: hackage.haskell.org 2024-04-22T06:16:57Z diff --git a/cabal.project.meta b/cabal.meta.project similarity index 59% rename from cabal.project.meta rename to cabal.meta.project index 304b2a50e58..99eaaa54359 100644 --- a/cabal.project.meta +++ b/cabal.meta.project @@ -1,2 +1 @@ packages: cabal-dev-scripts -optional-packages: diff --git a/cabal.project b/cabal.project index d506fe9b117..e368c280c99 100644 --- a/cabal.project +++ b/cabal.project @@ -1,25 +1,6 @@ -import: cabal.project.latest-ghc - -packages: Cabal/ -packages: cabal-testsuite/ -packages: Cabal-syntax/ -packages: cabal-install/ -packages: cabal-install-solver/ -packages: solver-benchmarks/ +import: project-cabal/ghc-options.config +import: project-cabal/ghc-latest.config +import: project-cabal/pkgs.config +import: project-cabal/constraints.config tests: True - -packages: Cabal-QuickCheck/ -packages: Cabal-tree-diff/ -packages: Cabal-described -packages: Cabal-tests/ -packages: cabal-benchmarks/ - -optional-packages: ./vendored/*/*.cabal - --- avoiding extra dependencies -constraints: rere -rere-cfg -constraints: these -assoc - -program-options - ghc-options: -fno-ignore-asserts diff --git a/cabal.project.buildinfo b/cabal.project.buildinfo deleted file mode 100644 index 839f35c5805..00000000000 --- a/cabal.project.buildinfo +++ /dev/null @@ -1,10 +0,0 @@ -packages: Cabal-syntax/ -packages: Cabal/ -packages: Cabal-described -packages: buildinfo-reference-generator/ -tests: False -optimization: False - --- avoiding extra dependencies -constraints: rere -rere-cfg -constraints: these -assoc diff --git a/cabal.project.doctest b/cabal.project.doctest deleted file mode 100644 index dac9b0d88a9..00000000000 --- a/cabal.project.doctest +++ /dev/null @@ -1,24 +0,0 @@ -packages: Cabal-syntax/ -packages: Cabal/ -packages: cabal-testsuite/ -packages: cabal-install/ -packages: solver-benchmarks/ - -packages: cabal-install-solver/ -packages: Cabal-QuickCheck/ -packages: Cabal-tree-diff -packages: Cabal-described -packages: Cabal-tests -packages: cabal-benchmarks - -tests: True - --- avoiding extra dependencies -constraints: rere -rere-cfg -constraints: these -assoc - -write-ghc-environment-files: never - -program-options - ghc-options: -fno-ignore-asserts - diff --git a/cabal.project.latest-ghc b/cabal.project.latest-ghc deleted file mode 100644 index 5132415b48c..00000000000 --- a/cabal.project.latest-ghc +++ /dev/null @@ -1,12 +0,0 @@ --- Usually, the latest GHC requires a few allow-newer's --- for some time after the release. This project file is meant to host these. --- The file is supposed to be included in the main project files used for --- Cabal development: --- - cabal.project (day-to-day development), --- - cabal.project.validate (Cabal CI), --- Commented out below are the usual suspects. Feel free to add more. - --- NOTE: don't forget to update the compiler version in the conditional --- when upgrading to a newer GHC -if impl(ghc >= 9.8.1) - -- allow-newer: windns:* diff --git a/cabal.project.libonly b/cabal.project.libonly deleted file mode 100644 index 59873fd4ad1..00000000000 --- a/cabal.project.libonly +++ /dev/null @@ -1,14 +0,0 @@ -packages: Cabal-syntax/ Cabal/ cabal-testsuite/ - -packages: Cabal-QuickCheck/ -packages: Cabal-tree-diff -packages: Cabal-described -packages: Cabal-tests - -tests: True - --- Uncomment to allow picking up extra local unpacked deps: ---optional-packages: */ - -program-options - ghc-options: -fno-ignore-asserts diff --git a/cabal.project.release b/cabal.project.release deleted file mode 100644 index 5bcfdbc389d..00000000000 --- a/cabal.project.release +++ /dev/null @@ -1,8 +0,0 @@ -packages: Cabal-syntax/ -packages: Cabal/ -packages: cabal-install-solver/ -packages: cabal-install/ -tests: False -benchmarks: False -optimization: True -index-state: hackage.haskell.org 2024-02-13T10:16:13Z diff --git a/cabal.project.validate b/cabal.project.validate deleted file mode 100644 index d3583c31b0e..00000000000 --- a/cabal.project.validate +++ /dev/null @@ -1,34 +0,0 @@ -import: cabal.project.latest-ghc - -packages: Cabal-syntax/ -packages: Cabal/ -packages: cabal-testsuite/ -packages: cabal-install/ -packages: solver-benchmarks/ - -packages: cabal-install-solver/ -packages: Cabal-QuickCheck/ -packages: Cabal-tree-diff -packages: Cabal-described -packages: Cabal-tests -packages: cabal-benchmarks - -tests: True - --- avoiding extra dependencies -constraints: rere -rere-cfg -constraints: these -assoc - -write-ghc-environment-files: never - -program-options - ghc-options: -fno-ignore-asserts - -package Cabal-syntax - ghc-options: -Werror -package Cabal - ghc-options: -Werror -package cabal-testsuite - ghc-options: -Werror -package cabal-install - ghc-options: -Werror diff --git a/cabal.project.validate.libonly b/cabal.project.validate.libonly deleted file mode 100644 index 3baafa1661a..00000000000 --- a/cabal.project.validate.libonly +++ /dev/null @@ -1,28 +0,0 @@ -packages: Cabal-syntax/ -packages: Cabal/ -packages: cabal-testsuite/ -packages: Cabal-QuickCheck/ -packages: Cabal-tree-diff -packages: Cabal-described -packages: Cabal-tests - -tests: True - -write-ghc-environment-files: never - --- avoiding extra dependencies -constraints: rere -rere-cfg -constraints: these -assoc - -program-options - ghc-options: -fno-ignore-asserts - -package Cabal-syntax - ghc-options: -Werror -package Cabal - ghc-options: -Werror -package cabal-testsuite - ghc-options: -Werror - --- https://github.com/haskell-hvr/cryptohash-sha256/issues/12 -allow-newer: cryptohash-sha256:base diff --git a/cabal.project.weeder b/cabal.project.weeder deleted file mode 100644 index 5fa8357bd6a..00000000000 --- a/cabal.project.weeder +++ /dev/null @@ -1,15 +0,0 @@ --- project file for weeder. Only Cabal and cabal install --- install weeder with --- --- cabal install -w ghc-8.8.3 weeder --- - -packages: Cabal-syntax/ -packages: Cabal/ -packages: cabal-install/ -tests: False - -with-compiler: ghc-8.8.3 - -package * - ghc-options: -fwrite-ide-info diff --git a/cabal.release.project b/cabal.release.project new file mode 100644 index 00000000000..3d73d2f19a1 --- /dev/null +++ b/cabal.release.project @@ -0,0 +1,5 @@ +import: project-cabal/pkgs/cabal.config +import: project-cabal/pkgs/install.config +import: project-cabal/pkgs/tests.config + +index-state: hackage.haskell.org 2024-04-22T06:16:57Z diff --git a/cabal.validate-libonly.project b/cabal.validate-libonly.project new file mode 100644 index 00000000000..7c5bd38ab6b --- /dev/null +++ b/cabal.validate-libonly.project @@ -0,0 +1,8 @@ +import: project-cabal/ghc-options.config +import: project-cabal/pkgs/cabal.config +import: project-cabal/pkgs/tests.config +import: project-cabal/pkgs/integration-tests.config +import: project-cabal/constraints.config + +tests: True +write-ghc-environment-files: never diff --git a/cabal.validate.project b/cabal.validate.project new file mode 100644 index 00000000000..52c78411107 --- /dev/null +++ b/cabal.validate.project @@ -0,0 +1,9 @@ +import: project-cabal/ghc-options.config +import: project-cabal/ghc-latest.config +import: project-cabal/pkgs.config +import: project-cabal/constraints.config + +tests: True +write-ghc-environment-files: never +program-options + ghc-options: -Werror diff --git a/changelog.d/base16-script-cache b/changelog.d/base16-script-cache deleted file mode 100644 index a2473271635..00000000000 --- a/changelog.d/base16-script-cache +++ /dev/null @@ -1,9 +0,0 @@ -synopsis: Script cache dir is the base16 hash of the canonical path of the script. -prs: #9459 -packages: cabal-install - -description: { - -Script cache dir is the base16 hash of the canonical path of the script. - -} diff --git a/changelog.d/config b/changelog.d/config index c78b5f5e3f3..f4f1b9e5f57 100644 --- a/changelog.d/config +++ b/changelog.d/config @@ -1,2 +1,3 @@ organization: haskell repository: cabal +required-fields: packages prs diff --git a/changelog.d/die-on-missing-pkg-list b/changelog.d/die-on-missing-pkg-list deleted file mode 100644 index 78e25843197..00000000000 --- a/changelog.d/die-on-missing-pkg-list +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Die if package list is missing -packages: cabal-install -prs: #8944 - -description: { - -If a package list is missing, `cabal` will now die and suggest the user to run -`cabal update` instead of continuing into not being able to find packages coming -from the remote package server. - -} diff --git a/changelog.d/inconsistent-indentation b/changelog.d/inconsistent-indentation deleted file mode 100644 index 0cceee639a1..00000000000 --- a/changelog.d/inconsistent-indentation +++ /dev/null @@ -1,23 +0,0 @@ -synopsis: Warn about inconsistent indentation -packages: Cabal-syntax -prs: #8975 - -description: - Make Cabal warn about inconsistent indentation in .cabal files. - - For example warn about somewhat common decreasing indentation like in - - ```cabal - library - default-language: Haskell2010 - build-depends: base - ghc-options: -Wall - ``` - - The change is `readFields` function. - - This is an effect of using `indentOfAtLeast` method/approach: any indentation greater than current offset is accepted. - - That behavior is desirable to parsing multiline field contents, but it is a bit surprising for fields in sections, which we expect to be aligned. - - Such insonsistency seems to be always a mistake, and it's easy to fix once a machine points it out. diff --git a/changelog.d/index-state-cabal-update b/changelog.d/index-state-cabal-update deleted file mode 100644 index f40ae672709..00000000000 --- a/changelog.d/index-state-cabal-update +++ /dev/null @@ -1,14 +0,0 @@ -synopsis: Reject index-state younger than cached index file -packages: cabal-install -prs: #8944 - -description: { - -Requesting to use an index-state younger than the cached version will now fail, -telling the user to use an index-state older or equal to the cached file, or to -run `cabal update`. - -The warning for a non-existing index-state has been also demoted to appear only -on verbose logging. - -} diff --git a/changelog.d/issue-10042 b/changelog.d/issue-10042 new file mode 100644 index 00000000000..e254210c028 --- /dev/null +++ b/changelog.d/issue-10042 @@ -0,0 +1,9 @@ +synopsis: Don't recommend deprecated/removed 'extensions:' field +packages: Cabal +prs: #10044 +issues: #10042 + +description: { + When applicable, field 'default-extensions:' is recommended (rather than + deprecated/removed 'extensions:'). +} diff --git a/changelog.d/issue-5993 b/changelog.d/issue-5993 deleted file mode 100644 index 47580dd57cb..00000000000 --- a/changelog.d/issue-5993 +++ /dev/null @@ -1,9 +0,0 @@ -synopsis: Warn early that overwrite policy is needed -description: - Waiting for a long build and then seeing the install fail because a flag was - missing is frustrating. With this change we skip the wait and warn early, - before the build, that an overwrite policy flag would be needed for the - install to succeed. -packages: cabal-install -prs: #9268 -issues: #5993 diff --git a/changelog.d/issue-6738 b/changelog.d/issue-6738 deleted file mode 100644 index d2bf4053756..00000000000 --- a/changelog.d/issue-6738 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Add support for authentication tokens for uploading to Hackage -packages: cabal-install -prs: #9058 -issues: #6738 - -description: { - -A new flag `--token` (`-t`) has been created. Token authentication takes -precedence over username and password meaning that, if a token is set, -the username and password flags are ignored. - -} \ No newline at end of file diff --git a/changelog.d/issue-6750 b/changelog.d/issue-6750 new file mode 100644 index 00000000000..e392258267b --- /dev/null +++ b/changelog.d/issue-6750 @@ -0,0 +1,13 @@ +synopsis: Make Setup copy/install succeed when there's no executable or library +packages: Cabal +prs: #9926 +issues: #6750 + +description: { + Historically the Setup copy and install steps would fail if the package didn't + contain an executable or library component. In this case there's nothing to do. + + This required workarounds for downstream users of Cabal to handle this edge case. + Now that this error has been downgraded to a warning, Cabal will succeed if + there's nothing to do. +} diff --git a/changelog.d/issue-7817 b/changelog.d/issue-7817 deleted file mode 100644 index 78d18e8d31a..00000000000 --- a/changelog.d/issue-7817 +++ /dev/null @@ -1,15 +0,0 @@ -synopsis: Make --(test-)show-details=direct the default -packages: Cabal cabal-install -prs: #8942 - -description: { - -This option leaves it up to the testing framework to decide what and how to print out, -potentially leading to a prettier output. For example, most of the testing frameworks -use colors, which wouldn't be seen with any other option. - -This comes with a tradeoff, though: Cabal will not create a log file with this option. -If you prefer a log file, consider setting `--test-show-details=streaming` (or something -else) manually. - -} diff --git a/changelog.d/issue-8206 b/changelog.d/issue-8206 deleted file mode 100644 index 09292fd949b..00000000000 --- a/changelog.d/issue-8206 +++ /dev/null @@ -1,4 +0,0 @@ -synopsis: cabal init now generates cabal versions older than 1.12 with the correct >= syntax -packages: cabal-install -prs: #8860 -issues: #8206 diff --git a/changelog.d/issue-8270 b/changelog.d/issue-8270 deleted file mode 100644 index b26eec51d18..00000000000 --- a/changelog.d/issue-8270 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Add `--haddock-output-dir` flag to `cabal haddock`. -packages: Cabal cabal-install -prs: #8788 -issues: #8720 -significance: significant - -description: { - -- Added `--haddock-output-dir` flag to `cabal haddock`. This flag gives the user full control over the directory where the documentation is placed. It allows both relative and absolute paths. - -} diff --git a/changelog.d/issue-8639 b/changelog.d/issue-8639 deleted file mode 100644 index 18d8606c690..00000000000 --- a/changelog.d/issue-8639 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Add support for asm, cmm, and js sources in executable components -packages: Cabal -prs: #9061 -issues: #8639 -significance: significant - -description: { - -Executable components now support the inclusion of asm, cmm, and js source files in a cabal file using the same syntax as is used for these sources in library components, similar to how c and c++ sources are supported in both types of components. This syntax was already parsed in cabal files, but was silently ignored in the build step, so no changes to syntax are made. - -} - diff --git a/changelog.d/issue-8680 b/changelog.d/issue-8680 index 3c3604b2ca2..0511f26fe9d 100644 --- a/changelog.d/issue-8680 +++ b/changelog.d/issue-8680 @@ -1,6 +1,7 @@ synopsis: `cabal init` should not suggest Cabal < 2.0 packages: Cabal issues: #8680 +prs: #8700 description: { diff --git a/changelog.d/issue-8689 b/changelog.d/issue-8689 deleted file mode 100644 index c157bb9eca5..00000000000 --- a/changelog.d/issue-8689 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Make sure Haskell files in explicit source directories take precedence over autogenerated Haskell files -packages: cabal-install -prs: #8690 -issues: #8689 - -description: { - -- Changed order or directories in GHC invocation so that source - directories explicitly specified in cabal file will be considered - before Cabal’s internal build directory. - -} diff --git a/changelog.d/issue-8737 b/changelog.d/issue-8737 deleted file mode 100644 index 3bdabc28e7a..00000000000 --- a/changelog.d/issue-8737 +++ /dev/null @@ -1,4 +0,0 @@ -synopsis: Document `remote-repo-cache` as implemented. -packages: Cabal -issues: #8737 -prs: #8738 diff --git a/changelog.d/issue-8757 b/changelog.d/issue-8757 deleted file mode 100644 index 82a71c0f935..00000000000 --- a/changelog.d/issue-8757 +++ /dev/null @@ -1,4 +0,0 @@ -synopsis: `cabal init`: suggest BSD-3 as default license -packages: cabal-install -prs: #8764 -issues: #8757 diff --git a/changelog.d/issue-8785 b/changelog.d/issue-8785 deleted file mode 100644 index 47238ed20b6..00000000000 --- a/changelog.d/issue-8785 +++ /dev/null @@ -1,17 +0,0 @@ -synopsis: Also render short options with arguments -packages: cabal-install -prs: #9043 -issues: #8785 - -description: { - -Show how arguments are used with both short and long forms of options: - -```diff -< -v, --verbose[=n] Control verbosity (n is 0--3, default -> -v[n], --verbose[=n] Control verbosity (n is 0--3, default -< -w, --with-compiler=PATH give the path to a particular compiler -> -w PATH or -wPATH, --with-compiler=PATH -``` - -} diff --git a/changelog.d/issue-8835 b/changelog.d/issue-8835 deleted file mode 100644 index 587d4e34984..00000000000 --- a/changelog.d/issue-8835 +++ /dev/null @@ -1,6 +0,0 @@ -synopsis: config file: allow more flags in the init section -packages: cabal-install -prs: #8839 -issues: #8835 -description: The init section of config file now allows the following fields: -`no-comments`, `quiet`, `simple` and `minimal` diff --git a/changelog.d/issue-8875 b/changelog.d/issue-8875 new file mode 100644 index 00000000000..6642609a0e6 --- /dev/null +++ b/changelog.d/issue-8875 @@ -0,0 +1,10 @@ +synopsis: Allow whitespace in targets +packages: cabal-install +prs: #10032 +issues: #8875 + +description: { +Allow spaces in the final component of target selectors. This resolves an issue +where using absolute paths in selectors can fail if there is whitespace in the +parent directories of the project. +} diff --git a/changelog.d/issue-9098-lexbraces b/changelog.d/issue-9098-lexbraces index 19bb0bbee35..b637c08a34b 100644 --- a/changelog.d/issue-9098-lexbraces +++ b/changelog.d/issue-9098-lexbraces @@ -1,6 +1,7 @@ synopsis: Add LexBraces lexer warning packages: Cabal-syntax -issues: #8577 +issues: #9098 +prs: #9099 description: { diff --git a/changelog.d/issue-9113 b/changelog.d/issue-9113 deleted file mode 100644 index 8d108c1fba1..00000000000 --- a/changelog.d/issue-9113 +++ /dev/null @@ -1,13 +0,0 @@ -synopsis: Fix handling of ETag header for remote packages -packages: cabal-install -prs: #9116 -issues: #9113 - -description: { - -Remote packages will now be cached regardless of the capitalization of the -"ETag" header. Previously remote packages would not be cached if the header -name did not match exactly. Now they will be cached even if the header's -capitalization is different. - -} diff --git a/changelog.d/issue-9453 b/changelog.d/issue-9453 deleted file mode 100644 index 16e7a48fa86..00000000000 --- a/changelog.d/issue-9453 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Remove Distribution.Utils.TempTestDir module from Cabal library -packages: Cabal -prs: #9454 -issues: #9453 - -description: { - -This library was only used by internal tests, and now lives in the `Cabal-tests` library -which is shared across test components. - -} - diff --git a/changelog.d/issue-9534 b/changelog.d/issue-9534 deleted file mode 100644 index 3e7a887af71..00000000000 --- a/changelog.d/issue-9534 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Distinguish `powerpc64le`, by adding `PPC64LE` constructor to type `Arch` -packages: Cabal Cabal-syntax -prs: #9535 -issues: #9534 - -description: { - -Adds constructor `PPC64LE` to type `Arch` to distinguish architecture -powerpc64le from powerpc64. Existing constructor `PPC64` now exclusively -represents powerpc64. - -} diff --git a/changelog.d/issue-9641 b/changelog.d/issue-9641 new file mode 100644 index 00000000000..34666f0ad59 --- /dev/null +++ b/changelog.d/issue-9641 @@ -0,0 +1,8 @@ +synopsis: offline flag applied to `source-repository-package`s +packages: Cabal-install +prs: #9771 +issues: #9641 + +description: { +`--offline` flag is already used to block access to Hackage. Now with this PR, this also applies to remote dependency `source-repository-package` in `cabal.project`. +} diff --git a/changelog.d/issue-9678 b/changelog.d/issue-9678 index e1eda2b46e9..cdcf8405311 100644 --- a/changelog.d/issue-9678 +++ b/changelog.d/issue-9678 @@ -2,6 +2,7 @@ synopsis: Clarify the semantics of the -package-db flag packages: cabal-install prs: issues: #9678 +prs: #9683 description: { diff --git a/changelog.d/issue-9736 b/changelog.d/issue-9736 new file mode 100644 index 00000000000..f5a9dc1abee --- /dev/null +++ b/changelog.d/issue-9736 @@ -0,0 +1,12 @@ +synopsis: Add support for `GHC2024` +packages: Cabal cabal-install +issues: #9736 +prs: #9791 + +description: { + +Support for the `GHC2024` language edition, introduced by GHC 9.10, has been +added. It can now be used in the `default-language` and `other-languages` +fields, and will be offered as an option by `cabal init`. + +} diff --git a/changelog.d/issue-9919 b/changelog.d/issue-9919 new file mode 100644 index 00000000000..a4fe32bbdef --- /dev/null +++ b/changelog.d/issue-9919 @@ -0,0 +1,4 @@ +synopsis: Fix --program-suffix resulting in invalid installation +packages: cabal-install +issues: #8823 #9919 +prs: #10056 diff --git a/changelog.d/issue-9971 b/changelog.d/issue-9971 new file mode 100644 index 00000000000..9bfb2e4822f --- /dev/null +++ b/changelog.d/issue-9971 @@ -0,0 +1,6 @@ +synopsis: Renders project configuration provenance as a list of canonical paths +packages: cabal-install cabal-install-solver +prs: #9985 +issues: #9971 + +description: Removes interleaved rendering of project imports. diff --git a/changelog.d/pkgconfig-once b/changelog.d/pkgconfig-once index c3ac3ac47e0..bdb8e4b511b 100644 --- a/changelog.d/pkgconfig-once +++ b/changelog.d/pkgconfig-once @@ -1,5 +1,6 @@ synopsis: PkgConfig individual calls prs: #9134 +packages: cabal-install-solver description: { diff --git a/changelog.d/pr-8130 b/changelog.d/pr-8130 deleted file mode 100644 index 70acb4eb52b..00000000000 --- a/changelog.d/pr-8130 +++ /dev/null @@ -1,13 +0,0 @@ -synopsis: Split up `Distribution.Simple.Setup` -packages: Cabal -prs: #8130 - -description: { - -The external interface of 'Distribution.Simple.Setup' has been kept the same, but internally it has been broken up into smaller modules. -This improves build times in two ways: -1. GHC is superlinear in the size of files, meaning that splitting up a large file can reduce overall compile times. -2. Breaking up the module allows dependent modules to refine their imports to just the parts they require, allowing them to start buildling quicker -when GHC is run in parrallel make mode ('--ghc-options -j'). - -} diff --git a/changelog.d/pr-8427 b/changelog.d/pr-8427 deleted file mode 100644 index 402765942d6..00000000000 --- a/changelog.d/pr-8427 +++ /dev/null @@ -1,19 +0,0 @@ -synopsis: Reimplementing `cabal check` -packages: Cabal -prs: #8427 -issues: #7423 - -description: { - -- For `cabal-install` users: `cabal check` do not warn on -O2 or similar - options if under an off-by-default cabal flag. -- For `Cabal` the library users: `checkPackage` signature has been simplified, - you do not need to pass a specific configuration of the package, since - we do not flatten GenericPackageDescription no more. -- For `Cabal` the library users: `checkPackageFileNames` has been removed, - use `checkPackageFiles` instead. -- For `Cabal` the library users: `checkPackageFilesGPD` has been introduced, - a function similar to `checkPackageFiles` that works on - `GenericPackageDescription`. You do not need to use - `flattenPackageDescription` anymore. -} diff --git a/changelog.d/pr-8454 b/changelog.d/pr-8454 deleted file mode 100644 index 915caf61cc9..00000000000 --- a/changelog.d/pr-8454 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Add --project-dir flag -packages: cabal-install -prs: #8454 -issues: #7695 #7940 -significance: significant - -description: { - -- Added --project-dir flag for specifying the project's root directory -- Deprecated using --project-file with an absolute filepath without also using --project-dir - -} diff --git a/changelog.d/pr-8557 b/changelog.d/pr-8557 deleted file mode 100644 index f2f11d2eeac..00000000000 --- a/changelog.d/pr-8557 +++ /dev/null @@ -1,20 +0,0 @@ -synopsis: Add `--semaphore` flag to enable interaction with GHC Job Server protocol -packages: cabal-install -prs: #8557 - -description: { - -When cabal-install is passed the `--semaphore` flag it will now act as a job server -according to the GHC Jobserver Protocol. - -In particular this means that cabal-install will create a semaphore which it then -passes to `./Setup build` (and hence `ghc`) which can be used by `ghc` in order to -control how much paralellism it uses, coordinating with other simultaneously running -processes. - -This feature requires ghc-9.8 in order to use, as this is the first version of GHC -which implements the protocol. - -The protocol is specified by [GHC Proposal #540](https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0540-jsem.rst). - -} diff --git a/changelog.d/pr-8557-2 b/changelog.d/pr-8557-2 deleted file mode 100644 index c472f992c31..00000000000 --- a/changelog.d/pr-8557-2 +++ /dev/null @@ -1,16 +0,0 @@ -synopsis: Add --semaphore option to ./Setup build interface -packages: Cabal -prs: #8557 - -description: { - -When `./Setup build --semaphore ` is called, `ghc` will be called with the -`-jsem` option. It is the responsibility of the caller of `./Setup build` to -manage the semaphore according to the GHC Jobserver Protocol. - -This low level interface is intended to be called by a high-level tool such as -`cabal-install` which can create and manage the semaphore appropriately. - -The protocol is specified by [GHC Proposal #540](https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0540-jsem.rst). - -} diff --git a/changelog.d/pr-8662 b/changelog.d/pr-8662 deleted file mode 100644 index bfe0512c6f4..00000000000 --- a/changelog.d/pr-8662 +++ /dev/null @@ -1,9 +0,0 @@ -synopsis: Installation of extra-compilation-artifacts directory -packages: Cabal -prs: #8662 -issues: -description: { - -- GHC plugins now can store custom data in the 'extra-compilation-artifacts' directory which gets installed with the package. - -} diff --git a/changelog.d/pr-8676 b/changelog.d/pr-8676 deleted file mode 100644 index 511a04569e6..00000000000 --- a/changelog.d/pr-8676 +++ /dev/null @@ -1,8 +0,0 @@ -synopsis: Adds functionality for the --offline flag with the "build" command. -packages: cabal-install -prs: #8676 - -description: { - The --offline flag previously created in #2578 but was only implemented for the install command even thought the flag didn't throw an error whenever the build command was run. This PR adds functionality for the --offline flag with the build command. -Additionally there is a new PackageTest for the flag using the build command. -} diff --git a/changelog.d/pr-8709 b/changelog.d/pr-8709 deleted file mode 100644 index f8f31edc269..00000000000 --- a/changelog.d/pr-8709 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Add warning for running cabal run, cabal test and cabal bench with +RTS flag -packages: cabal-install -prs: #8709 - -description: { - -This adds a warning when RTS options are passed to cabal instead of the binary -for the commands 'run', 'bench' and 'test', as most users want to pass these -options to their binary. - -} diff --git a/changelog.d/pr-8726 b/changelog.d/pr-8726 deleted file mode 100644 index fa9975a33bb..00000000000 --- a/changelog.d/pr-8726 +++ /dev/null @@ -1,18 +0,0 @@ -synopsis: Add support for loading multiple components into one repl session -packages: cabal-install -prs: #8726 #8238 #8491 - -description: { - -The `repl` command is extended in order to allow starting a repl session with -multiple local components. When a user specifies a target to the "repl" command -which resolves to multiple local components then `cabal` will start a repl session -which loads them all into a single GHC session if the multi-repl is enabled. - -The multi-repl can be enabled by passing `--enable-multi-repl`, or writing `multi-repl: True` in -your cabal.project file. - -The feature is fully explained in [this blog post](https://well-typed.com/blog/2023/03/cabal-multi-unit/). - - -} diff --git a/changelog.d/pr-8726-2 b/changelog.d/pr-8726-2 deleted file mode 100644 index d59a8ac4dc2..00000000000 --- a/changelog.d/pr-8726-2 +++ /dev/null @@ -1,24 +0,0 @@ -synopsis: Add --promised-dependency flag to ./Setup configure interface -packages: Cabal -prs: #8726 - -description: { - -There is a new flag `--promised-dependency` to allow users to -configure a package *without* having previously built the dependency. -Instead, we promise to the configure phase that we will have built it -by the time we build the package. This allows us to configure all the -packages we intend to load into the repl without building any -dependenices which we will load in the same session, because the -promise is satisifed due to loading the package and it's dependency -into one multi-session which ensures the dependency is built before -it is needed. - -A user of ./Setup configure specifies a promised dependency by -using the "--promised-dependency" flag with a normal dependency specification. For example: - -``` - '--promised-dependency=cabal-install-solver=cabal-install-solver-3.9.0.0-inplace' -``` - -} diff --git a/changelog.d/pr-8726-3 b/changelog.d/pr-8726-3 deleted file mode 100644 index 337ad29909e..00000000000 --- a/changelog.d/pr-8726-3 +++ /dev/null @@ -1,16 +0,0 @@ -synopsis: Add option to ./Setup repl to write repl arguments to file -packages: Cabal -prs: #8726 - -description: { - -The `./Setup repl` command is modified to allow a user to defer -starting the repl and instead instruct the command to write the -necessary build flags to a directiory. The option is called -`--repl-multi-file `. - -This is useful when starting multi-component sessions as we want to query Setup.hs -for the arguments which are needed to build each component but not for ./Setup to -start the repl itself. - -} diff --git a/changelog.d/pr-8728 b/changelog.d/pr-8728 deleted file mode 100644 index 8d9b9d14047..00000000000 --- a/changelog.d/pr-8728 +++ /dev/null @@ -1,3 +0,0 @@ -synopsis: Deduplicate LD_LIBRARY_PATH when running tests -packages: Cabal -prs: #8728 diff --git a/changelog.d/pr-8854 b/changelog.d/pr-8854 deleted file mode 100644 index 8b77d09d3ed..00000000000 --- a/changelog.d/pr-8854 +++ /dev/null @@ -1,9 +0,0 @@ -synopsis: Add language extension ListTuplePuns -packages: Cabal-syntax -prs: #8854 - -description: { - -- adds support for the `ListTuplePuns` language extension (GHC proposal #475) - -} diff --git a/changelog.d/pr-8879 b/changelog.d/pr-8879 deleted file mode 100644 index 079d642289b..00000000000 --- a/changelog.d/pr-8879 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: Add `cabal path` command -packages: cabal-install -prs: #8879 - -description: { - -The `cabal path` command prints the file system paths used by Cabal. -It is intended for use by tooling that needs to read or modify Cabal -data, such that it does not need to replicate the complicated logic -for respecting `CABAL_DIR`, `CABAL_CONFIG`, etc. - -} diff --git a/changelog.d/pr-8897 b/changelog.d/pr-8897 deleted file mode 100644 index a89023dc416..00000000000 --- a/changelog.d/pr-8897 +++ /dev/null @@ -1,14 +0,0 @@ -synopsis: Make check comply with Hackage requirements -packages: Cabal cabal-install -prs: #8897 - -description: { - -- `cabal check` will only return exitcode 1 when the package is not fit - for Hackage. E.g. it will not error anymore when your `synopsis:` is - larger than `description:`, just emit a warning. -- Cabal: Distribution.Client.Check now exports `isHackageDistError`, for - third-party tools to know if a specific error will preclude a package - from being uploaded to Hacakge. - -} diff --git a/changelog.d/pr-8908 b/changelog.d/pr-8908 deleted file mode 100644 index 420248944a4..00000000000 --- a/changelog.d/pr-8908 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: `cabal check`: clearly mark Errors -packages: cabal-install -prs: #8908 - -description: { - -- `cabal check` will now mark errors (which make the program return 1 and - Hackage refuse the package) by prepending them with an "Error: " string - in the output. - -} diff --git a/changelog.d/pr-8949 b/changelog.d/pr-8949 deleted file mode 100644 index cbd0859a6eb..00000000000 --- a/changelog.d/pr-8949 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Warn when project configuration options are going to be ignored. -packages: cabal-install -prs: #8949 - -description: { - -Some project configuration options can only be specified from the command line. -If the user specified those options from a project file, cabal-install would -silently ignore them. Now cabal-install will emit a warning. - -} diff --git a/changelog.d/pr-8972 b/changelog.d/pr-8972 deleted file mode 100644 index 04e300ea12e..00000000000 --- a/changelog.d/pr-8972 +++ /dev/null @@ -1,9 +0,0 @@ -synopsis: Fix precedence for PATH for build-tools-depends -packages: Cabal cabal-install -prs: #8972 - -description: { - -- fixes a bug introduced in #8506 that caused executables in the path to take precedence over those specified in build-tools-depends. - -} diff --git a/changelog.d/pr-8992 b/changelog.d/pr-8992 deleted file mode 100644 index ef74800c430..00000000000 --- a/changelog.d/pr-8992 +++ /dev/null @@ -1,10 +0,0 @@ -synopsis: Add language extension ExtendedLiterals -packages: Cabal-syntax -prs: #8992 -significance: significant - -description: { - -- adds support for the ExtendedLiterals language extension (GHC proposal #451) - -} diff --git a/changelog.d/pr-9006 b/changelog.d/pr-9006 deleted file mode 100644 index 905a962e646..00000000000 --- a/changelog.d/pr-9006 +++ /dev/null @@ -1,10 +0,0 @@ -synopsis: Add Haiku as a known platform -packages: Cabal -prs: #9006 - -description: { - -- Cabal: Distribution now recognises Haiku as a valid platform, - and also implements Haiku's unique directory layout. - -} diff --git a/changelog.d/pr-9007 b/changelog.d/pr-9007 deleted file mode 100644 index 0fa699b8344..00000000000 --- a/changelog.d/pr-9007 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Generate cabal-testsuite modules at configure time -packages: cabal-testsuite -prs: #9007 - -description: { - -Generate modules required by cabal-testsuite at configure time rather than build time. -This allows to run `cabal repl cabal-testsuite` out of the box. -In addition, enables HLS support for `cabal-testsuite`. - -} diff --git a/changelog.d/pr-9018 b/changelog.d/pr-9018 deleted file mode 100644 index b823fc4c33a..00000000000 --- a/changelog.d/pr-9018 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Structured Errors and Error Codes for Cabal -packages: cabal -prs: #9018 -issues: #8618 #8543 - - -description: { - -This will replace the `die'` function with `dieWithException` function which will throw structured errors rather than mere strings and also assign codes to corresponding errors that can be added to the error index. - -} diff --git a/changelog.d/pr-9019 b/changelog.d/pr-9019 deleted file mode 100644 index 22dc3723671..00000000000 --- a/changelog.d/pr-9019 +++ /dev/null @@ -1,9 +0,0 @@ -synopsis: Installation of .hie files -packages: Cabal -prs: #9019 -issues: #8685 -description: { - -- Hie files generated by GHC are now stored in the `extra-compilation-artifacts` directory which gets installed with the package. - -} diff --git a/changelog.d/pr-9034 b/changelog.d/pr-9034 deleted file mode 100644 index 1aae63bb2ab..00000000000 --- a/changelog.d/pr-9034 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Add `mkVersionIntervals` for creating a `VersionIntervals` from a list -packages: Cabal-syntax -prs: #9034 - -description: { - -If external tools want to change the version intervals of dependencies, they -need to be able to create a `VersionRange` from a `[VersionInterval]` list. Adding -the function `mkVersionIntervals` makes this possible again. - -} diff --git a/changelog.d/pr-9062 b/changelog.d/pr-9062 deleted file mode 100644 index 1cd4ad3e6e4..00000000000 --- a/changelog.d/pr-9062 +++ /dev/null @@ -1,3 +0,0 @@ -synopsis: Add support for the 64-bit RISC-V architecture -prs: #9062 -packages: Cabal Cabal-syntax diff --git a/changelog.d/pr-9123 b/changelog.d/pr-9123 deleted file mode 100644 index 17b3b2031c6..00000000000 --- a/changelog.d/pr-9123 +++ /dev/null @@ -1,8 +0,0 @@ -synopsis: Remove --cabal-file flags from v2 commands -packages: cabal-install -prs: #9123 -issues: #8395 #7225 #6880 -description: { - The --cabal-file flag was never meant for public use but only for testing. To - avoid confusing the users any further we removed the flag from v2 commands. -} diff --git a/changelog.d/pr-9155 b/changelog.d/pr-9155 deleted file mode 100644 index db9557feca8..00000000000 --- a/changelog.d/pr-9155 +++ /dev/null @@ -1,4 +0,0 @@ -synopsis: Do not ask overwrite permissions on blank project -packages: cabal-install -prs: #9155 -issues: #9150 diff --git a/changelog.d/pr-9215 b/changelog.d/pr-9215 deleted file mode 100644 index 3e8b1159f25..00000000000 --- a/changelog.d/pr-9215 +++ /dev/null @@ -1,3 +0,0 @@ -synopsis: Add support for 64-bit LoongArch architecture -prs: #9215 -packages: Cabal Cabal-syntax diff --git a/changelog.d/pr-9326 b/changelog.d/pr-9326 deleted file mode 100644 index 33350cd86f0..00000000000 --- a/changelog.d/pr-9326 +++ /dev/null @@ -1,10 +0,0 @@ -synopsis: Include the GHC "Project Unit Id" in the cabal store path -packages: Cabal cabal-install -prs: #9326 -issues: #8114 -description: { -- This allows the use of several **API incompatible builds of the same version - of GHC** without corrupting the cabal store. -- This relies on the "Project Unit Id" which is available since GHC 9.8.1, - older versions of GHC do not benefit from this change. -} diff --git a/changelog.d/pr-9332 b/changelog.d/pr-9332 deleted file mode 100644 index c2851a647d4..00000000000 --- a/changelog.d/pr-9332 +++ /dev/null @@ -1,4 +0,0 @@ -synopsis: Don't report `index.html` file as created, if not created by Haddock -packages: Cabal cabal-install -prs: #9332 -issues: #5120 diff --git a/changelog.d/pr-9346 b/changelog.d/pr-9346 deleted file mode 100644 index 3f31da43837..00000000000 --- a/changelog.d/pr-9346 +++ /dev/null @@ -1,12 +0,0 @@ -synopsis: remove -packages: cabal-install -prs: #9346 -issues: #9151 -significance: significant - -description: { - -- Remove "Log" as a log level in favour of "Info". -- Remove "Show" in Severity and replace by "displaySeverity" function - -} diff --git a/changelog.d/pr-9376 b/changelog.d/pr-9376 deleted file mode 100644 index d85dc9bf49a..00000000000 --- a/changelog.d/pr-9376 +++ /dev/null @@ -1,6 +0,0 @@ -synopsis: Avoid a double space in "Executing install plan ..." -description: - The "Executing·install·plan··serially" and other similar "Executing install - plan··..." outputs no longer contain double spaces. -packages: cabal-install -prs: #9376 \ No newline at end of file diff --git a/changelog.d/pr-9434 b/changelog.d/pr-9434 deleted file mode 100644 index a7872ea3fb3..00000000000 --- a/changelog.d/pr-9434 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Fix the platform string for GNU/Hurd -packages: Cabal -prs: #9434 - -description: { - -Depending who you ask, GNU/Hurd will be labelled "gnu" or "hurd". The autotools -use "gnu", so ghc follows this for installed files, even if the ghc source code -uses OSHurd. We thus need to add the translation between the two. - -} diff --git a/changelog.d/pr-9441 b/changelog.d/pr-9441 deleted file mode 100644 index c47ea10da13..00000000000 --- a/changelog.d/pr-9441 +++ /dev/null @@ -1,3 +0,0 @@ -synopsis: Enable using $ORIGIN in RPATH on GNU/Hurd -packages: Cabal -prs: #9441 diff --git a/changelog.d/pr-9443 b/changelog.d/pr-9443 deleted file mode 100644 index 353f1fb8cbd..00000000000 --- a/changelog.d/pr-9443 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Use linker capability detection to improve linker use -packages: Cabal -prs: #9443 - -description: { - -- Previously the GHC version number and platform were used as a proxy for whether - the linker can generate relocatable objects. -- Now, the ability of the linker to create relocatable objects is detected. - -} diff --git a/changelog.d/pr-9445 b/changelog.d/pr-9445 deleted file mode 100644 index 37f024ea060..00000000000 --- a/changelog.d/pr-9445 +++ /dev/null @@ -1,3 +0,0 @@ -synopsis: Add support for 64-bit SPARC as a separate architecture -prs: #9445 -packages: Cabal Cabal-syntax diff --git a/changelog.d/pr-9464 b/changelog.d/pr-9464 deleted file mode 100644 index f1fe8b186f8..00000000000 --- a/changelog.d/pr-9464 +++ /dev/null @@ -1,22 +0,0 @@ -synopsis: Support per-component builds when coverage is enabled -packages: Cabal cabal-install -prs: #9464 -issues: #4798 #5213 #6440 #6397 -significance: significant - -description: { - -Cabal now supports per-component builds when coverage is enabled. This enables -coverage for packages with internal libraries (#6440), and enables coverage for -packages that use backpack (#6397), even though we do not get coverage for -instantiations of an indefinite module (it is not clear what it means for HPC -to support backpack, regardless of Cabal). - -To achieve this, hpc information (`.mix` files) from a library is now written -into the package database of a library under `extraCompilationArtifacts`. - -Cabal configure (via the Setup interface) now accepts --coverage-for=, -a flag which specifies which libraries should be included in the coverage -report for some testsuite. - -} diff --git a/changelog.d/pr-9481 b/changelog.d/pr-9481 deleted file mode 100644 index 5572ad56eab..00000000000 --- a/changelog.d/pr-9481 +++ /dev/null @@ -1,13 +0,0 @@ -synopsis: Guard PackageInfo_* modules behind `cabal-version` ≥ 3.12 -packages: Cabal cabal-install -prs: #9481 -issues: #9331 - -description: { - -`cabal check` now warns whenever PackageInfo_* autogen modules are -used with `cabal-version` ≥ 3.12. -Additionally, `cabal configure` will fail if you try to use PackageInfo_* -with `cabal-version` < 3.12. - -} diff --git a/changelog.d/pr-9502 b/changelog.d/pr-9502 deleted file mode 100644 index 12e5cc0e47d..00000000000 --- a/changelog.d/pr-9502 +++ /dev/null @@ -1,11 +0,0 @@ -synopsis: Add language extension `TypeAbstractions` -packages: Cabal-syntax -prs: #9502 -issues: #9496 - -description: { - -- Adds support for the TypeAbstractions language extension. - -} - diff --git a/changelog.d/pr-9560 b/changelog.d/pr-9560 deleted file mode 100644 index 9f6ce9a4133..00000000000 --- a/changelog.d/pr-9560 +++ /dev/null @@ -1,22 +0,0 @@ -synopsis: Shorten solver rejection messages by removing repetition -packages: cabal-install-solver -prs: #9560 -issues: #9559 #4251 - -description: { - -As before, we show a single rejection as hyphenated package-version. - -For multiple rejections, we show a list of versions preceded by package -semicolon, a much shorter rendering of the same information. - -```diff -- [__0] rejecting: pandoc-3.1.8, pandoc-3.1.7, pandoc-3.1.6.2, pandoc-3.1.6.1, -- pandoc-3.1.6, pandoc-3.1.5, pandoc-3.1.4, pandoc-3.1.3, pandoc-3.1.2, -- pandoc-3.1.1, pandoc-3.1, pandoc-3.0.1, pandoc-3.0, pandoc-2.19.2, -- pandoc-2.19.1, pandoc-2.19, pandoc-2.18, pandoc-2.17.1.1, pandoc-2.17.1, -+ [__0] rejecting: pandoc; 3.1.8, 3.1.7, 3.1.6.2, 3.1.6.1, 3.1.6, 3.1.5, 3.1.4, -+ 3.1.3, 3.1.2, 3.1.1, 3.1, 3.0.1, 3.0, 2.19.2, 2.19.1, 2.19, 2.18, 2.17.1.1, -``` - -} \ No newline at end of file diff --git a/changelog.d/pr-9673 b/changelog.d/pr-9673 deleted file mode 100644 index c14776b0db9..00000000000 --- a/changelog.d/pr-9673 +++ /dev/null @@ -1,19 +0,0 @@ -synopsis: Merge globbing implementations -packages: Cabal cabal-install -prs: #9673 -issues: #5349 - -description: { - -The common aspects of the globbing functionality between `Cabal` and -`cabal-install` have been factored out. The only change in the user-facing API -is that we now record when a glob does not match exactly, but matches a -directory with that same name, with the new constructor `GlobMatchesDirectory` -of `GlobResult`. - -To illustrate, this change means that when `foo/dir` is a directory, the glob -`*/dir/` matches exactly `foo/dir` (as before), but now -`*/dir` produces `GlobMatchesDirectory` instead of failing. -This allows callers to decide whether to allow or discard such inexact matches. - -} diff --git a/changelog.d/pr-9766 b/changelog.d/pr-9766 new file mode 100644 index 00000000000..3d10abb659f --- /dev/null +++ b/changelog.d/pr-9766 @@ -0,0 +1,11 @@ +synopsis: Warn on missing `default-language` +packages: Cabalcabal-install +prs: #9766 +issues: #9620 + +description: { + +- To help the adoption of GHC language editions, `cabal check` will now + warn about missing `default-language`. + +} diff --git a/changelog.d/pr-9824 b/changelog.d/pr-9824 new file mode 100644 index 00000000000..168b9c98e64 --- /dev/null +++ b/changelog.d/pr-9824 @@ -0,0 +1,10 @@ +synopsis: Abbrevate solver rejection messages with installed versions +packages: cabal-install-solver +prs: #9824 +issues: #9823 + +description: { + +Abbreviate solver rejection messages even in the presence of installed versions. + +} diff --git a/changelog.d/pr-9950 b/changelog.d/pr-9950 new file mode 100644 index 00000000000..a961c953639 --- /dev/null +++ b/changelog.d/pr-9950 @@ -0,0 +1,21 @@ +synopsis: Re-instate `initialBuildSteps` +packages: Cabal +issues: #9856 +prs: #9950 + +description: { + +The `initialBuildSteps` function from `Distribution.Simple.Build`, which had +been hastily removed, has been reinstated. + +It now comes with a deprecation warning: calling that function does not suffice +to prepare the sources for a package, as there are other steps that one might +also need to perform: + + - running pre-processors (such as alex/happy) + - running pre-build hooks or custom logic + (in build-type: Hooks or build-type: Custom or Configure) + +Consumers wanting to prepare the sources of a package, e.g. in order to launch a +REPL session, are advised to run `setup repl --repl-multi-file=` instead. +} diff --git a/changelog.d/pr-check-ignore b/changelog.d/pr-check-ignore deleted file mode 100644 index 240a03f989b..00000000000 --- a/changelog.d/pr-check-ignore +++ /dev/null @@ -1,18 +0,0 @@ -synopsis: Add `--ignore` to `cabal check` -packages: Cabal cabal-check -prs: #9442 -issues: #8587 - -description: { - -- `cabal check` now ignores specific warnings with `--ignore`. E.g. - `--ignore=missing-upper-bounds` will not display “Missing upper - bounds” warnings. -- `cabal check` output now prints the warning identifier too - (like `[no-category]`). -- `Distribution.PackageDescription.Check.Warning` now exports - `filterPackageChecksById`, this can be used by third-party - tools to filter warnings. - -} - diff --git a/doc/README.md b/doc/README.md index c3b25787ce6..871ae85d068 100644 --- a/doc/README.md +++ b/doc/README.md @@ -11,48 +11,34 @@ http://cabal.readthedocs.io/ ### How to build it -Building the documentation requires Python 3 and PIP. Run the following command either from the root of the cabal repository or from the `docs/` subdirectory: +Building the documentation requires Python 3, PIP, and `pip-tools` (see the second note below for how to install it). Run the following command either from the root of the cabal repository or from the `docs/` subdirectory: ``` console -make users-guide +> make users-guide ``` Note: Python on Mac OS X dislikes `LC_CTYPE=UTF-8`, so unset the variable and instead set `LC_ALL=en_US.UTF-8`. -### How to update dependencies - -Once in a while you need to update Python dependencies (for instance, -when Dependabot alerts about possible security flaw). The list of -transitive dependencies (`requirements.txt`) is generated from the -list of direct dependencies in `requirements.in`. To perform the -generation step run +Note: You can use a vendor package for `pip-tools`, or run -```console -> make users-guide-requirements +``` console +> pip install pip-tools ``` -either from the root of the cabal repository or from the `docs/` subdirectory. +Make sure the installation directory (often `$HOME/.local/bin`) is on your `$PATH`. -Note that generating `requirements.txt` is sensitive to the Python version. -The version currently used is stamped at the top of `requirements.txt`. -Normally, we would expect the same version of Python to be used for -regeneration. An easy way to enforce a particular version is to perform -regeneration in a Docker container, e.g. (from the root of repository): +### How to update dependencies + +The list of transitive dependencies (`requirements.txt`) is generated from the list of direct dependencies in `requirements.in`. To perform the generation step, run ```console -> docker run -itv $PWD:/cabal python:3.10-alpine sh -... -# apk add make -... -# cd cabal -# make users-guide-requirements +> make users-guide-requirements ``` -One way to make sure the dependencies are reasonably up to date -is to remove `requirements.txt` and regenerate it as described -above. But in some cases you may have to add a bound manually -to `requirements.in`, e.g. `requests >= 2.31.0`. +either from the root of the cabal repository or from the `docs/` subdirectory. You will need to do this before building documentation the first time, but should only need to repeat it after a `git clean` or if the dependencies in `requirements.in` change. + +In some cases, you may have to add a bound manually to `requirements.in`, e.g. `requests >= 2.31.0`. ### Gitpod workflow @@ -70,6 +56,7 @@ Make your edits, rebuild the guide and refresh the browser to preview the changes. When happy, commit your changes with git in the included terminal. ### Caveats, for newcomers to RST from MD + RST does not allow you to skip section levels when nesting, like MD does. So, you cannot have diff --git a/doc/buildinfo-fields-reference.rst b/doc/buildinfo-fields-reference.rst index 338bbddbc11..dd8c505a85e 100644 --- a/doc/buildinfo-fields-reference.rst +++ b/doc/buildinfo-fields-reference.rst @@ -290,7 +290,7 @@ default-language * Documentation of :pkg-field:`library:default-language` .. math:: - \left\{ \mathop{\mathord{``}\mathtt{GHC2021}\mathord{"}}\mid\mathop{\mathord{``}\mathtt{Haskell2010}\mathord{"}}\mid\mathop{\mathord{``}\mathtt{Haskell98}\mathord{"}} \right\} + \left\{ \begin{gathered}\mathop{\mathord{``}\mathtt{GHC2024}\mathord{"}}\\\mathop{\mathord{``}\mathtt{GHC2021}\mathord{"}}\\\mathop{\mathord{``}\mathtt{Haskell2010}\mathord{"}}\\\mathop{\mathord{``}\mathtt{Haskell98}\mathord{"}}\end{gathered} \right\} extensions * Monoidal field @@ -494,7 +494,7 @@ other-languages * Documentation of :pkg-field:`library:other-languages` .. math:: - \mathrm{optcommalist}\left\{ \mathop{\mathord{``}\mathtt{GHC2021}\mathord{"}}\mid\mathop{\mathord{``}\mathtt{Haskell2010}\mathord{"}}\mid\mathop{\mathord{``}\mathtt{Haskell98}\mathord{"}} \right\} + \mathrm{optcommalist}\left\{ \begin{gathered}\mathop{\mathord{``}\mathtt{GHC2024}\mathord{"}}\\\mathop{\mathord{``}\mathtt{GHC2021}\mathord{"}}\\\mathop{\mathord{``}\mathtt{Haskell2010}\mathord{"}}\\\mathop{\mathord{``}\mathtt{Haskell98}\mathord{"}}\end{gathered} \right\} other-modules * Monoidal field diff --git a/doc/cabal-commands.rst b/doc/cabal-commands.rst index 229a5b7a616..1461860e3ab 100644 --- a/doc/cabal-commands.rst +++ b/doc/cabal-commands.rst @@ -245,8 +245,8 @@ A cabal command target can take any of the following forms: component of which the given filepath is a part of will be built. - A script target: ``path/to/script``, which specifies the path to a script - file. This is supported by ``build``, ``repl``, ``run``, and ``clean``. - Script targets are not part of a package. + file. This is supported by ``build``, ``repl``, ``run``, ``list-bin``, and + ``clean``. Script targets are not part of a package. .. _command-group-global: @@ -288,19 +288,43 @@ cabal preferences. It is very useful when you are e.g. first configuring cabal path ^^^^^^^^^^ -``cabal path`` prints the file system paths used by ``cabal`` for -cache, store, installed binaries, and so on. When run without any -options, it will show all paths, labeled with how they are namen in -the configuration file: +``cabal path`` allows to query for paths used by ``cabal``. +For example, it allows to query for the directories of the cache, store, +installed binaries, and so on. :: - $ cabal path - cache-dir: /home/haskell/.cache/cabal/packages - logs-dir: /home/haskell/.cache/cabal/logs - store-dir: /home/haskell/.local/state/cabal/store - config-file: /home/haskell/.config/cabal/config - installdir: /home/haskell/.local/bin - ... + + $ cabal path + cache-home: /home/haskell/.cache/cabal/ + remote-repo-cache: /home/haskell/.cache/cabal/packages + logs-dir: /home/haskell/.cache/cabal/logs + store-dir: /home/haskell/.local/state/cabal/store + config-file: /home/haskell/.config/cabal/config + installdir: /home/haskell/.local/bin + ... + +Or using the json output: + +:: + + $ cabal path --output-format=json + +.. code-block:: json + + { + "cabal-version": "3.11.0.0", + "compiler": { + "flavour": "ghc", + "id": "ghc-9.6.4", + "path": "/home/user/.ghcup/bin/ghc" + }, + "cache-home": "/home/user/.cabal", + "remote-repo-cache": "/home/user/.cabal/packages", + "logs-dir": "/home/user/.cabal/logs", + "store-dir": "/home/user/.cabal/store", + "config-file": "/home/user/.cabal/config", + "installdir": "/home/user/.cabal/bin" + } If ``cabal path`` is passed a single option naming a path, then that path will be printed *without* any label: @@ -310,8 +334,8 @@ path will be printed *without* any label: $ cabal path --installdir /home/haskell/.local/bin -This is a stable interface and is intended to be used for scripting. -For example: +While this interface is intended to be used for scripting, it is an experimental command. +Scripting example: :: $ ls $(cabal path --installdir) @@ -939,6 +963,14 @@ We can also scope to test suite targets as they produce binaries. $ cabal list-bin cabal-install:unit-tests /.../dist-newstyle/.../unit-tests/unit-tests +It can also be used to display the location of the cached executable for a +cabal script. + +:: + + $ cabal list-bin path/to/script + $XDG_CACHE_HOME/cabal/script-builds/.../bin/script + Note that ``cabal list-bin`` will print the executables' location, but will not make sure that these executables actually exist (i.e., have been successfully built). In order to determine the correct location, @@ -1109,6 +1141,9 @@ The executable is cached under the cabal directory, and can be pre-built with ``cabal build path/to/script`` and the cache can be removed with ``cabal clean path/to/script``. +The location of the cached executable can be displayed with +``cabal list-bin path/to/script``. + A note on targets: Whenever a command takes a script target and it matches the name of another target, the other target is preferred. To load the script instead pass it as an explicit path: ./script @@ -1276,6 +1311,7 @@ A list of all warnings with their constructor: - ``test-cabal-ver``: ``test-suite`` used with ``cabal-version`` < 1.10. - ``default-language``: ``default-language`` used with ``cabal-version`` < 1.10. - ``no-default-language``: missing ``default-language``. +- ``add-default-language``: suggested ``default-language``. - ``extra-doc-files``: ``extra-doc-files`` used with ``cabal-version`` < 1.18. - ``multilib``: multiple ``library`` sections with ``cabal-version`` < 2.0. - ``reexported-modules``: ``reexported-modules`` with ``cabal-version`` < 1.22. @@ -1381,8 +1417,8 @@ to Hackage. .. option:: -t TOKEN or -tTOKEN, --token=TOKEN - Your Hackage authentication token. You can create and delete - authentication tokens on Hackage's `account management page + Your Hackage authentication token. You can create and delete + authentication tokens on Hackage's `account management page `__. .. option:: -u USERNAME or -uUSERNAME, --username=USERNAME @@ -1416,8 +1452,8 @@ cabal report .. option:: -t TOKEN or -tTOKEN, --token=TOKEN - Your Hackage authentication token. You can create and delete - authentication tokens on Hackage's `account management page + Your Hackage authentication token. You can create and delete + authentication tokens on Hackage's `account management page `__. .. option:: -u USERNAME or -uUSERNAME, --username=USERNAME diff --git a/doc/cabal-package-description-file.rst b/doc/cabal-package-description-file.rst index 8e5e59db1cf..c1566fe4e25 100644 --- a/doc/cabal-package-description-file.rst +++ b/doc/cabal-package-description-file.rst @@ -200,7 +200,7 @@ builds packages for all the Haskell implementations. The simple build infrastructure can also handle packages where building is governed by system-dependent parameters, if you specify a little more (see the section on `system-dependent parameters`_). -A few packages require `more elaborate solutions `_. +A few packages require `more elaborate solutions <#more-complex-packages>`_. .. _pkg-desc: @@ -1730,7 +1730,8 @@ system-dependent values for these fields. The possible values are: - - ``GHC2021`` (only available for GHC version newer than ``9.2``) + - ``GHC2024`` (only available for GHC version ``9.10`` or later) + - ``GHC2021`` (only available for GHC version ``9.2`` or later) - ``Haskell2010`` - ``Haskell98`` @@ -2803,8 +2804,10 @@ Declaring a ``custom-setup`` stanza also enables the generation of :synopsis: Custom Setup.hs build information. :since: 1.24 - The optional :pkg-section:`custom-setup` stanza contains information needed - for the compilation of custom ``Setup.hs`` scripts, + A :pkg-section:`custom-setup` stanza is required for + :pkg-field:`build-type` ``Custom`` and will be ignored (with a warning) for + other build types. The stanza contains information needed for the compilation + of custom ``Setup.hs`` scripts. For example: :: @@ -2837,7 +2840,7 @@ Backward compatibility and ``custom-setup`` Versions prior to Cabal 1.24 don't recognise ``custom-setup`` stanzas, and will behave agnostic to them (except for warning about an unknown -section). Consequently, versions prior to Cabal 1.24 can't ensure the +'section'). Consequently, versions prior to Cabal 1.24 can't ensure the declared dependencies ``setup-depends`` are in scope, and instead whatever is registered in the current package database environment will become eligible (and resolved by the compiler) for the @@ -2847,8 +2850,9 @@ The availability of the ``MIN_VERSION_package_(A,B,C)`` CPP macros inside ``Setup.hs`` scripts depends on the condition that either -- a ``custom-setup`` section has been declared (or ``cabal build`` is being - used which injects an implicit hard-coded ``custom-setup`` stanza if it's missing), or +- a ``custom-setup`` stanza has been declared (or ``cabal build`` is being used + which injects an implicit hard-coded ``custom-setup`` stanza if it's missing), + or - GHC 8.0 or later is used (which natively injects package version CPP macros) Consequently, if you need to write backward compatible ``Setup.hs`` diff --git a/doc/file-format-changelog.rst b/doc/file-format-changelog.rst index c3d9aa2dfc8..854f949b301 100644 --- a/doc/file-format-changelog.rst +++ b/doc/file-format-changelog.rst @@ -19,6 +19,13 @@ relative to the respective preceding *published* version. versions of the ``Cabal`` library denote unreleased development branches which have no stability guarantee. +``cabal-version: 3.12`` +----------------------- + +* License fields use identifiers from SPDX License List version + ``3.23 2024-02-08``. + + ``cabal-version: 3.8`` ---------------------- diff --git a/doc/getting-started.rst b/doc/getting-started.rst index 39a095a7453..056c4a85ebd 100644 --- a/doc/getting-started.rst +++ b/doc/getting-started.rst @@ -4,16 +4,16 @@ Getting Started Installing Cabal ---------------- -The easiest and recommended way to install the ``cabal`` command-line tool -on Linux, macOS, FreeBSD or Windows is through `ghcup `__. +The easiest and recommended way to install the ``cabal`` command-line tool +on Linux, macOS, FreeBSD or Windows is through `ghcup `__. It installs the “Haskell toolchain”, which includes Cabal, -the Haskell compiler `GHC `__ +the Haskell compiler `GHC `__ and optionally other useful Haskell tools. Creating a new application -------------------------- -We create a minimal Haskell application to get a quick overview +We create a minimal Haskell application to get a quick overview of the ``cabal`` command-line tool: 1. How to initialize a Haskell package. @@ -59,9 +59,9 @@ The ``myapp.cabal`` file is a package description file, commonly referred to as default-language: Haskell2010 It contains metadata (package name and version, author name, license, etc.) and sections -to define package components. Components can be used to split large codebases into smaller, +to define package components. Components can be used to split large codebases into smaller, more managable building blocks. -A component can be of one of several types (executable, library, etc.) and describes, +A component can be of one of several types (executable, library, etc.) and describes, among other things, the location of source files and its dependencies. The ``myapp.cabal`` file above defines a single component named ``myapp`` of the executable type. Inside the ``executable`` section, the ``build-depends`` field lists the dependencies of this component. @@ -77,7 +77,7 @@ The ``app/Main.hs`` file is where your executable's code lives: main = putStrLn "Hello, Haskell!" -To run the executable, switch into the application directory with ``cd myapp`` and run +To run the executable, switch into the application directory with ``cd myapp`` and run .. code-block:: console @@ -86,7 +86,7 @@ To run the executable, switch into the application directory with ``cd myapp`` a Hello, Haskell! This command automatically determines if the executable needs to be (re)built -before running the executable. With only one executable component in the package, +before running the executable. With only one executable component in the package, ``cabal run`` (without a component name) is smart enough to infer it, so the name can be omitted. If you just want to build the executable without running it, run: @@ -181,11 +181,11 @@ Now you can build and re-run your code to see the new output: Running a single-file Haskell script ------------------------------------ -Cabal also supports running single-file Haskell scripts like +Cabal also supports running single-file Haskell scripts like the following file named ``myscript``: .. code-block:: haskell - + #!/usr/bin/env cabal {- cabal: build-depends: diff --git a/doc/how-to-build-like-nix.rst b/doc/how-to-build-like-nix.rst index 0714b4b02f1..9377cc94327 100644 --- a/doc/how-to-build-like-nix.rst +++ b/doc/how-to-build-like-nix.rst @@ -28,7 +28,7 @@ Nix-style local builds combine the best of non-sandboxed and sandboxed Cabal: will rebuild all its dependencies with profiling automatically. 2. Like non-sandboxed Cabal today, builds of external packages are - cached in ``~/.cabal/store``, so that a package can be built once, + cached in a global store, so that a package can be built once, and then reused anywhere else it is also used. No need to continually rebuild dependencies whenever you make a new sandbox: dependencies which can be shared, are shared. diff --git a/doc/how-to-run-in-windows.rst b/doc/how-to-run-in-windows.rst new file mode 100644 index 00000000000..5c06f62bbb3 --- /dev/null +++ b/doc/how-to-run-in-windows.rst @@ -0,0 +1,153 @@ +How to use Cabal in Windows +=========================== + +This document describes how to use Cabal in a Windows system. See the +:ref:`Further reading` section for some other references that might provide some +more explanations. For a TL;DR, jump to the :ref:`Complete configuration`. + +Install the Haskell environment +------------------------------- + +Haskell development on Windows makes use of the `MSYS2 `_ +tools. + +The recommended way of setting up a Haskell environment in Windows is by using +`GHCup `_. Follow the steps outlined in its +webpage to install at least GHC and Cabal. GHCup will install its own MSYS2 +system in your computer unless told not to do so: refer to `its documentation +`_ for more information. + +.. NOTE:: + Stack is another tool you can use to set up a Haskell environment on Windows. Stack + can be installed on its own or via GHCup. See + `Stack's webpage `_ and/or + `GHCup's section on Stack integration `_, + in particular the `Windows related subsection `_. + +Ensure that Cabal can call the tools it needs +--------------------------------------------- + +Cabal sometimes needs to call tools that do not come with Windows (such as +``make`` or even ``git``). The MSYS2 project makes many of them available on +Windows. The directories where those are located need to be made visible in the +``PATH`` when executing ``cabal``. For that, Cabal provides the +``extra-prog-path`` configuration option. Your :ref:`global configuration +` should include this option: + +:: + + extra-prog-path: \\bin + \usr\bin + +Where ```` points to the location of your MSYS2 installation. Refer to +GHCup's documentation on the default location of this directory. +```` has to be one of the environments of MSYS2, which for GHCup is +``mingw64``. You can learn more about the different environments in the `MSYS2 +documentation `_. + +.. note:: + + Unless told otherwise, the GHCup bootstrap script already adds these directories to `extra-prog-path` + by default. + +Ensure that Cabal can use system libraries +------------------------------------------ + +Third-party libraries can be installed using the ``pacman`` package manager on +the MSYS2 installation. When installing a third party package its libraries and +header files will (usually) be placed in +``\\{lib,include}`` respectively. These directories need +to be specified in the ``extra-lib-dirs`` and ``extra-include-dirs`` +respectively. Your :ref:`global configuration ` should +include these options: + +:: + + extra-include-dirs: \\include + extra-lib-dirs: \\lib + + +.. note:: + + Unless told otherwise, the GHCup bootstrap script already adds these directories to `extra-include-dirs` and `extra-lib-dirs` + by default. + +.. warning:: + + Packages in the ``msys/`` repo are not native Windows libraries and will + probably not work when one tries to link to them. Install the packages for + your selected environment, which for GHCup is ``mingw64/``. Refer to `MSYS2's + package management documentation + `_ for more information. + +Ensure that Cabal can call Haskell tools +---------------------------------------- + +Haskell tools are located in two places: + +- ``\bin`` for standard Haskell tools such as GHC, Cabal, Haddock, ``hsc2hs``... + +- The ``installdir`` that Cabal is configured with for user-installed Haskell tools. + +For Cabal to be able to invoke these tools, those directories need to be made +visible in the ``PATH``. Your :ref:`global configuration ` should +include these options: + +:: + + installdir: + extra-prog-path: ... + \bin + + +.. note:: + + Unless told otherwise, the GHCup bootstrap script already adds these directories to `extra-prog-path` + by default. + +.. _Complete configuration: + +Complete configuration +---------------------- + +The complete :ref:`global configuration ` should finally +look like this: + +:: + + installdir: + extra-include-dirs: \\include + extra-lib-dirs: \\lib + extra-prog-path: \bin + + \\bin + \usr\bin + +.. note:: + + Unless told otherwise, the GHCup bootstrap script already sets this configuration file to the right + values by default. + +.. _Further reading: + +Further reading +--------------- + +- MSYS2 homepage: https://www.msys2.org +- MinGW-W64 homepage: https://www.mingw-w64.org/ +- Setting up Windows to build GHC: + https://gitlab.haskell.org/ghc/ghc/-/wikis/building/preparation/windows +- Some definitions and useful tools: + https://gitlab.haskell.org/ghc/ghc/-/wikis/surviving-windows + +Outdated links +~~~~~~~~~~~~~~ + +These links are outdated but still useful to understand the overall picture: + +- GHC's wiki about the Windows platform (outdated, GHC now uses MSYS2): + https://gitlab.haskell.org/ghc/ghc/-/wikis/building/platforms/windows +- The Windows toolchain (outdated, GHC now uses the ``CLANG64`` environment): + https://gitlab.haskell.org/ghc/ghc/-/wikis/working-conventions/windows-toolchain +- Haskell Wiki on Windows (outdated, it talks about MSYS and old tools such as + the Haskell platform): https://wiki.haskell.org/Windows diff --git a/doc/index.rst b/doc/index.rst index 69109a67685..e0007bc291f 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -15,6 +15,7 @@ Welcome to the Cabal User Guide how-to-package-haskell-code how-to-build-like-nix + how-to-run-in-windows how-to-use-backpack how-to-report-bugs diff --git a/doc/nix-local-build.rst b/doc/nix-local-build.rst index 7a47dacc923..6144cea85ba 100644 --- a/doc/nix-local-build.rst +++ b/doc/nix-local-build.rst @@ -170,8 +170,9 @@ identify the result of a build; if we compute this identifier and we find that we already have this ID built, we can just use the already built version. -The global package store is ``~/.cabal/store`` (configurable via -global `store-dir` option); if you need to clear your store for +Use ``cabal path --store-dir`` to show where your global package store is located. +This is configurable via the global ``store-dir`` option. +If you need to clear your store for whatever reason (e.g., to reclaim disk space or because the global store is corrupted), deleting this directory is safe (``build`` will just rebuild everything it needs on its next invocation). diff --git a/doc/requirements.in b/doc/requirements.in index c8a3a7692a2..1c3ee5b9fd9 100644 --- a/doc/requirements.in +++ b/doc/requirements.in @@ -8,5 +8,7 @@ Pygments >= 2.7.4 certifi >= 2023.07.22 # CVE-2023-45803 urllib3 >= 2.0.7 -# CVE-2024-22195 -jinja2 == 3.1.3 +# CVE-2024-34064 +jinja2 >= 3.1.4 +# CVE-2024-3651 +idna >= 3.7 diff --git a/doc/requirements.txt b/doc/requirements.txt deleted file mode 100644 index 8ec8934d93e..00000000000 --- a/doc/requirements.txt +++ /dev/null @@ -1,77 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile requirements.in -# -alabaster==0.7.13 - # via sphinx -babel==2.12.1 - # via sphinx -certifi==2023.7.22 - # via - # -r requirements.in - # requests -charset-normalizer==3.1.0 - # via requests -docutils==0.18.1 - # via - # sphinx - # sphinx-jsonschema - # sphinx-rtd-theme -idna==3.4 - # via requests -imagesize==1.4.1 - # via sphinx -jinja2==3.1.3 - # via - # -r requirements.in - # sphinx -jsonpointer==2.3 - # via sphinx-jsonschema -markupsafe==2.1.2 - # via jinja2 -packaging==23.1 - # via sphinx -pygments==2.15.1 - # via - # -r requirements.in - # sphinx -pyyaml==6.0 - # via sphinx-jsonschema -requests==2.31.0 - # via - # sphinx - # sphinx-jsonschema -snowballstemmer==2.2.0 - # via sphinx -sphinx==5.3.0 - # via - # -r requirements.in - # sphinx-rtd-theme - # sphinxcontrib-jquery - # sphinxnotes-strike -sphinx-jsonschema==1.19.1 - # via -r requirements.in -sphinx-rtd-theme==1.2.1 - # via -r requirements.in -sphinxcontrib-applehelp==1.0.4 - # via sphinx -sphinxcontrib-devhelp==1.0.2 - # via sphinx -sphinxcontrib-htmlhelp==2.0.1 - # via sphinx -sphinxcontrib-jquery==4.1 - # via sphinx-rtd-theme -sphinxcontrib-jsmath==1.0.1 - # via sphinx -sphinxcontrib-qthelp==1.0.3 - # via sphinx -sphinxcontrib-serializinghtml==1.1.5 - # via sphinx -sphinxnotes-strike==1.2 - # via -r requirements.in -urllib3==2.0.7 - # via - # -r requirements.in - # requests diff --git a/editors/vim/syntax/cabal.vim b/editors/vim/syntax/cabal.vim index 210b637c14d..2e6361ba9cc 100644 --- a/editors/vim/syntax/cabal.vim +++ b/editors/vim/syntax/cabal.vim @@ -39,6 +39,7 @@ syn keyword cabalLanguage contained \ Haskell98 \ Haskell2010 \ GHC2021 + \ GHC2024 " To update this in Cabal, `cabal repl Cabal` and: " >>> :m *Distribution.PackageDescription.FieldGrammar diff --git a/fix-whitespace.yaml b/fix-whitespace.yaml index d96e84188b1..d5eb572ec62 100644 --- a/fix-whitespace.yaml +++ b/fix-whitespace.yaml @@ -40,6 +40,7 @@ included-files: - .gitattributes - AUTHORS - LICENSE + - "*.project" - "cabal.project.*" - "*.ac" - "*.bat" @@ -117,6 +118,7 @@ excluded-files: - "*.golden" - "*.log" - "*.out" + - doc/buildinfo-fields-reference.rst # Binary files - "*.a" diff --git a/fourmolu.yaml b/fourmolu.yaml index acd4a166328..40b1e42207b 100644 --- a/fourmolu.yaml +++ b/fourmolu.yaml @@ -14,7 +14,7 @@ let-style: auto fixities: # Distribution.Compat.Parsing - - infixr 0 + - infixr 0 # Distribution.FieldGrammar - infixl 5 ^^^ # Distribution.Types.InstalledPackageInfo.FieldGrammar diff --git a/license-list-data/exceptions-3.23.json b/license-list-data/exceptions-3.23.json new file mode 100644 index 00000000000..774f2632e6e --- /dev/null +++ b/license-list-data/exceptions-3.23.json @@ -0,0 +1,772 @@ +{ + "licenseListVersion": "3.23", + "exceptions": [ + { + "reference": "./389-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./389-exception.html", + "referenceNumber": 41, + "name": "389 Directory Server Exception", + "licenseExceptionId": "389-exception", + "seeAlso": [ + "http://directory.fedoraproject.org/wiki/GPL_Exception_License_Text", + "https://web.archive.org/web/20080828121337/http://directory.fedoraproject.org/wiki/GPL_Exception_License_Text" + ] + }, + { + "reference": "./Asterisk-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Asterisk-exception.html", + "referenceNumber": 25, + "name": "Asterisk exception", + "licenseExceptionId": "Asterisk-exception", + "seeAlso": [ + "https://github.com/asterisk/libpri/blob/7f91151e6bd10957c746c031c1f4a030e8146e9a/pri.c#L22", + "https://github.com/asterisk/libss7/blob/03e81bcd0d28ff25d4c77c78351ddadc82ff5c3f/ss7.c#L24" + ] + }, + { + "reference": "./Autoconf-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Autoconf-exception-2.0.html", + "referenceNumber": 47, + "name": "Autoconf exception 2.0", + "licenseExceptionId": "Autoconf-exception-2.0", + "seeAlso": [ + "http://ac-archive.sourceforge.net/doc/copyright.html", + "http://ftp.gnu.org/gnu/autoconf/autoconf-2.59.tar.gz" + ] + }, + { + "reference": "./Autoconf-exception-3.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Autoconf-exception-3.0.html", + "referenceNumber": 18, + "name": "Autoconf exception 3.0", + "licenseExceptionId": "Autoconf-exception-3.0", + "seeAlso": [ + "http://www.gnu.org/licenses/autoconf-exception-3.0.html" + ] + }, + { + "reference": "./Autoconf-exception-generic.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Autoconf-exception-generic.html", + "referenceNumber": 1, + "name": "Autoconf generic exception", + "licenseExceptionId": "Autoconf-exception-generic", + "seeAlso": [ + "https://launchpad.net/ubuntu/precise/+source/xmltooling/+copyright", + "https://tracker.debian.org/media/packages/s/sipwitch/copyright-1.9.15-3", + "https://opensource.apple.com/source/launchd/launchd-258.1/launchd/compile.auto.html", + "https://git.savannah.gnu.org/gitweb/?p\u003dgnulib.git;a\u003dblob;f\u003dgnulib-tool;h\u003d029a8cf377ad8d8f2d9e54061bf2f20496ad2eef;hb\u003d73c74ba0197e6566da6882c87b1adee63e24d75c#l407" + ] + }, + { + "reference": "./Autoconf-exception-generic-3.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Autoconf-exception-generic-3.0.html", + "referenceNumber": 58, + "name": "Autoconf generic exception for GPL-3.0", + "licenseExceptionId": "Autoconf-exception-generic-3.0", + "seeAlso": [ + "https://src.fedoraproject.org/rpms/redhat-rpm-config/blob/rawhide/f/config.guess" + ] + }, + { + "reference": "./Autoconf-exception-macro.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Autoconf-exception-macro.html", + "referenceNumber": 29, + "name": "Autoconf macro exception", + "licenseExceptionId": "Autoconf-exception-macro", + "seeAlso": [ + "https://github.com/freedesktop/xorg-macros/blob/39f07f7db58ebbf3dcb64a2bf9098ed5cf3d1223/xorg-macros.m4.in", + "https://www.gnu.org/software/autoconf-archive/ax_pthread.html", + "https://launchpad.net/ubuntu/precise/+source/xmltooling/+copyright" + ] + }, + { + "reference": "./Bison-exception-1.24.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Bison-exception-1.24.html", + "referenceNumber": 53, + "name": "Bison exception 1.24", + "licenseExceptionId": "Bison-exception-1.24", + "seeAlso": [ + "https://github.com/arineng/rwhoisd/blob/master/rwhoisd/mkdb/y.tab.c#L180" + ] + }, + { + "reference": "./Bison-exception-2.2.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Bison-exception-2.2.html", + "referenceNumber": 19, + "name": "Bison exception 2.2", + "licenseExceptionId": "Bison-exception-2.2", + "seeAlso": [ + "http://git.savannah.gnu.org/cgit/bison.git/tree/data/yacc.c?id\u003d193d7c7054ba7197b0789e14965b739162319b5e#n141" + ] + }, + { + "reference": "./Bootloader-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Bootloader-exception.html", + "referenceNumber": 44, + "name": "Bootloader Distribution Exception", + "licenseExceptionId": "Bootloader-exception", + "seeAlso": [ + "https://github.com/pyinstaller/pyinstaller/blob/develop/COPYING.txt" + ] + }, + { + "reference": "./Classpath-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Classpath-exception-2.0.html", + "referenceNumber": 56, + "name": "Classpath exception 2.0", + "licenseExceptionId": "Classpath-exception-2.0", + "seeAlso": [ + "http://www.gnu.org/software/classpath/license.html", + "https://fedoraproject.org/wiki/Licensing/GPL_Classpath_Exception" + ] + }, + { + "reference": "./CLISP-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./CLISP-exception-2.0.html", + "referenceNumber": 59, + "name": "CLISP exception 2.0", + "licenseExceptionId": "CLISP-exception-2.0", + "seeAlso": [ + "http://sourceforge.net/p/clisp/clisp/ci/default/tree/COPYRIGHT" + ] + }, + { + "reference": "./cryptsetup-OpenSSL-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./cryptsetup-OpenSSL-exception.html", + "referenceNumber": 30, + "name": "cryptsetup OpenSSL exception", + "licenseExceptionId": "cryptsetup-OpenSSL-exception", + "seeAlso": [ + "https://gitlab.com/cryptsetup/cryptsetup/-/blob/main/COPYING", + "https://gitlab.nic.cz/datovka/datovka/-/blob/develop/COPYING", + "https://github.com/nbs-system/naxsi/blob/951123ad456bdf5ac94e8d8819342fe3d49bc002/naxsi_src/naxsi_raw.c", + "http://web.mit.edu/jgross/arch/amd64_deb60/bin/mosh" + ] + }, + { + "reference": "./DigiRule-FOSS-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./DigiRule-FOSS-exception.html", + "referenceNumber": 26, + "name": "DigiRule FOSS License Exception", + "licenseExceptionId": "DigiRule-FOSS-exception", + "seeAlso": [ + "http://www.digirulesolutions.com/drupal/foss" + ] + }, + { + "reference": "./eCos-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./eCos-exception-2.0.html", + "referenceNumber": 31, + "name": "eCos exception 2.0", + "licenseExceptionId": "eCos-exception-2.0", + "seeAlso": [ + "http://ecos.sourceware.org/license-overview.html" + ] + }, + { + "reference": "./Fawkes-Runtime-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Fawkes-Runtime-exception.html", + "referenceNumber": 11, + "name": "Fawkes Runtime Exception", + "licenseExceptionId": "Fawkes-Runtime-exception", + "seeAlso": [ + "http://www.fawkesrobotics.org/about/license/" + ] + }, + { + "reference": "./FLTK-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./FLTK-exception.html", + "referenceNumber": 37, + "name": "FLTK exception", + "licenseExceptionId": "FLTK-exception", + "seeAlso": [ + "http://www.fltk.org/COPYING.php" + ] + }, + { + "reference": "./fmt-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./fmt-exception.html", + "referenceNumber": 35, + "name": "fmt exception", + "licenseExceptionId": "fmt-exception", + "seeAlso": [ + "https://github.com/fmtlib/fmt/blob/master/LICENSE", + "https://github.com/fmtlib/fmt/blob/2eb363297b24cd71a68ccfb20ff755430f17e60f/LICENSE#L22C1-L27C62" + ] + }, + { + "reference": "./Font-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Font-exception-2.0.html", + "referenceNumber": 38, + "name": "Font exception 2.0", + "licenseExceptionId": "Font-exception-2.0", + "seeAlso": [ + "http://www.gnu.org/licenses/gpl-faq.html#FontException" + ] + }, + { + "reference": "./freertos-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./freertos-exception-2.0.html", + "referenceNumber": 17, + "name": "FreeRTOS Exception 2.0", + "licenseExceptionId": "freertos-exception-2.0", + "seeAlso": [ + "https://web.archive.org/web/20060809182744/http://www.freertos.org/a00114.html" + ] + }, + { + "reference": "./GCC-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GCC-exception-2.0.html", + "referenceNumber": 66, + "name": "GCC Runtime Library exception 2.0", + "licenseExceptionId": "GCC-exception-2.0", + "seeAlso": [ + "https://gcc.gnu.org/git/?p\u003dgcc.git;a\u003dblob;f\u003dgcc/libgcc1.c;h\u003d762f5143fc6eed57b6797c82710f3538aa52b40b;hb\u003dcb143a3ce4fb417c68f5fa2691a1b1b1053dfba9#l10", + "https://sourceware.org/git/?p\u003dglibc.git;a\u003dblob;f\u003dcsu/abi-note.c;h\u003dc2ec208e94fbe91f63d3c375bd254b884695d190;hb\u003dHEAD" + ] + }, + { + "reference": "./GCC-exception-2.0-note.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GCC-exception-2.0-note.html", + "referenceNumber": 46, + "name": "GCC Runtime Library exception 2.0 - note variant", + "licenseExceptionId": "GCC-exception-2.0-note", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dglibc.git;a\u003dblob;f\u003dsysdeps/x86_64/start.S" + ] + }, + { + "reference": "./GCC-exception-3.1.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GCC-exception-3.1.html", + "referenceNumber": 12, + "name": "GCC Runtime Library exception 3.1", + "licenseExceptionId": "GCC-exception-3.1", + "seeAlso": [ + "http://www.gnu.org/licenses/gcc-exception-3.1.html" + ] + }, + { + "reference": "./Gmsh-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Gmsh-exception.html", + "referenceNumber": 15, + "name": "Gmsh exception\u003e", + "licenseExceptionId": "Gmsh-exception", + "seeAlso": [ + "https://gitlab.onelab.info/gmsh/gmsh/-/raw/master/LICENSE.txt" + ] + }, + { + "reference": "./GNAT-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GNAT-exception.html", + "referenceNumber": 7, + "name": "GNAT exception", + "licenseExceptionId": "GNAT-exception", + "seeAlso": [ + "https://github.com/AdaCore/florist/blob/master/libsrc/posix-configurable_file_limits.adb" + ] + }, + { + "reference": "./GNOME-examples-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GNOME-examples-exception.html", + "referenceNumber": 32, + "name": "GNOME examples exception", + "licenseExceptionId": "GNOME-examples-exception", + "seeAlso": [ + "https://gitlab.gnome.org/Archive/gnome-devel-docs/-/blob/master/platform-demos/C/legal.xml?ref_type\u003dheads", + "http://meldmerge.org/help/" + ] + }, + { + "reference": "./GNU-compiler-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GNU-compiler-exception.html", + "referenceNumber": 62, + "name": "GNU Compiler Exception", + "licenseExceptionId": "GNU-compiler-exception", + "seeAlso": [ + "https://sourceware.org/git?p\u003dbinutils-gdb.git;a\u003dblob;f\u003dlibiberty/unlink-if-ordinary.c;h\u003de49f2f2f67bfdb10d6b2bd579b0e01cad0fd708e;hb\u003dHEAD#l19" + ] + }, + { + "reference": "./gnu-javamail-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./gnu-javamail-exception.html", + "referenceNumber": 8, + "name": "GNU JavaMail exception", + "licenseExceptionId": "gnu-javamail-exception", + "seeAlso": [ + "http://www.gnu.org/software/classpathx/javamail/javamail.html" + ] + }, + { + "reference": "./GPL-3.0-interface-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GPL-3.0-interface-exception.html", + "referenceNumber": 23, + "name": "GPL-3.0 Interface Exception", + "licenseExceptionId": "GPL-3.0-interface-exception", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-faq.en.html#LinkingOverControlledInterface" + ] + }, + { + "reference": "./GPL-3.0-linking-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GPL-3.0-linking-exception.html", + "referenceNumber": 21, + "name": "GPL-3.0 Linking Exception", + "licenseExceptionId": "GPL-3.0-linking-exception", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-faq.en.html#GPLIncompatibleLibs" + ] + }, + { + "reference": "./GPL-3.0-linking-source-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GPL-3.0-linking-source-exception.html", + "referenceNumber": 54, + "name": "GPL-3.0 Linking Exception (with Corresponding Source)", + "licenseExceptionId": "GPL-3.0-linking-source-exception", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-faq.en.html#GPLIncompatibleLibs", + "https://github.com/mirror/wget/blob/master/src/http.c#L20" + ] + }, + { + "reference": "./GPL-CC-1.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GPL-CC-1.0.html", + "referenceNumber": 57, + "name": "GPL Cooperation Commitment 1.0", + "licenseExceptionId": "GPL-CC-1.0", + "seeAlso": [ + "https://github.com/gplcc/gplcc/blob/master/Project/COMMITMENT", + "https://gplcc.github.io/gplcc/Project/README-PROJECT.html" + ] + }, + { + "reference": "./GStreamer-exception-2005.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GStreamer-exception-2005.html", + "referenceNumber": 28, + "name": "GStreamer Exception (2005)", + "licenseExceptionId": "GStreamer-exception-2005", + "seeAlso": [ + "https://gstreamer.freedesktop.org/documentation/frequently-asked-questions/licensing.html?gi-language\u003dc#licensing-of-applications-using-gstreamer" + ] + }, + { + "reference": "./GStreamer-exception-2008.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./GStreamer-exception-2008.html", + "referenceNumber": 67, + "name": "GStreamer Exception (2008)", + "licenseExceptionId": "GStreamer-exception-2008", + "seeAlso": [ + "https://gstreamer.freedesktop.org/documentation/frequently-asked-questions/licensing.html?gi-language\u003dc#licensing-of-applications-using-gstreamer" + ] + }, + { + "reference": "./i2p-gpl-java-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./i2p-gpl-java-exception.html", + "referenceNumber": 22, + "name": "i2p GPL+Java Exception", + "licenseExceptionId": "i2p-gpl-java-exception", + "seeAlso": [ + "http://geti2p.net/en/get-involved/develop/licenses#java_exception" + ] + }, + { + "reference": "./KiCad-libraries-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./KiCad-libraries-exception.html", + "referenceNumber": 39, + "name": "KiCad Libraries Exception", + "licenseExceptionId": "KiCad-libraries-exception", + "seeAlso": [ + "https://www.kicad.org/libraries/license/" + ] + }, + { + "reference": "./LGPL-3.0-linking-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./LGPL-3.0-linking-exception.html", + "referenceNumber": 13, + "name": "LGPL-3.0 Linking Exception", + "licenseExceptionId": "LGPL-3.0-linking-exception", + "seeAlso": [ + "https://raw.githubusercontent.com/go-xmlpath/xmlpath/v2/LICENSE", + "https://github.com/goamz/goamz/blob/master/LICENSE", + "https://github.com/juju/errors/blob/master/LICENSE" + ] + }, + { + "reference": "./libpri-OpenH323-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./libpri-OpenH323-exception.html", + "referenceNumber": 65, + "name": "libpri OpenH323 exception", + "licenseExceptionId": "libpri-OpenH323-exception", + "seeAlso": [ + "https://github.com/asterisk/libpri/blob/1.6.0/README#L19-L22" + ] + }, + { + "reference": "./Libtool-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Libtool-exception.html", + "referenceNumber": 20, + "name": "Libtool Exception", + "licenseExceptionId": "Libtool-exception", + "seeAlso": [ + "http://git.savannah.gnu.org/cgit/libtool.git/tree/m4/libtool.m4", + "https://git.savannah.gnu.org/cgit/libtool.git/tree/libltdl/lt__alloc.c#n15" + ] + }, + { + "reference": "./Linux-syscall-note.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Linux-syscall-note.html", + "referenceNumber": 34, + "name": "Linux Syscall Note", + "licenseExceptionId": "Linux-syscall-note", + "seeAlso": [ + "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/COPYING" + ] + }, + { + "reference": "./LLGPL.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./LLGPL.html", + "referenceNumber": 51, + "name": "LLGPL Preamble", + "licenseExceptionId": "LLGPL", + "seeAlso": [ + "http://opensource.franz.com/preamble.html" + ] + }, + { + "reference": "./LLVM-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./LLVM-exception.html", + "referenceNumber": 24, + "name": "LLVM Exception", + "licenseExceptionId": "LLVM-exception", + "seeAlso": [ + "http://llvm.org/foundation/relicensing/LICENSE.txt" + ] + }, + { + "reference": "./LZMA-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./LZMA-exception.html", + "referenceNumber": 60, + "name": "LZMA exception", + "licenseExceptionId": "LZMA-exception", + "seeAlso": [ + "http://nsis.sourceforge.net/Docs/AppendixI.html#I.6" + ] + }, + { + "reference": "./mif-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./mif-exception.html", + "referenceNumber": 5, + "name": "Macros and Inline Functions Exception", + "licenseExceptionId": "mif-exception", + "seeAlso": [ + "http://www.scs.stanford.edu/histar/src/lib/cppsup/exception", + "http://dev.bertos.org/doxygen/", + "https://www.threadingbuildingblocks.org/licensing" + ] + }, + { + "reference": "./Nokia-Qt-exception-1.1.json", + "isDeprecatedLicenseId": true, + "detailsUrl": "./Nokia-Qt-exception-1.1.html", + "referenceNumber": 9, + "name": "Nokia Qt LGPL exception 1.1", + "licenseExceptionId": "Nokia-Qt-exception-1.1", + "seeAlso": [ + "https://www.keepassx.org/dev/projects/keepassx/repository/revisions/b8dfb9cc4d5133e0f09cd7533d15a4f1c19a40f2/entry/LICENSE.NOKIA-LGPL-EXCEPTION" + ] + }, + { + "reference": "./OCaml-LGPL-linking-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./OCaml-LGPL-linking-exception.html", + "referenceNumber": 63, + "name": "OCaml LGPL Linking Exception", + "licenseExceptionId": "OCaml-LGPL-linking-exception", + "seeAlso": [ + "https://caml.inria.fr/ocaml/license.en.html" + ] + }, + { + "reference": "./OCCT-exception-1.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./OCCT-exception-1.0.html", + "referenceNumber": 6, + "name": "Open CASCADE Exception 1.0", + "licenseExceptionId": "OCCT-exception-1.0", + "seeAlso": [ + "http://www.opencascade.com/content/licensing" + ] + }, + { + "reference": "./OpenJDK-assembly-exception-1.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./OpenJDK-assembly-exception-1.0.html", + "referenceNumber": 43, + "name": "OpenJDK Assembly exception 1.0", + "licenseExceptionId": "OpenJDK-assembly-exception-1.0", + "seeAlso": [ + "http://openjdk.java.net/legal/assembly-exception.html" + ] + }, + { + "reference": "./openvpn-openssl-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./openvpn-openssl-exception.html", + "referenceNumber": 52, + "name": "OpenVPN OpenSSL Exception", + "licenseExceptionId": "openvpn-openssl-exception", + "seeAlso": [ + "http://openvpn.net/index.php/license.html", + "https://github.com/psycopg/psycopg2/blob/2_9_3/LICENSE#L14" + ] + }, + { + "reference": "./PS-or-PDF-font-exception-20170817.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./PS-or-PDF-font-exception-20170817.html", + "referenceNumber": 14, + "name": "PS/PDF font exception (2017-08-17)", + "licenseExceptionId": "PS-or-PDF-font-exception-20170817", + "seeAlso": [ + "https://github.com/ArtifexSoftware/urw-base35-fonts/blob/65962e27febc3883a17e651cdb23e783668c996f/LICENSE" + ] + }, + { + "reference": "./QPL-1.0-INRIA-2004-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./QPL-1.0-INRIA-2004-exception.html", + "referenceNumber": 16, + "name": "INRIA QPL 1.0 2004 variant exception", + "licenseExceptionId": "QPL-1.0-INRIA-2004-exception", + "seeAlso": [ + "https://git.frama-c.com/pub/frama-c/-/blob/master/licenses/Q_MODIFIED_LICENSE", + "https://github.com/maranget/hevea/blob/master/LICENSE" + ] + }, + { + "reference": "./Qt-GPL-exception-1.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Qt-GPL-exception-1.0.html", + "referenceNumber": 40, + "name": "Qt GPL exception 1.0", + "licenseExceptionId": "Qt-GPL-exception-1.0", + "seeAlso": [ + "http://code.qt.io/cgit/qt/qtbase.git/tree/LICENSE.GPL3-EXCEPT" + ] + }, + { + "reference": "./Qt-LGPL-exception-1.1.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Qt-LGPL-exception-1.1.html", + "referenceNumber": 45, + "name": "Qt LGPL exception 1.1", + "licenseExceptionId": "Qt-LGPL-exception-1.1", + "seeAlso": [ + "http://code.qt.io/cgit/qt/qtbase.git/tree/LGPL_EXCEPTION.txt" + ] + }, + { + "reference": "./Qwt-exception-1.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Qwt-exception-1.0.html", + "referenceNumber": 49, + "name": "Qwt exception 1.0", + "licenseExceptionId": "Qwt-exception-1.0", + "seeAlso": [ + "http://qwt.sourceforge.net/qwtlicense.html" + ] + }, + { + "reference": "./SANE-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./SANE-exception.html", + "referenceNumber": 48, + "name": "SANE Exception", + "licenseExceptionId": "SANE-exception", + "seeAlso": [ + "https://github.com/alexpevzner/sane-airscan/blob/master/LICENSE", + "https://gitlab.com/sane-project/backends/-/blob/master/sanei/sanei_pp.c?ref_type\u003dheads", + "https://gitlab.com/sane-project/frontends/-/blob/master/sanei/sanei_codec_ascii.c?ref_type\u003dheads" + ] + }, + { + "reference": "./SHL-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./SHL-2.0.html", + "referenceNumber": 33, + "name": "Solderpad Hardware License v2.0", + "licenseExceptionId": "SHL-2.0", + "seeAlso": [ + "https://solderpad.org/licenses/SHL-2.0/" + ] + }, + { + "reference": "./SHL-2.1.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./SHL-2.1.html", + "referenceNumber": 64, + "name": "Solderpad Hardware License v2.1", + "licenseExceptionId": "SHL-2.1", + "seeAlso": [ + "https://solderpad.org/licenses/SHL-2.1/" + ] + }, + { + "reference": "./stunnel-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./stunnel-exception.html", + "referenceNumber": 3, + "name": "stunnel Exception", + "licenseExceptionId": "stunnel-exception", + "seeAlso": [ + "https://github.com/mtrojnar/stunnel/blob/master/COPYING.md" + ] + }, + { + "reference": "./SWI-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./SWI-exception.html", + "referenceNumber": 50, + "name": "SWI exception", + "licenseExceptionId": "SWI-exception", + "seeAlso": [ + "https://github.com/SWI-Prolog/packages-clpqr/blob/bfa80b9270274f0800120d5b8e6fef42ac2dc6a5/clpqr/class.pl" + ] + }, + { + "reference": "./Swift-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Swift-exception.html", + "referenceNumber": 42, + "name": "Swift Exception", + "licenseExceptionId": "Swift-exception", + "seeAlso": [ + "https://swift.org/LICENSE.txt", + "https://github.com/apple/swift-package-manager/blob/7ab2275f447a5eb37497ed63a9340f8a6d1e488b/LICENSE.txt#L205" + ] + }, + { + "reference": "./Texinfo-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Texinfo-exception.html", + "referenceNumber": 36, + "name": "Texinfo exception", + "licenseExceptionId": "Texinfo-exception", + "seeAlso": [ + "https://git.savannah.gnu.org/cgit/automake.git/tree/lib/texinfo.tex?h\u003dv1.16.5#n23" + ] + }, + { + "reference": "./u-boot-exception-2.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./u-boot-exception-2.0.html", + "referenceNumber": 61, + "name": "U-Boot exception 2.0", + "licenseExceptionId": "u-boot-exception-2.0", + "seeAlso": [ + "http://git.denx.de/?p\u003du-boot.git;a\u003dblob;f\u003dLicenses/Exceptions" + ] + }, + { + "reference": "./UBDL-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./UBDL-exception.html", + "referenceNumber": 2, + "name": "Unmodified Binary Distribution exception", + "licenseExceptionId": "UBDL-exception", + "seeAlso": [ + "https://github.com/ipxe/ipxe/blob/master/COPYING.UBDL" + ] + }, + { + "reference": "./Universal-FOSS-exception-1.0.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./Universal-FOSS-exception-1.0.html", + "referenceNumber": 27, + "name": "Universal FOSS Exception, Version 1.0", + "licenseExceptionId": "Universal-FOSS-exception-1.0", + "seeAlso": [ + "https://oss.oracle.com/licenses/universal-foss-exception/" + ] + }, + { + "reference": "./vsftpd-openssl-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./vsftpd-openssl-exception.html", + "referenceNumber": 10, + "name": "vsftpd OpenSSL exception", + "licenseExceptionId": "vsftpd-openssl-exception", + "seeAlso": [ + "https://git.stg.centos.org/source-git/vsftpd/blob/f727873674d9c9cd7afcae6677aa782eb54c8362/f/LICENSE", + "https://launchpad.net/debian/squeeze/+source/vsftpd/+copyright", + "https://github.com/richardcochran/vsftpd/blob/master/COPYING" + ] + }, + { + "reference": "./WxWindows-exception-3.1.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./WxWindows-exception-3.1.html", + "referenceNumber": 4, + "name": "WxWindows Library Exception 3.1", + "licenseExceptionId": "WxWindows-exception-3.1", + "seeAlso": [ + "http://www.opensource.org/licenses/WXwindows" + ] + }, + { + "reference": "./x11vnc-openssl-exception.json", + "isDeprecatedLicenseId": false, + "detailsUrl": "./x11vnc-openssl-exception.html", + "referenceNumber": 55, + "name": "x11vnc OpenSSL Exception", + "licenseExceptionId": "x11vnc-openssl-exception", + "seeAlso": [ + "https://github.com/LibVNC/x11vnc/blob/master/src/8to24.c#L22" + ] + } + ], + "releaseDate": "2024-02-08" +} diff --git a/license-list-data/licenses-3.23.json b/license-list-data/licenses-3.23.json new file mode 100644 index 00000000000..ab676e4ef7c --- /dev/null +++ b/license-list-data/licenses-3.23.json @@ -0,0 +1,7997 @@ +{ + "licenseListVersion": "3.23", + "licenses": [ + { + "reference": "https://spdx.org/licenses/0BSD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/0BSD.json", + "referenceNumber": 78, + "name": "BSD Zero Clause License", + "licenseId": "0BSD", + "seeAlso": [ + "http://landley.net/toybox/license.html", + "https://opensource.org/licenses/0BSD" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/AAL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AAL.json", + "referenceNumber": 433, + "name": "Attribution Assurance License", + "licenseId": "AAL", + "seeAlso": [ + "https://opensource.org/licenses/attribution" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Abstyles.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Abstyles.json", + "referenceNumber": 395, + "name": "Abstyles License", + "licenseId": "Abstyles", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Abstyles" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AdaCore-doc.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AdaCore-doc.json", + "referenceNumber": 108, + "name": "AdaCore Doc License", + "licenseId": "AdaCore-doc", + "seeAlso": [ + "https://github.com/AdaCore/xmlada/blob/master/docs/index.rst", + "https://github.com/AdaCore/gnatcoll-core/blob/master/docs/index.rst", + "https://github.com/AdaCore/gnatcoll-db/blob/master/docs/index.rst" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Adobe-2006.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Adobe-2006.json", + "referenceNumber": 358, + "name": "Adobe Systems Incorporated Source Code License Agreement", + "licenseId": "Adobe-2006", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/AdobeLicense" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Adobe-Display-PostScript.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Adobe-Display-PostScript.json", + "referenceNumber": 272, + "name": "Adobe Display PostScript License", + "licenseId": "Adobe-Display-PostScript", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/xserver/-/blob/master/COPYING?ref_type\u003dheads#L752" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Adobe-Glyph.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Adobe-Glyph.json", + "referenceNumber": 297, + "name": "Adobe Glyph List License", + "licenseId": "Adobe-Glyph", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MIT#AdobeGlyph" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Adobe-Utopia.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Adobe-Utopia.json", + "referenceNumber": 311, + "name": "Adobe Utopia Font License", + "licenseId": "Adobe-Utopia", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/font/adobe-utopia-100dpi/-/blob/master/COPYING?ref_type\u003dheads" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ADSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ADSL.json", + "referenceNumber": 498, + "name": "Amazon Digital Services License", + "licenseId": "ADSL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/AmazonDigitalServicesLicense" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AFL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AFL-1.1.json", + "referenceNumber": 106, + "name": "Academic Free License v1.1", + "licenseId": "AFL-1.1", + "seeAlso": [ + "http://opensource.linux-mirror.org/licenses/afl-1.1.txt", + "http://wayback.archive.org/web/20021004124254/http://www.opensource.org/licenses/academic.php" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AFL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AFL-1.2.json", + "referenceNumber": 628, + "name": "Academic Free License v1.2", + "licenseId": "AFL-1.2", + "seeAlso": [ + "http://opensource.linux-mirror.org/licenses/afl-1.2.txt", + "http://wayback.archive.org/web/20021204204652/http://www.opensource.org/licenses/academic.php" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AFL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AFL-2.0.json", + "referenceNumber": 366, + "name": "Academic Free License v2.0", + "licenseId": "AFL-2.0", + "seeAlso": [ + "http://wayback.archive.org/web/20060924134533/http://www.opensource.org/licenses/afl-2.0.txt" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AFL-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AFL-2.1.json", + "referenceNumber": 220, + "name": "Academic Free License v2.1", + "licenseId": "AFL-2.1", + "seeAlso": [ + "http://opensource.linux-mirror.org/licenses/afl-2.1.txt" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AFL-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AFL-3.0.json", + "referenceNumber": 599, + "name": "Academic Free License v3.0", + "licenseId": "AFL-3.0", + "seeAlso": [ + "http://www.rosenlaw.com/AFL3.0.htm", + "https://opensource.org/licenses/afl-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Afmparse.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Afmparse.json", + "referenceNumber": 172, + "name": "Afmparse License", + "licenseId": "Afmparse", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Afmparse" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AGPL-1.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/AGPL-1.0.json", + "referenceNumber": 374, + "name": "Affero General Public License v1.0", + "licenseId": "AGPL-1.0", + "seeAlso": [ + "http://www.affero.org/oagpl.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AGPL-1.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AGPL-1.0-only.json", + "referenceNumber": 310, + "name": "Affero General Public License v1.0 only", + "licenseId": "AGPL-1.0-only", + "seeAlso": [ + "http://www.affero.org/oagpl.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AGPL-1.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AGPL-1.0-or-later.json", + "referenceNumber": 418, + "name": "Affero General Public License v1.0 or later", + "licenseId": "AGPL-1.0-or-later", + "seeAlso": [ + "http://www.affero.org/oagpl.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AGPL-3.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/AGPL-3.0.json", + "referenceNumber": 631, + "name": "GNU Affero General Public License v3.0", + "licenseId": "AGPL-3.0", + "seeAlso": [ + "https://www.gnu.org/licenses/agpl.txt", + "https://opensource.org/licenses/AGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AGPL-3.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AGPL-3.0-only.json", + "referenceNumber": 495, + "name": "GNU Affero General Public License v3.0 only", + "licenseId": "AGPL-3.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/agpl.txt", + "https://opensource.org/licenses/AGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/AGPL-3.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AGPL-3.0-or-later.json", + "referenceNumber": 228, + "name": "GNU Affero General Public License v3.0 or later", + "licenseId": "AGPL-3.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/agpl.txt", + "https://opensource.org/licenses/AGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Aladdin.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Aladdin.json", + "referenceNumber": 35, + "name": "Aladdin Free Public License", + "licenseId": "Aladdin", + "seeAlso": [ + "http://pages.cs.wisc.edu/~ghost/doc/AFPL/6.01/Public.htm" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/AMDPLPA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AMDPLPA.json", + "referenceNumber": 100, + "name": "AMD\u0027s plpa_map.c License", + "licenseId": "AMDPLPA", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/AMD_plpa_map_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AML.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AML.json", + "referenceNumber": 2, + "name": "Apple MIT License", + "licenseId": "AML", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Apple_MIT_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AML-glslang.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AML-glslang.json", + "referenceNumber": 370, + "name": "AML glslang variant License", + "licenseId": "AML-glslang", + "seeAlso": [ + "https://github.com/KhronosGroup/glslang/blob/main/LICENSE.txt#L949", + "https://docs.omniverse.nvidia.com/install-guide/latest/common/licenses.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/AMPAS.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/AMPAS.json", + "referenceNumber": 267, + "name": "Academy of Motion Picture Arts and Sciences BSD", + "licenseId": "AMPAS", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/BSD#AMPASBSD" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ANTLR-PD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ANTLR-PD.json", + "referenceNumber": 586, + "name": "ANTLR Software Rights Notice", + "licenseId": "ANTLR-PD", + "seeAlso": [ + "http://www.antlr2.org/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ANTLR-PD-fallback.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ANTLR-PD-fallback.json", + "referenceNumber": 133, + "name": "ANTLR Software Rights Notice with license fallback", + "licenseId": "ANTLR-PD-fallback", + "seeAlso": [ + "http://www.antlr2.org/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Apache-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Apache-1.0.json", + "referenceNumber": 463, + "name": "Apache License 1.0", + "licenseId": "Apache-1.0", + "seeAlso": [ + "http://www.apache.org/licenses/LICENSE-1.0" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Apache-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Apache-1.1.json", + "referenceNumber": 627, + "name": "Apache License 1.1", + "licenseId": "Apache-1.1", + "seeAlso": [ + "http://apache.org/licenses/LICENSE-1.1", + "https://opensource.org/licenses/Apache-1.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Apache-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Apache-2.0.json", + "referenceNumber": 501, + "name": "Apache License 2.0", + "licenseId": "Apache-2.0", + "seeAlso": [ + "https://www.apache.org/licenses/LICENSE-2.0", + "https://opensource.org/licenses/Apache-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/APAFML.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APAFML.json", + "referenceNumber": 376, + "name": "Adobe Postscript AFM License", + "licenseId": "APAFML", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/AdobePostscriptAFM" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/APL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APL-1.0.json", + "referenceNumber": 226, + "name": "Adaptive Public License 1.0", + "licenseId": "APL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/APL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/App-s2p.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/App-s2p.json", + "referenceNumber": 123, + "name": "App::s2p License", + "licenseId": "App-s2p", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/App-s2p" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/APSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APSL-1.0.json", + "referenceNumber": 536, + "name": "Apple Public Source License 1.0", + "licenseId": "APSL-1.0", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Apple_Public_Source_License_1.0" + ], + "isOsiApproved": true, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/APSL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APSL-1.1.json", + "referenceNumber": 475, + "name": "Apple Public Source License 1.1", + "licenseId": "APSL-1.1", + "seeAlso": [ + "http://www.opensource.apple.com/source/IOSerialFamily/IOSerialFamily-7/APPLE_LICENSE" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/APSL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APSL-1.2.json", + "referenceNumber": 547, + "name": "Apple Public Source License 1.2", + "licenseId": "APSL-1.2", + "seeAlso": [ + "http://www.samurajdata.se/opensource/mirror/licenses/apsl.php" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/APSL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/APSL-2.0.json", + "referenceNumber": 147, + "name": "Apple Public Source License 2.0", + "licenseId": "APSL-2.0", + "seeAlso": [ + "http://www.opensource.apple.com/license/apsl/" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Arphic-1999.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Arphic-1999.json", + "referenceNumber": 326, + "name": "Arphic Public License", + "licenseId": "Arphic-1999", + "seeAlso": [ + "http://ftp.gnu.org/gnu/non-gnu/chinese-fonts-truetype/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Artistic-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Artistic-1.0.json", + "referenceNumber": 278, + "name": "Artistic License 1.0", + "licenseId": "Artistic-1.0", + "seeAlso": [ + "https://opensource.org/licenses/Artistic-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/Artistic-1.0-cl8.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Artistic-1.0-cl8.json", + "referenceNumber": 234, + "name": "Artistic License 1.0 w/clause 8", + "licenseId": "Artistic-1.0-cl8", + "seeAlso": [ + "https://opensource.org/licenses/Artistic-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Artistic-1.0-Perl.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Artistic-1.0-Perl.json", + "referenceNumber": 634, + "name": "Artistic License 1.0 (Perl)", + "licenseId": "Artistic-1.0-Perl", + "seeAlso": [ + "http://dev.perl.org/licenses/artistic.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Artistic-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Artistic-2.0.json", + "referenceNumber": 222, + "name": "Artistic License 2.0", + "licenseId": "Artistic-2.0", + "seeAlso": [ + "http://www.perlfoundation.org/artistic_license_2_0", + "https://www.perlfoundation.org/artistic-license-20.html", + "https://opensource.org/licenses/artistic-license-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ASWF-Digital-Assets-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ASWF-Digital-Assets-1.0.json", + "referenceNumber": 64, + "name": "ASWF Digital Assets License version 1.0", + "licenseId": "ASWF-Digital-Assets-1.0", + "seeAlso": [ + "https://github.com/AcademySoftwareFoundation/foundation/blob/main/digital_assets/aswf_digital_assets_license_v1.0.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ASWF-Digital-Assets-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ASWF-Digital-Assets-1.1.json", + "referenceNumber": 8, + "name": "ASWF Digital Assets License 1.1", + "licenseId": "ASWF-Digital-Assets-1.1", + "seeAlso": [ + "https://github.com/AcademySoftwareFoundation/foundation/blob/main/digital_assets/aswf_digital_assets_license_v1.1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Baekmuk.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Baekmuk.json", + "referenceNumber": 512, + "name": "Baekmuk License", + "licenseId": "Baekmuk", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:Baekmuk?rd\u003dLicensing/Baekmuk" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Bahyph.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Bahyph.json", + "referenceNumber": 57, + "name": "Bahyph License", + "licenseId": "Bahyph", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Bahyph" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Barr.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Barr.json", + "referenceNumber": 425, + "name": "Barr License", + "licenseId": "Barr", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Barr" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/bcrypt-Solar-Designer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/bcrypt-Solar-Designer.json", + "referenceNumber": 166, + "name": "bcrypt Solar Designer License", + "licenseId": "bcrypt-Solar-Designer", + "seeAlso": [ + "https://github.com/bcrypt-ruby/bcrypt-ruby/blob/master/ext/mri/crypt_blowfish.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Beerware.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Beerware.json", + "referenceNumber": 50, + "name": "Beerware License", + "licenseId": "Beerware", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Beerware", + "https://people.freebsd.org/~phk/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Bitstream-Charter.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Bitstream-Charter.json", + "referenceNumber": 236, + "name": "Bitstream Charter Font License", + "licenseId": "Bitstream-Charter", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Charter#License_Text", + "https://raw.githubusercontent.com/blackhole89/notekit/master/data/fonts/Charter%20license.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Bitstream-Vera.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Bitstream-Vera.json", + "referenceNumber": 421, + "name": "Bitstream Vera Font License", + "licenseId": "Bitstream-Vera", + "seeAlso": [ + "https://web.archive.org/web/20080207013128/http://www.gnome.org/fonts/", + "https://docubrain.com/sites/default/files/licenses/bitstream-vera.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BitTorrent-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BitTorrent-1.0.json", + "referenceNumber": 602, + "name": "BitTorrent Open Source License v1.0", + "licenseId": "BitTorrent-1.0", + "seeAlso": [ + "http://sources.gentoo.org/cgi-bin/viewvc.cgi/gentoo-x86/licenses/BitTorrent?r1\u003d1.1\u0026r2\u003d1.1.1.1\u0026diff_format\u003ds" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BitTorrent-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BitTorrent-1.1.json", + "referenceNumber": 161, + "name": "BitTorrent Open Source License v1.1", + "licenseId": "BitTorrent-1.1", + "seeAlso": [ + "http://directory.fsf.org/wiki/License:BitTorrentOSL1.1" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/blessing.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/blessing.json", + "referenceNumber": 618, + "name": "SQLite Blessing", + "licenseId": "blessing", + "seeAlso": [ + "https://www.sqlite.org/src/artifact/e33a4df7e32d742a?ln\u003d4-9", + "https://sqlite.org/src/artifact/df5091916dbb40e6" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BlueOak-1.0.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BlueOak-1.0.0.json", + "referenceNumber": 570, + "name": "Blue Oak Model License 1.0.0", + "licenseId": "BlueOak-1.0.0", + "seeAlso": [ + "https://blueoakcouncil.org/license/1.0.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Boehm-GC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Boehm-GC.json", + "referenceNumber": 15, + "name": "Boehm-Demers-Weiser GC License", + "licenseId": "Boehm-GC", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:MIT#Another_Minimal_variant_(found_in_libatomic_ops)", + "https://github.com/uim/libgcroots/blob/master/COPYING", + "https://github.com/ivmai/libatomic_ops/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Borceux.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Borceux.json", + "referenceNumber": 113, + "name": "Borceux license", + "licenseId": "Borceux", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Borceux" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Brian-Gladman-2-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Brian-Gladman-2-Clause.json", + "referenceNumber": 316, + "name": "Brian Gladman 2-Clause License", + "licenseId": "Brian-Gladman-2-Clause", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L140-L156", + "https://web.mit.edu/kerberos/krb5-1.21/doc/mitK5license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Brian-Gladman-3-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Brian-Gladman-3-Clause.json", + "referenceNumber": 444, + "name": "Brian Gladman 3-Clause License", + "licenseId": "Brian-Gladman-3-Clause", + "seeAlso": [ + "https://github.com/SWI-Prolog/packages-clib/blob/master/sha1/brg_endian.h" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-1-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-1-Clause.json", + "referenceNumber": 308, + "name": "BSD 1-Clause License", + "licenseId": "BSD-1-Clause", + "seeAlso": [ + "https://svnweb.freebsd.org/base/head/include/ifaddrs.h?revision\u003d326823" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause.json", + "referenceNumber": 232, + "name": "BSD 2-Clause \"Simplified\" License", + "licenseId": "BSD-2-Clause", + "seeAlso": [ + "https://opensource.org/licenses/BSD-2-Clause" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-Darwin.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-Darwin.json", + "referenceNumber": 555, + "name": "BSD 2-Clause - Ian Darwin variant", + "licenseId": "BSD-2-Clause-Darwin", + "seeAlso": [ + "https://github.com/file/file/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-FreeBSD.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-FreeBSD.json", + "referenceNumber": 56, + "name": "BSD 2-Clause FreeBSD License", + "licenseId": "BSD-2-Clause-FreeBSD", + "seeAlso": [ + "http://www.freebsd.org/copyright/freebsd-license.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-NetBSD.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-NetBSD.json", + "referenceNumber": 530, + "name": "BSD 2-Clause NetBSD License", + "licenseId": "BSD-2-Clause-NetBSD", + "seeAlso": [ + "http://www.netbsd.org/about/redistribution.html#default" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-Patent.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-Patent.json", + "referenceNumber": 200, + "name": "BSD-2-Clause Plus Patent License", + "licenseId": "BSD-2-Clause-Patent", + "seeAlso": [ + "https://opensource.org/licenses/BSDplusPatent" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/BSD-2-Clause-Views.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-2-Clause-Views.json", + "referenceNumber": 539, + "name": "BSD 2-Clause with views sentence", + "licenseId": "BSD-2-Clause-Views", + "seeAlso": [ + "http://www.freebsd.org/copyright/freebsd-license.html", + "https://people.freebsd.org/~ivoras/wine/patch-wine-nvidia.sh", + "https://github.com/protegeproject/protege/blob/master/license.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause.json", + "referenceNumber": 409, + "name": "BSD 3-Clause \"New\" or \"Revised\" License", + "licenseId": "BSD-3-Clause", + "seeAlso": [ + "https://opensource.org/licenses/BSD-3-Clause", + "https://www.eclipse.org/org/documents/edl-v10.php" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-acpica.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-acpica.json", + "referenceNumber": 306, + "name": "BSD 3-Clause acpica variant", + "licenseId": "BSD-3-Clause-acpica", + "seeAlso": [ + "https://github.com/acpica/acpica/blob/master/source/common/acfileio.c#L119" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-Attribution.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Attribution.json", + "referenceNumber": 127, + "name": "BSD with attribution", + "licenseId": "BSD-3-Clause-Attribution", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/BSD_with_Attribution" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-Clear.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Clear.json", + "referenceNumber": 251, + "name": "BSD 3-Clause Clear License", + "licenseId": "BSD-3-Clause-Clear", + "seeAlso": [ + "http://labs.metacarta.com/license-explanation.html#license" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-flex.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-flex.json", + "referenceNumber": 388, + "name": "BSD 3-Clause Flex variant", + "licenseId": "BSD-3-Clause-flex", + "seeAlso": [ + "https://github.com/westes/flex/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-HP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-HP.json", + "referenceNumber": 189, + "name": "Hewlett-Packard BSD variant license", + "licenseId": "BSD-3-Clause-HP", + "seeAlso": [ + "https://github.com/zdohnal/hplip/blob/master/COPYING#L939" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-LBNL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-LBNL.json", + "referenceNumber": 377, + "name": "Lawrence Berkeley National Labs BSD variant license", + "licenseId": "BSD-3-Clause-LBNL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/LBNLBSD" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-Modification.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Modification.json", + "referenceNumber": 89, + "name": "BSD 3-Clause Modification", + "licenseId": "BSD-3-Clause-Modification", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:BSD#Modification_Variant" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Military-License.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Military-License.json", + "referenceNumber": 216, + "name": "BSD 3-Clause No Military License", + "licenseId": "BSD-3-Clause-No-Military-License", + "seeAlso": [ + "https://gitlab.syncad.com/hive/dhive/-/blob/master/LICENSE", + "https://github.com/greymass/swift-eosio/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License.json", + "referenceNumber": 192, + "name": "BSD 3-Clause No Nuclear License", + "licenseId": "BSD-3-Clause-No-Nuclear-License", + "seeAlso": [ + "http://download.oracle.com/otn-pub/java/licenses/bsd.txt?AuthParam\u003d1467140197_43d516ce1776bd08a58235a7785be1cc" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License-2014.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-License-2014.json", + "referenceNumber": 249, + "name": "BSD 3-Clause No Nuclear License 2014", + "licenseId": "BSD-3-Clause-No-Nuclear-License-2014", + "seeAlso": [ + "https://java.net/projects/javaeetutorial/pages/BerkeleyLicense" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-Warranty.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-No-Nuclear-Warranty.json", + "referenceNumber": 437, + "name": "BSD 3-Clause No Nuclear Warranty", + "licenseId": "BSD-3-Clause-No-Nuclear-Warranty", + "seeAlso": [ + "https://jogamp.org/git/?p\u003dgluegen.git;a\u003dblob_plain;f\u003dLICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-Open-MPI.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Open-MPI.json", + "referenceNumber": 424, + "name": "BSD 3-Clause Open MPI variant", + "licenseId": "BSD-3-Clause-Open-MPI", + "seeAlso": [ + "https://www.open-mpi.org/community/license.php", + "http://www.netlib.org/lapack/LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-3-Clause-Sun.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-3-Clause-Sun.json", + "referenceNumber": 596, + "name": "BSD 3-Clause Sun Microsystems", + "licenseId": "BSD-3-Clause-Sun", + "seeAlso": [ + "https://github.com/xmlark/msv/blob/b9316e2f2270bc1606952ea4939ec87fbba157f3/xsdlib/src/main/java/com/sun/msv/datatype/regexp/InternalImpl.java" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-4-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-4-Clause.json", + "referenceNumber": 453, + "name": "BSD 4-Clause \"Original\" or \"Old\" License", + "licenseId": "BSD-4-Clause", + "seeAlso": [ + "http://directory.fsf.org/wiki/License:BSD_4Clause" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BSD-4-Clause-Shortened.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-4-Clause-Shortened.json", + "referenceNumber": 46, + "name": "BSD 4 Clause Shortened", + "licenseId": "BSD-4-Clause-Shortened", + "seeAlso": [ + "https://metadata.ftp-master.debian.org/changelogs//main/a/arpwatch/arpwatch_2.1a15-7_copyright" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-4-Clause-UC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-4-Clause-UC.json", + "referenceNumber": 350, + "name": "BSD-4-Clause (University of California-Specific)", + "licenseId": "BSD-4-Clause-UC", + "seeAlso": [ + "http://www.freebsd.org/copyright/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-4.3RENO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-4.3RENO.json", + "referenceNumber": 558, + "name": "BSD 4.3 RENO License", + "licenseId": "BSD-4.3RENO", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dbinutils-gdb.git;a\u003dblob;f\u003dlibiberty/strcasecmp.c;h\u003d131d81c2ce7881fa48c363dc5bf5fb302c61ce0b;hb\u003dHEAD", + "https://git.openldap.org/openldap/openldap/-/blob/master/COPYRIGHT#L55-63" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-4.3TAHOE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-4.3TAHOE.json", + "referenceNumber": 372, + "name": "BSD 4.3 TAHOE License", + "licenseId": "BSD-4.3TAHOE", + "seeAlso": [ + "https://github.com/389ds/389-ds-base/blob/main/ldap/include/sysexits-compat.h#L15", + "https://git.savannah.gnu.org/cgit/indent.git/tree/doc/indent.texi?id\u003da74c6b4ee49397cf330b333da1042bffa60ed14f#n1788" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Advertising-Acknowledgement.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Advertising-Acknowledgement.json", + "referenceNumber": 466, + "name": "BSD Advertising Acknowledgement License", + "licenseId": "BSD-Advertising-Acknowledgement", + "seeAlso": [ + "https://github.com/python-excel/xlrd/blob/master/LICENSE#L33" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Attribution-HPND-disclaimer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Attribution-HPND-disclaimer.json", + "referenceNumber": 434, + "name": "BSD with Attribution and HPND disclaimer", + "licenseId": "BSD-Attribution-HPND-disclaimer", + "seeAlso": [ + "https://github.com/cyrusimap/cyrus-sasl/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Inferno-Nettverk.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Inferno-Nettverk.json", + "referenceNumber": 423, + "name": "BSD-Inferno-Nettverk", + "licenseId": "BSD-Inferno-Nettverk", + "seeAlso": [ + "https://www.inet.no/dante/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Protection.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Protection.json", + "referenceNumber": 569, + "name": "BSD Protection License", + "licenseId": "BSD-Protection", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/BSD_Protection_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Source-beginning-file.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Source-beginning-file.json", + "referenceNumber": 486, + "name": "BSD Source Code Attribution - beginning of file variant", + "licenseId": "BSD-Source-beginning-file", + "seeAlso": [ + "https://github.com/lattera/freebsd/blob/master/sys/cam/cam.c#L4" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Source-Code.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Source-Code.json", + "referenceNumber": 36, + "name": "BSD Source Code Attribution", + "licenseId": "BSD-Source-Code", + "seeAlso": [ + "https://github.com/robbiehanson/CocoaHTTPServer/blob/master/LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Systemics.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Systemics.json", + "referenceNumber": 260, + "name": "Systemics BSD variant license", + "licenseId": "BSD-Systemics", + "seeAlso": [ + "https://metacpan.org/release/DPARIS/Crypt-DES-2.07/source/COPYRIGHT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSD-Systemics-W3Works.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSD-Systemics-W3Works.json", + "referenceNumber": 398, + "name": "Systemics W3Works BSD variant license", + "licenseId": "BSD-Systemics-W3Works", + "seeAlso": [ + "https://metacpan.org/release/DPARIS/Crypt-Blowfish-2.14/source/COPYRIGHT#L7" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/BSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BSL-1.0.json", + "referenceNumber": 600, + "name": "Boost Software License 1.0", + "licenseId": "BSL-1.0", + "seeAlso": [ + "http://www.boost.org/LICENSE_1_0.txt", + "https://opensource.org/licenses/BSL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/BUSL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/BUSL-1.1.json", + "referenceNumber": 380, + "name": "Business Source License 1.1", + "licenseId": "BUSL-1.1", + "seeAlso": [ + "https://mariadb.com/bsl11/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/bzip2-1.0.5.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/bzip2-1.0.5.json", + "referenceNumber": 283, + "name": "bzip2 and libbzip2 License v1.0.5", + "licenseId": "bzip2-1.0.5", + "seeAlso": [ + "https://sourceware.org/bzip2/1.0.5/bzip2-manual-1.0.5.html", + "http://bzip.org/1.0.5/bzip2-manual-1.0.5.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/bzip2-1.0.6.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/bzip2-1.0.6.json", + "referenceNumber": 206, + "name": "bzip2 and libbzip2 License v1.0.6", + "licenseId": "bzip2-1.0.6", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dbzip2.git;a\u003dblob;f\u003dLICENSE;hb\u003dbzip2-1.0.6", + "http://bzip.org/1.0.5/bzip2-manual-1.0.5.html", + "https://sourceware.org/cgit/valgrind/tree/mpi/libmpiwrap.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/C-UDA-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/C-UDA-1.0.json", + "referenceNumber": 551, + "name": "Computational Use of Data Agreement v1.0", + "licenseId": "C-UDA-1.0", + "seeAlso": [ + "https://github.com/microsoft/Computational-Use-of-Data-Agreement/blob/master/C-UDA-1.0.md", + "https://cdla.dev/computational-use-of-data-agreement-v1-0/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CAL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CAL-1.0.json", + "referenceNumber": 630, + "name": "Cryptographic Autonomy License 1.0", + "licenseId": "CAL-1.0", + "seeAlso": [ + "http://cryptographicautonomylicense.com/license-text.html", + "https://opensource.org/licenses/CAL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CAL-1.0-Combined-Work-Exception.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CAL-1.0-Combined-Work-Exception.json", + "referenceNumber": 158, + "name": "Cryptographic Autonomy License 1.0 (Combined Work Exception)", + "licenseId": "CAL-1.0-Combined-Work-Exception", + "seeAlso": [ + "http://cryptographicautonomylicense.com/license-text.html", + "https://opensource.org/licenses/CAL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Caldera.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Caldera.json", + "referenceNumber": 282, + "name": "Caldera License", + "licenseId": "Caldera", + "seeAlso": [ + "http://www.lemis.com/grog/UNIX/ancient-source-all.pdf" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Caldera-no-preamble.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Caldera-no-preamble.json", + "referenceNumber": 262, + "name": "Caldera License (without preamble)", + "licenseId": "Caldera-no-preamble", + "seeAlso": [ + "https://github.com/apache/apr/blob/trunk/LICENSE#L298C6-L298C29" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CATOSL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CATOSL-1.1.json", + "referenceNumber": 319, + "name": "Computer Associates Trusted Open Source License 1.1", + "licenseId": "CATOSL-1.1", + "seeAlso": [ + "https://opensource.org/licenses/CATOSL-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CC-BY-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-1.0.json", + "referenceNumber": 384, + "name": "Creative Commons Attribution 1.0 Generic", + "licenseId": "CC-BY-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by/1.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-2.0.json", + "referenceNumber": 69, + "name": "Creative Commons Attribution 2.0 Generic", + "licenseId": "CC-BY-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by/2.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-2.5.json", + "referenceNumber": 482, + "name": "Creative Commons Attribution 2.5 Generic", + "licenseId": "CC-BY-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by/2.5/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-2.5-AU.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-2.5-AU.json", + "referenceNumber": 348, + "name": "Creative Commons Attribution 2.5 Australia", + "licenseId": "CC-BY-2.5-AU", + "seeAlso": [ + "https://creativecommons.org/licenses/by/2.5/au/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0.json", + "referenceNumber": 562, + "name": "Creative Commons Attribution 3.0 Unported", + "licenseId": "CC-BY-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-AT.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-AT.json", + "referenceNumber": 314, + "name": "Creative Commons Attribution 3.0 Austria", + "licenseId": "CC-BY-3.0-AT", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/at/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-AU.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-AU.json", + "referenceNumber": 235, + "name": "Creative Commons Attribution 3.0 Australia", + "licenseId": "CC-BY-3.0-AU", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/au/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-DE.json", + "referenceNumber": 110, + "name": "Creative Commons Attribution 3.0 Germany", + "licenseId": "CC-BY-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-IGO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-IGO.json", + "referenceNumber": 359, + "name": "Creative Commons Attribution 3.0 IGO", + "licenseId": "CC-BY-3.0-IGO", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/igo/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-NL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-NL.json", + "referenceNumber": 130, + "name": "Creative Commons Attribution 3.0 Netherlands", + "licenseId": "CC-BY-3.0-NL", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/nl/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-3.0-US.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-3.0-US.json", + "referenceNumber": 38, + "name": "Creative Commons Attribution 3.0 United States", + "licenseId": "CC-BY-3.0-US", + "seeAlso": [ + "https://creativecommons.org/licenses/by/3.0/us/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-4.0.json", + "referenceNumber": 122, + "name": "Creative Commons Attribution 4.0 International", + "licenseId": "CC-BY-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by/4.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-1.0.json", + "referenceNumber": 29, + "name": "Creative Commons Attribution Non Commercial 1.0 Generic", + "licenseId": "CC-BY-NC-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/1.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-2.0.json", + "referenceNumber": 588, + "name": "Creative Commons Attribution Non Commercial 2.0 Generic", + "licenseId": "CC-BY-NC-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/2.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-2.5.json", + "referenceNumber": 400, + "name": "Creative Commons Attribution Non Commercial 2.5 Generic", + "licenseId": "CC-BY-NC-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/2.5/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-3.0.json", + "referenceNumber": 104, + "name": "Creative Commons Attribution Non Commercial 3.0 Unported", + "licenseId": "CC-BY-NC-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/3.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-3.0-DE.json", + "referenceNumber": 351, + "name": "Creative Commons Attribution Non Commercial 3.0 Germany", + "licenseId": "CC-BY-NC-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-4.0.json", + "referenceNumber": 353, + "name": "Creative Commons Attribution Non Commercial 4.0 International", + "licenseId": "CC-BY-NC-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc/4.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-1.0.json", + "referenceNumber": 454, + "name": "Creative Commons Attribution Non Commercial No Derivatives 1.0 Generic", + "licenseId": "CC-BY-NC-ND-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd-nc/1.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-2.0.json", + "referenceNumber": 53, + "name": "Creative Commons Attribution Non Commercial No Derivatives 2.0 Generic", + "licenseId": "CC-BY-NC-ND-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/2.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-2.5.json", + "referenceNumber": 328, + "name": "Creative Commons Attribution Non Commercial No Derivatives 2.5 Generic", + "licenseId": "CC-BY-NC-ND-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/2.5/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-3.0.json", + "referenceNumber": 70, + "name": "Creative Commons Attribution Non Commercial No Derivatives 3.0 Unported", + "licenseId": "CC-BY-NC-ND-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/3.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-DE.json", + "referenceNumber": 47, + "name": "Creative Commons Attribution Non Commercial No Derivatives 3.0 Germany", + "licenseId": "CC-BY-NC-ND-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-IGO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-3.0-IGO.json", + "referenceNumber": 213, + "name": "Creative Commons Attribution Non Commercial No Derivatives 3.0 IGO", + "licenseId": "CC-BY-NC-ND-3.0-IGO", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/3.0/igo/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-ND-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-ND-4.0.json", + "referenceNumber": 550, + "name": "Creative Commons Attribution Non Commercial No Derivatives 4.0 International", + "licenseId": "CC-BY-NC-ND-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-1.0.json", + "referenceNumber": 99, + "name": "Creative Commons Attribution Non Commercial Share Alike 1.0 Generic", + "licenseId": "CC-BY-NC-SA-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/1.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0.json", + "referenceNumber": 491, + "name": "Creative Commons Attribution Non Commercial Share Alike 2.0 Generic", + "licenseId": "CC-BY-NC-SA-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/2.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-DE.json", + "referenceNumber": 246, + "name": "Creative Commons Attribution Non Commercial Share Alike 2.0 Germany", + "licenseId": "CC-BY-NC-SA-2.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/2.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-FR.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-FR.json", + "referenceNumber": 368, + "name": "Creative Commons Attribution-NonCommercial-ShareAlike 2.0 France", + "licenseId": "CC-BY-NC-SA-2.0-FR", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/2.0/fr/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-UK.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.0-UK.json", + "referenceNumber": 451, + "name": "Creative Commons Attribution Non Commercial Share Alike 2.0 England and Wales", + "licenseId": "CC-BY-NC-SA-2.0-UK", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/2.0/uk/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-2.5.json", + "referenceNumber": 352, + "name": "Creative Commons Attribution Non Commercial Share Alike 2.5 Generic", + "licenseId": "CC-BY-NC-SA-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/2.5/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-3.0.json", + "referenceNumber": 41, + "name": "Creative Commons Attribution Non Commercial Share Alike 3.0 Unported", + "licenseId": "CC-BY-NC-SA-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/3.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-DE.json", + "referenceNumber": 582, + "name": "Creative Commons Attribution Non Commercial Share Alike 3.0 Germany", + "licenseId": "CC-BY-NC-SA-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-IGO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-3.0-IGO.json", + "referenceNumber": 205, + "name": "Creative Commons Attribution Non Commercial Share Alike 3.0 IGO", + "licenseId": "CC-BY-NC-SA-3.0-IGO", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/3.0/igo/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-NC-SA-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-NC-SA-4.0.json", + "referenceNumber": 610, + "name": "Creative Commons Attribution Non Commercial Share Alike 4.0 International", + "licenseId": "CC-BY-NC-SA-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-1.0.json", + "referenceNumber": 18, + "name": "Creative Commons Attribution No Derivatives 1.0 Generic", + "licenseId": "CC-BY-ND-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/1.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-2.0.json", + "referenceNumber": 614, + "name": "Creative Commons Attribution No Derivatives 2.0 Generic", + "licenseId": "CC-BY-ND-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/2.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-2.5.json", + "referenceNumber": 540, + "name": "Creative Commons Attribution No Derivatives 2.5 Generic", + "licenseId": "CC-BY-ND-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/2.5/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-3.0.json", + "referenceNumber": 544, + "name": "Creative Commons Attribution No Derivatives 3.0 Unported", + "licenseId": "CC-BY-ND-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/3.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-3.0-DE.json", + "referenceNumber": 355, + "name": "Creative Commons Attribution No Derivatives 3.0 Germany", + "licenseId": "CC-BY-ND-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-ND-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-ND-4.0.json", + "referenceNumber": 545, + "name": "Creative Commons Attribution No Derivatives 4.0 International", + "licenseId": "CC-BY-ND-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-nd/4.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-1.0.json", + "referenceNumber": 242, + "name": "Creative Commons Attribution Share Alike 1.0 Generic", + "licenseId": "CC-BY-SA-1.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/1.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.0.json", + "referenceNumber": 349, + "name": "Creative Commons Attribution Share Alike 2.0 Generic", + "licenseId": "CC-BY-SA-2.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/2.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-2.0-UK.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.0-UK.json", + "referenceNumber": 197, + "name": "Creative Commons Attribution Share Alike 2.0 England and Wales", + "licenseId": "CC-BY-SA-2.0-UK", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/2.0/uk/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-2.1-JP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.1-JP.json", + "referenceNumber": 162, + "name": "Creative Commons Attribution Share Alike 2.1 Japan", + "licenseId": "CC-BY-SA-2.1-JP", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/2.1/jp/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-2.5.json", + "referenceNumber": 626, + "name": "Creative Commons Attribution Share Alike 2.5 Generic", + "licenseId": "CC-BY-SA-2.5", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/2.5/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0.json", + "referenceNumber": 244, + "name": "Creative Commons Attribution Share Alike 3.0 Unported", + "licenseId": "CC-BY-SA-3.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/3.0/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-3.0-AT.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0-AT.json", + "referenceNumber": 292, + "name": "Creative Commons Attribution Share Alike 3.0 Austria", + "licenseId": "CC-BY-SA-3.0-AT", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/3.0/at/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-3.0-DE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0-DE.json", + "referenceNumber": 317, + "name": "Creative Commons Attribution Share Alike 3.0 Germany", + "licenseId": "CC-BY-SA-3.0-DE", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/3.0/de/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-3.0-IGO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-3.0-IGO.json", + "referenceNumber": 139, + "name": "Creative Commons Attribution-ShareAlike 3.0 IGO", + "licenseId": "CC-BY-SA-3.0-IGO", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/3.0/igo/legalcode" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC-BY-SA-4.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-BY-SA-4.0.json", + "referenceNumber": 438, + "name": "Creative Commons Attribution Share Alike 4.0 International", + "licenseId": "CC-BY-SA-4.0", + "seeAlso": [ + "https://creativecommons.org/licenses/by-sa/4.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CC-PDDC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC-PDDC.json", + "referenceNumber": 291, + "name": "Creative Commons Public Domain Dedication and Certification", + "licenseId": "CC-PDDC", + "seeAlso": [ + "https://creativecommons.org/licenses/publicdomain/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CC0-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CC0-1.0.json", + "referenceNumber": 285, + "name": "Creative Commons Zero v1.0 Universal", + "licenseId": "CC0-1.0", + "seeAlso": [ + "https://creativecommons.org/publicdomain/zero/1.0/legalcode" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CDDL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDDL-1.0.json", + "referenceNumber": 154, + "name": "Common Development and Distribution License 1.0", + "licenseId": "CDDL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/cddl1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CDDL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDDL-1.1.json", + "referenceNumber": 529, + "name": "Common Development and Distribution License 1.1", + "licenseId": "CDDL-1.1", + "seeAlso": [ + "http://glassfish.java.net/public/CDDL+GPL_1_1.html", + "https://javaee.github.io/glassfish/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CDL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDL-1.0.json", + "referenceNumber": 243, + "name": "Common Documentation License 1.0", + "licenseId": "CDL-1.0", + "seeAlso": [ + "http://www.opensource.apple.com/cdl/", + "https://fedoraproject.org/wiki/Licensing/Common_Documentation_License", + "https://www.gnu.org/licenses/license-list.html#ACDL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CDLA-Permissive-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDLA-Permissive-1.0.json", + "referenceNumber": 477, + "name": "Community Data License Agreement Permissive 1.0", + "licenseId": "CDLA-Permissive-1.0", + "seeAlso": [ + "https://cdla.io/permissive-1-0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CDLA-Permissive-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDLA-Permissive-2.0.json", + "referenceNumber": 335, + "name": "Community Data License Agreement Permissive 2.0", + "licenseId": "CDLA-Permissive-2.0", + "seeAlso": [ + "https://cdla.dev/permissive-2-0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CDLA-Sharing-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CDLA-Sharing-1.0.json", + "referenceNumber": 548, + "name": "Community Data License Agreement Sharing 1.0", + "licenseId": "CDLA-Sharing-1.0", + "seeAlso": [ + "https://cdla.io/sharing-1-0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CECILL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-1.0.json", + "referenceNumber": 60, + "name": "CeCILL Free Software License Agreement v1.0", + "licenseId": "CECILL-1.0", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL_V1-fr.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CECILL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-1.1.json", + "referenceNumber": 344, + "name": "CeCILL Free Software License Agreement v1.1", + "licenseId": "CECILL-1.1", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL_V1.1-US.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CECILL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-2.0.json", + "referenceNumber": 410, + "name": "CeCILL Free Software License Agreement v2.0", + "licenseId": "CECILL-2.0", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL_V2-en.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CECILL-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-2.1.json", + "referenceNumber": 174, + "name": "CeCILL Free Software License Agreement v2.1", + "licenseId": "CECILL-2.1", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CECILL-B.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-B.json", + "referenceNumber": 256, + "name": "CeCILL-B Free Software License Agreement", + "licenseId": "CECILL-B", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CECILL-C.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CECILL-C.json", + "referenceNumber": 52, + "name": "CeCILL-C Free Software License Agreement", + "licenseId": "CECILL-C", + "seeAlso": [ + "http://www.cecill.info/licences/Licence_CeCILL-C_V1-en.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CERN-OHL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CERN-OHL-1.1.json", + "referenceNumber": 615, + "name": "CERN Open Hardware Licence v1.1", + "licenseId": "CERN-OHL-1.1", + "seeAlso": [ + "https://www.ohwr.org/project/licenses/wikis/cern-ohl-v1.1" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CERN-OHL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CERN-OHL-1.2.json", + "referenceNumber": 324, + "name": "CERN Open Hardware Licence v1.2", + "licenseId": "CERN-OHL-1.2", + "seeAlso": [ + "https://www.ohwr.org/project/licenses/wikis/cern-ohl-v1.2" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CERN-OHL-P-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CERN-OHL-P-2.0.json", + "referenceNumber": 402, + "name": "CERN Open Hardware Licence Version 2 - Permissive", + "licenseId": "CERN-OHL-P-2.0", + "seeAlso": [ + "https://www.ohwr.org/project/cernohl/wikis/Documents/CERN-OHL-version-2" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CERN-OHL-S-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CERN-OHL-S-2.0.json", + "referenceNumber": 513, + "name": "CERN Open Hardware Licence Version 2 - Strongly Reciprocal", + "licenseId": "CERN-OHL-S-2.0", + "seeAlso": [ + "https://www.ohwr.org/project/cernohl/wikis/Documents/CERN-OHL-version-2" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CERN-OHL-W-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CERN-OHL-W-2.0.json", + "referenceNumber": 237, + "name": "CERN Open Hardware Licence Version 2 - Weakly Reciprocal", + "licenseId": "CERN-OHL-W-2.0", + "seeAlso": [ + "https://www.ohwr.org/project/cernohl/wikis/Documents/CERN-OHL-version-2" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CFITSIO.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CFITSIO.json", + "referenceNumber": 151, + "name": "CFITSIO License", + "licenseId": "CFITSIO", + "seeAlso": [ + "https://heasarc.gsfc.nasa.gov/docs/software/fitsio/c/f_user/node9.html", + "https://heasarc.gsfc.nasa.gov/docs/software/ftools/fv/doc/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/check-cvs.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/check-cvs.json", + "referenceNumber": 334, + "name": "check-cvs License", + "licenseId": "check-cvs", + "seeAlso": [ + "http://cvs.savannah.gnu.org/viewvc/cvs/ccvs/contrib/check_cvs.in?revision\u003d1.1.4.3\u0026view\u003dmarkup\u0026pathrev\u003dcvs1-11-23#l2" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/checkmk.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/checkmk.json", + "referenceNumber": 111, + "name": "Checkmk License", + "licenseId": "checkmk", + "seeAlso": [ + "https://github.com/libcheck/check/blob/master/checkmk/checkmk.in" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ClArtistic.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ClArtistic.json", + "referenceNumber": 441, + "name": "Clarified Artistic License", + "licenseId": "ClArtistic", + "seeAlso": [ + "http://gianluca.dellavedova.org/2011/01/03/clarified-artistic-license/", + "http://www.ncftp.com/ncftp/doc/LICENSE.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Clips.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Clips.json", + "referenceNumber": 167, + "name": "Clips License", + "licenseId": "Clips", + "seeAlso": [ + "https://github.com/DrItanium/maya/blob/master/LICENSE.CLIPS" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CMU-Mach.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CMU-Mach.json", + "referenceNumber": 492, + "name": "CMU Mach License", + "licenseId": "CMU-Mach", + "seeAlso": [ + "https://www.cs.cmu.edu/~410/licenses.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CMU-Mach-nodoc.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CMU-Mach-nodoc.json", + "referenceNumber": 318, + "name": "CMU Mach - no notices-in-documentation variant", + "licenseId": "CMU-Mach-nodoc", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L718-L728", + "https://web.mit.edu/kerberos/krb5-1.21/doc/mitK5license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CNRI-Jython.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CNRI-Jython.json", + "referenceNumber": 203, + "name": "CNRI Jython License", + "licenseId": "CNRI-Jython", + "seeAlso": [ + "http://www.jython.org/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CNRI-Python.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CNRI-Python.json", + "referenceNumber": 218, + "name": "CNRI Python License", + "licenseId": "CNRI-Python", + "seeAlso": [ + "https://opensource.org/licenses/CNRI-Python" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/CNRI-Python-GPL-Compatible.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CNRI-Python-GPL-Compatible.json", + "referenceNumber": 391, + "name": "CNRI Python Open Source GPL Compatible License Agreement", + "licenseId": "CNRI-Python-GPL-Compatible", + "seeAlso": [ + "http://www.python.org/download/releases/1.6.1/download_win/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/COIL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/COIL-1.0.json", + "referenceNumber": 375, + "name": "Copyfree Open Innovation License", + "licenseId": "COIL-1.0", + "seeAlso": [ + "https://coil.apotheon.org/plaintext/01.0.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Community-Spec-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Community-Spec-1.0.json", + "referenceNumber": 357, + "name": "Community Specification License 1.0", + "licenseId": "Community-Spec-1.0", + "seeAlso": [ + "https://github.com/CommunitySpecification/1.0/blob/master/1._Community_Specification_License-v1.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Condor-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Condor-1.1.json", + "referenceNumber": 385, + "name": "Condor Public License v1.1", + "licenseId": "Condor-1.1", + "seeAlso": [ + "http://research.cs.wisc.edu/condor/license.html#condor", + "http://web.archive.org/web/20111123062036/http://research.cs.wisc.edu/condor/license.html#condor" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/copyleft-next-0.3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/copyleft-next-0.3.0.json", + "referenceNumber": 340, + "name": "copyleft-next 0.3.0", + "licenseId": "copyleft-next-0.3.0", + "seeAlso": [ + "https://github.com/copyleft-next/copyleft-next/blob/master/Releases/copyleft-next-0.3.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/copyleft-next-0.3.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/copyleft-next-0.3.1.json", + "referenceNumber": 553, + "name": "copyleft-next 0.3.1", + "licenseId": "copyleft-next-0.3.1", + "seeAlso": [ + "https://github.com/copyleft-next/copyleft-next/blob/master/Releases/copyleft-next-0.3.1" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Cornell-Lossless-JPEG.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Cornell-Lossless-JPEG.json", + "referenceNumber": 542, + "name": "Cornell Lossless JPEG License", + "licenseId": "Cornell-Lossless-JPEG", + "seeAlso": [ + "https://android.googlesource.com/platform/external/dng_sdk/+/refs/heads/master/source/dng_lossless_jpeg.cpp#16", + "https://www.mssl.ucl.ac.uk/~mcrw/src/20050920/proto.h", + "https://gitlab.freedesktop.org/libopenraw/libopenraw/blob/master/lib/ljpegdecompressor.cpp#L32" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CPAL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CPAL-1.0.json", + "referenceNumber": 223, + "name": "Common Public Attribution License 1.0", + "licenseId": "CPAL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/CPAL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CPL-1.0.json", + "referenceNumber": 181, + "name": "Common Public License 1.0", + "licenseId": "CPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/CPL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/CPOL-1.02.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CPOL-1.02.json", + "referenceNumber": 176, + "name": "Code Project Open License 1.02", + "licenseId": "CPOL-1.02", + "seeAlso": [ + "http://www.codeproject.com/info/cpol10.aspx" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/Cronyx.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Cronyx.json", + "referenceNumber": 303, + "name": "Cronyx License", + "licenseId": "Cronyx", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/font/alias/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/font/cronyx-cyrillic/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/font/misc-cyrillic/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/font/screen-cyrillic/-/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Crossword.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Crossword.json", + "referenceNumber": 304, + "name": "Crossword License", + "licenseId": "Crossword", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Crossword" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CrystalStacker.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CrystalStacker.json", + "referenceNumber": 522, + "name": "CrystalStacker License", + "licenseId": "CrystalStacker", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:CrystalStacker?rd\u003dLicensing/CrystalStacker" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/CUA-OPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/CUA-OPL-1.0.json", + "referenceNumber": 313, + "name": "CUA Office Public License v1.0", + "licenseId": "CUA-OPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/CUA-OPL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Cube.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Cube.json", + "referenceNumber": 126, + "name": "Cube License", + "licenseId": "Cube", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Cube" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/curl.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/curl.json", + "referenceNumber": 429, + "name": "curl License", + "licenseId": "curl", + "seeAlso": [ + "https://github.com/bagder/curl/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/D-FSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/D-FSL-1.0.json", + "referenceNumber": 31, + "name": "Deutsche Freie Software Lizenz", + "licenseId": "D-FSL-1.0", + "seeAlso": [ + "http://www.dipp.nrw.de/d-fsl/lizenzen/", + "http://www.dipp.nrw.de/d-fsl/index_html/lizenzen/de/D-FSL-1_0_de.txt", + "http://www.dipp.nrw.de/d-fsl/index_html/lizenzen/en/D-FSL-1_0_en.txt", + "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl", + "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/deutsche-freie-software-lizenz", + "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/german-free-software-license", + "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/D-FSL-1_0_de.txt/at_download/file", + "https://www.hbz-nrw.de/produkte/open-access/lizenzen/dfsl/D-FSL-1_0_en.txt/at_download/file" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DEC-3-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DEC-3-Clause.json", + "referenceNumber": 620, + "name": "DEC 3-Clause License", + "licenseId": "DEC-3-Clause", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/xserver/-/blob/master/COPYING?ref_type\u003dheads#L239" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/diffmark.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/diffmark.json", + "referenceNumber": 365, + "name": "diffmark license", + "licenseId": "diffmark", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/diffmark" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DL-DE-BY-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DL-DE-BY-2.0.json", + "referenceNumber": 363, + "name": "Data licence Germany – attribution – version 2.0", + "licenseId": "DL-DE-BY-2.0", + "seeAlso": [ + "https://www.govdata.de/dl-de/by-2-0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DL-DE-ZERO-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DL-DE-ZERO-2.0.json", + "referenceNumber": 497, + "name": "Data licence Germany – zero – version 2.0", + "licenseId": "DL-DE-ZERO-2.0", + "seeAlso": [ + "https://www.govdata.de/dl-de/zero-2-0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DOC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DOC.json", + "referenceNumber": 82, + "name": "DOC License", + "licenseId": "DOC", + "seeAlso": [ + "http://www.cs.wustl.edu/~schmidt/ACE-copying.html", + "https://www.dre.vanderbilt.edu/~schmidt/ACE-copying.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Dotseqn.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Dotseqn.json", + "referenceNumber": 148, + "name": "Dotseqn License", + "licenseId": "Dotseqn", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Dotseqn" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DRL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DRL-1.0.json", + "referenceNumber": 623, + "name": "Detection Rule License 1.0", + "licenseId": "DRL-1.0", + "seeAlso": [ + "https://github.com/Neo23x0/sigma/blob/master/LICENSE.Detection.Rules.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DRL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DRL-1.1.json", + "referenceNumber": 259, + "name": "Detection Rule License 1.1", + "licenseId": "DRL-1.1", + "seeAlso": [ + "https://github.com/SigmaHQ/Detection-Rule-License/blob/6ec7fbde6101d101b5b5d1fcb8f9b69fbc76c04a/LICENSE.Detection.Rules.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/DSDP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/DSDP.json", + "referenceNumber": 549, + "name": "DSDP License", + "licenseId": "DSDP", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/DSDP" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/dtoa.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/dtoa.json", + "referenceNumber": 74, + "name": "David M. Gay dtoa License", + "licenseId": "dtoa", + "seeAlso": [ + "https://github.com/SWI-Prolog/swipl-devel/blob/master/src/os/dtoa.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/dvipdfm.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/dvipdfm.json", + "referenceNumber": 309, + "name": "dvipdfm License", + "licenseId": "dvipdfm", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/dvipdfm" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ECL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ECL-1.0.json", + "referenceNumber": 40, + "name": "Educational Community License v1.0", + "licenseId": "ECL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/ECL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/ECL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ECL-2.0.json", + "referenceNumber": 224, + "name": "Educational Community License v2.0", + "licenseId": "ECL-2.0", + "seeAlso": [ + "https://opensource.org/licenses/ECL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/eCos-2.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/eCos-2.0.json", + "referenceNumber": 173, + "name": "eCos license version 2.0", + "licenseId": "eCos-2.0", + "seeAlso": [ + "https://www.gnu.org/licenses/ecos-license.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/EFL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EFL-1.0.json", + "referenceNumber": 329, + "name": "Eiffel Forum License v1.0", + "licenseId": "EFL-1.0", + "seeAlso": [ + "http://www.eiffel-nice.org/license/forum.txt", + "https://opensource.org/licenses/EFL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/EFL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EFL-2.0.json", + "referenceNumber": 535, + "name": "Eiffel Forum License v2.0", + "licenseId": "EFL-2.0", + "seeAlso": [ + "http://www.eiffel-nice.org/license/eiffel-forum-license-2.html", + "https://opensource.org/licenses/EFL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/eGenix.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/eGenix.json", + "referenceNumber": 102, + "name": "eGenix.com Public License 1.1.0", + "licenseId": "eGenix", + "seeAlso": [ + "http://www.egenix.com/products/eGenix.com-Public-License-1.1.0.pdf", + "https://fedoraproject.org/wiki/Licensing/eGenix.com_Public_License_1.1.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Elastic-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Elastic-2.0.json", + "referenceNumber": 21, + "name": "Elastic License 2.0", + "licenseId": "Elastic-2.0", + "seeAlso": [ + "https://www.elastic.co/licensing/elastic-license", + "https://github.com/elastic/elasticsearch/blob/master/licenses/ELASTIC-LICENSE-2.0.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Entessa.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Entessa.json", + "referenceNumber": 87, + "name": "Entessa Public License v1.0", + "licenseId": "Entessa", + "seeAlso": [ + "https://opensource.org/licenses/Entessa" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/EPICS.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EPICS.json", + "referenceNumber": 523, + "name": "EPICS Open License", + "licenseId": "EPICS", + "seeAlso": [ + "https://epics.anl.gov/license/open.php" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/EPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EPL-1.0.json", + "referenceNumber": 229, + "name": "Eclipse Public License 1.0", + "licenseId": "EPL-1.0", + "seeAlso": [ + "http://www.eclipse.org/legal/epl-v10.html", + "https://opensource.org/licenses/EPL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/EPL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EPL-2.0.json", + "referenceNumber": 143, + "name": "Eclipse Public License 2.0", + "licenseId": "EPL-2.0", + "seeAlso": [ + "https://www.eclipse.org/legal/epl-2.0", + "https://www.opensource.org/licenses/EPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ErlPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ErlPL-1.1.json", + "referenceNumber": 592, + "name": "Erlang Public License v1.1", + "licenseId": "ErlPL-1.1", + "seeAlso": [ + "http://www.erlang.org/EPLICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/etalab-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/etalab-2.0.json", + "referenceNumber": 299, + "name": "Etalab Open License 2.0", + "licenseId": "etalab-2.0", + "seeAlso": [ + "https://github.com/DISIC/politique-de-contribution-open-source/blob/master/LICENSE.pdf", + "https://raw.githubusercontent.com/DISIC/politique-de-contribution-open-source/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/EUDatagrid.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EUDatagrid.json", + "referenceNumber": 191, + "name": "EU DataGrid Software License", + "licenseId": "EUDatagrid", + "seeAlso": [ + "http://eu-datagrid.web.cern.ch/eu-datagrid/license.html", + "https://opensource.org/licenses/EUDatagrid" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/EUPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EUPL-1.0.json", + "referenceNumber": 392, + "name": "European Union Public License 1.0", + "licenseId": "EUPL-1.0", + "seeAlso": [ + "http://ec.europa.eu/idabc/en/document/7330.html", + "http://ec.europa.eu/idabc/servlets/Doc027f.pdf?id\u003d31096" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/EUPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EUPL-1.1.json", + "referenceNumber": 26, + "name": "European Union Public License 1.1", + "licenseId": "EUPL-1.1", + "seeAlso": [ + "https://joinup.ec.europa.eu/software/page/eupl/licence-eupl", + "https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/eupl1.1.-licence-en_0.pdf", + "https://opensource.org/licenses/EUPL-1.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/EUPL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/EUPL-1.2.json", + "referenceNumber": 34, + "name": "European Union Public License 1.2", + "licenseId": "EUPL-1.2", + "seeAlso": [ + "https://joinup.ec.europa.eu/page/eupl-text-11-12", + "https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/eupl_v1.2_en.pdf", + "https://joinup.ec.europa.eu/sites/default/files/custom-page/attachment/2020-03/EUPL-1.2%20EN.txt", + "https://joinup.ec.europa.eu/sites/default/files/inline-files/EUPL%20v1_2%20EN(1).txt", + "http://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?uri\u003dCELEX:32017D0863", + "https://opensource.org/licenses/EUPL-1.2" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Eurosym.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Eurosym.json", + "referenceNumber": 584, + "name": "Eurosym License", + "licenseId": "Eurosym", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Eurosym" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Fair.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Fair.json", + "referenceNumber": 93, + "name": "Fair License", + "licenseId": "Fair", + "seeAlso": [ + "https://web.archive.org/web/20150926120323/http://fairlicense.org/", + "https://opensource.org/licenses/Fair" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/FBM.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FBM.json", + "referenceNumber": 227, + "name": "Fuzzy Bitmap License", + "licenseId": "FBM", + "seeAlso": [ + "https://github.com/SWI-Prolog/packages-xpce/blob/161a40cd82004f731ba48024f9d30af388a7edf5/src/img/gifwrite.c#L21-L26" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FDK-AAC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FDK-AAC.json", + "referenceNumber": 323, + "name": "Fraunhofer FDK AAC Codec Library", + "licenseId": "FDK-AAC", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/FDK-AAC", + "https://directory.fsf.org/wiki/License:Fdk" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Ferguson-Twofish.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Ferguson-Twofish.json", + "referenceNumber": 447, + "name": "Ferguson Twofish License", + "licenseId": "Ferguson-Twofish", + "seeAlso": [ + "https://github.com/wernerd/ZRTPCPP/blob/6b3cd8e6783642292bad0c21e3e5e5ce45ff3e03/cryptcommon/twofish.c#L113C3-L127" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Frameworx-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Frameworx-1.0.json", + "referenceNumber": 152, + "name": "Frameworx Open License 1.0", + "licenseId": "Frameworx-1.0", + "seeAlso": [ + "https://opensource.org/licenses/Frameworx-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/FreeBSD-DOC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FreeBSD-DOC.json", + "referenceNumber": 73, + "name": "FreeBSD Documentation License", + "licenseId": "FreeBSD-DOC", + "seeAlso": [ + "https://www.freebsd.org/copyright/freebsd-doc-license/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FreeImage.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FreeImage.json", + "referenceNumber": 131, + "name": "FreeImage Public License v1.0", + "licenseId": "FreeImage", + "seeAlso": [ + "http://freeimage.sourceforge.net/freeimage-license.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FSFAP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FSFAP.json", + "referenceNumber": 273, + "name": "FSF All Permissive License", + "licenseId": "FSFAP", + "seeAlso": [ + "https://www.gnu.org/prep/maintain/html_node/License-Notices-for-Other-Files.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/FSFAP-no-warranty-disclaimer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FSFAP-no-warranty-disclaimer.json", + "referenceNumber": 67, + "name": "FSF All Permissive License (without Warranty)", + "licenseId": "FSFAP-no-warranty-disclaimer", + "seeAlso": [ + "https://git.savannah.gnu.org/cgit/wget.git/tree/util/trunc.c?h\u003dv1.21.3\u0026id\u003d40747a11e44ced5a8ac628a41f879ced3e2ebce9#n6" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FSFUL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FSFUL.json", + "referenceNumber": 577, + "name": "FSF Unlimited License", + "licenseId": "FSFUL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FSFULLR.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FSFULLR.json", + "referenceNumber": 96, + "name": "FSF Unlimited License (with License Retention)", + "licenseId": "FSFULLR", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/FSF_Unlimited_License#License_Retention_Variant" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FSFULLRWD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FSFULLRWD.json", + "referenceNumber": 456, + "name": "FSF Unlimited License (With License Retention and Warranty Disclaimer)", + "licenseId": "FSFULLRWD", + "seeAlso": [ + "https://lists.gnu.org/archive/html/autoconf/2012-04/msg00061.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/FTL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/FTL.json", + "referenceNumber": 519, + "name": "Freetype Project License", + "licenseId": "FTL", + "seeAlso": [ + "http://freetype.fis.uniroma2.it/FTL.TXT", + "http://git.savannah.gnu.org/cgit/freetype/freetype2.git/tree/docs/FTL.TXT", + "http://gitlab.freedesktop.org/freetype/freetype/-/raw/master/docs/FTL.TXT" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Furuseth.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Furuseth.json", + "referenceNumber": 604, + "name": "Furuseth License", + "licenseId": "Furuseth", + "seeAlso": [ + "https://git.openldap.org/openldap/openldap/-/blob/master/COPYRIGHT?ref_type\u003dheads#L39-51" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/fwlw.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/fwlw.json", + "referenceNumber": 258, + "name": "fwlw License", + "licenseId": "fwlw", + "seeAlso": [ + "https://mirrors.nic.cz/tex-archive/macros/latex/contrib/fwlw/README" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GCR-docs.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GCR-docs.json", + "referenceNumber": 155, + "name": "Gnome GCR Documentation License", + "licenseId": "GCR-docs", + "seeAlso": [ + "https://github.com/GNOME/gcr/blob/master/docs/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GD.json", + "referenceNumber": 92, + "name": "GD License", + "licenseId": "GD", + "seeAlso": [ + "https://libgd.github.io/manuals/2.3.0/files/license-txt.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1.json", + "referenceNumber": 195, + "name": "GNU Free Documentation License v1.1", + "licenseId": "GFDL-1.1", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-invariants-only.json", + "referenceNumber": 346, + "name": "GNU Free Documentation License v1.1 only - invariants", + "licenseId": "GFDL-1.1-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-invariants-or-later.json", + "referenceNumber": 269, + "name": "GNU Free Documentation License v1.1 or later - invariants", + "licenseId": "GFDL-1.1-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-no-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-no-invariants-only.json", + "referenceNumber": 6, + "name": "GNU Free Documentation License v1.1 only - no invariants", + "licenseId": "GFDL-1.1-no-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-no-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-no-invariants-or-later.json", + "referenceNumber": 7, + "name": "GNU Free Documentation License v1.1 or later - no invariants", + "licenseId": "GFDL-1.1-no-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-only.json", + "referenceNumber": 264, + "name": "GNU Free Documentation License v1.1 only", + "licenseId": "GFDL-1.1-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.1-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.1-or-later.json", + "referenceNumber": 196, + "name": "GNU Free Documentation License v1.1 or later", + "licenseId": "GFDL-1.1-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.1.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2.json", + "referenceNumber": 97, + "name": "GNU Free Documentation License v1.2", + "licenseId": "GFDL-1.2", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-invariants-only.json", + "referenceNumber": 611, + "name": "GNU Free Documentation License v1.2 only - invariants", + "licenseId": "GFDL-1.2-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-invariants-or-later.json", + "referenceNumber": 464, + "name": "GNU Free Documentation License v1.2 or later - invariants", + "licenseId": "GFDL-1.2-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-no-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-no-invariants-only.json", + "referenceNumber": 75, + "name": "GNU Free Documentation License v1.2 only - no invariants", + "licenseId": "GFDL-1.2-no-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-no-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-no-invariants-or-later.json", + "referenceNumber": 14, + "name": "GNU Free Documentation License v1.2 or later - no invariants", + "licenseId": "GFDL-1.2-no-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-only.json", + "referenceNumber": 322, + "name": "GNU Free Documentation License v1.2 only", + "licenseId": "GFDL-1.2-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.2-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.2-or-later.json", + "referenceNumber": 594, + "name": "GNU Free Documentation License v1.2 or later", + "licenseId": "GFDL-1.2-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/fdl-1.2.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3.json", + "referenceNumber": 538, + "name": "GNU Free Documentation License v1.3", + "licenseId": "GFDL-1.3", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-invariants-only.json", + "referenceNumber": 571, + "name": "GNU Free Documentation License v1.3 only - invariants", + "licenseId": "GFDL-1.3-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-invariants-or-later.json", + "referenceNumber": 300, + "name": "GNU Free Documentation License v1.3 or later - invariants", + "licenseId": "GFDL-1.3-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-no-invariants-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-no-invariants-only.json", + "referenceNumber": 101, + "name": "GNU Free Documentation License v1.3 only - no invariants", + "licenseId": "GFDL-1.3-no-invariants-only", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-no-invariants-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-no-invariants-or-later.json", + "referenceNumber": 330, + "name": "GNU Free Documentation License v1.3 or later - no invariants", + "licenseId": "GFDL-1.3-no-invariants-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-only.json", + "referenceNumber": 457, + "name": "GNU Free Documentation License v1.3 only", + "licenseId": "GFDL-1.3-only", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GFDL-1.3-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GFDL-1.3-or-later.json", + "referenceNumber": 472, + "name": "GNU Free Documentation License v1.3 or later", + "licenseId": "GFDL-1.3-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/fdl-1.3.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Giftware.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Giftware.json", + "referenceNumber": 449, + "name": "Giftware License", + "licenseId": "Giftware", + "seeAlso": [ + "http://liballeg.org/license.html#allegro-4-the-giftware-license" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GL2PS.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GL2PS.json", + "referenceNumber": 338, + "name": "GL2PS License", + "licenseId": "GL2PS", + "seeAlso": [ + "http://www.geuz.org/gl2ps/COPYING.GL2PS" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Glide.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Glide.json", + "referenceNumber": 215, + "name": "3dfx Glide License", + "licenseId": "Glide", + "seeAlso": [ + "http://www.users.on.net/~triforce/glidexp/COPYING.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Glulxe.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Glulxe.json", + "referenceNumber": 289, + "name": "Glulxe License", + "licenseId": "Glulxe", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Glulxe" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GLWTPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GLWTPL.json", + "referenceNumber": 576, + "name": "Good Luck With That Public License", + "licenseId": "GLWTPL", + "seeAlso": [ + "https://github.com/me-shaon/GLWTPL/commit/da5f6bc734095efbacb442c0b31e33a65b9d6e85" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/gnuplot.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/gnuplot.json", + "referenceNumber": 268, + "name": "gnuplot License", + "licenseId": "gnuplot", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Gnuplot" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-1.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-1.0.json", + "referenceNumber": 601, + "name": "GNU General Public License v1.0 only", + "licenseId": "GPL-1.0", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-1.0+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-1.0+.json", + "referenceNumber": 442, + "name": "GNU General Public License v1.0 or later", + "licenseId": "GPL-1.0+", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-1.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-1.0-only.json", + "referenceNumber": 527, + "name": "GNU General Public License v1.0 only", + "licenseId": "GPL-1.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-1.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-1.0-or-later.json", + "referenceNumber": 0, + "name": "GNU General Public License v1.0 or later", + "licenseId": "GPL-1.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-1.0-standalone.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0.json", + "referenceNumber": 473, + "name": "GNU General Public License v2.0 only", + "licenseId": "GPL-2.0", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "https://opensource.org/licenses/GPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0+.json", + "referenceNumber": 502, + "name": "GNU General Public License v2.0 or later", + "licenseId": "GPL-2.0+", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "https://opensource.org/licenses/GPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-only.json", + "referenceNumber": 404, + "name": "GNU General Public License v2.0 only", + "licenseId": "GPL-2.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt", + "https://opensource.org/licenses/GPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-or-later.json", + "referenceNumber": 389, + "name": "GNU General Public License v2.0 or later", + "licenseId": "GPL-2.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html", + "https://opensource.org/licenses/GPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-with-autoconf-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-autoconf-exception.json", + "referenceNumber": 333, + "name": "GNU General Public License v2.0 w/Autoconf exception", + "licenseId": "GPL-2.0-with-autoconf-exception", + "seeAlso": [ + "http://ac-archive.sourceforge.net/doc/copyright.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-with-bison-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-bison-exception.json", + "referenceNumber": 117, + "name": "GNU General Public License v2.0 w/Bison exception", + "licenseId": "GPL-2.0-with-bison-exception", + "seeAlso": [ + "http://git.savannah.gnu.org/cgit/bison.git/tree/data/yacc.c?id\u003d193d7c7054ba7197b0789e14965b739162319b5e#n141" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-with-classpath-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-classpath-exception.json", + "referenceNumber": 144, + "name": "GNU General Public License v2.0 w/Classpath exception", + "licenseId": "GPL-2.0-with-classpath-exception", + "seeAlso": [ + "https://www.gnu.org/software/classpath/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-with-font-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-font-exception.json", + "referenceNumber": 286, + "name": "GNU General Public License v2.0 w/Font exception", + "licenseId": "GPL-2.0-with-font-exception", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-faq.html#FontException" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-2.0-with-GCC-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-2.0-with-GCC-exception.json", + "referenceNumber": 54, + "name": "GNU General Public License v2.0 w/GCC Runtime Library exception", + "licenseId": "GPL-2.0-with-GCC-exception", + "seeAlso": [ + "https://gcc.gnu.org/git/?p\u003dgcc.git;a\u003dblob;f\u003dgcc/libgcc1.c;h\u003d762f5143fc6eed57b6797c82710f3538aa52b40b;hb\u003dcb143a3ce4fb417c68f5fa2691a1b1b1053dfba9#l10" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0.json", + "referenceNumber": 233, + "name": "GNU General Public License v3.0 only", + "licenseId": "GPL-3.0", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-3.0-standalone.html", + "https://opensource.org/licenses/GPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0+.json", + "referenceNumber": 201, + "name": "GNU General Public License v3.0 or later", + "licenseId": "GPL-3.0+", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-3.0-standalone.html", + "https://opensource.org/licenses/GPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0-only.json", + "referenceNumber": 339, + "name": "GNU General Public License v3.0 only", + "licenseId": "GPL-3.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-3.0-standalone.html", + "https://opensource.org/licenses/GPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0-or-later.json", + "referenceNumber": 109, + "name": "GNU General Public License v3.0 or later", + "licenseId": "GPL-3.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/gpl-3.0-standalone.html", + "https://opensource.org/licenses/GPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0-with-autoconf-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0-with-autoconf-exception.json", + "referenceNumber": 121, + "name": "GNU General Public License v3.0 w/Autoconf exception", + "licenseId": "GPL-3.0-with-autoconf-exception", + "seeAlso": [ + "https://www.gnu.org/licenses/autoconf-exception-3.0.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/GPL-3.0-with-GCC-exception.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/GPL-3.0-with-GCC-exception.json", + "referenceNumber": 331, + "name": "GNU General Public License v3.0 w/GCC Runtime Library exception", + "licenseId": "GPL-3.0-with-GCC-exception", + "seeAlso": [ + "https://www.gnu.org/licenses/gcc-exception-3.1.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Graphics-Gems.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Graphics-Gems.json", + "referenceNumber": 68, + "name": "Graphics Gems License", + "licenseId": "Graphics-Gems", + "seeAlso": [ + "https://github.com/erich666/GraphicsGems/blob/master/LICENSE.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/gSOAP-1.3b.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/gSOAP-1.3b.json", + "referenceNumber": 633, + "name": "gSOAP Public License v1.3b", + "licenseId": "gSOAP-1.3b", + "seeAlso": [ + "http://www.cs.fsu.edu/~engelen/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/gtkbook.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/gtkbook.json", + "referenceNumber": 341, + "name": "gtkbook License", + "licenseId": "gtkbook", + "seeAlso": [ + "https://github.com/slogan621/gtkbook", + "https://github.com/oetiker/rrdtool-1.x/blob/master/src/plbasename.c#L8-L11" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HaskellReport.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HaskellReport.json", + "referenceNumber": 138, + "name": "Haskell Language Report License", + "licenseId": "HaskellReport", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Haskell_Language_Report_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/hdparm.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/hdparm.json", + "referenceNumber": 467, + "name": "hdparm License", + "licenseId": "hdparm", + "seeAlso": [ + "https://github.com/Distrotech/hdparm/blob/4517550db29a91420fb2b020349523b1b4512df2/LICENSE.TXT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Hippocratic-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Hippocratic-2.1.json", + "referenceNumber": 609, + "name": "Hippocratic License 2.1", + "licenseId": "Hippocratic-2.1", + "seeAlso": [ + "https://firstdonoharm.dev/version/2/1/license.html", + "https://github.com/EthicalSource/hippocratic-license/blob/58c0e646d64ff6fbee275bfe2b9492f914e3ab2a/LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HP-1986.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HP-1986.json", + "referenceNumber": 39, + "name": "Hewlett-Packard 1986 License", + "licenseId": "HP-1986", + "seeAlso": [ + "https://sourceware.org/git/?p\u003dnewlib-cygwin.git;a\u003dblob;f\u003dnewlib/libc/machine/hppa/memchr.S;h\u003d1cca3e5e8867aa4bffef1f75a5c1bba25c0c441e;hb\u003dHEAD#l2" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HP-1989.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HP-1989.json", + "referenceNumber": 578, + "name": "Hewlett-Packard 1989 License", + "licenseId": "HP-1989", + "seeAlso": [ + "https://github.com/bleargh45/Data-UUID/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND.json", + "referenceNumber": 624, + "name": "Historical Permission Notice and Disclaimer", + "licenseId": "HPND", + "seeAlso": [ + "https://opensource.org/licenses/HPND", + "http://lists.opensource.org/pipermail/license-discuss_lists.opensource.org/2002-November/006304.html" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/HPND-DEC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-DEC.json", + "referenceNumber": 115, + "name": "Historical Permission Notice and Disclaimer - DEC variant", + "licenseId": "HPND-DEC", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/app/xkbcomp/-/blob/master/COPYING?ref_type\u003dheads#L69" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-doc.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-doc.json", + "referenceNumber": 30, + "name": "Historical Permission Notice and Disclaimer - documentation variant", + "licenseId": "HPND-doc", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/lib/libxext/-/blob/master/COPYING?ref_type\u003dheads#L185-197", + "https://gitlab.freedesktop.org/xorg/lib/libxtst/-/blob/master/COPYING?ref_type\u003dheads#L70-77" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-doc-sell.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-doc-sell.json", + "referenceNumber": 184, + "name": "Historical Permission Notice and Disclaimer - documentation sell variant", + "licenseId": "HPND-doc-sell", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/lib/libxtst/-/blob/master/COPYING?ref_type\u003dheads#L108-117", + "https://gitlab.freedesktop.org/xorg/lib/libxext/-/blob/master/COPYING?ref_type\u003dheads#L153-162" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-export-US.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-export-US.json", + "referenceNumber": 336, + "name": "HPND with US Government export control warning", + "licenseId": "HPND-export-US", + "seeAlso": [ + "https://www.kermitproject.org/ck90.html#source" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-export-US-modify.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-export-US-modify.json", + "referenceNumber": 261, + "name": "HPND with US Government export control warning and modification rqmt", + "licenseId": "HPND-export-US-modify", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L1157-L1182", + "https://github.com/pythongssapi/k5test/blob/v0.10.3/K5TEST-LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-Fenneberg-Livingston.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-Fenneberg-Livingston.json", + "referenceNumber": 305, + "name": "Historical Permission Notice and Disclaimer - Fenneberg-Livingston variant", + "licenseId": "HPND-Fenneberg-Livingston", + "seeAlso": [ + "https://github.com/FreeRADIUS/freeradius-client/blob/master/COPYRIGHT#L32", + "https://github.com/radcli/radcli/blob/master/COPYRIGHT#L34" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-INRIA-IMAG.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-INRIA-IMAG.json", + "referenceNumber": 10, + "name": "Historical Permission Notice and Disclaimer - INRIA-IMAG variant", + "licenseId": "HPND-INRIA-IMAG", + "seeAlso": [ + "https://github.com/ppp-project/ppp/blob/master/pppd/ipv6cp.c#L75-L83" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-Kevlin-Henney.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-Kevlin-Henney.json", + "referenceNumber": 462, + "name": "Historical Permission Notice and Disclaimer - Kevlin Henney variant", + "licenseId": "HPND-Kevlin-Henney", + "seeAlso": [ + "https://github.com/mruby/mruby/blob/83d12f8d52522cdb7c8cc46fad34821359f453e6/mrbgems/mruby-dir/src/Win/dirent.c#L127-L140" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-Markus-Kuhn.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-Markus-Kuhn.json", + "referenceNumber": 367, + "name": "Historical Permission Notice and Disclaimer - Markus Kuhn variant", + "licenseId": "HPND-Markus-Kuhn", + "seeAlso": [ + "https://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c", + "https://sourceware.org/git/?p\u003dbinutils-gdb.git;a\u003dblob;f\u003dreadline/readline/support/wcwidth.c;h\u003d0f5ec995796f4813abbcf4972aec0378ab74722a;hb\u003dHEAD#l55" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-MIT-disclaimer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-MIT-disclaimer.json", + "referenceNumber": 345, + "name": "Historical Permission Notice and Disclaimer with MIT disclaimer", + "licenseId": "HPND-MIT-disclaimer", + "seeAlso": [ + "https://metacpan.org/release/NLNETLABS/Net-DNS-SEC-1.22/source/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-Pbmplus.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-Pbmplus.json", + "referenceNumber": 204, + "name": "Historical Permission Notice and Disclaimer - Pbmplus variant", + "licenseId": "HPND-Pbmplus", + "seeAlso": [ + "https://sourceforge.net/p/netpbm/code/HEAD/tree/super_stable/netpbm.c#l8" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-sell-MIT-disclaimer-xserver.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-sell-MIT-disclaimer-xserver.json", + "referenceNumber": 532, + "name": "Historical Permission Notice and Disclaimer - sell xserver variant with MIT disclaimer", + "licenseId": "HPND-sell-MIT-disclaimer-xserver", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/xserver/-/blob/master/COPYING?ref_type\u003dheads#L1781" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-sell-regexpr.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-sell-regexpr.json", + "referenceNumber": 572, + "name": "Historical Permission Notice and Disclaimer - sell regexpr variant", + "licenseId": "HPND-sell-regexpr", + "seeAlso": [ + "https://gitlab.com/bacula-org/bacula/-/blob/Branch-11.0/bacula/LICENSE-FOSS?ref_type\u003dheads#L245" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-sell-variant.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-sell-variant.json", + "referenceNumber": 414, + "name": "Historical Permission Notice and Disclaimer - sell variant", + "licenseId": "HPND-sell-variant", + "seeAlso": [ + "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/net/sunrpc/auth_gss/gss_generic_token.c?h\u003dv4.19" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-sell-variant-MIT-disclaimer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-sell-variant-MIT-disclaimer.json", + "referenceNumber": 51, + "name": "HPND sell variant with MIT disclaimer", + "licenseId": "HPND-sell-variant-MIT-disclaimer", + "seeAlso": [ + "https://github.com/sigmavirus24/x11-ssh-askpass/blob/master/README" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HPND-UC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HPND-UC.json", + "referenceNumber": 107, + "name": "Historical Permission Notice and Disclaimer - University of California variant", + "licenseId": "HPND-UC", + "seeAlso": [ + "https://core.tcl-lang.org/tk/file?name\u003dcompat/unistd.h" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/HTMLTIDY.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/HTMLTIDY.json", + "referenceNumber": 474, + "name": "HTML Tidy License", + "licenseId": "HTMLTIDY", + "seeAlso": [ + "https://github.com/htacg/tidy-html5/blob/next/README/LICENSE.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/IBM-pibs.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IBM-pibs.json", + "referenceNumber": 417, + "name": "IBM PowerPC Initialization and Boot Software", + "licenseId": "IBM-pibs", + "seeAlso": [ + "http://git.denx.de/?p\u003du-boot.git;a\u003dblob;f\u003darch/powerpc/cpu/ppc4xx/miiphy.c;h\u003d297155fdafa064b955e53e9832de93bfb0cfb85b;hb\u003d9fab4bf4cc077c21e43941866f3f2c196f28670d" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ICU.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ICU.json", + "referenceNumber": 153, + "name": "ICU License", + "licenseId": "ICU", + "seeAlso": [ + "http://source.icu-project.org/repos/icu/icu/trunk/license.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/IEC-Code-Components-EULA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IEC-Code-Components-EULA.json", + "referenceNumber": 481, + "name": "IEC Code Components End-user licence agreement", + "licenseId": "IEC-Code-Components-EULA", + "seeAlso": [ + "https://www.iec.ch/webstore/custserv/pdf/CC-EULA.pdf", + "https://www.iec.ch/CCv1", + "https://www.iec.ch/copyright" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/IJG.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IJG.json", + "referenceNumber": 90, + "name": "Independent JPEG Group License", + "licenseId": "IJG", + "seeAlso": [ + "http://dev.w3.org/cvsweb/Amaya/libjpeg/Attic/README?rev\u003d1.2" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/IJG-short.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IJG-short.json", + "referenceNumber": 520, + "name": "Independent JPEG Group License - short", + "licenseId": "IJG-short", + "seeAlso": [ + "https://sourceforge.net/p/xmedcon/code/ci/master/tree/libs/ljpg/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ImageMagick.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ImageMagick.json", + "referenceNumber": 557, + "name": "ImageMagick License", + "licenseId": "ImageMagick", + "seeAlso": [ + "http://www.imagemagick.org/script/license.php" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/iMatix.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/iMatix.json", + "referenceNumber": 307, + "name": "iMatix Standard Function Library Agreement", + "licenseId": "iMatix", + "seeAlso": [ + "http://legacy.imatix.com/html/sfl/sfl4.htm#license" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Imlib2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Imlib2.json", + "referenceNumber": 280, + "name": "Imlib2 License", + "licenseId": "Imlib2", + "seeAlso": [ + "http://trac.enlightenment.org/e/browser/trunk/imlib2/COPYING", + "https://git.enlightenment.org/legacy/imlib2.git/tree/COPYING" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Info-ZIP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Info-ZIP.json", + "referenceNumber": 136, + "name": "Info-ZIP License", + "licenseId": "Info-ZIP", + "seeAlso": [ + "http://www.info-zip.org/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Inner-Net-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Inner-Net-2.0.json", + "referenceNumber": 277, + "name": "Inner Net License v2.0", + "licenseId": "Inner-Net-2.0", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Inner_Net_License", + "https://sourceware.org/git/?p\u003dglibc.git;a\u003dblob;f\u003dLICENSES;h\u003d530893b1dc9ea00755603c68fb36bd4fc38a7be8;hb\u003dHEAD#l207" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Intel.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Intel.json", + "referenceNumber": 187, + "name": "Intel Open Source License", + "licenseId": "Intel", + "seeAlso": [ + "https://opensource.org/licenses/Intel" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Intel-ACPI.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Intel-ACPI.json", + "referenceNumber": 554, + "name": "Intel ACPI Software License Agreement", + "licenseId": "Intel-ACPI", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Intel_ACPI_Software_License_Agreement" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Interbase-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Interbase-1.0.json", + "referenceNumber": 632, + "name": "Interbase Public License v1.0", + "licenseId": "Interbase-1.0", + "seeAlso": [ + "https://web.archive.org/web/20060319014854/http://info.borland.com/devsupport/interbase/opensource/IPL.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/IPA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IPA.json", + "referenceNumber": 411, + "name": "IPA Font License", + "licenseId": "IPA", + "seeAlso": [ + "https://opensource.org/licenses/IPA" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/IPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/IPL-1.0.json", + "referenceNumber": 508, + "name": "IBM Public License v1.0", + "licenseId": "IPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/IPL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ISC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ISC.json", + "referenceNumber": 483, + "name": "ISC License", + "licenseId": "ISC", + "seeAlso": [ + "https://www.isc.org/licenses/", + "https://www.isc.org/downloads/software-support-policy/isc-license/", + "https://opensource.org/licenses/ISC" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ISC-Veillard.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ISC-Veillard.json", + "referenceNumber": 446, + "name": "ISC Veillard variant", + "licenseId": "ISC-Veillard", + "seeAlso": [ + "https://raw.githubusercontent.com/GNOME/libxml2/4c2e7c651f6c2f0d1a74f350cbda95f7df3e7017/hash.c", + "https://github.com/GNOME/libxml2/blob/master/dict.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Jam.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Jam.json", + "referenceNumber": 4, + "name": "Jam License", + "licenseId": "Jam", + "seeAlso": [ + "https://www.boost.org/doc/libs/1_35_0/doc/html/jam.html", + "https://web.archive.org/web/20160330173339/https://swarm.workshop.perforce.com/files/guest/perforce_software/jam/src/README" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/JasPer-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/JasPer-2.0.json", + "referenceNumber": 593, + "name": "JasPer License", + "licenseId": "JasPer-2.0", + "seeAlso": [ + "http://www.ece.uvic.ca/~mdadams/jasper/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/JPL-image.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/JPL-image.json", + "referenceNumber": 379, + "name": "JPL Image Use Policy", + "licenseId": "JPL-image", + "seeAlso": [ + "https://www.jpl.nasa.gov/jpl-image-use-policy" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/JPNIC.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/JPNIC.json", + "referenceNumber": 103, + "name": "Japan Network Information Center License", + "licenseId": "JPNIC", + "seeAlso": [ + "https://gitlab.isc.org/isc-projects/bind9/blob/master/COPYRIGHT#L366" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/JSON.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/JSON.json", + "referenceNumber": 219, + "name": "JSON License", + "licenseId": "JSON", + "seeAlso": [ + "http://www.json.org/license.html" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/Kastrup.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Kastrup.json", + "referenceNumber": 406, + "name": "Kastrup License", + "licenseId": "Kastrup", + "seeAlso": [ + "https://ctan.math.utah.edu/ctan/tex-archive/macros/generic/kastrup/binhex.dtx" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Kazlib.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Kazlib.json", + "referenceNumber": 257, + "name": "Kazlib License", + "licenseId": "Kazlib", + "seeAlso": [ + "http://git.savannah.gnu.org/cgit/kazlib.git/tree/except.c?id\u003d0062df360c2d17d57f6af19b0e444c51feb99036" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Knuth-CTAN.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Knuth-CTAN.json", + "referenceNumber": 514, + "name": "Knuth CTAN License", + "licenseId": "Knuth-CTAN", + "seeAlso": [ + "https://ctan.org/license/knuth" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LAL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LAL-1.2.json", + "referenceNumber": 621, + "name": "Licence Art Libre 1.2", + "licenseId": "LAL-1.2", + "seeAlso": [ + "http://artlibre.org/licence/lal/licence-art-libre-12/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LAL-1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LAL-1.3.json", + "referenceNumber": 182, + "name": "Licence Art Libre 1.3", + "licenseId": "LAL-1.3", + "seeAlso": [ + "https://artlibre.org/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Latex2e.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Latex2e.json", + "referenceNumber": 254, + "name": "Latex2e License", + "licenseId": "Latex2e", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Latex2e" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Latex2e-translated-notice.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Latex2e-translated-notice.json", + "referenceNumber": 435, + "name": "Latex2e with translated notice permission", + "licenseId": "Latex2e-translated-notice", + "seeAlso": [ + "https://git.savannah.gnu.org/cgit/indent.git/tree/doc/indent.texi?id\u003da74c6b4ee49397cf330b333da1042bffa60ed14f#n74" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Leptonica.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Leptonica.json", + "referenceNumber": 294, + "name": "Leptonica License", + "licenseId": "Leptonica", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Leptonica" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.0.json", + "referenceNumber": 452, + "name": "GNU Library General Public License v2 only", + "licenseId": "LGPL-2.0", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.0+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.0+.json", + "referenceNumber": 342, + "name": "GNU Library General Public License v2 or later", + "licenseId": "LGPL-2.0+", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.0-only.json", + "referenceNumber": 563, + "name": "GNU Library General Public License v2 only", + "licenseId": "LGPL-2.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.0-or-later.json", + "referenceNumber": 575, + "name": "GNU Library General Public License v2 or later", + "licenseId": "LGPL-2.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.0-standalone.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.1.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.1.json", + "referenceNumber": 394, + "name": "GNU Lesser General Public License v2.1 only", + "licenseId": "LGPL-2.1", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "https://opensource.org/licenses/LGPL-2.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.1+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.1+.json", + "referenceNumber": 12, + "name": "GNU Lesser General Public License v2.1 or later", + "licenseId": "LGPL-2.1+", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "https://opensource.org/licenses/LGPL-2.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.1-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.1-only.json", + "referenceNumber": 180, + "name": "GNU Lesser General Public License v2.1 only", + "licenseId": "LGPL-2.1-only", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "https://opensource.org/licenses/LGPL-2.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-2.1-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-2.1-or-later.json", + "referenceNumber": 422, + "name": "GNU Lesser General Public License v2.1 or later", + "licenseId": "LGPL-2.1-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/old-licenses/lgpl-2.1-standalone.html", + "https://opensource.org/licenses/LGPL-2.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-3.0.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-3.0.json", + "referenceNumber": 636, + "name": "GNU Lesser General Public License v3.0 only", + "licenseId": "LGPL-3.0", + "seeAlso": [ + "https://www.gnu.org/licenses/lgpl-3.0-standalone.html", + "https://www.gnu.org/licenses/lgpl+gpl-3.0.txt", + "https://opensource.org/licenses/LGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-3.0+.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/LGPL-3.0+.json", + "referenceNumber": 255, + "name": "GNU Lesser General Public License v3.0 or later", + "licenseId": "LGPL-3.0+", + "seeAlso": [ + "https://www.gnu.org/licenses/lgpl-3.0-standalone.html", + "https://www.gnu.org/licenses/lgpl+gpl-3.0.txt", + "https://opensource.org/licenses/LGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-3.0-only.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-3.0-only.json", + "referenceNumber": 83, + "name": "GNU Lesser General Public License v3.0 only", + "licenseId": "LGPL-3.0-only", + "seeAlso": [ + "https://www.gnu.org/licenses/lgpl-3.0-standalone.html", + "https://www.gnu.org/licenses/lgpl+gpl-3.0.txt", + "https://opensource.org/licenses/LGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPL-3.0-or-later.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPL-3.0-or-later.json", + "referenceNumber": 396, + "name": "GNU Lesser General Public License v3.0 or later", + "licenseId": "LGPL-3.0-or-later", + "seeAlso": [ + "https://www.gnu.org/licenses/lgpl-3.0-standalone.html", + "https://www.gnu.org/licenses/lgpl+gpl-3.0.txt", + "https://opensource.org/licenses/LGPL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LGPLLR.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LGPLLR.json", + "referenceNumber": 135, + "name": "Lesser General Public License For Linguistic Resources", + "licenseId": "LGPLLR", + "seeAlso": [ + "http://www-igm.univ-mlv.fr/~unitex/lgpllr.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Libpng.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Libpng.json", + "referenceNumber": 140, + "name": "libpng License", + "licenseId": "Libpng", + "seeAlso": [ + "http://www.libpng.org/pub/png/src/libpng-LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/libpng-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/libpng-2.0.json", + "referenceNumber": 212, + "name": "PNG Reference Library version 2", + "licenseId": "libpng-2.0", + "seeAlso": [ + "http://www.libpng.org/pub/png/src/libpng-LICENSE.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/libselinux-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/libselinux-1.0.json", + "referenceNumber": 266, + "name": "libselinux public domain notice", + "licenseId": "libselinux-1.0", + "seeAlso": [ + "https://github.com/SELinuxProject/selinux/blob/master/libselinux/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/libtiff.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/libtiff.json", + "referenceNumber": 20, + "name": "libtiff License", + "licenseId": "libtiff", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/libtiff" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/libutil-David-Nugent.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/libutil-David-Nugent.json", + "referenceNumber": 393, + "name": "libutil David Nugent License", + "licenseId": "libutil-David-Nugent", + "seeAlso": [ + "http://web.mit.edu/freebsd/head/lib/libutil/login_ok.3", + "https://cgit.freedesktop.org/libbsd/tree/man/setproctitle.3bsd" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LiLiQ-P-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LiLiQ-P-1.1.json", + "referenceNumber": 534, + "name": "Licence Libre du Québec – Permissive version 1.1", + "licenseId": "LiLiQ-P-1.1", + "seeAlso": [ + "https://forge.gouv.qc.ca/licence/fr/liliq-v1-1/", + "http://opensource.org/licenses/LiLiQ-P-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LiLiQ-R-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LiLiQ-R-1.1.json", + "referenceNumber": 65, + "name": "Licence Libre du Québec – Réciprocité version 1.1", + "licenseId": "LiLiQ-R-1.1", + "seeAlso": [ + "https://www.forge.gouv.qc.ca/participez/licence-logicielle/licence-libre-du-quebec-liliq-en-francais/licence-libre-du-quebec-reciprocite-liliq-r-v1-1/", + "http://opensource.org/licenses/LiLiQ-R-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LiLiQ-Rplus-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LiLiQ-Rplus-1.1.json", + "referenceNumber": 500, + "name": "Licence Libre du Québec – Réciprocité forte version 1.1", + "licenseId": "LiLiQ-Rplus-1.1", + "seeAlso": [ + "https://www.forge.gouv.qc.ca/participez/licence-logicielle/licence-libre-du-quebec-liliq-en-francais/licence-libre-du-quebec-reciprocite-forte-liliq-r-v1-1/", + "http://opensource.org/licenses/LiLiQ-Rplus-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Linux-man-pages-1-para.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Linux-man-pages-1-para.json", + "referenceNumber": 188, + "name": "Linux man-pages - 1 paragraph", + "licenseId": "Linux-man-pages-1-para", + "seeAlso": [ + "https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/man2/getcpu.2#n4" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Linux-man-pages-copyleft.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Linux-man-pages-copyleft.json", + "referenceNumber": 496, + "name": "Linux man-pages Copyleft", + "licenseId": "Linux-man-pages-copyleft", + "seeAlso": [ + "https://www.kernel.org/doc/man-pages/licenses.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Linux-man-pages-copyleft-2-para.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Linux-man-pages-copyleft-2-para.json", + "referenceNumber": 460, + "name": "Linux man-pages Copyleft - 2 paragraphs", + "licenseId": "Linux-man-pages-copyleft-2-para", + "seeAlso": [ + "https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/man2/move_pages.2#n5", + "https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/man2/migrate_pages.2#n8" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Linux-man-pages-copyleft-var.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Linux-man-pages-copyleft-var.json", + "referenceNumber": 105, + "name": "Linux man-pages Copyleft Variant", + "licenseId": "Linux-man-pages-copyleft-var", + "seeAlso": [ + "https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/man2/set_mempolicy.2#n5" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Linux-OpenIB.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Linux-OpenIB.json", + "referenceNumber": 487, + "name": "Linux Kernel Variant of OpenIB.org license", + "licenseId": "Linux-OpenIB", + "seeAlso": [ + "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/infiniband/core/sa.h" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LOOP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LOOP.json", + "referenceNumber": 263, + "name": "Common Lisp LOOP License", + "licenseId": "LOOP", + "seeAlso": [ + "https://gitlab.com/embeddable-common-lisp/ecl/-/blob/develop/src/lsp/loop.lsp", + "http://git.savannah.gnu.org/cgit/gcl.git/tree/gcl/lsp/gcl_loop.lsp?h\u003dVersion_2_6_13pre", + "https://sourceforge.net/p/sbcl/sbcl/ci/master/tree/src/code/loop.lisp", + "https://github.com/cl-adams/adams/blob/master/LICENSE.md", + "https://github.com/blakemcbride/eclipse-lisp/blob/master/lisp/loop.lisp", + "https://gitlab.common-lisp.net/cmucl/cmucl/-/blob/master/src/code/loop.lisp" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LPD-document.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPD-document.json", + "referenceNumber": 271, + "name": "LPD Documentation License", + "licenseId": "LPD-document", + "seeAlso": [ + "https://github.com/Cyan4973/xxHash/blob/dev/doc/xxhash_spec.md", + "https://www.ietf.org/rfc/rfc1952.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPL-1.0.json", + "referenceNumber": 468, + "name": "Lucent Public License Version 1.0", + "licenseId": "LPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/LPL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/LPL-1.02.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPL-1.02.json", + "referenceNumber": 436, + "name": "Lucent Public License v1.02", + "licenseId": "LPL-1.02", + "seeAlso": [ + "http://plan9.bell-labs.com/plan9/license.html", + "https://opensource.org/licenses/LPL-1.02" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LPPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPPL-1.0.json", + "referenceNumber": 112, + "name": "LaTeX Project Public License v1.0", + "licenseId": "LPPL-1.0", + "seeAlso": [ + "http://www.latex-project.org/lppl/lppl-1-0.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LPPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPPL-1.1.json", + "referenceNumber": 386, + "name": "LaTeX Project Public License v1.1", + "licenseId": "LPPL-1.1", + "seeAlso": [ + "http://www.latex-project.org/lppl/lppl-1-1.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LPPL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPPL-1.2.json", + "referenceNumber": 517, + "name": "LaTeX Project Public License v1.2", + "licenseId": "LPPL-1.2", + "seeAlso": [ + "http://www.latex-project.org/lppl/lppl-1-2.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LPPL-1.3a.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPPL-1.3a.json", + "referenceNumber": 478, + "name": "LaTeX Project Public License v1.3a", + "licenseId": "LPPL-1.3a", + "seeAlso": [ + "http://www.latex-project.org/lppl/lppl-1-3a.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/LPPL-1.3c.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LPPL-1.3c.json", + "referenceNumber": 85, + "name": "LaTeX Project Public License v1.3c", + "licenseId": "LPPL-1.3c", + "seeAlso": [ + "http://www.latex-project.org/lppl/lppl-1-3c.txt", + "https://opensource.org/licenses/LPPL-1.3c" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/lsof.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/lsof.json", + "referenceNumber": 157, + "name": "lsof License", + "licenseId": "lsof", + "seeAlso": [ + "https://github.com/lsof-org/lsof/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Lucida-Bitmap-Fonts.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Lucida-Bitmap-Fonts.json", + "referenceNumber": 62, + "name": "Lucida Bitmap Fonts License", + "licenseId": "Lucida-Bitmap-Fonts", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/font/bh-100dpi/-/blob/master/COPYING?ref_type\u003dheads" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LZMA-SDK-9.11-to-9.20.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LZMA-SDK-9.11-to-9.20.json", + "referenceNumber": 378, + "name": "LZMA SDK License (versions 9.11 to 9.20)", + "licenseId": "LZMA-SDK-9.11-to-9.20", + "seeAlso": [ + "https://www.7-zip.org/sdk.html", + "https://sourceforge.net/projects/sevenzip/files/LZMA%20SDK/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/LZMA-SDK-9.22.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/LZMA-SDK-9.22.json", + "referenceNumber": 253, + "name": "LZMA SDK License (versions 9.22 and beyond)", + "licenseId": "LZMA-SDK-9.22", + "seeAlso": [ + "https://www.7-zip.org/sdk.html", + "https://sourceforge.net/projects/sevenzip/files/LZMA%20SDK/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Mackerras-3-Clause.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Mackerras-3-Clause.json", + "referenceNumber": 42, + "name": "Mackerras 3-Clause License", + "licenseId": "Mackerras-3-Clause", + "seeAlso": [ + "https://github.com/ppp-project/ppp/blob/master/pppd/chap_ms.c#L6-L28" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Mackerras-3-Clause-acknowledgment.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Mackerras-3-Clause-acknowledgment.json", + "referenceNumber": 605, + "name": "Mackerras 3-Clause - acknowledgment variant", + "licenseId": "Mackerras-3-Clause-acknowledgment", + "seeAlso": [ + "https://github.com/ppp-project/ppp/blob/master/pppd/auth.c#L6-L28" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/magaz.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/magaz.json", + "referenceNumber": 279, + "name": "magaz License", + "licenseId": "magaz", + "seeAlso": [ + "https://mirrors.nic.cz/tex-archive/macros/latex/contrib/magaz/magaz.tex" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/mailprio.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/mailprio.json", + "referenceNumber": 225, + "name": "mailprio License", + "licenseId": "mailprio", + "seeAlso": [ + "https://fossies.org/linux/sendmail/contrib/mailprio" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MakeIndex.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MakeIndex.json", + "referenceNumber": 22, + "name": "MakeIndex License", + "licenseId": "MakeIndex", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MakeIndex" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Martin-Birgmeier.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Martin-Birgmeier.json", + "referenceNumber": 382, + "name": "Martin Birgmeier License", + "licenseId": "Martin-Birgmeier", + "seeAlso": [ + "https://github.com/Perl/perl5/blob/blead/util.c#L6136" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/McPhee-slideshow.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/McPhee-slideshow.json", + "referenceNumber": 288, + "name": "McPhee Slideshow License", + "licenseId": "McPhee-slideshow", + "seeAlso": [ + "https://mirror.las.iastate.edu/tex-archive/graphics/metapost/contrib/macros/slideshow/slideshow.mp" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/metamail.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/metamail.json", + "referenceNumber": 567, + "name": "metamail License", + "licenseId": "metamail", + "seeAlso": [ + "https://github.com/Dual-Life/mime-base64/blob/master/Base64.xs#L12" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Minpack.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Minpack.json", + "referenceNumber": 179, + "name": "Minpack License", + "licenseId": "Minpack", + "seeAlso": [ + "http://www.netlib.org/minpack/disclaimer", + "https://gitlab.com/libeigen/eigen/-/blob/master/COPYING.MINPACK" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MirOS.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MirOS.json", + "referenceNumber": 23, + "name": "The MirOS Licence", + "licenseId": "MirOS", + "seeAlso": [ + "https://opensource.org/licenses/MirOS" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/MIT.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT.json", + "referenceNumber": 124, + "name": "MIT License", + "licenseId": "MIT", + "seeAlso": [ + "https://opensource.org/license/mit/" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/MIT-0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-0.json", + "referenceNumber": 238, + "name": "MIT No Attribution", + "licenseId": "MIT-0", + "seeAlso": [ + "https://github.com/aws/mit-0", + "https://romanrm.net/mit-zero", + "https://github.com/awsdocs/aws-cloud9-user-guide/blob/master/LICENSE-SAMPLECODE" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/MIT-advertising.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-advertising.json", + "referenceNumber": 77, + "name": "Enlightenment License (e16)", + "licenseId": "MIT-advertising", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MIT_With_Advertising" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-CMU.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-CMU.json", + "referenceNumber": 415, + "name": "CMU License", + "licenseId": "MIT-CMU", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:MIT?rd\u003dLicensing/MIT#CMU_Style", + "https://github.com/python-pillow/Pillow/blob/fffb426092c8db24a5f4b6df243a8a3c01fb63cd/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-enna.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-enna.json", + "referenceNumber": 129, + "name": "enna License", + "licenseId": "MIT-enna", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MIT#enna" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-feh.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-feh.json", + "referenceNumber": 37, + "name": "feh License", + "licenseId": "MIT-feh", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MIT#feh" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-Festival.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-Festival.json", + "referenceNumber": 595, + "name": "MIT Festival Variant", + "licenseId": "MIT-Festival", + "seeAlso": [ + "https://github.com/festvox/flite/blob/master/COPYING", + "https://github.com/festvox/speech_tools/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-Modern-Variant.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-Modern-Variant.json", + "referenceNumber": 44, + "name": "MIT License Modern Variant", + "licenseId": "MIT-Modern-Variant", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:MIT#Modern_Variants", + "https://ptolemy.berkeley.edu/copyright.htm", + "https://pirlwww.lpl.arizona.edu/resources/guide/software/PerlTk/Tixlic.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/MIT-open-group.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-open-group.json", + "referenceNumber": 543, + "name": "MIT Open Group variant", + "licenseId": "MIT-open-group", + "seeAlso": [ + "https://gitlab.freedesktop.org/xorg/app/iceauth/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/app/xvinfo/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/app/xsetroot/-/blob/master/COPYING", + "https://gitlab.freedesktop.org/xorg/app/xauth/-/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-testregex.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-testregex.json", + "referenceNumber": 250, + "name": "MIT testregex Variant", + "licenseId": "MIT-testregex", + "seeAlso": [ + "https://github.com/dotnet/runtime/blob/55e1ac7c07df62c4108d4acedf78f77574470ce5/src/libraries/System.Text.RegularExpressions/tests/FunctionalTests/AttRegexTests.cs#L12-L28" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MIT-Wu.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MIT-Wu.json", + "referenceNumber": 608, + "name": "MIT Tom Wu Variant", + "licenseId": "MIT-Wu", + "seeAlso": [ + "https://github.com/chromium/octane/blob/master/crypto.js" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MITNFA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MITNFA.json", + "referenceNumber": 526, + "name": "MIT +no-false-attribs license", + "licenseId": "MITNFA", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MITNFA" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MMIXware.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MMIXware.json", + "referenceNumber": 252, + "name": "MMIXware License", + "licenseId": "MMIXware", + "seeAlso": [ + "https://gitlab.lrz.de/mmix/mmixware/-/blob/master/boilerplate.w" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Motosoto.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Motosoto.json", + "referenceNumber": 448, + "name": "Motosoto License", + "licenseId": "Motosoto", + "seeAlso": [ + "https://opensource.org/licenses/Motosoto" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/MPEG-SSG.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MPEG-SSG.json", + "referenceNumber": 202, + "name": "MPEG Software Simulation", + "licenseId": "MPEG-SSG", + "seeAlso": [ + "https://sourceforge.net/p/netpbm/code/HEAD/tree/super_stable/converter/ppm/ppmtompeg/jrevdct.c#l1189" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/mpi-permissive.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/mpi-permissive.json", + "referenceNumber": 114, + "name": "mpi Permissive License", + "licenseId": "mpi-permissive", + "seeAlso": [ + "https://sources.debian.org/src/openmpi/4.1.0-10/ompi/debuggers/msgq_interface.h/?hl\u003d19#L19" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/mpich2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/mpich2.json", + "referenceNumber": 164, + "name": "mpich2 License", + "licenseId": "mpich2", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/MIT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MPL-1.0.json", + "referenceNumber": 499, + "name": "Mozilla Public License 1.0", + "licenseId": "MPL-1.0", + "seeAlso": [ + "http://www.mozilla.org/MPL/MPL-1.0.html", + "https://opensource.org/licenses/MPL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/MPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MPL-1.1.json", + "referenceNumber": 183, + "name": "Mozilla Public License 1.1", + "licenseId": "MPL-1.1", + "seeAlso": [ + "http://www.mozilla.org/MPL/MPL-1.1.html", + "https://opensource.org/licenses/MPL-1.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/MPL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MPL-2.0.json", + "referenceNumber": 573, + "name": "Mozilla Public License 2.0", + "licenseId": "MPL-2.0", + "seeAlso": [ + "https://www.mozilla.org/MPL/2.0/", + "https://opensource.org/licenses/MPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/MPL-2.0-no-copyleft-exception.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MPL-2.0-no-copyleft-exception.json", + "referenceNumber": 397, + "name": "Mozilla Public License 2.0 (no copyleft exception)", + "licenseId": "MPL-2.0-no-copyleft-exception", + "seeAlso": [ + "https://www.mozilla.org/MPL/2.0/", + "https://opensource.org/licenses/MPL-2.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/mplus.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/mplus.json", + "referenceNumber": 160, + "name": "mplus Font License", + "licenseId": "mplus", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:Mplus?rd\u003dLicensing/mplus" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MS-LPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MS-LPL.json", + "referenceNumber": 199, + "name": "Microsoft Limited Public License", + "licenseId": "MS-LPL", + "seeAlso": [ + "https://www.openhub.net/licenses/mslpl", + "https://github.com/gabegundy/atlserver/blob/master/License.txt", + "https://en.wikipedia.org/wiki/Shared_Source_Initiative#Microsoft_Limited_Public_License_(Ms-LPL)" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MS-PL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MS-PL.json", + "referenceNumber": 485, + "name": "Microsoft Public License", + "licenseId": "MS-PL", + "seeAlso": [ + "http://www.microsoft.com/opensource/licenses.mspx", + "https://opensource.org/licenses/MS-PL" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/MS-RL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MS-RL.json", + "referenceNumber": 284, + "name": "Microsoft Reciprocal License", + "licenseId": "MS-RL", + "seeAlso": [ + "http://www.microsoft.com/opensource/licenses.mspx", + "https://opensource.org/licenses/MS-RL" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/MTLL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MTLL.json", + "referenceNumber": 387, + "name": "Matrix Template Library License", + "licenseId": "MTLL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Matrix_Template_Library_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MulanPSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MulanPSL-1.0.json", + "referenceNumber": 407, + "name": "Mulan Permissive Software License, Version 1", + "licenseId": "MulanPSL-1.0", + "seeAlso": [ + "https://license.coscl.org.cn/MulanPSL/", + "https://github.com/yuwenlong/longphp/blob/25dfb70cc2a466dc4bb55ba30901cbce08d164b5/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/MulanPSL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/MulanPSL-2.0.json", + "referenceNumber": 439, + "name": "Mulan Permissive Software License, Version 2", + "licenseId": "MulanPSL-2.0", + "seeAlso": [ + "https://license.coscl.org.cn/MulanPSL2" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Multics.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Multics.json", + "referenceNumber": 465, + "name": "Multics License", + "licenseId": "Multics", + "seeAlso": [ + "https://opensource.org/licenses/Multics" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Mup.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Mup.json", + "referenceNumber": 607, + "name": "Mup License", + "licenseId": "Mup", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Mup" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NAIST-2003.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NAIST-2003.json", + "referenceNumber": 265, + "name": "Nara Institute of Science and Technology License (2003)", + "licenseId": "NAIST-2003", + "seeAlso": [ + "https://enterprise.dejacode.com/licenses/public/naist-2003/#license-text", + "https://github.com/nodejs/node/blob/4a19cc8947b1bba2b2d27816ec3d0edf9b28e503/LICENSE#L343" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NASA-1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NASA-1.3.json", + "referenceNumber": 507, + "name": "NASA Open Source Agreement 1.3", + "licenseId": "NASA-1.3", + "seeAlso": [ + "http://ti.arc.nasa.gov/opensource/nosa/", + "https://opensource.org/licenses/NASA-1.3" + ], + "isOsiApproved": true, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/Naumen.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Naumen.json", + "referenceNumber": 221, + "name": "Naumen Public License", + "licenseId": "Naumen", + "seeAlso": [ + "https://opensource.org/licenses/Naumen" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/NBPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NBPL-1.0.json", + "referenceNumber": 61, + "name": "Net Boolean Public License v1", + "licenseId": "NBPL-1.0", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d37b4b3f6cc4bf34e1d3dec61e69914b9819d8894" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NCGL-UK-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NCGL-UK-2.0.json", + "referenceNumber": 443, + "name": "Non-Commercial Government Licence", + "licenseId": "NCGL-UK-2.0", + "seeAlso": [ + "http://www.nationalarchives.gov.uk/doc/non-commercial-government-licence/version/2/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NCSA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NCSA.json", + "referenceNumber": 45, + "name": "University of Illinois/NCSA Open Source License", + "licenseId": "NCSA", + "seeAlso": [ + "http://otm.illinois.edu/uiuc_openSource", + "https://opensource.org/licenses/NCSA" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Net-SNMP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Net-SNMP.json", + "referenceNumber": 71, + "name": "Net-SNMP License", + "licenseId": "Net-SNMP", + "seeAlso": [ + "http://net-snmp.sourceforge.net/about/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NetCDF.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NetCDF.json", + "referenceNumber": 119, + "name": "NetCDF license", + "licenseId": "NetCDF", + "seeAlso": [ + "http://www.unidata.ucar.edu/software/netcdf/copyright.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Newsletr.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Newsletr.json", + "referenceNumber": 616, + "name": "Newsletr License", + "licenseId": "Newsletr", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Newsletr" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NGPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NGPL.json", + "referenceNumber": 248, + "name": "Nethack General Public License", + "licenseId": "NGPL", + "seeAlso": [ + "https://opensource.org/licenses/NGPL" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/NICTA-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NICTA-1.0.json", + "referenceNumber": 48, + "name": "NICTA Public Software License, Version 1.0", + "licenseId": "NICTA-1.0", + "seeAlso": [ + "https://opensource.apple.com/source/mDNSResponder/mDNSResponder-320.10/mDNSPosix/nss_ReadMe.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NIST-PD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NIST-PD.json", + "referenceNumber": 209, + "name": "NIST Public Domain Notice", + "licenseId": "NIST-PD", + "seeAlso": [ + "https://github.com/tcheneau/simpleRPL/blob/e645e69e38dd4e3ccfeceb2db8cba05b7c2e0cd3/LICENSE.txt", + "https://github.com/tcheneau/Routing/blob/f09f46fcfe636107f22f2c98348188a65a135d98/README.md" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NIST-PD-fallback.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NIST-PD-fallback.json", + "referenceNumber": 49, + "name": "NIST Public Domain Notice with license fallback", + "licenseId": "NIST-PD-fallback", + "seeAlso": [ + "https://github.com/usnistgov/jsip/blob/59700e6926cbe96c5cdae897d9a7d2656b42abe3/LICENSE", + "https://github.com/usnistgov/fipy/blob/86aaa5c2ba2c6f1be19593c5986071cf6568cc34/LICENSE.rst" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NIST-Software.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NIST-Software.json", + "referenceNumber": 94, + "name": "NIST Software License", + "licenseId": "NIST-Software", + "seeAlso": [ + "https://github.com/open-quantum-safe/liboqs/blob/40b01fdbb270f8614fde30e65d30e9da18c02393/src/common/rand/rand_nist.c#L1-L15" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NLOD-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NLOD-1.0.json", + "referenceNumber": 217, + "name": "Norwegian Licence for Open Government Data (NLOD) 1.0", + "licenseId": "NLOD-1.0", + "seeAlso": [ + "http://data.norge.no/nlod/en/1.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NLOD-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NLOD-2.0.json", + "referenceNumber": 373, + "name": "Norwegian Licence for Open Government Data (NLOD) 2.0", + "licenseId": "NLOD-2.0", + "seeAlso": [ + "http://data.norge.no/nlod/en/2.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NLPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NLPL.json", + "referenceNumber": 66, + "name": "No Limit Public License", + "licenseId": "NLPL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/NLPL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Nokia.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Nokia.json", + "referenceNumber": 128, + "name": "Nokia Open Source License", + "licenseId": "Nokia", + "seeAlso": [ + "https://opensource.org/licenses/nokia" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/NOSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NOSL.json", + "referenceNumber": 1, + "name": "Netizen Open Source License", + "licenseId": "NOSL", + "seeAlso": [ + "http://bits.netizen.com.au/licenses/NOSL/nosl.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Noweb.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Noweb.json", + "referenceNumber": 476, + "name": "Noweb License", + "licenseId": "Noweb", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Noweb" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NPL-1.0.json", + "referenceNumber": 210, + "name": "Netscape Public License v1.0", + "licenseId": "NPL-1.0", + "seeAlso": [ + "http://www.mozilla.org/MPL/NPL/1.0/" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/NPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NPL-1.1.json", + "referenceNumber": 337, + "name": "Netscape Public License v1.1", + "licenseId": "NPL-1.1", + "seeAlso": [ + "http://www.mozilla.org/MPL/NPL/1.1/" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/NPOSL-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NPOSL-3.0.json", + "referenceNumber": 635, + "name": "Non-Profit Open Software License 3.0", + "licenseId": "NPOSL-3.0", + "seeAlso": [ + "https://opensource.org/licenses/NOSL3.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/NRL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NRL.json", + "referenceNumber": 369, + "name": "NRL License", + "licenseId": "NRL", + "seeAlso": [ + "http://web.mit.edu/network/isakmp/nrllicense.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/NTP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NTP.json", + "referenceNumber": 470, + "name": "NTP License", + "licenseId": "NTP", + "seeAlso": [ + "https://opensource.org/licenses/NTP" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/NTP-0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/NTP-0.json", + "referenceNumber": 186, + "name": "NTP No Attribution", + "licenseId": "NTP-0", + "seeAlso": [ + "https://github.com/tytso/e2fsprogs/blob/master/lib/et/et_name.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Nunit.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/Nunit.json", + "referenceNumber": 471, + "name": "Nunit License", + "licenseId": "Nunit", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Nunit" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/O-UDA-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/O-UDA-1.0.json", + "referenceNumber": 118, + "name": "Open Use of Data Agreement v1.0", + "licenseId": "O-UDA-1.0", + "seeAlso": [ + "https://github.com/microsoft/Open-Use-of-Data-Agreement/blob/v1.0/O-UDA-1.0.md", + "https://cdla.dev/open-use-of-data-agreement-v1-0/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OCCT-PL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OCCT-PL.json", + "referenceNumber": 521, + "name": "Open CASCADE Technology Public License", + "licenseId": "OCCT-PL", + "seeAlso": [ + "http://www.opencascade.com/content/occt-public-license" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OCLC-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OCLC-2.0.json", + "referenceNumber": 566, + "name": "OCLC Research Public License 2.0", + "licenseId": "OCLC-2.0", + "seeAlso": [ + "http://www.oclc.org/research/activities/software/license/v2final.htm", + "https://opensource.org/licenses/OCLC-2.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/ODbL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ODbL-1.0.json", + "referenceNumber": 589, + "name": "Open Data Commons Open Database License v1.0", + "licenseId": "ODbL-1.0", + "seeAlso": [ + "http://www.opendatacommons.org/licenses/odbl/1.0/", + "https://opendatacommons.org/licenses/odbl/1-0/" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ODC-By-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ODC-By-1.0.json", + "referenceNumber": 141, + "name": "Open Data Commons Attribution License v1.0", + "licenseId": "ODC-By-1.0", + "seeAlso": [ + "https://opendatacommons.org/licenses/by/1.0/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OFFIS.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFFIS.json", + "referenceNumber": 603, + "name": "OFFIS License", + "licenseId": "OFFIS", + "seeAlso": [ + "https://sourceforge.net/p/xmedcon/code/ci/master/tree/libs/dicom/README" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OFL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.0.json", + "referenceNumber": 91, + "name": "SIL Open Font License 1.0", + "licenseId": "OFL-1.0", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL10_web" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OFL-1.0-no-RFN.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.0-no-RFN.json", + "referenceNumber": 149, + "name": "SIL Open Font License 1.0 with no Reserved Font Name", + "licenseId": "OFL-1.0-no-RFN", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL10_web" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OFL-1.0-RFN.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.0-RFN.json", + "referenceNumber": 568, + "name": "SIL Open Font License 1.0 with Reserved Font Name", + "licenseId": "OFL-1.0-RFN", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL10_web" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OFL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.1.json", + "referenceNumber": 163, + "name": "SIL Open Font License 1.1", + "licenseId": "OFL-1.1", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL_web", + "https://opensource.org/licenses/OFL-1.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OFL-1.1-no-RFN.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.1-no-RFN.json", + "referenceNumber": 270, + "name": "SIL Open Font License 1.1 with no Reserved Font Name", + "licenseId": "OFL-1.1-no-RFN", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL_web", + "https://opensource.org/licenses/OFL-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OFL-1.1-RFN.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OFL-1.1-RFN.json", + "referenceNumber": 80, + "name": "SIL Open Font License 1.1 with Reserved Font Name", + "licenseId": "OFL-1.1-RFN", + "seeAlso": [ + "http://scripts.sil.org/cms/scripts/page.php?item_id\u003dOFL_web", + "https://opensource.org/licenses/OFL-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OGC-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGC-1.0.json", + "referenceNumber": 86, + "name": "OGC Software License, Version 1.0", + "licenseId": "OGC-1.0", + "seeAlso": [ + "https://www.ogc.org/ogc/software/1.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGDL-Taiwan-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGDL-Taiwan-1.0.json", + "referenceNumber": 347, + "name": "Taiwan Open Government Data License, version 1.0", + "licenseId": "OGDL-Taiwan-1.0", + "seeAlso": [ + "https://data.gov.tw/license" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGL-Canada-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGL-Canada-2.0.json", + "referenceNumber": 506, + "name": "Open Government Licence - Canada", + "licenseId": "OGL-Canada-2.0", + "seeAlso": [ + "https://open.canada.ca/en/open-government-licence-canada" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGL-UK-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGL-UK-1.0.json", + "referenceNumber": 245, + "name": "Open Government Licence v1.0", + "licenseId": "OGL-UK-1.0", + "seeAlso": [ + "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/1/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGL-UK-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGL-UK-2.0.json", + "referenceNumber": 399, + "name": "Open Government Licence v2.0", + "licenseId": "OGL-UK-2.0", + "seeAlso": [ + "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/2/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGL-UK-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGL-UK-3.0.json", + "referenceNumber": 142, + "name": "Open Government Licence v3.0", + "licenseId": "OGL-UK-3.0", + "seeAlso": [ + "http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OGTSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OGTSL.json", + "referenceNumber": 214, + "name": "Open Group Test Suite License", + "licenseId": "OGTSL", + "seeAlso": [ + "http://www.opengroup.org/testing/downloads/The_Open_Group_TSL.txt", + "https://opensource.org/licenses/OGTSL" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OLDAP-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-1.1.json", + "referenceNumber": 565, + "name": "Open LDAP Public License v1.1", + "licenseId": "OLDAP-1.1", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d806557a5ad59804ef3a44d5abfbe91d706b0791f" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-1.2.json", + "referenceNumber": 321, + "name": "Open LDAP Public License v1.2", + "licenseId": "OLDAP-1.2", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d42b0383c50c299977b5893ee695cf4e486fb0dc7" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-1.3.json", + "referenceNumber": 312, + "name": "Open LDAP Public License v1.3", + "licenseId": "OLDAP-1.3", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003de5f8117f0ce088d0bd7a8e18ddf37eaa40eb09b1" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-1.4.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-1.4.json", + "referenceNumber": 120, + "name": "Open LDAP Public License v1.4", + "licenseId": "OLDAP-1.4", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dc9f95c2f3f2ffb5e0ae55fe7388af75547660941" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.0.json", + "referenceNumber": 450, + "name": "Open LDAP Public License v2.0 (or possibly 2.0A and 2.0B)", + "licenseId": "OLDAP-2.0", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dcbf50f4e1185a21abd4c0a54d3f4341fe28f36ea" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.0.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.0.1.json", + "referenceNumber": 59, + "name": "Open LDAP Public License v2.0.1", + "licenseId": "OLDAP-2.0.1", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003db6d68acd14e51ca3aab4428bf26522aa74873f0e" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.1.json", + "referenceNumber": 458, + "name": "Open LDAP Public License v2.1", + "licenseId": "OLDAP-2.1", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003db0d176738e96a0d3b9f85cb51e140a86f21be715" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.2.json", + "referenceNumber": 175, + "name": "Open LDAP Public License v2.2", + "licenseId": "OLDAP-2.2", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d470b0c18ec67621c85881b2733057fecf4a1acc3" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.2.1.json", + "referenceNumber": 32, + "name": "Open LDAP Public License v2.2.1", + "licenseId": "OLDAP-2.2.1", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d4bc786f34b50aa301be6f5600f58a980070f481e" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.2.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.2.2.json", + "referenceNumber": 293, + "name": "Open LDAP Public License 2.2.2", + "licenseId": "OLDAP-2.2.2", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003ddf2cc1e21eb7c160695f5b7cffd6296c151ba188" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.3.json", + "referenceNumber": 405, + "name": "Open LDAP Public License v2.3", + "licenseId": "OLDAP-2.3", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dd32cf54a32d581ab475d23c810b0a7fbaf8d63c3" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.4.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.4.json", + "referenceNumber": 619, + "name": "Open LDAP Public License v2.4", + "licenseId": "OLDAP-2.4", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003dcd1284c4a91a8a380d904eee68d1583f989ed386" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.5.json", + "referenceNumber": 426, + "name": "Open LDAP Public License v2.5", + "licenseId": "OLDAP-2.5", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d6852b9d90022e8593c98205413380536b1b5a7cf" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.6.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.6.json", + "referenceNumber": 9, + "name": "Open LDAP Public License v2.6", + "licenseId": "OLDAP-2.6", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d1cae062821881f41b73012ba816434897abf4205" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.7.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.7.json", + "referenceNumber": 178, + "name": "Open LDAP Public License v2.7", + "licenseId": "OLDAP-2.7", + "seeAlso": [ + "http://www.openldap.org/devel/gitweb.cgi?p\u003dopenldap.git;a\u003dblob;f\u003dLICENSE;hb\u003d47c2415c1df81556eeb39be6cad458ef87c534a2" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OLDAP-2.8.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLDAP-2.8.json", + "referenceNumber": 132, + "name": "Open LDAP Public License v2.8", + "licenseId": "OLDAP-2.8", + "seeAlso": [ + "http://www.openldap.org/software/release/license.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OLFL-1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OLFL-1.3.json", + "referenceNumber": 556, + "name": "Open Logistics Foundation License Version 1.3", + "licenseId": "OLFL-1.3", + "seeAlso": [ + "https://openlogisticsfoundation.org/licenses/", + "https://opensource.org/license/olfl-1-3/" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OML.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OML.json", + "referenceNumber": 325, + "name": "Open Market License", + "licenseId": "OML", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Open_Market_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OpenPBS-2.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OpenPBS-2.3.json", + "referenceNumber": 490, + "name": "OpenPBS v2.3 Software License", + "licenseId": "OpenPBS-2.3", + "seeAlso": [ + "https://github.com/adaptivecomputing/torque/blob/master/PBS_License.txt", + "https://www.mcs.anl.gov/research/projects/openpbs/PBS_License.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OpenSSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OpenSSL.json", + "referenceNumber": 564, + "name": "OpenSSL License", + "licenseId": "OpenSSL", + "seeAlso": [ + "http://www.openssl.org/source/license.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OpenSSL-standalone.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OpenSSL-standalone.json", + "referenceNumber": 597, + "name": "OpenSSL License - standalone", + "licenseId": "OpenSSL-standalone", + "seeAlso": [ + "https://library.netapp.com/ecm/ecm_download_file/ECMP1196395", + "https://hstechdocs.helpsystems.com/manuals/globalscape/archive/cuteftp6/open_ssl_license_agreement.htm" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OpenVision.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OpenVision.json", + "referenceNumber": 590, + "name": "OpenVision License", + "licenseId": "OpenVision", + "seeAlso": [ + "https://github.com/krb5/krb5/blob/krb5-1.21.2-final/NOTICE#L66-L98", + "https://web.mit.edu/kerberos/krb5-1.21/doc/mitK5license.html", + "https://fedoraproject.org/wiki/Licensing:MIT#OpenVision_Variant" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OPL-1.0.json", + "referenceNumber": 116, + "name": "Open Public License v1.0", + "licenseId": "OPL-1.0", + "seeAlso": [ + "http://old.koalateam.com/jackaroo/OPL_1_0.TXT", + "https://fedoraproject.org/wiki/Licensing/Open_Public_License" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/OPL-UK-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OPL-UK-3.0.json", + "referenceNumber": 276, + "name": "United Kingdom Open Parliament Licence v3.0", + "licenseId": "OPL-UK-3.0", + "seeAlso": [ + "https://www.parliament.uk/site-information/copyright-parliament/open-parliament-licence/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OPUBL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OPUBL-1.0.json", + "referenceNumber": 479, + "name": "Open Publication License v1.0", + "licenseId": "OPUBL-1.0", + "seeAlso": [ + "http://opencontent.org/openpub/", + "https://www.debian.org/opl", + "https://www.ctan.org/license/opl" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/OSET-PL-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSET-PL-2.1.json", + "referenceNumber": 19, + "name": "OSET Public License version 2.1", + "licenseId": "OSET-PL-2.1", + "seeAlso": [ + "http://www.osetfoundation.org/public-license", + "https://opensource.org/licenses/OPL-2.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/OSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSL-1.0.json", + "referenceNumber": 511, + "name": "Open Software License 1.0", + "licenseId": "OSL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/OSL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OSL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSL-1.1.json", + "referenceNumber": 327, + "name": "Open Software License 1.1", + "licenseId": "OSL-1.1", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/OSL1.1" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OSL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSL-2.0.json", + "referenceNumber": 579, + "name": "Open Software License 2.0", + "licenseId": "OSL-2.0", + "seeAlso": [ + "http://web.archive.org/web/20041020171434/http://www.rosenlaw.com/osl2.0.html" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OSL-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSL-2.1.json", + "referenceNumber": 480, + "name": "Open Software License 2.1", + "licenseId": "OSL-2.1", + "seeAlso": [ + "http://web.archive.org/web/20050212003940/http://www.rosenlaw.com/osl21.htm", + "https://opensource.org/licenses/OSL-2.1" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/OSL-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/OSL-3.0.json", + "referenceNumber": 72, + "name": "Open Software License 3.0", + "licenseId": "OSL-3.0", + "seeAlso": [ + "https://web.archive.org/web/20120101081418/http://rosenlaw.com:80/OSL3.0.htm", + "https://opensource.org/licenses/OSL-3.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/PADL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PADL.json", + "referenceNumber": 145, + "name": "PADL License", + "licenseId": "PADL", + "seeAlso": [ + "https://git.openldap.org/openldap/openldap/-/blob/master/libraries/libldap/os-local.c?ref_type\u003dheads#L19-23" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Parity-6.0.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Parity-6.0.0.json", + "referenceNumber": 546, + "name": "The Parity Public License 6.0.0", + "licenseId": "Parity-6.0.0", + "seeAlso": [ + "https://paritylicense.com/versions/6.0.0.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Parity-7.0.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Parity-7.0.0.json", + "referenceNumber": 281, + "name": "The Parity Public License 7.0.0", + "licenseId": "Parity-7.0.0", + "seeAlso": [ + "https://paritylicense.com/versions/7.0.0.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/PDDL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PDDL-1.0.json", + "referenceNumber": 231, + "name": "Open Data Commons Public Domain Dedication \u0026 License 1.0", + "licenseId": "PDDL-1.0", + "seeAlso": [ + "http://opendatacommons.org/licenses/pddl/1.0/", + "https://opendatacommons.org/licenses/pddl/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/PHP-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PHP-3.0.json", + "referenceNumber": 622, + "name": "PHP License v3.0", + "licenseId": "PHP-3.0", + "seeAlso": [ + "http://www.php.net/license/3_0.txt", + "https://opensource.org/licenses/PHP-3.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/PHP-3.01.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PHP-3.01.json", + "referenceNumber": 11, + "name": "PHP License v3.01", + "licenseId": "PHP-3.01", + "seeAlso": [ + "http://www.php.net/license/3_01.txt" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Pixar.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Pixar.json", + "referenceNumber": 240, + "name": "Pixar License", + "licenseId": "Pixar", + "seeAlso": [ + "https://github.com/PixarAnimationStudios/OpenSubdiv/raw/v3_5_0/LICENSE.txt", + "https://graphics.pixar.com/opensubdiv/docs/license.html", + "https://github.com/PixarAnimationStudios/OpenSubdiv/blob/v3_5_0/opensubdiv/version.cpp#L2-L22" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Plexus.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Plexus.json", + "referenceNumber": 354, + "name": "Plexus Classworlds License", + "licenseId": "Plexus", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Plexus_Classworlds_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/pnmstitch.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/pnmstitch.json", + "referenceNumber": 76, + "name": "pnmstitch License", + "licenseId": "pnmstitch", + "seeAlso": [ + "https://sourceforge.net/p/netpbm/code/HEAD/tree/super_stable/editor/pnmstitch.c#l2" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/PolyForm-Noncommercial-1.0.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PolyForm-Noncommercial-1.0.0.json", + "referenceNumber": 343, + "name": "PolyForm Noncommercial License 1.0.0", + "licenseId": "PolyForm-Noncommercial-1.0.0", + "seeAlso": [ + "https://polyformproject.org/licenses/noncommercial/1.0.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/PolyForm-Small-Business-1.0.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PolyForm-Small-Business-1.0.0.json", + "referenceNumber": 455, + "name": "PolyForm Small Business License 1.0.0", + "licenseId": "PolyForm-Small-Business-1.0.0", + "seeAlso": [ + "https://polyformproject.org/licenses/small-business/1.0.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/PostgreSQL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PostgreSQL.json", + "referenceNumber": 390, + "name": "PostgreSQL License", + "licenseId": "PostgreSQL", + "seeAlso": [ + "http://www.postgresql.org/about/licence", + "https://opensource.org/licenses/PostgreSQL" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/PSF-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/PSF-2.0.json", + "referenceNumber": 381, + "name": "Python Software Foundation License 2.0", + "licenseId": "PSF-2.0", + "seeAlso": [ + "https://opensource.org/licenses/Python-2.0" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/psfrag.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/psfrag.json", + "referenceNumber": 150, + "name": "psfrag License", + "licenseId": "psfrag", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/psfrag" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/psutils.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/psutils.json", + "referenceNumber": 146, + "name": "psutils License", + "licenseId": "psutils", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/psutils" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Python-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Python-2.0.json", + "referenceNumber": 383, + "name": "Python License 2.0", + "licenseId": "Python-2.0", + "seeAlso": [ + "https://opensource.org/licenses/Python-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Python-2.0.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Python-2.0.1.json", + "referenceNumber": 559, + "name": "Python License 2.0.1", + "licenseId": "Python-2.0.1", + "seeAlso": [ + "https://www.python.org/download/releases/2.0.1/license/", + "https://docs.python.org/3/license.html", + "https://github.com/python/cpython/blob/main/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/python-ldap.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/python-ldap.json", + "referenceNumber": 581, + "name": "Python ldap License", + "licenseId": "python-ldap", + "seeAlso": [ + "https://github.com/python-ldap/python-ldap/blob/main/LICENCE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Qhull.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Qhull.json", + "referenceNumber": 241, + "name": "Qhull License", + "licenseId": "Qhull", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Qhull" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/QPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/QPL-1.0.json", + "referenceNumber": 459, + "name": "Q Public License 1.0", + "licenseId": "QPL-1.0", + "seeAlso": [ + "http://doc.qt.nokia.com/3.3/license.html", + "https://opensource.org/licenses/QPL-1.0", + "https://doc.qt.io/archives/3.3/license.html" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/QPL-1.0-INRIA-2004.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/QPL-1.0-INRIA-2004.json", + "referenceNumber": 537, + "name": "Q Public License 1.0 - INRIA 2004 variant", + "licenseId": "QPL-1.0-INRIA-2004", + "seeAlso": [ + "https://github.com/maranget/hevea/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/radvd.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/radvd.json", + "referenceNumber": 5, + "name": "radvd License", + "licenseId": "radvd", + "seeAlso": [ + "https://github.com/radvd-project/radvd/blob/master/COPYRIGHT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Rdisc.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Rdisc.json", + "referenceNumber": 591, + "name": "Rdisc License", + "licenseId": "Rdisc", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Rdisc_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/RHeCos-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RHeCos-1.1.json", + "referenceNumber": 484, + "name": "Red Hat eCos Public License v1.1", + "licenseId": "RHeCos-1.1", + "seeAlso": [ + "http://ecos.sourceware.org/old-license.html" + ], + "isOsiApproved": false, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/RPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RPL-1.1.json", + "referenceNumber": 613, + "name": "Reciprocal Public License 1.1", + "licenseId": "RPL-1.1", + "seeAlso": [ + "https://opensource.org/licenses/RPL-1.1" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/RPL-1.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RPL-1.5.json", + "referenceNumber": 531, + "name": "Reciprocal Public License 1.5", + "licenseId": "RPL-1.5", + "seeAlso": [ + "https://opensource.org/licenses/RPL-1.5" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/RPSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RPSL-1.0.json", + "referenceNumber": 168, + "name": "RealNetworks Public Source License v1.0", + "licenseId": "RPSL-1.0", + "seeAlso": [ + "https://helixcommunity.org/content/rpsl", + "https://opensource.org/licenses/RPSL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/RSA-MD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RSA-MD.json", + "referenceNumber": 515, + "name": "RSA Message-Digest License", + "licenseId": "RSA-MD", + "seeAlso": [ + "http://www.faqs.org/rfcs/rfc1321.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/RSCPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/RSCPL.json", + "referenceNumber": 580, + "name": "Ricoh Source Code Public License", + "licenseId": "RSCPL", + "seeAlso": [ + "http://wayback.archive.org/web/20060715140826/http://www.risource.org/RPL/RPL-1.0A.shtml", + "https://opensource.org/licenses/RSCPL" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Ruby.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Ruby.json", + "referenceNumber": 528, + "name": "Ruby License", + "licenseId": "Ruby", + "seeAlso": [ + "https://www.ruby-lang.org/en/about/license.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/SAX-PD.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SAX-PD.json", + "referenceNumber": 169, + "name": "Sax Public Domain Notice", + "licenseId": "SAX-PD", + "seeAlso": [ + "http://www.saxproject.org/copying.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SAX-PD-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SAX-PD-2.0.json", + "referenceNumber": 585, + "name": "Sax Public Domain Notice 2.0", + "licenseId": "SAX-PD-2.0", + "seeAlso": [ + "http://www.saxproject.org/copying.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Saxpath.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Saxpath.json", + "referenceNumber": 430, + "name": "Saxpath License", + "licenseId": "Saxpath", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Saxpath_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SCEA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SCEA.json", + "referenceNumber": 230, + "name": "SCEA Shared Source License", + "licenseId": "SCEA", + "seeAlso": [ + "http://research.scea.com/scea_shared_source_license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SchemeReport.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SchemeReport.json", + "referenceNumber": 552, + "name": "Scheme Language Report License", + "licenseId": "SchemeReport", + "seeAlso": [], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Sendmail.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Sendmail.json", + "referenceNumber": 427, + "name": "Sendmail License", + "licenseId": "Sendmail", + "seeAlso": [ + "http://www.sendmail.com/pdfs/open_source/sendmail_license.pdf", + "https://web.archive.org/web/20160322142305/https://www.sendmail.com/pdfs/open_source/sendmail_license.pdf" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Sendmail-8.23.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Sendmail-8.23.json", + "referenceNumber": 24, + "name": "Sendmail License 8.23", + "licenseId": "Sendmail-8.23", + "seeAlso": [ + "https://www.proofpoint.com/sites/default/files/sendmail-license.pdf", + "https://web.archive.org/web/20181003101040/https://www.proofpoint.com/sites/default/files/sendmail-license.pdf" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SGI-B-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SGI-B-1.0.json", + "referenceNumber": 25, + "name": "SGI Free Software License B v1.0", + "licenseId": "SGI-B-1.0", + "seeAlso": [ + "http://oss.sgi.com/projects/FreeB/SGIFreeSWLicB.1.0.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SGI-B-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SGI-B-1.1.json", + "referenceNumber": 16, + "name": "SGI Free Software License B v1.1", + "licenseId": "SGI-B-1.1", + "seeAlso": [ + "http://oss.sgi.com/projects/FreeB/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SGI-B-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SGI-B-2.0.json", + "referenceNumber": 431, + "name": "SGI Free Software License B v2.0", + "licenseId": "SGI-B-2.0", + "seeAlso": [ + "http://oss.sgi.com/projects/FreeB/SGIFreeSWLicB.2.0.pdf" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/SGI-OpenGL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SGI-OpenGL.json", + "referenceNumber": 408, + "name": "SGI OpenGL License", + "licenseId": "SGI-OpenGL", + "seeAlso": [ + "https://gitlab.freedesktop.org/mesa/glw/-/blob/master/README?ref_type\u003dheads" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SGP4.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SGP4.json", + "referenceNumber": 461, + "name": "SGP4 Permission Notice", + "licenseId": "SGP4", + "seeAlso": [ + "https://celestrak.org/publications/AIAA/2006-6753/faq.php" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SHL-0.5.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SHL-0.5.json", + "referenceNumber": 298, + "name": "Solderpad Hardware License v0.5", + "licenseId": "SHL-0.5", + "seeAlso": [ + "https://solderpad.org/licenses/SHL-0.5/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SHL-0.51.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SHL-0.51.json", + "referenceNumber": 504, + "name": "Solderpad Hardware License, Version 0.51", + "licenseId": "SHL-0.51", + "seeAlso": [ + "https://solderpad.org/licenses/SHL-0.51/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SimPL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SimPL-2.0.json", + "referenceNumber": 617, + "name": "Simple Public License 2.0", + "licenseId": "SimPL-2.0", + "seeAlso": [ + "https://opensource.org/licenses/SimPL-2.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/SISSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SISSL.json", + "referenceNumber": 525, + "name": "Sun Industry Standards Source License v1.1", + "licenseId": "SISSL", + "seeAlso": [ + "http://www.openoffice.org/licenses/sissl_license.html", + "https://opensource.org/licenses/SISSL" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/SISSL-1.2.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SISSL-1.2.json", + "referenceNumber": 493, + "name": "Sun Industry Standards Source License v1.2", + "licenseId": "SISSL-1.2", + "seeAlso": [ + "http://gridscheduler.sourceforge.net/Gridengine_SISSL_license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SL.json", + "referenceNumber": 190, + "name": "SL License", + "licenseId": "SL", + "seeAlso": [ + "https://github.com/mtoyoda/sl/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Sleepycat.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Sleepycat.json", + "referenceNumber": 239, + "name": "Sleepycat License", + "licenseId": "Sleepycat", + "seeAlso": [ + "https://opensource.org/licenses/Sleepycat" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/SMLNJ.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SMLNJ.json", + "referenceNumber": 63, + "name": "Standard ML of New Jersey License", + "licenseId": "SMLNJ", + "seeAlso": [ + "https://www.smlnj.org/license.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/SMPPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SMPPL.json", + "referenceNumber": 193, + "name": "Secure Messaging Protocol Public License", + "licenseId": "SMPPL", + "seeAlso": [ + "https://github.com/dcblake/SMP/blob/master/Documentation/License.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SNIA.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SNIA.json", + "referenceNumber": 211, + "name": "SNIA Public License 1.1", + "licenseId": "SNIA", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/SNIA_Public_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/snprintf.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/snprintf.json", + "referenceNumber": 159, + "name": "snprintf License", + "licenseId": "snprintf", + "seeAlso": [ + "https://github.com/openssh/openssh-portable/blob/master/openbsd-compat/bsd-snprintf.c#L2" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/softSurfer.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/softSurfer.json", + "referenceNumber": 489, + "name": "softSurfer License", + "licenseId": "softSurfer", + "seeAlso": [ + "https://github.com/mm2/Little-CMS/blob/master/src/cmssm.c#L207", + "https://fedoraproject.org/wiki/Licensing/softSurfer" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Soundex.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Soundex.json", + "referenceNumber": 43, + "name": "Soundex License", + "licenseId": "Soundex", + "seeAlso": [ + "https://metacpan.org/release/RJBS/Text-Soundex-3.05/source/Soundex.pm#L3-11" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Spencer-86.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Spencer-86.json", + "referenceNumber": 469, + "name": "Spencer License 86", + "licenseId": "Spencer-86", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Henry_Spencer_Reg-Ex_Library_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Spencer-94.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Spencer-94.json", + "referenceNumber": 583, + "name": "Spencer License 94", + "licenseId": "Spencer-94", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Henry_Spencer_Reg-Ex_Library_License", + "https://metacpan.org/release/KNOK/File-MMagic-1.30/source/COPYING#L28" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Spencer-99.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Spencer-99.json", + "referenceNumber": 420, + "name": "Spencer License 99", + "licenseId": "Spencer-99", + "seeAlso": [ + "http://www.opensource.apple.com/source/tcl/tcl-5/tcl/generic/regfronts.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SPL-1.0.json", + "referenceNumber": 3, + "name": "Sun Public License v1.0", + "licenseId": "SPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/SPL-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ssh-keyscan.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ssh-keyscan.json", + "referenceNumber": 84, + "name": "ssh-keyscan License", + "licenseId": "ssh-keyscan", + "seeAlso": [ + "https://github.com/openssh/openssh-portable/blob/master/LICENCE#L82" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SSH-OpenSSH.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SSH-OpenSSH.json", + "referenceNumber": 364, + "name": "SSH OpenSSH license", + "licenseId": "SSH-OpenSSH", + "seeAlso": [ + "https://github.com/openssh/openssh-portable/blob/1b11ea7c58cd5c59838b5fa574cd456d6047b2d4/LICENCE#L10" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SSH-short.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SSH-short.json", + "referenceNumber": 428, + "name": "SSH short notice", + "licenseId": "SSH-short", + "seeAlso": [ + "https://github.com/openssh/openssh-portable/blob/1b11ea7c58cd5c59838b5fa574cd456d6047b2d4/pathnames.h", + "http://web.mit.edu/kolya/.f/root/athena.mit.edu/sipb.mit.edu/project/openssh/OldFiles/src/openssh-2.9.9p2/ssh-add.1", + "https://joinup.ec.europa.eu/svn/lesoll/trunk/italc/lib/src/dsa_key.cpp" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SSLeay-standalone.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SSLeay-standalone.json", + "referenceNumber": 419, + "name": "SSLeay License - standalone", + "licenseId": "SSLeay-standalone", + "seeAlso": [ + "https://www.tq-group.com/filedownloads/files/software-license-conditions/OriginalSSLeay/OriginalSSLeay.pdf" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SSPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SSPL-1.0.json", + "referenceNumber": 156, + "name": "Server Side Public License, v 1", + "licenseId": "SSPL-1.0", + "seeAlso": [ + "https://www.mongodb.com/licensing/server-side-public-license" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/StandardML-NJ.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/StandardML-NJ.json", + "referenceNumber": 510, + "name": "Standard ML of New Jersey License", + "licenseId": "StandardML-NJ", + "seeAlso": [ + "https://www.smlnj.org/license.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/SugarCRM-1.1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SugarCRM-1.1.3.json", + "referenceNumber": 33, + "name": "SugarCRM Public License v1.1.3", + "licenseId": "SugarCRM-1.1.3", + "seeAlso": [ + "http://www.sugarcrm.com/crm/SPL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Sun-PPP.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Sun-PPP.json", + "referenceNumber": 598, + "name": "Sun PPP License", + "licenseId": "Sun-PPP", + "seeAlso": [ + "https://github.com/ppp-project/ppp/blob/master/pppd/eap.c#L7-L16" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SunPro.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SunPro.json", + "referenceNumber": 95, + "name": "SunPro License", + "licenseId": "SunPro", + "seeAlso": [ + "https://github.com/freebsd/freebsd-src/blob/main/lib/msun/src/e_acosh.c", + "https://github.com/freebsd/freebsd-src/blob/main/lib/msun/src/e_lgammal.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/SWL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/SWL.json", + "referenceNumber": 360, + "name": "Scheme Widget Library (SWL) Software License Agreement", + "licenseId": "SWL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/SWL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/swrule.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/swrule.json", + "referenceNumber": 362, + "name": "swrule License", + "licenseId": "swrule", + "seeAlso": [ + "https://ctan.math.utah.edu/ctan/tex-archive/macros/generic/misc/swrule.sty" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Symlinks.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Symlinks.json", + "referenceNumber": 488, + "name": "Symlinks License", + "licenseId": "Symlinks", + "seeAlso": [ + "https://www.mail-archive.com/debian-bugs-rc@lists.debian.org/msg11494.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TAPR-OHL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TAPR-OHL-1.0.json", + "referenceNumber": 403, + "name": "TAPR Open Hardware License v1.0", + "licenseId": "TAPR-OHL-1.0", + "seeAlso": [ + "https://www.tapr.org/OHL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TCL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TCL.json", + "referenceNumber": 494, + "name": "TCL/TK License", + "licenseId": "TCL", + "seeAlso": [ + "http://www.tcl.tk/software/tcltk/license.html", + "https://fedoraproject.org/wiki/Licensing/TCL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TCP-wrappers.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TCP-wrappers.json", + "referenceNumber": 194, + "name": "TCP Wrappers License", + "licenseId": "TCP-wrappers", + "seeAlso": [ + "http://rc.quest.com/topics/openssh/license.php#tcpwrappers" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TermReadKey.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TermReadKey.json", + "referenceNumber": 412, + "name": "TermReadKey License", + "licenseId": "TermReadKey", + "seeAlso": [ + "https://github.com/jonathanstowe/TermReadKey/blob/master/README#L9-L10" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TGPPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TGPPL-1.0.json", + "referenceNumber": 208, + "name": "Transitive Grace Period Public Licence 1.0", + "licenseId": "TGPPL-1.0", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/TGPPL", + "https://tahoe-lafs.org/trac/tahoe-lafs/browser/trunk/COPYING.TGPPL.rst" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TMate.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TMate.json", + "referenceNumber": 541, + "name": "TMate Open Source License", + "licenseId": "TMate", + "seeAlso": [ + "http://svnkit.com/license.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TORQUE-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TORQUE-1.1.json", + "referenceNumber": 332, + "name": "TORQUE v2.5+ Software License v1.1", + "licenseId": "TORQUE-1.1", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/TORQUEv1.1" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TOSL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TOSL.json", + "referenceNumber": 574, + "name": "Trusster Open Source License", + "licenseId": "TOSL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/TOSL" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TPDL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TPDL.json", + "referenceNumber": 302, + "name": "Time::ParseDate License", + "licenseId": "TPDL", + "seeAlso": [ + "https://metacpan.org/pod/Time::ParseDate#LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TPL-1.0.json", + "referenceNumber": 134, + "name": "THOR Public License 1.0", + "licenseId": "TPL-1.0", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing:ThorPublicLicense" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TTWL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TTWL.json", + "referenceNumber": 28, + "name": "Text-Tabs+Wrap License", + "licenseId": "TTWL", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/TTWL", + "https://github.com/ap/Text-Tabs/blob/master/lib.modern/Text/Tabs.pm#L148" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TTYP0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TTYP0.json", + "referenceNumber": 207, + "name": "TTYP0 License", + "licenseId": "TTYP0", + "seeAlso": [ + "https://people.mpi-inf.mpg.de/~uwe/misc/uw-ttyp0/" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TU-Berlin-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TU-Berlin-1.0.json", + "referenceNumber": 98, + "name": "Technische Universitaet Berlin License 1.0", + "licenseId": "TU-Berlin-1.0", + "seeAlso": [ + "https://github.com/swh/ladspa/blob/7bf6f3799fdba70fda297c2d8fd9f526803d9680/gsm/COPYRIGHT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/TU-Berlin-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/TU-Berlin-2.0.json", + "referenceNumber": 533, + "name": "Technische Universitaet Berlin License 2.0", + "licenseId": "TU-Berlin-2.0", + "seeAlso": [ + "https://github.com/CorsixTH/deps/blob/fd339a9f526d1d9c9f01ccf39e438a015da50035/licences/libgsm.txt" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/UCAR.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/UCAR.json", + "referenceNumber": 371, + "name": "UCAR License", + "licenseId": "UCAR", + "seeAlso": [ + "https://github.com/Unidata/UDUNITS-2/blob/master/COPYRIGHT" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/UCL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/UCL-1.0.json", + "referenceNumber": 88, + "name": "Upstream Compatibility License v1.0", + "licenseId": "UCL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/UCL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/ulem.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ulem.json", + "referenceNumber": 401, + "name": "ulem License", + "licenseId": "ulem", + "seeAlso": [ + "https://mirrors.ctan.org/macros/latex/contrib/ulem/README" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/UMich-Merit.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/UMich-Merit.json", + "referenceNumber": 413, + "name": "Michigan/Merit Networks License", + "licenseId": "UMich-Merit", + "seeAlso": [ + "https://github.com/radcli/radcli/blob/master/COPYRIGHT#L64" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Unicode-3.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Unicode-3.0.json", + "referenceNumber": 287, + "name": "Unicode License v3", + "licenseId": "Unicode-3.0", + "seeAlso": [ + "https://www.unicode.org/license.txt" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Unicode-DFS-2015.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Unicode-DFS-2015.json", + "referenceNumber": 137, + "name": "Unicode License Agreement - Data Files and Software (2015)", + "licenseId": "Unicode-DFS-2015", + "seeAlso": [ + "https://web.archive.org/web/20151224134844/http://unicode.org/copyright.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Unicode-DFS-2016.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Unicode-DFS-2016.json", + "referenceNumber": 295, + "name": "Unicode License Agreement - Data Files and Software (2016)", + "licenseId": "Unicode-DFS-2016", + "seeAlso": [ + "https://www.unicode.org/license.txt", + "http://web.archive.org/web/20160823201924/http://www.unicode.org/copyright.html#License", + "http://www.unicode.org/copyright.html" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/Unicode-TOU.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Unicode-TOU.json", + "referenceNumber": 432, + "name": "Unicode Terms of Use", + "licenseId": "Unicode-TOU", + "seeAlso": [ + "http://web.archive.org/web/20140704074106/http://www.unicode.org/copyright.html", + "http://www.unicode.org/copyright.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/UnixCrypt.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/UnixCrypt.json", + "referenceNumber": 275, + "name": "UnixCrypt License", + "licenseId": "UnixCrypt", + "seeAlso": [ + "https://foss.heptapod.net/python-libs/passlib/-/blob/branch/stable/LICENSE#L70", + "https://opensource.apple.com/source/JBoss/JBoss-737/jboss-all/jetty/src/main/org/mortbay/util/UnixCrypt.java.auto.html", + "https://archive.eclipse.org/jetty/8.0.1.v20110908/xref/org/eclipse/jetty/http/security/UnixCrypt.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Unlicense.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Unlicense.json", + "referenceNumber": 58, + "name": "The Unlicense", + "licenseId": "Unlicense", + "seeAlso": [ + "https://unlicense.org/" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/UPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/UPL-1.0.json", + "referenceNumber": 165, + "name": "Universal Permissive License v1.0", + "licenseId": "UPL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/UPL" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/URT-RLE.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/URT-RLE.json", + "referenceNumber": 416, + "name": "Utah Raster Toolkit Run Length Encoded License", + "licenseId": "URT-RLE", + "seeAlso": [ + "https://sourceforge.net/p/netpbm/code/HEAD/tree/super_stable/converter/other/pnmtorle.c", + "https://sourceforge.net/p/netpbm/code/HEAD/tree/super_stable/converter/other/rletopnm.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Vim.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Vim.json", + "referenceNumber": 296, + "name": "Vim License", + "licenseId": "Vim", + "seeAlso": [ + "http://vimdoc.sourceforge.net/htmldoc/uganda.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/VOSTROM.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/VOSTROM.json", + "referenceNumber": 516, + "name": "VOSTROM Public License for Open Source", + "licenseId": "VOSTROM", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/VOSTROM" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/VSL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/VSL-1.0.json", + "referenceNumber": 440, + "name": "Vovida Software License v1.0", + "licenseId": "VSL-1.0", + "seeAlso": [ + "https://opensource.org/licenses/VSL-1.0" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/W3C.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/W3C.json", + "referenceNumber": 13, + "name": "W3C Software Notice and License (2002-12-31)", + "licenseId": "W3C", + "seeAlso": [ + "http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231.html", + "https://opensource.org/licenses/W3C" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/W3C-19980720.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/W3C-19980720.json", + "referenceNumber": 625, + "name": "W3C Software Notice and License (1998-07-20)", + "licenseId": "W3C-19980720", + "seeAlso": [ + "http://www.w3.org/Consortium/Legal/copyright-software-19980720.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/W3C-20150513.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/W3C-20150513.json", + "referenceNumber": 524, + "name": "W3C Software Notice and Document License (2015-05-13)", + "licenseId": "W3C-20150513", + "seeAlso": [ + "https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/w3m.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/w3m.json", + "referenceNumber": 509, + "name": "w3m License", + "licenseId": "w3m", + "seeAlso": [ + "https://github.com/tats/w3m/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Watcom-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Watcom-1.0.json", + "referenceNumber": 81, + "name": "Sybase Open Watcom Public License 1.0", + "licenseId": "Watcom-1.0", + "seeAlso": [ + "https://opensource.org/licenses/Watcom-1.0" + ], + "isOsiApproved": true, + "isFsfLibre": false + }, + { + "reference": "https://spdx.org/licenses/Widget-Workshop.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Widget-Workshop.json", + "referenceNumber": 503, + "name": "Widget Workshop License", + "licenseId": "Widget-Workshop", + "seeAlso": [ + "https://github.com/novnc/noVNC/blob/master/core/crypto/des.js#L24" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Wsuipa.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Wsuipa.json", + "referenceNumber": 612, + "name": "Wsuipa License", + "licenseId": "Wsuipa", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Wsuipa" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/WTFPL.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/WTFPL.json", + "referenceNumber": 315, + "name": "Do What The F*ck You Want To Public License", + "licenseId": "WTFPL", + "seeAlso": [ + "http://www.wtfpl.net/about/", + "http://sam.zoy.org/wtfpl/COPYING" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/wxWindows.html", + "isDeprecatedLicenseId": true, + "detailsUrl": "https://spdx.org/licenses/wxWindows.json", + "referenceNumber": 274, + "name": "wxWindows Library License", + "licenseId": "wxWindows", + "seeAlso": [ + "https://opensource.org/licenses/WXwindows" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/X11.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/X11.json", + "referenceNumber": 518, + "name": "X11 License", + "licenseId": "X11", + "seeAlso": [ + "http://www.xfree86.org/3.3.6/COPYRIGHT2.html#3" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/X11-distribute-modifications-variant.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/X11-distribute-modifications-variant.json", + "referenceNumber": 587, + "name": "X11 License Distribution Modification Variant", + "licenseId": "X11-distribute-modifications-variant", + "seeAlso": [ + "https://github.com/mirror/ncurses/blob/master/COPYING" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Xdebug-1.03.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Xdebug-1.03.json", + "referenceNumber": 198, + "name": "Xdebug License v 1.03", + "licenseId": "Xdebug-1.03", + "seeAlso": [ + "https://github.com/xdebug/xdebug/blob/master/LICENSE" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Xerox.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Xerox.json", + "referenceNumber": 320, + "name": "Xerox License", + "licenseId": "Xerox", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Xerox" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Xfig.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Xfig.json", + "referenceNumber": 171, + "name": "Xfig License", + "licenseId": "Xfig", + "seeAlso": [ + "https://github.com/Distrotech/transfig/blob/master/transfig/transfig.c", + "https://fedoraproject.org/wiki/Licensing:MIT#Xfig_Variant", + "https://sourceforge.net/p/mcj/xfig/ci/master/tree/src/Makefile.am" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/XFree86-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/XFree86-1.1.json", + "referenceNumber": 247, + "name": "XFree86 License 1.1", + "licenseId": "XFree86-1.1", + "seeAlso": [ + "http://www.xfree86.org/current/LICENSE4.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/xinetd.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/xinetd.json", + "referenceNumber": 17, + "name": "xinetd License", + "licenseId": "xinetd", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Xinetd_License" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/xkeyboard-config-Zinoviev.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/xkeyboard-config-Zinoviev.json", + "referenceNumber": 445, + "name": "xkeyboard-config Zinoviev License", + "licenseId": "xkeyboard-config-Zinoviev", + "seeAlso": [ + "https://gitlab.freedesktop.org/xkeyboard-config/xkeyboard-config/-/blob/master/COPYING?ref_type\u003dheads#L178" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/xlock.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/xlock.json", + "referenceNumber": 361, + "name": "xlock License", + "licenseId": "xlock", + "seeAlso": [ + "https://fossies.org/linux/tiff/contrib/ras/ras2tif.c" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Xnet.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Xnet.json", + "referenceNumber": 125, + "name": "X.Net License", + "licenseId": "Xnet", + "seeAlso": [ + "https://opensource.org/licenses/Xnet" + ], + "isOsiApproved": true + }, + { + "reference": "https://spdx.org/licenses/xpp.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/xpp.json", + "referenceNumber": 55, + "name": "XPP License", + "licenseId": "xpp", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/xpp" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/XSkat.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/XSkat.json", + "referenceNumber": 356, + "name": "XSkat License", + "licenseId": "XSkat", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/XSkat_License" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/YPL-1.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/YPL-1.0.json", + "referenceNumber": 27, + "name": "Yahoo! Public License v1.0", + "licenseId": "YPL-1.0", + "seeAlso": [ + "http://www.zimbra.com/license/yahoo_public_license_1.0.html" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/YPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/YPL-1.1.json", + "referenceNumber": 170, + "name": "Yahoo! Public License v1.1", + "licenseId": "YPL-1.1", + "seeAlso": [ + "http://www.zimbra.com/license/yahoo_public_license_1.1.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Zed.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zed.json", + "referenceNumber": 505, + "name": "Zed License", + "licenseId": "Zed", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/Zed" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Zeeff.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zeeff.json", + "referenceNumber": 177, + "name": "Zeeff License", + "licenseId": "Zeeff", + "seeAlso": [ + "ftp://ftp.tin.org/pub/news/utils/newsx/newsx-1.6.tar.gz" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Zend-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zend-2.0.json", + "referenceNumber": 290, + "name": "Zend License v2.0", + "licenseId": "Zend-2.0", + "seeAlso": [ + "https://web.archive.org/web/20130517195954/http://www.zend.com/license/2_00.txt" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Zimbra-1.3.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zimbra-1.3.json", + "referenceNumber": 561, + "name": "Zimbra Public License v1.3", + "licenseId": "Zimbra-1.3", + "seeAlso": [ + "http://web.archive.org/web/20100302225219/http://www.zimbra.com/license/zimbra-public-license-1-3.html" + ], + "isOsiApproved": false, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/Zimbra-1.4.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zimbra-1.4.json", + "referenceNumber": 185, + "name": "Zimbra Public License v1.4", + "licenseId": "Zimbra-1.4", + "seeAlso": [ + "http://www.zimbra.com/legal/zimbra-public-license-1-4" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/Zlib.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/Zlib.json", + "referenceNumber": 606, + "name": "zlib License", + "licenseId": "Zlib", + "seeAlso": [ + "http://www.zlib.net/zlib_license.html", + "https://opensource.org/licenses/Zlib" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/zlib-acknowledgement.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/zlib-acknowledgement.json", + "referenceNumber": 560, + "name": "zlib/libpng License with Acknowledgement", + "licenseId": "zlib-acknowledgement", + "seeAlso": [ + "https://fedoraproject.org/wiki/Licensing/ZlibWithAcknowledgement" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ZPL-1.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ZPL-1.1.json", + "referenceNumber": 79, + "name": "Zope Public License 1.1", + "licenseId": "ZPL-1.1", + "seeAlso": [ + "http://old.zope.org/Resources/License/ZPL-1.1" + ], + "isOsiApproved": false + }, + { + "reference": "https://spdx.org/licenses/ZPL-2.0.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ZPL-2.0.json", + "referenceNumber": 629, + "name": "Zope Public License 2.0", + "licenseId": "ZPL-2.0", + "seeAlso": [ + "http://old.zope.org/Resources/License/ZPL-2.0", + "https://opensource.org/licenses/ZPL-2.0" + ], + "isOsiApproved": true, + "isFsfLibre": true + }, + { + "reference": "https://spdx.org/licenses/ZPL-2.1.html", + "isDeprecatedLicenseId": false, + "detailsUrl": "https://spdx.org/licenses/ZPL-2.1.json", + "referenceNumber": 301, + "name": "Zope Public License 2.1", + "licenseId": "ZPL-2.1", + "seeAlso": [ + "http://old.zope.org/Resources/ZPL/" + ], + "isOsiApproved": true, + "isFsfLibre": true + } + ], + "releaseDate": "2024-02-08" +} diff --git a/project-cabal/README.md b/project-cabal/README.md new file mode 100644 index 00000000000..d12a316e3e4 --- /dev/null +++ b/project-cabal/README.md @@ -0,0 +1,102 @@ +# Cabal Projects + +We have these projects, all in the root: + +``` +$ tree -P '*.project' --prune -L 1 +. +├── cabal.bootstrap.project +├── cabal.meta.project +├── cabal.project +├── cabal.release.project +├── cabal.validate-libonly.project +└── cabal.validate.project +``` + +Projects are expected to pass a `build --dry-run` standalone test, +substituting the actual project filename for `cabal.project` in +`--project-file=cabal.project`: + +``` +$ cabal build all --enable-tests --enable-benchmarks --dry-run \ + --project-file=cabal.project +``` + +The `release` project might fail to resolve dependencies with the latest GHC +compiler with its `index-state` pinned but it should build if unpinned, by +removing `index-state` from the project or setting it to `HEAD`: + +``` +$ cabal build all --enable-tests --enable-benchmarks \ + --project-file=cabal.project.release \ + --index-state="hackage.haskell.org HEAD" +``` + +## Configuration + +Any project configuration that is not itself a project should use a `.config` +extension and be put into the `project-cabal` folder: + +``` +$ tree -P '*.config' project-cabal +project-cabal +├── constraints.config +├── ghc-latest.config +├── ghc-options.config +├── pkgs +│   ├── benchmarks.config +│   ├── buildinfo.config +│   ├── cabal.config +│   ├── install.config +│   ├── integration-tests.config +│   └── tests.config +└── pkgs.config + +2 directories, 10 files +``` + +## Package Groups + +We have one `project-cabal/pkgs.config` that includes all package groups. + +``` +$ cat project-cabal/pkgs.config +import: pkgs/cabal.config +import: pkgs/install.config +import: pkgs/buildinfo.config +import: pkgs/tests.config +import: pkgs/integration-tests.config +import: pkgs/benchmarks.config +``` + +The default and `validate` projects get their packages this way. The `libonly`, +and `validate.libonly` projects import packages from `cabal` and `tests` package +groups. The `release` project also does this but also imports the `install` +package group. + +| Project | pkgs | cabal | tests | install | +|------------------|:---: |:---: |:---: |:---: | +| default | ✓ | | | | +| libonly | | ✓ | ✓ | | +| release | | ✓ | ✓ | ✓ | +| validate | ✓ | | | | +| validate.libonly | | ✓ | ✓ | | + +The `meta` project is a one-liner: + +``` +$ cat cabal.meta.project +packages: cabal-dev-scripts +``` + +## Extra Config + +Additional configuration is imported: + +| Project | ghc-options | ghc-latest | constraints | +|------------------|:---: |:---: |:---: | +| default | ✓ | ✓ | ✓ | +| libonly | ✓ | | | +| release | | | | +| validate | ✓ | ✓ | ✓ | +| validate.libonly | ✓ | | ✓ | diff --git a/project-cabal/constraints.config b/project-cabal/constraints.config new file mode 100644 index 00000000000..aba937cb9f1 --- /dev/null +++ b/project-cabal/constraints.config @@ -0,0 +1,3 @@ +-- avoiding extra dependencies +constraints: rere -rere-cfg +constraints: these -assoc diff --git a/project-cabal/ghc-latest.config b/project-cabal/ghc-latest.config new file mode 100644 index 00000000000..5f8d40290db --- /dev/null +++ b/project-cabal/ghc-latest.config @@ -0,0 +1,24 @@ +-- Usually, the latest GHC requires a few allow-newer's +-- for some time after the release. This project file is meant to host these. +-- The file is supposed to be included in the main project files used for +-- Cabal development: +-- - cabal.project (day-to-day development), +-- - cabal.validate.project (Cabal CI), +-- Commented out below are the usual suspects. Feel free to add more. + +-- NOTE: don't forget to update the compiler version in the conditional +-- when upgrading to a newer GHC +if impl(ghc >= 9.10.0) + allow-newer: + --windns:*, rere:*, tree-diff:*, uuid-types:*, these:*, hashable:*, assoc:*, semialign:*, indexed-traversable-instances:*, indexed-traversable:*, OneTuple:*, scientific:*, time-compat:*, text-short:*, integer-conversion:*, generically:*, data-fix:*, binary:* + -- Artem, 2024-04-21: I started and then gave up... + *:base, *:template-haskell, text-short, *:deepseq, *:bytestring, *:ghc-prim + + repository head.hackage.ghc.haskell.org + url: https://ghc.gitlab.haskell.org/head.hackage/ + secure: True + key-threshold: 3 + root-keys: + 26021a13b401500c8eb2761ca95c61f2d625bfef951b939a8124ed12ecf07329 + 7541f32a4ccca4f97aea3b22f5e593ba2c0267546016b992dfadcd2fe944e55d + f76d08be13e9a61a377a85e2fb63f4c5435d40f8feb3e12eb05905edb8cdea89 diff --git a/project-cabal/ghc-options.config b/project-cabal/ghc-options.config new file mode 100644 index 00000000000..c26dfae7505 --- /dev/null +++ b/project-cabal/ghc-options.config @@ -0,0 +1,2 @@ +program-options + ghc-options: -fno-ignore-asserts diff --git a/project-cabal/pkgs.config b/project-cabal/pkgs.config new file mode 100644 index 00000000000..5f12a02754a --- /dev/null +++ b/project-cabal/pkgs.config @@ -0,0 +1,6 @@ +import: pkgs/cabal.config +import: pkgs/install.config +import: pkgs/buildinfo.config +import: pkgs/tests.config +import: pkgs/integration-tests.config +import: pkgs/benchmarks.config diff --git a/project-cabal/pkgs/benchmarks.config b/project-cabal/pkgs/benchmarks.config new file mode 100644 index 00000000000..22941678058 --- /dev/null +++ b/project-cabal/pkgs/benchmarks.config @@ -0,0 +1,3 @@ +packages: + cabal-benchmarks + , solver-benchmarks diff --git a/project-cabal/pkgs/buildinfo.config b/project-cabal/pkgs/buildinfo.config new file mode 100644 index 00000000000..aec4e483443 --- /dev/null +++ b/project-cabal/pkgs/buildinfo.config @@ -0,0 +1 @@ +packages: buildinfo-reference-generator diff --git a/project-cabal/pkgs/cabal.config b/project-cabal/pkgs/cabal.config new file mode 100644 index 00000000000..2500cad5ecf --- /dev/null +++ b/project-cabal/pkgs/cabal.config @@ -0,0 +1,4 @@ +packages: + Cabal + , Cabal-described + , Cabal-syntax diff --git a/project-cabal/pkgs/install.config b/project-cabal/pkgs/install.config new file mode 100644 index 00000000000..9010d1f332b --- /dev/null +++ b/project-cabal/pkgs/install.config @@ -0,0 +1,3 @@ +packages: + cabal-install + , cabal-install-solver diff --git a/project-cabal/pkgs/integration-tests.config b/project-cabal/pkgs/integration-tests.config new file mode 100644 index 00000000000..00fc56f4467 --- /dev/null +++ b/project-cabal/pkgs/integration-tests.config @@ -0,0 +1 @@ +packages: cabal-testsuite diff --git a/project-cabal/pkgs/tests.config b/project-cabal/pkgs/tests.config new file mode 100644 index 00000000000..a9cec9c596f --- /dev/null +++ b/project-cabal/pkgs/tests.config @@ -0,0 +1,4 @@ +packages: + Cabal-QuickCheck + , Cabal-tests + , Cabal-tree-diff diff --git a/release-notes/Cabal-3.12.0.0.md b/release-notes/Cabal-3.12.0.0.md new file mode 100644 index 00000000000..3825c9e8985 --- /dev/null +++ b/release-notes/Cabal-3.12.0.0.md @@ -0,0 +1,267 @@ +Cabal and Cabal-syntax 3.12.0.0 changelog and release notes +--- + + +### Significant changes + +- Add support for asm, cmm, and js sources in executable components [#8639](https://github.com/haskell/cabal/issues/8639) [#9061](https://github.com/haskell/cabal/pull/9061) + + Executable components now support the inclusion of asm, cmm, and js source + files in a cabal file using the same syntax as is used for these sources + in library components, similar to how c and c++ sources are supported in + both types of components. This syntax was already parsed in cabal files, + but was silently ignored in the build step, so no changes to syntax are + made. + +- Add `--haddock-output-dir` flag to `cabal haddock`. [#8720](https://github.com/haskell/cabal/issues/8720) [#8788](https://github.com/haskell/cabal/pull/8788) + + This flag gives the user full control over the directory where the documentation is placed. It allows both relative and absolute paths. + +- Add `--semaphore` option to `./Setup build` interface [#8557](https://github.com/haskell/cabal/pull/8557) + + When `./Setup build --semaphore ` is called, `ghc` will be called + with the `-jsem` option. It is the responsibility of the caller of + `./Setup build` to manage the semaphore according to the GHC Jobserver + Protocol. + + This low level interface is intended to be called by a high-level tool + such as `cabal-install` which can create and manage the semaphore + appropriately. + + The protocol is specified by [GHC Proposal #540](https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0540-jsem.rst). + +- Add `--promised-dependency` flag to `./Setup configure` interface [#8726](https://github.com/haskell/cabal/pull/8726) + + There is a new flag `--promised-dependency`to allow users to configure a + package *without* having previously built the dependency. Instead, we + promise to the configure phase that we will have built it by the time we + build the package. This allows us to configure all the packages we intend + to load into the repl without building any dependenices which we will load + in the same session, because the promise is satisifed due to loading the + package and its dependency into one multi-session which ensures the + dependency is built before it is needed. + + A user of ./Setup configure specifies a promised dependency by using the + "--promised-dependency" flag with a normal dependency specification. For + example: + + ``` + '--promised-dependency=cabal-install-solver=cabal-install-solver-3.9.0.0-inplace' + ``` + +- Add `--ignore` to `cabal check` [#8587](https://github.com/haskell/cabal/issues/8587) [#9442](https://github.com/haskell/cabal/pull/9442) + + - `Distribution.PackageDescription.Check.Warning` now exports + `filterPackageChecksById`, this can be used by third-party + tools to filter warnings. + +- Add support for `GHC2024` [#9736](https://github.com/haskell/cabal/issues/9736) + + Support for the `GHC2024` language edition, introduced by GHC 9.10, has been + added. It can now be used in the `default-language` and `other-languages` + fields, and will be offered as an option by `cabal init`. + +- Remove `initialBuildSteps` from `Distribution.Simple.Build` [#9474](https://github.com/haskell/cabal/pull/9474) + + Calling `initialBuildSteps` to prepare source files for a package is error + prone, as `initialBuildSteps` only handles things like the paths module + and nothing else. + + To mimick `initialBuildSteps` behaviour when there is no custom Setup, you + can call `repl_setupHooks`. + + If you are dealing with a custom setup, you have to invoke + `./Setup repl --repl-multi-file`. + +### Other changes + +- `cabal init` should not suggest Cabal < 2.0 [#8680](https://github.com/haskell/cabal/issues/8680) + + 'cabal init' no longer suggests users to set cabal-version to less than + 2.0. + +- Remove Distribution.Utils.TempTestDir module from Cabal library [#9453](https://github.com/haskell/cabal/issues/9453) [#9454](https://github.com/haskell/cabal/pull/9454) + + This library was only used by internal tests, and now lives in the + `Cabal-tests` library which is shared across test components. + +- PkgConfig individual calls [#9134](https://github.com/haskell/cabal/pull/9134) + + `cabal` invokes `pkg-config` individually for each lib if querying for all + doesn't return the expected result. + +- Split up `Distribution.Simple.Setup` [#8130](https://github.com/haskell/cabal/pull/8130) + + The external interface of 'Distribution.Simple.Setup' has been kept the + same, but internally it has been broken up into smaller modules. This + improves build times in two ways: + + 1. GHC is superlinear in the size of files, meaning that splitting up a + large file can reduce overall compile times. + 2. Breaking up the module allows dependent modules to refine their imports + to just the parts they require, allowing them to start buildling quicker + when GHC is run in parrallel make mode ('--ghc-options -j'). + +- Reimplementing `cabal check` [#7423](https://github.com/haskell/cabal/issues/7423) [#8427](https://github.com/haskell/cabal/pull/8427) + + - `checkPackage` signature has been simplified, + you do not need to pass a specific configuration of the package, since + we do not flatten GenericPackageDescription any more. + - `checkPackageFileNames` has been removed, + use `checkPackageFiles` instead. + - `checkPackageFilesGPD` has been introduced, + a function similar to `checkPackageFiles` that works on + `GenericPackageDescription`. You do not need to use + `flattenPackageDescription` anymore. + +- Installation of extra-compilation-artifacts directory [#8662](https://github.com/haskell/cabal/pull/8662) + + GHC plugins now can store custom data in the 'extra-compilation-artifacts' directory which gets installed with the package. + +- Add option to ./Setup repl to write repl arguments to file [#8726](https://github.com/haskell/cabal/pull/8726) + + The `./Setup repl` command is modified to allow a user to defer starting + the repl and instead instruct the command to write the necessary build + flags to a directiory. The option is called `--repl-multi-file `. + + This is useful when starting multi-component sessions, as we want to query + Setup.hs for the arguments which are needed to build each component but + not for ./Setup to start the repl itself. + +- Add Haiku as a known platform [#9006](https://github.com/haskell/cabal/pull/9006) + + Cabal: Distribution now recognises Haiku as a valid platform, and also + implements Haiku's unique directory layout. + +- Installation of .hie files [#8685](https://github.com/haskell/cabal/issues/8685) [#9019](https://github.com/haskell/cabal/pull/9019) + + Hie files generated by GHC are now stored in the + `extra-compilation-artifacts` directory which gets installed with the + package. + +- Include the GHC "Project Unit Id" in the cabal store path [#8114](https://github.com/haskell/cabal/issues/8114) [#9326](https://github.com/haskell/cabal/pull/9326) + + This allows the use of several **API incompatible builds of the same + version of GHC** without corrupting the cabal store. + + This relies on the "Project Unit Id" which is available since GHC 9.8.1, + older versions of GHC do not benefit from this change. + +- Fix the platform string for GNU/Hurd [#9434](https://github.com/haskell/cabal/pull/9434) + + Depending whom you ask, GNU/Hurd will be labelled "gnu" or "hurd". The + autotools use "gnu", so ghc follows this for installed files, even if the + ghc source code uses OSHurd. We thus need to add the translation between + the two. + +- Use linker capability detection to improve linker use [#9443](https://github.com/haskell/cabal/pull/9443) + + Previously the GHC version number and platform were used as a proxy for + whether the linker can generate relocatable objects. + + Now, the ability of the linker to create relocatable objects is detected. + +- Merge globbing implementations [#5349](https://github.com/haskell/cabal/issues/5349) [#9673](https://github.com/haskell/cabal/pull/9673) + + The common aspects of the globbing functionality between `Cabal` and + `cabal-install` have been factored out. The only change in the user-facing + API is that we now record when a glob does not match exactly, but matches + a directory with that same name, with the new constructor + `GlobMatchesDirectory` of `GlobResult`. + + To illustrate, this change means that when `foo/dir` is a directory, the + glob `*/dir/` matches exactly `foo/dir` (as before), but now `*/dir` + produces `GlobMatchesDirectory` instead of failing. This allows callers + to decide whether to allow or discard such inexact matches. + +- Document `remote-repo-cache` as implemented. [#8737](https://github.com/haskell/cabal/issues/8737) [#8738](https://github.com/haskell/cabal/pull/8738) + +- Deduplicate LD_LIBRARY_PATH when running tests [#8728](https://github.com/haskell/cabal/pull/8728) + +- Add support for a number of architectures: + + - RISC-V [#9062](https://github.com/haskell/cabal/pull/9062) + - 64-bit LoongArch [#9215](https://github.com/haskell/cabal/pull/9215) + - 64-bit SPARC as a separate architecture [#9445](https://github.com/haskell/cabal/pull/9445) + +- Don't report `index.html` file as created, if not created by Haddock [#5120](https://github.com/haskell/cabal/issues/5120) [#9332](https://github.com/haskell/cabal/pull/9332) + +- Enable using $ORIGIN in RPATH on GNU/Hurd [#9441](https://github.com/haskell/cabal/pull/9441) + + +- Make check comply with Hackage requirements [#8897](https://github.com/haskell/cabal/pull/8897) + + - `cabal check` will only return exitcode 1 when the package is not fit + for Hackage. E.g. it will not error anymore when your `synopsis:` is + larger than `description:`, just emit a warning. + - Cabal: Distribution.Client.Check now exports `isHackageDistError`, for + third-party tools to know if a specific error will preclude a package + from being uploaded to Hacakge. + +- Add language extension `ExtendedLiterals` [#8992](https://github.com/haskell/cabal/pull/8992) + + Adds support for the `ExtendedLiterals` language extension (GHC proposal #451) + +- Warn about inconsistent indentation [#8975](https://github.com/haskell/cabal/pull/8975) + + - Make Cabal warn about inconsistent indentation in .cabal files. For + example warn about somewhat common decreasing indentation like in + + ```cabal + library + default-language: Haskell2010 + build-depends: base + ghc-options: -Wall + ``` + + The change is `readFields` function. + + This is an effect of using `indentOfAtLeast` method/approach: any + indentation greater than current offset is accepted. + + That behavior is desirable to parsing multiline field contents, but it is + a bit surprising for fields in sections, which we expect to be aligned. + + Such insonsistency seems to be always a mistake, and it's easy to fix once + a machine points it out. + +- Add `LexBraces` lexer warning [#8577](https://github.com/haskell/cabal/issues/8577) + + `LexBraces` warning is issued when brace delimiting syntax is used. This + way, using `readFields'`, a low-lever consumer may decide whether braces + were used. + + Looking for a brace character in the input is imprecise, as braces can + occur inside field content. + + This warning is not propagated to parser warnings, so e.g. + `readGenericPackageDescription` doesn't warn about it. This is because all + parser warnings prevent uploads to Hackage, and using braces (or not) is + a matter of opinion. + +- Distinguish `powerpc64le`, by adding `PPC64LE` constructor to type `Arch` [#9534](https://github.com/haskell/cabal/issues/9534) [#9535](https://github.com/haskell/cabal/pull/9535) + + Adds constructor `PPC64LE` to type `Arch` to distinguish architecture + powerpc64le from powerpc64. Existing constructor `PPC64` now exclusively + represents powerpc64. + +- PkgConfig individual calls [#9134](https://github.com/haskell/cabal/pull/9134) + + `cabal` invokes `pkg-config` individually for each lib if querying for all doesn't return the expected result + +- Add language extension `ListTuplePuns` [#8854](https://github.com/haskell/cabal/pull/8854) + + Adds support for the `ListTuplePuns` language extension (GHC proposal #475) + +- Add `mkVersionIntervals` for creating a `VersionIntervals` from a list [#9034](https://github.com/haskell/cabal/pull/9034) + + If external tools want to change the version intervals of dependencies, they + need to be able to create a `VersionRange` from a `[VersionInterval]` list. Adding + the function `mkVersionIntervals` makes this possible again. + +- Add language extension `TypeAbstractions` [#9496](https://github.com/haskell/cabal/issues/9496) [#9502](https://github.com/haskell/cabal/pull/9502) + +- Update SPDX License List to version `3.23 2024-02-08` [#9818](https://github.com/haskell/cabal/pull/9818) + + - LicenseId and LicenseExceptionId now conform to SPDX License List + version 3.23 2024-02-08. diff --git a/release-notes/WIP-cabal-install-3.12.x.0.md b/release-notes/WIP-cabal-install-3.12.x.0.md new file mode 100644 index 00000000000..34d84982806 --- /dev/null +++ b/release-notes/WIP-cabal-install-3.12.x.0.md @@ -0,0 +1,343 @@ +Pre-release cabal-install 3.12.0.0/3.11.0.0 changelog and release notes. + +This file will be edited and the changes incorprated into the official +3.12.1.0 cabal-install and cabal-install-solver release notes. + +--- + +### Significant changes + +- Add support for asm, cmm, and js sources in executable components [#8639](https://github.com/haskell/cabal/issues/8639) [#9061](https://github.com/haskell/cabal/pull/9061) + + Executable components now support the inclusion of asm, cmm, and js source + files in a cabal file using the same syntax as is used for these sources + in library components, similar to how c and c++ sources are supported in + both types of components. This syntax was already parsed in cabal files, + but was silently ignored in the build step, so no changes to syntax are + made. + +- Add `--project-dir` flag [#7695](https://github.com/haskell/cabal/issues/7695) [#7940](https://github.com/haskell/cabal/issues/7940) [#8454](https://github.com/haskell/cabal/pull/8454) + + - Added `--project-dir` flag for specifying the project's root directory + - Deprecated using `--project-file` with an absolute filepath without also using `--project-dir`. + +- Support per-component builds when coverage is enabled [#4798](https://github.com/haskell/cabal/issues/4798) [#5213](https://github.com/haskell/cabal/issues/5213) [#6397](https://github.com/haskell/cabal/issues/6397) [#6440](https://github.com/haskell/cabal/issues/6440) [#9464](https://github.com/haskell/cabal/pull/9464) + + Cabal now supports per-component builds when coverage is enabled.This enables + coverage for packages with internal libraries (#6440), and enables coverage for + packages that use backpack (#6397), even though we do not get coverage for + instantiations of an indefinite module (it is not clear what it means for HPC + to support backpack, regardless of Cabal). + + To achieve this, hpc information (`.mix` files) from a library is now written + into the package database of a library under `extraCompilationArtifacts`. + + Cabal configure (via the Setup interface) now accepts --coverage-for=, + a flag which specifies which libraries should be included in the coverage + report for some testsuite. + +- Add `cabal path` command [#8879](https://github.com/haskell/cabal/pull/8879) + + The `cabal path` command prints the file system paths used by Cabal. + It is intended for use by tooling that needs to read or modify Cabal + data, such that it does not need to replicate the complicated logic + for respecting `CABAL_DIR`, `CABAL_CONFIG`, etc. + +- Redesign `cabal path` command to account for projects [#9673](https://github.com/haskell/cabal/pull/9673) + + Previously, `cabal path` was only able to query from the global configuration file, e.g., `~/.cabal/config` or the XDG equivalent. + We take the foundations and enhance `cabal path` to take project configuration, such as `cabal.project`, into account. + + Additionally, we add support for multiple output formats, such as key-value pairs and json. + + The key-value pair output prints a line for each queried key and its respective value: + + key1: value2 + key2: value2 + + If only a single key is queried, we print only the value, for example: + + value1 + + The json output format is versioned by the cabal-install version, which is part of the json object. + Thus, all result objects contain at least the key "cabal-install-version". + + We expand the `cabal path` to also produce information of the compiler that is going to be used in a `cabal build` or `cabal repl` invocation. + To do that, we re-configure the compiler program, and outputs the location, version and compiler flavour. + This is helpful for downstream tools, such as HLS, to figure out the GHC version required to compile a project with, without dependency solving. + +- Add support for authentication tokens for uploading to Hackage [#6738](https://github.com/haskell/cabal/issues/6738) [#9058](https://github.com/haskell/cabal/pull/9058) + + A new flag `--token` (`-t`) has been created. Token authentication takes + precedence over username and password meaning that, if a token is set, + the username and password flags are ignored. + +- Make --(test-)show-details=direct the default [#8942](https://github.com/haskell/cabal/pull/8942) + + This option leaves it up to the testing framework to decide what and how to print out, + potentially leading to a prettier output. For example, most of the testing frameworks + use colors, which wouldn't be seen with any other option. + + This comes with a tradeoff, though: Cabal will not create a log file with this option. + If you prefer a log file, consider setting `--test-show-details=streaming` (or something + else) manually. + +- Die if package list is missing [#8944](https://github.com/haskell/cabal/pull/8944) + + If a package list is missing, `cabal` will now die and suggest the user to run + `cabal update` instead of continuing into not being able to find packages coming + from the remote package server. + +- Reject index-state younger than cached index file [#8944](https://github.com/haskell/cabal/pull/8944) + + Requesting to use an index-state younger than the cached version will now fail, + telling the user to use an index-state older or equal to the cached file, or to + run `cabal update`. + + The warning for a non-existing index-state has been also demoted to appear only + on verbose logging. + +- Warn early that overwrite policy is needed [#5993](https://github.com/haskell/cabal/issues/5993) [#9268](https://github.com/haskell/cabal/pull/9268) + + Waiting for a long build and then seeing the install fail because a flag was + missing is frustrating.With this change we skip the wait and warn early, + before the build, that an overwrite policy flag would be needed for the + install to succeed. + +- Make sure Haskell files in explicit source directories take precedence over autogenerated Haskell files [#8689](https://github.com/haskell/cabal/issues/8689) [#8690](https://github.com/haskell/cabal/pull/8690) + + - Changed order or directories in GHC invocation so that source + directories explicitly specified in cabal file will be considered + before Cabal’s internal build directory. + +- config file: allow more flags in the init section [#8835](https://github.com/haskell/cabal/issues/8835) [#8839](https://github.com/haskell/cabal/pull/8839) + + The init section of config file now allows the following fields: + +- Fix handling of ETag header for remote packages [#9113](https://github.com/haskell/cabal/issues/9113) [#9116](https://github.com/haskell/cabal/pull/9116) + + Remote packages will now be cached regardless of the capitalization of the + "ETag" header. Previously remote packages would not be cached if the header + name did not match exactly. Now they will be cached even if the header's + capitalization is different. + +- Clarify the semantics of the `--package-db` flag [#9678](https://github.com/haskell/cabal/issues/9678) + + The `--package-db` flag now only applies to the default + immutable initial package stack rather than also applying to the store + package database. + + This fixes an assertion failure which was triggered when using `--package-db` and also + clarifies how it should interact with `--store-dir` and `--dist-dir` flags. + +- Add `--semaphore` flag to enable interaction with GHC Job Server protocol [#8557](https://github.com/haskell/cabal/pull/8557) + + When cabal-install is passed the `--semaphore` flag it will now act as a job server + according to the GHC Jobserver Protocol. + + In particular this means that cabal-install will create a semaphore which it then + passes to `./Setup build` (and hence `ghc`) which can be used by `ghc` in order to + control how much paralellism it uses, coordinating with other simultaneously running + processes. + + This feature requires ghc-9.8 in order to use, as this is the first version of GHC + which implements the protocol. + +- Add `--ignore` to `cabal check` [#8587](https://github.com/haskell/cabal/issues/8587) [#9442](https://github.com/haskell/cabal/pull/9442) + + - `cabal check` now ignores specific warnings with `--ignore`. E.g. + `--ignore=missing-upper-bounds` will not display “Missing upper + bounds” warnings. + - `cabal check` output now prints the warning identifier too + (like `[no-category]`). + +- Adds functionality for the --offline flag with the "build" command. [#8676](https://github.com/haskell/cabal/pull/8676) + + The --offline flag previously created in #2578 but was only implemented + for the install command even thought the flag didn't throw an error + whenever the build command was run. This PR adds functionality for the + --offline flag with the build command. Additionally there is a new + PackageTest for the flag using the build command. + +- Add warning for running cabal run, cabal test and cabal bench with +RTS flag [#8709](https://github.com/haskell/cabal/pull/8709) + + This adds a warning when RTS options are passed to cabal instead of the + binary for the commands 'run', 'bench' and 'test', as most users want to + pass these options to their binary. + +- Add support for loading multiple components into one repl session [#8238](https://github.com/haskell/cabal/pull/8238) [#8491](https://github.com/haskell/cabal/pull/8491) [#8726](https://github.com/haskell/cabal/pull/8726) + + The `repl` command is extended in order to allow starting a repl session + with multiple local components. When a user specifies a target to the + "repl" command which resolves to multiple local components then `cabal` + will start a repl session which loads them all into a single GHC session + if the multi-repl is enabled. + + The multi-repl can be enabled by passing `--enable-multi-repl`, or writing + `multi-repl: True` in your cabal.project file. + + The feature is fully explained in [this blog + post](https://well-typed.com/blog/2023/03/cabal-multi-unit/). + +- Warn when project configuration options are going to be ignored. [#8949](https://github.com/haskell/cabal/pull/8949) + + Some project configuration options can only be specified from the command + line. If the user specified those options from a project file, + cabal-install would silently ignore them. Now cabal-install will emit a + warning. + +- Fix precedence for PATH for `build-tools-depends` [#8972](https://github.com/haskell/cabal/pull/8972) + + Fixes a bug introduced in #8506 that caused executables in the path to + take precedence over those specified in `build-tools-depends`. + +- Guard `PackageInfo_*` modules behind `cabal-version` ≥ 3.12 [#9331](https://github.com/haskell/cabal/issues/9331) [#9481](https://github.com/haskell/cabal/pull/9481) + + `cabal check` now warns whenever `PackageInfo_*` autogen modules are + used with `cabal-version` ≥ 3.12. + Additionally, `cabal configure` will fail if you try to use `PackageInfo_*` + with `cabal-version` < 3.12. + +- cabal init now generates cabal versions older than 1.12 with the correct >= syntax [#8206](https://github.com/haskell/cabal/issues/8206) [#8860](https://github.com/haskell/cabal/pull/8860) + +- `cabal init`: suggest BSD-3 as default license [#8757](https://github.com/haskell/cabal/issues/8757) [#8764](https://github.com/haskell/cabal/pull/8764) + +- Do not ask overwrite permissions on blank project [#9150](https://github.com/haskell/cabal/issues/9150) [#9155](https://github.com/haskell/cabal/pull/9155) + +- Shorten solver rejection messages by removing repetition [#4251](https://github.com/haskell/cabal/issues/4251) [#9559](https://github.com/haskell/cabal/issues/9559) [#9560](https://github.com/haskell/cabal/pull/9560) + + As before, we show a single rejection as hyphenated package-version. + + For multiple rejections, we show a list of versions preceded by package + semicolon, a much shorter rendering of the same information. + + ```diff + - [__0] rejecting: pandoc-3.1.8, pandoc-3.1.7, pandoc-3.1.6.2, pandoc-3.1.6.1, + - pandoc-3.1.6, pandoc-3.1.5, pandoc-3.1.4, pandoc-3.1.3, pandoc-3.1.2, + - pandoc-3.1.1, pandoc-3.1, pandoc-3.0.1, pandoc-3.0, pandoc-2.19.2, + - pandoc-2.19.1, pandoc-2.19, pandoc-2.18, pandoc-2.17.1.1, pandoc-2.17.1, + + [__0] rejecting: pandoc; 3.1.8, 3.1.7, 3.1.6.2, 3.1.6.1, 3.1.6, 3.1.5, 3.1.4, + + 3.1.3, 3.1.2, 3.1.1, 3.1, 3.0.1, 3.0, 2.19.2, 2.19.1, 2.19, 2.18, 2.17.1.1, + ``` + +- Show provenance of project constraints [#9562](https://github.com/haskell/cabal/issues/9562) [#9578](https://github.com/haskell/cabal/pull/9578) + + Show imports when the solver rejects a package version due to a project + constraint. Even though imports are relative to their parent when imported, + their paths are shown relative to the directory of the project in the solver + output. + + ``` + $ cabal build all --dry-run + ... + [__1] next goal: hashable + [__1] rejecting: hashable-1.4.3.0 + (constraint from cabal.project requires ==1.4.2.0) + [__1] rejecting: hashable-1.4.2.0 + (constraint from project-stackage/nightly-2023-12-07.config requires ==1.4.3.0) + imported by: cabal.project + ``` + + Fixes some test failures detecting cycles in imports, when; + + - the wrong import was reported as starting the cycle + - a cycle was reported that wasn't actually a cycle + +- Adjust BSD-2-Clause and BSD-3-Clause licence text [#9812](https://github.com/haskell/cabal/issues/9812) [#9813](https://github.com/haskell/cabal/pull/9813) + + This change matters to BSD-2-Clause and BSD-3-Clause licences. For these two + licences, `cabal init` created a licence file that slightly differed from + wording published at SPDX. This has been rectified. + +- Include the GHC "Project Unit Id" in the cabal store path [#8114](https://github.com/haskell/cabal/issues/8114) [#9326](https://github.com/haskell/cabal/pull/9326) + + This allows the use of several **API incompatible builds of the same + version of GHC** without corrupting the cabal store. + + This relies on the "Project Unit Id" which is available since GHC 9.8.1, + older versions of GHC do not benefit from this change. + +- Add support for `GHC2024` [#9736](https://github.com/haskell/cabal/issues/9736) + + Support for the `GHC2024` language edition, introduced by GHC 9.10, has been + added. It can now be used in the `default-language` and `other-languages` + fields, and will be offered as an option by `cabal init`. + +- Add language extension `ExtendedLiterals` [#8992](https://github.com/haskell/cabal/pull/8992) + + Adds support for the `ExtendedLiterals` language extension (GHC proposal #451) + +- Add language extension `ListTuplePuns` [#8854](https://github.com/haskell/cabal/pull/8854) + + Adds support for the `ListTuplePuns` language extension (GHC proposal #475) + +- Add language extension `TypeAbstractions` [#9496](https://github.com/haskell/cabal/issues/9496) [#9502](https://github.com/haskell/cabal/pull/9502) + +### Other changes + +- Script cache dir is the base16 hash of the canonical path of the script. [#9459](https://github.com/haskell/cabal/pull/9459) + + This fixes sporadic path failures on both Windows and Linux (e.g. [#9334](https://github.com/haskell/cabal/issues/9334)). + +- Add `--haddock-output-dir` flag to `cabal haddock`. [#8720](https://github.com/haskell/cabal/issues/8720) [#8788](https://github.com/haskell/cabal/pull/8788) + + This flag gives the user full control over the directory where the documentation is placed. It allows both relative and absolute paths. + +- Remove useles "Log" log level [#9151](https://github.com/haskell/cabal/issues/9151) [#9346](https://github.com/haskell/cabal/pull/9346) + + - Remove "Log" as a log level in favour of "Info". + - Remove "Show" in Severity and replace by "displaySeverity" function + +- `cabal init` should not suggest Cabal < 2.0 [#8680](https://github.com/haskell/cabal/issues/8680) + + 'cabal init' no longer suggests users to set cabal-version to less than + 2.0. + +- PkgConfig individual calls [#9134](https://github.com/haskell/cabal/pull/9134) + + `cabal` invokes `pkg-config` individually for each lib if querying for all + doesn't return the expected result. + +- Reimplementing `cabal check` [#7423](https://github.com/haskell/cabal/issues/7423) [#8427](https://github.com/haskell/cabal/pull/8427) + + - For `cabal-install` users: `cabal check` do not warn on -O2 or similar + options if under an off-by-default cabal flag. + +- `cabal check`: clearly mark Errors [#8908](https://github.com/haskell/cabal/pull/8908) + + `cabal check` will now mark errors (which make the program return 1 and + Hackage refuse the package) by prepending them with an "Error: " string in + the output. + +- Don't report `index.html` file as created, if not created by Haddock [#5120](https://github.com/haskell/cabal/issues/5120) [#9332](https://github.com/haskell/cabal/pull/9332) + +- Make check comply with Hackage requirements [#8897](https://github.com/haskell/cabal/pull/8897) + + - `cabal check` will only return exitcode 1 when the package is not fit + for Hackage. E.g. it will not error anymore when your `synopsis:` is + larger than `description:`, just emit a warning. + - Cabal: Distribution.Client.Check now exports `isHackageDistError`, for + third-party tools to know if a specific error will preclude a package + from being uploaded to Hacakge. + +- Also render short options with arguments [#8785](https://github.com/haskell/cabal/issues/8785) [#9043](https://github.com/haskell/cabal/pull/9043) + + Show how arguments are used with both short and long forms of options: + + ```diff + <-v, --verbose[=n]Control verbosity (n is 0--3, default + >-v[n], --verbose[=n] Control verbosity (n is 0--3, default + <-w, --with-compiler=PATH give the path to a particular compiler + >-w PATH or -wPATH, --with-compiler=PATH + ``` + +- Remove `--cabal-file` flags from v2 commands [#6880](https://github.com/haskell/cabal/issues/6880) [#7225](https://github.com/haskell/cabal/issues/7225) [#8395](https://github.com/haskell/cabal/issues/8395) [#9123](https://github.com/haskell/cabal/pull/9123) + + The `--cabal-file` flag was never meant for public use but only for testing. + To avoid confusing the users any further we removed the flag from v2 + commands. + +- Avoid a double space in "Executing install plan ..." [#9376](https://github.com/haskell/cabal/pull/9376) + + The "Executing·install·plan··serially" and other similar "Executing + install plan··..." outputs no longer contain double spaces. diff --git a/solver-benchmarks/HackageBenchmark.hs b/solver-benchmarks/HackageBenchmark.hs index d70c25feebc..37996dbfc63 100644 --- a/solver-benchmarks/HackageBenchmark.hs +++ b/solver-benchmarks/HackageBenchmark.hs @@ -1,4 +1,3 @@ -{-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TupleSections #-} {-# LANGUAGE ScopedTypeVariables #-} @@ -19,7 +18,6 @@ import Control.Monad (forM, replicateM, unless, when) import qualified Data.ByteString as BS import Data.List (nub, unzip4) import Data.Maybe (isJust, catMaybes) -import Data.Monoid ((<>)) import Data.String (fromString) import Data.Function ((&)) import Data.Time (NominalDiffTime, diffUTCTime, getCurrentTime) @@ -187,7 +185,7 @@ hackageBenchmarkMain = do then do putStrLn $ "Obtaining the package list (using " ++ argCabal1 ++ ") ..." list <- readProcess argCabal1 ["list", "--simple-output"] "" - return $ nub [mkPackageName $ head (words line) | line <- lines list] + return $ nub [mkPackageName n | n : _ <- words <$> lines list] else do putStrLn "Using given package list ..." return argPackages @@ -345,7 +343,8 @@ isExpectedResult Unknown = False -- should be the same. If they aren't the same, we returns Unknown. combineTrialResults :: [CabalResult] -> CabalResult combineTrialResults rs - | allEqual rs = head rs + | r:_ <- rs + , allEqual rs = r | allEqual [r | r <- rs, r /= Timeout] = Timeout | otherwise = Unknown where diff --git a/solver-benchmarks/solver-benchmarks.cabal b/solver-benchmarks/solver-benchmarks.cabal index 22ef92117fd..2572c17c7a0 100644 --- a/solver-benchmarks/solver-benchmarks.cabal +++ b/solver-benchmarks/solver-benchmarks.cabal @@ -31,7 +31,7 @@ library base, bytestring, containers, - Cabal-syntax ^>= 3.11, + Cabal-syntax ^>= 3.12, directory, filepath, optparse-applicative, diff --git a/templates/SPDX.LicenseExceptionId.template.hs b/templates/SPDX.LicenseExceptionId.template.hs index 5881bec600b..c2fcd1462b9 100644 --- a/templates/SPDX.LicenseExceptionId.template.hs +++ b/templates/SPDX.LicenseExceptionId.template.hs @@ -29,7 +29,7 @@ import qualified Text.PrettyPrint as Disp -- LicenseExceptionId ------------------------------------------------------------------------------- --- | SPDX License Exceptions identifiers list v3.16 +-- | SPDX License Exceptions identifiers list v3.23 data LicenseExceptionId {{ licenseIds }} deriving (Eq, Ord, Enum, Bounded, Show, Read, Typeable, Data, Generic) @@ -98,6 +98,9 @@ licenseExceptionIdList LicenseListVersion_3_10 = licenseExceptionIdList LicenseListVersion_3_16 = {{licenseList_perv.v_3_16}} ++ bulkOfLicenses +licenseExceptionIdList LicenseListVersion_3_23 = +{{licenseList_perv.v_3_23}} + ++ bulkOfLicenses -- | Create a 'LicenseExceptionId' from a 'String'. mkLicenseExceptionId :: LicenseListVersion -> String -> Maybe LicenseExceptionId @@ -107,6 +110,7 @@ mkLicenseExceptionId LicenseListVersion_3_6 s = Map.lookup s stringLookup_3_6 mkLicenseExceptionId LicenseListVersion_3_9 s = Map.lookup s stringLookup_3_9 mkLicenseExceptionId LicenseListVersion_3_10 s = Map.lookup s stringLookup_3_10 mkLicenseExceptionId LicenseListVersion_3_16 s = Map.lookup s stringLookup_3_16 +mkLicenseExceptionId LicenseListVersion_3_23 s = Map.lookup s stringLookup_3_23 stringLookup_3_0 :: Map String LicenseExceptionId stringLookup_3_0 = Map.fromList $ map (\i -> (licenseExceptionId i, i)) $ @@ -132,6 +136,10 @@ stringLookup_3_16 :: Map String LicenseExceptionId stringLookup_3_16 = Map.fromList $ map (\i -> (licenseExceptionId i, i)) $ licenseExceptionIdList LicenseListVersion_3_16 +stringLookup_3_23 :: Map String LicenseExceptionId +stringLookup_3_23 = Map.fromList $ map (\i -> (licenseExceptionId i, i)) $ + licenseExceptionIdList LicenseListVersion_3_23 + -- | License exceptions in all SPDX License lists bulkOfLicenses :: [LicenseExceptionId] bulkOfLicenses = diff --git a/templates/SPDX.LicenseId.template.hs b/templates/SPDX.LicenseId.template.hs index 648625271f6..6ee2bf6ede3 100644 --- a/templates/SPDX.LicenseId.template.hs +++ b/templates/SPDX.LicenseId.template.hs @@ -32,7 +32,7 @@ import qualified Text.PrettyPrint as Disp -- LicenseId ------------------------------------------------------------------------------- --- | SPDX License identifiers list v3.16 +-- | SPDX License identifiers list v3.23 data LicenseId {{ licenseIds }} deriving (Eq, Ord, Enum, Bounded, Show, Read, Typeable, Data) @@ -175,6 +175,9 @@ licenseIdList LicenseListVersion_3_10 = licenseIdList LicenseListVersion_3_16 = {{licenseList_perv.v_3_16}} ++ bulkOfLicenses +licenseIdList LicenseListVersion_3_23 = +{{licenseList_perv.v_3_23}} + ++ bulkOfLicenses -- | Create a 'LicenseId' from a 'String'. mkLicenseId :: LicenseListVersion -> String -> Maybe LicenseId @@ -184,6 +187,7 @@ mkLicenseId LicenseListVersion_3_6 s = Map.lookup s stringLookup_3_6 mkLicenseId LicenseListVersion_3_9 s = Map.lookup s stringLookup_3_9 mkLicenseId LicenseListVersion_3_10 s = Map.lookup s stringLookup_3_10 mkLicenseId LicenseListVersion_3_16 s = Map.lookup s stringLookup_3_16 +mkLicenseId LicenseListVersion_3_23 s = Map.lookup s stringLookup_3_23 stringLookup_3_0 :: Map String LicenseId stringLookup_3_0 = Map.fromList $ map (\i -> (licenseId i, i)) $ @@ -209,6 +213,10 @@ stringLookup_3_16 :: Map String LicenseId stringLookup_3_16 = Map.fromList $ map (\i -> (licenseId i, i)) $ licenseIdList LicenseListVersion_3_16 +stringLookup_3_23 :: Map String LicenseId +stringLookup_3_23 = Map.fromList $ map (\i -> (licenseId i, i)) $ + licenseIdList LicenseListVersion_3_23 + -- | Licenses in all SPDX License lists bulkOfLicenses :: [LicenseId] bulkOfLicenses = diff --git a/validate.sh b/validate.sh index aa60c17ab20..e6cd603db41 100755 --- a/validate.sh +++ b/validate.sh @@ -312,9 +312,9 @@ case "$(uname)" in esac if $LIBONLY; then - PROJECTFILE=cabal.project.validate.libonly + PROJECTFILE=cabal.validate-libonly.project else - PROJECTFILE=cabal.project.validate + PROJECTFILE=cabal.validate.project fi BASEHC=ghc-$($HC --numeric-version) @@ -468,7 +468,7 @@ CMD="$($CABALLISTBIN cabal-install:test:integration-tests2) -j1 --hide-successes step_cli_suite() { print_header "cabal-install: cabal-testsuite" -CMD="$($CABALLISTBIN cabal-testsuite:exe:cabal-tests) --builddir=$CABAL_TESTSUITE_BDIR --with-cabal=$($CABALLISTBIN cabal-install:exe:cabal) $TESTSUITEJOBS --with-ghc=$HC --hide-successes" +CMD="$($CABALLISTBIN cabal-testsuite:exe:cabal-tests) --builddir=$CABAL_TESTSUITE_BDIR --with-cabal=$($CABALLISTBIN cabal-install:exe:cabal) $TESTSUITEJOBS --with-ghc=$HC --hide-successes --intree-cabal-lib=$PWD --test-tmp=$PWD/testdb" (cd cabal-testsuite && timed $CMD) || exit 1 } diff --git a/weeder.dhall b/weeder.dhall deleted file mode 100644 index ff28bf5c995..00000000000 --- a/weeder.dhall +++ /dev/null @@ -1,9 +0,0 @@ -{ roots = - [ "^Main\\.main$" - , "^Hackage\\.Security\\." - , "^Text\\.JSON\\.Canonical\\." - , "Paths_Cabal\\." - , "Paths_cabal_install\\." - ] -, type-class-roots = True -}