feat: wip for project cfg generator.
- finish arg parser part of project cfg generator.
This commit is contained in:
		@ -1,5 +1,5 @@
 | 
			
		||||
import vs_props_writer, vs_vcxproj_modifier
 | 
			
		||||
import os, enum, sys
 | 
			
		||||
import os, enum, sys, argparse
 | 
			
		||||
 | 
			
		||||
#region Constant Declarations
 | 
			
		||||
 | 
			
		||||
@ -15,6 +15,24 @@ class VirtoolsVersion(enum.Enum):
 | 
			
		||||
    V40 = '40'
 | 
			
		||||
    V50 = '50'
 | 
			
		||||
 | 
			
		||||
VT_HEADER_PATH: dict[VirtoolsVersion, str] = {
 | 
			
		||||
    VirtoolsVersion.V21: 'Include',
 | 
			
		||||
    VirtoolsVersion.V25: 'Virtools_SDK\\Includes',
 | 
			
		||||
    VirtoolsVersion.V30: 'Sdk\\Includes',
 | 
			
		||||
    VirtoolsVersion.V35: 'Sdk\\Includes',
 | 
			
		||||
    VirtoolsVersion.V40: 'Sdk\\Includes',
 | 
			
		||||
    VirtoolsVersion.V50: 'Sdk\\Includes'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
VT_LIB_PATH: dict[VirtoolsVersion, str] = {
 | 
			
		||||
    VirtoolsVersion.V21: 'Lib',
 | 
			
		||||
    VirtoolsVersion.V25: 'Virtools_SDK\\Lib',
 | 
			
		||||
    VirtoolsVersion.V30: 'Sdk\\Lib',
 | 
			
		||||
    VirtoolsVersion.V35: 'Sdk\\Lib\\Win32\\Release',
 | 
			
		||||
    VirtoolsVersion.V40: 'Sdk\\Lib\\Win32\\Release',
 | 
			
		||||
    VirtoolsVersion.V50: 'Sdk\\Lib\\Win32\\Release'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
VT_STANDALONE_ATTACHED_LIBS: dict[VirtoolsVersion, str] = {
 | 
			
		||||
    VirtoolsVersion.V21: "VxMath.lib;CK2.lib",
 | 
			
		||||
    VirtoolsVersion.V25: "VxMath.lib;CK2.lib",
 | 
			
		||||
@ -49,8 +67,22 @@ VT_STANDALONE_MACROS: dict[VirtoolsVersion, str] = {
 | 
			
		||||
    VirtoolsVersion.V50: "_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_DEBUG;VIRTOOLS_USER_SDK" 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
VT_PLUGIN_SUPPORTED_VER: set[VirtoolsVersion] = set((
 | 
			
		||||
    VirtoolsVersion.V30,
 | 
			
		||||
    VirtoolsVersion.V35,
 | 
			
		||||
    VirtoolsVersion.V40,
 | 
			
		||||
    VirtoolsVersion.V50,
 | 
			
		||||
))
 | 
			
		||||
VT_STANDALONE_SUPPORTED_VER: set[VirtoolsVersion] = set((
 | 
			
		||||
    VirtoolsVersion.V21,
 | 
			
		||||
    VirtoolsVersion.V25,
 | 
			
		||||
    VirtoolsVersion.V30,
 | 
			
		||||
    VirtoolsVersion.V35,
 | 
			
		||||
    VirtoolsVersion.V40,
 | 
			
		||||
    VirtoolsVersion.V50,
 | 
			
		||||
))
 | 
			
		||||
 | 
			
		||||
VT_EXECUTABLE_DEV: dict[VirtoolsVersion, str] = {
 | 
			
		||||
    VirtoolsVersion.V21: "Dev.exe",
 | 
			
		||||
    VirtoolsVersion.V25: "Dev.exe",
 | 
			
		||||
    VirtoolsVersion.V30: "devr.exe",
 | 
			
		||||
    VirtoolsVersion.V35: "devr.exe",
 | 
			
		||||
@ -72,6 +104,29 @@ def get_project_root() -> str:
 | 
			
		||||
    # return value
 | 
			
		||||
    return ret
 | 
			
		||||
 | 
			
		||||
def validate_combination(build_type: BuildType, vt_version: VirtoolsVersion) -> bool:
 | 
			
		||||
    """
 | 
			
		||||
    Check whether the given combination of build type and Virtools version is OK.
 | 
			
		||||
 | 
			
		||||
    Some combination of build type and Virtools version is invalid.
 | 
			
		||||
    For example, because Virtools 2.5 do not have UI register so plugin build type is not available in Virtools 2.1
 | 
			
		||||
 | 
			
		||||
    @return True if the combination is valid.
 | 
			
		||||
    """
 | 
			
		||||
    match(build_type):
 | 
			
		||||
        case BuildType.Standalone:
 | 
			
		||||
            return vt_version in VT_STANDALONE_SUPPORTED_VER
 | 
			
		||||
        case BuildType.Plugin:
 | 
			
		||||
            return vt_version in VT_PLUGIN_SUPPORTED_VER
 | 
			
		||||
        case _:
 | 
			
		||||
            raise Exception('invalid build type')
 | 
			
		||||
 | 
			
		||||
def get_header_path(vt_version: VirtoolsVersion, vt_root: str) -> str:
 | 
			
		||||
    return os.path.join(vt_root, VT_HEADER_PATH[vt_version])
 | 
			
		||||
 | 
			
		||||
def get_lib_path(vt_version: VirtoolsVersion, vt_root: str) -> str:
 | 
			
		||||
    return os.path.join(vt_root, VT_LIB_PATH[vt_version])
 | 
			
		||||
 | 
			
		||||
def get_attached_libs(build_type: BuildType, vt_version: VirtoolsVersion) -> str:
 | 
			
		||||
    match(build_type):
 | 
			
		||||
        case BuildType.Standalone:
 | 
			
		||||
@ -90,15 +145,17 @@ def get_macros(build_type: BuildType, vt_version: VirtoolsVersion) -> str:
 | 
			
		||||
        case _:
 | 
			
		||||
            raise Exception('invalid build type')
 | 
			
		||||
 | 
			
		||||
def get_executable_dev(vt_version: VirtoolsVersion) -> str:
 | 
			
		||||
def get_executable_dev(vt_version: VirtoolsVersion, vt_root: str) -> str:
 | 
			
		||||
    """
 | 
			
		||||
    Return the path to executable Virtools Dev according to given Virtools version.
 | 
			
		||||
 | 
			
		||||
    Usually it is `Dev.exe` or `devr.exe`.
 | 
			
		||||
 | 
			
		||||
    :param vt_version The version of Virtools.
 | 
			
		||||
    @param vt_version The version of Virtools.
 | 
			
		||||
    @param vt_root The path to Virtools root folder.
 | 
			
		||||
    @return The path to executable Virtools Dev.
 | 
			
		||||
    """
 | 
			
		||||
    pass
 | 
			
		||||
    return os.path.join(vt_root, VT_EXECUTABLE_DEV[vt_version])
 | 
			
		||||
 | 
			
		||||
def get_output_path(build_type: BuildType, vt_root: str) -> str:
 | 
			
		||||
    # fetch output path by build type
 | 
			
		||||
@ -118,295 +175,266 @@ def get_output_path(build_type: BuildType, vt_root: str) -> str:
 | 
			
		||||
 | 
			
		||||
#endregion
 | 
			
		||||
 | 
			
		||||
def main() -> None:
 | 
			
		||||
    # ========== Accept User Input ==========
 | 
			
		||||
    # build args parser
 | 
			
		||||
    parser = argparse.ArgumentParser(description='Project Configuration Maker')
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        '-b', '--build-type', required=True, action='store', dest='build_type', choices=tuple(item.value for item in BuildType),
 | 
			
		||||
        help='The build type of project.'
 | 
			
		||||
    )
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        '-t', '--virtools-version', required=True, action='store', dest='virtools_version', choices=tuple(item.value for item in VirtoolsVersion),
 | 
			
		||||
        help='The Virtools version you picked.'
 | 
			
		||||
    )
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        '-p', '--virtools-path', required=True, action='store', dest='virtools_path',
 | 
			
		||||
        help='''
 | 
			
		||||
        The path to the root folder of you picked Virtools version where you can find "Dev.exe".
 | 
			
		||||
        If you select Virtools 2.1, this path should be the root folder of GitHub project "doyaGu/Virtools-SDK-2.1".
 | 
			
		||||
        '''
 | 
			
		||||
    )
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        '-a', '--sqlite-amalgamation-path', required=True, action='store', dest='sqlite_amalgamation_path',
 | 
			
		||||
        help='The path to downloaded sqlite amalgamation folder where you can find "sqlite3.h"'
 | 
			
		||||
    )
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        '-d', '--sqlite-dll-path', required=True, action='store', dest='sqlite_dll_path',
 | 
			
		||||
        help='The path to downloaded sqlite dll folder where you can find "sqlite3.dll" and "sqlite3.lib" you just built a few minutes ago.'
 | 
			
		||||
    )
 | 
			
		||||
    # parse arguments
 | 
			
		||||
    args = parser.parse_args()
 | 
			
		||||
 | 
			
		||||
    # ========== Analyse Arguments ==========
 | 
			
		||||
    # extract arguments
 | 
			
		||||
    arg_virtools_version: VirtoolsVersion = VirtoolsVersion(args.virtools_version)
 | 
			
		||||
    arg_build_type: BuildType = BuildType(args.build_type)
 | 
			
		||||
    arg_virtools_path: str = args.virtools_path
 | 
			
		||||
    arg_sqlite_amalgamation_path: str = args.sqlite_amalgamation_path
 | 
			
		||||
    arg_sqlite_dll_path: str = args.sqlite_dll_path
 | 
			
		||||
 | 
			
		||||
