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\""
After running 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
Clearly, configure
is picking up incorrect libraries because I ran configure
after I had relinked the libraries using install_name_tool -change
.
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'sconfigure
, prior to re-linking. - Or, simply run
install_name_tool
against a copy of the libraries , e.g. when Creating a Wine.app bundle, modifyResources\bin
andResources\lib
instead.
Hope this helps someone!