Alexandre Julliard : makefiles: Generate rules for installing headers.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Nov 2 09:47:14 CST 2015


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Nov  2 15:53:42 2015 +0900

makefiles: Generate rules for installing headers.

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

---

 include/Makefile.in  | 82 +++++++++++++++++++++++++++-------------------------
 tools/make_makefiles |  7 +++--
 tools/makedep.c      | 71 ++++++++++++++++++++++++++++++++++++---------
 3 files changed, 104 insertions(+), 56 deletions(-)

diff --git a/include/Makefile.in b/include/Makefile.in
index 3836af2..8f5373c 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -154,15 +154,8 @@ PUBLIC_IDL_H_SRCS = \
 IDL_TLB_SRCS = \
 	stdole2.idl
 
-XTEMPLATE_SRCS = \
-	rmxftmpl.x
-
-SRCDIR_INCLUDES = \
-	$(IDL_TLB_SRCS) \
-	$(PUBLIC_IDL_H_SRCS) \
-	$(XTEMPLATE_SRCS) \
+HEADER_SRCS = \
 	accctrl.h \
-	access.idl \
 	aclapi.h \
 	aclui.h \
 	adshlp.h \
@@ -171,8 +164,6 @@ SRCDIR_INCLUDES = \
 	amaudio.h \
 	appcompatapi.h \
 	appmgmt.h \
-	asynot.idl \
-	asysta.idl \
 	atlbase.h \
 	atlcom.h \
 	atlwin.h \
@@ -180,23 +171,17 @@ SRCDIR_INCLUDES = \
 	audiosessiontypes.h \
 	aviriff.h \
 	avrt.h \
-	axcore.idl \
-	axextend.idl \
 	basetsd.h \
 	basetyps.h \
 	bcrypt.h \
 	bdaiface_enums.h \
 	bdatypes.h \
-	binres.idl \
 	bitsmsg.h \
 	cderr.h \
 	cfgmgr32.h \
 	cguid.h \
-	chprst.idl \
 	cierror.h \
 	clusapi.h \
-	cmdbas.idl \
-	cmdtxt.idl \
 	commctrl.h \
 	commctrl.rh \
 	commdlg.h \
@@ -204,7 +189,6 @@ SRCDIR_INCLUDES = \
 	corerror.h \
 	corhdr.h \
 	cpl.h \
-	crtrow.idl \
 	cryptdlg.h \
 	cryptuiapi.h \
 	custcntl.h \
@@ -244,13 +228,7 @@ SRCDIR_INCLUDES = \
 	d3dx9tex.h \
 	d3dx9xof.h \
 	davclnt.h \
-	dbccmd.idl \
-	dbcses.idl \
-	dbdsad.idl \
 	dbghelp.h \
-	dbinit.idl \
-	dbprop.idl \
-	dbs.idl \
 	dbt.h \
 	dciddi.h \
 	dciman.h \
@@ -285,7 +263,6 @@ SRCDIR_INCLUDES = \
 	ddrawgdi.h \
 	ddrawi.h \
 	delayloadhandler.h \
-	devenum.idl \
 	devguid.h \
 	devpkey.h \
 	devpropdef.h \
@@ -329,10 +306,8 @@ SRCDIR_INCLUDES = \
 	dxfile.h \
 	dxgiformat.h \
 	dxgitype.h \
-	dyngraph.idl \
 	errorrep.h \
 	errors.h \
-	errrec.idl \
 	evcode.h \
 	evntprov.h \
 	evntrace.h \
@@ -506,7 +481,6 @@ SRCDIR_INCLUDES = \
 	olectl.h \
 	oledberr.h \
 	oledlg.h \
-	opnrst.idl \
 	patchapi.h \
 	pdh.h \
 	pdhmsg.h \
@@ -534,10 +508,6 @@ SRCDIR_INCLUDES = \
 	richedit.h \
 	rmxfguid.h \
 	roapi.h \
-	row.idl \
-	rowchg.idl \
-	rowpos.idl \
-	rowpsc.idl \
 	rpc.h \
 	rpcasync.h \
 	rpcdce.h \
@@ -546,10 +516,6 @@ SRCDIR_INCLUDES = \
 	rpcnterr.h \
 	rpcproxy.h \
 	rpcsal.h \
-	rstbas.idl \
-	rstinf.idl \
-	rstloc.idl \
-	rstnot.idl \
 	rtutils.h \
 	scarderr.h \
 	schannel.h \
@@ -559,7 +525,6 @@ SRCDIR_INCLUDES = \
 	secext.h \
 	security.h \
 	sensapi.h \
-	sesprp.idl \
 	setupapi.h \
 	sfc.h \
 	shdispid.h \