# =========== check work dir ===========
 | 
			
		||||
    # validate the combination
 | 
			
		||||
    if not validate_combination(arg_build_type, arg_virtools_version):
 | 
			
		||||
        print(f'The combination of "{arg_build_type.value}" and "{arg_virtools_version.value}" is not compatible currently.')
 | 
			
		||||
        sys.exit(1)
 | 
			
		||||
 | 
			
		||||
if not os.path.isfile(os.path.join(os.getcwd(), 'README.md')):
 | 
			
		||||
    print('Error! Please run this script at the root of this repository.')
 | 
			
		||||
    sys.exit(1)
 | 
			
		||||
 | 
			
		||||
# =========== const define ===========
 | 
			
		||||
 | 
			
		||||
build_type_standalone = "standalone"
 | 
			
		||||
build_type_plugin = "plugin"
 | 
			
		||||
valid_build_type = (
 | 
			
		||||
    build_type_standalone,
 | 
			
		||||
    build_type_plugin
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
virtools_attached_lib_plugin_dict = {
 | 
			
		||||
    "21": "",
 | 
			
		||||
    "25": "",
 | 
			
		||||
    "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" 
 | 
			
		||||
}
 | 
			
		||||
virtools_attached_lib_standalone_dict = {
 | 
			
		||||
    "21": "VxMath.lib;CK2.lib",
 | 
			
		||||
    "25": "VxMath.lib;CK2.lib",
 | 
			
		||||
    "35": "vxmath.lib;ck2.lib",
 | 
			
		||||
    "40": "vxmath.lib;ck2.lib",
 | 
			
		||||
    "50": "vxmath.lib;ck2.lib"
 | 
			
		||||
}
 | 
			
		||||
virtools_gp_static_proj = 'GPVirtoolsStatic'
 | 
			
		||||
 | 
			
		||||
virtools_std_macro_plugin_dict = {
 | 
			
		||||
    "21": "_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE",
 | 
			
		||||
    "25": "_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE",
 | 
			
		||||
    "35": "_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE",
 | 
			
		||||
    "40": "_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE",
 | 
			
		||||
    "50": "_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE" 
 | 
			
		||||
}
 | 
			
		||||
virtools_std_macro_standalone_dict = {
 | 
			
		||||
    "21": "_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_DEBUG",
 | 
			
		||||
    "25": "_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_DEBUG",
 | 
			
		||||
    "35": "_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_DEBUG",
 | 
			
		||||
    "40": "_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;_DEBUG",
 | 
			
		||||
    "50": "_CRT_SECURE_NO_WARNINGS;_CRT_NONSTDC_NO_DEPRECATE;VIRTOOLS_USER_SDK;_DEBUG" 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
executable_virtools = {
 | 
			
		||||
    "21": "Dev.exe",
 | 
			
		||||
    "25": "Dev.exe",
 | 
			
		||||
    "35": "devr.exe",
 | 
			
		||||
    "40": "devr.exe",
 | 
			
		||||
    "50": "devr.exe" 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
valid_virtools_standalone_ver = (
 | 
			
		||||
    "21",
 | 
			
		||||
    "25",
 | 
			
		||||
    "35",
 | 
			
		||||
    "40",
 | 
			
		||||
    "50"
 | 
			
		||||
)
 | 
			
		||||
valid_virtools_plugin_ver = (
 | 
			
		||||
    "35",
 | 
			
		||||
    "40",
 | 
			
		||||
    "50"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
valid_vt21_reverse_work_type = (
 | 
			
		||||
    'gamepiaynmo',
 | 
			
		||||
    'doyagu'
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# =========== assist func ===========
 | 
			
		||||
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'
 | 
			
		||||
    # build macros valus
 | 
			
		||||
    # virtools version macro
 | 
			
		||||
    macro_virtools_ver: str = f'VIRTOOLS_{arg_virtools_version.value}'
 | 
			
		||||
    # build type
 | 
			
		||||
    macro_virtools_build_type: str = f'VIRTOOLS_{arg_build_type.value.upper()}'
 | 
			
		||||
    # virtools header and lib
 | 
			
		||||
    macro_virtools_header_path: str = get_header_path(arg_virtools_version, arg_virtools_path)
 | 
			
		||||
    macro_virtools_lib_path: str = get_lib_path(arg_virtools_version, arg_virtools_path)
 | 
			
		||||
    macro_virtools_attcahed_libs: str = get_attached_libs(arg_build_type, arg_virtools_version)
 | 
			
		||||
    # sqlite header and lib
 | 
			
		||||
    macro_sqlite_header_path: str = arg_sqlite_amalgamation_path
 | 
			
		||||
    macro_sqlite_lib_path: str = arg_sqlite_dll_path
 | 
			
		||||
    # out and debug path macros
 | 
			
		||||
    macro_virtools_output_path: str = get_output_path(arg_build_type, arg_virtools_path)
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
# =========== requirement get ===========
 | 
			
		||||
 | 
			
		||||
# get basic cfg, such as build type, and vt version
 | 
			
		||||
while True:
 | 
			
		||||
    input_build_type = input('Choose build type(plugin, standalone): ')
 | 
			
		||||
    if input_build_type not in valid_build_type:
 | 
			
		||||
        print("Invalid build type!")
 | 
			
		||||
    else:
 | 
			
		||||
        break
 | 
			
		||||
# # get basic cfg, such as build type, and vt version
 | 
			
		||||
# while True:
 | 
			
		||||
#     input_build_type = input('Choose build type(plugin, standalone): ')
 | 
			
		||||
#     if input_build_type not in valid_build_type:
 | 
			
		||||
#         print("Invalid build type!")
 | 
			
		||||
#     else:
 | 
			
		||||
#         break
 | 
			
		||||
 | 
			
		||||
valid_vtver_for_this_type = valid_virtools_plugin_ver if input_build_type == build_type_plugin else valid_virtools_standalone_ver
 | 
			
		||||
while True:
 | 
			
		||||
    input_virtools_version = input('Choose virtools version({}): '.format(', '.join(valid_vtver_for_this_type)))
 | 
			
		||||
    if input_virtools_version not in valid_vtver_for_this_type:
 | 
			
		||||
        print("Invalid virtools version!")
 | 
			
		||||
    else:
 | 
			
		||||
        break
 | 
			
		||||
# valid_vtver_for_this_type = valid_virtools_plugin_ver if input_build_type == build_type_plugin else valid_virtools_standalone_ver
 | 
			
		||||
# while True:
 | 
			
		||||
#     input_virtools_version = input('Choose virtools version({}): '.format(', '.join(valid_vtver_for_this_type)))
 | 
			
		||||
#     if input_virtools_version not in valid_vtver_for_this_type:
 | 
			
		||||
#         print("Invalid virtools version!")
 | 
			
		||||
#     else:
 | 
			
		||||
#         break
 | 
			
		||||
 | 
			
		||||
# collect sqlite library data
 | 
			
		||||
while True:
 | 
			
		||||
    input_sqlite_header_path = input('SQLite header folder path: ')
 | 
			
		||||
    if not os.path.isdir(input_sqlite_header_path):
 | 
			
		||||
        print("Invalid SQLite header folder!")
 | 
			
		||||
    else:
 | 
			
		||||
        break
 | 
			
		||||
# # collect sqlite library data
 | 
			
		||||
# while True:
 | 
			
		||||
#     input_sqlite_header_path = input('SQLite header folder path: ')
 | 
			
		||||
#     if not os.path.isdir(input_sqlite_header_path):
 | 
			
		||||
#         print("Invalid SQLite header folder!")
 | 
			
		||||
#     else:
 | 
			
		||||
#         break
 | 
			
		||||
 | 
			
		||||
while True:
 | 
			
		||||
    input_sqlite_lib_path = input('SQLite lib file path: ')
 | 
			
		||||
    if not os.path.isfile(input_sqlite_lib_path):
 | 
			
		||||
        print("Invalid SQLite lib file!")
 | 
			
		||||
    else:
 | 
			
		||||
        break
 | 
			
		||||
# while True:
 | 
			
		||||
#     input_sqlite_lib_path = input('SQLite lib file path: ')
 | 
			
		||||
#     if not os.path.isfile(input_sqlite_lib_path):
 | 
			
		||||
#         print("Invalid SQLite lib file!")
 | 
			
		||||
#     else:
 | 
			
		||||
#         break
 | 
			
		||||
 | 
			
		||||
# collect virtools sdk data
 | 
			
		||||
if input_virtools_version != '21':
 | 
			
		||||
    # if we do not use virtools 21, we order get original virtools SDK
 | 
			
		||||
    while True:
 | 
			
		||||
        input_virtools_root_path = input('Virtools root path: ')
 | 
			
		||||
        if not os.path.isdir(input_virtools_root_path):
 | 
			
		||||
            print("Invalid virtools root path!")
 | 
			
		||||
        else:
 | 
			
		||||
            break
 | 
			
		||||
else:
 | 
			
		||||
    # if we are in virtools 21 environment, we have 2 choose aboud used virtools sdk
 | 
			
		||||
    # one is gamepiaynmo and another one is doyagu
 | 
			
		||||
    # allow user choose a proper one from them and input their corresponding path about cloned repository.
 | 
			
		||||
    # also order a proper runtime environment for debug
 | 
			
		||||
    while True:
 | 
			
		||||
        input_vt21_reverse_work_type = input('Choose Virtools 2.1 reverse work source(gamepiaynmo, doyagu): ')
 | 
			
		||||
        if input_vt21_reverse_work_type not in valid_vt21_reverse_work_type:
 | 
			
		||||
            print("Invalid Virtools 2.1 reverse work source!")
 | 
			
		||||
        else:
 | 
			
		||||
            break
 | 
			
		||||
    while True:
 | 
			
		||||
        input_vt21_reverse_work_path =  input('Virtools 2.1 reverse work root path: ')
 | 
			
		||||
        if not os.path.isdir(input_vt21_reverse_work_path):
 | 
			
		||||
            print("Invalid Virtools 2.1 reverse work root path!")
 | 
			
		||||
        else:
 | 
			
		||||
            break
 | 
			
		||||
    while True:
 | 
			
		||||
        input_vt21_runtime_path =  input('Virtools 2.1 runtime path: ')
 | 
			
		||||
        if not os.path.isdir(input_vt21_runtime_path):
 | 
			
		||||
            print("Invalid Virtools 2.1 runtime path!")
 | 
			
		||||
        else:
 | 
			
		||||
            break
 | 
			
		||||
# # collect virtools sdk data
 | 
			
		||||
# if input_virtools_version != '21':
 | 
			
		||||
#     # if we do not use virtools 21, we order get original virtools SDK
 | 
			
		||||
#     while True:
 | 
			
		||||
#         input_virtools_root_path = input('Virtools root path: ')
 | 
			
		||||
#         if not os.path.isdir(input_virtools_root_path):
 | 
			
		||||
#             print("Invalid virtools root path!")
 | 
			
		||||
#         else:
 | 
			
		||||
#             break
 | 
			
		||||
# else:
 | 
			
		||||
#     # if we are in virtools 21 environment, we have 2 choose aboud used virtools sdk
 | 
			
		||||
#     # one is gamepiaynmo and another one is doyagu
 | 
			
		||||
#     # allow user choose a proper one from them and input their corresponding path about cloned repository.
 | 
			
		||||
#     # also order a proper runtime environment for debug
 | 
			
		||||
#     while True:
 | 
			
		||||
#         input_vt21_reverse_work_type = input('Choose Virtools 2.1 reverse work source(gamepiaynmo, doyagu): ')
 | 
			
		||||
#         if input_vt21_reverse_work_type not in valid_vt21_reverse_work_type:
 | 
			
		||||
#             print("Invalid Virtools 2.1 reverse work source!")
 | 
			
		||||
#         else:
 | 
			
		||||
#             break
 | 
			
		||||
#     while True:
 | 
			
		||||
#         input_vt21_reverse_work_path =  input('Virtools 2.1 reverse work root path: ')
 | 
			
		||||
#         if not os.path.isdir(input_vt21_reverse_work_path):
 | 
			
		||||
#             print("Invalid Virtools 2.1 reverse work root path!")
 | 
			
		||||
#         else:
 | 
			
		||||
#             break
 | 
			
		||||
#     while True:
 | 
			
		||||
#         input_vt21_runtime_path =  input('Virtools 2.1 runtime path: ')
 | 
			
		||||
#         if not os.path.isdir(input_vt21_runtime_path):
 | 
			
		||||
#             print("Invalid Virtools 2.1 runtime path!")
 | 
			
		||||
#         else:
 | 
			
		||||
#             break
 | 
			
		||||
 | 
			
		||||
# =========== construct some path ===========
 | 
			
		||||
# # =========== construct some path ===========
 | 
			
		||||
 | 
			
		||||
# build sqlite related data
 | 
			
		||||
sqlite_header_path = input_sqlite_header_path
 | 
			
		||||
(sqlite_lib_path, sqlite_lib_filename) = os.path.split(input_sqlite_lib_path)
 | 
			
		||||
# # build sqlite related data
 | 
			
		||||
# sqlite_header_path = input_sqlite_header_path
 | 
			
		||||
# (sqlite_lib_path, sqlite_lib_filename) = os.path.split(input_sqlite_lib_path)
 | 
			
		||||
 | 
			
		||||
# virtools version macro
 | 
			
		||||
virtools_ver = 'VIRTOOLS_' + input_virtools_version
 | 
			
		||||
# # virtools version macro
 | 
			
		||||
# virtools_ver = 'VIRTOOLS_' + input_virtools_version
 | 
			
		||||
 | 
			
		||||
# build type macro, and some essential build macros, linked lib
 | 
			
		||||
if input_build_type == build_type_plugin:
 | 
			
		||||
    virtools_build_type = 'VIRTOOLS_PLUGIN'
 | 
			
		||||
    virtools_build_suffix = 'dll'
 | 
			
		||||
    virtools_module_define = 'SuperScriptMaterializer.def'
 | 
			
		||||
    virtools_std_macro = virtools_std_macro_plugin_dict[input_virtools_version]
 | 
			
		||||
    virtools_attached_lib = virtools_attached_lib_plugin_dict[input_virtools_version]
 | 
			
		||||
elif input_build_type == build_type_standalone:
 | 
			
		||||
    virtools_build_type = 'VIRTOOLS_STANDALONE'
 | 
			
		||||
    virtools_build_suffix = 'exe'
 | 
			
		||||
    virtools_module_define = ''
 | 
			
		||||
    virtools_std_macro = virtools_std_macro_standalone_dict[input_virtools_version]
 | 
			
		||||
    # gamepiaynmo linked lib need special lib name
 | 
			
		||||
    if input_virtools_version == '21' and input_vt21_reverse_work_type == 'gamepiaynmo':
 | 
			
		||||
        virtools_attached_lib = virtools_gp_static_proj + '.lib'
 | 
			
		||||
    else:
 | 
			
		||||
        virtools_attached_lib = virtools_attached_lib_standalone_dict[input_virtools_version]
 | 
			
		||||
# # build type macro, and some essential build macros, linked lib
 | 
			
		||||
# if input_build_type == build_type_plugin:
 | 
			
		||||
#     virtools_build_type = 'VIRTOOLS_PLUGIN'
 | 
			
		||||
#     virtools_build_suffix = 'dll'
 | 
			
		||||
#     virtools_module_define = 'SuperScriptMaterializer.def'
 | 
			
		||||
#     virtools_std_macro = virtools_std_macro_plugin_dict[input_virtools_version]
 | 
			
		||||
#     virtools_attached_lib = virtools_attached_lib_plugin_dict[input_virtools_version]
 | 
			
		||||
# elif input_build_type == build_type_standalone:
 | 
			
		||||
#     virtools_build_type = 'VIRTOOLS_STANDALONE'
 | 
			
		||||
#     virtools_build_suffix = 'exe'
 | 
			
		||||
#     virtools_module_define = ''
 | 
			
		||||
#     virtools_std_macro = virtools_std_macro_standalone_dict[input_virtools_version]
 | 
			
		||||
#     # gamepiaynmo linked lib need special lib name
 | 
			
		||||
#     if input_virtools_version == '21' and input_vt21_reverse_work_type == 'gamepiaynmo':
 | 
			
		||||
#         virtools_attached_lib = virtools_gp_static_proj + '.lib'
 | 
			
		||||
#     else:
 | 
			
		||||
#         virtools_attached_lib = virtools_attached_lib_standalone_dict[input_virtools_version]
 | 
			
		||||
 | 
			
		||||
# debug configuration and output path
 | 
			
		||||
if input_virtools_version == '21':
 | 
			
		||||
    # virtools 21 onlt allow standalone build type
 | 
			
		||||
    # we copy it and specific some field
 | 
			
		||||
    virtools_debug_root = input_vt21_runtime_path
 | 
			
		||||
    virtools_debug_commandline = 'test.nmo test_script.db test_env.db'
 | 
			
		||||
    virtools_debug_target = os.path.join(input_vt21_runtime_path, 'SuperScriptMaterializer.exe')
 | 
			
		||||
    virtools_output_path = input_vt21_runtime_path
 | 
			
		||||
else:
 | 
			
		||||
    # in original virtools sdk environment
 | 
			
		||||
    # output file according to build type
 | 
			
		||||
    virtools_debug_root = input_virtools_root_path
 | 
			
		||||
    if input_build_type == build_type_plugin:
 | 
			
		||||
        virtools_debug_commandline = ''
 | 
			
		||||
        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')
 | 
			
		||||
    else:
 | 
			
		||||
        virtools_debug_commandline = 'test.nmo test_script.db test_env.db'
 | 
			
		||||
        virtools_debug_target = os.path.join(input_virtools_root_path, 'SuperScriptMaterializer.exe')
 | 
			
		||||
        virtools_output_path = input_virtools_root_path
 | 
			
		||||
# # debug configuration and output path
 | 
			
		||||
# if input_virtools_version == '21':
 | 
			
		||||
#     # virtools 21 onlt allow standalone build type
 | 
			
		||||
#     # we copy it and specific some field
 | 
			
		||||
#     virtools_debug_root = input_vt21_runtime_path
 | 
			
		||||
#     virtools_debug_commandline = 'test.nmo test_script.db test_env.db'
 | 
			
		||||
#     virtools_debug_target = os.path.join(input_vt21_runtime_path, 'SuperScriptMaterializer.exe')
 | 
			
		||||
#     virtools_output_path = input_vt21_runtime_path
 | 
			
		||||
# else:
 | 
			
		||||
#     # in original virtools sdk environment
 | 
			
		||||
#     # output file according to build type
 | 
			
		||||
#     virtools_debug_root = input_virtools_root_path
 | 
			
		||||
#     if input_build_type == build_type_plugin:
 | 
			
		||||
#         virtools_debug_commandline = ''
 | 
			
		||||
#         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')
 | 
			
		||||
#     else:
 | 
			
		||||
#         virtools_debug_commandline = 'test.nmo test_script.db test_env.db'
 | 
			
		||||
#         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 + '\\'
 | 
			
		||||
# # 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 + '\\'
 | 
			
		||||
 | 
			
		||||
# virtools compile and link options
 | 
			
		||||
# we need do different strategy for virtools 2.1 and anything else virtools version
 | 
			
		||||
if input_virtools_version == '21':
 | 
			
		||||
    # the reverse work of doyagu and gamepiaynmo is different, so we need to 
 | 
			
		||||
    # use them differently
 | 
			
		||||
    if input_vt21_reverse_work_type == 'doyagu':
 | 
			
		||||
        # doyagu do not need any extra macro
 | 
			
		||||
        virtools_extra_macro = ''
 | 
			
		||||
        virtools_header_path = os.path.join(input_vt21_reverse_work_path, 'Include')
 | 
			
		||||
        virtools_lib_path = os.path.join(input_vt21_reverse_work_path, 'Lib')
 | 
			
		||||
    else:
 | 
			
		||||
        # gamepiaynmo need a special macro but his proj do not need any link,
 | 
			
		||||
        # instead, we need compile it fully which will be implemented in following code
 | 
			
		||||
        virtools_extra_macro = 'BML_EXPORT='
 | 
			
		||||
        virtools_header_path = os.path.join(input_vt21_reverse_work_path, 'virtools')
 | 
			
		||||
        virtools_lib_path = '$(SolutionDir)out\\$(Platform)\\$(Configuration)\\' + virtools_gp_static_proj
 | 
			
		||||
else:
 | 
			
		||||
    virtools_extra_macro = ''
 | 
			
		||||
    if input_virtools_version == '25':
 | 
			
		||||
        virtools_header_path = os.path.join(input_virtools_root_path, 'Virtools_SDK/Includes')
 | 
			
		||||
        virtools_lib_path = os.path.join(input_virtools_root_path, 'Virtools_SDK/Lib')
 | 
			
		||||
    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')
 | 
			
		||||
# # virtools compile and link options
 | 
			
		||||
# # we need do different strategy for virtools 2.1 and anything else virtools version
 | 
			
		||||
# if input_virtools_version == '21':
 | 
			
		||||
#     # the reverse work of doyagu and gamepiaynmo is different, so we need to 
 | 
			
		||||
#     # use them differently
 | 
			
		||||
#     if input_vt21_reverse_work_type == 'doyagu':
 | 
			
		||||
#         # doyagu do not need any extra macro
 | 
			
		||||
#         virtools_extra_macro = ''
 | 
			
		||||
#         virtools_header_path = os.path.join(input_vt21_reverse_work_path, 'Include')
 | 
			
		||||
#         virtools_lib_path = os.path.join(input_vt21_reverse_work_path, 'Lib')
 | 
			
		||||
#     else:
 | 
			
		||||
#         # gamepiaynmo need a special macro but his proj do not need any link,
 | 
			
		||||
#         # instead, we need compile it fully which will be implemented in following code
 | 
			
		||||
#         virtools_extra_macro = 'BML_EXPORT='
 | 
			
		||||
#         virtools_header_path = os.path.join(input_vt21_reverse_work_path, 'virtools')
 | 
			
		||||
#         virtools_lib_path = '$(SolutionDir)out\\$(Platform)\\$(Configuration)\\' + virtools_gp_static_proj
 | 
			
		||||
# else:
 | 
			
		||||
#     virtools_extra_macro = ''
 | 
			
		||||
#     if input_virtools_version == '25':
 | 
			
		||||
#         virtools_header_path = os.path.join(input_virtools_root_path, 'Virtools_SDK/Includes')
 | 
			
		||||
#         virtools_lib_path = os.path.join(input_virtools_root_path, 'Virtools_SDK/Lib')
 | 
			
		||||
#     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')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# =========== create props ===========
 | 
			
		||||
# # =========== create props ===========
 | 
			
		||||
 | 
			
		||||
props = vs_props_writer.VsPropsWriter()
 | 
			
		||||
vcxproj = vs_vcxproj_modifier.VsVcxprojModifier(
 | 
			
		||||
    './SuperScriptMaterializer/SuperScriptMaterializer.vcxproj'
 | 
			
		||||
)
 | 
			
		||||
# props = vs_props_writer.VsPropsWriter()
 | 
			
		||||
# vcxproj = vs_vcxproj_modifier.VsVcxprojModifier(
 | 
			
		||||
#     './SuperScriptMaterializer/SuperScriptMaterializer.vcxproj'
 | 
			
		||||
# )
 | 
			
		||||
 | 
			
		||||
# write build type
 | 
			
		||||
if input_build_type == build_type_standalone:
 | 
			
		||||
    vcxproj.SetBuildType(vcxproj.BUILDTYPE_EXE)
 | 
			
		||||
elif input_build_type == build_type_plugin:
 | 
			
		||||
    vcxproj.SetBuildType(vcxproj.BUILDTYPE_DLL)
 | 
			
		||||
# # write build type
 | 
			
		||||
# if input_build_type == build_type_standalone:
 | 
			
		||||
#     vcxproj.SetBuildType(vcxproj.BUILDTYPE_EXE)
 | 
			
		||||
# elif input_build_type == build_type_plugin:
 | 
			
		||||
#     vcxproj.SetBuildType(vcxproj.BUILDTYPE_DLL)
 | 
			
		||||
 | 
			
		||||
# write subsystem
 | 
			
		||||
if input_build_type == build_type_standalone:
 | 
			
		||||
    props.SetSubSystem(vs_props_writer.VsSubSystem.Console)
 | 
			
		||||
elif input_build_type == build_type_plugin:
 | 
			
		||||
    props.SetSubSystem(vs_props_writer.VsSubSystem.Windows)
 | 
			
		||||
# # write subsystem
 | 
			
		||||
# if input_build_type == build_type_standalone:
 | 
			
		||||
#     props.SetSubSystem(vs_props_writer.VsSubSystem.Console)
 | 
			
		||||
# elif input_build_type == build_type_plugin:
 | 
			
		||||
#     props.SetSubSystem(vs_props_writer.VsSubSystem.Windows)
 | 
			
		||||
 | 
			
		||||
# write macro and misc
 | 
			
		||||
# build type distinguish macro
 | 
			
		||||
props.AddMacro('VIRTOOLS_VER', virtools_ver)
 | 
			
		||||
props.AddMacro('VIRTOOLS_BUILD_TYPE', virtools_build_type)
 | 
			
		||||
# header and libs
 | 
			
		||||
props.AddMacro('VIRTOOLS_HEADER_PATH', virtools_header_path)
 | 
			
		||||
props.AddMacro('VIRTOOLS_LIB_PATH', virtools_lib_path)
 | 
			
		||||
props.AddMacro('VIRTOOLS_LIB_FILENAME', virtools_attached_lib)
 | 
			
		||||
props.AddMacro('SQLITE_HEADER_PATH', sqlite_header_path)
 | 
			
		||||
props.AddMacro('SQLITE_LIB_PATH', sqlite_lib_path)
 | 
			
		||||
props.AddMacro('SQLITE_LIB_FILENAME', sqlite_lib_filename)
 | 
			
		||||
# output and debug
 | 
			
		||||
props.AddMacro('VIRTOOLS_OUTPUT_PATH', virtools_output_path)
 | 
			
		||||
props.AddMacro('VIRTOOLS_DEBUG_TARGET', virtools_debug_target)
 | 
			
		||||
props.AddMacro('VIRTOOLS_DEBUG_ROOT', virtools_debug_root)
 | 
			
		||||
props.AddMacro('VIRTOOLS_DEBUG_COMMANDLINE', virtools_debug_commandline)
 | 
			
		||||
# essential build macro
 | 
			
		||||
props.AddMacro('VIRTOOLS_STD_MACRO', virtools_std_macro)
 | 
			
		||||
props.AddMacro('VIRTOOLS_EXTRA_MACRO', virtools_extra_macro)
 | 
			
		||||
# misc macro
 | 
			
		||||
props.AddMacro('VIRTOOLS_BUILD_SUFFIX', virtools_build_suffix)
 | 
			
		||||
props.AddMacro('VIRTOOLS_MODULE_DEFINE', virtools_module_define)
 | 
			
		||||
# # write macro and misc
 | 
			
		||||
# # build type distinguish macro
 | 
			
		||||
# props.AddMacro('VIRTOOLS_VER', virtools_ver)
 | 
			
		||||
# props.AddMacro('VIRTOOLS_BUILD_TYPE', virtools_build_type)
 | 
			
		||||
# # header and libs
 | 
			
		||||
# props.AddMacro('VIRTOOLS_HEADER_PATH', virtools_header_path)
 | 
			
		||||
# props.AddMacro('VIRTOOLS_LIB_PATH', virtools_lib_path)
 | 
			
		||||
# props.AddMacro('VIRTOOLS_LIB_FILENAME', virtools_attached_lib)
 | 
			
		||||
# props.AddMacro('SQLITE_HEADER_PATH', sqlite_header_path)
 | 
			
		||||
# props.AddMacro('SQLITE_LIB_PATH', sqlite_lib_path)
 | 
			
		||||
# props.AddMacro('SQLITE_LIB_FILENAME', sqlite_lib_filename)
 | 
			
		||||
# # output and debug
 | 
			
		||||
# props.AddMacro('VIRTOOLS_OUTPUT_PATH', virtools_output_path)
 | 
			
		||||
# props.AddMacro('VIRTOOLS_DEBUG_TARGET', virtools_debug_target)
 | 
			
		||||
# props.AddMacro('VIRTOOLS_DEBUG_ROOT', virtools_debug_root)
 | 
			
		||||
# props.AddMacro('VIRTOOLS_DEBUG_COMMANDLINE', virtools_debug_commandline)
 | 
			
		||||
# # essential build macro
 | 
			
		||||
# props.AddMacro('VIRTOOLS_STD_MACRO', virtools_std_macro)
 | 
			
		||||
# props.AddMacro('VIRTOOLS_EXTRA_MACRO', virtools_extra_macro)
 | 
			
		||||
# # misc macro
 | 
			
		||||
# props.AddMacro('VIRTOOLS_BUILD_SUFFIX', virtools_build_suffix)
 | 
			
		||||
# props.AddMacro('VIRTOOLS_MODULE_DEFINE', virtools_module_define)
 | 
			
		||||
 | 
			
		||||
# output
 | 
			
		||||
props.Write2File('./SuperScriptMaterializer/Virtools.props')
 | 
			
		||||
vcxproj.Write2File()
 | 
			
		||||
# # output
 | 
			
		||||
# props.Write2File('./SuperScriptMaterializer/Virtools.props')
 | 
			
		||||
# vcxproj.Write2File()
 | 
			
		||||
 | 
			
		||||
# =========== create vt21 props ===========
 | 
			
		||||
# # =========== create vt21 props ===========
 | 
			
		||||
 | 
			
		||||
# if we are using virtools 2.1. and we use gamepiaynmo as our
 | 
			
		||||
# reverse library. we need enable project GPVirtoolsStatic and 
 | 
			
		||||
# add some macro for it
 | 
			
		||||
if input_virtools_version == '21' and input_vt21_reverse_work_type == 'gamepiaynmo':
 | 
			
		||||
    gp_props = VSProp.VSPropWriter()
 | 
			
		||||
    gp_props.AddMacro('BML_REPOSITORY', input_vt21_reverse_work_path)
 | 
			
		||||
    gp_props.Write2File('./GPVirtoolsStatic/Virtools.props')
 | 
			
		||||
# # if we are using virtools 2.1. and we use gamepiaynmo as our
 | 
			
		||||
# # reverse library. we need enable project GPVirtoolsStatic and 
 | 
			
		||||
# # add some macro for it
 | 
			
		||||
# if input_virtools_version == '21' and input_vt21_reverse_work_type == 'gamepiaynmo':
 | 
			
		||||
#     gp_props = VSProp.VSPropWriter()
 | 
			
		||||
#     gp_props.AddMacro('BML_REPOSITORY', input_vt21_reverse_work_path)
 | 
			
		||||
#     gp_props.Write2File('./GPVirtoolsStatic/Virtools.props')
 | 
			
		||||
 | 
			
		||||
print("OK!")
 | 
			
		||||
# print("OK!")
 | 
			
		||||
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    pass
 | 
			
		||||
 | 
			
		||||
    main()
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user