diff options
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp index fb88e9c34..beda80cad 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -505,6 +505,71 @@ bool parse_build_flags(Array<String> args) { break; } + case BuildFlag_Collection: { + GB_ASSERT(value.kind == ExactValue_String); + String str = value.value_string; + isize eq_pos = -1; + for (isize i = 0; i < str.len; i++) { + if (str[i] == '=') { + eq_pos = i; + break; + } + } + if (eq_pos < 0) { + gb_printf_err("Expected 'name=path', got '%.*s'\n", LIT(param)); + bad_flags = true; + break; + } + String name = substring(str, 0, eq_pos); + String path = substring(str, eq_pos+1, str.len); + if (name.len == 0 || path.len == 0) { + gb_printf_err("Expected 'name=path', got '%.*s'\n", LIT(param)); + bad_flags = true; + break; + } + + if (!string_is_valid_identifier(name)) { + gb_printf_err("Library collection name '%.*s' must be a valid identifier\n", LIT(name)); + bad_flags = true; + break; + } + + if (name == "_") { + gb_printf_err("Library collection name cannot be an underscore\n"); + bad_flags = true; + break; + } + + if (name == "system") { + gb_printf_err("Library collection name 'system' is reserved\n"); + bad_flags = true; + break; + } + + String prev_path = {}; + bool found = find_library_collection_path(name, &prev_path); + if (found) { + gb_printf_err("Library collection '%.*s' already exists with path '%.*s'\n", LIT(name), LIT(prev_path)); + bad_flags = true; + break; + } + + gbAllocator a = heap_allocator(); + String fullpath = path_to_fullpath(a, path); + if (!path_is_directory(fullpath)) { + gb_printf_err("Library collection '%.*s' path must be a directory, got '%.*s'\n", LIT(name), LIT(fullpath)); + gb_free(a, fullpath.text); + bad_flags = true; + break; + } + + add_library_collection(name, path); + + // NOTE(bill): Allow for multiple library collections + continue; + } + + case BuildFlag_Define: { GB_ASSERT(value.kind == ExactValue_String); String str = value.value_string; |