|
- #!/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)
-
-
|