From 35087e2c3f200639cf32c96e81cdbb08a5acb8eb Mon Sep 17 00:00:00 2001
From: gcontini <1121667+gcontini@users.noreply.github.com>
Date: 周六, 14 3月 2020 23:40:14 +0800
Subject: [PATCH] mingw

---
 src/library/CMakeLists.txt                    |    2 
 src/library/os/linux/os-linux.cpp             |    0 
 src/library/os/windows/isvm/BIOSReader.cpp    |    2 
 src/library/os/windows/network.cpp            |    6 +-
 src/library/os/windows/os-win.cpp             |   10 ++--
 src/library/ini/ConvertUTF.cpp                |    0 
 src/inspector/CMakeLists.txt                  |    3 +
 CMakeLists.txt                                |   39 +++++++++++++++----
 src/library/os/CMakeLists.txt                 |   11 +++--
 src/library/base/CMakeLists.txt               |    2 
 src/library/base/logger.h                     |    7 ++-
 src/library/os/windows/isvm/Native.h          |    2 
 test/library/CMakeLists.txt                   |    3 -
 src/library/base/logger.cpp                   |    3 +
 src/library/os/linux/network.cpp              |    2 +
 src/library/os/windows/signature_verifier.cpp |    6 +-
 .travis.yml                                   |    6 ++-
 cmake/toolchain-ubuntu-mingw64.cmake          |    4 ++
 src/CMakeLists.txt                            |    2 -
 src/library/os/openssl/signature_verifier.cpp |    6 +-
 test/CMakeLists.txt                           |    4 --
 21 files changed, 75 insertions(+), 45 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 73b9f8c..eadfc70 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -205,10 +205,12 @@
              - libboost-system-dev
              - libboost-thread-dev
              - libboost-date-time-dev
+             - python3-pip
              - doxygen
              - graphviz
      script: 
-        - make docs
+        - pip3 install sphinx sphinx_rtd_theme breathe sphinx-markdown-tables recommonmark sphinx-rtd-theme
+        - make documentation
      deploy:
         provider: pages
         skip_cleanup: true
@@ -216,7 +218,7 @@
         keep_history: false
         verbose: true
         target_branch: "gh-pages"
-        local_dir: "build/html"
+        local_dir: "build/docs/sphinx"
         on:
             branch: develop
 env:
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9af73aa..f464593 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,7 +20,7 @@
 project (licensecc 
 			VERSION 2.0.0
 			DESCRIPTION "Copy protection and licensing library" 
-			LANGUAGES C CXX)
+			LANGUAGES CXX)
 
 set(CMAKE_CXX_STANDARD 11)
 set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -46,7 +46,6 @@
 if(UNIX) #this is true for all the linux systems but not for cross compiling "linux->windows"
 	IF(${STATIC_RUNTIME})
 		set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static")
-		#SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a")
 	ENDIF(${STATIC_RUNTIME})
 	IF(NOT OPENSSL_FOUND)
 		MESSAGE(SEND_ERROR "Openssl required in Linux, please install it or specify -DOPENSSL_ROOT")
@@ -97,6 +96,10 @@
 	    if(MINGW)
 	        list(APPEND EXTERNAL_LIBS "-lcrypt32 -lbcrypt -lws2_32 -liphlpapi")
 	        SET(CMAKE_EXE_LINKER_FLAGS "-static")
+	        #super ugly bug when cross compiling in cmake 3.16
+	        #IF(CMAKE_CROSSCOMPILING)
+			#	link_directories(BEFORE /usr/lib/gcc/x86_64-w64-mingw32/7.3-win32)
+			#ENDIF()
 	    endif(MINGW)
 	endif(MSVC)
 	set(main_lib_dest "${PROJECT_NAME}")  
@@ -129,8 +132,6 @@
 message( STATUS "Install prefix      : " ${CMAKE_INSTALL_PREFIX})
 message( STATUS "Project name        : " ${LCC_PROJECT_NAME} )
 message( STATUS "Project base dir    : " ${LCC_PROJECTS_BASE_DIR}/${LCC_PROJECT_NAME} )
-get_property(inc_dirs DIRECTORY PROPERTY INCLUDE_DIRECTORIES)
-message( STATUS "Include dirs : " "${inc_dirs}" )
 
 add_subdirectory(src)
 