@@ -575,7 +540,6 @@ SRCDIR_INCLUDES = \
 	sql.h \
 	sqlext.h \
 	sqltypes.h \
-	srcrst.idl \
 	srrestoreptapi.h \
 	sspi.h \
 	sti.h \
@@ -604,7 +568,6 @@ SRCDIR_INCLUDES = \
 	verrsrc.h \
 	vfw.h \
 	vfwmsgs.h \
-	vmrender.idl \
 	vsstyle.h \
 	vssym32.h \
 	vswriter.h \
@@ -674,12 +637,51 @@ SRCDIR_INCLUDES = \
 	xcmc.h \
 	xinput.h \
 	xmldom.h \
-	xmldom.idl \
 	xmldomdid.h \
-	xmldso.idl \
 	xmldsodid.h \
 	zmouse.h
 
+XTEMPLATE_SRCS = \
+	rmxftmpl.x
+
+SRCDIR_INCLUDES = \
+	$(IDL_TLB_SRCS) \
+	$(PUBLIC_IDL_H_SRCS) \
+	$(XTEMPLATE_SRCS) \
+	access.idl \
+	asynot.idl \
+	asysta.idl \
+	axcore.idl \
+	axextend.idl \
+	binres.idl \
+	chprst.idl \
+	cmdbas.idl \
+	cmdtxt.idl \
+	crtrow.idl \
+	dbccmd.idl \
+	dbcses.idl \
+	dbdsad.idl \
+	dbinit.idl \
+	dbprop.idl \
+	dbs.idl \
+	devenum.idl \
+	dyngraph.idl \
+	errrec.idl \
+	opnrst.idl \
+	row.idl \
+	rowchg.idl \
+	rowpos.idl \
+	rowpsc.idl \
+	rstbas.idl \
+	rstinf.idl \
+	rstloc.idl \
+	rstnot.idl \
+	sesprp.idl \
+	srcrst.idl \
+	vmrender.idl \
+	xmldom.idl \
+	xmldso.idl
+
 IDL_H_SRCS = $(PUBLIC_IDL_H_SRCS) $(PRIVATE_IDL_H_SRCS)
 IDL_SRCS = $(IDL_H_SRCS) $(IDL_TLB_SRCS)
 
diff --git a/tools/make_makefiles b/tools/make_makefiles
index 96d8c01..5d88e65 100755
--- a/tools/make_makefiles
+++ b/tools/make_makefiles
@@ -378,10 +378,10 @@ sub assign_sources_to_makefiles(@)
             }
             if ($name =~ /stdole2\.idl$/) { push @{${$make}{"=IDL_TLB_SRCS"}}, $name; }
             elsif ($private_idl_headers{$name}) { push @{${$make}{"=SRCDIR_INCLUDES"}}, $name; }
-            elsif ($name =~ /\.h$/) { push @{${$make}{"=SRCDIR_INCLUDES"}}, $name; }
+            elsif ($name =~ /\.h$/) { push @{${$make}{"=HEADER_SRCS"}}, $name; }
             elsif ($name =~ /\.x$/) { push @{${$make}{"=XTEMPLATE_SRCS"}}, $name; }
-            elsif ($name =~ /\.rh$/) { push @{${$make}{"=SRCDIR_INCLUDES"}}, $name; }
-            elsif ($name =~ /\.inl$/) { push @{${$make}{"=SRCDIR_INCLUDES"}}, $name; }
+            elsif ($name =~ /\.rh$/) { push @{${$make}{"=HEADER_SRCS"}}, $name; }
+            elsif ($name =~ /\.inl$/) { push @{${$make}{"=HEADER_SRCS"}}, $name; }
             elsif ($name =~ /\.idl$/) { push @{${$make}{"=PUBLIC_IDL_H_SRCS"}}, $name; }
             else { die "unknown file $name in include dir"; }
         }
@@ -549,6 +549,7 @@ sub update_makefiles(@)
         replace_makefile_variable( $file, "OBJC_SRCS" );
         replace_makefile_variable( $file, "RC_SRCS" );
         replace_makefile_variable( $file, "IDL_SRCS" );
+        replace_makefile_variable( $file, "HEADER_SRCS" );
         replace_makefile_variable( $file, "XTEMPLATE_SRCS" );
         replace_makefile_variable( $file, "IN_SRCS" );
         replace_makefile_variable( $file, "IMPLIB_SRCS" );
diff --git a/tools/makedep.c b/tools/makedep.c
index 2a1b8d4..542741a 100644
--- a/tools/makedep.c
+++ b/tools/makedep.c
@@ -1121,6 +1121,26 @@ static void parse_sfd_file( struct file *source, FILE *file )
 }
 
 
