From 4951670e3d3b8bdd7ccaa05b87f365207895431b Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Fri, 27 Aug 2021 23:46:16 +0800 Subject: [PATCH] Optimize project structure * Move includeing path, lib path and etc to a specific file Virtools.props * Add mk_materializer_cfg.py to change Virtools.props for more build configuration * Ready for multi-virtools-version development --- SuperScriptMaterializer.sln | 22 ++- .../SuperScriptMaterializer.vcxproj | 58 ++++--- SuperScriptMaterializer/Virtools.props | 62 +++++++ mk_materializer_cfg.py | 152 ++++++++++++++++++ 4 files changed, 257 insertions(+), 37 deletions(-) create mode 100644 SuperScriptMaterializer/Virtools.props create mode 100644 mk_materializer_cfg.py diff --git a/SuperScriptMaterializer.sln b/SuperScriptMaterializer.sln index 215b4ac..f45d987 100644 --- a/SuperScriptMaterializer.sln +++ b/SuperScriptMaterializer.sln @@ -17,18 +17,16 @@ Global Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|Any CPU.ActiveCfg = VT5Debug|Win32 - {4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|Any CPU.Build.0 = VT5Debug|Win32 - {4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|x64.ActiveCfg = VT5Debug|Win32 - {4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|x64.Build.0 = VT5Debug|Win32 - {4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|x86.ActiveCfg = VT5Debug|Win32 - {4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|x86.Build.0 = VT5Debug|Win32 - {4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|Any CPU.ActiveCfg = VT5Release|Win32 - {4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|Any CPU.Build.0 = VT5Release|Win32 - {4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|x64.ActiveCfg = VT5Debug|Win32 - {4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|x64.Build.0 = VT5Debug|Win32 - {4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|x86.ActiveCfg = VT5Debug|Win32 - {4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|x86.Build.0 = VT5Debug|Win32 + {4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|Any CPU.Build.0 = Debug|Win32 + {4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|x64.ActiveCfg = Debug|Win32 + {4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|x86.ActiveCfg = Debug|Win32 + {4D941003-020F-47FD-9FA2-FFC989E306B8}.Debug|x86.Build.0 = Debug|Win32 + {4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|Any CPU.Build.0 = Release|Win32 + {4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|x64.ActiveCfg = Release|Win32 + {4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|x86.ActiveCfg = Release|Win32 + {4D941003-020F-47FD-9FA2-FFC989E306B8}.Release|x86.Build.0 = Release|Win32 {6D751BF5-87D6-4123-94B3-34721938CF04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D751BF5-87D6-4123-94B3-34721938CF04}.Debug|x64.ActiveCfg = Debug|Any CPU {6D751BF5-87D6-4123-94B3-34721938CF04}.Debug|x86.ActiveCfg = Debug|Any CPU diff --git a/SuperScriptMaterializer/SuperScriptMaterializer.vcxproj b/SuperScriptMaterializer/SuperScriptMaterializer.vcxproj index a80dcce..3c1684c 100644 --- a/SuperScriptMaterializer/SuperScriptMaterializer.vcxproj +++ b/SuperScriptMaterializer/SuperScriptMaterializer.vcxproj @@ -1,12 +1,12 @@ - - VT5Debug + + Debug Win32 - - VT5Release + + Release Win32 @@ -17,13 +17,13 @@ 10.0 - + v142 DynamicLibrary Dynamic MultiByte - + DynamicLibrary false v142 @@ -34,45 +34,53 @@ + + + + + + - - E:\Virtools\Virtools Dev 5.0\InterfacePlugins\ + + $(VIRTOOLS_OUTPUT_PATH) true Temp\$(Configuration)\ + .$(VIRTOOLS_BUILD_SUFFIX) - - E:\Virtools\Virtools Dev 5.0\InterfacePlugins\ + + $(VIRTOOLS_OUTPUT_PATH) Temp\$(Configuration)\ + .$(VIRTOOLS_BUILD_SUFFIX) - + EditAndContinue - + Level3 - D:\CppLib\SQLite\sqlite-amalgamation-3310100;E:\Virtools\Virtools Dev 5.0\Sdk\Includes;%(AdditionalIncludeDirectories) + $(VIRTOOLS_HEADER_PATH);$(SQLITE_HEADER_PATH);%(AdditionalIncludeDirectories) Disabled - WIN32;_WINDOWS;_USRDLL;VIRTOOLS_5;VX_MEM_RELEASE;%(PreprocessorDefinitions) + WIN32;_WINDOWS;_USRDLL;$(VIRTOOLS_VER);VX_MEM_RELEASE;$(VIRTOOLS_BUILD_TYPE);%(PreprocessorDefinitions) EnableFastChecks true - E:\Virtools\Virtools Dev 5.0\InterfacePlugins\$(ProjectName).dll + $(VIRTOOLS_OUTPUT_PATH)SuperScriptMaterializer.$(VIRTOOLS_BUILD_SUFFIX) - D:\CppLib\SQLite\sqlite-dll-win32-x86-3310100;E:\Virtools\Virtools Dev 5.0\Sdk\Lib\Win32\Release;%(AdditionalLibraryDirectories) - vxmath.lib;DllEditor.lib;ck2.lib;InterfaceControls.lib;CKControls.lib;sqlite3.lib;%(AdditionalDependencies) + $(SQLITE_LIB_PATH);$(VIRTOOLS_LIB_PATH);%(AdditionalLibraryDirectories) + $(VIRTOOLS_ATTACH_REF);$(SQLITE_ATTACH_REF);%(AdditionalDependencies) true - E:\Virtools\Virtools Dev 5.0\InterfacePlugins\$(ProjectName).pdb + $(VIRTOOLS_OUTPUT_PATH)SuperScriptMaterializer.pdb Windows SuperScriptMaterializer.def - + Level3 Disabled @@ -83,9 +91,9 @@ false Default - D:\CppLib\SQLite\sqlite-amalgamation-3310100;E:\Virtools\Virtools Dev 5.0\Sdk\Includes;%(AdditionalIncludeDirectories) + $(VIRTOOLS_HEADER_PATH);$(SQLITE_HEADER_PATH);%(AdditionalIncludeDirectories) ProgramDatabase - WIN32;_WINDOWS;_USRDLL;VIRTOOLS_5;VX_MEM_RELEASE;_RELEASE;%(PreprocessorDefinitions) + WIN32;_WINDOWS;_USRDLL;$(VIRTOOLS_VER);VX_MEM_RELEASE;_RELEASE;$(VIRTOOLS_BUILD_TYPE);%(PreprocessorDefinitions) EnableFastChecks @@ -93,10 +101,10 @@ true true SuperScriptMaterializer.def - E:\Virtools\Virtools Dev 5.0\InterfacePlugins\$(ProjectName).dll - D:\CppLib\SQLite\sqlite-dll-win32-x86-3310100;E:\Virtools\Virtools Dev 5.0\Sdk\Lib\Win32\Release;%(AdditionalLibraryDirectories) - vxmath.lib;DllEditor.lib;ck2.lib;InterfaceControls.lib;CKControls.lib;sqlite3.lib;%(AdditionalDependencies) - E:\Virtools\Virtools Dev 5.0\InterfacePlugins\$(ProjectName).pdb + $(VIRTOOLS_OUTPUT_PATH)SuperScriptMaterializer.$(VIRTOOLS_BUILD_SUFFIX) + $(VIRTOOLS_LIB_PATH);$(SQLITE_LIB_PATH);%(AdditionalLibraryDirectories) + $(VIRTOOLS_ATTACH_REF);$(SQLITE_ATTACH_REF);%(AdditionalDependencies) + $(VIRTOOLS_OUTPUT_PATH)SuperScriptMaterializer.pdb diff --git a/SuperScriptMaterializer/Virtools.props b/SuperScriptMaterializer/Virtools.props new file mode 100644 index 0000000..ab0befc --- /dev/null +++ b/SuperScriptMaterializer/Virtools.props @@ -0,0 +1,62 @@ + + + + + E:\Virtools\Virtools Dev 5.0\Sdk/Includes + E:\Virtools\Virtools Dev 5.0\Sdk/Lib/Win32/Release + D:\CppLib\SQLite\sqlite-amalgamation-3310100 + D:\CppLib\SQLite\sqlite-dll-win32-x86-3310100 + E:\Virtools\Virtools Dev 5.0\InterfacePlugins\ + VIRTOOLS_PLUGIN + E:\Virtools\Virtools Dev 5.0\devr.exe + E:\Virtools\Virtools Dev 5.0 + dll + VIRTOOLS_50 + + vxmath.lib;DllEditor.lib;ck2.lib;InterfaceControls.lib;CKControls.lib + sqlite3.lib + + + + + + $(VIRTOOLS_HEADER_PATH) + + + $(VIRTOOLS_LIB_PATH) + + + $(SQLITE_HEADER_PATH) + + + $(SQLITE_LIB_PATH) + + + $(VIRTOOLS_OUTPUT_PATH) + + + $(VIRTOOLS_BUILD_TYPE) + + + $(VIRTOOLS_DEBUG_TARGET) + + + $(VIRTOOLS_DEBUG_ROOT) + + + $(VIRTOOLS_BUILD_SUFFIX) + + + $(VIRTOOLS_VER) + + + $(BML_SPECIAL_MACRO) + + + $(VIRTOOLS_ATTACH_REF) + + + $(SQLITE_ATTACH_REF) + + + diff --git a/mk_materializer_cfg.py b/mk_materializer_cfg.py new file mode 100644 index 0000000..5b91afd --- /dev/null +++ b/mk_materializer_cfg.py @@ -0,0 +1,152 @@ +import xml.dom.minidom as minidom +import xml.dom +import os +import sys + +# ======================== const define + +program_name = "SuperScriptMaterializer" + +build_type_standalone = "standalone" +build_type_plugin = "plugin" +valid_build_type = ( + build_type_standalone, + build_type_plugin +) + +valid_virtools_standalone_ver = ( + "21", + "25", + "35", + "40", + "50" +) +valid_virtools_plugin_ver = ( + "35", + "40", + "50" +) + +# ======================== assist func +def write_macro(dom, node_property_group, node_item_group, macro_upcase, data): + node = dom.createElement(macro_upcase) + node.appendChild(dom.createTextNode(data)) + node_property_group.appendChild(node) + + node = dom.createElement("BuildMacro") + node.setAttribute('Include', macro_upcase) + inter_node = dom.createElement('Value') + inter_node.appendChild(dom.createTextNode("$({})".format(macro_upcase))) + node.appendChild(inter_node) + node_item_group.appendChild(node) + +def get_executable_virtools(vt_ver): + if vt_ver == '21': + return 'Dev.exe' + elif vt_ver == '25': + return 'Dev.exe' + elif vt_ver == '35': + return 'devr.exe' + elif vt_ver == '40': + return 'devr.exe' + elif vt_ver == '50': + return 'devr.exe' + +# ======================== requirement check + +if len(sys.argv) != 8: + print("Error parameter!") + print("Example: python3 mk_materializer_cfg.py [plugin|standalone] [21|25|35|40|50] [virtools_root_path] [sqlite_header] [sqlite_lib] [sqlite attach ref] [bml path]") + sys.exit(1) + +build_type = sys.argv[1] +if build_type not in valid_build_type: + print("Invalid build_type!") + sys.exit(1) + +virtools_version = sys.argv[2] +if build_type == build_type_standalone and virtools_version not in valid_virtools_standalone_ver: + print("Invalid virtools_version!") + sys.exit(1) +elif build_type == build_type_plugin and virtools_version not in valid_virtools_plugin_ver: + print("Invalid virtools_version!") + sys.exit(1) + +virtools_root_path = sys.argv[3] +sqlite_header_path = sys.argv[4] +sqlite_lib_path = sys.argv[5] +sqlite_attach_ref = sys.argv[6] +bml_path = sys.argv[7] + +# ======================== construct some path +# .......todo + +virtools_header_path = os.path.join(virtools_root_path, 'Sdk/Includes') +virtools_lib_path = os.path.join(virtools_root_path, 'Sdk/Lib/Win32/Release') +virtools_ver = 'VIRTOOLS_' + virtools_version +virtools_debug_root = virtools_root_path +if build_type == build_type_plugin: + virtools_build_type = 'VIRTOOLS_PLUGIN' + virtools_build_suffix = 'dll' + virtools_debug_target = os.path.join(virtools_root_path, get_executable_virtools(virtools_version)) + virtools_output_path = os.path.join(virtools_root_path, 'InterfacePlugins') +elif build_type == build_type_standalone: + virtools_build_type = 'VIRTOOLS_STANDALONE' + virtools_build_suffix = 'exe' + virtools_debug_target = os.path.join(virtools_root_path, 'SuperScriptMaterializer.exe') + virtools_output_path = virtools_root_path + +if virtools_output_path[-1] != '\\' or virtools_output_path[-1] != '/': + virtools_output_path = virtools_output_path + '\\' + +if virtools_version == '21': + bml_special_macro = 'BML_EXPORT=' +else: + bml_special_macro = '' + +# ======================== create document + +dom = minidom.getDOMImplementation().createDocument(None, 'Project', None) +root = dom.documentElement +root.setAttribute('ToolsVersion', '4.0') +root.setAttribute('xmlns', 'http://schemas.microsoft.com/developer/msbuild/2003') + +cache = dom.createElement('ImportGroup') +cache.setAttribute('Label', 'PropertySheets') +root.appendChild(cache) + +node_property_group = dom.createElement('PropertyGroup') +node_property_group.setAttribute('Label', 'UserMacros') +root.appendChild(node_property_group) + +cache = dom.createElement('PropertyGroup') +root.appendChild(cache) + +cache = dom.createElement('ItemDefinitionGroup') +root.appendChild(cache) + +node_item_group = dom.createElement('ItemGroup') +root.appendChild(node_item_group) + +# ======================== write macro + +write_macro(dom, node_property_group, node_item_group, 'VIRTOOLS_HEADER_PATH', virtools_header_path) +write_macro(dom, node_property_group, node_item_group, 'VIRTOOLS_LIB_PATH', virtools_lib_path) +write_macro(dom, node_property_group, node_item_group, 'SQLITE_HEADER_PATH', sqlite_header_path) +write_macro(dom, node_property_group, node_item_group, 'SQLITE_LIB_PATH', sqlite_lib_path) +write_macro(dom, node_property_group, node_item_group, 'VIRTOOLS_OUTPUT_PATH', virtools_output_path) +write_macro(dom, node_property_group, node_item_group, 'VIRTOOLS_BUILD_TYPE', virtools_build_type) +write_macro(dom, node_property_group, node_item_group, 'VIRTOOLS_DEBUG_TARGET', virtools_debug_target) +write_macro(dom, node_property_group, node_item_group, 'VIRTOOLS_DEBUG_ROOT', virtools_debug_root) +write_macro(dom, node_property_group, node_item_group, 'VIRTOOLS_BUILD_SUFFIX', virtools_build_suffix) +write_macro(dom, node_property_group, node_item_group, 'VIRTOOLS_VER', virtools_ver) +write_macro(dom, node_property_group, node_item_group, 'BML_SPECIAL_MACRO', bml_special_macro) +write_macro(dom, node_property_group, node_item_group, 'VIRTOOLS_ATTACH_REF', "vxmath.lib;DllEditor.lib;ck2.lib;InterfaceControls.lib;CKControls.lib") +write_macro(dom, node_property_group, node_item_group, 'SQLITE_ATTACH_REF', sqlite_attach_ref) + + +# ======================== output +with open('./SuperScriptMaterializer/Virtools.props', 'w', encoding='utf-8') as f: + dom.writexml(f, addindent='\t', newl='\n', encoding='utf-8') + +print("OK!")