@@ -160,8 +161,13 @@
 	message(WARNING "Boost not found, disabling tests")
 ENDIF(Boost_FOUND)
 
+#################################
+# Documentation
+#################################
 find_package(Doxygen COMPONENTS dot)
-IF(Doxygen_FOUND)
+find_package(Sphinx)
+ 
+IF(Doxygen_FOUND AND Sphinx_FOUND)
     message(STATUS "Doxygen found, generating docs.")
     SET(DOXYGEN_EXCLUDE_PATTERNS "*/library/ini/*;*/doc/resources/*")
     SET(DOXYGEN_DISABLE_INDEX YES)
@@ -169,10 +175,25 @@
     SET(DOXYGEN_GENERATE_XML YES)
     SET(DOXYGEN_LAYOUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/doc/DoxygenLayout.xml")
 	doxygen_add_docs(docs doc src include/licensecc COMMENT "doxygen docs")
-	file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/doc/resources/" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/html")
-ELSE(Doxygen_FOUND)
-	message(STATUS "Doxygen not found, not generating docs.")
-ENDIF(Doxygen_FOUND)
+	#file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/doc/resources/" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/html")
+	
+	#file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/doc/sphinx/" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")
+	set(SPHINX_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/doc)
+	set(SPHINX_BUILD ${CMAKE_CURRENT_BINARY_DIR}/docs/sphinx)
+ 
+	add_custom_target(documentation
+                  COMMAND
+                  ${SPHINX_EXECUTABLE} -b html
+                  ${SPHINX_SOURCE} ${SPHINX_BUILD}
+                  -Dbreathe_projects.licensecc=${CMAKE_CURRENT_BINARY_DIR}/xml
+                  WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+                  COMMENT "Generating documentation with Sphinx")
+    add_dependencies(documentation docs)
+    
+ELSE(Doxygen_FOUND AND Sphinx_FOUND)
+	message(STATUS "Doxygen or Sphynx not found, not generating docs.")
+ENDIF(Doxygen_FOUND AND Sphinx_FOUND)
+
 
 install(DIRECTORY ${LCC_INCLUDE_DIR} DESTINATION include/${PROJECT_NAME})
 install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION include)
diff --git a/cmake/toolchain-ubuntu-mingw64.cmake b/cmake/toolchain-ubuntu-mingw64.cmake
index ebac7f8..e257856 100644
--- a/cmake/toolchain-ubuntu-mingw64.cmake
+++ b/cmake/toolchain-ubuntu-mingw64.cmake
@@ -13,11 +13,15 @@
 set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc)
 set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++)
 set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres)
+set(CMAKE_CXX_LINK_EXECUTABLE ${TOOLCHAIN_PREFIX}-g++)
 
 # target environment on the build host system
 #   set 1st to dir with the cross compiler's C/C++ headers/libs
 set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})
 
+#if(CMAKE_CROSSCOMPILING) #cross compiling for linux... a crazy bug on my system 
+#	link_directories(BEFORE /usr/lib/gcc/x86_64-w64-mingw32/7.3-win32)
+#endif(CMAKE_CROSSCOMPILING)
 # modify default behavior of FIND_XXX() commands to
 # search for headers/libs in the target environment and
 # search for programs in the build host environment
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 1c14fc3..6c4253f 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,5 +1,3 @@
-#for no reason overwrite it (maybe it's manually customized)
-
 IF (NOT LCC_PROJECT_MAGIC_NUM) 
 	set(LCC_PROJECT_MAGIC_NUM 0)  
 ENDIF (NOT LCC_PROJECT_MAGIC_NUM)
diff --git a/src/inspector/CMakeLists.txt b/src/inspector/CMakeLists.txt
index 4cd30c0..c8ff618 100644
--- a/src/inspector/CMakeLists.txt
+++ b/src/inspector/CMakeLists.txt
@@ -1,7 +1,8 @@
 
 ADD_EXECUTABLE(inspector inspector.cpp )
 
-target_link_libraries(inspector     licensecc_static
+target_link_libraries(inspector 
+     licensecc_static
  	 Boost::unit_test_framework 
      Boost::filesystem
      Boost::system)
\ No newline at end of file
diff --git a/src/library/CMakeLists.txt b/src/library/CMakeLists.txt
index 3ec8380..87693d2 100644
--- a/src/library/CMakeLists.txt
+++ b/src/library/CMakeLists.txt
@@ -7,7 +7,7 @@
     licensecc.cpp
     LicenseReader.cpp
     limits/license_verifier.cpp
-    ini/ConvertUTF.c
+    ini/ConvertUTF.cpp
     $<TARGET_OBJECTS:hw_identifier>
     $<TARGET_OBJECTS:locate>
     $<TARGET_OBJECTS:os>
diff --git a/src/library/base/CMakeLists.txt b/src/library/base/CMakeLists.txt
index 07ad88f..c92b37f 100644
--- a/src/library/base/CMakeLists.txt
+++ b/src/library/base/CMakeLists.txt
@@ -3,7 +3,7 @@
     StringUtils.cpp
     file_utils.cpp
     base64.cpp
-    logger.c
+    logger.cpp
 )
 
 if(CODE_COVERAGE AND UNIX)
diff --git a/src/library/base/logger.c b/src/library/base/logger.cpp
similarity index 97%
rename from src/library/base/logger.c
rename to src/library/base/logger.cpp
index 30db85d..580d1cf 100644
--- a/src/library/base/logger.c
+++ b/src/library/base/logger.cpp
@@ -5,6 +5,8 @@
 #include <stdarg.h>
 #include <time.h>
 
+#ifndef LOG_DISABLED
+
 #ifdef __unix__
 #include <unistd.h>
 #define MAX_PATH 255
@@ -69,3 +71,4 @@
 		logFile = NULL;
 	}
 }
+#endif
diff --git a/src/library/base/logger.h b/src/library/base/logger.h
index 4a516e4..9d9a128 100644
--- a/src/library/base/logger.h
+++ b/src/library/base/logger.h
@@ -1,12 +1,13 @@
 #ifndef logger_INCLUDED
 #define logger_INCLUDED
+#ifdef __cplusplus
+extern "C" {
+#endif
+#define LOG_DISABLED 1
 
 #ifndef LOG_DISABLED
 #include <errno.h>
 #include <string.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
 
 #define clean_errno() (errno == 0 ? "None" : strerror(errno))
 
diff --git a/src/library/ini/ConvertUTF.c b/src/library/ini/ConvertUTF.cpp
similarity index 100%
rename from src/library/ini/ConvertUTF.c
rename to src/library/ini/ConvertUTF.cpp
diff --git a/src/library/os/CMakeLists.txt b/src/library/os/CMakeLists.txt
index ca9ba79..487213a 100644
--- a/src/library/os/CMakeLists.txt
+++ b/src/library/os/CMakeLists.txt
@@ -7,7 +7,9 @@
 		    cpu_info_common.cpp
 		    linux/cpu_info.cpp
 		    linux/network.cpp
-		    linux/os-linux.c) 
+		    linux/os-linux.cpp) 
+		    
+		target_link_libraries(os PUBLIC OpenSSL::Crypto)
 	ELSE(UNIX)
   	    add_library(os OBJECT 
   	    cpu_info_common.cpp windows/cpu_info.cpp 
@@ -15,8 +17,10 @@
         execution_environment_common.cpp windows/execution_environment.cpp
   	    windows/isvm/Native.cpp
         windows/isvm/BIOSReader.cpp
-  	    windows/os-win.c 
+  	    windows/os-win.cpp
   	    windows/network.cpp)
+  	    
+  	    target_link_libraries(os PUBLIC OpenSSL::Crypto)
 	ENDIF(UNIX)
 ELSE(UNIX OR OPENSSL_FOUND)
 #windows no openssl
@@ -27,7 +31,7 @@
         execution_environment_common.cpp windows/execution_environment.cpp
         windows/isvm/Native.cpp
         windows/isvm/BIOSReader.cpp
-        windows/os-win.c 
+        windows/os-win.cpp
         windows/network.cpp)
 ENDIF(UNIX OR OPENSSL_FOUND)
 
@@ -35,6 +39,5 @@
 add_dependencies( os project_initialize )
 
 if(CODE_COVERAGE AND UNIX)
-	  MESSAGE(STATUS "Enabling code coverage")
 	  target_compile_options(os PUBLIC -O0 -g --coverage)
 endif(CODE_COVERAGE AND UNIX)
