diff --git a/wpimath/generate_numbers.py b/wpimath/generate_numbers.py index 61cc02a7ed..701f3e652b 100644 --- a/wpimath/generate_numbers.py +++ b/wpimath/generate_numbers.py @@ -1,42 +1,59 @@ import os -import shutil import sys -MAX_NUM = 20 -dirname, _ = os.path.split(os.path.abspath(__file__)) -cmake_binary_dir = sys.argv[1] +def main(): + MAX_NUM = 20 -with open(f"{dirname}/src/generate/GenericNumber.java.in", "r") as templateFile: - template = templateFile.read() - rootPath = f"{cmake_binary_dir}/generated/main/java/edu/wpi/first/wpiutil/math/numbers" + dirname, _ = os.path.split(os.path.abspath(__file__)) + cmake_binary_dir = sys.argv[1] - if os.path.exists(rootPath): - shutil.rmtree(rootPath) - os.makedirs(rootPath) + with open(f"{dirname}/src/generate/GenericNumber.java.in", + "r") as templateFile: + template = templateFile.read() + rootPath = f"{cmake_binary_dir}/generated/main/java/edu/wpi/first/wpiutil/math/numbers" - for i in range(MAX_NUM + 1): - with open(f"{rootPath}/N{i}.java", "w") as f: - f.write(template.replace("${num}", str(i))) + if not os.path.exists(rootPath): + os.makedirs(rootPath) -with open(f"{dirname}/src/generate/Nat.java.in", "r") as templateFile: - template = templateFile.read() - outputPath = f"{cmake_binary_dir}/generated/main/java/edu/wpi/first/wpiutil/math/Nat.java" - with open(f"{dirname}/src/generate/NatGetter.java.in", "r") as getterFile: - getter = getterFile.read() + for i in range(MAX_NUM + 1): + new_contents = template.replace("${num}", str(i)) - if os.path.exists(outputPath): - os.remove(outputPath) + if os.path.exists(f"{rootPath}/N{i}.java"): + with open(f"{rootPath}/N{i}.java", "r") as f: + if f.read() == new_contents: + continue - importsString = "" + # File either doesn't exist or has different contents + with open(f"{rootPath}/N{i}.java", "w") as f: + f.write(new_contents) - for i in range(MAX_NUM + 1): - importsString += f"import edu.wpi.first.wpiutil.math.numbers.N{i};\n" - template += getter.replace("${num}", str(i)) + with open(f"{dirname}/src/generate/Nat.java.in", "r") as templateFile: + template = templateFile.read() + outputPath = f"{cmake_binary_dir}/generated/main/java/edu/wpi/first/wpiutil/math/Nat.java" + with open(f"{dirname}/src/generate/NatGetter.java.in", + "r") as getterFile: + getter = getterFile.read() - template += "}\n" + importsString = "" - template = template.replace('{{REPLACEWITHIMPORTS}}', importsString) + for i in range(MAX_NUM + 1): + importsString += f"import edu.wpi.first.wpiutil.math.numbers.N{i};\n" + template += getter.replace("${num}", str(i)) - with open(outputPath, "w") as f: - f.write(template) + template += "}\n" + + template = template.replace('{{REPLACEWITHIMPORTS}}', importsString) + + if os.path.exists(outputPath): + with open(outputPath, "r") as f: + if f.read() == template: + return 0 + + # File either doesn't exist or has different contents + with open(outputPath, "w") as f: + f.write(template) + + +if __name__ == "__main__": + main()