Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/CMakeLists.txt b/CMakeLists.txt
- index 9f4ab2d..18ec365 100644
- --- a/CMakeLists.txt
- +++ b/CMakeLists.txt
- @@ -6,6 +6,9 @@ project(QtShadowsocks
- option(BUILD_SHARED_LIBS "Build ${PROJECT_NAME} as a shared library" ON)
- option(USE_BOTAN2 "Build ${PROJECT_NAME} with Botan-2" OFF)
- +option(USE_STATIC_BOTAN "Link aginst static botan" OFF)
- +option(USE_PKG_CONFIG "You can try to manually specify packages if pkg-config won't work" ON)
- +option(STATIC_BUILD "" OFF)
- set(LIB_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/lib
- CACHE PATH "Installation directory for libraries")
- @@ -17,28 +20,52 @@ set(CMAKE_CXX_STANDARD 14)
- set(CMAKE_CXX_STANDARD_REQUIRED ON)
- set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- +
- find_package(Qt5Core 5.5)
- find_package(Qt5Network 5.5)
- -find_package(PkgConfig)
- -
- -if (USE_BOTAN2)
- - add_definitions(-DUSE_BOTAN2)
- - pkg_check_modules(BOTAN REQUIRED botan-2>=2.3.0)
- +if (USE_PKG_CONFIG)
- + set(PKG_CONFIG_PATH "" CACHE PATH "Extra search path for PKG_CONFIG_PATH")
- + set(_pkgconfig_path_old "$ENV{PKG_CONFIG_PATH}")
- + if(WIN32)
- + set(ENV{PKG_CONFIG_PATH} "${PKG_CONFIG_PATH};$ENV{PKG_CONFIG_PATH}")
- + else()
- + set(ENV{PKG_CONFIG_PATH} "${PKG_CONFIG_PATH}:$ENV{PKG_CONFIG_PATH}")
- + endif()
- + find_package(PkgConfig)
- + if (USE_BOTAN2)
- + add_definitions(-DUSE_BOTAN2)
- + pkg_check_modules(BOTAN REQUIRED botan-2>=2.3.0)
- + else()
- + pkg_check_modules(BOTAN REQUIRED botan-1.10)
- + endif()
- + set(ENV{PKG_CONFIG_PATH} "${_pkgconfig_path_old}")
- + unset(_pkgconfig_path_old)
- else()
- - pkg_check_modules(BOTAN REQUIRED botan-1.10)
- + if (USE_BOTAN2)
- + set(BOTAN_LIBRARY_NAME "botan-2" CACHE STRING "")
- + else()
- + set(BOTAN_LIBRARY_NAME "botan" CACHE STRING "")
- + endif()
- + set(BOTAN_LIBRARY_DIRS "" CACHE PATH "")
- endif()
- find_library(BOTAN_LIBRARY_VAR
- - NAMES ${BOTAN_LIBRARIES}
- - HINTS ${BOTAN_LIBRARY_DIRS} ${BOTAN_LIBDIR})
- + NAMES ${BOTAN_LIBRARIES}
- + HINTS ${BOTAN_LIBRARY_DIRS} ${BOTAN_LIBDIR})
- +
- +include_directories(BEFORE ${BOTAN_INCLUDEDIR})
- +
- +if(USE_STATIC_BOTAN)
- + add_definitions(-DBOTAN_DLL=)
- +endif()
- if(BUILD_SHARED_LIBS)
- add_definitions(-DQSS_LIBRARY)
- else()
- add_definitions(-DQSS_STATIC)
- if (MINGW)
- - # This however doesn't fix the problem that the executables are depending on the GCC shared libraries
- - # I can't find a solution in CMake so far. The workaround is to manually append "-l:libgcc.a -l:libstdc++.a -l:libwinpthread.a" to the end of executables' linklibs.rsp files (in CMakeFiles directory)
- - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++")
- + # This however doesn't fix the problem that the executables are depending on the GCC shared libraries
- + # I can't find a solution in CMake so far. The workaround is to manually append "-l:libgcc.a -l:libstdc++.a -l:libwinpthread.a" to the end of executables' linklibs.rsp files (in CMakeFiles directory)
- + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++")
- endif()
- endif()
- @@ -46,6 +73,20 @@ if(WIN32 OR APPLE)
- add_definitions(-DFD_SETSIZE=1024)
- endif()
- +if(WIN32 AND STATIC_BUILD)
- + message(STATUS "Using /MT and /MTd instead of /MD")
- + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
- + set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} /MT")
- + set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /MT")
- + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
- + set(EXTRA_WIN32_STATIC_QT_LIBS optimized "${Qt5Core_DIR}/../../qtpcre2.lib" debug "${Qt5Core_DIR}/../../qtpcre2d.lib")
- +endif()
- +
- +set(EXTRA_PREDEFINE "" CACHE STRING "Extra pre-defined symbols, seperated with ; .")
- +foreach(EXTRA_PREDEFINE_I ${EXTRA_PREDEFINE})
- + add_definitions("-D${EXTRA_PREDEFINE}")
- +endforeach()
- +
- add_subdirectory(lib)
- add_subdirectory(shadowsocks-libqss)
- add_subdirectory(test)
- diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
- index 272c0b8..3bb3ef9 100644
- --- a/lib/CMakeLists.txt
- +++ b/lib/CMakeLists.txt
- @@ -46,6 +46,16 @@ target_link_libraries(${LIBNAME}
- PUBLIC Qt5::Core
- PUBLIC Qt5::Network
- PRIVATE ${BOTAN_LIBRARY_VAR})
- +if(WIN32 AND STATIC_BUILD)
- + target_link_libraries(${LIBNAME}
- + PUBLIC "ws2_32.lib"
- + PUBLIC "Iphlpapi.lib"
- + PUBLIC "Dnsapi.lib"
- + PUBLIC "Winmm.lib"
- + PUBLIC "Mincore.lib")
- + target_link_libraries(${LIBNAME}
- + PUBLIC ${EXTRA_WIN32_STATIC_QT_LIBS})
- +endif()
- target_include_directories(${LIBNAME} PRIVATE ${BOTAN_INCLUDE_DIRS})
- foreach(LIB Qt5Network Qt5Core ${BOTAN_LIBRARIES})
- diff --git a/lib/cipher.h b/lib/cipher.h
- index 969fb76..d35025d 100644
- --- a/lib/cipher.h
- +++ b/lib/cipher.h
- @@ -35,12 +35,9 @@
- #include "rc4.h"
- #include "chacha.h"
- #include "export.h"
- -
- -namespace Botan {
- -class Keyed_Filter;
- -class Pipe;
- -class KDF;
- -}
- +#include "botan/key_filt.h"
- +#include "botan/pipe.h"
- +#include "botan/kdf.h"
- namespace QSS {
- diff --git a/shadowsocks-libqss/CMakeLists.txt b/shadowsocks-libqss/CMakeLists.txt
- index ff7cb31..06637d4 100644
- --- a/shadowsocks-libqss/CMakeLists.txt
- +++ b/shadowsocks-libqss/CMakeLists.txt
- @@ -7,8 +7,15 @@ set(SOURCE
- )
- add_executable(${TASK} ${SOURCE})
- +remove_definitions(-DQSS_LIBRARY)
- target_link_libraries(${TASK} Qt5::Core Qt5::Network QtShadowsocks)
- +if(WIN32 AND STATIC_BUILD)
- + target_link_libraries(${TASK} "ws2_32.lib" "Iphlpapi.lib" "Dnsapi.lib" "Winmm.lib" "Mincore.lib")
- + target_link_libraries(${TASK}
- + ${EXTRA_WIN32_STATIC_QT_LIBS})
- +endif()
- +
- target_include_directories(${TASK}
- PUBLIC ${PROJECT_SOURCE_DIR}/lib)
- diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
- index e076ecc..daac06c 100644
- --- a/test/CMakeLists.txt
- +++ b/test/CMakeLists.txt
- @@ -10,8 +10,15 @@ set(SOURCE
- )
- add_executable(${TASK} ${SOURCE})
- +remove_definitions(-DQSS_LIBRARY)
- find_package(Qt5Test)
- target_link_libraries(${TASK} Qt5::Core Qt5::Network Qt5::Test QtShadowsocks)
- +if(WIN32 AND STATIC_BUILD)
- + target_link_libraries(${TASK} "ws2_32.lib" "Iphlpapi.lib" "Dnsapi.lib" "Winmm.lib" "Mincore.lib")
- + target_link_libraries(${TASK}
- + ${EXTRA_WIN32_STATIC_QT_LIBS})
- +endif()
- +
- target_include_directories(${TASK}
- PUBLIC ${PROJECT_SOURCE_DIR}/lib)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement