| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There are now two different package databases per stage. An inplace
package database contains .conf files which point directly into the
build directories. The final package database contains .conf files which
point into the installed locations. The inplace .conf files are created
before any building happens and have fake ABI hash values. The final
.conf files are created after a package finished building and contains
the proper ABI has.
The motivation for this is to make the dependency structure more
fine-grained when building modules. Now a module depends just depends
directly on M.o from package p rather than the .conf file depend on the
.conf file for package p. So when all of a modules direct dependencies
have finished building we can start building it rather than waiting for
the whole package to finish.
The secondary motivation is that the multi-repl doesn't need to build
everything before starting the multi-repl session. We can just configure
the inplace package-db and use that in order to start the repl.
|
| |
|
|
|
|
|
|
|
| |
It turns out that `cp -P` on Darwin does not always copy a symlink as
a symlink. In order to get these semantics one must pass `-RP`. It's not
entirely clear whether this is valid under POSIX, but it is nevertheless
what Apple does.
|
| |
|
|
|
|
|
|
| |
Ultimately we want to drop mk/config.mk so here I extract the bits
needed by the Hadrian bindist installation logic into a Hadrian-specific
file. While doing this I fixed binary distribution installation, #21901.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
On Windows, we create multiple levels of wrappers for GHCi which ultimately
execute ghc --interactive. In order to handle console events properly, each of
these wrappers must call FreeConsole() in order to hand off event processing to
the child process. See #14150.
In addition to this, FreeConsole must only be called from interactive processes (#13411).
This commit makes two changes to fix this situation:
1. The hadrian wrappers generated using `hadrian/bindist/cwrappers/version-wrapper.c` call `FreeConsole`
if the CPP flag INTERACTIVE_PROCESS is set, which is set when we are generating a wrapper for GHCi.
2. The GHCi wrapper in `driver/ghci/` calls the `ghc-$VER.exe` executable which is not wrapped rather
than calling `ghc.exe` is is wrapped on windows (and usually non-interactive, so can't call `FreeConsole`:
Before:
ghci-$VER.exe calls ghci.exe which calls ghc.exe which calls ghc-$VER.exe
After:
ghci-$VER.exe calls ghci.exe which calls ghc-$VER.exe
|
|
|
|
|
|
|
| |
* Rename `docs` to `doc`
* Place pdf documentation in `doc/` instead of `doc/pdfs/`
Fixes #21164.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
These executables (such as hsc2hs) are built using the boot compiler and
crucially, most libraries from the global package database.
We also move other build-time executables to be built in this stage such
as linters which also cleans up which libraries end up in the global
package database. This allows us to remove hacks where linters-common is
removed from the package database when a bindist is created.
This fixes issues caused by infinite recursion due to bytestring adding
a dependency on template-haskell.
Fixes #21634
|
|
|
|
|
|
|
|
| |
Here we introduce a new "virtual" package into the initial package
database, `system-cxx-std-lib`. This gives users a convenient, platform
agnostic way to link against C++ libraries, addressing #20010.
Fixes #20010.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Zubin observed that the bindists contains the utility library
linters-common. There are two options:
1. Make sure only the right files are added into the bindist.. a bit
tricky due to the non-trivial structure of the lib directory.
2. Remove the bad files once they get copied in.. a bit easier
So I went for option 2 but we perhaps should go for option 1 in the
future.
Fixes #21203
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
If you inspect the inside of a wrapper script for hsc2hs you will see
that the cflag and lflag values are concatenated incorrectly.
```
HSC2HS_EXTRA="--cflag=-U__i686--lflag=-fuse-ld=gold"
```
It should instead be
```
HSC2HS_EXTRA="--cflag=-U__i686 --lflag=-fuse-ld=gold"
```
Fixes #21221
|
| |
|
| |
|
|
|
|
|
|
| |
like we do for the non-Hadrian wrapper script.
Otherwise if $bindir/ghc is a different ghc version then versioned ghci will incorrectly run the other ghc version instead.
(Normally this would only happen if there are parallel ghc versions installed in bindir.)
All the other wrapper scripts already have versioned executablename
|
|
|
|
| |
See #20802.
|
|
|
|
|
|
|
|
| |
As noted in #19963, `realpath` is not specified by POSIX and therefore
cannot be assumed to be available. Here we provide a POSIX shell
implementation of `realpath`, due to Julian Ospald and others.
Closes #19963.
|
|
|
|
|
|
| |
`dirname $0` doesn't work when the wrapper is called via a symbolic link.
Fix #20589
|
|
|
|
|
|
|
|
|
| |
Previously the logic which called ghc-pkg failed to account for the fact
that the executable name may be prefixed with a triple. Moreover, the
call must occur before we delete the settings file as ghc-pkg needs the
latter.
Fixes #20267.
|
|
|
|
| |
This was supposed to refer to #20253.
|
|
|
|
|
|
|
|
| |
Technically we should probably generate this in the in-place build tree
as well, but I am not bothering to do so here as ghcii.sh will be
removed in 9.4 when WinIO becomes the default anyways (see #12720).
Fixes #19339.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously Hadrian would simply install the settings file generated in
the build environment during the binary distribution installation. This
is wrong since these environments may differ (e.g. different `cc`
versions).
We noticed on Darwin when installation of a binary distribution produced
on a newer Darwin release resulted in a broken compiler due to the
installed `settings` file incorrectly claiming that `cc` supported
`-no-pie`.
Fixing this sadly requires a bit of code duplication since `settings` is
produced by Hadrian and not `configure`. For now I have simply
duplicated the `settings` generation logic used by the Make build system
into Hadrian's bindist Makefile.
Ultimately the solution will probably involve shipping a freestanding
utility to replace `configure`'s toolchain probing logic and generate a
toolchain description file (similar to `settings`) as described
in #19877.
Fixes #20253.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
```
[matt@nixos:~/ghc-unique-spin]$ ls _build/bindist/ghc-9.3.20210813-x86_64-unknown-linux/bin/
ghc haddock runghc
ghc-9.3.20210813 haddock-ghc-9.3.20210813 runghc-9.3.20210813
ghc-iserv hp2ps runhaskell
ghc-iserv-dyn hp2ps-ghc-9.3.20210813 runhaskell-9.3.20210813
ghc-iserv-dyn-ghc-9.3.20210813 hpc unlit
ghc-iserv-ghc-9.3.20210813 hpc-ghc-9.3.20210813 unlit-ghc-9.3.20210813
ghc-pkg hsc2hs
ghc-pkg-9.3.20210813 hsc2hs-ghc-9.3.20210813
[matt@nixos:~/ghc-unique-spin]$ ls _build/bindist/ghc-9.3.20210813-x86_64-unknown-linux/wrappers/
ghc ghc-pkg-9.3.20210813 hpc runghc-9.3.20210813
ghc-9.3.20210813 haddock hpc-ghc-9.3.20210813 runhaskell
ghci haddock-ghc-9.3.20210813 hsc2hs runhaskell-9.3.20210813
ghci-9.3.20210813 hp2ps hsc2hs-ghc-9.3.20210813
ghc-pkg hp2ps-ghc-9.3.20210813 runghc
```
See the discussion on #19571 where we decided that it was most sensible
to use the same version number as a suffix for all executables. For
those whose version number is different to normal (for example, haddock
as it's own versioning scheme) the additional "ghc" suffix is used.
Cabal already knows to look for this suffix so should work nicely with
existing tooling.
|
|
|
|
|
| |
This reduces the resulting binary size on windows where the executables
were statically linked.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fixes #19571
bin folder now containers/
```
ghc ghc-iserv-dyn-9.3.20210813 hp2ps hsc2hs-0.68.8 unlit
ghc-9.3.20210813 ghc-pkg hp2ps-0.1 runghc unlit-0.1
ghc-iserv ghc-pkg-9.3.20210813 hpc runghc-9.3.20210813
ghc-iserv-9.3.20210813 haddock hpc-0.68 runhaskell
ghc-iserv-dyn haddock-2.24.0 hsc2hs runhaskell-9.3.20210813
```
which installed via wrappers looks like
```
lrwxrwxrwx 1 matt users 16 Aug 13 17:32 ghc -> ghc-9.3.20210813
-rwxr-xr-x 1 matt users 446 Aug 13 17:32 ghc-9.3.20210813
lrwxrwxrwx 1 matt users 17 Aug 13 17:32 ghci -> ghci-9.3.20210813
-rwxr-xr-x 1 matt users 480 Aug 13 17:32 ghci-9.3.20210813
lrwxrwxrwx 1 matt users 20 Aug 13 17:32 ghc-pkg -> ghc-pkg-9.3.20210813
-rwxr-xr-x 1 matt users 506 Aug 13 17:32 ghc-pkg-9.3.20210813
lrwxrwxrwx 1 matt users 14 Aug 13 17:32 haddock -> haddock-2.24.0
-rwxr-xr-x 1 matt users 454 Aug 13 17:32 haddock-2.24.0
lrwxrwxrwx 1 matt users 9 Aug 13 17:32 hp2ps -> hp2ps-0.1
-rwxr-xr-x 1 matt users 420 Aug 13 17:32 hp2ps-0.1
lrwxrwxrwx 1 matt users 8 Aug 13 17:32 hpc -> hpc-0.68
-rwxr-xr-x 1 matt users 418 Aug 13 17:32 hpc-0.68
lrwxrwxrwx 1 matt users 13 Aug 13 17:32 hsc2hs -> hsc2hs-0.68.8
-rwxr-xr-x 1 matt users 1.2K Aug 13 17:32 hsc2hs-0.68.8
lrwxrwxrwx 1 matt users 19 Aug 13 17:32 runghc -> runghc-9.3.20210813
-rwxr-xr-x 1 matt users 457 Aug 13 17:32 runghc-9.3.20210813
lrwxrwxrwx 1 matt users 23 Aug 13 17:32 runhaskell -> runhaskell-9.3.20210813
-rwxr-xr-x 1 matt users 465 Aug 13 17:32 runhaskell-9.3.20210813
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since !6133 we are more consistent about producing versioned
executables but we still didn't produce versioned wrappers. This patch
adds the corresponding versioned wrappers to match the versioned
executables in the relocatable bindist.
I also fixed the ghci wrapper so that it wasn't overwritten during
installation.
The final bindir looks like:
```
lrwxrwxrwx 1 matt users 16 Aug 12 11:56 ghc -> ghc-9.3.20210809
-rwxr-xr-x 1 matt users 674 Aug 12 11:56 ghc-9.3.20210809
lrwxrwxrwx 1 matt users 17 Aug 12 11:56 ghci -> ghci-9.3.20210809
-rwxr-xr-x 1 matt users 708 Aug 12 11:56 ghci-9.3.20210809
lrwxrwxrwx 1 matt users 20 Aug 12 11:56 ghc-pkg -> ghc-pkg-9.3.20210809
-rwxr-xr-x 1 matt users 734 Aug 12 11:56 ghc-pkg-9.3.20210809
lrwxrwxrwx 1 matt users 14 Aug 12 11:56 haddock -> haddock-2.24.0
-rwxr-xr-x 1 matt users 682 Aug 12 11:56 haddock-2.24.0
lrwxrwxrwx 1 matt users 9 Aug 12 11:56 hp2ps -> hp2ps-0.1
-rwxr-xr-x 1 matt users 648 Aug 12 11:56 hp2ps-0.1
lrwxrwxrwx 1 matt users 8 Aug 12 11:56 hpc -> hpc-0.68
-rwxr-xr-x 1 matt users 646 Aug 12 11:56 hpc-0.68
lrwxrwxrwx 1 matt users 13 Aug 12 11:56 hsc2hs -> hsc2hs-0.68.8
-rwxr-xr-x 1 matt users 1.4K Aug 12 11:56 hsc2hs-0.68.8
lrwxrwxrwx 1 matt users 19 Aug 12 11:56 runghc -> runghc-9.3.20210809
-rwxr-xr-x 1 matt users 685 Aug 12 11:56 runghc-9.3.20210809
```
Fixes #20225
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The symlink structure now looks like:
```
lrwxrwxrwx 1 matt users 16 Aug 3 16:27 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/ghc -> ghc-9.3.20210721
-rwxr-xr-x 1 matt users 1750336 Aug 3 15:00 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/ghc-9.3.20210721
lrwxrwxrwx 1 matt users 22 Aug 3 16:27 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/ghc-iserv -> ghc-iserv-9.3.20210721
-rwxr-xr-x 1 matt users 31703176 Aug 3 15:00 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/ghc-iserv-9.3.20210721
lrwxrwxrwx 1 matt users 26 Aug 3 16:27 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/ghc-iserv-dyn -> ghc-iserv-dyn-9.3.20210721
-rwxr-xr-x 1 matt users 40808 Aug 3 15:00 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/ghc-iserv-dyn-9.3.20210721
lrwxrwxrwx 1 matt users 20 Aug 3 16:27 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/ghc-pkg -> ghc-pkg-9.3.20210721
-rwxr-xr-x 1 matt users 634872 Aug 3 15:00 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/ghc-pkg-9.3.20210721
lrwxrwxrwx 1 matt users 14 Aug 3 16:27 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/haddock -> haddock-2.24.0
-rwxr-xr-x 1 matt users 4336664 Aug 3 15:00 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/haddock-2.24.0
lrwxrwxrwx 1 matt users 9 Aug 3 16:27 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/hp2ps -> hp2ps-0.1
-rwxr-xr-x 1 matt users 49312 Aug 3 15:00 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/hp2ps-0.1
lrwxrwxrwx 1 matt users 8 Aug 3 16:27 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/hpc -> hpc-0.68
-rwxr-xr-x 1 matt users 687896 Aug 3 15:00 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/hpc-0.68
lrwxrwxrwx 1 matt users 13 Aug 3 16:27 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/hsc2hs -> hsc2hs-0.68.8
-rwxr-xr-x 1 matt users 729904 Aug 3 15:00 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/hsc2hs-0.68.8
lrwxrwxrwx 1 matt users 19 Aug 3 16:27 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/runghc -> runghc-9.3.20210721
-rwxr-xr-x 1 matt users 57672 Aug 3 15:00 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/runghc-9.3.20210721
lrwxrwxrwx 1 matt users 9 Aug 3 16:27 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/unlit -> unlit-0.1
-rwxr-xr-x 1 matt users 14896 Aug 3 15:00 _build/bindist/ghc-9.3.20210721-x86_64-unknown-linux/bin/unlit-0.1
```
Fixes #20198
|
|
|
|
|
|
|
|
|
|
|
| |
The package.cache needs to have a later mod-time than all of the .conf
files. This invariant can be destroyed by `cp -r` and so we run `ghc-pkg
recache` to ensure the package database which is distributed is
consistent.
If you are installing a relocatable bindist, for example, on windows,
you should preserve mtimes by using cp -a or run ghc-pkg recache after
installing.
|
|
|
|
| |
Fixes #19868
|
| |
|
|
|
|
|
|
|
|
|
| |
Before we would just copy the unversioned executable into the bindist.
Now the actual executable is copied into the bindist and a version
suffix is added. Then a wrapper or symlink is added which points to the
versioned executable.
Fixes #20074
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
create
Exes
----
Before: The whole bin/ folder was copied which could contain random old/stale/testsuite executables
After: Be precise
Wrappers
--------
Before: Wrappers were created for everything in the bin folder,
including internal executables such as "unlit"
After: Only create wrappers for the specific things which we want to
include in the user's path.
This makes the hadrian bindists match up more closely with the make
bindists.
|
|
|
|
|
|
|
|
| |
- Move 'count-deps' into 'ghc/utils' so that it can be called standalone.
- Move 'testsuite/tests/parser/should_run/' tests 'CountParserDeps' and
'CountAstDeps' to 'testsuite/tests/count-deps' and reimplement in terms
of calling the utility
- Document how to use 'count-deps' in 'ghc/utils/count-deps/README'
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
Metric Increase:
T10370
parsing001
Updates haddock submodule
|
|
|
|
|
|
|
| |
Previously we would support only one LLVM major version. Here we
generalize this to accept a range, taking this range to be LLVM 10 to 11,
as 11 is necessary for Apple M1 support. We also accept 12, as that is
what apple ships with BigSur on the M1.
|
| |
|
| |
|
|
|
|
|
|
|
| |
Its logic is very simple. It `need`s the `binary-dist-dir` target
and runs suitable `configure` and `make install` commands for the
user. A new `--prefix` command line argument is introduced to
specify where GHC should be installed.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
Fixes #17351.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Currently, if you change these ^ flavour parameters, rebuilding is not
triggered, since `programContext` doesn't set up a dependency on
those values.
Exposing these values via an oracle does set the dependency and
properly triggers a rebuild of binaries.
Several attempts to factor out these actions ended up in cyclic
dependency here or there. I'm not absolutely happy with this variant
either, but at least it works.
====
Issue repro:
In UserSettings.hs:
```
dbgDynamic = defaultFlavour { name = "dbg-dynamic"
, dynamicGhcPrograms = pure True,
... }
dbgStatic = defaultFlavour { name = "dbg-static"
, dynamicGhcPrograms = pure False
... }
```
Then in console:
```
$ hadrian/build.sh -j --flavour=dbg-dynamic
... does the build
$ hadrian/build.sh -j --flavour=dbg-static
... does nothing, considers binaries up to date
```
|
|
|
|
|
|
|
|
|
|
|
| |
This resolves #16809 (https://gitlab.haskell.org/ghc/ghc/issues/16809).
This patch removes the unnecessary dependency on configure-generated
flags `windowsHost`, `osxHost` and `iosHost`, using the information
provided by the module `System.Info` instead.
We also take care to use the `CrossCompiling` flag generated by the
configure script only after the latter had a chance to run.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When the '--hadrian' flag is passed to the validate script, we use hadrian
to build GHC, package it up in a binary distribution and later on run GHC's
testsuite against the said bindist, which gets installed locally in the process.
Along the way, this commit fixes a typo, an omission (build iserv binaries
before producing the bindist archive) and moves the Makefile that enables
'make install' on those bindists from being a list of strings in the code to
an actual file (it was becoming increasingly annoying to work with).
Finally, the Settings.Builders.Ghc part of this patch is necessary for being
able to use the installed binary distribution, in 'validate'.
|
|
|
|
| |
This allows it to eventually become stage-specific
|
|
|
|
|
|
|
| |
This patch adds an Hadrian target "binary-dist-dir". Compared to
"binary-dist", it only builds a binary distribution directory without
creating the Tar archive. It makes the use/test of the bindist
installation script easier.
|