<fix>(project): support build on Windows.

1. Optimize the introduction of vmime header files.
2. Disable ExternalProject when using Windows platform.
This commit is contained in:
Saturneric 2022-01-15 00:46:24 +08:00
parent 390c7a236e
commit c4d972cd57
8 changed files with 112 additions and 74 deletions

4
.gitmodules vendored
View File

@ -9,7 +9,7 @@
url = https://github.com/saturneric/libgpg-error
[submodule "third_party/vmime"]
path = third_party/vmime
url = https://github.com/saturneric/vmime
url = git://git.codesdream.com//third_party/vmime.git
[submodule "third_party/json"]
path = third_party/json
url = https://github.com/saturneric/json
@ -21,4 +21,4 @@
url = https://github.com/saturneric/Qt-AES
[submodule "third_party/smtp-mime"]
path = third_party/smtp-mime
url = https://github.com/saturneric/SmtpClient-for-Qt
url = git://git.codesdream.com//third_party/smtp-mime.git

View File

@ -234,6 +234,7 @@ IF (MINGW)
/mingw64/include
)
link_directories(
${CMAKE_SOURCE_DIR}/lib/mingw
/mingw64/lib
)
endif ()

View File

@ -23,7 +23,6 @@
*/
#include <boost/date_time.hpp>
#include <vmime/vmime.hpp>
#include "ui/settings/GlobalSettingStation.h"

View File

@ -34,9 +34,12 @@ target_link_libraries(${GPGFRONTEND_UI_LIB_NAME}
Qt5::Network Qt5::PrintSupport Qt5::Widgets Qt5::Test Qt5::Core)
# link vmime
if (APPLE)
if (NOT LINUX)
target_link_libraries(${GPGFRONTEND_UI_LIB_NAME}
gpgfrontend_vmime ssl crypto)
gpgfrontend_vmime ssl crypto intl iconv)
if(MINGW)
target_link_libraries(${GPGFRONTEND_UI_LIB_NAME} ws2_32)
endif()
else ()
target_link_libraries(${GPGFRONTEND_UI_LIB_NAME}
gpgfrontend_vmime anl ssl crypto)

View File

@ -25,6 +25,8 @@
#ifndef GPGFRONTEND_GPGFRONTENDUI_H
#define GPGFRONTEND_GPGFRONTENDUI_H
#include <optional>
#include <QtCore>
#include <QtNetwork>
#include <QtPrintSupport>
@ -44,6 +46,10 @@
#include <SmtpMime>
#endif
#define VMIME_STATIC
#undef VMIME_HAVE_MLANG
#include <vmime/vmime.hpp>
/**
* Resources File(s) Path Vars
*/

View File

