#!/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 = " \n" \ + " " + asmPath.replace("/", "\\") + "\n" \ + " ..\\" + asmPath.replace("/", "\\") + "\n" \ + " \n" result.append(xml) return "\n \n" + "".join(result) + " \n" 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"\