Changes in meson.build, starting with S3_1 branch as of Oct 24 Using this meson command - meson ../freecivS3_1 -Dack_experimental=true -Dprefix=/Applications/freeciv.app/Contents/ -Dqtver=qt5 Biggest problem was searching for Homebrew stuff. Calls to c_compiler.find_library(... , dirs: cross_lib_path) failed. Meson reference says it searches in /usr/lib, and I think cross_lib_path is empty, Homebrew libraries are in '/usr/local/lib', so I added if host_system == 'darwin' cross_lib_path = ['/usr/local/lib'] else cross_lib_path = [] endif That helped a lot, but broke iconv_lib_dep = c_compiler.find_library('iconv', dirs: cross_lib_path) Homebrew installs a libiconv.dylib but doesn't sym link it into '/usr/local/lib' because they say Apple has its own preinstalled one, which meson was able to find when cross_lib_path was empty. There is no libiconv.* nor iconv.* in /usr/lib, so meson must have somewhere else it searches on Macs. Meson reference says the dirs arg is 'Additional directories to search in.', so the fact that the search succeeds when cross_lib_path is empty, and fails when it is not implies a bug in meson. Whatever, my change to if host_system == 'darwin' iconv_lib_dep = c_compiler.find_library('iconv') else iconv_lib_dep = c_compiler.find_library('iconv', dirs: cross_lib_path) endif fixed that problem. Next problem was icu_dep = dependency('icu-uc') Homebrew has a libicuuc.dylib in its icu4c package. Running Homebrew's command % brew info icu4c gives this - "icu4c is keg-only, which means it was not symlinked into /usr/local, because macOS provides libicucore.dylib (but nothing else)." This is similar to what it says about libiconv. The Homebrew libicuuc.dylib is located in '/usr/local/opt/icu4c/lib', so I tried this - if host_system == 'darwin' icu_dep = c_compiler.find_library('libicuuc', dirs: ['/usr/local/opt/icu4c/lib']) else icu_dep = dependency('icu-uc') endif and that works. I also tried searching for the Mac version by using icu_dep = c_compiler.find_library('libicucore') but that failed. Next problem is sqlite3_dep = c_compiler.find_library('libsqlite3', dirs: cross_lib_path) which is similar situation to previous. Homebrew says - "sqlite is keg-only, which means it was not symlinked into /usr/local, because macOS already provides this software". Homebrew's is in '/usr/local/opt/sqlite3/lib', and this works - if host_system == 'darwin' sqlite3_dep = c_compiler.find_library('libsqlite3', dirs: ['/usr/local/opt/sqlite3/lib']) else sqlite3_dep = c_compiler.find_library('libsqlite3', dirs: cross_lib_path) endif Again, searching for the Mac version with sqlite3_dep = c_compiler.find_library('libsqlite3') fails. With all these changes, the meson step succeeds, but the ninja build fails. ../freecivS3_1/utility/support.c:102:10: fatal error: 'unicode/ustring.h' file not found I found a Homebrew 'unicode/ustring.h' in 'usr/local/opt/icu4c/include'. Also got an error compiling Qt, requires c++11. Fixes are - if host_system == 'darwin' add_global_arguments('-I/usr/local/opt/icu4c/include', language : 'c') add_global_arguments('-std=c++11', language : 'cpp') endif Someone more expert in meson may have a better way to implement these fixes. After all that, the build succeeds. And runs from the build directory, but after doing the ninja install it fails to run when run from the install directory with error - dyld: Library not loaded: @rpath/libfreeciv.dylib The install step puts libfreeciv.dylib in the lib directory and the executable in the bin directory, within the install directory ( -Dprefix=... ). Looking at freeciv-gtk3.22 in a hex editor, I see - "@rpath/libfreeciv.dylib" in there. Tried playing with rpath stuff in meson.build, adding these to executable('freeciv-gtk3.22', ... install: true , build_rpath : '../lib' , install_rpath : '../lib' ) made no difference. I don't understand rpath stuff, the build directory contains both the executable and libfreeciv.dylib, and it works there. If I put the executable and libfreeciv.dylib in the same directory in the install directory it fails. Need to solve this before we can have a working app bundle. Also still need to try Qt6, and other clients. One bug I noticed - when run from build directory, Start New Game, Ruleset: looks blank.