=?UTF-8?Q?Andr=C3=A9=20Hentschel=20?=: winemaker: Fix conversion of C++ filenames into object names.

Alexandre Julliard julliard at winehq.org
Mon Mar 12 11:59:55 CDT 2012


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

Author: André Hentschel <nerv at dawncrow.de>
Date:   Sat Mar 10 17:46:35 2012 +0100

winemaker: Fix conversion of C++ filenames into object names.

---

 tools/winemaker |   36 ++++++++++++++++++++++++++++--------
 1 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/tools/winemaker b/tools/winemaker
index 80305d1..91032f0 100755
--- a/tools/winemaker
+++ b/tools/winemaker
@@ -20,7 +20,7 @@ use strict;
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 #
 
-my $version="0.8.1";
+my $version="0.8.2";
 
 use Cwd;
 use File::Basename;
@@ -278,6 +278,10 @@ my $TF_NOMSVCRT=32;
 my $TF_HASDEF=64;
 
 ##
+# This target has C++ files named *.cxx (instead of *.cpp)
+my $TF_HASCXX=128;
+
+##
 # Initialize a target:
 # - set the target type to TT_SETTINGS, i.e. no real target will
 #   be generated.
@@ -805,13 +809,16 @@ sub source_scan_project_file($$$)
                 if (!defined $sfilet) { next; }
                 if ($sfilet =~ /\.c$/i and $sfilet !~ /\.(dbg|spec)\.c$/) {
                     push @sources_c,$sfilet;
-                } elsif ($sfilet =~ /\.(cpp|cxx)$/i) {
+                } elsif ($sfilet =~ /\.cpp$/i) {
                     if ($sfilet =~ /^stdafx.cpp$/i && !(@$project_settings[$T_FLAGS] & $TF_NOMFC)) {
                         push @sources_misc,$sfilet;
                         @$project_settings[$T_FLAGS]|=$TF_MFC;
                     } else {
                         push @sources_cxx,$sfilet;
                     }
+                } elsif ($sfilet =~ /\.cxx$/i) {
+                    @$project_settings[$T_FLAGS]|=$TF_HASCXX;
+                    push @sources_cxx,$sfilet;
                 } elsif ($sfilet =~ /\.rc$/i) {
                     push @sources_rc,$sfilet;
                 } elsif ($sfilet =~ /\.def$/i) {
@@ -896,13 +903,16 @@ sub source_scan_project_file($$$)
                         $sfilet=~s/\\/\//g; #make slashes out of backslashes
                         if ($sfilet =~ /\.c$/i and $sfilet !~ /\.(dbg|spec)\.c$/) {
                             push @sources_c,$sfilet;
-                        } elsif ($sfilet =~ /\.(cpp|cxx)$/i) {
+                        } elsif ($sfilet =~ /\.cpp$/i) {
                             if ($sfilet =~ /^stdafx.cpp$/i && !(@$project_settings[$T_FLAGS] & $TF_NOMFC)) {
                                 push @sources_misc,$sfilet;
                                 @$project_settings[$T_FLAGS]|=$TF_MFC;
                             } else {
                                 push @sources_cxx,$sfilet;
                             }
+                        } elsif ($sfilet =~ /\.cxx$/i) {
+                            @$project_settings[$T_FLAGS]|=$TF_HASCXX;
+                            push @sources_cxx,$sfilet;
                         } elsif ($sfilet =~ /\.rc$/i) {
                             push @sources_rc,$sfilet;
                         } elsif ($sfilet =~ /\.def$/i) {
@@ -1318,13 +1328,16 @@ sub source_scan_directory($$$$)
 	$targets{$dentry}=1;
       } elsif ($dentry =~ /\.c$/i and $dentry !~ /\.(dbg|spec)\.c$/) {
 	push @sources_c,"$dentry";
-      } elsif ($dentry =~ /\.(cpp|cxx)$/i) {
+      } elsif ($dentry =~ /\.cpp$/i) {
 	if ($dentry =~ /^stdafx.cpp$/i && !(@$project_settings[$T_FLAGS] & $TF_NOMFC)) {
 	  push @sources_misc,"$dentry";
 	  @$project_settings[$T_FLAGS]|=$TF_MFC;
 	} else {
 	  push @sources_cxx,"$dentry";
 	}
+      } elsif ($dentry =~ /\.cxx$/i) {
+          @$project_settings[$T_FLAGS]|=$TF_HASCXX;
+          push @sources_cxx,"$dentry";
       } elsif ($dentry =~ /\.rc$/i) {
 	push @sources_rc,"$dentry";
       } elsif ($dentry =~ /\.def$/i) {
@@ -2378,6 +2391,13 @@ sub generate_project_files($)
     return;
   }
 
+  my $cpp_to_object;
+  if (@$project_settings[$T_FLAGS] & $TF_HASCXX) {
+    $cpp_to_object=".cxx=.o";
+  } else {
+    $cpp_to_object=".cpp=.o";
+  }
+
   print FILEO "### Generated by Winemaker $version\n";
   print FILEO "###\n";
   print FILEO "### Invocation command line was\n";
@@ -2439,7 +2459,7 @@ sub generate_project_files($)
       generate_list("EXTRA_CXX_SRCS",1,@$project_settings[$T_SOURCES_CXX]);
       generate_list("EXTRA_RC_SRCS",1,@$project_settings[$T_SOURCES_RC]);
       print FILEO "\n";
-      generate_list("EXTRA_OBJS",1,["\$(EXTRA_C_SRCS:.c=.o)","\$(EXTRA_CXX_SRCS:.cpp=.o)"]);
+      generate_list("EXTRA_OBJS",1,["\$(EXTRA_C_SRCS:.c=.o)","\$(EXTRA_CXX_SRCS:$cpp_to_object)"]);
       print FILEO "\n\n\n";
     }
 