\ No newline at end of file
diff --git a/src/library/os/linux/network.cpp b/src/library/os/linux/network.cpp
index 475463b..1f7a76a 100644
--- a/src/library/os/linux/network.cpp
+++ b/src/library/os/linux/network.cpp
@@ -25,6 +25,8 @@
 #include <netpacket/packet.h>
 #include <stdio.h>
 #include <unordered_map>
+#include <string.h>
+#include <memory.h>
 
 #include "../../base/StringUtils.h"
 #include "../../base/logger.h"
diff --git a/src/library/os/linux/os-linux.c b/src/library/os/linux/os-linux.cpp
similarity index 100%
rename from src/library/os/linux/os-linux.c
rename to src/library/os/linux/os-linux.cpp
diff --git a/src/library/os/openssl/signature_verifier.cpp b/src/library/os/openssl/signature_verifier.cpp
index 7760a68..14063b9 100644
--- a/src/library/os/openssl/signature_verifier.cpp
+++ b/src/library/os/openssl/signature_verifier.cpp
@@ -10,9 +10,9 @@
 #include <stdlib.h>
 #include <errno.h>
 
-#ifdef _WIN32
-#include <windows.h>
-#endif
+//#ifdef _WIN32
+//#include <windows.h>
+//#endif
 
 #include <public_key.h>
 
diff --git a/src/library/os/windows/isvm/BIOSReader.cpp b/src/library/os/windows/isvm/BIOSReader.cpp
index 5d1b146..3300964 100644
--- a/src/library/os/windows/isvm/BIOSReader.cpp
+++ b/src/library/os/windows/isvm/BIOSReader.cpp
@@ -34,7 +34,7 @@
 //
 //	Windows
 //
-#include <Windows.h>
+#include <windows.h>
 #include <tchar.h>
 
 int8_t *parse_smbiod_content(int8_t *addr, int8_t **indexes, int32_t *count) {
diff --git a/src/library/os/windows/isvm/Native.h b/src/library/os/windows/isvm/Native.h
index 5124c8d..d22a908 100644
--- a/src/library/os/windows/isvm/Native.h
+++ b/src/library/os/windows/isvm/Native.h
@@ -1,7 +1,7 @@
 #pragma once
 
 #include <stdint.h>
-#include <Windows.h>
+#include <windows.h>
 
 struct RawSMBIOSData
 {
diff --git a/src/library/os/windows/network.cpp b/src/library/os/windows/network.cpp
index fd111aa..6334b9d 100644
--- a/src/library/os/windows/network.cpp
+++ b/src/library/os/windows/network.cpp
@@ -15,7 +15,7 @@
 #include <iphlpapi.h>
 #include <unordered_map>
 #include <stdio.h>
-#pragma comment(lib, "IPHLPAPI.lib")
+//#pragma comment(lib, "IPHLPAPI.lib")
 
 #include "../../base/StringUtils.h"
 #include "../../base/logger.h"
@@ -52,7 +52,7 @@
 	DWORD dwStatus;
 	int adapter_info_size;
 	PIP_ADAPTER_INFO pAdapterInfo;
-	DWORD dwBufLen = sizeof(IP_ADAPTER_INFO);  
+	DWORD dwBufLen = sizeof(IP_ADAPTER_INFO);
 
 	unsigned int i = 3;
 	do {
@@ -82,7 +82,7 @@
 	while (pAdapter) {
 		OsAdapterInfo ai = {};
 		strncpy(ai.description, pAdapter->Description,
-				min(sizeof(ai.description), MAX_ADAPTER_DESCRIPTION_LENGTH));
+				min((int)sizeof(ai.description), MAX_ADAPTER_DESCRIPTION_LENGTH));
 		memcpy(ai.mac_address, pAdapter->Address, 8);
 		translate(pAdapter->IpAddressList.IpAddress.String, ai.ipv4_address);
 		ai.type = IFACE_TYPE_ETHERNET;
diff --git a/src/library/os/windows/os-win.c b/src/library/os/windows/os-win.cpp
similarity index 90%
rename from src/library/os/windows/os-win.c
rename to src/library/os/windows/os-win.cpp
index ef56baf..d8d04eb 100644
--- a/src/library/os/windows/os-win.c
+++ b/src/library/os/windows/os-win.cpp
@@ -7,7 +7,7 @@
 #include <licensecc/datatypes.h>
 #include <iphlpapi.h>
 #include <stdio.h>
-#pragma comment(lib, "IPHLPAPI.lib")
+//#pragma comment(lib, "IPHLPAPI.lib")
 
 unsigned char* unbase64(const char* ascii, int len, int *flen);
 
@@ -64,8 +64,9 @@
 					if (diskInfos != NULL) {
 						if (ndrives < (int)*disk_info_size) {
 							diskInfos[ndrives].id = ndrives;
-							strncpy(diskInfos[ndrives].device, volName, min(MAX_PATH,sizeof(volName))-1);
-							strncpy(diskInfos[ndrives].label, fileSysName,min(sizeof(diskInfos[ndrives].label), sizeof(fileSysName)) - 1);
+							strncpy(diskInfos[ndrives].device, volName, cmin(MAX_PATH, sizeof(volName)) - 1);
+							strncpy(diskInfos[ndrives].label, fileSysName,
+									cmin(sizeof(diskInfos[ndrives].label), sizeof(fileSysName)) - 1);
 							memcpy(diskInfos[ndrives].disk_sn, &volSerial, sizeof(DWORD));
 							diskInfos[ndrives].preferred = (szSingleDrive[0] == 'C');
 						} else {
@@ -91,7 +92,7 @@
 		}
 		*disk_info_size = ndrives;
 	} else {
-		*disk_info_size = min(ndrives, *disk_info_size);
+		*disk_info_size = cmin(ndrives, *disk_info_size);
 	}
 	return return_value;
 }
@@ -105,5 +106,4 @@
 	}
 	return result;
 }
