Wine 1.9.22 development (dated Oct 28, 2016) has been released! See the release notes for changes. Alas, I encountered errors trying to compile it "on top" of the Wine 1.9.21 installation, following the steps from my post Compiling Wine from scratch. I spent a whole day searching for the problem, and resolved it as below.
The first time I ran
make, it stopped midway with a fatal error -
sfnt2fon couldn't run:
dyld: Library not loaded: libfreetype.6.dylib Referenced from: /Users/[user]/Downloads/wine/wine-1.9.22/fonts/../tools/sfnt2fon/sfnt2fon Reason: image not found
I tried to fix this manually, in the most quick-and-dirty way possible, by using
install_name_tool and by simply copying the files to where they are expected.
But, after compiling successfully, running any program in Wine would generate an empty window and errors like "Wine cannot find the FreeType font library. To enable Wine to use TrueType fonts please install a version of FreeType greater than or equal to 2.0.5." in the console.
After lots of checking, I traced the problem to a few lines in error in
config.status. This file is generated by
configure as part of the intermediate build process, and it is this file, in turn, that generates the
Makefile. I read about this after a Google search turned up a short summary from The GNU Project Build Tools, Appendix C5.
There are a few lines in
config.status that are supposed to point to the library file names, but instead contain the output of
otool including the initial tab character and ending with a text description of the version (in brackets)!
D["SONAME_LIBFREETYPE"]=" \" libfreetype.6.dylib (compatibility version 19.0.0, current version 19.6.0)\"" D["SONAME_LIBJPEG"]=" \" libjpeg.9.dylib (compatibility version 12.0.0, current version 12.0.0)\"" D["SONAME_LIBPNG"]=" \" libpng16.16.dylib (compatibility version 42.0.0, current version 42.0.0)\"" D["SONAME_LIBTIFF"]=" \" libtiff.3.dylib (compatibility version 12.0.0, current version 12.2.0)\"" D["SONAME_LIBODBC"]=" \" libodbc.2.dylib (compatibility version 3.0.0, current version 3.0.0)\"" D["SONAME_LIBNETAPI"]=" \" libnetapi.dylib.0 (compatibility version 0.0.0, current version 0.0.0)\""
The lines above are from various locations in
config.status but presented in a block for clarity.
I just manually corrected these entries, leaving just the file name without the leading tab and training version string:
D["SONAME_LIBFREETYPE"]=" \"libfreetype.6.dylib\"" D["SONAME_LIBJPEG"]=" \"libjpeg.9.dylib\"" D["SONAME_LIBPNG"]=" \"libpng16.16.dylib\"" D["SONAME_LIBTIFF"]=" \"libtiff.3.dylib\"" D["SONAME_LIBODBC"]=" \"libodbc.2.dylib\"" D["SONAME_LIBNETAPI"]=" \"libnetapi.dylib.0\""
config.status, Wine compiles just fine (
make -j5 install), and applications work as expected, without any errors.
Do not compile after changing dependent library names
configure is picking up incorrect libraries because I ran
configure after I had relinked the libraries using
Next time, I'll either:
- Re-install the libraries from the original compiled sources (remove the install directory and
make install), and then run Wine's
configure, prior to re-linking.
- Or, simply run
install_name_toolagainst a copy of the libraries , e.g. when Creating a Wine.app bundle, modify
Hope this helps someone!