NorbiPeti
dfe1bfb504
Updated project generator script to always order assemblies (it didn't do that for me on Linux) and to fix minor issues
62 lines
2.6 KiB
Python
Executable file
62 lines
2.6 KiB
Python
Executable file
#!/usr/bin/python3
|
|
|
|
import argparse
|
|
from pathlib import Path, PurePath
|
|
import re
|
|
import os
|
|
|
|
DLL_EXCLUSIONS_REGEX = r"(System|Microsoft|Mono|IronPython|DiscordRPC|IllusionInjector|IllusionPlugin|netstandard)\."
|
|
|
|
def getAssemblyReferences(path):
|
|
asmDir = Path(path)
|
|
result = list()
|
|
addedPath = ""
|
|
if not asmDir.exists():
|
|
addedPath = "../"
|
|
asmDir = Path(addedPath + path)
|
|
for child in asmDir.iterdir():
|
|
if child.is_file() and re.search(DLL_EXCLUSIONS_REGEX, str(child)) is None and str(child).lower().endswith(".dll"):
|
|
childstr = str(child)
|
|
childstr = os.path.relpath(childstr, addedPath).replace("\\", "/")
|
|
result.append(childstr)
|
|
result.sort(key=str.lower)
|
|
result = [path + "/IllusionInjector.dll", path + "/IllusionPlugin.dll"] + result # Always put it on top
|
|
return result
|
|
|
|
def buildReferencesXml(path):
|
|
assemblyPathes = getAssemblyReferences(path)
|
|
result = list()
|
|
for asm in assemblyPathes:
|
|
asmPath = str(asm)
|
|
xml = " <Reference Include=\"" + asmPath[asmPath.rfind("/") + 1:].replace(".dll", "") + "\">\n" \
|
|
+ " <HintPath>" + asmPath.replace("/", "\\") + "</HintPath>\n" \
|
|
+ " <HintPath>..\\" + asmPath.replace("/", "\\") + "</HintPath>\n" \
|
|
+ " </Reference>\n"
|
|
result.append(xml)
|
|
return "<!--Start Dependencies-->\n <ItemGroup>\n" + "".join(result) + " </ItemGroup>\n<!--End Dependencies-->"
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description="Generate TechbloxModdingAPI.csproj")
|
|
# TODO (maybe?): add params for custom csproj read and write locations
|
|
args = parser.parse_args()
|
|
|
|
print("Building Assembly references")
|
|
asmXml = buildReferencesXml("../ref/Techblox_Data/Managed")
|
|
# print(asmXml)
|
|
|
|
with open("../TechbloxModdingAPI/TechbloxModdingAPI.csproj", "r") as xmlFile:
|
|
print("Parsing TechbloxModdingAPI.csproj")
|
|
fileStr = xmlFile.read()
|
|
# print(fileStr)
|
|
depsStart = re.search(r"\<!--\s*Start\s+Dependencies\s*--\>", fileStr)
|
|
depsEnd = re.search(r"\<!--\s*End\s+Dependencies\s*--\>", fileStr)
|
|
if depsStart is None or depsEnd is None:
|
|
print("Unable to find dependency XML comments, aborting!")
|
|
exit(1)
|
|
newFileStr = fileStr[:depsStart.start() - 1] + "\n" + asmXml + "\n" + fileStr[depsEnd.end() + 1:]
|
|
with open("../TechbloxModdingAPI/TechbloxModdingAPI.csproj", "w") as xmlFile:
|
|
print("Writing Assembly references")
|
|
xmlFile.write(newFileStr)
|
|
# print(newFileStr)
|
|
|
|
|