Alexandre Julliard : wrc: Set the output format from the output file name.

Alexandre Julliard julliard at winehq.org
Fri Feb 7 15:41:07 CST 2020


Module: wine
Branch: master
Commit: 0a66eaea689e97ebf2277afaecfb844cd73ec1bd
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=0a66eaea689e97ebf2277afaecfb844cd73ec1bd

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri Feb  7 10:38:06 2020 +0100

wrc: Set the output format from the output file name.

Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 tools/makedep.c   | 43 +++++++++++++++----------------------------
 tools/wrc/utils.c |  7 +++++++
 tools/wrc/utils.h |  1 +
 tools/wrc/wrc.c   |  8 +++++++-
 4 files changed, 30 insertions(+), 29 deletions(-)

diff --git a/tools/makedep.c b/tools/makedep.c
index 12095436dd..f7261795fc 100644
--- a/tools/makedep.c
+++ b/tools/makedep.c
@@ -2705,49 +2705,36 @@ static void output_source_h( struct makefile *make, struct incl_file *source, co
 static void output_source_rc( struct makefile *make, struct incl_file *source, const char *obj )
 {
     struct strarray defines = get_source_defines( make, source, obj );
+    char *po_dir = NULL;
     unsigned int i;
 
     if (source->file->flags & FLAG_GENERATED) strarray_add( &make->clean_files, source->name );
+    if (linguas.count && (source->file->flags & FLAG_RC_PO)) po_dir = top_obj_dir_path( make, "po" );
     strarray_add( &make->res_files, strmake( "%s.res", obj ));
-    output( "%s.res: %s\n", obj_dir_path( make, obj ), source->filename );
+    if (source->file->flags & FLAG_RC_PO && !(source->file->flags & FLAG_PARENTDIR))
+    {
+        strarray_add( &make->clean_files, strmake( "%s.pot", obj ));
+        output( "%s.pot ", obj_dir_path( make, obj ) );
+    }
+    output( "%s.res: %s", obj_dir_path( make, obj ), source->filename );
+    output_filename( tools_path( make, "wrc" ));
+    output_filenames( source->dependencies );
+    output( "\n" );
     output( "\t%s -u -o $@", tools_path( make, "wrc" ) );
     if (make->is_win16) output_filename( "-m16" );
     else output_filenames( target_flags );
     output_filename( "--nostdinc" );
+    if (po_dir) output_filename( strmake( "--po-dir=%s", po_dir ));
     output_filenames( defines );
-    if (linguas.count && (source->file->flags & FLAG_RC_PO))
+    output_filename( source->filename );
+    output( "\n" );
+    if (po_dir)
     {
-        char *po_dir = top_obj_dir_path( make, "po" );
-        output_filename( strmake( "--po-dir=%s", po_dir ));
-        output_filename( source->filename );
-        output( "\n" );
         output( "%s.res:", obj_dir_path( make, obj ));
         for (i = 0; i < linguas.count; i++)
             output_filename( strmake( "%s/%s.mo", po_dir, linguas.str[i] ));
         output( "\n" );
     }
-    else
-    {
-        output_filename( source->filename );
-        output( "\n" );
-    }
-    if (source->file->flags & FLAG_RC_PO && !(source->file->flags & FLAG_PARENTDIR))
-    {
-        strarray_add( &make->clean_files, strmake( "%s.pot", obj ));
-        output( "%s.pot: %s\n", obj_dir_path( make, obj ), source->filename );
-        output( "\t%s -u -O pot -o $@", tools_path( make, "wrc" ) );
-        if (make->is_win16) output_filename( "-m16" );
-        else output_filenames( target_flags );
-        output_filename( "--nostdinc" );
-        output_filenames( defines );
-        output_filename( source->filename );
-        output( "\n" );
-        output( "%s.pot ", obj_dir_path( make, obj ));
-    }
-    output( "%s.res:", obj_dir_path( make, obj ));
-    output_filename( tools_path( make, "wrc" ));
-    output_filenames( source->dependencies );
-    output( "\n" );
 }
 
 
diff --git a/tools/wrc/utils.c b/tools/wrc/utils.c
index 9780beb613..8c8a36faf5 100644
--- a/tools/wrc/utils.c
+++ b/tools/wrc/utils.c
@@ -219,6 +219,13 @@ char *xstrdup(const char *str)
 	return strcpy(s, str);
 }
 
+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 compare_striA( const char *str1, const char *str2 )
 {
     for (;;)
diff --git a/tools/wrc/utils.h b/tools/wrc/utils.h
index aed10b5dea..8b48be38e1 100644
--- a/tools/wrc/utils.h
+++ b/tools/wrc/utils.h
@@ -36,6 +36,7 @@ char *xstrdup(const char *str);
 int compare_striA( const char *str1, const char *str2 );
 int compare_striW( const WCHAR *str1, const WCHAR *str2 );
 char *strmake(const char* fmt, ...) __attribute__((__format__ (__printf__, 1, 2 )));
+int strendswith( const char *str, const char *end );
 int parser_error(const char *s, ...) __attribute__((format (printf, 1, 2)));
 int parser_warning(const char *s, ...) __attribute__((format (printf, 1, 2)));
 void internal_error(const char *file, int line, const char *s, ...) __attribute__((format (printf, 3, 4), noreturn));
diff --git a/tools/wrc/wrc.c b/tools/wrc/wrc.c
index b4cb013f8e..f81fe7baa6 100644
--- a/tools/wrc/wrc.c
+++ b/tools/wrc/wrc.c
@@ -589,8 +589,14 @@ int main(int argc,char *argv[])
 		verify_translations(resource_top);
 		exit(0);
 	}
+        if (!po_mode && output_name)
+        {
+            if (strendswith( output_name, ".po" )) po_mode = 1;
+            else if (strendswith( output_name, ".pot" )) po_mode = 2;
+        }
 	if (po_mode)
 	{
+            if (!win32) error( "PO files are not supported in 16-bit mode\n" );
             if (po_mode == 2)  /* pot file */
             {
                 if (!output_name)
@@ -604,7 +610,7 @@ int main(int argc,char *argv[])
             output_name = NULL;
             exit(0);
 	}
-        add_translations( po_dir );
+        if (win32) add_translations( po_dir );
 
 	/* Convert the internal lists to binary data */
 	resources2res(resource_top);




More information about the wine-cvs mailing list