diff options
author | Alp Mestanogullari <alpmestan@gmail.com> | 2020-01-17 11:15:26 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2020-02-09 02:54:28 -0500 |
commit | 3ae83da13f03d22a4d810b5d9c0f37f818cb6a00 (patch) | |
tree | 5b96251bc82f06fb42dfe5208800368db5e6e845 | |
parent | a906595f060b9c038332f16adaf664eeb1d50f2e (diff) | |
download | haskell-3ae83da13f03d22a4d810b5d9c0f37f818cb6a00.tar.gz |
hadrian: Windows fixes (bindists, CI)
This commit implements a few Windows-specific fixes which get us from a CI
job that can't even get as far as starting the testsuite driver, to a state
where we can run the entire testssuite (but have test failures to fix).
- Don't forget about a potential extension for the haddock program, when
preparing the bindist.
- Build the timeout program, used by the testsuite driver on Windows in place
of the Python script used elsewhere, using the boot compiler. We could
alternatively build it with the compiler that we're going to test but this
would be a lot more tedious to write.
- Implement a wrapper-script less installation procedure for Windows, in
`hadrian/bindist/Makefile.
- Make dependencies a bit more accurate in the aforementioned Makefile.
- Update Windows/Hadrian CI job accordingly.
This patch fixes #17486.
-rw-r--r-- | .gitlab-ci.yml | 7 | ||||
-rw-r--r-- | hadrian/bindist/Makefile | 39 | ||||
-rw-r--r-- | hadrian/src/Rules/BinaryDist.hs | 5 | ||||
-rw-r--r-- | hadrian/src/Rules/Test.hs | 10 | ||||
-rw-r--r-- | hadrian/src/Settings/Default.hs | 1 |
5 files changed, 37 insertions, 25 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a6878d6ad2..63c6983a38 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -816,12 +816,10 @@ validate-x86_64-linux-fedora27: - | 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 "PATH=`pwd`/toolchain/bin:$PATH hadrian/build.cabal.sh --flavour=$FLAVOUR -j`mk/detect-cpu-count.sh` --flavour=Quick --docs=no-sphinx binary-dist" + - bash -c "PATH=`pwd`/toolchain/bin:$PATH hadrian/build.cabal.sh --flavour=$FLAVOUR -j`mk/detect-cpu-count.sh` --docs=no-sphinx binary-dist" - mv _build/bindist/ghc*.tar.xz ghc.tar.xz - bash -c "export TOP=$(pwd); cd _build/bindist/ghc-*/ && PATH=$TOP/toolchain/bin:$PATH ./configure --prefix=$TOP/_build/install && make install && cd ../../../" - - bash -c "export TOP=$(pwd); PATH=$TOP/toolchain/bin:$PATH hadrian/build.cabal.sh --flavour=$FLAVOUR -j`mk/detect-cpu-count.sh` --flavour=quick test --summary-junit=./junit.xml --skip-perf --test-compiler=$TOP/_build/install/bin/ghc" - # skipping perf tests for now since we build a quick-flavoured GHC, - # which might result in some broken perf tests? + - bash -c "export TOP=$(pwd); PATH=$TOP/toolchain/bin:$PATH hadrian/build.cabal.sh --flavour=$FLAVOUR -j`mk/detect-cpu-count.sh` test --summary-junit=./junit.xml --test-compiler=$TOP/_build/install/bin/ghc" tags: - x86_64-windows artifacts: @@ -835,6 +833,7 @@ validate-x86_64-linux-fedora27: validate-x86_64-windows-hadrian: extends: .build-windows-hadrian + stage: full-build variables: MSYSTEM: MINGW64 TEST_ENV: "x86_64-windows-hadrian" diff --git a/hadrian/bindist/Makefile b/hadrian/bindist/Makefile index 79f9a9f2f2..d043cf2425 100644 --- a/hadrian/bindist/Makefile +++ b/hadrian/bindist/Makefile @@ -71,23 +71,38 @@ endef .PHONY: install -install: install_lib install_bin install_includes -install: install_docs install_wrappers install_ghci -install: install_mingw update_package_db + +ifeq "$(TargetOS_CPP)" "mingw32" +install_bin: install_mingw install_bin_direct +else +install_bin: install_bin_libdir install_wrappers +endif + +install: install_bin install_lib install_includes +install: install_docs install_ghci update_package_db ActualBinsDir=${ghclibdir}/bin +ifeq "$(TargetOS_CPP)" "mingw32" +ActualLibsDir=${ghclibdir} +else ActualLibsDir=${ghclibdir}/lib +endif WrapperBinsDir=${bindir} # We need to install binaries relative to libraries. BINARIES = $(wildcard ./bin/*) -install_bin: +install_bin_libdir: @echo "Copying binaries to $(ActualBinsDir)" $(INSTALL_DIR) "$(ActualBinsDir)" for i in $(BINARIES); do \ cp -R $$i "$(ActualBinsDir)"; \ done +install_bin_direct: + @echo "Copying binaries to $(WrapperBinsDir)" + $(INSTALL_DIR) "$(WrapperBinsDir)" + cp ./bin/* "$(WrapperBinsDir)/" + install_ghci: @echo "Copying and installing ghci" $(CREATE_SCRIPT) '$(WrapperBinsDir)/ghci' @@ -105,7 +120,7 @@ install_lib: INCLUDES = $(wildcard ./include/*) install_includes: - @echo "Copying libraries to $(includedir)" + @echo "Copying include files to $(includedir)" $(INSTALL_DIR) "$(includedir)" for i in $(INCLUDES); do \ cp -R $$i "$(includedir)/"; \ @@ -113,34 +128,30 @@ install_includes: DOCS = $(wildcard ./docs/*) install_docs: - @echo "Copying libraries to $(docdir)" + @echo "Copying docs to $(docdir)" $(INSTALL_DIR) "$(docdir)" for i in $(DOCS); do \ cp -R $$i "$(docdir)/"; \ done BINARY_NAMES=$(shell ls ./wrappers/) -install_wrappers: - @echo "Installing Wrapper scripts" +install_wrappers: install_bin_libdir + @echo "Installing wrapper scripts" $(INSTALL_DIR) "$(WrapperBinsDir)" $(foreach p, $(BINARY_NAMES),\ $(call installscript,$p,$(WrapperBinsDir)/$p,$(WrapperBinsDir),$(ActualBinsDir),$(ActualBinsDir)/$p,$(ActualLibsDir),$(docdir),$(includedir))) PKG_CONFS = $(shell find "$(ActualLibsDir)/package.conf.d" -name '*.conf' | sed 's: :xxx:g') -update_package_db: +update_package_db: install_bin install_lib @echo "$(PKG_CONFS)" @echo "Updating the package DB" $(foreach p, $(PKG_CONFS),\ $(call patchpackageconf,$(shell echo $(notdir $p) | sed 's/-\([0-9]*[0-9]\.\)*conf//g'),$(shell echo "$p" | sed 's:xxx: :g'),$(docdir),$(shell realpath --relative-to="$(libdir)" "$(docdir)"))) '$(WrapperBinsDir)/ghc-pkg' recache -# The 'foreach' that copies the mingw directory will only trigger a copy -# when the wildcard matches, therefore only on Windows. -MINGW = $(wildcard ./mingw) install_mingw: @echo "Installing MingGW" $(INSTALL_DIR) "$(prefix)/mingw" - $(foreach d, $(MINGW),\ - cp -R ./mingw "$(prefix)") + cp -R ./mingw "$(prefix)" # END INSTALL # ---------------------------------------------------------------------- diff --git a/hadrian/src/Rules/BinaryDist.hs b/hadrian/src/Rules/BinaryDist.hs index 42efb95420..8ec3ea137d 100644 --- a/hadrian/src/Rules/BinaryDist.hs +++ b/hadrian/src/Rules/BinaryDist.hs @@ -136,10 +136,11 @@ bindistRules = do -- shipping it removeFile (bindistFilesDir -/- mingwStamp) - -- We copy the binary (<build root>/stage1/bin/haddock) to + -- We copy the binary (<build root>/stage1/bin/haddock[.exe]) to -- the bindist's bindir (<build root>/bindist/ghc-.../bin/). haddockPath <- programPath (vanillaContext Stage1 haddock) - copyFile haddockPath (bindistFilesDir -/- "bin" -/- "haddock") + copyFile haddockPath + (bindistFilesDir -/- "bin" -/- takeFileName haddockPath) -- We then 'need' all the files necessary to configure and install -- (as in, './configure [...] && make install') this build on some diff --git a/hadrian/src/Rules/Test.hs b/hadrian/src/Rules/Test.hs index 71e2f48271..3c821adf53 100644 --- a/hadrian/src/Rules/Test.hs +++ b/hadrian/src/Rules/Test.hs @@ -140,7 +140,7 @@ timeoutProgBuilder = do root <- buildRoot if windowsHost then do - prog <- programPath =<< programContext Stage1 timeout + prog <- programPath =<< programContext Stage0 timeout copyFile prog (root -/- timeoutPath) else do python <- builderPath Python @@ -154,12 +154,12 @@ timeoutProgBuilder = do needTestBuilders :: Action () needTestBuilders = do testGhc <- testCompiler <$> userSetting defaultTestArgs - when (testGhc `elem` ["stage1", "stage2", "stage3"]) needTestsuitePackages + when (testGhc `elem` ["stage1", "stage2", "stage3"]) + (needTestsuitePackages testGhc) -- | Build extra programs and libraries required by testsuite -needTestsuitePackages :: Action () -needTestsuitePackages = do - testGhc <- testCompiler <$> userSetting defaultTestArgs +needTestsuitePackages :: String -> Action () +needTestsuitePackages testGhc = do when (testGhc `elem` ["stage1", "stage2", "stage3"]) $ do let stg = stageOf testGhc allpkgs <- packages <$> flavour diff --git a/hadrian/src/Settings/Default.hs b/hadrian/src/Settings/Default.hs index 5bf9ea7e7c..aeac1434db 100644 --- a/hadrian/src/Settings/Default.hs +++ b/hadrian/src/Settings/Default.hs @@ -76,6 +76,7 @@ stage0Packages = do , transformers , unlit ] ++ [ terminfo | not windowsHost, not cross ] + ++ [ timeout | windowsHost ] ++ [ touchy | windowsHost ] -- | Packages built in 'Stage1' by default. You can change this in "UserSettings". |