Alexandre Julliard : makedep: Don' t look for header files in the build directories.

Alexandre Julliard julliard at winehq.org
Mon Dec 2 13:37:51 CST 2013


Module: wine
Branch: master
Commit: 202d046d685802640675651b3c039bf800e9732b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=202d046d685802640675651b3c039bf800e9732b

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Sat Nov 30 12:50:30 2013 +0100

makedep: Don't look for header files in the build directories.

---

 tools/makedep.c |   62 ++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 39 insertions(+), 23 deletions(-)

diff --git a/tools/makedep.c b/tools/makedep.c
index 692ee58..164b7e4 100644
--- a/tools/makedep.c
+++ b/tools/makedep.c
@@ -88,7 +88,7 @@ struct strarray
     const char **str;
 };
 
-static struct strarray paths;
+static struct strarray include_args;
 static struct strarray object_extensions;
 
 static const char *src_dir;
@@ -574,20 +574,13 @@ static FILE *open_include_file( struct incl_file *pFile )
         free( filename );
     }
 
-    /* first try name as is */
-    if ((file = fopen( pFile->name, "r" )))
-    {
-        pFile->filename = xstrdup( pFile->name );
-        return file;
-    }
-
     /* now try in source dir */
     if (src_dir)
-    {
         filename = strmake( "%s/%s", src_dir, pFile->name );
-        if ((file = fopen( filename, "r" ))) goto found;
-        free( filename );
-    }
+    else
+        filename = xstrdup( pFile->name );
+    if ((file = fopen( filename, "r" ))) goto found;
+    free( filename );
 
     /* now try in parent source dir */
     if (parent_dir)
@@ -621,6 +614,27 @@ static FILE *open_include_file( struct incl_file *pFile )
         free( filename );
     }
 
+    /* check for corresponding .in file in global includes (for config.h.in) */
+
+    if (strendswith( pFile->name, ".h" ))
+    {
+        filename = replace_extension( pFile->name, 2, ".h.in" );
+        if (top_src_dir)
+            filename = strmake( "%s/include/%s", top_src_dir, filename );
+        else if (top_obj_dir)
+            filename = strmake( "%s/include/%s", top_obj_dir, filename );
+        else
+            filename = NULL;
+
+        if (filename && (file = fopen( filename, "r" )))
+        {
+            pFile->sourcename = filename;
+            pFile->filename = strmake( "%s/include/%s", top_obj_dir, pFile->name );
+            return file;
+        }
+        free( filename );
+    }
+
     /* check for corresponding .x file in global includes */
 
     if (strendswith( pFile->name, "tmpl.h" ))
@@ -643,16 +657,17 @@ static FILE *open_include_file( struct incl_file *pFile )
     }
 
     /* now search in include paths */
-    for (i = 0; i < paths.count; i++)
+    for (i = 0; i < include_args.count; i++)
     {
-        if (paths.str[i][0] == '/')
+        const char *dir = include_args.str[i] + 2;  /* skip -I */
+        if (*dir == '/')
         {
             /* ignore absolute paths that don't point into the source dir */
             if (!top_src_dir) continue;
-            if (strncmp( paths.str[i], top_src_dir, strlen(top_src_dir) )) continue;
-            if (paths.str[i][strlen(top_src_dir)] != '/') continue;
+            if (strncmp( dir, top_src_dir, strlen(top_src_dir) )) continue;
+            if (dir[strlen(top_src_dir)] != '/') continue;
         }
-        filename = strmake( "%s/%s", paths.str[i], pFile->name );
+        filename = strmake( "%s/%s", dir, pFile->name );
         if ((file = fopen( filename, "r" ))) goto found;
         free( filename );
     }
@@ -1155,7 +1170,8 @@ static void output_sources(void)
         if (src_dir) output_filename( strmake( "-I%s/%s", src_dir, parent_dir ), &column );
         else output_filename( strmake( "-I%s", parent_dir ), &column );
     }
-    for (i = 0; i < paths.count; i++) output_filename( strmake( "-I%s", paths.str[i] ), &column );
+    if (top_src_dir && top_obj_dir) output_filename( strmake( "-I%s/include", top_obj_dir ), &column );
+    for (i = 0; i < include_args.count; i++) output_filename( include_args.str[i], &column );
     output( "\n" );
 
     LIST_FOR_EACH_ENTRY( source, &sources, struct incl_file, entry )
@@ -1436,7 +1452,7 @@ static void output_dependencies(void)
         }
         fclose( output_file );
         output_file = tmp_file;
-        if (!found && list_head(&sources)) output( "\n%s\n", Separator );
+        if (!found && !list_empty(&sources)) output( "\n%s\n", Separator );
     }
     else
     {
@@ -1444,7 +1460,7 @@ static void output_dependencies(void)
             fatal_perror( "%s", OutputFileName );
     }
 
-    output_sources();
+    if (!list_empty( &sources )) output_sources();
 
     fclose( output_file );
     output_file = NULL;
@@ -1476,7 +1492,7 @@ static void parse_option( const char *opt )
     switch(opt[1])
     {
     case 'I':
-        if (opt[2]) strarray_add( &paths, xstrdup( opt + 2 ));
+        if (opt[2]) strarray_add( &include_args, opt );
         break;
     case 'C':
         src_dir = opt + 2;
@@ -1548,8 +1564,8 @@ int main( int argc, char *argv[] )
     if (src_dir && !strcmp( src_dir, "." )) src_dir = NULL;
     if (top_src_dir && top_obj_dir && !strcmp( top_src_dir, top_obj_dir )) top_src_dir = NULL;
 
-    if (top_src_dir) strarray_insert( &paths, 0, strmake( "%s/include", top_src_dir ));
-    if (top_obj_dir) strarray_insert( &paths, 0, strmake( "%s/include", top_obj_dir ));
+    if (top_src_dir) strarray_insert( &include_args, 0, strmake( "-I%s/include", top_src_dir ));
+    else if (top_obj_dir) strarray_insert( &include_args, 0, strmake( "-I%s/include", top_obj_dir ));
 
     /* set the default extension list for object files */
     if (!object_extensions.count) strarray_add( &object_extensions, "o" );




More information about the wine-cvs mailing list