diff -ubwr ./libtcc.c ../../work.luigi/tcc-0.9.25/libtcc.c --- ./libtcc.c 2009-12-01 19:42:09.000000000 +0100 +++ ../../work.luigi/tcc-0.9.25/libtcc.c 2009-12-01 17:53:20.000000000 +0100 @@ -2119,7 +2119,9 @@ { char buf[1024]; - s->output_type = output_type; + s->output_type = output_type & 7; + s->mode_m = output_type & 8; + output_type = s->output_type; if (!s->nostdinc) { /* default include paths */ diff -ubwr ./tcc.c ../../work.luigi/tcc-0.9.25/tcc.c --- ./tcc.c 2009-05-18 16:27:06.000000000 +0200 +++ ../../work.luigi/tcc-0.9.25/tcc.c 2009-12-01 17:54:17.000000000 +0100 @@ -66,6 +66,7 @@ static int multiple_files; static int print_search_dirs; static int output_type; +static int mode_m; static int reloc_output; static const char *outfile; static int do_bench = 0; @@ -111,6 +112,8 @@ TCC_OPTION_w, TCC_OPTION_pipe, TCC_OPTION_E, + TCC_OPTION_M, /* mkdep */ + TCC_OPTION_std, /* -std= */ }; static const TCCOption tcc_options[] = { @@ -148,6 +150,8 @@ { "w", TCC_OPTION_w, 0 }, { "pipe", TCC_OPTION_pipe, 0}, { "E", TCC_OPTION_E, 0}, + { "M", TCC_OPTION_M, 0}, + { "std=", TCC_OPTION_std, TCC_OPTION_HAS_ARG | TCC_OPTION_NOSEP }, { NULL }, }; @@ -399,6 +402,10 @@ } } break; + case TCC_OPTION_std: + break; /* ignore -std= */ + case TCC_OPTION_M: + mode_m = 8; /* FALLTHROUGH */ case TCC_OPTION_E: output_type = TCC_OUTPUT_PREPROCESS; break; @@ -502,7 +507,7 @@ start_time = getclock_us(); } - tcc_set_output_type(s, output_type); + tcc_set_output_type(s, output_type | mode_m); /* compile or add each files or library */ for(i = 0; i < nb_files && ret == 0; i++) { diff -ubwr ./tcc.h ../../work.luigi/tcc-0.9.25/tcc.h --- ./tcc.h 2009-05-18 16:27:06.000000000 +0200 +++ ../../work.luigi/tcc-0.9.25/tcc.h 2009-12-01 17:49:44.000000000 +0100 @@ -367,6 +367,7 @@ struct TCCState { int output_type; + int mode_m; /* tcc -M */ BufferedFile **include_stack_ptr; int *ifdef_stack_ptr; diff -ubwr ./tccpp.c ../../work.luigi/tcc-0.9.25/tccpp.c --- ./tccpp.c 2009-05-18 16:27:06.000000000 +0200 +++ ../../work.luigi/tcc-0.9.25/tccpp.c 2009-12-01 19:39:27.000000000 +0100 @@ -2897,6 +2897,7 @@ Sym *define_start; BufferedFile *file_ref; int token_seen, line_ref; + const char *base_file; preprocess_init(s1); define_start = define_stack; @@ -2908,6 +2909,12 @@ line_ref = 0; file_ref = NULL; + base_file = file->filename; + if (s1->mode_m) { + int l = strlen(base_file); + fprintf(s1->outfile, "%.*s.o: %s", l-2, base_file, base_file); + } + for (;;) { next(); if (tok == TOK_EOF) { @@ -2919,16 +2926,25 @@ token_seen = 0; } else if (!token_seen) { int d = file->line_num - line_ref; + if (s1->mode_m) { + if (file != file_ref && file->filename != base_file && + !search_cached_include(s1, '>', file->filename)) + fprintf(s1->outfile, " \\\n %s", file->filename); + } else { if (file != file_ref || d < 0 || d >= 8) fprintf(s1->outfile, "# %d \"%s\"\n", file->line_num, file->filename); else while (d) fputs("\n", s1->outfile), --d; + } line_ref = (file_ref = file)->line_num; token_seen = 1; } + if (!s1->mode_m) fputs(get_tok_str(tok, &tokc), s1->outfile); } + if (s1->mode_m) + fprintf(s1->outfile, "\n"); free_defines(define_start); return 0; }