Skip to content

Commit

Permalink
Implement ODIN_ROOT #913
Browse files Browse the repository at this point in the history
  • Loading branch information
gingerBill committed Apr 26, 2021
1 parent 04535b2 commit 06e0da9
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 3 deletions.
33 changes: 30 additions & 3 deletions src/build_settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -450,8 +450,35 @@ bool find_library_collection_path(String name, String *path) {
String const WIN32_SEPARATOR_STRING = {cast(u8 *)"\\", 1};
String const NIX_SEPARATOR_STRING = {cast(u8 *)"/", 1};

#if defined(GB_SYSTEM_WINDOWS)

String internal_odin_root_dir(void);
String odin_root_dir(void) {
if (global_module_path_set) {
return global_module_path;
}

gbAllocator a = heap_allocator();
char const *found = gb_get_env("ODIN_ROOT", a);
if (found) {
String path = path_to_full_path(a, make_string_c(found));
if (path[path.len-1] != '/' && path[path.len-1] != '\\') {
#if defined(GB_SYSTEM_WINDOWS)
path = concatenate_strings(a, path, WIN32_SEPARATOR_STRING);
#else
path = concatenate_strings(a, path, NIX_SEPARATOR_STRING);
#endif
}

global_module_path = path;
global_module_path_set = true;
return global_module_path;
}
return internal_odin_root_dir();
}


#if defined(GB_SYSTEM_WINDOWS)
String internal_odin_root_dir(void) {
String path = global_module_path;
isize len, i;
gbTempArenaMemory tmp;
Expand Down Expand Up @@ -510,7 +537,7 @@ String odin_root_dir(void) {

String path_to_fullpath(gbAllocator a, String s);

String odin_root_dir(void) {
String internal_odin_root_dir(void) {
String path = global_module_path;
isize len, i;
gbTempArenaMemory tmp;
Expand Down Expand Up @@ -568,7 +595,7 @@ String odin_root_dir(void) {

String path_to_fullpath(gbAllocator a, String s);

String odin_root_dir(void) {
String internal_odin_root_dir(void) {
String path = global_module_path;
isize len, i;
gbTempArenaMemory tmp;
Expand Down
22 changes: 22 additions & 0 deletions src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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")));
Expand Down

0 comments on commit 06e0da9

Please sign in to comment.