This commit is the equivalent of a atomic bomb
This commit is contained in:
80
make/mikero.py
Normal file
80
make/mikero.py
Normal file
@@ -0,0 +1,80 @@
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
from make.terminal import print_error, print_green, print_yellow
|
||||
|
||||
if sys.platform == "win32":
|
||||
import winreg
|
||||
|
||||
def mikero_windows_registry(path, access=winreg.KEY_READ):
|
||||
try:
|
||||
return winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Mikero\{}".format(path), access=access)
|
||||
except FileNotFoundError:
|
||||
try:
|
||||
return winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"Software\Mikero\{}".format(path), access=access)
|
||||
except FileNotFoundError:
|
||||
try:
|
||||
return winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Wow6432Node\Mikero\{}".format(path), access=access)
|
||||
except FileNotFoundError:
|
||||
return winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"Software\Wow6432Node\Mikero\{}".format(path), access=access)
|
||||
|
||||
def find_depbo_tools():
|
||||
"""Use registry entries to find DePBO-based tools."""
|
||||
# try running pboProject once if it's not in registry
|
||||
try:
|
||||
pboProject = mikero_windows_registry("pboProject")
|
||||
print(f"pboProject found normally via registry")
|
||||
except:
|
||||
print(f"pboProject not in registry")
|
||||
pboProject = shutil.which('pboProject')
|
||||
if (pboProject is None):
|
||||
print("pboProject not in sys path")
|
||||
else:
|
||||
print(f"pboProject startup")
|
||||
ret = subprocess.call([pboProject, "-P"])
|
||||
|
||||
requiredToolPaths = {"pboProject": None, "rapify": None, "MakePbo": None}
|
||||
failed = False
|
||||
|
||||
for tool in requiredToolPaths:
|
||||
try:
|
||||
k = mikero_windows_registry(tool)
|
||||
path = winreg.QueryValueEx(k, "exe")[0]
|
||||
except FileNotFoundError:
|
||||
print_error("Could not find {}".format(tool))
|
||||
failed = True
|
||||
else:
|
||||
#Strip any quotations from the path due to a MikeRo tool bug which leaves a trailing space in some of its registry paths.
|
||||
requiredToolPaths[tool] = path.strip('"')
|
||||
print_green("Found {}.".format(tool))
|
||||
finally:
|
||||
winreg.CloseKey(k)
|
||||
|
||||
if failed:
|
||||
raise Exception("BadDePBO", "DePBO tools not installed correctly")
|
||||
|
||||
return requiredToolPaths
|
||||
|
||||
def pboproject_settings():
|
||||
"""Use registry entries to configure needed pboproject settings."""
|
||||
value_exclude = "thumbs.db,*.txt,*.h,*.dep,*.cpp,*.bak,*.png,*.log,*.pew,source,*.tga"
|
||||
|
||||
try:
|
||||
pbok = mikero_windows_registry(r"pboProject")
|
||||
try:
|
||||
k = winreg.OpenKey(pbok, "Settings", access=winreg.KEY_SET_VALUE)
|
||||
except:
|
||||
print_yellow("WARNING: creating pboProject/Settings reg manually")
|
||||
print_yellow("This should have happened before running make.py")
|
||||
k = winreg.CreateKeyEx(pbok, "Settings", access=winreg.KEY_SET_VALUE)
|
||||
winreg.SetValueEx(k, "m_exclude", 0, winreg.REG_SZ, value_exclude)
|
||||
winreg.SetValueEx(k, "m_exclude2", 0, winreg.REG_SZ, value_exclude)
|
||||
winreg.SetValueEx(k, "wildcard_exclude_from_pbo_normal", 0, winreg.REG_SZ, value_exclude)
|
||||
winreg.SetValueEx(k, "wildcard_exclude_from_pbo_unbinarised_missions", 0, winreg.REG_SZ, value_exclude)
|
||||
except:
|
||||
raise Exception("BadDePBO", "pboProject not installed correctly, make sure to run it at least once")
|
||||
finally:
|
||||
winreg.CloseKey(k)
|
||||
winreg.CloseKey(pbok)
|
||||
|
||||
Reference in New Issue
Block a user