From f5819edbb290c9a179bb655924d97e762b29206e Mon Sep 17 00:00:00 2001 From: Phil de Joux Date: Mon, 29 Apr 2024 21:08:05 -0400 Subject: [PATCH 1/2] Rename projects to cabal.*.project - Rename cabal.bootstrap.project - Rename cabal.meta.project - Rename cabal.validate-libonly.project - Rename cabal.validate.project - Rename cabal.release.project (cherry picked from commit d8147f62c9d35fd6e5e89291698918e13cd0fb9f) # Conflicts: # .github/workflows/quick-jobs.yml # Makefile # cabal.bootstrap.project --- .github/workflows/quick-jobs.yml | 16 ++++++++++++++- .github/workflows/validate.yml | 14 ++++++------- .gitlab/ci.sh | 8 ++++---- CONTRIBUTING.md | 2 +- Makefile | 20 ++++++++++++++----- README.md | 2 +- bootstrap/generate_bootstrap_plans | 2 +- cabal-testsuite/README.md | 2 +- cabal.bootstrap.project | 12 +++++++++++ cabal.project.meta => cabal.meta.project | 0 ...l.project.release => cabal.release.project | 0 ....libonly => cabal.validate-libonly.project | 0 ...project.validate => cabal.validate.project | 0 project-cabal/README.md | 14 ++++++------- project-cabal/ghc-latest.config | 2 +- validate.sh | 4 ++-- 16 files changed, 67 insertions(+), 31 deletions(-) create mode 100644 cabal.bootstrap.project rename cabal.project.meta => cabal.meta.project (100%) rename cabal.project.release => cabal.release.project (100%) rename cabal.project.validate.libonly => cabal.validate-libonly.project (100%) rename cabal.project.validate => cabal.validate.project (100%) diff --git a/.github/workflows/quick-jobs.yml b/.github/workflows/quick-jobs.yml index 5c91fe692d5..97f3fcd0f31 100644 --- a/.github/workflows/quick-jobs.yml +++ b/.github/workflows/quick-jobs.yml @@ -18,6 +18,16 @@ jobs: meta: name: Meta checks runs-on: ubuntu-latest +<<<<<<< HEAD +======= + 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 +>>>>>>> d8147f62c (Rename projects to cabal.*.project) # This job is not run in a container, any recent GHC should be fine steps: - name: Set PATH @@ -141,7 +151,11 @@ jobs: run: cabal v2-update - uses: actions/checkout@v4 - name: Check Release with Pinned Hackage - run: cabal build all --dry-run --project-file=cabal.project.release + run: cabal build all --dry-run --project-file=cabal.release.project - name: Check Release with Latest Hackage +<<<<<<< HEAD run: cabal build all --dry-run --project-file=cabal.project.release --index-state="hackage.haskell.org HEAD" +======= + run: cabal build all --dry-run --project-file=cabal.release.project --index-state="hackage.haskell.org HEAD" +>>>>>>> d8147f62c (Rename projects to cabal.*.project) diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index eda247feed6..509c9694298 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -96,8 +96,8 @@ jobs: - name: Manually supplied constraints/allow-newer 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 @@ -156,7 +156,7 @@ 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 @@ -288,8 +288,8 @@ jobs: - name: Manually supplied constraints/allow-newer 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 @@ -310,14 +310,14 @@ jobs: - 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 DIR=$(dirname "$CABAL_EXEC") diff --git a/.gitlab/ci.sh b/.gitlab/ci.sh index 9966bb86f66..1515a6afe22 100755 --- a/.gitlab/ci.sh +++ b/.gitlab/ci.sh @@ -31,7 +31,7 @@ mkdir -p "$CABAL_DIR" # # $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 @@ -39,21 +39,21 @@ fi # 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.project.release.local +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.project.release.local + echo 'constraints: zlib +bundled-c-zlib' >> cabal.release.project.local ;; esac args=( --disable-profiling --enable-executable-stripping - --project-file=cabal.project.release + --project-file=cabal.release.project ${ADD_CABAL_ARGS} ) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0ff2304faf4..17f50f2a916 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,7 +12,7 @@ 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: ``` -cabal build --project-file=cabal.project.release cabal +cabal build --project-file=cabal.release.project cabal ``` > **Note** diff --git a/Makefile b/Makefile index 18c92c30a6f..ea8f4ac7226 100644 --- a/Makefile +++ b/Makefile @@ -46,10 +46,10 @@ spdx : $(SPDX_LICENSE_HS) $(SPDX_EXCEPTION_HS) 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 @@ -59,10 +59,10 @@ TEMPLATE_PATHS:=Cabal/src/Distribution/Simple/Build/PathsModule/Z.hs templates : phony $(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 @@ -75,9 +75,15 @@ doc/buildinfo-fields-reference.rst : \ cabal run buildinfo-reference-generator buildinfo-reference-generator/template.zinza | tee $@ git diff --exit-code $@ +<<<<<<< HEAD # 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 -- +>>>>>>> d8147f62c (Rename projects to cabal.*.project) # ghcid @@ -158,7 +164,7 @@ 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 @@ -191,7 +197,11 @@ tags : ############################################################################## bootstrap-json-%: phony +<<<<<<< HEAD cabal build --project-file=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 +>>>>>>> d8147f62c (Rename projects to cabal.*.project) 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 \ diff --git a/README.md b/README.md index f067422169b..77e8db706ef 100644 --- a/README.md +++ b/README.md @@ -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/generate_bootstrap_plans b/bootstrap/generate_bootstrap_plans index d81b088bb64..86e50c76063 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.release.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/cabal-testsuite/README.md b/cabal-testsuite/README.md index afe08e499dc..79b9185fecb 100644 --- a/cabal-testsuite/README.md +++ b/cabal-testsuite/README.md @@ -65,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 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 100% rename from cabal.project.meta rename to cabal.meta.project diff --git a/cabal.project.release b/cabal.release.project similarity index 100% rename from cabal.project.release rename to cabal.release.project diff --git a/cabal.project.validate.libonly b/cabal.validate-libonly.project similarity index 100% rename from cabal.project.validate.libonly rename to cabal.validate-libonly.project diff --git a/cabal.project.validate b/cabal.validate.project similarity index 100% rename from cabal.project.validate rename to cabal.validate.project diff --git a/project-cabal/README.md b/project-cabal/README.md index 03f3dbdaf02..d12a316e3e4 100644 --- a/project-cabal/README.md +++ b/project-cabal/README.md @@ -3,14 +3,14 @@ We have these projects, all in the root: ``` -$ tree -P 'cabal.project*' --prune -L 1 +$ tree -P '*.project' --prune -L 1 . +├── cabal.bootstrap.project +├── cabal.meta.project ├── cabal.project -├── cabal.project.libonly -├── cabal.project.meta -├── cabal.project.release -├── cabal.project.validate -└── cabal.project.validate.libonly +├── cabal.release.project +├── cabal.validate-libonly.project +└── cabal.validate.project ``` Projects are expected to pass a `build --dry-run` standalone test, @@ -85,7 +85,7 @@ package group. The `meta` project is a one-liner: ``` -$ cat cabal.project.meta +$ cat cabal.meta.project packages: cabal-dev-scripts ``` diff --git a/project-cabal/ghc-latest.config b/project-cabal/ghc-latest.config index 5132415b48c..bff5d80c241 100644 --- a/project-cabal/ghc-latest.config +++ b/project-cabal/ghc-latest.config @@ -3,7 +3,7 @@ -- 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), +-- - 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 diff --git a/validate.sh b/validate.sh index 9edc87eeaf3..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) From b89714c6da0c944ee04f3740d6019c6475cd2a32 Mon Sep 17 00:00:00 2001 From: brandon s allbery kf8nh Date: Tue, 21 May 2024 15:50:22 -0400 Subject: [PATCH 2/2] Fix conflict with #9990 --- .github/workflows/quick-jobs.yml | 8 -------- Makefile | 10 ---------- bootstrap/generate_bootstrap_plans | 2 +- 3 files changed, 1 insertion(+), 19 deletions(-) diff --git a/.github/workflows/quick-jobs.yml b/.github/workflows/quick-jobs.yml index 97f3fcd0f31..f90cab68acd 100644 --- a/.github/workflows/quick-jobs.yml +++ b/.github/workflows/quick-jobs.yml @@ -18,8 +18,6 @@ jobs: meta: name: Meta checks runs-on: ubuntu-latest -<<<<<<< HEAD -======= env: cabal_build: >- cabal build --builddir=dist-newstyle-meta --project-file=cabal.meta.project @@ -27,7 +25,6 @@ jobs: gen-paths-module gen-spdx gen-spdx-exc ->>>>>>> d8147f62c (Rename projects to cabal.*.project) # This job is not run in a container, any recent GHC should be fine steps: - name: Set PATH @@ -153,9 +150,4 @@ jobs: - name: Check Release with Pinned Hackage run: cabal build all --dry-run --project-file=cabal.release.project - name: Check Release with Latest Hackage -<<<<<<< HEAD - run: cabal build all --dry-run --project-file=cabal.project.release --index-state="hackage.haskell.org HEAD" - -======= run: cabal build all --dry-run --project-file=cabal.release.project --index-state="hackage.haskell.org HEAD" ->>>>>>> d8147f62c (Rename projects to cabal.*.project) diff --git a/Makefile b/Makefile index ea8f4ac7226..4e4cf366847 100644 --- a/Makefile +++ b/Makefile @@ -75,15 +75,9 @@ doc/buildinfo-fields-reference.rst : \ cabal run buildinfo-reference-generator buildinfo-reference-generator/template.zinza | tee $@ git diff --exit-code $@ -<<<<<<< HEAD # 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 -- ->>>>>>> d8147f62c (Rename projects to cabal.*.project) # ghcid @@ -197,11 +191,7 @@ tags : ############################################################################## bootstrap-json-%: phony -<<<<<<< HEAD - cabal build --project-file=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 ->>>>>>> d8147f62c (Rename projects to cabal.*.project) 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 \ diff --git a/bootstrap/generate_bootstrap_plans b/bootstrap/generate_bootstrap_plans index 86e50c76063..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.release.project --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" }