Module: wine Branch: master Commit: 8247686c106fca0098d22bd6b182942b2597dfde URL: https://source.winehq.org/git/wine.git/?a=commit;h=8247686c106fca0098d22bd6b...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Feb 6 15:05:48 2020 +0100
wmc: Set the output format from the output file name.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
tools/makedep.c | 15 ++++++--------- tools/wmc/utils.c | 7 +++++++ tools/wmc/utils.h | 1 + tools/wmc/wmc.c | 12 ++++++++++++ 4 files changed, 26 insertions(+), 9 deletions(-)
diff --git a/tools/makedep.c b/tools/makedep.c index 4cc0e784c7..e5628712cc 100644 --- a/tools/makedep.c +++ b/tools/makedep.c @@ -2757,11 +2757,15 @@ static void output_source_rc( struct makefile *make, struct incl_file *source, c static void output_source_mc( struct makefile *make, struct incl_file *source, const char *obj ) { unsigned int i; + char *obj_path = obj_dir_path( make, obj );
strarray_add( &make->res_files, strmake( "%s.res", obj )); strarray_add( &make->clean_files, strmake( "%s.pot", obj )); - output( "%s.res: %s\n", obj_dir_path( make, obj ), source->filename ); - output( "\t%s -U -O res -o $@ %s", tools_path( make, "wmc" ), source->filename ); + output( "%s.pot %s.res: %s", obj_path, obj_path, source->filename ); + output_filename( tools_path( make, "wmc" )); + output_filenames( source->dependencies ); + output( "\n" ); + output( "\t%s -u -o $@ %s", tools_path( make, "wmc" ), source->filename ); if (linguas.count) { char *po_dir = top_obj_dir_path( make, "po" ); @@ -2772,13 +2776,6 @@ static void output_source_mc( struct makefile *make, struct incl_file *source, c output_filename( strmake( "%s/%s.mo", po_dir, linguas.str[i] )); } output( "\n" ); - output( "%s.pot: %s\n", obj_dir_path( make, obj ), source->filename ); - output( "\t%s -O pot -o $@ %s", tools_path( make, "wmc" ), source->filename ); - output( "\n" ); - output( "%s.pot %s.res:", obj_dir_path( make, obj ), obj_dir_path( make, obj )); - output_filename( tools_path( make, "wmc" )); - output_filenames( source->dependencies ); - output( "\n" ); }
diff --git a/tools/wmc/utils.c b/tools/wmc/utils.c index e3da5422d7..7261fe715a 100644 --- a/tools/wmc/utils.c +++ b/tools/wmc/utils.c @@ -200,6 +200,13 @@ char *strmake( const char* fmt, ... ) } }
+int strendswith( const char *str, const char *end ) +{ + int l = strlen(str); + int m = strlen(end); + return l >= m && !strcmp( str + l - m, end ); +} + int unistrlen(const WCHAR *s) { int n; diff --git a/tools/wmc/utils.h b/tools/wmc/utils.h index 48f47ee751..e4c546765d 100644 --- a/tools/wmc/utils.h +++ b/tools/wmc/utils.h @@ -43,6 +43,7 @@ void error(const char *s, ...) __attribute__((format (printf, 1, 2))); void warning(const char *s, ...) __attribute__((format (printf, 1, 2)));
char *dup_basename(const char *name, const char *ext); +int strendswith( const char *str, const char *end );
WCHAR *xunistrdup(const WCHAR * str); WCHAR *unistrcpy(WCHAR *dst, const WCHAR *src); diff --git a/tools/wmc/wmc.c b/tools/wmc/wmc.c index 89c8d6e8e9..93c029d751 100644 --- a/tools/wmc/wmc.c +++ b/tools/wmc/wmc.c @@ -126,6 +126,7 @@ FILE *yyin;
static enum { + FORMAT_UNKNOWN, FORMAT_RC, FORMAT_RES, FORMAT_POT @@ -287,6 +288,15 @@ int main(int argc,char *argv[]) input_name = argv[optind]; }
+ /* Guess output format */ + if (output_format == FORMAT_UNKNOWN) + { + if (output_name && strendswith( output_name, ".res" )) output_format = FORMAT_RES; + else if (output_name && strendswith( output_name, ".pot" )) output_format = FORMAT_POT; + else output_format = FORMAT_RC; + } + if (output_format == FORMAT_RES) unicodeout = 1; + /* Generate appropriate outfile names */ if(!output_name) { @@ -340,6 +350,8 @@ int main(int argc,char *argv[]) case FORMAT_POT: write_pot_file( output_name ); break; + default: + break; } output_name = NULL; header_name = NULL;