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.
Packages needed:
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
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
$ 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
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
$ 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
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:
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.