From 3a480a3fb9c8ab9943d47239ad21df2ed9a87eb7 Mon Sep 17 00:00:00 2001
From: gcontini <1121667+gcontini@users.noreply.github.com>
Date: 周日, 01 12月 2019 20:24:04 +0800
Subject: [PATCH] mingw cross compile add openssl

---
 CMakeLists.txt |   66 ++++++++++++++++----------------
 1 files changed, 33 insertions(+), 33 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3f3bd3e..70fb867 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -23,13 +23,14 @@
 ENDIF(NOT LCC_PROJECTS_BASE_DIR)
 
 project (licensecc C CXX )
-SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
 SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")
 
 #find lcc executable or build it.
 find_package(lcc REQUIRED) 
 
-#Not sure about this. My system doesn't support binfmt misc
+#In case the build system doesn't support binfmt misc
 IF( ( CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" ) AND CMAKE_CROSSCOMPILING AND NOT DEFINED CMAKE_CROSSCOMPILING_EMULATOR )
 	SET(CMAKE_CROSSCOMPILING_EMULATOR "wine")	
 ENDIF()
@@ -39,7 +40,7 @@
 	target_architecture( TARGET_ARCHITECTURE )
 	message(STATUS "architecture detected: ${TARGET_ARCHITECTURE}")
 	
-	#Boost > 3.15 handle the /MD flag more nicely than this
+	#cmake > 3.15 handle the /MD flag more nicely than this
 	if(${STATIC_RUNTIME})
 		string(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
 		string(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}")
@@ -51,32 +52,38 @@
 	add_definitions("/D _CRT_SECURE_NO_WARNINGS")
 else(MSVC)
     if(MINGW)
-        list(APPEND EXTERNAL_LIBS "-lcrypt32 -lws2_32 -liphlpapi")
+        list(APPEND EXTERNAL_LIBS "-lcrypt32 -lbcrypt -lws2_32 -liphlpapi")
         SET(CMAKE_EXE_LINKER_FLAGS "-static")
     endif(MINGW)
 endif(MSVC)
 
-if(UNIX) #this is true for all the linux systems but not for cross compiling "linux->windows"
-	#find a static version of openssl crypto library
-	SET ( OPENSSL_USE_STATIC_LIBS ON )
-	find_package(OpenSSL REQUIRED COMPONENTS Crypto)
+SET ( OPENSSL_USE_STATIC_LIBS ON )
+find_package(OpenSSL COMPONENTS Crypto)
+IF(OPENSSL_FOUND)
+	add_definitions(-DHAS_OPENSSL)
 	include_directories(${OPENSSL_INCLUDE_DIR})
-    #list(APPEND EXTERNAL_LIBS ${OPENSSL_CRYPTO_LIBRARY})
-    #find_package(Threads)
-	#if(THREADS_HAVE_PTHREAD_ARG)
-  	#	list(APPEND EXTERNAL_LIBS "-pthread")
-	#else(THREADS_HAVE_PTHREAD_ARG)
-	#	if(CMAKE_THREAD_LIBS_INIT)
-  	#		 list(APPEND EXTERNAL_LIBS "${CMAKE_THREAD_LIBS_INIT}")
-	#	endif()
-	#endif(THREADS_HAVE_PTHREAD_ARG)
-	MESSAGE(STATUS "Found openssl version ${OPENSSL_VERSION} ")
-	#Zlib required when openssl version < 1.0.1f
-	#SET ( ZLIB_USE_STATIC_LIBS ON )
-	#find_package(ZLIB REQUIRED)
-	#MESSAGE(STATUS "Found zlib version ${ZLIB_VERSION} ")
+	MESSAGE(STATUS "Found openssl version ${OPENSSL_VERSION}")
+ELSE(OPENSSL_FOUND)
+	MESSAGE(STATUS "OpenSSL not found")
+ENDIF(OPENSSL_FOUND)
+
+if(UNIX) #this is true for all the linux systems but not for cross compiling "linux->windows"
+	IF(NOT OPENSSL_FOUND)
+		MESSAGE(SEND_ERROR "Openssl required in Linux, please install it or specify -DOPENSSL_ROOT")
+	ENDIF(NOT OPENSSL_FOUND)
+	
+    find_package(Threads)
+	if(THREADS_HAVE_PTHREAD_ARG)
+  		list(APPEND EXTERNAL_LIBS "-pthread")
+	else(THREADS_HAVE_PTHREAD_ARG)
+		if(CMAKE_THREAD_LIBS_INIT)
+  			 list(APPEND EXTERNAL_LIBS "${CMAKE_THREAD_LIBS_INIT}")
+		endif()
+	endif(THREADS_HAVE_PTHREAD_ARG)
+	
 	find_program( MEMORYCHECK_COMMAND valgrind )
 	set( MEMORYCHECK_COMMAND_OPTIONS "--trace-children=yes --leak-check=full" )
+	
 	if(USE_DBUS_IDENTIFIER)
 	    FIND_PACKAGE(Dbus REQUIRED)
 	    add_definitions(-DUSE_DBUS)
@@ -84,12 +91,9 @@
 	    include_directories(${DBUS_ARCH_INCLUDE_DIR})
 	    list(APPEND EXTERNAL_LIBS ${DBUS_LIBRARIES})
 	endif(USE_DBUS_IDENTIFIER)    
-	if(NOT MINGW)
- 		list(APPEND EXTERNAL_LIBS ${CMAKE_DL_LIBS}) 
-	endif(NOT MINGW)
 endif(UNIX)
 
-
+#initialize project
 #load the current project from files or find it from environment variables or create a default one
 set(LCC_INCLUDE_DIR "${LCC_PROJECTS_BASE_DIR}/${LCC_PROJECT_NAME}/include/${PROJECT_NAME}/${LCC_PROJECT_NAME}" )
 set(LCC_PROJECT_PUBLIC_KEY "${LCC_INCLUDE_DIR}/public_key.h" )
@@ -101,10 +105,9 @@
   COMMENT "generating ${LCC_PROJECT_PUBLIC_KEY}"
   USES_TERMINAL
 )
-
 add_custom_target(project_initialize DEPENDS "${LCC_PROJECT_PUBLIC_KEY}" "${LCC_PROJECT_PRIVATE_KEY}")
 
-include_directories( ${LCC_INCLUDE_DIR} ${CMAKE_BINARY_DIR} )
+include_directories( ${LCC_INCLUDE_DIR} ${CMAKE_BINARY_DIR} "${CMAKE_CURRENT_SOURCE_DIR}/include")
 
 message( STATUS "C compiler        : " ${CMAKE_C_COMPILER})
 message( STATUS "C compiler flags  : " ${CMAKE_C_FLAGS})
@@ -119,6 +122,7 @@
 message( STATUS "Project name      : " ${LCC_PROJECT_NAME} )
 message( STATUS "Project base dir  : " ${LCC_PROJECTS_BASE_DIR}/${LCC_PROJECT_NAME} )
 
+install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION include)
 add_subdirectory(src)
 
 #boost is required only for tests
@@ -133,7 +137,7 @@
 	    message(STATUS "Compiler architecture: ${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}")
 endif()
 SET( Boost_USE_STATIC_LIBS ON )
-find_package(Boost REQUIRED COMPONENTS date_time unit_test_framework program_options system filesystem)
+find_package(Boost COMPONENTS unit_test_framework system filesystem)
 
 #if boost is found enable tests
 IF(Boost_FOUND)
@@ -141,12 +145,8 @@
 	IF(BUILD_TESTING)
 		SET(BUILDNAME "${BUILDNAME}" CACHE STRING "Name of build on the dashboard")
 		MARK_AS_ADVANCED(BUILDNAME)
-		add_definitions(-DBOOST_ALL_NO_LIB) #Disable Boost Microsoft magic, all dependencies are handled by cmake
-		add_definitions(-DBOOST_LIB_DIAGNOSTIC) #Check it is really disabled
-		include_directories(${Boost_INCLUDE_DIRS}) 
 		add_subdirectory(test)
 	ENDIF(BUILD_TESTING)
 ELSE(Boost_FOUND)
 	message(WARNING "Boost not found, disabling tests")
 ENDIF(Boost_FOUND)
-

--
Gitblit v1.9.1