5.3 KiB
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
),
the hmatrix
library, as well as flint
and msolve
.
With an MSYS2
installation, the following environment variables will need to be set (with MSYS2
installed at C:\msys64
):
PATH
: C:\msys64\mingw64\bin;C:\msys64\usr\bin
PKG_CONFIG_PATH
: C:\msys64\mingw64\lib\pkgconfig
XDG_DATA_DIRS
: C:\msys64\mingw64\share;C:\msys64\usr\share
Then we install some necessary packages using the following command:
pacman -S -q --noconfirm mingw64/mingw-w64-x86_64-pkg-config mingw64/mingw-w64-x86_64-gobject-introspection mingw64/mingw-w64-x86_64-openblas
Next, flint
, which msolve
depends on.
Build flint
by downloading it and running the configure script. On Windows (MINGW64):
./configure ABI=64 --build=${MINGW_CHOST} --prefix=${MINGW_PREFIX} --enable-static --disable-shared --with-gmp=${MINGW_PREFIX} --with-mpfr=${MINGW_PREFIX}
make && make install
flint
needs gmp
, mpfr
, but these should already be present.
For msolve
, the default installation directions (./autogen.sh
, ./configure
, make && make install
) seem to work (without having to set any additional options), as of msolve
version 0.1.3
.
Possible errors
pkg-config could not be found
The error
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
pacman -S -q --noconfirm mingw64/mingw-w64-x86_64-pkg-config
to install it.
gobject could not be found
An error such as
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
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
.
...is a relative path which makes no sense
Any error of the form:
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.
At the time of writing, the only dependency which presents this problem is 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. The package fontconfig
also presented this issue; this was resolved in this patch.
Missing C library openblas
The error message
Missing dependencies on foreign libraries:
* Missing (or bad) C library: openblas
indicates that cabal
could not find a C library that hmatrix
depends on.
Make sure that openblas
is installed:
pacman -S -q --noconfirm mingw64/mingw-w64-x86_64-openblas
then ensure that cabal
can find it, for instance:
package hmatrix
extra-lib-dirs: "C:/msys64/mingw64/bin"
extra-include-dirs: "C:/msys64/mingw64/include"
enables cabal
to find C:/msys64/mingw64/bin/libopenblas.dll
.
The code execution cannot proceed because libgfortran_64-3.dll was not found
An error such as
The code execution cannot proceed because libgfortran_64-3.dll was not found
or
The code execution cannot proceed because libgcc_s_seh_64-1.dll was not found
indicates that a dependency of BLAS
could not be loaded. These should have been installed as dependencies of openblas
(see previous error), but otherwise you can try:
pacman -S -q --noconfirm mingw64/mingw-w64-x86_64-gcc-fortran mingw64/mingw-w64-x86_64-gcc
addDLL: library not loaded
The error message
addDLL: libopenblas or dependencies not loaded. (Win32 error 126)
means that GHC
was not able to find the BLAS
library, or a dependency thereof.
Follow the previous two steps to ensure both the library and its dependencies can be found.
Unknown symbol dgesvd_
An error of the form
ghc.exe: | MetaBrush\dist-newstyle\build\x86_64-windows\ghc-8.8.4\hmatrix-0.20.0.0\build\libHShmatrix-0.20.0.0-inplace.a: unknown symbol `dgesvd_'
indicates that GHC
was not able to load symbols for the hmatrix
dependency. This should be solved in the same way as the previous error.