Alexandre Julliard : makefiles: Generate dependencies for static libraries.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Feb 23 11:24:20 CST 2016


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Feb 23 14:57:11 2016 +0900

makefiles: Generate dependencies for static libraries.

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

---

 Makefile.in                     |  2 --
 dlls/d3dcompiler_43/Makefile.in |  2 +-
 dlls/d3dcompiler_46/Makefile.in |  2 +-
 dlls/d3dcompiler_47/Makefile.in |  2 +-
 libs/wine/Makefile.in           |  2 +-
 tools/makedep.c                 | 80 ++++++++++++++++++++++++++++++++---------
 tools/widl/Makefile.in          |  2 +-
 tools/wrc/Makefile.in           |  2 +-
 8 files changed, 70 insertions(+), 24 deletions(-)

diff --git a/Makefile.in b/Makefile.in
index 7486ba6..b78f43b 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -77,8 +77,6 @@ RUNTESTFLAGS    = -q -P wine
 MAKEDEP         = $(TOOLSDIR)/tools/makedep$(TOOLSEXT)
 WINEBUILD       = $(TOOLSDIR)/tools/winebuild/winebuild$(TOOLSEXT)
 WRC             = $(TOOLSDIR)/tools/wrc/wrc$(TOOLSEXT)
-LIBPORT         = $(top_builddir)/libs/port/libwine_port.a
-LIBWPP          = $(top_builddir)/libs/wpp/libwpp.a
 PACKAGE_VERSION = @PACKAGE_VERSION@
 SED_CMD         = LC_ALL=C sed -e 's, at bindir\@,$(bindir),g' -e 's, at dlldir\@,$(dlldir),g' -e 's, at PACKAGE_STRING\@, at PACKAGE_STRING@,g' -e 's, at PACKAGE_VERSION\@, at PACKAGE_VERSION@,g'
 LDRPATH_INSTALL = @LDRPATH_INSTALL@
diff --git a/dlls/d3dcompiler_43/Makefile.in b/dlls/d3dcompiler_43/Makefile.in
index e9a927e..99c1f62 100644
--- a/dlls/d3dcompiler_43/Makefile.in
+++ b/dlls/d3dcompiler_43/Makefile.in
@@ -1,7 +1,7 @@
 MODULE    = d3dcompiler_43.dll
 IMPORTLIB = d3dcompiler
 IMPORTS   = dxguid uuid
-EXTRALIBS = $(LIBWPP)
+EXTRALIBS = -lwpp
 
 C_SRCS = \
 	asmparser.c \
diff --git a/dlls/d3dcompiler_46/Makefile.in b/dlls/d3dcompiler_46/Makefile.in
index e13cbd0..0be92b1 100644
--- a/dlls/d3dcompiler_46/Makefile.in
+++ b/dlls/d3dcompiler_46/Makefile.in
@@ -1,6 +1,6 @@
 MODULE    = d3dcompiler_46.dll
 IMPORTS   = dxguid uuid
-EXTRALIBS = $(LIBWPP)
+EXTRALIBS = -lwpp
 EXTRADEFS = -DD3D_COMPILER_VERSION=46
 PARENTSRC = ../d3dcompiler_43
 
diff --git a/dlls/d3dcompiler_47/Makefile.in b/dlls/d3dcompiler_47/Makefile.in
index cb7f557..48b343a 100644
--- a/dlls/d3dcompiler_47/Makefile.in
+++ b/dlls/d3dcompiler_47/Makefile.in
@@ -1,6 +1,6 @@
 MODULE    = d3dcompiler_47.dll
 IMPORTS   = dxguid uuid
-EXTRALIBS = $(LIBWPP)
+EXTRALIBS = -lwpp
 EXTRADEFS = -DD3D_COMPILER_VERSION=47
 PARENTSRC = ../d3dcompiler_43
 
