From 1630e5e0dd6e6531f04b0bb5620b057b61cbdfa0 Mon Sep 17 00:00:00 2001 From: Zakarya Date: Tue, 30 Jul 2024 14:17:56 -0700 Subject: [PATCH] Create a custom build system --- make | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100755 make diff --git a/make b/make new file mode 100755 index 0000000..fc029b1 --- /dev/null +++ b/make @@ -0,0 +1,104 @@ +#!/bin/python3 + +import os, sys + + +def get_file_tree(directory): + list_of_files = os.listdir(directory) + all_files = [] + + for iter in list_of_files: + full_path = os.path.join(directory, iter) + if os.path.isdir(full_path): + all_files = all_files + get_file_tree(full_path) + else: + all_files.append(full_path) + + return all_files + + + +def build_all(file_format): + for iter in get_file_tree("src"): + build_file(iter, file_format) + + +def build_file(file_to_build, file_format, output=None): # EXAMPLE: file_to_build="src/helloworld.asy", file_format="svg", output="~/Pictures/helloworld" + filename = file_to_build.split(".") + filename = filename[0] + filename = filename.split("/") + filename.pop(0) + filename = "/".join(filename) + directories = filename.split("/") + directory = directories + directory.pop() + directory = "/".join(directory) + if os.path.exists("output/" + file_format + "/" + directory) and os.path.isdir("output/" + file_format + "/" + directory): + pass # It exists + else: + print("Creating directory output/" + file_format + "/" + directory) + os.system("mkdir -p output/" + file_format + "/" + directory) + print("Building " + file_to_build + " to " + "output/" + file_format + "/" + filename + "." + file_format) + if output: + os.system("asy -f " + file_format + " -antialias 5 " + file_to_build + " -o " + output) + else: + os.system("asy -f " + file_format + " -antialias 5 " + file_to_build + " -o output/" + file_format + "/" + filename) + +def print_help(): + print(""" +Graphics compilation wrapper + +Use "make all" to compile all graphics in all formats +Use "make [svg|png|webp]" to compile all graphics in a specific format + +Flags: + -h or --help - Show this message + -s [graphic name] [svg|png|webp] - Compile a specific graphic + -o [output file] - compile to a specific file (only works after -s) + +Examples: +- make all +- make all svg +- make -s src/helloworld.asy svg +- make -s src/helloworld.asy svg -o ~/Pictures/helloworld +""") + + +if len(sys.argv) != 1: + if sys.argv[1] == "-h" or sys.argv[1] == "--help": + print_help() + + elif sys.argv[1] == "all": + if len(sys.argv) == 3: + if sys.argv[2] == "svg": + print("Compiling all SVGs") + build_all("svg") + + elif sys.argv[2] == "png": + print("Compiling all PNGs") + build_all("png") + + elif sys.argv[2] == "webp": + print("Compiling all WEBPs") + build_all("webp") + + else: + if len(sys.argv) == 2: + print("Compiling all graphics") + build_all("svg") + build_all("png") + build_all("webp") + else: + print("Unknown command", file=sys.stderr) + + elif sys.argv[1] == "-s": + if len(sys.argv) == 6: + build_file(sys.argv[2], sys.argv[3], output=sys.argv[5]) + elif len(sys.argv) == 4: + build_file(sys.argv[2], sys.argv[3]) + + else: + print("Unknown command", file=sys.stderr) # Not sure if this is the proper way to print an error + +else: + print_help()