User Tools

Site Tools


vmime

Differences

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


Previous revision
vmime [2023/04/25 16:52] (current) – external edit 127.0.0.1
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.
  
vmime.txt · Last modified: 2023/04/25 16:52 by 127.0.0.1