diff --git a/SuperScriptMaterializer/SuperScriptMaterializer.vcxproj b/SuperScriptMaterializer/SuperScriptMaterializer.vcxproj
index 3c1684c..06243d1 100644
--- a/SuperScriptMaterializer/SuperScriptMaterializer.vcxproj
+++ b/SuperScriptMaterializer/SuperScriptMaterializer.vcxproj
@@ -19,12 +19,10 @@
v142
- DynamicLibrary
Dynamic
MultiByte
- DynamicLibrary
false
v142
true
@@ -64,7 +62,7 @@
Level3
$(VIRTOOLS_HEADER_PATH);$(SQLITE_HEADER_PATH);%(AdditionalIncludeDirectories)
Disabled
- WIN32;_WINDOWS;_USRDLL;$(VIRTOOLS_VER);VX_MEM_RELEASE;$(VIRTOOLS_BUILD_TYPE);%(PreprocessorDefinitions)
+ WIN32;_WINDOWS;_USRDLL;$(VIRTOOLS_VER);$(BML_SPECIAL_MACRO);VX_MEM_RELEASE;$(VIRTOOLS_BUILD_TYPE);%(PreprocessorDefinitions)
EnableFastChecks
true
@@ -93,7 +91,7 @@
Default
$(VIRTOOLS_HEADER_PATH);$(SQLITE_HEADER_PATH);%(AdditionalIncludeDirectories)
ProgramDatabase
- WIN32;_WINDOWS;_USRDLL;$(VIRTOOLS_VER);VX_MEM_RELEASE;_RELEASE;$(VIRTOOLS_BUILD_TYPE);%(PreprocessorDefinitions)
+ WIN32;_WINDOWS;_USRDLL;$(VIRTOOLS_VER);$(BML_SPECIAL_MACRO);VX_MEM_RELEASE;_RELEASE;$(VIRTOOLS_BUILD_TYPE);%(PreprocessorDefinitions)
EnableFastChecks
diff --git a/SuperScriptMaterializer/Virtools.props b/SuperScriptMaterializer/Virtools.props
index ab0befc..551026b 100644
--- a/SuperScriptMaterializer/Virtools.props
+++ b/SuperScriptMaterializer/Virtools.props
@@ -1,18 +1,24 @@
+
+ Application
+
+
+ Application
+
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\
+ VIRTOOLS_STANDALONE
+ E:\Virtools\Virtools Dev 5.0\SuperScriptMaterializer.exe
E:\Virtools\Virtools Dev 5.0
- dll
+ exe
VIRTOOLS_50
-
+
vxmath.lib;DllEditor.lib;ck2.lib;InterfaceControls.lib;CKControls.lib
sqlite3.lib
diff --git a/mk_materializer_cfg.py b/mk_materializer_cfg.py
index 5b91afd..4397022 100644
--- a/mk_materializer_cfg.py
+++ b/mk_materializer_cfg.py
@@ -14,6 +14,22 @@ valid_build_type = (
build_type_plugin
)
+virtools_attach_ref_dict = {
+ "21": "vxmath.lib;DllEditor.lib;ck2.lib;InterfaceControls.lib;CKControls.lib",
+ "25": "vxmath.lib;DllEditor.lib;ck2.lib;InterfaceControls.lib;CKControls.lib",
+ "35": "vxmath.lib;DllEditor.lib;ck2.lib;InterfaceControls.lib;CKControls.lib",
+ "40": "vxmath.lib;DllEditor.lib;ck2.lib;InterfaceControls.lib;CKControls.lib",
+ "50": "vxmath.lib;DllEditor.lib;ck2.lib;InterfaceControls.lib;CKControls.lib"
+}
+
+executable_virtools = {
+ "21": "Dev.exe",
+ "25": "Dev.exe",
+ "35": "devr.exe",
+ "40": "devr.exe",
+ "50": "devr.exe"
+}
+
valid_virtools_standalone_ver = (
"21",
"25",
@@ -30,7 +46,8 @@ valid_virtools_plugin_ver = (
# ======================== 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))
+ if data != '':
+ node.appendChild(dom.createTextNode(data))
node_property_group.appendChild(node)
node = dom.createElement("BuildMacro")
@@ -40,6 +57,18 @@ def write_macro(dom, node_property_group, node_item_group, macro_upcase, data):
node.appendChild(inter_node)
node_item_group.appendChild(node)
+def write_cl(dom, node_include, node_compile, filename):
+ if filename.endswith('.h'):
+ cl = dom.createElement('ClInclude')
+ node = node_include
+ elif filename.endswith('.cpp'):
+ cl = dom.createElement('ClCompile')
+ node = node_compile
+ else:
+ return
+ cl.setAttribute('Include', filename)
+ node.appendChild(cl)
+
def get_executable_virtools(vt_ver):
if vt_ver == '21':
return 'Dev.exe'
@@ -56,52 +85,64 @@ def get_executable_virtools(vt_ver):
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]")
+ print("Format: python3 mk_materializer_cfg.py [plugin|standalone] [21|25|35|40|50] [virtools_root_path] [sqlite_header] [sqlite_lib] [sqlite attach ref] [bml path]")
+ print('Example: python3 .\mk_materializer_cfg.py standalone 50 "E:\Virtools\Virtools Dev 5.0" "D:\CppLib\SQLite\sqlite-amalgamation-3310100" "D:\CppLib\SQLite\sqlite-dll-win32-x86-3310100" sqlite3.lib "D:\BallanceModLoader"')
sys.exit(1)
-build_type = sys.argv[1]
-if build_type not in valid_build_type:
+input_build_type = sys.argv[1]
+if input_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:
+input_virtools_version = sys.argv[2]
+if input_build_type == build_type_standalone and input_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:
+elif input_build_type == build_type_plugin and input_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]
+input_virtools_root_path = sys.argv[3]
+input_sqlite_header_path = sys.argv[4]
+input_sqlite_lib_path = sys.argv[5]
+input_sqlite_attach_ref = sys.argv[6]
+input_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:
+sqlite_header_path = input_sqlite_header_path
+sqlite_lib_path = input_sqlite_lib_path
+sqlite_attach_ref = input_sqlite_attach_ref
+
+virtools_ver = 'VIRTOOLS_' + input_virtools_version
+virtools_debug_root = input_virtools_root_path
+virtools_attach_ref = virtools_attach_ref_dict[input_virtools_version]
+
+if input_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_debug_target = os.path.join(input_virtools_root_path, executable_virtools[input_virtools_version])
+ virtools_output_path = os.path.join(input_virtools_root_path, 'InterfacePlugins')
+elif input_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
+ virtools_debug_target = os.path.join(input_virtools_root_path, 'SuperScriptMaterializer.exe')
+ virtools_output_path = input_virtools_root_path
+# make sure the last char of output_path is slash
if virtools_output_path[-1] != '\\' or virtools_output_path[-1] != '/':
virtools_output_path = virtools_output_path + '\\'
-if virtools_version == '21':
+# in virtools 2.1, we use bml, so we need add bml macro and set virtools header to bml's virtools header
+# also, we don't need set lib path because all virtools file have been imported in project
+if input_virtools_version == '21':
+ virtools_header_path = ''#os.path.join(input_bml_path, 'virtools')
+ virtools_lib_path = ''
bml_special_macro = 'BML_EXPORT='
else:
+ virtools_header_path = os.path.join(input_virtools_root_path, 'Sdk/Includes')
+ virtools_lib_path = os.path.join(input_virtools_root_path, 'Sdk/Lib/Win32/Release')
bml_special_macro = ''
# ======================== create document
@@ -115,6 +156,20 @@ cache = dom.createElement('ImportGroup')
cache.setAttribute('Label', 'PropertySheets')
root.appendChild(cache)
+# ======================== write build type
+for bt in ('Debug', 'Release'):
+ node_build_type = dom.createElement('PropertyGroup')
+ node_build_type.setAttribute('Label', 'Configuration')
+ node_build_type.setAttribute('Condition', "'$(Configuration)|$(Platform)'=='{}|Win32'".format(bt))
+ node_configuration_type = dom.createElement('ConfigurationType')
+ if input_build_type == build_type_standalone:
+ node_configuration_type.appendChild(dom.createTextNode('Application'))
+ elif input_build_type == build_type_plugin:
+ node_configuration_type.appendChild(dom.createTextNode('DynamicLibrary'))
+ node_build_type.appendChild(node_configuration_type)
+ root.appendChild(node_build_type)
+
+# ======================== write macro and misc
node_property_group = dom.createElement('PropertyGroup')
node_property_group.setAttribute('Label', 'UserMacros')
root.appendChild(node_property_group)
@@ -128,8 +183,6 @@ 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)
@@ -141,9 +194,22 @@ write_macro(dom, node_property_group, node_item_group, 'VIRTOOLS_DEBUG_ROOT', vi
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, 'VIRTOOLS_ATTACH_REF', virtools_attach_ref)
write_macro(dom, node_property_group, node_item_group, 'SQLITE_ATTACH_REF', sqlite_attach_ref)
+# ======================== write extra compile
+
+if input_virtools_version == '21':
+ header_item_group = dom.createElement('ItemGroup')
+ cpp_item_group = dom.createElement('ItemGroup')
+ bml_virtools_path = os.path.join(input_bml_path, 'virtools')
+ for folderName, subfolders, filenames in os.walk(bml_virtools_path):
+ for filename in filenames:
+ write_cl(dom, header_item_group, cpp_item_group, os.path.join(folderName, filename))
+
+ root.appendChild(header_item_group)
+ root.appendChild(cpp_item_group)
+
# ======================== output
with open('./SuperScriptMaterializer/Virtools.props', 'w', encoding='utf-8') as f: