rendercompile_input_t rendercompile_parse_command_line(const string_const_t* cmdline) { rendercompile_input_t input; size_t arg, asize; memset(&input, 0, sizeof(input)); for (arg = 1, asize = array_size(cmdline); arg < asize; ++arg) { if (string_equal(STRING_ARGS(cmdline[arg]), STRING_CONST("--help"))) input.display_help = true; else if (string_equal(STRING_ARGS(cmdline[arg]), STRING_CONST("--source"))) { if (arg < asize - 1) input.source_path = cmdline[++arg]; } /*else if (string_equal(STRING_ARGS(cmdline[arg]), STRING_CONST("--uuid"))) { if (arg < asize - 1) { ++arg; input.uuid = string_to_uuid(STRING_ARGS(cmdline[arg])); if (uuid_is_null(input.uuid)) log_warnf(HASH_RESOURCE, WARNING_INVALID_VALUE, STRING_CONST("Invalid UUID: %.*s"), STRING_FORMAT(cmdline[arg])); } } else if (string_equal(STRING_ARGS(cmdline[arg]), STRING_CONST("--set"))) { if (arg < asize - 2) { input.key = cmdline[++arg]; input.value = cmdline[++arg]; } }*/ else if (string_equal(STRING_ARGS(cmdline[arg]), STRING_CONST("--binary"))) { input.binary = 1; } else if (string_equal(STRING_ARGS(cmdline[arg]), STRING_CONST("--ascii"))) { input.binary = 0; } else if (string_equal(STRING_ARGS(cmdline[arg]), STRING_CONST("--debug"))) { log_set_suppress(0, ERRORLEVEL_NONE); log_set_suppress(HASH_RESOURCE, ERRORLEVEL_NONE); log_set_suppress(HASH_RENDER, ERRORLEVEL_NONE); } else if (string_equal(STRING_ARGS(cmdline[arg]), STRING_CONST("--"))) break; //Stop parsing cmdline options else { array_push(input.input_files, cmdline[arg]); } } error_context_pop(); bool already_help = input.display_help; if (!input.source_path.length) input.source_path = resource_source_path(); if (!already_help && !input.source_path.length) { log_errorf(HASH_RESOURCE, ERROR_INVALID_VALUE, STRING_CONST("No source path given")); input.display_help = true; } if (!already_help && !array_size(input.input_files)) { log_errorf(HASH_RESOURCE, ERROR_INVALID_VALUE, STRING_CONST("No input files given")); input.display_help = true; } return input; }
int main_run(void* main_arg) { int result = LUACOMPILE_RESULT_OK; luacompile_input_t input = luacompile_parse_command_line(environment_command_line()); FOUNDATION_UNUSED(main_arg); for (size_t cfgfile = 0, fsize = array_size(input.config_files); cfgfile < fsize; ++cfgfile) sjson_parse_path(STRING_ARGS(input.config_files[cfgfile]), luacompile_parse_config); if (input.source_path.length) resource_source_set_path(STRING_ARGS(input.source_path)); if (!resource_source_path().length) { log_errorf(HASH_RESOURCE, ERROR_INVALID_VALUE, STRING_CONST("No source path given")); input.display_help = true; } if (input.display_help) { luacompile_print_usage(); goto exit; } resource_compile_register(lua_compile); size_t ifile, fsize; for (ifile = 0, fsize = array_size(input.input_files); ifile < fsize; ++ifile) { uuid_t uuid = string_to_uuid(STRING_ARGS(input.input_files[ifile])); if (uuid_is_null(uuid)) { char buffer[BUILD_MAX_PATHLEN]; string_t pathstr = string_copy(buffer, sizeof(buffer), STRING_ARGS(input.input_files[ifile])); pathstr = path_clean(STRING_ARGS(pathstr), sizeof(buffer)); pathstr = path_absolute(STRING_ARGS(pathstr), sizeof(buffer)); uuid = resource_import_map_lookup(STRING_ARGS(pathstr)).uuid; } if (uuid_is_null(uuid)) { log_warnf(HASH_RESOURCE, WARNING_INVALID_VALUE, STRING_CONST("Failed to lookup: %.*s"), STRING_FORMAT(input.input_files[ifile])); result = LUACOMPILE_RESULT_INVALID_INPUT; break; } if (resource_compile(uuid, RESOURCE_PLATFORM_ALL)) { string_const_t uuidstr = string_from_uuid_static(uuid); log_infof(HASH_RESOURCE, STRING_CONST("Successfully compiled: %.*s (%.*s)"), STRING_FORMAT(uuidstr), STRING_FORMAT(input.input_files[ifile])); } else { string_const_t uuidstr = string_from_uuid_static(uuid); log_warnf(HASH_RESOURCE, WARNING_UNSUPPORTED, STRING_CONST("Failed to compile: %.*s (%.*s)"), STRING_FORMAT(uuidstr), STRING_FORMAT(input.input_files[ifile])); } } exit: array_deallocate(input.config_files); array_deallocate(input.input_files); return result; }