eolian generator: refactor the main function (remove cruft)

This commit is contained in:
Daniel Kolesa 2015-10-23 14:43:57 +01:00
parent a29d6aed66
commit 10883d080f
1 changed files with 88 additions and 114 deletions

View File

@ -48,7 +48,7 @@ _filename_get(const char *path)
}
static Eina_Bool
_read_file(char *filename, Eina_Strbuf **buf)
_read_file(const char *filename, Eina_Strbuf **buf)
{
FILE *fd = fopen(filename, "rb");
if (!fd)
@ -92,7 +92,7 @@ _read_file(char *filename, Eina_Strbuf **buf)
}
static Eina_Bool
_write_file(char *filename, const Eina_Strbuf *buffer, Eina_Bool append)
_write_file(const char *filename, const Eina_Strbuf *buffer, Eina_Bool append)
{
FILE *fd = fopen(filename, append ? "ab" : "wb");
if (!fd)
@ -109,7 +109,7 @@ _write_file(char *filename, const Eina_Strbuf *buffer, Eina_Bool append)
}
static Eina_Bool
_generate_header_file(char *filename, const char *eo_filename, Eina_Bool legacy)
_generate_header_file(const char *filename, const char *eo_filename, Eina_Bool legacy)
{
Eina_Bool ret = EINA_FALSE;
@ -160,7 +160,7 @@ end:
}
static Eina_Bool
_generate_stub_header_file(char *filename, const char *eo_filename)
_generate_stub_header_file(const char *filename, const char *eo_filename)
{
Eina_Bool ret = EINA_FALSE;
@ -190,7 +190,7 @@ end:
}
static Eina_Bool
_generate_c_file(char *filename, const char *eo_filename, Eina_Bool legacy_support)
_generate_c_file(const char *filename, const char *eo_filename, Eina_Bool legacy_support)
{
Eina_Bool ret = EINA_FALSE;
@ -226,7 +226,7 @@ end:
}
static Eina_Bool
_generate_impl_c_file(char *filename, const char *eo_filename)
_generate_impl_c_file(const char *filename, const char *eo_filename)
{
const Eolian_Class *class = eolian_class_get_by_file(eo_filename);
if (!class)
@ -251,80 +251,66 @@ _generate_impl_c_file(char *filename, const char *eo_filename)
enum
{
NO_WAY_GEN,
H_GEN,
H_STUB_GEN,
C_GEN,
C_IMPL_GEN
GEN_NOTHING = 0,
GEN_H,
GEN_H_STUB,
GEN_C,
GEN_C_IMPL
};
static int gen_opt = NO_WAY_GEN;
static int legacy_support = 0;
#define EO_SUFFIX ".eo"
#define EOT_SUFFIX ".eot"
int main(int argc, char **argv)
int
main(int argc, char **argv)
{
int ret = 1;
int gen_what = GEN_NOTHING, do_legacy = 0, ret = 1;
Eina_Bool help = EINA_FALSE;
const char *eo_filename = NULL;
char *output_filename = NULL; /* if NULL, have to generate, otherwise use the name stored there */
char *eo_filename_copy = NULL, *eo_file_basename;
Eina_Bool is_eo = EINA_FALSE;
const char *outf = NULL;
eina_init();
eolian_init();
const char *log_dom = "eolian_gen";
_eolian_gen_log_dom = eina_log_domain_register(log_dom, EINA_COLOR_GREEN);
const char *dom = "eolian_gen";
_eolian_gen_log_dom = eina_log_domain_register(dom, EINA_COLOR_GREEN);
if (_eolian_gen_log_dom < 0)
{
EINA_LOG_ERR("Could not register log domain: %s", log_dom);
EINA_LOG_ERR("Could not register log domain: %s", dom);
goto end;
}
eina_log_timing(_eolian_gen_log_dom,
EINA_LOG_STATE_STOP,
EINA_LOG_STATE_INIT);
eina_log_timing(_eolian_gen_log_dom, EINA_LOG_STATE_STOP, EINA_LOG_STATE_INIT);
static struct option long_options[] =
{
/* These options set a flag. */
{"help", no_argument, 0, 'h'},
{"gh", no_argument, &gen_opt, H_GEN},
{"gc", no_argument, &gen_opt, C_GEN},
{"gi", no_argument, &gen_opt, C_IMPL_GEN},
{"gs", no_argument, &gen_opt, H_STUB_GEN},
{"output", required_argument, 0, 'o'},
{"legacy", no_argument, &legacy_support, 1},
{"include", required_argument, 0, 'I'},
{0, 0, 0, 0}
};
int long_index =0, opt;
while ((opt = getopt_long(argc, argv,"vho:I:", long_options, &long_index )) != -1)
{
switch (opt) {
case 0: break;
case 'o':
{
output_filename = strdup(optarg);
break;
}
case 'h': help = EINA_TRUE; break;
case 'I':
{
const char *dir = optarg;
if (!eolian_directory_scan(dir))
{
fprintf(stderr, "eolian: could not scan '%s'\n", dir);
goto end;
}
break;
}
default: help = EINA_TRUE;
}
}
eo_filename = argv[optind++];
struct option opts[] = {
{ "help", no_argument, NULL, 'h' },
{ "gh", no_argument, &gen_what, GEN_H },
{ "gc", no_argument, &gen_what, GEN_C },
{ "gi", no_argument, &gen_what, GEN_C_IMPL },
{ "gs", no_argument, &gen_what, GEN_H_STUB },
{ "output", required_argument, NULL, 'o' },
{ "legacy", no_argument, &do_legacy, 1 },
{ "include", required_argument, NULL, 'I' },
{ NULL, 0, NULL, 0 }
};
for (int opt; (opt = getopt_long(argc, argv, "vho:I:", opts, NULL)) != -1; )
switch (opt)
{
case 0: break;
case 'o':
outf = optarg;
break;
case 'h':
help = EINA_TRUE;
break;
case 'I':
if (!eolian_directory_scan(optarg))
{
fprintf(stderr, "eolian: could not scan '%s'\n", optarg);
goto end;
}
break;
default:
help = EINA_TRUE;
break;
}
if (help)
{
@ -342,17 +328,16 @@ int main(int argc, char **argv)
goto end;
}
if (!eo_filename)
const char *eof = argv[optind++];
if (!eof)
{
fprintf(stderr, "eolian: no input file specified\n");
fprintf(stderr, "eolian: no input file\n");
goto end;
}
is_eo = eina_str_has_suffix(eo_filename, EO_SUFFIX);
if (!eolian_file_parse(eo_filename))
if (!eolian_file_parse(eof))
{
fprintf(stderr, "eolian: error parsing file '%s'\n", eo_filename);
fprintf(stderr, "eolian: could not parse file '%s'\n", eof);
goto end;
}
@ -362,60 +347,49 @@ int main(int argc, char **argv)
goto end;
}
eo_filename_copy = strdup(eo_filename);
eo_file_basename = basename(eo_filename_copy);
char *eofc = strdup(eof);
char *eobn = basename(eofc);
if (gen_opt)
if (gen_what)
{
if (!output_filename)
if (!outf)
{
fprintf(stderr, "eolian: no output file specified\n");
fprintf(stderr, "eolian: no output file\n");
free(eofc);
goto end;
}
switch (gen_opt)
switch (gen_what)
{
case H_GEN:
{
INF("Generating header file %s\n", output_filename);
ret = !_generate_header_file(output_filename, eo_file_basename, legacy_support);
break;
}
case H_STUB_GEN:
{
INF("Generating stubs header file %s\n", output_filename);
ret = !_generate_stub_header_file(output_filename, eo_file_basename);
break;
}
case C_GEN:
{
INF("Generating source file %s\n", output_filename);
ret = !_generate_c_file(output_filename, eo_file_basename, !!legacy_support);
break;
}
case C_IMPL_GEN:
{
INF("Generating user source file %s\n", output_filename);
ret = !_generate_impl_c_file(output_filename, eo_file_basename);
break;
}
case GEN_H:
INF("Generating header file %s\n", outf);
ret = !_generate_header_file(outf, eobn, do_legacy);
break;
case GEN_H_STUB:
INF("Generating stub header file %s\n", outf);
ret = !_generate_stub_header_file(outf, eobn);
break;
case GEN_C:
INF("Generating source file %s\n", outf);
ret = !_generate_c_file(outf, eobn, do_legacy);
break;
case GEN_C_IMPL:
INF("Generating user source file %s\n", outf);
ret = !_generate_impl_c_file(outf, eobn);
break;
default:
ERR("Bad generation option\n");
break;
ERR("Wrong generation option\n");
break;
}
}
else ret = 0;
else
ret = 0;
free(eofc);
end:
free(eo_filename_copy);
free(output_filename);
eina_log_timing(_eolian_gen_log_dom,
EINA_LOG_STATE_START,
EINA_LOG_STATE_SHUTDOWN);
eina_log_timing(_eolian_gen_log_dom, EINA_LOG_STATE_START, EINA_LOG_STATE_SHUTDOWN);
eina_log_domain_unregister(_eolian_gen_log_dom);
_eolian_gen_log_dom = -1;
eolian_shutdown();
eina_shutdown();
return ret;
}
}