Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}