User Tools

Site Tools


vmime
no way to compare when less than two revisions

Differences

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


Previous revision
Last revision
vmime [2016/10/27 11:28] – [Windows (MSYS + MinGW64) [DRAFT]] mhatz
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