diff --git a/libs/wine/Makefile.in b/libs/wine/Makefile.in
index 161a6c1..02f266c 100644
--- a/libs/wine/Makefile.in
+++ b/libs/wine/Makefile.in
@@ -1,4 +1,4 @@
-EXTRALIBS = $(LIBPORT) $(DL_LIBS) $(COREFOUNDATION_LIBS) $(CORESERVICES_LIBS)
+EXTRALIBS = $(DL_LIBS) $(COREFOUNDATION_LIBS) $(CORESERVICES_LIBS)
 EXTRADEFS = -DWINE_UNICODE_API=""
 
 C_SRCS = \
diff --git a/tools/makedep.c b/tools/makedep.c
index c9bfb15..d18018b 100644
--- a/tools/makedep.c
+++ b/tools/makedep.c
@@ -1892,6 +1892,60 @@ static struct strarray get_local_dependencies( const struct makefile *make, cons
 
 
 /*******************************************************************
+ *         has_static_lib
+ *
+ * Check if makefile builds the named static library.
+ */
+static int has_static_lib( const struct makefile *make, const char *name )
+{
+    if (!make->staticlib) return 0;
+    if (strncmp( make->staticlib, "lib", 3 )) return 0;
+    if (strncmp( make->staticlib + 3, name, strlen(name) )) return 0;
+    return !strcmp( make->staticlib + 3 + strlen(name), ".a" );
+}
+
+
+/*******************************************************************
+ *         add_default_libraries
+ */
+static struct strarray add_default_libraries( const struct makefile *make, struct strarray *deps )
+{
+    struct strarray ret = empty_strarray;
+    struct strarray all_libs = empty_strarray;
+    unsigned int i, j;
+
+    strarray_add( &all_libs, "-lwine_port" );
+    strarray_addall( &all_libs, get_expanded_make_var_array( make, "EXTRALIBS" ));
+    strarray_addall( &all_libs, libs );
+
+    for (i = 0; i < all_libs.count; i++)
+    {
+        int found = 0;
+        if (!strncmp( all_libs.str[i], "-l", 2 ))
+        {
+            const char *name = all_libs.str[i] + 2;
+
+            for (j = 0; j < top_makefile->subdirs.count; j++)
+            {
+                const struct makefile *submake = top_makefile->submakes[j];
+
+                if ((found = has_static_lib( submake, name )))
+                {
+                    const char *lib = strmake( "%s/lib%s.a",
+                                               top_obj_dir_path( make, submake->base_dir ), name );
+                    strarray_add( deps, lib );
+                    strarray_add( &ret, lib );
+                    break;
+                }
+            }
+        }
+        if (!found) strarray_add( &ret, all_libs.str[i] );
+    }
+    return ret;
+}
+
+
+/*******************************************************************
  *         add_import_libs
  */
 static struct strarray add_import_libs( const struct makefile *make, struct strarray *deps,
@@ -1919,10 +1973,7 @@ static struct strarray add_import_libs( const struct makefile *make, struct stra
                 break;
             }
 
-            if (submake->staticlib &&
-                !strncmp( submake->staticlib, "lib", 3 ) &&
-                !strncmp( submake->staticlib + 3, name, strlen(name) ) &&
-                !strcmp( submake->staticlib + 3 + strlen(name), ".a" ))
+            if (has_static_lib( submake, name ))
             {
                 const char *dir = top_obj_dir_path( make, submake->base_dir );
 
@@ -2479,9 +2530,7 @@ static struct strarray output_sources( const struct makefile *make )
         for (i = 0; i < make->delayimports.count; i++)
             strarray_add( &all_libs, strmake( "-Wb,-d%s", make->delayimports.str[i] ));
         strarray_add( &all_libs, "-lwine" );
-        strarray_add( &all_libs, top_obj_dir_path( make, "libs/port/libwine_port.a" ));
-        strarray_addall( &all_libs, get_expanded_make_var_array( make, "EXTRALIBS" ));
-        strarray_addall( &all_libs, libs );
+        strarray_addall( &all_libs, add_default_libraries( make, &dep_libs ));
 
         if (*dll_ext)
         {
@@ -2659,18 +2708,19 @@ static struct strarray output_sources( const struct makefile *make )
         char *basename, *p;
         struct strarray names = get_shared_lib_names( make->sharedlib );
         struct strarray all_libs = empty_strarray;
+        struct strarray dep_libs = empty_strarray;
 
         basename = xstrdup( make->sharedlib );
         if ((p = strchr( basename, '.' ))) *p = 0;
 
+        strarray_addall( &dep_libs, get_local_dependencies( make, basename, in_files ));
         strarray_addall( &all_libs, get_expanded_make_var_array( make,
                                                                  file_local_var( basename, "LDFLAGS" )));
-        strarray_addall( &all_libs, get_expanded_make_var_array( make, "EXTRALIBS" ));
-        strarray_addall( &all_libs, libs );
+        strarray_addall( &all_libs, add_default_libraries( make, &dep_libs ));
 
         output( "%s:", obj_dir_path( make, make->sharedlib ));
         output_filenames_obj_dir( make, object_files );
-        output_filenames( get_local_dependencies( make, basename, in_files ));
+        output_filenames( dep_libs );
         output( "\n" );
         output( "\t$(CC) -o $@" );
         output_filenames_obj_dir( make, object_files );
@@ -2796,25 +2846,23 @@ static struct strarray output_sources( const struct makefile *make )
     {
         char *program_installed = NULL;
         char *program = strmake( "%s%s", make->programs.str[i], exe_ext );
-        struct strarray all_libs = empty_strarray;
         struct strarray deps = get_local_dependencies( make, make->programs.str[i], in_files );
+        struct strarray all_libs = get_expanded_make_var_array( make,
+                                                 file_local_var( make->programs.str[i], "LDFLAGS" ));
         struct strarray objs = get_expanded_make_var_array( make,
                                                  file_local_var( make->programs.str[i], "OBJS" ));
         struct strarray symlinks = get_expanded_make_var_array( make,
                                                  file_local_var( make->programs.str[i], "SYMLINKS" ));
 
         if (!objs.count) objs = object_files;
+        strarray_addall( &all_libs, add_default_libraries( make, &deps ));
+
         output( "%s:", obj_dir_path( make, program ) );
         output_filenames_obj_dir( make, objs );
         output_filenames( deps );
         output( "\n" );
         output( "\t$(CC) -o $@" );
         output_filenames_obj_dir( make, objs );
-        strarray_add( &all_libs, top_obj_dir_path( make, "libs/port/libwine_port.a" ));
-        strarray_addall( &all_libs, get_expanded_make_var_array( make, "EXTRALIBS" ));
-        strarray_addall( &all_libs, libs );
-        strarray_addall( &all_libs, get_expanded_make_var_array( make,
-                                                      file_local_var( make->programs.str[i], "LDFLAGS" )));
 
         if (strarray_exists( &all_libs, "-lwine" ))
         {
diff --git a/tools/widl/Makefile.in b/tools/widl/Makefile.in
index f8111f3..b47a170 100644
--- a/tools/widl/Makefile.in
+++ b/tools/widl/Makefile.in
@@ -21,6 +21,6 @@ BISON_SRCS = parser.y
 
 widl_EXTRADEFS = -DDEFAULT_INCLUDE_DIR=\"${includedir}/windows/\"
 
-EXTRALIBS = $(LIBWPP)
+EXTRALIBS = -lwpp
 
 INSTALL_DEV = $(PROGRAMS)
diff --git a/tools/wrc/Makefile.in b/tools/wrc/Makefile.in
index 8c94ead..d502e4b 100644
--- a/tools/wrc/Makefile.in
+++ b/tools/wrc/Makefile.in
@@ -17,6 +17,6 @@ BISON_SRCS = parser.y
 
 wrc_EXTRADEFS = -DINCLUDEDIR="\"${includedir}\""
 
-EXTRALIBS = $(GETTEXTPO_LIBS) $(LIBWPP)
+EXTRALIBS = $(GETTEXTPO_LIBS) -lwpp
 
 INSTALL_DEV = $(PROGRAMS)




More information about the wine-cvs mailing list