TechbloxModdingAPI/Automation/gen_csproj.py
2020-05-15 17:42:04 -04:00

53 lines
2.2 KiB
Python
Executable file

#!/usr/bin/python3
import argparse
from pathlib import Path, PurePath
import re
DLL_EXCLUSIONS_REGEX = r"(System|Microsoft|Mono)\."
def getAssemblyReferences(path):
asmDir = Path(path)
result = list()
for child in asmDir.iterdir():
if child.is_file() and re.search(DLL_EXCLUSIONS_REGEX, str(child), re.I) is None and str(child).lower().endswith(".dll"):
result.append(str(child).replace("\\", "/"))
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 GamecraftModdingAPI.csproj")
# TODO (maybe?): add params for custom csproj read and write locations
args = parser.parse_args()
print("Building Assembly references")
asmXml = buildReferencesXml("../ref/Gamecraft_Data/Managed")
# print(asmXml)
with open("../GamecraftModdingAPI/GamecraftModdingAPI.csproj", "r") as xmlFile:
print("Parsing GamecraftModdingAPI.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()] + "\n" + asmXml + "\n" + fileStr[depsEnd.end() + 1:]
with open("../GamecraftModdingAPI/GamecraftModdingAPI.csproj", "w") as xmlFile:
print("Writing Assembly references (not)")
xmlFile.write(newFileStr)
# print(newFileStr)