automake-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 1/8] Qt integration


From: Gergely Risko
Subject: [PATCH 1/8] Qt integration
Date: Tue, 7 Jul 2009 11:46:50 +0300

---
 automake.in |   86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 85 insertions(+), 1 deletions(-)

diff --git a/automake.in b/automake.in
index bab8c42..415d883 100755
--- a/automake.in
+++ b/automake.in
@@ -809,7 +809,7 @@ register_language ('name' => 'header',
                   # No output.
                   'output_extensions' => sub { return () },
                   # Nothing to do.
-                  '_finish' => sub { });
+                  '_finish' => \&lang_header_finish);
 
 # Vala
 register_language ('name' => 'vala',
@@ -2265,6 +2265,38 @@ sub handle_source_transform ($$$$%)
     else
     {
        @keys = map { '$(' . $_ . $one_file . '_OBJECTS)' } @keys;
+       # handle target_QTSOURCES variable:
+       my $var = set_seen $one_file . '_QTSOURCES';
+       if ($var)
+       {
+           my @mocobjects = ();
+           foreach my $file ($var->value_as_list_recursive)
+           {
+               # FIXME: instead of .h use something more general
+               # (e.g. the extension list from the language 'header')
+               if ($file =~ s/\.h$//)
+               {
+                   # add %.h files as %.o to target_QTOBJECTS
+                   push @mocobjects, 'moc_' . $file . '.$(OBJEXT)' ;
+                   # also add moc resulting source file to mostlyclean
+                   $compile_clean_files{"moc_$file.cpp"} = MOSTLY_CLEAN;
+               }
+               else
+               {
+                   $file =~ s/\.[^.]+$//;
+                   # also add moc resulting source file to mostlyclean
+                   $compile_clean_files{"$file.moc"} = MOSTLY_CLEAN;
+               }
+           }
+           # if there were .h files, then add target_QTOBJECTS to
+           # target_OBJECTS
+           if (@mocobjects)
+           {
+               my $where = $var->rdef (TRUE)->location;
+               define_pretty_variable ($one_file . '_QTOBJECTS', TRUE, $where, 
@mocobjects);
+               push @keys, '$(' . $one_file . '_QTOBJECTS)' if $var;
+           }
+       }
        define_pretty_variable ($one_file . '_OBJECTS', TRUE, $where, @keys);
     }
 
@@ -5930,6 +5962,58 @@ sub lang_c_finish
     }
 }
 
+sub lang_header_finish_target ($$)
+{
+    my ($self, $name) = @_;
+    
+    my $derived = canonicalize ($name);
+
+    # handle target_QTSOURCES variable: create rules for each source
+    # in the form of
+    #   moc_foo.cpp: foo.h
+    #           $(MOC) -o $@ $<
+    # for headers and
+    #   foo.moc: foo.cpp
+    #           $(MOC) -o $@ $<
+    # for non-header files.
+    my $var = var ($derived . '_QTSOURCES');
+    if ($var)
+    {
+       # FIXME: subdir-objects handling
+       foreach my $file ($var->value_as_list_recursive)
+       {
+           # FIXME: instead of .h use something more general
+           # (e.g. the extension list from the language 'header')
+           if ($file =~ s/\.h$//)
+           {
+               $output_rules .= "moc_$file.cpp: \$(srcdir)/$file.h\n".
+                   "\t\$(MOC) -o \$\@ \$<\n";
+           }
+           else
+           {
+               my $origname = $file;
+               $file =~ s/\.[^.]+$//;
+               $output_rules .= "$file.moc: \$(srcdir)/$origname\n".
+                   "\t\$(MOC) -o \$\@ \$<\n";
+           }
+       }
+    }
+}
+
+sub lang_header_finish
+{
+  my ($self) = @_;
+  foreach my $prog (keys %known_programs)
+    {
+      lang_header_finish_target ($self, $prog);
+    }
+
+  while (my ($name) = each %known_libraries)
+    {
+      lang_header_finish_target ($self, $name);
+    }
+}
+
 sub lang_vala_finish_target ($$)
 {
   my ($self, $name) = @_;
-- 
1.6.3.3





reply via email to

[Prev in Thread] Current Thread [Next in Thread]