mirror of
				https://github.com/Telecominfraproject/wlan-cloud-lib-poco.git
				synced 2025-10-30 18:17:50 +00:00 
			
		
		
		
	CMake merge from devel to 1.10 to use embedded OpenSSL for Windows (#2767)
* Add embedded openssl for windows * Add windows fix for OpenSSL #2708 * Fix CppUnit lib prefix with Poco
This commit is contained in:
		 Joerg-Christian Boehme
					Joerg-Christian Boehme
				
			
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			 GitHub
						GitHub
					
				
			
						parent
						
							ef516fa767
						
					
				
				
					commit
					b9fa82b08b
				
			| @@ -69,6 +69,36 @@ endif() | |||||||
| # Include some common macros to simpilfy the Poco CMake files | # Include some common macros to simpilfy the Poco CMake files | ||||||
| include(PocoMacros) | include(PocoMacros) | ||||||
|  |  | ||||||
|  | option(POCO_STATIC | ||||||
|  |   "Set to OFF|ON (default is OFF) to control build of POCO as STATIC library" OFF) | ||||||
|  | if(POCO_STATIC) | ||||||
|  |     option(BUILD_SHARED_LIBS "Build shared libraries" OFF) | ||||||
|  | else() | ||||||
|  |     option(BUILD_SHARED_LIBS "Build shared libraries" ON) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | if(MSVC) | ||||||
|  |     option(POCO_MT | ||||||
|  |       "Set to OFF|ON (default is OFF) to control build of POCO as /MT instead of /MD" OFF) | ||||||
|  |  | ||||||
|  |     option(ENABLE_MSVC_MP | ||||||
|  |       "Set to OFF|ON (default is OFF) to control parallel build of POCO with MSVC" OFF) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |     # allow disabling of internally built OpenSSL# (see below for details) | ||||||
|  |     # if POCO pre-built OpenSSL directory is found, and POCO_DISABLE_INTERNAL_OPENSSL=OFF, | ||||||
|  |     # the internal OpenSSL build will be used | ||||||
|  |     option(POCO_DISABLE_INTERNAL_OPENSSL "Disable internal OpensSSL binaries use" OFF) | ||||||
|  |  | ||||||
|  |      | ||||||
|  |     if((NOT POCO_DISABLE_INTERNAL_OPENSSL) AND (ENABLE_NETSSL OR ENABLE_CRYPTO OR (ENABLE_DATA_MYSQL AND MINGW))) | ||||||
|  |       include(UseEmbeddedOpenSSL) | ||||||
|  |     endif() | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | option(ENABLE_NETSSL_WIN "Enable NetSSL Windows" OFF) | ||||||
|  | option(FORCE_OPENSSL "Force usage of OpenSSL even under windows" OFF) | ||||||
|  |  | ||||||
| if(ENABLE_CRYPTO OR ENABLE_NETSSL OR ENABLE_JWT) | if(ENABLE_CRYPTO OR ENABLE_NETSSL OR ENABLE_JWT) | ||||||
| 	find_package(OpenSSL REQUIRED) | 	find_package(OpenSSL REQUIRED) | ||||||
| else() | else() | ||||||
| @@ -155,7 +185,7 @@ option(ENABLE_REDIS "Enable Redis" ON) | |||||||
| option(ENABLE_PDF "Enable PDF" OFF) | option(ENABLE_PDF "Enable PDF" OFF) | ||||||
| option(ENABLE_UTIL "Enable Util" ON) | option(ENABLE_UTIL "Enable Util" ON) | ||||||
| option(ENABLE_NET "Enable Net" ON) | option(ENABLE_NET "Enable Net" ON) | ||||||
| option(ENABLE_NETSSL_WIN "Enable NetSSL Windows" OFF) |  | ||||||
| option(ENABLE_SEVENZIP "Enable SevenZip" OFF) | option(ENABLE_SEVENZIP "Enable SevenZip" OFF) | ||||||
| option(ENABLE_ZIP "Enable Zip" ON) | option(ENABLE_ZIP "Enable Zip" ON) | ||||||
| option(ENABLE_CPPPARSER "Enable C++ parser" OFF) | option(ENABLE_CPPPARSER "Enable C++ parser" OFF) | ||||||
| @@ -163,31 +193,12 @@ option(ENABLE_POCODOC "Enable Poco Documentation Generator" OFF) | |||||||
| option(ENABLE_PAGECOMPILER "Enable PageCompiler" ON) | option(ENABLE_PAGECOMPILER "Enable PageCompiler" ON) | ||||||
| option(ENABLE_PAGECOMPILER_FILE2PAGE "Enable File2Page" ON) | option(ENABLE_PAGECOMPILER_FILE2PAGE "Enable File2Page" ON) | ||||||
|  |  | ||||||
| option(FORCE_OPENSSL "Force usage of OpenSSL even under windows" OFF) |  | ||||||
|  |  | ||||||
| option(ENABLE_TESTS | option(ENABLE_TESTS | ||||||
|   "Set to OFF|ON (default is OFF) to control build of POCO tests & samples" OFF) |   "Set to OFF|ON (default is OFF) to control build of POCO tests & samples" OFF) | ||||||
|  |  | ||||||
| option(POCO_STATIC |  | ||||||
|   "Set to OFF|ON (default is OFF) to control build of POCO as STATIC library" OFF) |  | ||||||
| if(POCO_STATIC) |  | ||||||
|     option(BUILD_SHARED_LIBS "Build shared libraries" OFF) |  | ||||||
| else() |  | ||||||
|     option(BUILD_SHARED_LIBS "Build shared libraries" ON) |  | ||||||
| endif() |  | ||||||
|  |  | ||||||
| option(POCO_UNBUNDLED | option(POCO_UNBUNDLED | ||||||
|   "Set to OFF|ON (default is OFF) to control linking dependencies as external" OFF) |   "Set to OFF|ON (default is OFF) to control linking dependencies as external" OFF) | ||||||
|  |  | ||||||
| if(MSVC) |  | ||||||
|     option(POCO_MT |  | ||||||
|       "Set to OFF|ON (default is OFF) to control build of POCO as /MT instead of /MD" OFF) |  | ||||||
|  |  | ||||||
|     option(ENABLE_MSVC_MP |  | ||||||
|       "Set to OFF|ON (default is OFF) to control parallel build of POCO with MSVC" OFF) |  | ||||||
| endif() |  | ||||||
|  |  | ||||||
|  |  | ||||||
| if(ENABLE_TESTS) | if(ENABLE_TESTS) | ||||||
|   option(ENABLE_LONG_RUNNING_TESTS "Enable long running test" ON) |   option(ENABLE_LONG_RUNNING_TESTS "Enable long running test" ON) | ||||||
|   include(CTest) |   include(CTest) | ||||||
| @@ -271,11 +282,6 @@ if(ENABLE_NET AND ENABLE_TESTS) | |||||||
|     set(ENABLE_UTIL ON CACHE BOOL "Enable Util" FORCE) |     set(ENABLE_UTIL ON CACHE BOOL "Enable Util" FORCE) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| if(ENABLE_JWT) |  | ||||||
| 	set(ENABLE_CRYPTO ON CACHE BOOL "Enable Crypto" FORCE) |  | ||||||
|     set(ENABLE_JSON ON CACHE BOOL "Enable JSON" FORCE) |  | ||||||
| endif() |  | ||||||
|  |  | ||||||
| if(ENABLE_PDF) | if(ENABLE_PDF) | ||||||
|     set(ENABLE_UTIL ON CACHE BOOL "Enable Util" FORCE) |     set(ENABLE_UTIL ON CACHE BOOL "Enable Util" FORCE) | ||||||
|     set(ENABLE_XML ON CACHE BOOL "Enable XML" FORCE) |     set(ENABLE_XML ON CACHE BOOL "Enable XML" FORCE) | ||||||
| @@ -297,6 +303,11 @@ if(ENABLE_UTIL AND ENABLE_TESTS) | |||||||
|     set(ENABLE_XML ON CACHE BOOL "Enable XML" FORCE) |     set(ENABLE_XML ON CACHE BOOL "Enable XML" FORCE) | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
|  | if(ENABLE_JWT) | ||||||
|  | 	set(ENABLE_CRYPTO ON CACHE BOOL "Enable Crypto" FORCE) | ||||||
|  |     set(ENABLE_JSON ON CACHE BOOL "Enable JSON" FORCE) | ||||||
|  | endif() | ||||||
|  |  | ||||||
| add_subdirectory(Foundation) | add_subdirectory(Foundation) | ||||||
| if(ENABLE_ENCODINGS) | if(ENABLE_ENCODINGS) | ||||||
|     add_subdirectory(Encodings) |     add_subdirectory(Encodings) | ||||||
| @@ -323,11 +334,6 @@ if(ENABLE_NET) | |||||||
|     list(APPEND Poco_COMPONENTS "Net") |     list(APPEND Poco_COMPONENTS "Net") | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| if(EXISTS ${PROJECT_SOURCE_DIR}/JWT AND ENABLE_JWT) |  | ||||||
|     add_subdirectory(JWT) |  | ||||||
|     list(APPEND Poco_COMPONENTS "JWT") |  | ||||||
| endif() |  | ||||||
|  |  | ||||||
| if(EXISTS ${PROJECT_SOURCE_DIR}/MongoDB AND ENABLE_MONGODB) | if(EXISTS ${PROJECT_SOURCE_DIR}/MongoDB AND ENABLE_MONGODB) | ||||||
|     add_subdirectory(MongoDB) |     add_subdirectory(MongoDB) | ||||||
|     list(APPEND Poco_COMPONENTS "MongoDB") |     list(APPEND Poco_COMPONENTS "MongoDB") | ||||||
| @@ -343,6 +349,10 @@ if(EXISTS ${PROJECT_SOURCE_DIR}/PDF AND ENABLE_PDF) | |||||||
|     list(APPEND Poco_COMPONENTS "PDF") |     list(APPEND Poco_COMPONENTS "PDF") | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
|  | if(EXISTS ${PROJECT_SOURCE_DIR}/JWT AND ENABLE_JWT) | ||||||
|  |     add_subdirectory(JWT) | ||||||
|  |     list(APPEND Poco_COMPONENTS "JWT") | ||||||
|  | endif() | ||||||
|  |  | ||||||
| #NetSSL | #NetSSL | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,16 +7,20 @@ file(GLOB_RECURSE HDRS_G "include/*.h" ) | |||||||
| POCO_HEADERS_AUTO( SRCS ${HDRS_G}) | POCO_HEADERS_AUTO( SRCS ${HDRS_G}) | ||||||
|  |  | ||||||
| add_library(CppUnit ${SRCS}) | add_library(CppUnit ${SRCS}) | ||||||
|  | add_library(Poco::CppUnit ALIAS CppUnit) | ||||||
| set_target_properties(CppUnit | set_target_properties(CppUnit | ||||||
|     PROPERTIES |     PROPERTIES | ||||||
|     VERSION "1" SOVERSION "1" |     VERSION "1" SOVERSION "1" | ||||||
|     DEFINE_SYMBOL CppUnit_EXPORTS) |     OUTPUT_NAME PocoCppUnit | ||||||
| target_link_libraries(CppUnit Poco::Foundation) |     DEFINE_SYMBOL CppUnit_EXPORTS | ||||||
|  |     ) | ||||||
|  | target_link_libraries(CppUnit PUBLIC Poco::Foundation) | ||||||
| target_include_directories(CppUnit | target_include_directories(CppUnit | ||||||
|     PUBLIC |     PUBLIC | ||||||
|         $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |         $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> | ||||||
|         $<INSTALL_INTERFACE:include> |         $<INSTALL_INTERFACE:include> | ||||||
|     PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src |     PRIVATE | ||||||
|  |     	${CMAKE_CURRENT_SOURCE_DIR}/src | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
| if(NOT BUILD_SHARED_LIBS) | if(NOT BUILD_SHARED_LIBS) | ||||||
| @@ -24,7 +28,11 @@ if(NOT BUILD_SHARED_LIBS) | |||||||
|         PUBLIC |         PUBLIC | ||||||
|             POCO_STATIC |             POCO_STATIC | ||||||
|     ) |     ) | ||||||
|  | elseif(MINGW) | ||||||
|  | 	target_compile_definitions(CppUnit | ||||||
|  | 		PUBLIC | ||||||
|  | 			_DLL) | ||||||
| endif() | endif() | ||||||
| if (WIN32) |  | ||||||
|     target_compile_definitions(CppUnit PRIVATE _CRT_SECURE_NO_WARNINGS) | POCO_INSTALL(CppUnit) | ||||||
| endif (WIN32) |  | ||||||
|   | |||||||
| @@ -26,11 +26,15 @@ target_include_directories(Crypto | |||||||
|     PUBLIC |     PUBLIC | ||||||
|         $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |         $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> | ||||||
|         $<INSTALL_INTERFACE:include> |         $<INSTALL_INTERFACE:include> | ||||||
|     PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src |     PRIVATE  | ||||||
|  |         ${CMAKE_CURRENT_SOURCE_DIR}/src | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
| if(MSVC AND OPENSSL_USE_STATIC_LIBS) | if(MSVC AND POCO_DISABLE_INTERNAL_OPENSSL) | ||||||
|  |     target_compile_definitions(Crypto PUBLIC POCO_EXTERNAL_OPENSSL) | ||||||
|  | 	if(OPENSSL_USE_STATIC_LIBS) | ||||||
| 		target_link_libraries(Crypto PUBLIC ws2_32.lib Crypt32.lib) | 		target_link_libraries(Crypto PUBLIC ws2_32.lib Crypt32.lib) | ||||||
|  | 	endif() | ||||||
| endif() | endif() | ||||||
|  |  | ||||||
| POCO_INSTALL(Crypto) | POCO_INSTALL(Crypto) | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ set_target_properties( NetSSL | |||||||
|     DEFINE_SYMBOL NetSSL_EXPORTS |     DEFINE_SYMBOL NetSSL_EXPORTS | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
| target_link_libraries(NetSSL PUBLIC Poco::Crypto Poco::Net Poco::Util) | target_link_libraries(NetSSL PUBLIC Poco::Crypto Poco::Util Poco::Net) | ||||||
| target_include_directories(NetSSL | target_include_directories(NetSSL | ||||||
|     PUBLIC |     PUBLIC | ||||||
|         $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> |         $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> | ||||||
| @@ -29,6 +29,10 @@ target_include_directories(NetSSL | |||||||
|     PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src |     PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|  | if(MSVC AND POCO_DISABLE_INTERNAL_OPENSSL AND OPENSSL_USE_STATIC_LIBS) | ||||||
|  |     target_link_libraries(NetSSL PUBLIC ws2_32.lib Crypt32.lib) | ||||||
|  | endif() | ||||||
|  |  | ||||||
| POCO_INSTALL(NetSSL) | POCO_INSTALL(NetSSL) | ||||||
| POCO_GENERATE_PACKAGE(NetSSL) | POCO_GENERATE_PACKAGE(NetSSL) | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										79
									
								
								cmake/UseEmbeddedOpenSSL.cmake
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								cmake/UseEmbeddedOpenSSL.cmake
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | |||||||
|  |  | ||||||
|  | macro(copy_shared_ossl_lib path) | ||||||
|  | 	if(NOT EXISTS "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") | ||||||
|  | 	  execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) | ||||||
|  | 	endif() | ||||||
|  | 	file(GLOB OSSL_LIB_LIST LIST_DIRECTORIES false "${path}/*") | ||||||
|  | 	foreach(OSSL_LIB_FILE ${OSSL_LIB_LIST}) | ||||||
|  | 		execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${OSSL_LIB_FILE} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) | ||||||
|  | 		if(POCO_VERBOSE_MESSAGES) | ||||||
|  | 			message(STATUS "Copying embedded OpenSSL library from ${OSSL_LIB_FILE} to ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") | ||||||
|  | 		endif() | ||||||
|  | 	endforeach() | ||||||
|  | endmacro() | ||||||
|  |  | ||||||
|  | macro(copy_static_ossl_lib path) | ||||||
|  | 	if(NOT EXISTS "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") | ||||||
|  | 	  execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) | ||||||
|  | 	endif() | ||||||
|  | 	file(GLOB OSSL_LIB_LIST LIST_DIRECTORIES false "${path}/*") | ||||||
|  | 	foreach(OSSL_LIB_FILE ${OSSL_LIB_LIST}) | ||||||
|  | 		execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${OSSL_LIB_FILE} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}) | ||||||
|  | 		if(POCO_VERBOSE_MESSAGES) | ||||||
|  | 			message(STATUS "Copying embedded OpenSSL library from ${OSSL_LIB_FILE} to ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") | ||||||
|  | 		endif() | ||||||
|  | 	endforeach() | ||||||
|  | endmacro() | ||||||
|  |  | ||||||
|  | if(NOT EXISTS "${PROJECT_SOURCE_DIR}/openssl/build") | ||||||
|  |   message(STATUS "Use internal OpenSSL binaries but ${PROJECT_SOURCE_DIR}/openssl/build doesn't exists. Try to checkout ...") | ||||||
|  |   find_package(Git REQUIRED) | ||||||
|  |   execute_process( | ||||||
|  |       COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive --remote openssl  | ||||||
|  |       WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}  | ||||||
|  |       RESULT_VARIABLE EXITCODE) | ||||||
|  |   if(NOT "${EXITCODE}" STREQUAL "0") | ||||||
|  |     message(FATAL_ERROR "Checkout ${PROJECT_SOURCE_DIR}/openssl FAILED!") | ||||||
|  |   endif() | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | if( "${CMAKE_SIZEOF_VOID_P}" STREQUAL "8" ) | ||||||
|  |     set(_OPENSSL_MSVC_ARCH_SUFFIX "64") | ||||||
|  | else() | ||||||
|  |     set(_OPENSSL_MSVC_ARCH_SUFFIX "32") | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | if(BUILD_SHARED_LIBS) | ||||||
|  | 	option(OPENSSL_MSVC_STATIC_RT "Set ON to choose the MT version of the openssl lib" OFF) | ||||||
|  | 	option(OPENSSL_USE_STATIC_LIBS "Set ON to look for static openssl libraries" OFF) | ||||||
|  | else() | ||||||
|  | 	option(OPENSSL_MSVC_STATIC_RT "Set ON to choose the MT version of the openssl lib" ON) | ||||||
|  | 	option(OPENSSL_USE_STATIC_LIBS "Set ON to look for static openssl libraries" ON) | ||||||
|  | endif() | ||||||
|  |  | ||||||
|  | set(OPENSSL_ROOT_DIR "${PROJECT_SOURCE_DIR}/openssl/build") | ||||||
|  |  | ||||||
|  | if(OPENSSL_USE_STATIC_LIBS) | ||||||
|  | 	if(POCO_VERBOSE_MESSAGES) | ||||||
|  | 		message(STATUS "Use internal OpenSSL static binaries from ${OPENSSL_ROOT_DIR}/win${_OPENSSL_MSVC_ARCH_SUFFIX}/lib") | ||||||
|  | 	endif() | ||||||
|  | 	list(APPEND CMAKE_LIBRARY_PATH | ||||||
|  |           "${OPENSSL_ROOT_DIR}/win${_OPENSSL_MSVC_ARCH_SUFFIX}/lib/debug" | ||||||
|  |           "${OPENSSL_ROOT_DIR}/win${_OPENSSL_MSVC_ARCH_SUFFIX}/lib/release") | ||||||
|  | 	copy_static_ossl_lib("${OPENSSL_ROOT_DIR}/win${_OPENSSL_MSVC_ARCH_SUFFIX}/lib/debug") | ||||||
|  | 	copy_static_ossl_lib("${OPENSSL_ROOT_DIR}/win${_OPENSSL_MSVC_ARCH_SUFFIX}/lib/release") | ||||||
|  | else() | ||||||
|  | 	if(POCO_VERBOSE_MESSAGES) | ||||||
|  | 		message(STATUS "Use internal OpenSSL shared binaries from ${OPENSSL_ROOT_DIR}/win${_OPENSSL_MSVC_ARCH_SUFFIX}/bin") | ||||||
|  | 	endif() | ||||||
|  | 	list(APPEND CMAKE_LIBRARY_PATH | ||||||
|  |           "${OPENSSL_ROOT_DIR}/win${_OPENSSL_MSVC_ARCH_SUFFIX}/bin/debug" | ||||||
|  |           "${OPENSSL_ROOT_DIR}/win${_OPENSSL_MSVC_ARCH_SUFFIX}/bin/release") | ||||||
|  | 	copy_shared_ossl_lib("${OPENSSL_ROOT_DIR}/win${_OPENSSL_MSVC_ARCH_SUFFIX}/bin/debug") | ||||||
|  | 	copy_shared_ossl_lib("${OPENSSL_ROOT_DIR}/win${_OPENSSL_MSVC_ARCH_SUFFIX}/bin/release") | ||||||
|  | 	foreach(_OSSL_PATH "${OPENSSL_ROOT_DIR}/win${_OPENSSL_MSVC_ARCH_SUFFIX}/bin/debug" "${OPENSSL_ROOT_DIR}/win${_OPENSSL_MSVC_ARCH_SUFFIX}/bin/release") | ||||||
|  | 	       string(REPLACE "/" "\\" _OSSL_WIN_PATH ${_OSSL_PATH}) | ||||||
|  | 	       string(APPEND OPENSSL_PATH ${_OSSL_WIN_PATH} "\;") | ||||||
|  | 	endforeach() | ||||||
|  | 	set(INTERNAL_OPENSSL_PATH "PATH=%PATH%\;${OPENSSL_PATH}") | ||||||
|  | endif() | ||||||
		Reference in New Issue
	
	Block a user