+static const struct
+{
+    const char *ext;
+    void (*parse)( struct file *file, FILE *f );
+} parse_functions[] =
+{
+    { ".c",   parse_c_file },
+    { ".h",   parse_c_file },
+    { ".inl", parse_c_file },
+    { ".l",   parse_c_file },
+    { ".m",   parse_c_file },
+    { ".rh",  parse_c_file },
+    { ".x",   parse_c_file },
+    { ".y",   parse_c_file },
+    { ".idl", parse_idl_file },
+    { ".rc",  parse_rc_file },
+    { ".in",  parse_in_file },
+    { ".sfd", parse_sfd_file }
+};
+
 /*******************************************************************
  *         load_file
  */
@@ -1128,7 +1148,7 @@ static struct file *load_file( const char *name )
 {
     struct file *file;
     FILE *f;
-    unsigned int hash = hash_filename( name );
+    unsigned int i, hash = hash_filename( name );
 
     LIST_FOR_EACH_ENTRY( file, &files[hash], struct file, entry )
         if (!strcmp( name, file->name )) return file;
@@ -1139,15 +1159,12 @@ static struct file *load_file( const char *name )
     input_file_name = file->name;
     input_line = 0;
 
-    if (strendswith( name, ".idl" )) parse_idl_file( file, f );
-    else if (strendswith( name, ".rc" )) parse_rc_file( file, f );
-    else if (strendswith( name, ".in" )) parse_in_file( file, f );
-    else if (strendswith( name, ".sfd" )) parse_sfd_file( file, f );
-    else if (strendswith( name, ".c" ) ||
-             strendswith( name, ".m" ) ||
-             strendswith( name, ".h" ) ||
-             strendswith( name, ".l" ) ||
-             strendswith( name, ".y" )) parse_c_file( file, f );
+    for (i = 0; i < sizeof(parse_functions) / sizeof(parse_functions[0]); i++)
+    {
+        if (!strendswith( name, parse_functions[i].ext )) continue;
+        parse_functions[i].parse( file, f );
+        break;
+    }
 
     fclose( f );
     input_file_name = NULL;
@@ -1781,6 +1798,19 @@ static void add_install_rule( struct makefile *make, const char *target,
 
 
 /*******************************************************************
+ *         get_include_install_path
+ *
+ * Determine the installation path for a given include file.
+ */
+static const char *get_include_install_path( const char *name )
+{
+    if (!strncmp( name, "wine/", 5 )) return name + 5;
+    if (!strncmp( name, "msvcrt/", 7 )) return name;
+    return strmake( "windows/%s", name );
+}
+
+
+/*******************************************************************
  *         output_install_rules
  *
  * Rules are stored as a (file,dest) pair of values.
@@ -2033,9 +2063,9 @@ static struct strarray output_sources( struct makefile *make, struct strarray *t
                 else dir = strmake( "$(mandir)/man%s", section );
                 add_install_rule( make, dest, xstrdup(obj), strmake( "d%s/%s.%s", dir, dest, section ));
                 symlinks = get_expanded_make_var_array( make, file_local_var( dest, "SYMLINKS" ));
-                for (j = 0; j < symlinks.count; j++)
-                    add_install_rule( make, symlinks.str[j], strmake( "%s.%s", dest, section ),
-                                      strmake( "y%s/%s.%s", dir, symlinks.str[j], section ));
+                for (i = 0; i < symlinks.count; i++)
+                    add_install_rule( make, symlinks.str[i], strmake( "%s.%s", dest, section ),
+                                      strmake( "y%s/%s.%s", dir, symlinks.str[i], section ));
                 free( dest );
                 free( dir );
                 strarray_add( &all_targets, xstrdup(obj) );
@@ -2095,6 +2125,20 @@ static struct strarray output_sources( struct makefile *make, struct strarray *t
             strarray_add( &res_files, source->name );
             continue;  /* no dependencies */
         }
+        else if (!strcmp( ext, "h" ) || !strcmp( ext, "rh" ) || !strcmp( ext, "inl" ))  /* header file */
+        {
+            if (source->file->flags & FLAG_GENERATED)
+            {
+                strarray_add( &all_targets, source->name );
+            }
+            else
+            {
+                strarray_add( &make->install_dev_rules, source->name );
+                strarray_add( &make->install_dev_rules,
+                              strmake( "D$(includedir)/%s", get_include_install_path( source->name ) ));
+            }
+            continue;  /* no dependencies */
+        }
         else
         {
             int need_cross = make->testdll ||
@@ -2788,6 +2832,7 @@ static void update_makefile( const char *path )
         "IDL_SRCS",
         "BISON_SRCS",
         "LEX_SRCS",
+        "HEADER_SRCS",
         "XTEMPLATE_SRCS",
         "SVG_SRCS",
         "FONT_SRCS",




More information about the wine-cvs mailing list