[Git][ghc/ghc][wip/ghc-8.8-merges] 3 commits: Add werror function to Flavour.hs
Ben Gamari
gitlab at gitlab.haskell.org
Sat Apr 6 16:16:40 UTC 2019
Ben Gamari pushed to branch wip/ghc-8.8-merges at Glasgow Haskell Compiler / GHC
Commits:
a80de887 by Matthew Pickering at 2019-04-06T16:16:29Z
Add werror function to Flavour.hs
This function makes it easy to turn on `-Werror` in the correct manner
to mimic how CI turns on -Werror.
(cherry picked from commit 8dcd00cef7782c64b5484b106f4fd77c8c87e40a)
- - - - -
e4b537b2 by Alp Mestanogullari at 2019-04-06T16:16:29Z
Hadrian: introduce ways to skip some documentation targets
The initial motivation for this is to have a chance to run the binary
distribution rules in our Windows CI without having to install
sphinx-build and xelatex there, while retaining the ability to
generate haddocks. I just ended up extending this idea a little bit so
as to have control over whether we build haddocks, (sphinx) HTML manuals,
(sphinx) PDF manuals and (sphinx) manpages.
(cherry picked from commit 8442103aa575dc1cd25cb3231e729c6365dc1b5c)
- - - - -
04bfc6e9 by Ben Gamari at 2019-04-06T16:16:29Z
gitlab-ci: Backport from master
- - - - -
8 changed files:
- .gitlab-ci.yml
- hadrian/doc/make.md
- hadrian/doc/user-settings.md
- hadrian/src/CommandLine.hs
- hadrian/src/Flavour.hs
- hadrian/src/Rules/Documentation.hs
- hadrian/src/Settings/Default.hs
- hadrian/src/UserSettings.hs
Changes:
=====================================
.gitlab-ci.yml
=====================================
@@ -1,17 +1,31 @@
variables:
GIT_SSL_NO_VERIFY: "1"
+ # Commit of ghc/ci-images repository from which to pull Docker images
+ DOCKER_REV: cefaee3c742af193e0f7783f87edb0d35374515c
+
before_script:
- python3 .gitlab/fix-submodules.py
- git submodule sync --recursive
- git submodule update --init --recursive
- git checkout .gitmodules
+ - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
stages:
- - lint
- - build
- - full-build
- - cleanup # See Note [Cleanup on Windows]
+ - lint # Source linting
+ - build # A quick smoke-test to weed out broken commits
+ - full-build # Build all the things
+ - cleanup # See Note [Cleanup on Windows]
+ - packaging # Source distribution, etc.
+ - hackage # head.hackage testing
+ - deploy # push documentation
+
+.only-default: &only-default
+ only:
+ - master
+ - /ghc-[0-9]+\.[0-9]+/
+ - merge_requests
+ - tags
############################################################
# Runner Tags
@@ -30,44 +44,106 @@ stages:
############################################################
ghc-linters:
+ allow_failure: true
stage: lint
- image: ghcci/linters:0.1
+ image: "registry.gitlab.haskell.org/ghc/ci-images/linters:$DOCKER_REV"
script:
- - |
- if [ -n "$CI_MERGE_REQUEST_ID" ]; then
- base="$(git merge-base $CI_MERGE_REQUEST_BRANCH_NAME HEAD)"
- validate-commit-msg .git $(git rev-list $base..$CI_COMMIT_SHA)
- submodchecker .git $(git rev-list $base..$CI_COMMIT_SHA)
- validate-whitespace .git $(git rev-list $base..$CI_COMMIT_SHA)
- .gitlab/linters/check-makefiles.py $base $CI_COMMIT_SHA
- .gitlab/linters/check-cpp.py $base $CI_COMMIT_SHA
- fi
+ - git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
+ - base="$(git merge-base FETCH_HEAD $CI_COMMIT_SHA)"
+ - "echo Merge base $base"
+ # - validate-commit-msg .git $(git rev-list $base..$CI_COMMIT_SHA)
+ - validate-whitespace .git $(git rev-list $base..$CI_COMMIT_SHA)
+ - .gitlab/linters/check-makefiles.py $base $CI_COMMIT_SHA
+ - .gitlab/linters/check-cpp.py $base $CI_COMMIT_SHA
+ dependencies: []
+ tags:
+ - lint
+ only:
+ refs:
+ - merge_requests
+
+# We allow the submodule checker to fail when run on merge requests (to
+# accomodate, e.g., haddock changes not yet upstream) but not on `master` or
+# Marge jobs.
+.lint-submods:
+ stage: lint
+ image: "registry.gitlab.haskell.org/ghc/ci-images/linters:$DOCKER_REV"
+ script:
+ - submodchecker .git $(git rev-list $base..$CI_COMMIT_SHA)
+ dependencies: []
+ tags:
+ - lint
+
+lint-submods:
+ extends: .lint-submods
+ only:
+ refs:
+ - master
+ - /ghc-[0-9]+\.[0-9]+/
+ - wip/marge_bot_batch_merge_job
+
+lint-submods-mr:
+ extends: .lint-submods
+ allow_failure: true
+ only:
+ refs:
+ - merge_requests
+
+.lint-changelogs:
+ stage: lint
+ image: "registry.gitlab.haskell.org/ghc/ci-images/linters:$DOCKER_REV"
dependencies: []
tags:
- lint
+ script:
+ - |
+ grep TBA libraries/*/changelog.md && (
+ echo "Error: Found \"TBA\"s in changelogs."
+ exit 1
+ )
+
+lint-changelogs:
+ extends: .lint-changelogs
+ allow_failure: true
+ only:
+ refs:
+ - /ghc-[0-9]+\.[0-9]+/
+
+lint-release-changelogs:
+ extends: .lint-changelogs
+ only:
+ - tags
+
############################################################
# Validation via Pipelines (hadrian)
############################################################
.validate-hadrian:
+ <<: *only-default
allow_failure: true
script:
+ - cabal update
- git clean -xdf && git submodule foreach git clean -xdf
- bash .circleci/prepare-system.sh
- if [[ -d ./cabal-cache ]]; then cp -R ./.cabal-cache ~/.cabal-cache; fi
- ./boot
- ./configure $CONFIGURE_ARGS
- - hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh`
+ - hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh` --docs=no-sphinx binary-dist
+ - mv _build/bindist/ghc*.tar.xz ghc.tar.xz
cache:
key: hadrian
paths:
- cabal-cache
+ artifacts:
+ when: always
+ paths:
+ - ghc.tar.xz
validate-x86_64-linux-deb8-hadrian:
extends: .validate-hadrian
stage: build
- image: ghcci/x86_64-linux-deb8:0.1
+ image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb8:$DOCKER_REV"
before_script:
# workaround for docker permissions
- sudo chown ghc:ghc -R .
@@ -75,14 +151,17 @@ validate-x86_64-linux-deb8-hadrian:
- git submodule sync --recursive
- git submodule update --init --recursive
- git checkout .gitmodules
+ - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
tags:
- x86_64-linux
+
############################################################
# Validation via Pipelines (make)
############################################################
.validate:
+ <<: *only-default
variables:
TEST_TYPE: test
before_script:
@@ -92,22 +171,25 @@ validate-x86_64-linux-deb8-hadrian:
- ./configure $CONFIGURE_ARGS
- |
THREADS=`mk/detect-cpu-count.sh`
- make V=0 -j$THREADS
+ make V=0 -j$THREADS WERROR=-Werror
- |
make binary-dist TAR_COMP_OPTS="-1"
- mv ghc-*.tar.xz ghc.tar.xz
- |
THREADS=`mk/detect-cpu-count.sh`
- make $TEST_TYPE THREADS=$THREADS JUNIT_FILE=../../junit.xml
+ make $TEST_TYPE THREADS=$THREADS JUNIT_FILE=../../junit.xml METRICS_FILE=$METRICS_FILE
dependencies: []
artifacts:
reports:
junit: junit.xml
expire_in: 2 week
paths:
- - ghc.tar.xz
+ - ghc-*.tar.xz
- junit.xml
+#################################
+# x86_64-darwin
+#################################
+
validate-x86_64-darwin:
extends: .validate
stage: full-build
@@ -115,17 +197,20 @@ validate-x86_64-darwin:
- x86_64-darwin
variables:
GHC_VERSION: 8.6.3
+ BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-apple-darwin.tar.xz"
MACOSX_DEPLOYMENT_TARGET: "10.7"
# Only Sierra and onwards supports clock_gettime. See #12858
ac_cv_func_clock_gettime: "no"
LANG: "en_US.UTF-8"
CONFIGURE_ARGS: --with-intree-gmp
+ TEST_ENV: "x86_64-darwin"
before_script:
- git clean -xdf && git submodule foreach git clean -xdf
- python3 .gitlab/fix-submodules.py
- git submodule sync --recursive
- git submodule update --init --recursive
- git checkout .gitmodules
+ - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
- bash .gitlab/darwin-init.sh
- PATH="`pwd`/toolchain/bin:$PATH"
@@ -150,6 +235,12 @@ validate-x86_64-darwin:
- git submodule sync --recursive
- git submodule update --init --recursive
- git checkout .gitmodules
+ - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
+ # Build hyperlinked sources for documentation when building releases
+ - |
+ if [[ -n "$CI_COMMIT_TAG" ]]; then
+ echo "EXTRA_HADDOCK_OPTS += --hyperlinked-source --quickjump" >> mk/build.mk
+ fi
- bash .circleci/prepare-system.sh
# workaround for docker permissions
@@ -162,22 +253,31 @@ validate-x86_64-darwin:
- cabal-cache
- toolchain
-validate-aarch64-linux-deb9:
+#################################
+# aarch64-linux-deb9
+#################################
+
+.build-aarch64-linux-deb9:
extends: .validate-linux
stage: full-build
- image: ghcci/aarch64-linux-deb9:0.1
+ image: "registry.gitlab.haskell.org/ghc/ci-images/aarch64-linux-deb9:$DOCKER_REV"
allow_failure: true
- artifacts:
- when: always
- expire_in: 2 week
+ variables:
+ TEST_ENV: "aarch64-linux-deb9"
+ BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-aarch64-linux-deb9.tar.xz"
cache:
key: linux-aarch64-deb9
tags:
- aarch64-linux
+validate-aarch64-linux-deb9:
+ extends: .build-aarch64-linux-deb9
+ artifacts:
+ when: always
+ expire_in: 2 week
+
nightly-aarch64-linux-deb9:
- extends: validate-aarch64-linux-deb9
- stage: full-build
+ extends: .build-aarch64-linux-deb9
artifacts:
expire_in: 2 year
variables:
@@ -186,22 +286,28 @@ nightly-aarch64-linux-deb9:
variables:
- $NIGHTLY
-validate-i386-linux-deb9:
+#################################
+# i386-linux-deb9
+#################################
+
+.build-i386-linux-deb9:
extends: .validate-linux
stage: full-build
- image: ghcci/i386-linux-deb9:0.1
- allow_failure: true
+ image: "registry.gitlab.haskell.org/ghc/ci-images/i386-linux-deb9:$DOCKER_REV"
+ variables:
+ TEST_ENV: "i386-linux-deb9"
+ BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-i386-deb9-linux.tar.xz"
+ cache:
+ key: linux-i386-deb9
+
+validate-i386-linux-deb9:
+ extends: .build-i386-linux-deb9
artifacts:
when: always
expire_in: 2 week
- cache:
- key: linux-i386-deb9
nightly-i386-linux-deb9:
- extends: .validate-linux
- stage: full-build
- image: ghcci/i386-linux-deb9:0.1
- allow_failure: true
+ extends: .build-i386-linux-deb9
variables:
TEST_TYPE: slowtest
artifacts:
@@ -210,22 +316,29 @@ nightly-i386-linux-deb9:
only:
variables:
- $NIGHTLY
+
+#################################
+# x86_64-linux-deb9
+#################################
+
+.build-x86_64-linux-deb9:
+ extends: .validate-linux
+ stage: full-build
+ image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb9:$DOCKER_REV"
+ variables:
+ TEST_ENV: "x86_64-linux-deb9"
+ BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-deb9-linux.tar.xz"
cache:
- key: linux-i386-deb9
+ key: linux-x86_64-deb9
validate-x86_64-linux-deb9:
- extends: .validate-linux
- stage: build
- image: ghcci/x86_64-linux-deb9:0.2
+ extends: .build-x86_64-linux-deb9
artifacts:
when: always
expire_in: 2 week
- cache:
- key: linux-x86_64-deb9
nightly-x86_64-linux-deb9:
- extends: validate-x86_64-linux-deb9
- stage: build
+ extends: .build-x86_64-linux-deb9
artifacts:
expire_in: 2 year
variables:
@@ -234,70 +347,93 @@ nightly-x86_64-linux-deb9:
variables:
- $NIGHTLY
+# N.B. Has DEBUG assertions enabled in stage2
+validate-x86_64-linux-deb9-debug:
+ extends: .build-x86_64-linux-deb9
+ stage: build
+ variables:
+ BUILD_FLAVOUR: validate
+ TEST_ENV: "x86_64-linux-deb9-debug"
+
validate-x86_64-linux-deb9-llvm:
- extends: .validate-linux
+ extends: .build-x86_64-linux-deb9
stage: full-build
- allow_failure: true
- image: ghcci/x86_64-linux-deb9:0.2
variables:
BUILD_FLAVOUR: perf-llvm
- cache:
- key: linux-x86_64-deb9
-
-validate-x86_64-linux-deb8:
- extends: .validate-linux
- stage: full-build
- image: ghcci/x86_64-linux-deb8:0.1
- cache:
- key: linux-x86_64-deb8
- artifacts:
- when: always
- expire_in: 2 week
-
-validate-x86_64-linux-fedora27:
- extends: .validate-linux
- stage: full-build
- image: ghcci/x86_64-linux-fedora27:0.1
- cache:
- key: linux-x86_64-fedora27
- artifacts:
- when: always
- expire_in: 2 week
+ TEST_ENV: "x86_64-linux-deb9-llvm"
validate-x86_64-linux-deb9-integer-simple:
- extends: .validate-linux
+ extends: .build-x86_64-linux-deb9
stage: full-build
variables:
INTEGER_LIBRARY: integer-simple
- image: ghcci/x86_64-linux-deb9:0.2
- cache:
- key: linux-x86_64-deb9
+ TEST_ENV: "x86_64-linux-deb9-integer-simple"
+ BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-deb9-linux-integer-simple.tar.xz"
nightly-x86_64-linux-deb9-integer-simple:
- extends: validate-x86_64-linux-deb9-integer-simple
+ extends: .build-x86_64-linux-deb9
stage: full-build
- artifacts:
- expire_in: 2 year
variables:
+ INTEGER_LIBRARY: integer-simple
+ TEST_ENV: "x86_64-linux-deb9-integer-simple"
TEST_TYPE: slowtest
+ artifacts:
+ expire_in: 2 year
only:
variables:
- $NIGHTLY
validate-x86_64-linux-deb9-unreg:
- extends: .validate-linux
+ extends: .build-x86_64-linux-deb9
stage: full-build
variables:
CONFIGURE_ARGS: --enable-unregisterised
- image: ghcci/x86_64-linux-deb9:0.2
+ TEST_ENV: "x86_64-linux-deb9-unreg"
+
+
+#################################
+# x86_64-linux-deb8
+#################################
+
+release-x86_64-linux-deb8:
+ extends: .validate-linux
+ stage: full-build
+ image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb8:$DOCKER_REV"
+ variables:
+ TEST_ENV: "x86_64-linux-deb8"
+ BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-deb8-linux.tar.xz"
+ only:
+ - tags
cache:
- key: linux-x86_64-deb9
+ key: linux-x86_64-deb8
+ artifacts:
+ when: always
+ expire_in: 2 week
+
+
+#################################
+# x86_64-linux-fedora27
+#################################
+
+validate-x86_64-linux-fedora27:
+ extends: .validate-linux
+ stage: full-build
+ image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora27:$DOCKER_REV"
+ variables:
+ TEST_ENV: "x86_64-linux-fedora27"
+ BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-fedora27-linux.tar.xz"
+ cache:
+ key: linux-x86_64-fedora27
+ artifacts:
+ when: always
+ expire_in: 2 week
############################################################
# Validation via Pipelines (Windows)
############################################################
-.validate-windows:
+.build-windows:
+ <<: *only-default
before_script:
- git clean -xdf
- git submodule foreach git clean -xdf
@@ -314,72 +450,131 @@ validate-x86_64-linux-deb9-unreg:
- git submodule sync --recursive
- git submodule update --init --recursive
- git checkout .gitmodules
+ - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
- bash .gitlab/win32-init.sh
after_script:
- rd /s /q tmp
- robocopy /np /nfl /ndl /e "%APPDATA%\cabal" cabal-cache
- bash -c 'make clean || true'
dependencies: []
+ variables:
+ FORCE_SYMLINKS: 1
+ LANG: "en_US.UTF-8"
cache:
paths:
- cabal-cache
- ghc-8.6.2
- ghc-tarballs
-validate-x86_64-windows-hadrian:
- extends: .validate-windows
+.build-windows-hadrian:
+ extends: .build-windows
stage: full-build
variables:
GHC_VERSION: "8.6.2"
- LANG: "en_US.UTF-8"
script:
- |
- set MSYSTEM=MINGW64
python boot
bash -c './configure --enable-tarballs-autodownload GHC=`pwd`/toolchain/bin/ghc HAPPY=`pwd`/toolchain/bin/happy ALEX=`pwd`/toolchain/bin/alex'
- mkdir -p _build
- cp -R inplace/mingw _build/mingw
- - bash -c "PATH=`pwd`/toolchain/bin:$PATH hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh` --flavour=Quick"
- # FIXME: Bindist disabled due to #16073
- #- bash -c "PATH=`pwd`/toolchain/bin:$PATH hadrian/build.cabal.sh binary-dist"
+ - bash -c "PATH=`pwd`/toolchain/bin:$PATH hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh` --flavour=Quick --docs=no-sphinx binary-dist"
+ - mv _build/bindist/ghc*.tar.xz ghc.tar.xz
# FIXME: Testsuite disabled due to #16156.
- #- bash -c 'make V=0 test THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../junit.xml'
- cache:
- key: x86_64-windows
+ # - bash -c 'make V=0 test THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../junit.xml'
tags:
- x86_64-windows
+ artifacts:
+ when: always
+ paths:
+ - ghc.tar.xz
-validate-x86_64-windows:
- extends: .validate-windows
+validate-x86_64-windows-hadrian:
+ extends: .build-windows-hadrian
+ variables:
+ MSYSTEM: MINGW64
+ cache:
+ key: x86_64-windows-hadrian
+
+nightly-i386-windows-hadrian:
+ extends: .build-windows-hadrian
+ variables:
+ MSYSTEM: MINGW32
+ only:
+ variables:
+ - $NIGHTLY
+ cache:
+ key: i386-windows-hadrian
+
+.build-windows-make:
+ extends: .build-windows
stage: full-build
# due to #16084
allow_failure: true
variables:
+ BUILD_FLAVOUR: "quick"
GHC_VERSION: "8.6.2"
- LANG: "en_US.UTF-8"
+ BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-mingw32.tar.xz"
script:
- |
- set MSYSTEM=MINGW64
python boot
- bash -c './configure --enable-tarballs-autodownload GHC=`pwd`/toolchain/bin/ghc HAPPY=`pwd`/toolchain/bin/happy ALEX=`pwd`/toolchain/bin/alex'
- - bash -c "echo include mk/flavours/quick.mk > mk/build.mk"
+ bash -c './configure --enable-tarballs-autodownload GHC=`pwd`/toolchain/bin/ghc HAPPY=`pwd`/toolchain/bin/happy ALEX=`pwd`/toolchain/bin/alex $CONFIGURE_ARGS'
+ - bash -c "echo include mk/flavours/${BUILD_FLAVOUR}.mk > mk/build.mk"
- bash -c "PATH=`pwd`/toolchain/bin:$PATH make -j`mk/detect-cpu-count.sh`"
- - |
- bash -c "make binary-dist TAR_COMP_OPTS=-1"
- mv ghc-*.tar.xz ghc.tar.xz
+ - bash -c "PATH=`pwd`/toolchain/bin:$PATH make binary-dist TAR_COMP_OPTS=-1"
- bash -c 'make V=0 test THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../junit.xml'
- cache:
- key: x86_64-windows
tags:
- x86_64-windows
artifacts:
when: always
+ expire_in: 2 week
reports:
junit: junit.xml
paths:
- - ghc.tar.xz
+ - ghc-*.tar.xz
- junit.xml
+validate-x86_64-windows:
+ extends: .build-windows-make
+ variables:
+ MSYSTEM: MINGW64
+ CONFIGURE_ARGS: "--target=x86_64-unknown-mingw32"
+ cache:
+ key: x86_64-windows
+
+# Normal Windows validate builds are profiled; that won't do for releases.
+release-x86_64-windows:
+ extends: validate-x86_64-windows
+ variables:
+ MSYSTEM: MINGW64
+ BUILD_FLAVOUR: "perf"
+ CONFIGURE_ARGS: "--target=x86_64-unknown-mingw32"
+ only:
+ - tags
+
+release-i386-windows:
+ extends: .build-windows-make
+ only:
+ - tags
+ variables:
+ MSYSTEM: MINGW32
+ BUILD_FLAVOUR: "perf"
+ CONFIGURE_ARGS: "--target=i386-unknown-mingw32"
+ cache:
+ key: i386-windows
+
+nightly-i386-windows:
+ extends: .build-windows-make
+ only:
+ variables:
+ - $NIGHTLY
+ variables:
+ MSYSTEM: MINGW32
+ CONFIGURE_ARGS: "--target=i386-unknown-mingw32"
+ cache:
+ key: i386-windows
+
+############################################################
+# Cleanup
+############################################################
+
# Note [Cleaning up after shell executor]
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
@@ -393,6 +588,7 @@ validate-x86_64-windows:
# See Note [Cleanup after shell executor]
cleanup-windows:
+ <<: *only-default
stage: cleanup
tags:
- x86_64-windows
@@ -415,10 +611,12 @@ cleanup-windows:
# See Note [Cleanup after shell executor]
cleanup-darwin:
+ <<: *only-default
stage: cleanup
tags:
- x86_64-darwin
when: always
+ dependencies: []
before_script:
- echo "Time to clean up"
script:
@@ -430,3 +628,106 @@ cleanup-darwin:
- rm -Rf $BUILD_DIR/*
- exit 0
+############################################################
+# Packaging
+############################################################
+
+doc-tarball:
+ <<: *only-default
+ stage: packaging
+ tags:
+ - x86_64-linux
+ image: ghcci/x86_64-linux-deb9:0.2
+ dependencies:
+ - validate-x86_64-linux-deb9
+ - validate-x86_64-windows
+ artifacts:
+ paths:
+ - haddock.html.tar.xz
+ - libraries.html.tar.xz
+ - users_guide.html.tar.xz
+ - index.html
+ - "*.pdf"
+ script:
+ - rm -Rf docs
+ - bash -ex distrib/mkDocs/mkDocs ghc-x86_64-deb9-linux.tar.xz ghc-x86_64-mingw32.tar.xz
+ - ls -lh
+ - mv docs/*.tar.xz docs/index.html .
+
+source-tarball:
+ stage: packaging
+ tags:
+ - x86_64-linux
+ image: ghcci/x86_64-linux-deb9:0.2
+ only:
+ - tags
+ artifacts:
+ paths:
+ - ghc-*.tar.xz
+ - version
+ script:
+ - mk/get-win32-tarballs.sh download all
+ - ./boot
+ - ./configure
+ - make sdist
+ - mv sdistprep/*.xz .
+ - make show VALUE=version > version
+
+
+############################################################
+# Testing via head.hackage
+############################################################
+
+# Triggering jobs in the ghc/head.hackage project requires that we have a job
+# token for that repository. Furthermore the head.hackage CI job must have
+# access to an unprivileged access token with the ability to query the ghc/ghc
+# project such that it can find the job ID of the fedora27 job for the current
+# pipeline.
+
+.hackage:
+ <<: *only-default
+ stage: hackage
+ image: ghcci/x86_64-linux-deb9:0.2
+ tags:
+ - x86_64-linux
+ dependencies: []
+ variables:
+ HEAD_HACKAGE_PROJECT_ID: "78"
+ script:
+ - bash .gitlab/start-head.hackage.sh
+
+hackage:
+ extends: .hackage
+ when: manual
+
+hackage-label:
+ extends: .hackage
+ only:
+ variables:
+ - $CI_MERGE_REQUEST_LABELS =~ /.*user-facing.*/
+
+nightly-hackage:
+ extends: .hackage
+ only:
+ variables:
+ - $NIGHTLY
+
+pages:
+ stage: deploy
+ dependencies:
+ - doc-tarball
+ image: ghcci/x86_64-linux-deb9:0.2
+ tags:
+ - x86_64-linux
+ script:
+ - mkdir -p public/doc
+ - tar -xf haddock.html.tar.xz -C public/doc
+ - tar -xf libraries.html.tar.xz -C public/doc
+ - tar -xf users_guide.html.tar.xz -C public/doc
+ - cp -f index.html public/doc
+ only:
+ - master
+ artifacts:
+ paths:
+ - public
+
=====================================
hadrian/doc/make.md
=====================================
@@ -174,6 +174,22 @@ time you fire up a build. This is not possible with the Make build system.
build docs
```
+- Build documentation, but without haddocks (resp. without HTML or PDF manuals)
+
+ ``` sh
+ # Make
+ echo 'HADDOCKS_DOCS = NO' > mk/build.mk
+ # For HTML manuals: BUILD_SPHINX_HTML = NO
+ # For PDF manuals: BUILD_SPHINX_PDF = NO
+ make
+
+ # Hadrian
+ build docs --docs=no-haddocks
+ # Append --docs=no-sphinx-pdfs, --docs=no-sphinx-html or
+ # --docs=no-sphinx-man (or --docs=no-sphinx to encompass them all)
+ # to further reduce or even completely disable documentation targets.
+ ```
+
- Running nofib
``` sh
=====================================
hadrian/doc/user-settings.md
=====================================
@@ -32,7 +32,10 @@ data Flavour = Flavour {
-- | Build profiled GHC.
ghcProfiled :: Bool,
-- | Build GHC with debug information.
- ghcDebugged :: Bool }
+ ghcDebugged :: Bool
+ -- | Whether to build docs and which ones
+ -- (haddocks, user manual, haddock manual)
+ ghcDocs :: Action DocTargets }
```
Hadrian provides several built-in flavours (`default`, `quick`, and a few
others; see `hadrian/doc/flavours.md`), which can be activated from the command line,
@@ -102,6 +105,17 @@ patterns such as `"//Prelude.*"` can be used when matching input and output file
where `//` matches an arbitrary number of path components and `*` matches an entire
path component, excluding any separators.
+### Enabling -Werror
+
+It is useful to enable `-Werror` when building GHC as this setting is
+used in the CI to ensure a warning free build. The `werror` function can be
+used to easily modify a flavour to turn this setting on.
+
+```
+devel2WerrorFlavour :: Flavour
+devel2WerrorFlavour = werror (developmentFlavour Stage2)
+```
+
## Packages
Users can add and remove packages from particular build stages. As an example,
@@ -216,6 +230,45 @@ verboseCommand = output "//rts/sm/*" &&^ way threaded
verboseCommand = return True
```
+## Documentation
+
+`Flavour`'s `ghcDocs :: Action DocTargets` field lets you
+customize the "groups" of documentation targets that should
+run when running `build docs` (or, transitively,
+`build binary-dist`).
+
+```haskell
+type DocTargets = Set DocTarget
+data DocTarget = Haddocks | SphinxHTML | SphinxPDFs | SphinxMan
+```
+
+By default, `ghcDocs` contains all of them and `build docs` would
+therefore attempt to build all the haddocks, manuals and manpages.
+If, for some reason (e.g no easy way to install `sphinx-build` or
+`xelatex` on your system), you're just interested in building the
+haddocks, you could define a custom flavour as follows:
+
+```haskell
+justHaddocksFlavour :: Flavour
+justHaddocksFlavour = defaultFlavour
+ { name = "default-haddocks"
+ , ghcDocs = Set.singleton Haddocks }
+```
+
+and then run `build --flavour=default-haddocks`. Alternatively,
+you can use the `--docs` CLI flag to selectively disable some or
+all of the documentation targets:
+
+- `--docs=none`: don't build any docs
+- `--docs=no-haddocks`: don't build haddocks
+- `--docs=no-sphinx`: don't build any user manual or manpage
+- `--docs=no-sphinx-html`: don't build HTML versions of manuals
+- `--docs=no-sphinx-pdfs`: don't build PDF versions of manuals
+- `--docs=no-sphinx-man`: don't build the manpage
+
+You can pass several `--docs=...` flags, Hadrian will combine
+their effects.
+
## Miscellaneous
To change the default behaviour of Hadrian with respect to building split
=====================================
hadrian/src/CommandLine.hs
=====================================
@@ -1,17 +1,20 @@
module CommandLine (
optDescrs, cmdLineArgsMap, cmdFlavour, lookupFreeze1, cmdIntegerSimple,
cmdProgressColour, cmdProgressInfo, cmdConfigure, cmdSplitObjects,
- lookupBuildRoot, TestArgs(..), TestSpeed(..), defaultTestArgs
+ cmdDocsArgs, lookupBuildRoot, TestArgs(..), TestSpeed(..), defaultTestArgs
) where
import Data.Either
import qualified Data.HashMap.Strict as Map
import Data.List.Extra
import Development.Shake hiding (Normal)
+import Flavour (DocTargets, DocTarget(..))
import Hadrian.Utilities hiding (buildRoot)
import System.Console.GetOpt
import System.Environment
+import qualified Data.Set as Set
+
data TestSpeed = Slow | Average | Fast deriving (Show, Eq)
-- | All arguments that can be passed to Hadrian via the command line.
@@ -24,7 +27,8 @@ data CommandLineArgs = CommandLineArgs
, progressInfo :: ProgressInfo
, splitObjects :: Bool
, buildRoot :: BuildRoot
- , testArgs :: TestArgs }
+ , testArgs :: TestArgs
+ , docTargets :: DocTargets }
deriving (Eq, Show)
-- | Default values for 'CommandLineArgs'.
@@ -38,7 +42,8 @@ defaultCommandLineArgs = CommandLineArgs
, progressInfo = Brief
, splitObjects = False
, buildRoot = BuildRoot "_build"
- , testArgs = defaultTestArgs }
+ , testArgs = defaultTestArgs
+ , docTargets = Set.fromList [minBound..maxBound] }
-- | These arguments are used by the `test` target.
data TestArgs = TestArgs
@@ -179,6 +184,25 @@ readTestWay way =
let newWays = way : testWays (testArgs flags)
in flags { testArgs = (testArgs flags) {testWays = newWays} }
+readDocsArg :: Maybe String -> Either String (CommandLineArgs -> CommandLineArgs)
+readDocsArg ms = maybe (Left "Cannot parse docs argument") (Right . set) (go =<< ms)
+
+ where
+ go :: String -> Maybe (DocTargets -> DocTargets)
+ go "none" = Just (const Set.empty)
+ go "no-haddocks" = Just (Set.delete Haddocks)
+ go "no-sphinx-html" = Just (Set.delete SphinxHTML)
+ go "no-sphinx-pdfs" = Just (Set.delete SphinxPDFs)
+ go "no-sphinx-man" = Just (Set.delete SphinxMan)
+ go "no-sphinx" = Just (Set.delete SphinxHTML
+ . Set.delete SphinxPDFs
+ . Set.delete SphinxMan)
+ go _ = Nothing
+
+ set :: (DocTargets -> DocTargets) -> CommandLineArgs -> CommandLineArgs
+ set tweakTargets flags = flags
+ { docTargets = tweakTargets (docTargets flags) }
+
-- | Standard 'OptDescr' descriptions of Hadrian's command line arguments.
optDescrs :: [OptDescr (Either String (CommandLineArgs -> CommandLineArgs))]
optDescrs =
@@ -198,6 +222,8 @@ optDescrs =
"Progress info style (None, Brief, Normal or Unicorn)."
, Option [] ["split-objects"] (NoArg readSplitObjects)
"Generate split objects (requires a full clean rebuild)."
+ , Option [] ["docs"] (OptArg readDocsArg "TARGET")
+ "Strip down docs targets (none, no-haddocks, no-sphinx[-{html, pdfs, man}]."
, Option [] ["test-compiler"] (OptArg readTestCompiler "TEST_COMPILER")
"Use given compiler [Default=stage2]."
, Option [] ["test-config-file"] (OptArg readTestConfigFile "CONFIG_FILE")
@@ -259,3 +285,6 @@ cmdProgressInfo = progressInfo <$> cmdLineArgs
cmdSplitObjects :: Action Bool
cmdSplitObjects = splitObjects <$> cmdLineArgs
+
+cmdDocsArgs :: Action DocTargets
+cmdDocsArgs = docTargets <$> cmdLineArgs
=====================================
hadrian/src/Flavour.hs
=====================================
@@ -1,6 +1,10 @@
-module Flavour (Flavour (..)) where
+module Flavour
+ ( Flavour (..), werror
+ , DocTargets, DocTarget(..)
+ ) where
import Expression
+import Data.Set (Set)
-- Please update doc/{flavours.md, user-settings.md} when changing this file.
-- | 'Flavour' is a collection of build settings that fully define a GHC build.
@@ -31,4 +35,33 @@ data Flavour = Flavour {
-- | Build profiled GHC.
ghcProfiled :: Bool,
-- | Build GHC with debug information.
- ghcDebugged :: Bool }
+ ghcDebugged :: Bool,
+ -- | Whether to build docs and which ones
+ -- (haddocks, user manual, haddock manual)
+ ghcDocs :: Action DocTargets }
+
+-- | A set of documentation targets
+type DocTargets = Set DocTarget
+
+-- | Documentation targets
+--
+-- While we can't reasonably expose settings or CLI options
+-- to selectively disable, say, base's haddocks, we can offer
+-- a less fine-grained choice:
+--
+-- - haddocks for libraries
+-- - non-haddock html pages (e.g GHC's user manual)
+-- - PDF documents (e.g haddock's manual)
+-- - man pages (GHC's)
+--
+-- The main goal being to have easy ways to do away with the need
+-- for e.g @sphinx-build@ or @xelatex@ and associated packages
+-- while still being able to build a(n almost) complete binary
+-- distribution.
+data DocTarget = Haddocks | SphinxHTML | SphinxPDFs | SphinxMan
+ deriving (Eq, Ord, Show, Bounded, Enum)
+
+-- | Turn on -Werror for packages built with the stage1 compiler.
+-- It mimics the CI settings so is useful to turn on when developing.
+werror :: Flavour -> Flavour
+werror fl = fl { args = args fl <> (builder Ghc ? notStage0 ? arg "-Werror") }
=====================================
hadrian/src/Rules/Documentation.hs
=====================================
@@ -22,6 +22,7 @@ import Target
import Utilities
import Data.List (union)
+import qualified Data.Set as Set
import qualified Text.Parsec as Parsec
docRoot :: FilePath
@@ -79,10 +80,35 @@ documentationRules = do
-- Haddock's manual, and builds man pages
"docs" ~> do
root <- buildRoot
+ doctargets <- ghcDocs =<< flavour
let html = htmlRoot -/- "index.html" -- also implies "docs-haddock"
archives = map pathArchive docPaths
pdfs = map pathPdf $ docPaths \\ ["libraries"]
- need $ map (root -/-) $ [html] ++ archives ++ pdfs ++ [manPageBuildPath]
+
+ targets = -- include PDFs unless --docs=no-sphinx[-pdf] is
+ -- passed.
+ concat [ pdfs | SphinxPDFs `Set.member` doctargets ]
+
+ -- include manpage unless --docs=no-sphinx[-man] is given.
+ ++ [ manPageBuildPath | SphinxMan `Set.member` doctargets ]
+
+ -- include toplevel html target uness we neither want
+ -- haddocks nor html pages produced by sphinx.
+ ++ [ html | Set.size (doctargets `Set.intersection`
+ Set.fromList [Haddocks, SphinxHTML]
+ ) > 0 ]
+
+ -- include archives for whatever targets remain from
+ -- the --docs arguments we got.
+ ++ [ ar
+ | (ar, doc) <- zip archives docPaths
+ , archiveTarget doc `Set.member` doctargets ]
+
+ need $ map (root -/-) targets
+
+ where archiveTarget "libraries" = Haddocks
+ archiveTarget _ = SphinxHTML
+
------------------------------------- HTML -------------------------------------
@@ -94,7 +120,16 @@ buildHtmlDocumentation = do
root <- buildRootRules
root -/- htmlRoot -/- "index.html" %> \file -> do
- need $ map ((root -/-) . pathIndex) docPaths
+ doctargets <- ghcDocs =<< flavour
+
+ -- We include the HTML output of haddock for libraries unless
+ -- told not to (e.g with --docs=no-haddocks). Likewise for
+ -- the HTML version of the users guide or the Haddock manual.
+ let targets = [ "libraries" | Haddocks `Set.member` doctargets ]
+ ++ concat [ ["users_guide", "Haddock"]
+ | SphinxHTML `Set.member` doctargets ]
+ need $ map ((root -/-) . pathIndex) targets
+
copyFileUntracked "docs/index.html" file
-- | Compile a Sphinx ReStructured Text package to HTML.
=====================================
hadrian/src/Settings/Default.hs
=====================================
@@ -222,7 +222,8 @@ defaultFlavour = Flavour
, dynamicGhcPrograms = defaultDynamicGhcPrograms
, ghciWithDebugger = False
, ghcProfiled = False
- , ghcDebugged = False }
+ , ghcDebugged = False
+ , ghcDocs = cmdDocsArgs }
-- | Default logic for determining whether to build
-- dynamic GHC programs.
=====================================
hadrian/src/UserSettings.hs
=====================================
@@ -2,6 +2,10 @@
-- hadrian/src/UserSettings.hs to hadrian/UserSettings.hs and edit your copy.
-- If you don't copy the file your changes will be tracked by git and you can
-- accidentally commit them.
+--
+-- See doc/user-settings.md for instructions, and src/Flavour.hs for auxiliary
+-- functions for manipulating flavours.
+-- Please update doc/user-settings.md when committing changes to this file.
module UserSettings (
userFlavours, userPackages, userDefaultFlavour,
verboseCommand, buildProgressColour, successColour, finalStage
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/20364073caef323eea76332ee0b2c0f4cd539952...04bfc6e9475cde08d9756f3191cc99999e8a9d18
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/20364073caef323eea76332ee0b2c0f4cd539952...04bfc6e9475cde08d9756f3191cc99999e8a9d18
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20190406/58ac1bb1/attachment-0001.html>
More information about the ghc-commits
mailing list