@ -16,14 +16,17 @@ add_subdirectory(qt-aes)
set(VMIME_HAVE_MESSAGING_PROTO_SENDMAIL OFF CACHE BOOL "" FORCE)
set(VMIME_HAVE_SASL_SUPPORT OFF CACHE BOOL "" FORCE)
set(VMIME_BUILD_STATIC_LIBRARY ON CACHE BOOL "" FORCE)
set(VMIME_BUILD_SHARED_LIBRARY OFF CACHE BOOL "" FORCE)
set(VMIME_CHARSETCONV_LIB "iconv" CACHE STRING "" FORCE)
set(VMIME_TLS_SUPPORT_LIB "openssl" CACHE STRING "" FORCE)
set(VMIME_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vmime)
set(VMIME_BIN ${CMAKE_CURRENT_BINARY_DIR}/vmime)
set(VMIME_BIN_STATIC_LIB ${VMIME_BIN}/build/lib/libvmime.a)
set(VMIME_INCLUDES ${VMIME_DIR}/src ${CMAKE_BINARY_DIR}/src/vmime/ ${CMAKE_BINARY_DIR}/src/)
set(VMIME_BIN_STATIC_LIB ${VMIME_BIN}/build/lib/libvmime.a)
add_subdirectory(vmime)
add_library(gpgfrontend_vmime STATIC IMPORTED GLOBAL)
@ -37,97 +40,123 @@ include(ExternalProject)
# libgpg-error
set(GPG_ERROR_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libgpg-error)
set(GPG_ERROR_BIN ${CMAKE_CURRENT_BINARY_DIR}/libgpg-error)
set(GPG_ERROR_STATIC_LIB ${GPG_ERROR_BIN}/lib/libgpg-error.a)
set(GPG_ERROR_INCLUDES ${GPG_ERROR_BIN}/include)
set(GPG_ERROR_LIBS ${GPG_ERROR_BIN}/lib)
file(MAKE_DIRECTORY ${GPG_ERROR_INCLUDES})
message(STATUS "GPG_ERROR_INCLUDES ${GPG_ERROR_INCLUDES}")
if (NOT MINGW)
set(GPG_ERROR_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libgpg-error)
set(GPG_ERROR_BIN ${CMAKE_CURRENT_BINARY_DIR}/libgpg-error)
set(GPG_ERROR_STATIC_LIB ${GPG_ERROR_BIN}/lib/libgpg-error.a)
set(GPG_ERROR_INCLUDES ${GPG_ERROR_BIN}/include)
set(GPG_ERROR_LIBS ${GPG_ERROR_BIN}/lib)
file(MAKE_DIRECTORY ${GPG_ERROR_INCLUDES})
else ()
find_library(GPG_ERROR_STATIC_LIB libgpg-error.a)
endif ()
ExternalProject_Add(libgpg-error
PREFIX ${GPG_ERROR_BIN}
SOURCE_DIR ${GPG_ERROR_DIR}
CONFIGURE_COMMAND ${GPG_ERROR_DIR}/configure --enable-maintainer-mode --prefix=${GPG_ERROR_BIN} --enable-static=yes
BUILD_COMMAND make
INSTALL_COMMAND make install
BUILD_BYPRODUCTS ${GPG_ERROR_STATIC_LIB})
if (NOT MINGW)
ExternalProject_Add_Step(libgpg-error autogen
WORKING_DIRECTORY ${GPG_ERROR_DIR}
COMMAND ${GPG_ERROR_DIR}/autogen.sh
DEPENDERS configure
)
ExternalProject_Add(libgpg-error
PREFIX ${GPG_ERROR_BIN}
SOURCE_DIR ${GPG_ERROR_DIR}
CONFIGURE_COMMAND ${GPG_ERROR_DIR}/configure --enable-maintainer-mode --prefix=${GPG_ERROR_BIN} --enable-static=yes
BUILD_COMMAND make
INSTALL_COMMAND make install
BUILD_BYPRODUCTS ${GPG_ERROR_STATIC_LIB})
ExternalProject_Add_Step(libgpg-error autogen
WORKING_DIRECTORY ${GPG_ERROR_DIR}
COMMAND ${GPG_ERROR_DIR}/autogen.sh
DEPENDERS configure)
endif ()
add_library(gpg-error STATIC IMPORTED GLOBAL)
add_dependencies(gpg-error libgpg-error)
if (NOT MINGW)
add_dependencies(gpg-error libgpg-error)
set_target_properties(gpg-error PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${GPG_ERROR_INCLUDES})
endif ()
set_target_properties(gpg-error PROPERTIES IMPORTED_LOCATION ${GPG_ERROR_STATIC_LIB})
set_target_properties(gpg-error PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${GPG_ERROR_INCLUDES})
# libassuan
set(ASSUAN_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libassuan)
set(ASSUAN_BIN ${CMAKE_CURRENT_BINARY_DIR}/libassuan)
set(ASSUAN_STATIC_LIB ${ASSUAN_BIN}/lib/libassuan.a)
set(ASSUAN_INCLUDES ${ASSUAN_BIN}/include)
set(ASSUAN_LIBS ${ASSUAN_BIN}/lib)
file(MAKE_DIRECTORY ${ASSUAN_INCLUDES})
if (NOT MINGW)
set(ASSUAN_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libassuan)
set(ASSUAN_BIN ${CMAKE_CURRENT_BINARY_DIR}/libassuan)
set(ASSUAN_STATIC_LIB ${ASSUAN_BIN}/lib/libassuan.a)
set(ASSUAN_INCLUDES ${ASSUAN_BIN}/include)
set(ASSUAN_LIBS ${ASSUAN_BIN}/lib)
file(MAKE_DIRECTORY ${ASSUAN_INCLUDES})
else ()
find_library(ASSUAN_STATIC_LIB libassuan.a)
endif ()
ExternalProject_Add(libassuan
PREFIX ${ASSUAN_BIN}
SOURCE_DIR ${ASSUAN_DIR}
CONFIGURE_COMMAND ${ASSUAN_DIR}/configure --enable-maintainer-mode --prefix=${ASSUAN_BIN} --enable-static=yes
--with-libgpg-error-prefix=${GPG_ERROR_BIN}
BUILD_COMMAND make
INSTALL_COMMAND make install
BUILD_BYPRODUCTS ${ASSUAN_STATIC_LIB})
if (NOT MINGW)
ExternalProject_Add_Step(libassuan autogen
WORKING_DIRECTORY ${ASSUAN_DIR}
COMMAND ${ASSUAN_DIR}/autogen.sh
DEPENDERS configure
)
ExternalProject_Add(libassuan
PREFIX ${ASSUAN_BIN}
SOURCE_DIR ${ASSUAN_DIR}
CONFIGURE_COMMAND ${ASSUAN_DIR}/configure --enable-maintainer-mode --prefix=${ASSUAN_BIN} --enable-static=yes
--with-libgpg-error-prefix=${GPG_ERROR_BIN}
BUILD_COMMAND make
INSTALL_COMMAND make install
BUILD_BYPRODUCTS ${ASSUAN_STATIC_LIB})
ExternalProject_Add_StepDependencies(libassuan autogen libgpg-error)
ExternalProject_Add_Step(libassuan autogen
WORKING_DIRECTORY ${ASSUAN_DIR}
COMMAND ${ASSUAN_DIR}/autogen.sh
DEPENDERS configure)
ExternalProject_Add_StepDependencies(libassuan autogen libgpg-error)
endif ()
add_library(assuan STATIC IMPORTED GLOBAL)
add_dependencies(assuan libassuan gpg-error)
if (NOT MINGW)
add_dependencies(assuan libassuan gpg-error)
set_target_properties(assuan PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${ASSUAN_INCLUDES})
endif ()
set_target_properties(assuan PROPERTIES IMPORTED_LOCATION ${ASSUAN_STATIC_LIB})
set_target_properties(assuan PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${ASSUAN_INCLUDES})
# gpgme
set(GPGME_DIR ${CMAKE_CURRENT_SOURCE_DIR}/gpgme)
set(GPGME_BIN ${CMAKE_CURRENT_BINARY_DIR}/gpgme)
set(GPGME_STATIC_LIB ${GPGME_BIN}/lib/libgpgme.a)
set(GPGME_INCLUDES ${GPGME_BIN}/include)
file(MAKE_DIRECTORY ${GPGME_INCLUDES})
if (NOT MINGW)
set(GPGME_DIR ${CMAKE_CURRENT_SOURCE_DIR}/gpgme)
set(GPGME_BIN ${CMAKE_CURRENT_BINARY_DIR}/gpgme)
set(GPGME_STATIC_LIB ${GPGME_BIN}/lib/libgpgme.a)
set(GPGME_INCLUDES ${GPGME_BIN}/include)
file(MAKE_DIRECTORY ${GPGME_INCLUDES})
else ()
find_library(GPGME_STATIC_LIB libgpgme.a)
endif ()
ExternalProject_Add(libgpgme
PREFIX ${GPGME_BIN}
SOURCE_DIR ${GPGME_DIR}
CONFIGURE_COMMAND ${GPGME_DIR}/configure --enable-maintainer-mode --prefix=${GPGME_BIN} --enable-shared=no --enable-static=yes --disable-gpg-test --enable-languages=cpp
--with-libgpg-error-prefix=${GPG_ERROR_BIN}
--with-libassuan-prefix=${ASSUAN_BIN}
"LIB=-lassuan -lgpg-error"
"LDFLAGS=-L${ASSUAN_LIBS} -L${GPG_ERROR_LIBS} "
BUILD_COMMAND make
INSTALL_COMMAND make install
BUILD_BYPRODUCTS ${GPGME_STATIC_LIB})
if (NOT MINGW)
ExternalProject_Add_Step(libgpgme autogen
WORKING_DIRECTORY ${GPGME_DIR}
COMMAND ${GPGME_DIR}/autogen.sh
DEPENDERS configure
)
ExternalProject_Add(libgpgme
PREFIX ${GPGME_BIN}
SOURCE_DIR ${GPGME_DIR}
CONFIGURE_COMMAND ${GPGME_DIR}/configure --enable-maintainer-mode --prefix=${GPGME_BIN} --enable-shared=no --enable-static=yes --disable-gpg-test --enable-languages=cpp
--with-libgpg-error-prefix=${GPG_ERROR_BIN}
--with-libassuan-prefix=${ASSUAN_BIN}
"LIB=-lassuan -lgpg-error"
"LDFLAGS=-L${ASSUAN_LIBS} -L${GPG_ERROR_LIBS} "
BUILD_COMMAND make
INSTALL_COMMAND make install
BUILD_BYPRODUCTS ${GPGME_STATIC_LIB})
ExternalProject_Add_StepDependencies(libgpgme autogen libassuan libgpg-error)
ExternalProject_Add_Step(libgpgme autogen
WORKING_DIRECTORY ${GPGME_DIR}
COMMAND ${GPGME_DIR}/autogen.sh
DEPENDERS configure)
ExternalProject_Add_StepDependencies(libgpgme autogen libassuan libgpg-error)
endif ()
add_library(gpgme STATIC IMPORTED GLOBAL)
if (NOT MINGW)
add_dependencies(gpgme libgpgme assuan gpg-error)
set_target_properties(gpgme PROPERTIES IMPORTED_LOCATION ${GPGME_STATIC_LIB})
set_target_properties(gpgme PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${GPGME_INCLUDES})
endif()
set_target_properties(gpgme PROPERTIES IMPORTED_LOCATION ${GPGME_STATIC_LIB})
if (SMTP_SUPPORT)
message(STATUS "Build SMTP Support")

@ -1 +1 @@
Subproject commit 3fa4a0fe5797070339422cf18b5e9ed8dcb91f9c
Subproject commit 39d6f35ca78327ed2c109e30d630e2ea22363cd6

2
third_party/vmime vendored

@ -1 +1 @@
Subproject commit 23ab2a6a3c927c99bfc1a0bedd94e283c05ca59d
Subproject commit 0c9dc59b6ff4e612d97cc2103ff948c5cbab0a7c