diff --git a/SConstruct b/SConstruct index da01c27..227e1d6 100644 --- a/SConstruct +++ b/SConstruct @@ -1,5 +1,8 @@ #!/usr/bin/env python import os +import sys + +from methods import print_error def normalize_path(val, env): @@ -48,6 +51,19 @@ compilation_db = env.CompilationDatabase( ) env.Alias("compiledb", compilation_db) +submodule_initialized = False +dir_name = 'godot-cpp' +if os.path.isdir(dir_name): + if os.listdir(dir_name): + submodule_initialized = True + +if not submodule_initialized: + print_error("""godot-cpp is not available within this folder, as Git submodules haven't been initialized. +Run the following command to download godot-cpp: + + git submodule update --init --recursive""") + sys.exit(1) + env = SConscript("godot-cpp/SConstruct", {"env": env, "customs": customs}) env.Append(CPPPATH=["src/"]) diff --git a/methods.py b/methods.py new file mode 100644 index 0000000..a8bc0a4 --- /dev/null +++ b/methods.py @@ -0,0 +1,52 @@ +import os +import sys +from enum import Enum + +# Colors are disabled in non-TTY environments such as pipes. This means +# that if output is redirected to a file, it won't contain color codes. +# Colors are always enabled on continuous integration. +_colorize = bool(sys.stdout.isatty() or os.environ.get("CI")) + + +class ANSI(Enum): + """ + Enum class for adding ansi colorcodes directly into strings. + Automatically converts values to strings representing their + internal value, or an empty string in a non-colorized scope. + """ + + RESET = "\x1b[0m" + + BOLD = "\x1b[1m" + ITALIC = "\x1b[3m" + UNDERLINE = "\x1b[4m" + STRIKETHROUGH = "\x1b[9m" + REGULAR = "\x1b[22;23;24;29m" + + BLACK = "\x1b[30m" + RED = "\x1b[31m" + GREEN = "\x1b[32m" + YELLOW = "\x1b[33m" + BLUE = "\x1b[34m" + MAGENTA = "\x1b[35m" + CYAN = "\x1b[36m" + WHITE = "\x1b[37m" + + PURPLE = "\x1b[38;5;93m" + PINK = "\x1b[38;5;206m" + ORANGE = "\x1b[38;5;214m" + GRAY = "\x1b[38;5;244m" + + def __str__(self) -> str: + global _colorize + return str(self.value) if _colorize else "" + + +def print_warning(*values: object) -> None: + """Prints a warning message with formatting.""" + print(f"{ANSI.YELLOW}{ANSI.BOLD}WARNING:{ANSI.REGULAR}", *values, ANSI.RESET, file=sys.stderr) + + +def print_error(*values: object) -> None: + """Prints an error message with formatting.""" + print(f"{ANSI.RED}{ANSI.BOLD}ERROR:{ANSI.REGULAR}", *values, ANSI.RESET, file=sys.stderr)