User Tools

Site Tools


vmime

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

vmime [2018/09/20 17:12]
vmime [2020/08/20 16:20] (current)
Line 1: Line 1:
 +====== 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:​
 +    - http://​ftp.gnome.org/​pub/​gnome/​binaries/​win32/​dependencies/​pkg-config_0.26-1_win32.zip
 +    - http://​ftp.gnome.org/​pub/​gnome/​binaries/​win32/​glib/​2.28/​glib_2.28.8-1_win32.zip
 +    - http://​ftp.acc.umu.se/​pub/​gnome/​binaries/​win32/​dependencies/​gettext-runtime_0.18.1.1-2_win32.zip
 +    - 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 ===
 +
 +<​code>​
 +$ 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
 +</​code>​
 +
 +
 +=== 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).
 +
 +<​code>​
 +#
 +### 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 ()
 +
 +</​code>​
 +
 +And you can finally compile VMime!
 +
 +<​code>​
 +$ 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
 +</​code>​
 +
 +
 +==== 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 :
 +
 +<​code>​
 +$ 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
 +</​code>​
 +
 +== 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:
 +
 +<​code>​
 +$ 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
 +</​code>​
 +
 +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.