[chore] Convert solution to CMake

[fix] Server to make it work with boost 1.77
This commit is contained in:
Peter Sykora 2021-09-12 05:48:18 +02:00
parent 05ff013204
commit f032657e33
19 changed files with 448 additions and 841 deletions

1
.gitignore vendored
View File

@ -13,3 +13,4 @@
/CCEngine/CCEngine.aps /CCEngine/CCEngine.aps
/CCEngine/build/ /CCEngine/build/
/CCEngineLoader/build/ /CCEngineLoader/build/
/out/

View File

@ -1,49 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2036
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CCEngine", "CCEngine\CCEngine.vcxproj", "{51637EB3-9942-43AE-9272-9DD85412EFC7}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libLicenseClient", "..\libLicenseClient\libLicenseClient.vcxproj", "{51345E59-83E5-4389-93A9-0131B40522B7}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libLicenseClientTest", "..\libLicenseClient\test\libLicenseClientTest.vcxproj", "{E781AE2E-4A02-4D63-9CAC-1AEBACD9CD73}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{44063F88-E25A-4C9D-AC11-9868D4CDD704}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CCEngineLoader", "CCEngineLoader\CCEngineLoader.vcxproj", "{B12702AD-ABFB-343A-A199-8E24837244A3}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{51637EB3-9942-43AE-9272-9DD85412EFC7}.Debug|x86.ActiveCfg = Debug|Win32
{51637EB3-9942-43AE-9272-9DD85412EFC7}.Debug|x86.Build.0 = Debug|Win32
{51637EB3-9942-43AE-9272-9DD85412EFC7}.Release|x86.ActiveCfg = Release|Win32
{51637EB3-9942-43AE-9272-9DD85412EFC7}.Release|x86.Build.0 = Release|Win32
{51345E59-83E5-4389-93A9-0131B40522B7}.Debug|x86.ActiveCfg = Debug|Win32
{51345E59-83E5-4389-93A9-0131B40522B7}.Debug|x86.Build.0 = Debug|Win32
{51345E59-83E5-4389-93A9-0131B40522B7}.Release|x86.ActiveCfg = Release|Win32
{51345E59-83E5-4389-93A9-0131B40522B7}.Release|x86.Build.0 = Release|Win32
{E781AE2E-4A02-4D63-9CAC-1AEBACD9CD73}.Debug|x86.ActiveCfg = Debug|Win32
{E781AE2E-4A02-4D63-9CAC-1AEBACD9CD73}.Debug|x86.Build.0 = Debug|Win32
{E781AE2E-4A02-4D63-9CAC-1AEBACD9CD73}.Release|x86.ActiveCfg = Release|Win32
{E781AE2E-4A02-4D63-9CAC-1AEBACD9CD73}.Release|x86.Build.0 = Release|Win32
{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x86.ActiveCfg = Debug|Win32
{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x86.Build.0 = Debug|Win32
{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x86.ActiveCfg = Release|Win32
{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{E781AE2E-4A02-4D63-9CAC-1AEBACD9CD73} = {44063F88-E25A-4C9D-AC11-9868D4CDD704}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
Qt5Version = $(DefaultQtVersion)
SolutionGuid = {4CBA44D0-8074-48F8-A6DD-5914FE3F0026}
EndGlobalSection
EndGlobal

View File

@ -1,177 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{51637EB3-9942-43AE-9272-9DD85412EFC7}</ProjectGuid>
<Keyword>Qt4VSv1.0</Keyword>
<RootNamespace>CCEngine</RootNamespace>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<PropertyGroup Condition="'$(QtMsBuild)'=='' or !Exists('$(QtMsBuild)\qt.targets')">
<QtMsBuild>$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')">
<Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." />
</Target>
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.props')">
<Import Project="$(QtMsBuild)\qt.props" />
</ImportGroup>
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="Shared" />
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="project-common.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="project-common.props" />
<Import Project="..\non-debugable.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_WIN32_WINNT=0x0601;WIN32;_SCL_SECURE_NO_WARNINGS;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpplatest</LanguageStandard>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5Widgetsd.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<QtMoc>
<IncludePath>%(AdditionalIncludeDirectories)</IncludePath>
<Define>_WIN32_WINNT=0x0601;WIN32;_SCL_SECURE_NO_WARNINGS;_DEBUG;%(PreprocessorDefinitions)</Define>
</QtMoc>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_WIN32_WINNT=0x0601;WIN32;_SCL_SECURE_NO_WARNINGS;NDEBUG;%(PreprocessorDefinitions);</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpplatest</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>false</GenerateDebugInformation>
<StripPrivateSymbols>YES</StripPrivateSymbols>
<AssemblyDebug>false</AssemblyDebug>
<ProgramDatabaseFile />
<FullProgramDatabaseFile>false</FullProgramDatabaseFile>
<AdditionalDependencies>qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<QtMoc>
<Define>_WIN32_WINNT=0x0601;WIN32;_SCL_SECURE_NO_WARNINGS;NDEBUG;%(PreprocessorDefinitions);</Define>
<IncludePath>%(AdditionalIncludeDirectories)</IncludePath>
</QtMoc>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="src\CCEngine.cpp" />
<ClCompile Include="src\CCLicenseController.cpp" />
<ClCompile Include="src\CCServer.cpp" />
<ClCompile Include="src\CCServerManager.cpp" />
<ClCompile Include="src\main.cpp" />
<ClCompile Include="src\ProcessUtils.cpp" />
<ClCompile Include="src\RunGuard.cpp" />
<ClCompile Include="src\SingleAppGuard.cpp" />
<ClCompile Include="src\SystemParamsDlg.cpp" />
<ClCompile Include="src\SystemParamsModel.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\RunGuard.h" />
<QtMoc Include="src\SingleAppGuard.h">
<OutputFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</OutputFile>
<ExecutionDescription Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc'ing %(Identity)...</ExecutionDescription>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)..\..\libLicenseClient\api;.\GeneratedFiles;$(Conan-qt-Root)\include\QtWidgets;$(ProjectDir)..\..\thirdparty\SingleApplication;$(USERPROFILE)\.conan\data\libzip\1.5.1\bincrafters\stable\package\dbbcb700636ed4dcef87df041870679358161bfa\include;$(USERPROFILE)\.conan\data\libcurl\7.61.1\bincrafters\stable\package\ad2605af224ca43af0e946078f4647e97ed84168\include;C:\.conan\uahlbm22\1\include;$(USERPROFILE)\.conan\data\cryptopp\7.0.0\bincrafters\stable\package\b786e9ece960c3a76378ca4d5b0d0e922f4cedc1\include;C:\.conan\hmd9bfi9\1\include;$(USERPROFILE)\.conan\data\bzip2\1.0.6\conan\stable\package\b786e9ece960c3a76378ca4d5b0d0e922f4cedc1\include;$(USERPROFILE)\.conan\data\OpenSSL\1.0.2o\conan\stable\package\312b5f5b013b9686179e3082c71ec55f20aea297\include;$(USERPROFILE)\.conan\data\zlib\1.2.11\conan\stable\package\b786e9ece960c3a76378ca4d5b0d0e922f4cedc1\include</IncludePath>
<Define Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">_WIN32_WINNT=0x0601;WIN32;_SCL_SECURE_NO_WARNINGS;_DEBUG;QAPPLICATION_CLASS=QApplication;_SILENCE_CXX17_ALLOCATOR_VOID_DEPRECATION_WARNING;_SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING;BOOST_USE_STATIC_LIBS;BOOST_ALL_NO_LIB;CURL_STATICLIB=1;_MBCS</Define>
<OutputFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</OutputFile>
<ExecutionDescription Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc'ing %(Identity)...</ExecutionDescription>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)..\..\libLicenseClient\api;.\GeneratedFiles;$(Conan-qt-Root)\include\QtWidgets;$(ProjectDir)..\..\thirdparty\SingleApplication;$(USERPROFILE)\.conan\data\libzip\1.5.1\bincrafters\stable\package\fc750fec580977876c697df1eba7f91b3923261b\include;$(USERPROFILE)\.conan\data\libcurl\7.61.1\bincrafters\stable\package\e37072ee7d8e70a6842093ddc8fc71f26526e91f\include;C:\.conan\4gwcmfvt\1\include;$(USERPROFILE)\.conan\data\cryptopp\7.0.0\bincrafters\stable\package\2bb76c9adac7b8cd7c5e3b377ac9f06934aba606\include;C:\.conan\btu8fxq0\1\include;$(USERPROFILE)\.conan\data\bzip2\1.0.6\conan\stable\package\2bb76c9adac7b8cd7c5e3b377ac9f06934aba606\include;$(USERPROFILE)\.conan\data\OpenSSL\1.0.2o\conan\stable\package\b02659d133a8131c5433777813f6385a05a7ae8a\include;$(USERPROFILE)\.conan\data\zlib\1.2.11\conan\stable\package\2bb76c9adac7b8cd7c5e3b377ac9f06934aba606\include</IncludePath>
<Define Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">_WIN32_WINNT=0x0601;WIN32;_SCL_SECURE_NO_WARNINGS;NDEBUG;QAPPLICATION_CLASS=QApplication;_SILENCE_CXX17_ALLOCATOR_VOID_DEPRECATION_WARNING;_SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING;BOOST_USE_STATIC_LIBS;BOOST_ALL_NO_LIB;CURL_STATICLIB=1;_MBCS</Define>
</QtMoc>
<QtMoc Include="src\SystemParamsModel.h" />
<QtMoc Include="src\SystemParamsDlg.h" />
<QtMoc Include="src\CCEngine.h" />
<QtMoc Include="src\CCLicenseController.h" />
<ClInclude Include="src\CCServer.h" />
<QtMoc Include="src\CCServerManager.h" />
<ClInclude Include="src\PlatformInit.h" />
<ClInclude Include="src\ProcessUtils.h" />
</ItemGroup>
<ItemGroup>
<QtUic Include="CCEngine.ui" />
<QtUic Include="SystemParameters.ui" />
</ItemGroup>
<ItemGroup>
<QtRcc Include="CCEngine.qrc" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="CCEngine.rc" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\libLicenseClient\libLicenseClient.vcxproj">
<Project>{51345e59-83e5-4389-93a9-0131b40522b7}</Project>
</ProjectReference>
<ProjectReference Include="..\CCEngineLoader\CCEngineLoader.vcxproj">
<Project>{b12702ad-abfb-343a-a199-8e24837244a3}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Image Include="CCEngine.ico" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
<Import Project="$(QtMsBuild)\qt.targets" />
</ImportGroup>
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<ProjectExtensions>
<VisualStudio>
<UserProperties MocDir=".\GeneratedFiles\$(ConfigurationName)" UicDir=".\GeneratedFiles" RccDir=".\GeneratedFiles" lupdateOptions="" lupdateOnBuild="0" lreleaseOptions="" Qt5Version_x0020_Win32="$(DefaultQtVersion)" MocOptions="" />
</VisualStudio>
</ProjectExtensions>
</Project>

View File

@ -1,110 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
<Filter Include="src">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Form Files">
<UniqueIdentifier>{60322e81-4907-489e-87af-66b7f5778503}</UniqueIdentifier>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
<ParseFiles>true</ParseFiles>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\CCEngine.cpp">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\CCServer.cpp">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\ProcessUtils.cpp">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\main.cpp">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\CCServerManager.cpp">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\SystemParamsDlg.cpp">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\SystemParamsModel.cpp">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\CCLicenseController.cpp">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\RunGuard.cpp">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="src\SingleAppGuard.cpp">
<Filter>src</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\CCServer.h">
<Filter>src</Filter>
</ClInclude>
<ClInclude Include="src\ProcessUtils.h">
<Filter>src</Filter>
</ClInclude>
<ClInclude Include="src\PlatformInit.h">
<Filter>src</Filter>
</ClInclude>
<ClInclude Include="src\RunGuard.h">
<Filter>src</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="CCEngine.rc">
<Filter>Resource Files</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<QtRcc Include="CCEngine.qrc">
<Filter>Resource Files</Filter>
</QtRcc>
</ItemGroup>
<ItemGroup>
<QtUic Include="CCEngine.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="SystemParameters.ui">
<Filter>Form Files</Filter>
</QtUic>
</ItemGroup>
<ItemGroup>
<QtMoc Include="src\CCEngine.h">
<Filter>src</Filter>
</QtMoc>
<QtMoc Include="src\CCServerManager.h">
<Filter>src</Filter>
</QtMoc>
<QtMoc Include="src\SystemParamsDlg.h">
<Filter>src</Filter>
</QtMoc>
<QtMoc Include="src\SystemParamsModel.h">
<Filter>src</Filter>
</QtMoc>
<QtMoc Include="src\CCLicenseController.h">
<Filter>src</Filter>
</QtMoc>
<QtMoc Include="src\SingleAppGuard.h">
<Filter>src</Filter>
</QtMoc>
</ItemGroup>
<ItemGroup>
<Image Include="CCEngine.ico">
<Filter>Resource Files</Filter>
</Image>
</ItemGroup>
</Project>

84
CCEngine/CMakeLists.txt Normal file
View File

@ -0,0 +1,84 @@
cmake_minimum_required (VERSION 3.8)
set(PROJECT_NAME CCEngine)
project (${PROJECT_NAME})
# Download automatically, you can also just copy the conan.cmake file
if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan")
file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/v0.16.1/conan.cmake"
"${CMAKE_BINARY_DIR}/conan.cmake"
EXPECTED_HASH SHA256=396e16d0f5eabdc6a14afddbcfff62a54a7ee75c6da23f32f7a31bc85db23484
TLS_VERIFY ON)
endif()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOUIC_SEARCH_PATHS ${PROJECT_SOURCE_DIR})
set(CMAKE_PREFIX_PATH ${PROJECT_BINARY_DIR})
include(${CMAKE_BINARY_DIR}/conan.cmake)
conan_cmake_run(CONANFILE conanfile.txt
BUILD missing
BASIC_SETUP)
################################################################################
# Source groups
################################################################################
set(resource
"CCEngine.ui"
"CCEngine.qrc"
)
source_group("resource" FILES ${resource})
set(src
"src/CCEngine.cpp"
"src/CCEngine.h"
"src/CCLicenseController.cpp"
"src/CCLicenseController.h"
"src/CCServer.cpp"
"src/CCServer.h"
"src/CCServerManager.cpp"
"src/CCServerManager.h"
"src/main.cpp"
"src/ProcessUtils.cpp"
"src/ProcessUtils.h"
"src/RunGuard.cpp"
"src/RunGuard.h"
"src/SingleAppGuard.cpp"
"src/SingleAppGuard.h"
"src/SystemParamsDlg.cpp"
"src/SystemParamsDlg.h"
"src/SystemParamsModel.cpp"
"src/SystemParamsModel.h"
"src/version.h"
)
source_group("src" FILES ${src})
set(ALL_FILES
${resource}
${src}
)
################################################################################
# Target
################################################################################
include_directories(${libLicenseClient_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} ${ALL_FILES})
# Find the QtWidgets library
message(STATUS "CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}")
find_package(Qt5 CONFIG REQUIRED COMPONENTS Core Gui Widgets)
find_package(yaml-cpp CONFIG)
find_package(boost CONFIG REQUIRED COMPONENTS log)
target_link_libraries(${PROJECT_NAME} libLicenseClient Qt5::Core Qt5::Gui Qt5::Widgets yaml-cpp::yaml-cpp Boost::log)

View File

@ -1,29 +1,23 @@
[requires] [requires]
libzip/1.8.0
libcurl/7.78.0
boost/1.77.0 boost/1.77.0
cryptopp/8.5.0
qt/5.15.2 qt/5.15.2
yaml-cpp/0.7.0 yaml-cpp/0.7.0
[generators] [generators]
visual_studio cmake_find_package_multi
qt
[options] [options]
libzip:shared=False
libcurl:shared=False
libcurl:with_openssl=False
libcurl:with_winssl=True
boost:shared=False boost:shared=False
cryptopp:shared=False
qt:shared=True qt:shared=True
yaml-cpp:shared=False
[imports] [imports]
bin, Qt5Cored.dll -> ./Debug @ root_package=qt bin, Qt5Cored.dll -> ./bin @ root_package=qt
bin, Qt5Guid.dll -> ./Debug @ root_package=qt bin, Qt5Guid.dll -> ./bin @ root_package=qt
bin, Qt5Widgetsd.dll -> ./Debug @ root_package=qt bin, Qt5Widgetsd.dll -> ./bin @ root_package=qt
bin, Qt5Core.dll -> ./Release @ root_package=qt bin, Qt5Core.dll -> ./bin @ root_package=qt
bin, Qt5Gui.dll -> ./Release @ root_package=qt bin, Qt5Gui.dll -> ./bin @ root_package=qt
bin, Qt5Widgets.dll -> ./Release @ root_package=qt bin, Qt5Widgets.dll -> ./bin @ root_package=qt
plugins/platforms, qwindowsd.dll -> ./Debug/platforms @ root_package=qt bin/archdatadir/plugins/platforms, qwindowsd.dll -> ./bin/platforms @ root_package=qt
plugins/platforms, qwindows.dll -> ./Release/platforms @ root_package=qt bin/archdatadir/plugins/platforms, qwindows.dll -> ./bin/platforms @ root_package=qt

View File

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="build\conanbuildinfo_multi.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\libLicenseClient\api;$(ProjectDir)GeneratedFiles;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>%(AdditionalOptions)</AdditionalOptions>
<PreprocessorDefinitions>_SILENCE_CXX17_ALLOCATOR_VOID_DEPRECATION_WARNING;_SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING;_SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalOptions>%(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View File

@ -1,15 +1,19 @@
#include "CCServer.h" #include "CCServer.h"
#include "CryptoUtils.h" #include "CryptoUtils.h"
//------------------------------------------------------------------------------
//
// Based on Beast example: Advanced server
//
//------------------------------------------------------------------------------
#include <boost/beast/core.hpp> #include <boost/beast/core.hpp>
#include <boost/beast/http.hpp> #include <boost/beast/http.hpp>
#include <boost/beast/version.hpp> #include <boost/beast/version.hpp>
#include <boost/asio/bind_executor.hpp> #include <boost/asio/bind_executor.hpp>
#include <boost/asio/ip/tcp.hpp> #include <boost/asio/dispatch.hpp>
#include <boost/asio/signal_set.hpp>
#include <boost/asio/strand.hpp> #include <boost/asio/strand.hpp>
#include <boost/asio/steady_timer.hpp>
#include <boost/config.hpp>
#include <boost/crc.hpp> #include <boost/crc.hpp>
#include <boost/iostreams/filtering_stream.hpp> #include <boost/iostreams/filtering_stream.hpp>
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>
@ -21,12 +25,18 @@
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>
#include <shared_mutex> #include <shared_mutex>
#include <memory>
#include <string>
#include <thread> #include <thread>
#include <unordered_map>
#include <vector> #include <vector>
namespace fs = boost::filesystem; // from <boost/filesystem.hpp> namespace fs = boost::filesystem; // from <boost/filesystem.hpp>
namespace beast = boost::beast; // from <boost/beast.hpp>
namespace http = beast::http; // from <boost/beast/http.hpp>
namespace net = boost::asio; // from <boost/asio.hpp>
using tcp = boost::asio::ip::tcp; // from <boost/asio/ip/tcp.hpp> using tcp = boost::asio::ip::tcp; // from <boost/asio/ip/tcp.hpp>
namespace http = boost::beast::http; // from <boost/beast/http.hpp>
static constexpr auto APIS_UINT8_MIN = std::numeric_limits<uint8_t>::min(); static constexpr auto APIS_UINT8_MIN = std::numeric_limits<uint8_t>::min();
static constexpr auto APIS_UINT8_MAX = std::numeric_limits<uint8_t>::max(); static constexpr auto APIS_UINT8_MAX = std::numeric_limits<uint8_t>::max();
@ -169,15 +179,15 @@ private:
}; };
// Return a reasonable mime type based on the extension of a file. // Return a reasonable mime type based on the extension of a file.
boost::beast::string_view beast::string_view
mime_type(boost::beast::string_view path) mime_type(beast::string_view path)
{ {
using boost::beast::iequals; using beast::iequals;
auto const ext = [&path] auto const ext = [&path]
{ {
auto const pos = path.rfind("."); auto const pos = path.rfind(".");
if (pos == boost::beast::string_view::npos) if (pos == beast::string_view::npos)
return boost::beast::string_view{}; return beast::string_view{};
return path.substr(pos); return path.substr(pos);
}(); }();
if (iequals(ext, ".htm")) return "text/html"; if (iequals(ext, ".htm")) return "text/html";
@ -208,13 +218,13 @@ mime_type(boost::beast::string_view path)
// The returned path is normalized for the platform. // The returned path is normalized for the platform.
std::string std::string
path_cat( path_cat(
boost::beast::string_view base, beast::string_view base,
boost::beast::string_view path) beast::string_view path)
{ {
if (base.empty()) if (base.empty())
return path.to_string(); return std::string(path);
std::string result = base.to_string(); std::string result(base);
#if BOOST_MSVC #ifdef BOOST_MSVC
char constexpr path_separator = '\\'; char constexpr path_separator = '\\';
if (result.back() == path_separator) if (result.back() == path_separator)
result.resize(result.size() - 1); result.resize(result.size() - 1);
@ -240,51 +250,51 @@ template<
class Send> class Send>
void void
handle_request( handle_request(
boost::beast::string_view doc_root, beast::string_view doc_root,
etag_cache& cache, etag_cache& cache,
http::request<Body, http::basic_fields<Allocator>>&& req, http::request<Body, http::basic_fields<Allocator>>&& req,
Send&& send) Send&& send)
{ {
// Returns a bad request response // Returns a bad request response
auto const bad_request = auto const bad_request =
[&req](boost::beast::string_view why) [&req](beast::string_view why)
{ {
http::response<http::string_body> res{ http::status::bad_request, req.version() }; http::response<http::string_body> res{ http::status::bad_request, req.version() };
res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::server, BOOST_BEAST_VERSION_STRING);
res.set(http::field::content_type, "text/html"); res.set(http::field::content_type, "text/html");
res.keep_alive(req.keep_alive()); res.keep_alive(req.keep_alive());
res.body() = why.to_string(); res.body() = std::string(why);
res.prepare_payload(); res.prepare_payload();
return res; return res;
}; };
// Returns a not found response // Returns a not found response
auto const not_found = auto const not_found =
[&req](boost::beast::string_view target) [&req](beast::string_view target)
{ {
http::response<http::string_body> res{ http::status::not_found, req.version() }; http::response<http::string_body> res{ http::status::not_found, req.version() };
res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::server, BOOST_BEAST_VERSION_STRING);
res.set(http::field::content_type, "text/html"); res.set(http::field::content_type, "text/html");
res.keep_alive(req.keep_alive()); res.keep_alive(req.keep_alive());
res.body() = "The resource '" + target.to_string() + "' was not found."; res.body() = "The resource '" + std::string(target) + "' was not found.";
res.prepare_payload(); res.prepare_payload();
return res; return res;
}; };
// Returns a server error response // Returns a server error response
auto const server_error = auto const server_error =
[&req](boost::beast::string_view what) [&req](beast::string_view what)
{ {
http::response<http::string_body> res{ http::status::internal_server_error, req.version() }; http::response<http::string_body> res{ http::status::internal_server_error, req.version() };
res.set(http::field::server, BOOST_BEAST_VERSION_STRING); res.set(http::field::server, BOOST_BEAST_VERSION_STRING);
res.set(http::field::content_type, "text/html"); res.set(http::field::content_type, "text/html");
res.keep_alive(req.keep_alive()); res.keep_alive(req.keep_alive());
res.body() = "An error occurred: '" + what.to_string() + "'"; res.body() = "An error occurred: '" + std::string(what) + "'";
res.prepare_payload(); res.prepare_payload();
return res; return res;
}; };
// Returns a server error response // Returns a not modified response
auto const not_modified = auto const not_modified =
[&req](boost::beast::string_view etag) [&req](boost::beast::string_view etag)
{ {
@ -304,7 +314,7 @@ template<
// Request path must be absolute and not contain "..". // Request path must be absolute and not contain "..".
if (req.target().empty() || if (req.target().empty() ||
req.target()[0] != '/' || req.target()[0] != '/' ||
req.target().find("..") != boost::beast::string_view::npos) req.target().find("..") != beast::string_view::npos)
return send(bad_request("Illegal request-target")); return send(bad_request("Illegal request-target"));
auto it = req.find(http::field::if_none_match); auto it = req.find(http::field::if_none_match);
@ -333,7 +343,7 @@ template<
} }
// Build the path to the requested file // Build the path to the requested file
boost::beast::string_view targetPath = req.target(); beast::string_view targetPath = req.target();
auto pos = targetPath.find_first_of('?'); auto pos = targetPath.find_first_of('?');
if (pos != std::string::npos) if (pos != std::string::npos)
{ {
@ -398,11 +408,12 @@ template<
// Report a failure // Report a failure
void void
fail(boost::system::error_code ec, char const* what) fail(beast::error_code ec, char const* what)
{ {
std::cerr << what << ": " << ec.message() << "\n"; std::cerr << what << ": " << ec.message() << "\n";
} }
// Handles an HTTP server connection // Handles an HTTP server connection
class http_session : public std::enable_shared_from_this<http_session> class http_session : public std::enable_shared_from_this<http_session>
{ {
@ -462,8 +473,7 @@ class http_session : public std::enable_shared_from_this<http_session>
// This holds a work item // This holds a work item
struct work_impl : work struct work_impl : work
{ {
// workaround. remove the value initialization after msvc fixes their bug http_session& self_;
http_session& self_ = *(http_session*)nullptr;
http::message<isRequest, Body, Fields> msg_; http::message<isRequest, Body, Fields> msg_;
work_impl( work_impl(
@ -478,20 +488,18 @@ class http_session : public std::enable_shared_from_this<http_session>
operator()() operator()()
{ {
http::async_write( http::async_write(
self_.socket_, self_.stream_,
msg_, msg_,
boost::asio::bind_executor( beast::bind_front_handler(
self_.strand_, &http_session::on_write,
std::bind( self_.shared_from_this(),
&http_session::on_write, msg_.need_eof()));
self_.shared_from_this(),
std::placeholders::_1,
msg_.need_eof())));
} }
}; };
// Allocate and store the work // Allocate and store the work
items_.push_back(std::make_unique<work_impl>(self_, std::move(msg))); items_.push_back(
boost::make_unique<work_impl>(self_, std::move(msg)));
// If there was no previous work, start this one // If there was no previous work, start this one
if (items_.size() == 1) if (items_.size() == 1)
@ -499,92 +507,75 @@ class http_session : public std::enable_shared_from_this<http_session>
} }
}; };
tcp::socket socket_; beast::tcp_stream stream_;
boost::asio::strand< beast::flat_buffer buffer_;
boost::asio::io_context::executor_type> strand_; std::shared_ptr<std::string const> doc_root_;
boost::asio::steady_timer timer_;
boost::beast::flat_buffer buffer_;
std::string const& doc_root_;
etag_cache& etag_cache_; etag_cache& etag_cache_;
http::request<http::string_body> req_;
queue queue_; queue queue_;
// The parser is stored in an optional container so we can
// construct it from scratch it at the beginning of each new message.
boost::optional<http::request_parser<http::string_body>> parser_;
public: public:
// Take ownership of the socket // Take ownership of the socket
explicit http_session(
http_session( tcp::socket&& socket,
tcp::socket socket, std::shared_ptr<std::string const> const& doc_root,
std::string const& doc_root, etag_cache& etag_cache)
etag_cache& etagCache) : stream_(std::move(socket))
: socket_(std::move(socket))
, strand_(socket_.get_executor())
, timer_(socket_.get_executor().context(),
(std::chrono::steady_clock::time_point::max)())
, doc_root_(doc_root) , doc_root_(doc_root)
, etag_cache_(etagCache) , etag_cache_(etag_cache)
, queue_(*this) , queue_(*this)
{ {
} }
// Start the asynchronous operation // Start the session
void void
run() run()
{ {
// Run the timer. The timer is operated // We need to be executing within a strand to perform async operations
// continuously, this simplifies the code. // on the I/O objects in this session. Although not strictly necessary
on_timer({}); // for single-threaded contexts, this example code is written to be
// thread-safe by default.
do_read(); net::dispatch(
stream_.get_executor(),
beast::bind_front_handler(
&http_session::do_read,
this->shared_from_this()));
} }
private:
void void
do_read() do_read()
{ {
// Set the timer // Construct a new parser for each message
timer_.expires_after(std::chrono::seconds(15)); parser_.emplace();
// Read a request // Apply a reasonable limit to the allowed size
http::async_read(socket_, buffer_, req_, // of the body in bytes to prevent abuse.
boost::asio::bind_executor( parser_->body_limit(10000);
strand_,
std::bind(
&http_session::on_read,
shared_from_this(),
std::placeholders::_1)));
}
// Called when the timer expires. // Set the timeout.
void stream_.expires_after(std::chrono::seconds(30));
on_timer(boost::system::error_code ec)
{
if (ec && ec != boost::asio::error::operation_aborted)
return fail(ec, "timer");
// Verify that the timer really expired since the deadline may have moved. // Read a request using the parser-oriented interface
if (timer_.expiry() <= std::chrono::steady_clock::now()) http::async_read(
{ stream_,
// Closing the socket cancels all outstanding operations. They buffer_,
// will complete with boost::asio::error::operation_aborted *parser_,
socket_.shutdown(tcp::socket::shutdown_both, ec); beast::bind_front_handler(
socket_.close(ec); &http_session::on_read,
return; shared_from_this()));
}
// Wait on the timer
timer_.async_wait(
boost::asio::bind_executor(
strand_,
std::bind(
&http_session::on_timer,
shared_from_this(),
std::placeholders::_1)));
} }
void void
on_read(boost::system::error_code ec) on_read(beast::error_code ec, std::size_t bytes_transferred)
{ {
// Happens when the timer closes the socket boost::ignore_unused(bytes_transferred);
if (ec == boost::asio::error::operation_aborted)
if (ec == beast::error::timeout)
return; return;
// This means they closed the connection // This means they closed the connection
@ -595,7 +586,7 @@ public:
return fail(ec, "read"); return fail(ec, "read");
// Send the response // Send the response
handle_request(doc_root_, etag_cache_, std::move(req_), queue_); handle_request(*doc_root_, etag_cache_, parser_->release(), queue_);
// If we aren't at the queue limit, try to pipeline another request // If we aren't at the queue limit, try to pipeline another request
if (!queue_.is_full()) if (!queue_.is_full())
@ -603,10 +594,11 @@ public:
} }
void void
on_write(boost::system::error_code ec, bool close) on_write(bool close, beast::error_code ec, std::size_t bytes_transferred)
{ {
// Happens when the timer closes the socket boost::ignore_unused(bytes_transferred);
if (ec == boost::asio::error::operation_aborted)
if (ec == beast::error::timeout)
return; return;
if (ec) if (ec)
@ -631,8 +623,8 @@ public:
do_close() do_close()
{ {
// Send a TCP shutdown // Send a TCP shutdown
boost::system::error_code ec; beast::error_code ec;
socket_.shutdown(tcp::socket::shutdown_send, ec); stream_.socket().shutdown(tcp::socket::shutdown_send, ec);
// At this point the connection is closed gracefully // At this point the connection is closed gracefully
} }
@ -643,23 +635,23 @@ public:
// Accepts incoming connections and launches the sessions // Accepts incoming connections and launches the sessions
class listener : public std::enable_shared_from_this<listener> class listener : public std::enable_shared_from_this<listener>
{ {
net::io_context& ioc_;
tcp::acceptor acceptor_; tcp::acceptor acceptor_;
tcp::socket socket_; std::shared_ptr<std::string const> doc_root_;
std::string const& doc_root_;
etag_cache& etag_cache_; etag_cache& etag_cache_;
public: public:
listener( listener(
boost::asio::io_context& ioc, net::io_context& ioc,
tcp::endpoint endpoint, tcp::endpoint endpoint,
std::string const& doc_root, std::shared_ptr<std::string const> const& doc_root,
etag_cache& etagCache) etag_cache& etagCache)
: acceptor_(ioc) : ioc_(ioc)
, socket_(ioc) , acceptor_(net::make_strand(ioc))
, doc_root_(doc_root) , doc_root_(doc_root)
, etag_cache_(etagCache) , etag_cache_(etagCache)
{ {
boost::system::error_code ec; beast::error_code ec;
// Open the acceptor // Open the acceptor
acceptor_.open(endpoint.protocol(), ec); acceptor_.open(endpoint.protocol(), ec);
@ -669,6 +661,14 @@ public:
return; return;
} }
// // Allow address reuse
// acceptor_.set_option(net::socket_base::reuse_address(true), ec);
// if (ec)
// {
// fail(ec, "set_option");
// return;
// }
// Bind to the server address // Bind to the server address
acceptor_.bind(endpoint, ec); acceptor_.bind(endpoint, ec);
if (ec) if (ec)
@ -679,7 +679,7 @@ public:
// Start listening for connections // Start listening for connections
acceptor_.listen( acceptor_.listen(
boost::asio::socket_base::max_listen_connections, ec); net::socket_base::max_listen_connections, ec);
if (ec) if (ec)
{ {
fail(ec, "listen"); fail(ec, "listen");
@ -691,24 +691,31 @@ public:
void void
run() run()
{ {
if (!acceptor_.is_open()) // We need to be executing within a strand to perform async operations
return; // on the I/O objects in this session. Although not strictly necessary
do_accept(); // for single-threaded contexts, this example code is written to be
// thread-safe by default.
net::dispatch(
acceptor_.get_executor(),
beast::bind_front_handler(
&listener::do_accept,
this->shared_from_this()));
} }
private:
void void
do_accept() do_accept()
{ {
// The new connection gets its own strand
acceptor_.async_accept( acceptor_.async_accept(
socket_, net::make_strand(ioc_),
std::bind( beast::bind_front_handler(
&listener::on_accept, &listener::on_accept,
shared_from_this(), shared_from_this()));
std::placeholders::_1));
} }
void void
on_accept(boost::system::error_code ec) on_accept(beast::error_code ec, tcp::socket socket)
{ {
if (ec) if (ec)
{ {
@ -716,9 +723,9 @@ public:
} }
else else
{ {
// Create the http_session and run it // Create the http session and run it
std::make_shared<http_session>( std::make_shared<http_session>(
std::move(socket_), std::move(socket),
doc_root_, doc_root_,
etag_cache_)->run(); etag_cache_)->run();
} }
@ -759,7 +766,7 @@ public:
std::make_shared<listener>( std::make_shared<listener>(
m_ioc, m_ioc,
m_endpoint, m_endpoint,
m_docRoot, std::make_shared<std::string>(m_docRoot),
m_etagCache)->run(); m_etagCache)->run();
// Run the I/O service on the requested number of threads // Run the I/O service on the requested number of threads

View File

@ -1,147 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{B12702AD-ABFB-343A-A199-8E24837244A3}</ProjectGuid>
<Keyword>Qt4VSv1.0</Keyword>
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v141</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<PropertyGroup Condition="'$(QtMsBuild)'=='' or !Exists('$(QtMsBuild)\qt.targets')">
<QtMsBuild>$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') or !Exists('$(QtMsBuild)\qt.props')">
<Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." />
</Target>
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.props')">
<Import Project="$(QtMsBuild)\qt.props" />
</ImportGroup>
<ImportGroup Label="ExtensionSettings" />
<ImportGroup Label="Shared" />
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="project-common.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="project-common.props" />
<Import Project="..\non-debugable.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_WIN32_WINNT=0x0601;WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpplatest</LanguageStandard>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5Widgetsd.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<QtMoc>
<IncludePath>%(AdditionalIncludeDirectories)</IncludePath>
<Define>_WIN32_WINNT=0x0601;WIN32;_DEBUG;QT_DLL;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;CURL_STATICLIB;_SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING;_SILENCE_CXX17_ALLOCATOR_VOID_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;_SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING;_MBCS</Define>
</QtMoc>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_WIN32_WINNT=0x0601;WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpplatest</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>false</GenerateDebugInformation>
<StripPrivateSymbols>YES</StripPrivateSymbols>
<AssemblyDebug>false</AssemblyDebug>
<ProgramDatabaseFile />
<FullProgramDatabaseFile>false</FullProgramDatabaseFile>
<AdditionalDependencies>qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<QtMoc>
<Define>_WIN32_WINNT=0x0601;WIN32;NDEBUG;BOOST_EXCEPTION_DISABLE;QT_NO_DEBUG;QT_DLL;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;CURL_STATICLIB;_SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING;_SILENCE_CXX17_ALLOCATOR_VOID_DEPRECATION_WARNING;_SILENCE_CXX17_OLD_ALLOCATOR_MEMBERS_DEPRECATION_WARNING;_SILENCE_CXX17_RESULT_OF_DEPRECATION_WARNING;_MBCS</Define>
<IncludePath>%(AdditionalIncludeDirectories)</IncludePath>
</QtMoc>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="CCEngineLoader.cpp" />
<ClCompile Include="main.cpp" />
<ClCompile Include="UpdateWorker.cpp" />
</ItemGroup>
<ItemGroup>
<QtMoc Include="CCEngineLoader.h" />
</ItemGroup>
<ItemGroup>
<QtUic Include="CCEngineLoader.ui" />
</ItemGroup>
<ItemGroup>
<QtRcc Include="CCEngineLoader.qrc" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="CCEngineLoader.rc" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\libLicenseClient\libLicenseClient.vcxproj">
<Project>{51345e59-83e5-4389-93a9-0131b40522b7}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<QtMoc Include="UpdateWorker.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Condition="Exists('$(QtMsBuild)\qt.targets')">
<Import Project="$(QtMsBuild)\qt.targets" />
</ImportGroup>
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<ProjectExtensions>
<VisualStudio>
<UserProperties MocDir=".\GeneratedFiles\$(ConfigurationName)" UicDir=".\GeneratedFiles" RccDir=".\GeneratedFiles" lupdateOptions="" lupdateOnBuild="0" lreleaseOptions="" Qt5Version_x0020_Win32="$(DefaultQtVersion)" MocOptions="" />
</VisualStudio>
</ProjectExtensions>
</Project>

View File

@ -1,64 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier>
<Extensions>qrc;*</Extensions>
<ParseFiles>false</ParseFiles>
</Filter>
<Filter Include="Form Files">
<UniqueIdentifier>{99349809-55BA-4b9d-BF79-8FDBB0286EB3}</UniqueIdentifier>
<Extensions>ui</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{D9D6E242-F8AF-46E4-B9FD-80ECBC20BA3E}</UniqueIdentifier>
<Extensions>qrc;*</Extensions>
<ParseFiles>false</ParseFiles>
</Filter>
<Filter Include="Generated Files">
<UniqueIdentifier>{71ED8ED8-ACB9-4CE9-BBE1-E00B30144E11}</UniqueIdentifier>
<Extensions>moc;h;cpp</Extensions>
<SourceControlFiles>False</SourceControlFiles>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="main.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="CCEngineLoader.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="UpdateWorker.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<QtMoc Include="CCEngineLoader.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="UpdateWorker.h">
<Filter>Header Files</Filter>
</QtMoc>
</ItemGroup>
<ItemGroup>
<QtUic Include="CCEngineLoader.ui">
<Filter>Form Files</Filter>
</QtUic>
</ItemGroup>
<ItemGroup>
<QtRcc Include="CCEngineLoader.qrc">
<Filter>Resource Files</Filter>
</QtRcc>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="CCEngineLoader.rc" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,65 @@
cmake_minimum_required (VERSION 3.8)
set(PROJECT_NAME CCEngineLoader)
project (${PROJECT_NAME})
# Download automatically, you can also just copy the conan.cmake file
if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan.cmake")
message(STATUS "Downloading conan.cmake from https://github.com/conan-io/cmake-conan")
file(DOWNLOAD "https://raw.githubusercontent.com/conan-io/cmake-conan/v0.16.1/conan.cmake"
"${CMAKE_BINARY_DIR}/conan.cmake"
EXPECTED_HASH SHA256=396e16d0f5eabdc6a14afddbcfff62a54a7ee75c6da23f32f7a31bc85db23484
TLS_VERIFY ON)
endif()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_PREFIX_PATH ${PROJECT_BINARY_DIR})
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
include(${CMAKE_BINARY_DIR}/conan.cmake)
conan_cmake_run(CONANFILE conanfile.txt
BUILD missing
BASIC_SETUP)
################################################################################
# Source groups
################################################################################
set(resource
"CCEngineLoader.ui"
"CCEngineLoader.qrc"
)
source_group("resource" FILES ${resource})
set(src
"CCEngineLoader.cpp"
"CCEngineLoader.h"
"main.cpp"
"UpdateWorker.cpp"
"UpdateWorker.h"
)
source_group("src" FILES ${src})
set(ALL_FILES
${resource}
${src}
)
################################################################################
# Target
################################################################################
include_directories(${libLicenseClient_INCLUDE_DIRS})
add_executable(${PROJECT_NAME} ${ALL_FILES})
# Find the QtWidgets library
message(STATUS "CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}")
find_package(Qt5 CONFIG REQUIRED COMPONENTS Core Gui Widgets)
target_link_libraries(${PROJECT_NAME} libLicenseClient Qt5::Core Qt5::Gui Qt5::Widgets)

View File

@ -1,18 +1,11 @@
[requires] [requires]
libzip/1.8.0
libcurl/7.78.0
boost/1.77.0 boost/1.77.0
cryptopp/8.5.0
qt/5.15.2 qt/5.15.2
[generators] [generators]
visual_studio cmake_find_package_multi
qt
[options] [options]
libzip:shared=False
libcurl:shared=False
libcurl:with_openssl=False
libcurl:with_winssl=True
boost:shared=False boost:shared=False
cryptopp:shared=False
qt:shared=True qt:shared=True

View File

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="build\conanbuildinfo_multi.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(ProjectDir)..\..\libLicenseClient\api;$(ProjectDir)GeneratedFiles;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalOptions>%(AdditionalOptions)</AdditionalOptions>
</ClCompile>
<Link>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalOptions>%(AdditionalOptions)</AdditionalOptions>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

31
CMakeLists.txt Normal file
View File

@ -0,0 +1,31 @@
cmake_minimum_required(VERSION 3.8)
# You can tweak some common (for all subprojects) stuff here. For example:
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
set(CMAKE_DISABLE_SOURCE_CHANGES ON)
if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
message(SEND_ERROR "In-source builds are not allowed.")
endif ()
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_COLOR_MAKEFILE ON)
# Remove 'lib' prefix for shared libraries on Windows
if (WIN32)
set(CMAKE_SHARED_LIBRARY_PREFIX "")
ADD_DEFINITIONS(/bigobj)
endif ()
# Force 8.1 SDK, to keep it compatible with win7
if (${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Windows")
set (CMAKE_SYSTEM_VERSION 8.1 CACHE TYPE INTERNAL FORCE)
endif()
# When done tweaking common stuff, configure the components (subprojects).
# NOTE: The order matters! The most independent ones should go first.
add_subdirectory(../libLicenseClient libLicenseClient)
add_subdirectory(../libLicenseClient/test libLicenseClientTest)
add_subdirectory(CCEngine)
add_subdirectory(CCEngineLoader)

124
CMakePresets.json Normal file
View File

@ -0,0 +1,124 @@
{
"version": 3,
"cmakeMinimumRequired": {
"major": 3,
"minor": 19,
"patch": 0
},
"configurePresets": [
{
"name": "linux-gcc-debug",
"displayName": "Linux GCC Debug",
"description": "Sets Ninja generator, compilers, build and install directory, debug build type",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"CMAKE_C_COMPILER": "gcc",
"CMAKE_CXX_COMPILER": "c++"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"hostOS": [ "Linux" ]
},
"microsoft.com/VisualStudioRemoteSettings/CMake/1.0": {
"sourceDir": "$env{HOME}/.vs/$ms{projectDirName}"
}
}
},
{
"name": "linux-gcc-release",
"displayName": "Linux GCC Release",
"description": "Sets Ninja generator, compilers, build and install directory, debug build type",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"CMAKE_C_COMPILER": "gcc",
"CMAKE_CXX_COMPILER": "c++"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"hostOS": [ "Linux" ]
},
"microsoft.com/VisualStudioRemoteSettings/CMake/1.0": {
"sourceDir": "$env{HOME}/.vs/$ms{projectDirName}"
}
}
},
{
"name": "WSL-gcc-debug",
"displayName": "Linux Debug",
"description": "Target the Windows Subsystem for Linux (WSL) or a remote Linux system.",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": { "hostOS": [ "Linux" ] },
"microsoft.com/VisualStudioRemoteSettings/CMake/1.0": { "sourceDir": "$env{HOME}/.vs/$ms{projectDirName}" }
}
},
{
"name": "win64-debug",
"displayName": "Windows x64 Debug",
"description": "Target Windows with the Visual Studio development environment.",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"CMAKE_SYSTEM_VERSION": "8.1"
},
"vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { "hostOS": [ "Windows" ] } }
},
{
"name": "win64-release",
"displayName": "Windows x64 Release",
"description": "Target Windows with the Visual Studio development environment.",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"CMAKE_SYSTEM_VERSION": "8.1"
},
"vendor": { "microsoft.com/VisualStudioSettings/CMake/1.0": { "hostOS": [ "Windows" ] } }
}
],
"buildPresets": [
{
"name": "linux-gcc-debug",
"configurePreset": "linux-gcc-debug"
},
{
"name": "linux-gcc-release",
"configurePreset": "linux-gcc-release"
},
{
"name": "win64-debug",
"configurePreset": "win64-debug"
},
{
"name": "win64-release",
"configurePreset": "win64-release"
}
],
"vendor": {
"example.com/ExampleIDE/1.0": {
"autoFormat": false
}
}
}

View File

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalOptions>%(AdditionalOptions)</AdditionalOptions>
<CreateHotpatchableImage>false</CreateHotpatchableImage>
<DebugInformationFormat>None</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalOptions>%(AdditionalOptions)</AdditionalOptions>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>false</GenerateDebugInformation>
<StripPrivateSymbols>YES</StripPrivateSymbols>
<AssemblyDebug>false</AssemblyDebug>
<ProgramDatabaseFile />
<FullProgramDatabaseFile>false</FullProgramDatabaseFile>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View File

@ -1,35 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>QT_DLL;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;$(ProjectDir)..\..\libLicenseClient\api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>$(QTDIR)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
<QtMoc>
<InputFile>%(FullPath)</InputFile>
<OutputFile>.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</OutputFile>
<DynamicSource>output</DynamicSource>
<ExecutionDescription>Moc'ing %(Identity)...</ExecutionDescription>
<IncludePath>.\GeneratedFiles;.;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName)\.;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtWidgets;%(IncludePath)</IncludePath>
<Define>QT_DLL;QT_CORE_LIB;QT_GUI_LIB;QT_WIDGETS_LIB;%(Define)</Define>
<QTDIR>$(QTDIR)</QTDIR>
</QtMoc>
<QtUic>
<ExecutionDescription>Uic'ing %(Identity)...</ExecutionDescription>
<OutputFile>.\GeneratedFiles\ui_%(Filename).h</OutputFile>
</QtUic>
<QtRcc>
<ExecutionDescription>Rcc'ing %(Identity)...</ExecutionDescription>
<OutputFile>.\GeneratedFiles\qrc_%(Filename).cpp</OutputFile>
</QtRcc>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View File

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="..\thirdparty\qt-5.10.1\qt.props" />
<Import Project="qt-ui-common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalDependencies>qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5Widgetsd.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View File

@ -1,23 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets">
<Import Project="..\thirdparty\qt-5.10.1\qt.props" />
<Import Project="qt-ui-common.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>QT_NO_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalDependencies>qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<QtMoc>
<Define>QT_NO_DEBUG;NDEBUG;%(Define)</Define>
</QtMoc>
</ItemDefinitionGroup>
<ItemGroup />
</Project>