GiellaLT provides an infrastructure for rule-based language technology aimed at minority and indigenous languages, and streamlines building anything from keyboards to speech technology. Read more about Why. See also How to get started and our Privacy document.
If you want to build hfst-ospell for inclusion in libvoikko (for further inclusions in the different packages of Voikko, like the LibreOffice-Voikko extension) the MacOSX systems, you should build your binary as a universal binary, and most likely as a static universal binary (required at least for the LibreOffice-Voikko extension). The MacOSX Voikko system speller should only need the dynamic libraries.
You also need to ensure backwards compatibility, which means that you most likely will have to build on a system with the minimum OS version you want to support. Apple’s SDK’s are mostly not backwards compatible, but usually forward compatible.
Configure and make hfst-ospell
using the following options (the text is linewrapped here for readability, all commands should be on one line). Choose the description suitable for your OS version:
OSX 10.6 and earlier require newer versions of automake
and autoconf
than provided by the system. Ensure you have MacPorts installed, then do the following:
sudo port install automake autoconf flex bison libtool pkgconfig
To reduce the number of dependencies, we build libarchive with as few dependencies as possible. To do this, do as follows:
cmake
: sudo port install cmake
./build/autogen.sh
## If the previous step fails, try:
autoreconf -i -v
./configure --without-xml2 --without-nettle --without-bz2lib --without-lzo2 --without-lzma --without-iconv
make
sudo make install
This leaves us with only one external dependency: zlib. This library is also pretty standard, and can be assumed available on all systems(?). to enable x386 binaries, but this is a start.
Another heap of dependencies comes with libxml2++
, which can now be replaced
by TinyXML2. Do as follows:
cd Downloads/tinyxml2-master/
cmake CMakeLists.txt
make
sudo make install
Now start to build hfst-ospell. The simple configuration (test this first):
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ ./configure --enable-zhfst --enable-xml=tinyxml2
If this works – and the freshly installed hfst-ospell works – then start over with a more complex configuration, to get proper support for x386:
## If you have run make before, run make distclean just to ensure you
## start from scratch:
make distclean
## HFST-ospell, working univ. binary config:
CPATH=/opt/local/include:/usr/local/include:/usr/include \
./configure --enable-zhfst --enable-xml=tinyxml2 \
CXXFLAGS=" -arch i386 -arch x86_64 -I/opt/local/include" \
CPPFLAGS="-I/usr/local/include -I/opt/local/include" \
CFLAGS="-I/usr/local/include -I/opt/local/include \
-L/usr/local/lib -L/opt/local/lib -isysroot \
/Developer/SDKs/MacOSX10.5.sdk \
-arch i386 -arch x86_64 -mmacosx-version-min=10.5" \
LDFLAGS=" -arch i386 -arch x86_64 -L/opt/local/lib" \
--enable-static \
--disable-dependency-tracking \
--disable-shared
## HFST-ospell, working univ. binary make:
make CFLAGS="-I/usr/local/include -L/usr/local/lib -isysroot /Developer/SDKs/MacOSX10.5.sdk \
-arch i386 -arch x86_64 -mmacosx-version-min=10.5" \
LINK="gcc -framework CoreFoundation -framework Cocoa -arch i386 -arch x86_64" \
LDFLAGS="-framework CoreFoundation -framework Cocoa"
## Finaly, install the binaries:
sudo make install CFLAGS="-I/usr/local/include -L/usr/local/lib -isysroot \
/Developer/SDKs/MacOSX10.5.sdk -arch i386 -arch x86_64 -mmacosx-version-min=10.5" \
LINK="gcc -framework CoreFoundation -framework Cocoa -arch i386 -arch x86_64" \
LDFLAGS="-framework CoreFoundation -framework Cocoa"
It is possible that these can be simplified a bit, but at least they work. Please note that --disable-dependency-tracking
is required when configuring for a universal binary!
The XCode development tool, libraries etc was moved in Lion, thus the SDK path has to be changed for the build to work. In addition, the lowest OS version supported is 10.6. The updated configure command looks like the following:
CPATH=/opt/local/include:/usr/local/include:/usr/include ./configure --enable-zhfst \
CXXFLAGS=" -arch i386 -arch x86_64 -I/opt/local/include" \
CPPFLAGS="-I/usr/local/include -I/opt/local/include" \
CFLAGS="-I/usr/local/include -I/opt/local/include \
-L/usr/local/lib -L/opt/local/lib -lstdc++-static -isysroot \
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk \
-arch i386 -arch x86_64 -mmacosx-version-min=10.6" \
LDFLAGS=" -arch i386 -arch x86_64 -L/opt/local/lib" \
--enable-static \
--disable-dependency-tracking \
--disable-shared
Similar changes need to be made to the make command.
There are stricter rules for building static libraries under 10.8: minimum system version must be 10.7, and no static linking of core libraries. The updated configure command looks like the following:
CPATH=/opt/local/include:/usr/local/include:/usr/include ./configure --enable-zhfst \
CXXFLAGS=" -arch i386 -arch x86_64 -I/opt/local/include" \
CPPFLAGS="-I/usr/local/include -I/opt/local/include" \
CFLAGS="-I/usr/local/include -I/opt/local/include \
-L/usr/local/lib -L/opt/local/lib -isysroot \
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk \
-arch i386 -arch x86_64 -mmacosx-version-min=10.7" \
LDFLAGS=" -arch i386 -arch x86_64 -L/opt/local/lib" \
--enable-static \
--disable-dependency-tracking \
--disable-shared
Similar changes need to be made to the make command.
By default, only backwards compatible with 10.8. The following is for dynamic libs only. Configuration:
CPATH=/opt/local/include:/usr/local/include:/usr/include \
./configure --enable-zhfst \
CXXFLAGS=" -arch i386 -arch x86_64 -I/opt/local/include" \
CPPFLAGS="-I/usr/local/include -I/opt/local/include" \
CFLAGS="-I/usr/local/include -I/opt/local/include \
-L/usr/local/lib -L/opt/local/lib -isysroot \
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk \
-arch i386 -arch x86_64 -mmacosx-version-min=10.8" \
LDFLAGS=" -arch i386 -arch x86_64 -L/opt/local/lib" \
--disable-dependency-tracking
Make:
If you want to build hfst-ospell
as a static library (e.g. as part of another component made for external distribution), there are a couple of changes. First, copy the following files to a separate dir (I have used /Users/USERNAME/alibs/
):
libarchive.a
libbz2.a
libcrypto.a
libiconv.a
liblzma.a
libxml2.a
libz.a
Then configure it as follows:
CPATH=/opt/local/include:/usr/local/include:/usr/include \
./configure --enable-zhfst \
CXXFLAGS=" -arch i386 -arch x86_64 -I/opt/local/include" \
CPPFLAGS="-I/usr/local/include -I/opt/local/include" \
CFLAGS="-I/usr/local/include -I/opt/local/include -L/Users/USERNAME/alibs \
-L/usr/local/lib -isysroot /Developer/SDKs/MacOSX10.5.sdk -arch i386 \
-arch x86_64 -mmacosx-version-min=10.5" \
LDFLAGS=" -arch i386 -arch x86_64 -L/Users/USERNAME/alibs" \
--enable-static --disable-dependency-tracking --disable-shared
The essential point here is that the library flag -L
now points to the separate dir we just made. This is required to force OSX to use static libraries when linking - if both a static and a dynamic version of a library is found in the same dir, OSX will always prefer the dynamic one. Hence the separate dir.
The make
command line is modified in the same way:
make CFLAGS="-I/usr/local/include -L/Users/USERNAME/alibs -L/usr/local/lib -isysroot \
/Developer/SDKs/MacOSX10.5.sdk -arch i386 -arch x86_64 -mmacosx-version-min=10.5" \
LINK="gcc -framework CoreFoundation -framework Cocoa -arch i386 -arch x86_64" \
LDFLAGS="-framework CoreFoundation -framework Cocoa"
Finally install this using the same make
command as we just used, but add sudo
and install
:
sudo make install ... [the rest as above]
When done, you should have a freshly compiled and installed file /usr/local/lib/libhfstospell.a
. Copy it to the same library dir we made above, together with the rest of the library files (in my case /Users/USERNAME/alibs/
).