Implement ODIN_ROOT #913

This commit is contained in:
gingerBill
2021-04-26 22:56:32 +01:00
parent 04535b2913
commit 06e0da97b7
2 changed files with 52 additions and 3 deletions

View File

@@ -1916,6 +1916,24 @@ void print_show_unused(Checker *c) {
print_usage_line(0, "");
}
bool check_env(void) {
gbAllocator a = heap_allocator();
char const *odin_root = gb_get_env("ODIN_ROOT", a);
defer (gb_free(a, cast(void *)odin_root));
if (odin_root) {
if (!gb_file_exists(odin_root)) {
gb_printf_err("Invalid ODIN_ROOT, directory does not exist, got %s\n", odin_root);
return false;
}
String path = make_string_c(odin_root);
if (!path_is_directory(path)) {
gb_printf_err("Invalid ODIN_ROOT, expected a directory, got %s\n", odin_root);
return false;
}
}
return true;
}
int main(int arg_count, char const **arg_ptr) {
if (arg_count < 2) {
@@ -1939,6 +1957,10 @@ int main(int arg_count, char const **arg_ptr) {
init_keyword_hash_table();
global_big_int_init();
if (!check_env()) {
return 1;
}
array_init(&library_collections, heap_allocator());
// NOTE(bill): 'core' cannot be (re)defined by the user
add_library_collection(str_lit("core"), get_fullpath_relative(heap_allocator(), odin_root_dir(), str_lit("core")));