@@ -2460,7 +2480,7 @@ sub generate_project_files($)
       generate_list("${canon}_LIBRARY_PATH",1,@$target[$T_LIBRARY_PATH]);
       generate_list("${canon}_LIBRARIES",1,@$target[$T_LIBRARIES]);
       print FILEO "\n";
-      generate_list("${canon}_OBJS",1,["\$(${canon}_C_SRCS:.c=.o)","\$(${canon}_CXX_SRCS:.cpp=.o)","\$(${canon}_RC_SRCS:.rc=.res)"]);
+      generate_list("${canon}_OBJS",1,["\$(${canon}_C_SRCS:.c=.o)","\$(${canon}_CXX_SRCS:$cpp_to_object)","\$(${canon}_RC_SRCS:.rc=.res)"]);
       print FILEO "\n\n\n";
     }
     print FILEO "### Global source lists\n\n";
@@ -2518,7 +2538,7 @@ sub generate_project_files($)
   print FILEO "\n";
   print FILEO "# Implicit rules\n";
   print FILEO "\n";
-  print FILEO ".SUFFIXES: .cpp .rc .res\n";
+  print FILEO ".SUFFIXES: .cpp .cxx .rc .res\n";
   print FILEO "DEFINCL = \$(INCLUDE_PATH) \$(DEFINES) \$(OPTIONS)\n";
   print FILEO "\n";
   print FILEO ".c.o:\n";
@@ -2539,7 +2559,7 @@ sub generate_project_files($)
   print FILEO "                  \\\\\\#*\\\\\\# *~ *% .\\\\\\#*\n";
   print FILEO "\n";
   print FILEO "clean:: \$(SUBDIRS:%=%/__clean__) \$(EXTRASUBDIRS:%=%/__clean__)\n";
-  print FILEO "\t\$(RM) \$(CLEAN_FILES) \$(RC_SRCS:.rc=.res) \$(C_SRCS:.c=.o) \$(CXX_SRCS:.cpp=.o)\n";
+  print FILEO "\t\$(RM) \$(CLEAN_FILES) \$(RC_SRCS:.rc=.res) \$(C_SRCS:.c=.o) \$(CXX_SRCS:$cpp_to_object)\n";
   print FILEO "\t\$(RM) \$(DLLS:%=%.so) \$(LIBS) \$(EXES) \$(EXES:%=%.so)\n";
   print FILEO "\n";
   print FILEO "\$(SUBDIRS:%=%/__clean__): dummy\n";




More information about the wine-cvs mailing list