From 6ec221e44edbc11321d591f969fac584370306c4 Mon Sep 17 00:00:00 2001 From: Gabriele Contini <contini.mailing@gmail.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