User Tools

Site Tools


vmime

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

  1. Download GnuTLS binaries from ftp://ftp.gnutls.org/gcrypt/gnutls/w32/ (gnutls-3.4.9-w32.zip on 2016-10-16)
  2. Download GSASL binaries from https://ftp.gnu.org/gnu/gsasl/ (gsasl-1.8.0-x86.zip on 2016-10-16)
  3. Download pkg-config binaries and dependencies:
    1. Unpack pkg-config.exe, the glib dll and the intl dll in the same folder

Setup MSYS/MinGW environment

  1. Download and install MinGW
  2. Download and install MSYS
  3. Go to your MSYS install folder
  4. start msys.bat
  5. 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

  1. Download and install MinGW64 from sourceforge (https://sourceforge.net/projects/mingw-w64/).
    1. Use the following settings:
      1. Version: latest (6.2.0 on 2016-09-21)
      2. Architecture: x86_64
      3. Threads: win32
      4. Exception: seh
      5. Build revision: 1
    2. And install it on “C:\” (it will create a mingw64 directory)
    1. Extract the msys folder to “C:\”
    2. Run C:\msys\msys.bat, it will open a unix-like terminal
    3. From this terminal, run: sh /postinstall/pi.sh
    4. Answer “y” for the two first questions.
    5. Enter the path to your mingw64 installation (C:/mingw64) in our case. Make sure to use “/” instead of “\”.
    6. It should “Normalizing your MSYS environment”.
  2. Download and install CMake (https://cmake.org/download/)
    1. When installing, choose to add CMake to the “path” environment variable.

Preparing dependencies

Compiling GSASL
  1. Download GSASL from ftp://ftp.gnu.org/gnu/gsasl/ (latest version is 1.8.0 on 2016-09-21) and extract files.
  2. Open C:\msys\msys.bat
  3. 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/mingw64/bin/g++.exe -DCMAKE_C_COMPILER=/C/mingw64/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.

vmime.txt · Last modified: 2016/10/27 11:28 by mhatz