Msys2 As Development Environment

MSYS2 can be used as freeciv build/development environment on Windows.
Currently this document is accurate for autotools based builds only. For freeciv-2.6 and freeciv-3.0 that's the only build system available. Starting from freeciv-3.1, both autotools and meson based builds are possible. From freeciv-3.2, meson based build would be recommended one.
== First time setup ==
- Download latest msys2 environment from https://files.freeciv.org/packages/windows/msys2/
- Extract the environment from the package to a suitable location. 7-zip from https://www.7-zip.org can be used for extracting.
- Start the msys2 shell by an .exe matching your target environment at environment root. For freeciv-2.6 and freeciv-3.0 that's either mingw32.exe (to produce win32 builds) or mingw64.exe (to produce win64 builds). For freeciv-3.1 and later, also ucrt64.exe is available, and is in fact the default (produces better results for Win10 and later, but those builds also require at least Win10).
* If you selected ucrt64.exe, ${ARCH} in following examples is ucrt64
* If you selected mingw32.exe, ${ARCH} is mingw32.
* If you selected mingw64.exe, ${ARCH} is mingw64.
- Setup git directories. In the shell:
> mkdir freeciv
> cd freeciv
# Create root dirs for branch-specific directory hierarchies
> mkdir main
> mkdir S3_2
> mkdir S3_1
> mkdir S3_0
> # Clone freeciv repository under master/src
> cd main
> git clone https://github.com/freeciv/freeciv.git src
# Create worktrees for all the other branches
> cd src
> git worktree add ../S3_2/src S3_2
> git worktree add ../S3_1/src S3_1
> git worktree add ../S3_0/src S3_0
- Create build directories.
# Do following for each of the branches (main, S3_2, S3_1, S3_0)
# This example if for S3_0
> cd ~/freeciv/S3_0/src
> ./autogen.sh --no-configure-run
> cd ..
> mkdir builds
> cd builds
# Create configurations you want. This example creates
# simple gtk3.22-, Qt-, and sdl2-client configurations
> mkdir gtk3.22
> cd gtk3.22
> ../../src/configure --enable-debug --without-readline --enable-client=gtk3.22
> cd ..
> mkdir qt
> cd qt
> ../../src/configure --enable-debug --without-readline --enable-client=qt --with-qt5-includes=/${ARCH}/include --with-qt5-libs=/${ARCH}/lib
> cd ..
> mkdir sdl2
> cd sdl2
> ../../src/configure --enable-debug --without-readline --enable-client=sdl2
== Building and running freeciv ==
- Go to directory of the configuration you want to build. For example S3_0 gtk3.22-client configuration
> cd ~/freeciv/S3_0/builds/gtk3.22
- Run make to build freeciv
> make
- Run produced freeciv.
> ./fcgui
== Updating sources to latest ones ==
- Go to source directory of the branch you want to update.
For example S3_1:
> cd ~/freeciv/S3_1/src
- Pull the changes since your last update
> git pull
You are now ready to rebuild configurations of that branch
from the updated sources.
== Updating msys2 environment ==
If you want to keep your msys2 environment updated against upstream
changes, you can do that with
> pacman -Syu
Notice however that such updates should not be made for environments
used to build official freeciv installers, as the installers should
be created in well-specified environments, not necessarily up-to-date
(what ever that means at a given moment) environments.
== Improving msys2 environment performance ==
Msys2 environment can be very slow to use. Msys2org tweeted: "Adding the MSYS2 directory to the defender exclusion list helps a lot."
category:coding