-
 
diff --git a/src/library/os/windows/signature_verifier.cpp b/src/library/os/windows/signature_verifier.cpp
index 5e12727..0c9c60f 100644
--- a/src/library/os/windows/signature_verifier.cpp
+++ b/src/library/os/windows/signature_verifier.cpp
@@ -15,7 +15,7 @@
 #include <wincrypt.h>
 #include <iphlpapi.h>
 #include <windows.h>
-#pragma comment(lib, "bcrypt.lib")
+//#pragma comment(lib, "bcrypt.lib")
 
 #include <public_key.h>
 #include "../../base/logger.h"
@@ -140,8 +140,8 @@
 
 	vector<uint8_t> signatureBlob = unbase64(signatureBuffer);
 	DWORD dwSigLen = (DWORD) signatureBlob.size();
-	BYTE* sigBlob = &signatureBlob[0]; 
-	
+	BYTE* sigBlob = &signatureBlob[0];
+
 	if (NT_SUCCESS(status = BCryptOpenAlgorithmProvider(&hSignAlg, BCRYPT_RSA_ALGORITHM, NULL, 0))) {
 		if ((result = readPublicKey(hSignAlg, &phKey)) == FUNC_RET_OK) {
 			BCRYPT_PKCS1_PADDING_INFO paddingInfo;
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index ec61aef..924c9f0 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,8 +1,5 @@
 #if we're here boost has been found
 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_DIR} ${CMAKE_CURRENT_BINARY_DIR})
-link_directories ( ${Boost_LIBRARY_DIR} )
 
 configure_file (
 	"${CMAKE_CURRENT_SOURCE_DIR}/../src/templates/licensecc_properties_test.h.in" 
@@ -11,7 +8,6 @@
 file(GENERATE OUTPUT "${CMAKE_BINARY_DIR}/include/$<CONFIG>/licensecc_properties_test.h" 
 		INPUT "${CMAKE_BINARY_DIR}/licensecc_properties_test.h.tmp")
 include_directories ( ${CMAKE_BINARY_DIR}/include/$<CONFIG> )
-
 
 add_subdirectory(library)
 add_subdirectory(functional)
\ No newline at end of file
diff --git a/test/library/CMakeLists.txt b/test/library/CMakeLists.txt
index 45bd810..55fe54f 100644
--- a/test/library/CMakeLists.txt
+++ b/test/library/CMakeLists.txt
@@ -50,9 +50,8 @@
 
 target_link_libraries(
  test_event_registry
- licensecc_static
+ base
  Boost::unit_test_framework 
- Boost::filesystem
  Boost::system
 )
 

--
Gitblit v1.9.1