mirror of
https://gitlab.com/sheaf/metabrush.git
synced 2024-11-05 23:03:38 +00:00
163 lines
5.9 KiB
Markdown
163 lines
5.9 KiB
Markdown
|
|
# Installation notes
|
|
|
|
On Windows, we need to install an up-to-date MinGW/MSYS2 toolchain,
|
|
together with the packages required by the `haskell-gi` libraries (for `GTK`).
|
|
|
|
With an `MSYS2` installation at `C:\Haskell\ghcup\msys64`, the following environment variables will need to be set :
|
|
|
|
`PATH`: `C:\Haskell\ghcup\msys64\mingw64\bin;C:\Haskell\ghcup\msys64\usr\bin`
|
|
`PKG_CONFIG_PATH`: `C:\Haskell\ghcup\msys64\mingw64\lib\pkgconfig`
|
|
`XDG_DATA_DIRS`: `C:\Haskell\ghcup\msys64\mingw64\share;C:\Haskell\ghcup\msys64\usr\share`
|
|
|
|
Then we need `pkg-config` and the suite of `GTK` libraries.
|
|
After updating the package database if necessary with `pacman -Sy msys2-keyring`, we can do:
|
|
|
|
```bash
|
|
pacman -S -q --noconfirm mingw64/mingw-w64-x86_64-pkg-config mingw64/mingw-w64-x86_64-gobject-introspection mingw64/mingw-w64-x86_64-atk mingw64/mingw-w64-x86_64-gtksourceview5
|
|
```
|
|
|
|
NB: at the time of writing, the relevant gtksource version is 5; this might need to be
|
|
updated if you run into issues, as the API of the auto-generated Haskell gi libraries might be
|
|
different dependent on the version numbers of the gi foreign libraries.
|
|
|
|
Note that GHC 9.2 and below are affected by some bugs on Windows, e.g. [#21109](https://gitlab.haskell.org/ghc/ghc/-/issues/21109)
|
|
and [#21111](https://gitlab.haskell.org/ghc/ghc/-/issues/21111). So you should use GHC 9.4 (or above),
|
|
and make sure that you are using `cabal-install > 3.8` (due to [#21990](https://gitlab.haskell.org/ghc/ghc/-/issues/21990)).
|
|
|
|
## Possible errors
|
|
|
|
### pkg-config could not be found
|
|
|
|
The error
|
|
|
|
```bash
|
|
The program 'pkg-config' is required but it could not be found.
|
|
```
|
|
|
|
means that `pkg-config` couldn't be found on the path. Run the command
|
|
|
|
```bash
|
|
pacman -S -q --noconfirm mingw64/mingw-w64-x86_64-pkg-config
|
|
```
|
|
|
|
to install it.
|
|
|
|
|
|
### gobject could not be found
|
|
|
|
An error such as
|
|
|
|
```bash
|
|
The pkg-config package 'gobject' is required but it could not be found.
|
|
```
|
|
|
|
indicates missing dependencies for the `haskell-gi` suite of packages.
|
|
Ensure these are installed by running the aforementioned `pacman` command.
|
|
Also check that the packages are registered with `pkg-config` using the command
|
|
|
|
```bash
|
|
pkg-config --list-all
|
|
```
|
|
|
|
If packages such as `cairo`, `gtk` etc do not appear, this means `PKG_CONFIG_PATH` is not set correctly.
|
|
Search for `*.pc` files in your `MSYS2` installation, and ensure their paths are included in `PKG_CONFIG_PATH`.
|
|
|
|
You might also have multiple different `pkg-config` executables in your `PATH`;
|
|
if so, ensure that `cabal` is using the correct one, e.g. by modifying the `extra-prog-path`
|
|
field in your `cabal.config` file; see e.g. [ghcup issue #371](https://gitlab.haskell.org/haskell/ghcup-hs/-/issues/371).
|
|
|
|
### Missing (or bad) C libraries
|
|
|
|
An error of the form:
|
|
|
|
```bash
|
|
Missing dependencies on foreign libraries:
|
|
* Missing (or bad) C libraries: gobject-2.0
|
|
```
|
|
|
|
indicates that `cabal` is not able to find an external C dependency. If the
|
|
C dependency is indeed installed, then perhaps `cabal` is calling the wrong
|
|
`pkg-config` executable. This could be due to an incorrect `extra-prog-path`
|
|
in your `cabal.config` file; see e.g. [ghcup issue #371](https://gitlab.haskell.org/haskell/ghcup-hs/-/issues/371).
|
|
|
|
To fix this, you need to ensure the `pkg-config` executable is correct, e.g.
|
|
by re-ordering the paths in the `extra-prog-path` stanza so that the path
|
|
containing the correct `pkg-config` appears first.
|
|
|
|
|
|
### Failed to load shared library
|
|
|
|
An error of the form
|
|
|
|
```bash
|
|
Failed to load shared library 'libcairo-gobject-2.dll' referenced by the typelib: 'libcairo-gobject-2.dll': The specified procedure could not be found.
|
|
gi-cairo> Could not resolve symbol "cairo_gobject_context_get_type" in namespace "cairo"
|
|
```
|
|
|
|
indicates an issue finding exported functions in the `DLL`s that we depend upon.
|
|
I'm not yet sure how to fix this issue; see [haskell-gi issue #391](https://github.com/haskell-gi/haskell-gi/issues/391).
|
|
|
|
### Error compiling C standard libraries
|
|
|
|
An error of the form
|
|
|
|
```bash
|
|
C:\Haskell\ghcup\ghc\9.4.3\lib\..\mingw\include\c++\v1\cmath:642:26: error:
|
|
error: no template named 'numeric_limits'
|
|
```
|
|
|
|
signals that GHC is getting confused about which Unix toolchain to use. This
|
|
might be due to having
|
|
|
|
```cabal
|
|
extra-include-dirs: C:\Haskell\ghcup\msys64\mingw64\include
|
|
```
|
|
|
|
in your global `cabal.config` file, or in your `cabal.project.local` file.
|
|
You should **not** specify `extra-include-dirs` on a per-package
|
|
basis in your `cabal.project.local` file either: these should be handled by `pkg-config`.
|
|
|
|
Remove any `extra-include-dirs` and `extra-lib-dirs`, both in your global `cabal.config`
|
|
and in local `cabal.project`/`cabal.project.local` files to proceed.
|
|
|
|
### ...is a relative path which makes no sense
|
|
|
|
Any error of the form:
|
|
```bash
|
|
include-dirs: /mingw64/bin is a relative path which makes no sense
|
|
```
|
|
|
|
indicates that one of the packages is incorrectly configured with a Unix-style path.
|
|
|
|
The version of `pkg-config` packaged with MSYS2 should automatically convert into the correct full filepaths.
|
|
So you might need to uninstall the currently installed `pkg-config`, and install the `MSYS2` one:
|
|
|
|
```
|
|
pacman -S -q --noconfirm mingw64/mingw-w64-x86_64-pkg-config
|
|
```
|
|
|
|
This should fix the issue. Another solution is to pass the `--force` flag to `ghc-pkg` for the problematic packages.
|
|
One dependency which used to present this problem was `graphite2`, which is a dependency of `cairo`.
|
|
This causes a problem with the `gi-cairo-render` library, so in the `cabal.project` file we can specify:
|
|
|
|
```
|
|
package gi-cairo-render
|
|
ghc-pkg-options: "--force"
|
|
```
|
|
|
|
We can otherwise manually fix this issue by changing the `pkg-config` package file `graphite2.pc` as follows:
|
|
|
|
```
|
|
>>> before:
|
|
Libs: -L/mingw64/lib -lgraphite2
|
|
Cflags: -I/mingw64/include
|
|
|
|
>>> after:
|
|
Libs: -L${libdir} -lgraphite2
|
|
Cflags: -I${includedir}
|
|
```
|
|
|
|
See [this patch](https://github.com/msys2/MINGW-packages/pull/6966).
|
|
The package `fontconfig` also presented this issue; this was resolved in [this patch](https://github.com/msys2/MINGW-packages/issues/872).
|