Building The Voikko Extension For Libre Office
Gory details - how to compile hfst-ospell and libvoikko as static universal binaries
NB! This documentation is likely outdated, and should be taken as a guide to new efforts only. Please update the document as necessary when building the extension again.
First, ensure that you have universal binaries of the things that both hfst-ospell and libvoikko depends on by specifying the +universal option in MacPorts. Or make the +universal variant default by adding it to the file:
/opt/local/etc/macports/variants.conf
(see http://trac.macports.org/wiki/howto/buildUniversal for more details,
NB! LibreOffice 4 still supports MacOSX on PPC all the way back to Tiger. To
NB2! As of LibreOffice 4.1, support for PPC on the Mac has been dropped. Depending on how backwards compatible we want to be (or not), dropping PPC for the LO Voikko plugin can also be considered.
For hfst-ospell the required dependencies mean the following libraries (some of these might be on your system already, just check that they are universal binaries):
- libarchive
- liblzma
- libxml++2
- libz
- libiconv
- libcrypto
Depending on OS version and LibreOffice versions, the list might be longer. The only way to tell is to see what the linker complains about, and then build the missing libraries.
Future work
hfst-ospell will in the near future be rewritten to not rely this long list of dependencies, mainly by replacing libxml++2 with a selfcontained library (e.g. tinyxml). This should make compilation of hfst-ospell for linking into Voikko much easier.
Update: The first step is now done (as of hfst svn r3625), and is enabled by configuring hfst-ospell as follows:
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/ ./configure --enable-zhfst --enable-xml=tinyxml2
This does of course require that tinyxml2 has been built and installed first.
Check the architecture of the installed libraries
To check that they really are universal, first get a list of which installed libraries hfst-ospell is dependent on:
$ otool -L /usr/local/lib/libhfstospell.1.dylib
Then, for each library in that list, use the following command:
$ file /usr/local/lib/libhfstospell.1.dylib /usr/local/lib/libhfstospell.1.dylib: Mach-O universal binary with 2 architectures /usr/local/lib/libhfstospell.1.dylib (for architecture i386): Mach-O dynamically linked shared library i386 /usr/local/lib/libhfstospell.1.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
For those libraries that give the above output, all is fine. But if you get a message that there is only one architecture for a library, you have to recompile and reinstall that library as a universal binary. You do that as follows:
sudo port -f install PORTNAME +universal
Grammar checker update
As we now also have started to work on a grammar checker, there are two more dependencies to build:
- vislcg3
- tinyxml2
Both have their makefiles constructed by CMake, and none of them are available through MacPorts (at least not in a recent enough version).
To build universal binaries, do as follows:
VislCG3: cd into the source dir, and do:
CMAKE_OSX_ARCHITECTURES=i386\;x86_64 ./cmake.sh make clean make sudo make install
For TinyXML2, the configuration command is:
cmake -DCMAKE_OSX_ARCHITECTURES=i386\;x86_64 CMakeLists.txt make
Then do the following:
Compiling the VoikkoSpellService
Copy the file /usr/local/lib/libvoikko.1.dylib to your VoikkoSpellService source dir + Resources/voikko/. Then open the XCode project, and compile. Hopefully that should be enough.
Building the LibreOffice extension
The first time you're compiling, you need to prepare your environment:
- download the LibreOffice SDK
- cd into the SDK dir
- run perl ./configure.pl `hostname` `pwd`
Then, each time you want to compile again, you need to do the following:
- in your home dir, source . $HOSTNAME/setsdkenv_unix.sh"
Then, follow the guidelines in the Makefile, pointing LIBVOIKKO_PATH to our static library dir. If you want a static build (which you want if you intend to distribute the extension), you also need to enable STANDALONE_EXTENSION_PATH, pointing it to a dir containing the required voikko dir structure and files for at least one supported language. One possible setup, using the default Malaga-based Finnish proofing tools is:
lib/ └── voikko └── 2 └── mor-standard ├── voikko-fi_FI.lex_l ├── voikko-fi_FI.mor_l ├── voikko-fi_FI.pro └── voikko-fi_FI.sym_l
In this case, STANDALONE_EXTENSION_PATH should be set to lib/voikko. When done, just make oxt and distribute the final .oxt file.
Finally you need to modify the build step for the oxt macosx version as follows:
ifeq "$(PLATFORM)" "macosx" cat $(PRJ)/settings/component.uno.map > build/voikko.map nm -gx $^ | $(ADDSYMBOLS) >> build/voikko.map $(LINK) $(COMP_LINK_FLAGS) $(LINK_LIBS) -o $@ $^ \ -framework CoreFoundation -framework Cocoa \ $(CPPUHELPERLIB) $(CPPULIB) $(SALLIB) \ $(CPPUHELPERDYLIB) $(CPPUDYLIB) $(SALDYLIB) \ /Users/USERNAME/alibs/libvoikko.a \ /Users/USERNAME/alibs/libarchive.a \ /Users/USERNAME/alibs/libbz2.a \ /Users/USERNAME/alibs/libcrypto.a \ /Users/USERNAME/alibs/libgiomm-2.4.a \ /Users/USERNAME/alibs/libglib-2.0.a \ /Users/USERNAME/alibs/libglibmm-2.4.a \ /Users/USERNAME/alibs/libhfstospell.a \ /Users/USERNAME/alibs/libiconv.a \ /Users/USERNAME/alibs/libintl.a \ /Users/USERNAME/alibs/liblzma.a \ /Users/USERNAME/alibs/libsigc-2.0.a \ /Users/USERNAME/alibs/libvoikko.a \ /Users/USERNAME/alibs/libxml++-2.6.a \ /Users/USERNAME/alibs/libxml2.a \ /Users/USERNAME/alibs/libz.a $(INSTALL_NAME_URELIBS) $@ else
NB!!! The above build instructions are only tested on Snow Leopard, and the