From c334b591429509730e9925b53ea23645d49cd8ce Mon Sep 17 00:00:00 2001 From: seyko Date: Tue, 6 Jan 2015 22:19:45 +0300 Subject: [PATCH] Warn about a conflicting compile options spectified on the command line. Try "tcc -E -c tccasm.c -o tccasm.o" --- libtcc.c | 12 +++++++++++- libtcc.h | 10 +++++----- tcc.c | 4 +++- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/libtcc.c b/libtcc.c index c6bc067..711cdd2 100644 --- a/libtcc.c +++ b/libtcc.c @@ -906,7 +906,7 @@ LIBTCCAPI TCCState *tcc_new(void) #else tcc_set_lib_path(s, CONFIG_TCCDIR); #endif - s->output_type = TCC_OUTPUT_MEMORY; + s->output_type = 0; preprocess_new(); s->include_stack_ptr = s->include_stack; @@ -1831,6 +1831,8 @@ PUB_FUNC int tcc_parse_args(TCCState *s, int argc, char **argv) s->do_debug = 1; break; case TCC_OPTION_c: + if (s->output_type) + tcc_warning("-c: some compiler action already specified (%d)", s->output_type); s->output_type = TCC_OUTPUT_OBJ; break; #ifdef TCC_TARGET_ARM @@ -1849,6 +1851,8 @@ PUB_FUNC int tcc_parse_args(TCCState *s, int argc, char **argv) s->static_link = 1; break; case TCC_OPTION_shared: + if (s->output_type) + tcc_warning("-shared: some compiler action already specified (%d)", s->output_type); s->output_type = TCC_OUTPUT_DLL; break; case TCC_OPTION_soname: @@ -1862,6 +1866,8 @@ PUB_FUNC int tcc_parse_args(TCCState *s, int argc, char **argv) break; case TCC_OPTION_r: /* generate a .o merging several output files */ + if (s->output_type) + tcc_warning("-r: some compiler action already specified (%d)", s->output_type); s->option_r = 1; s->output_type = TCC_OUTPUT_OBJ; break; @@ -1878,6 +1884,8 @@ PUB_FUNC int tcc_parse_args(TCCState *s, int argc, char **argv) s->print_search_dirs = 1; break; case TCC_OPTION_run: + if (s->output_type) + tcc_warning("-run: some compiler action already specified (%d)", s->output_type); s->output_type = TCC_OUTPUT_MEMORY; tcc_set_options(s, optarg); run = 1; @@ -1907,6 +1915,8 @@ PUB_FUNC int tcc_parse_args(TCCState *s, int argc, char **argv) cstr_ccat(&linker_arg, '\0'); break; case TCC_OPTION_E: + if (s->output_type) + tcc_warning("-E: some compiler action already specified (%d)", s->output_type); s->output_type = TCC_OUTPUT_PREPROCESS; break; case TCC_OPTION_MD: diff --git a/libtcc.h b/libtcc.h index e69cc6b..799ffd8 100644 --- a/libtcc.h +++ b/libtcc.h @@ -58,11 +58,11 @@ LIBTCCAPI int tcc_compile_string(TCCState *s, const char *buf); /* set output type. MUST BE CALLED before any compilation */ LIBTCCAPI int tcc_set_output_type(TCCState *s, int output_type); -#define TCC_OUTPUT_MEMORY 0 /* output will be run in memory (default) */ -#define TCC_OUTPUT_EXE 1 /* executable file */ -#define TCC_OUTPUT_DLL 2 /* dynamic library */ -#define TCC_OUTPUT_OBJ 3 /* object file */ -#define TCC_OUTPUT_PREPROCESS 4 /* only preprocess (used internally) */ +#define TCC_OUTPUT_MEMORY 1 /* output will be run in memory (default) */ +#define TCC_OUTPUT_EXE 2 /* executable file */ +#define TCC_OUTPUT_DLL 3 /* dynamic library */ +#define TCC_OUTPUT_OBJ 4 /* object file */ +#define TCC_OUTPUT_PREPROCESS 5 /* only preprocess (used internally) */ /* equivalent to -Lpath option */ LIBTCCAPI int tcc_add_library_path(TCCState *s, const char *pathname); diff --git a/tcc.c b/tcc.c index 392efca..c80bb4f 100644 --- a/tcc.c +++ b/tcc.c @@ -249,7 +249,6 @@ int main(int argc, char **argv) const char *first_file = NULL; s = tcc_new(); - s->output_type = TCC_OUTPUT_EXE; optind = tcc_parse_args(s, argc - 1, argv + 1); tcc_set_environment(s); @@ -259,6 +258,9 @@ int main(int argc, char **argv) return 1; } + if (s->output_type == 0) + s->output_type = TCC_OUTPUT_EXE; + if (s->option_m) exec_other_tcc(s, argv, s->option_m);