This is an old revision of the document!
Table of Contents
Compiling VMime
Introduction
VMime is the library we intend to use in Mail2Voice Next. It supports emails protocols such as IMAP and SMTP. Visit http://vmime.org for more information.
Compiling
GNU/Linux (Ubuntu)
Prerequisites
Packages needed:
- git
- cmake
- build-essential
- pkg-config
- libgsasl7
- libgsasl7-dev
- libgnutls-dev
- libssl-dev
- sendmail
- doxygen
One can install all the stuff needed with the following command:
sudo apt-get install -y git cmake build-essential pkg-config libgsasl7 libgsasl7-dev libgnutls-dev libssl-dev sendmail doxygen
Building
git clone https://github.com/kisli/vmime.git mkdir vmime/build cd vmime/build cmake -DVMIME_BUILD_SAMPLES=OFF -DVMIME_SHARED_PTR_USE_BOOST=OFF -DVMIME_SHARED_PTR_USE_CXX=ON -DVMIME_SENDMAIL_PATH=/run/sendmail -DCMAKE_BUILD_TYPE=RELEASE .. make sudo make install
Windows (MSYS + MinGW32)
Prerequisites
- Download iconv sources from http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
- Download GnuTLS binaries from ftp://ftp.gnutls.org/gcrypt/gnutls/w32/ (gnutls-3.4.9-w32.zip on 2016-10-16)
- Download GSASL binaries from https://ftp.gnu.org/gnu/gsasl/ (gsasl-1.8.0-x86.zip on 2016-10-16)
- Download pkg-config binaries and dependencies:
- Unpack pkg-config.exe, the glib dll and the intl dll in the same folder
Setup MSYS/MinGW environment
- Download and install MinGW
- Download and install MSYS
- Go to your MSYS install folder
- start msys.bat
- type sh /postinstall/pi.sh and follow the instructions.
Compiling iconv
$ cd path/to/iconv/sources $ mkdir build $ cd build $ ../configure --prefix=$(pwd) $ make <- I was using mingw32-make at first but I encountered some errors with it. It plays nice with MSYS make. $ make install
Compiling VMIME
In order to prevent some bugs with the -std=c++11 flag with gcc 5.3, you need to modify the file cmake/cmake-cxx11/Modules/CheckCXX11Features.cmake at lines 58 and 64 (not sure if the first one is useful).
# ### Check for needed compiler flags # include(CheckCXXCompilerFlag) check_cxx_compiler_flag("-std=gnu++11" _HAS_CXX11_FLAG) <--- MODIFY HERE if (NOT _HAS_CXX11_FLAG) check_cxx_compiler_flag("-std=c++0x" _HAS_CXX0X_FLAG) endif () if (_HAS_CXX11_FLAG) set(CXX11_COMPILER_FLAGS "-std=gnu++11") <--- MODIFY HERE elseif (_HAS_CXX0X_FLAG) set(CXX11_COMPILER_FLAGS "-std=c++0x") endif ()
And you can finally compile VMime!
$ git clone https://github.com/kisli/vmime.git $ mkdir vmime/build $ cd vmime/build $ export DEPS=/path/to/dependencies/parent/dir $ cmake .. -G "MinGW Makefiles" -DCMAKE_CXX_COMPILER=/C/MinGW/bin/mingw32-g++.exe -DCMAKE_C_COMPILER=/C/MinGW/bin/mingw32-gcc.exe \ -DCMAKE_MAKE_PROGRAM=/C/MinGW/bin/mingw32-make.exe -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=$(pwd)/install \ -DGNUTLS_INCLUDE_DIR=$DEPS/gnutls-3.4.9/include -DGNUTLS_LIBRARY=$DEPS/gnutls-3.4.9/lib/libgnutls.dll.a \ -DGSASL_INCLUDE_DIR=$DEPS/gsasl-1.8.0/include -DGSASL_LIBRARIES=$DEPS/gsasl-1.8.0/lib/libgsasl.dll.a \ -DICONV_INCLUDE_DIR=$DEPS/libiconv-1.14/build/dist/include -DICONV_LIBRARIES=$DEPS/libiconv-1.14/build/dist/lib/libiconv.dll.a \ -DPKG_CONFIG_EXECUTABLE=$DEPS/pkg-config/pkg-config.exe -DVMIME_CHARSETCONV_LIB=iconv \ -DVMIME_BUILD_DOCUMENTATION=OFF -DVMIME_BUILD_SAMPLES=OFF -DVMIME_BUILD_TESTS=OFF \ -DVMIME_HAVE_MLANG_H=OFF -DVMIME_HAVE_MLANG_LIB=OFF -DVMIME_HAVE_MESSAGING_PROTO_SENDMAIL=OFF \ -DVMIME_SHARED_PTR_USE_BOOST=OFF -DVMIME_SHARED_PTR_USE_CXX=ON -DCMAKE_CXX_FLAGS="-D_WIN32_WINNT=0x0502" $ mingw32-make.exe $ mingw32-make.exe install
Windows (MSYS + MinGW64) [DRAFT]
Prerequisites
- Download and install MinGW64 from sourceforge (https://sourceforge.net/projects/mingw-w64/).
- Use the following settings:
- Version: latest (6.2.0 on 2016-09-21)
- Architecture: x86_64
- Threads: win32
- Exception: seh
- Build revision: 1
- And install it on “C:\” (it will create a mingw64 directory)
- Download MSYS (https://sourceforge.net/projects/mingw-w64/files/External%20binary%20packages%20%28Win64%20hosted%29/MSYS%20%2832-bit%29/ ). On 2016-09-21, the latest version is MSYS-20111123.zip.
- Extract the msys folder to “C:\”
- Run C:\msys\msys.bat, it will open a unix-like terminal
- From this terminal, run: sh /postinstall/pi.sh
- Answer “y” for the two first questions.
- Enter the path to your mingw64 installation (C:/mingw64) in our case. Make sure to use “/” instead of “\”.
- It should “Normalizing your MSYS environment”.
- Download and install CMake (https://cmake.org/download/)
- When installing, choose to add CMake to the “path” environment variable.
Preparing dependencies
Compiling GSASL
- Download GSASL from ftp://ftp.gnu.org/gnu/gsasl/ (latest version is 1.8.0 on 2016-09-21) and extract files.
- Open C:\msys\msys.bat
- Then type the following commands :
$ cd /path/to/your/libgsasl_src_dir/ (i.e. /c/Users/MrNobody/dev/libgsasl-1.8.0/) $ mkdir build $ cd build $ ../configure --prefix=/path/to/your/libgsasl_src_dir/dist $ make $ make install
Get other dependencies
Fortunately, the Winbuilds project offers some precompiled dependencies we need. You can download the following packages from http://win-builds.org/doku.php/1.5.0_packages:
- gnutls
- pkg-config
- win-iconv
Compiling VMime
Finally, you can compile VMime using the following commands:
$ git clone https://github.com/kisli/vmime.git $ mkdir vmime/build $ cd vmime/build $ export DEPS=/path/to/dependencies/parent/dir $ cmake .. -G "MinGW Makefiles" -DCMAKE_CXX_COMPILER=/C/MinGW/bin/g++.exe -DCMAKE_C_COMPILER=/C/MinGW/bin/gcc.exe \ -DCMAKE_MAKE_PROGRAM=/C/mingw64/bin/mingw32-make.exe -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/C/Users/MrNobody/dev/vmime-master/install \ -DGNUTLS_INCLUDE_DIR=$DEPS/gnutls-3.2.21/include -DGNUTLS_LIBRARY=$DEPS/gnutls-3.2.21/lib64/libgnutls.dll.a \ -DGSASL_INCLUDE_DIR=$DEPS/libgsasl-1.8.0/include -DGSASL_LIBRARIES=$DEPS/libgsasl-1.8.0/lib/libgsasl.dll.a \ -DICONV_INCLUDE_DIR=$DEPS/win-iconv-0.0.6/include -DICONV_LIBRARIES=$DEPS/win-iconv-0.0.6/lib64/libiconv.dll.a \ -DPKG_CONFIG_EXECUTABLE=$DEPS/pkg-config/bin/pkg-config.exe -DVMIME_CHARSETCONV_LIB=iconv \ -DVMIME_BUILD_DOCUMENTATION=OFF -DVMIME_BUILD_SAMPLES=OFF -DVMIME_BUILD_TESTS=OFF \ -DVMIME_HAVE_MLANG_H=OFF -DVMIME_HAVE_MLANG_LIB=OFF -DVMIME_HAVE_MESSAGING_PROTO_SENDMAIL=OFF \ -DVMIME_SHARED_PTR_USE_BOOST=OFF -DVMIME_SHARED_PTR_USE_CXX=ON $ mingw32-make.exe $ mingw32-make.exe install
Note 1: you may encounter some errors while generating the Makefile mentioning that libglib2 is missing but you can ignore it.
Note 2: if the install step fails at the end, just copy the missing libvmime.dll file from the build/build/bin directory into the install/bin directory.