Author: aconway
Date: Wed Aug  8 17:03:43 2007
New Revision: 564051

URL: http://svn.apache.org/viewvc?view=rev&rev=564051
Log:
Moved Proxy generation to rubygen.

Added:
    incubator/qpid/trunk/qpid/cpp/rubygen/templates/Proxy.rb
      - copied, changed from r563972, 
incubator/qpid/trunk/qpid/cpp/rubygen/samples/Proxy.rb
Removed:
    incubator/qpid/trunk/qpid/cpp/gentools/templ.cpp/AMQP_ClientProxy.cpp.tmpl
    incubator/qpid/trunk/qpid/cpp/gentools/templ.cpp/AMQP_ClientProxy.h.tmpl
    incubator/qpid/trunk/qpid/cpp/gentools/templ.cpp/AMQP_ServerProxy.cpp.tmpl
    incubator/qpid/trunk/qpid/cpp/gentools/templ.cpp/AMQP_ServerProxy.h.tmpl
    incubator/qpid/trunk/qpid/cpp/rubygen/samples/Proxy.rb
Modified:
    incubator/qpid/trunk/qpid/cpp/bootstrap
    
incubator/qpid/trunk/qpid/cpp/gentools/src/org/apache/qpid/gentools/Main.java
    incubator/qpid/trunk/qpid/cpp/rubygen/amqpgen.rb
    incubator/qpid/trunk/qpid/cpp/rubygen/cppgen.rb
    incubator/qpid/trunk/qpid/cpp/src/   (props changed)
    incubator/qpid/trunk/qpid/cpp/src/Makefile.am
    incubator/qpid/trunk/qpid/cpp/src/generate.sh
    incubator/qpid/trunk/qpid/cpp/src/qpid/framing/   (props changed)
    incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Proxy.h

Modified: incubator/qpid/trunk/qpid/cpp/bootstrap
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/bootstrap?view=diff&rev=564051&r1=564050&r2=564051
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/bootstrap (original)
+++ incubator/qpid/trunk/qpid/cpp/bootstrap Wed Aug  8 17:03:43 2007
@@ -14,6 +14,9 @@
   perl -ne '/^(include |if |else|endif)/ or print' Makefile.am \
       | make -f - abs_srcdir=`dirname $(pwd)` gen.mk > /dev/null )
 
+# Create initial empty Makefile include files, make will generate the real 
contents.
+touch src/rubygen.mk src/generate.mk
+
 automake
 autoconf
 

Modified: 
incubator/qpid/trunk/qpid/cpp/gentools/src/org/apache/qpid/gentools/Main.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/gentools/src/org/apache/qpid/gentools/Main.java?view=diff&rev=564051&r1=564050&r2=564051
==============================================================================
--- 
incubator/qpid/trunk/qpid/cpp/gentools/src/org/apache/qpid/gentools/Main.java 
(original)
+++ 
incubator/qpid/trunk/qpid/cpp/gentools/src/org/apache/qpid/gentools/Main.java 
Wed Aug  8 17:03:43 2007
@@ -233,10 +233,6 @@
         {
             new File(tmplDir + Utils.fileSeparator + 
"AMQP_ServerOperations.h.tmpl"),
             new File(tmplDir + Utils.fileSeparator + 
"AMQP_ClientOperations.h.tmpl"),
-            new File(tmplDir + Utils.fileSeparator + 
"AMQP_ServerProxy.h.tmpl"),
-            new File(tmplDir + Utils.fileSeparator + 
"AMQP_ClientProxy.h.tmpl"),
-            new File(tmplDir + Utils.fileSeparator + 
"AMQP_ServerProxy.cpp.tmpl"),
-            new File(tmplDir + Utils.fileSeparator + 
"AMQP_ClientProxy.cpp.tmpl"),
             new File(tmplDir + Utils.fileSeparator + "AMQP_Constants.h.tmpl"),
             new File(tmplDir + Utils.fileSeparator + 
"AMQP_MethodVersionMap.h.tmpl"),
             new File(tmplDir + Utils.fileSeparator + 
"AMQP_MethodVersionMap.cpp.tmpl"),

Modified: incubator/qpid/trunk/qpid/cpp/rubygen/amqpgen.rb
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/rubygen/amqpgen.rb?view=diff&rev=564051&r1=564050&r2=564051
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/rubygen/amqpgen.rb (original)
+++ incubator/qpid/trunk/qpid/cpp/rubygen/amqpgen.rb Wed Aug  8 17:03:43 2007
@@ -114,7 +114,8 @@
 
   # chassis should be "client" or "server"
   def methods_on(chassis)
-    elements.collect("method/[EMAIL PROTECTED]'#{chassis}']/..") { |m|
+    @cache_methods_on ||= { }
+    @cache_methods_on[chassis] ||= elements.collect("method/[EMAIL 
PROTECTED]'#{chassis}']/..") { |m|
       AmqpMethod.new(m,self)
     }.sort_by_name
   end
@@ -147,7 +148,8 @@
   
   # Return all methods on chassis for all classes.
   def methods_on(chassis)
-    classes.collect { |c| c.methods_on(chassis) }.flatten
+    @cache_methods_on ||= { }
+    @cache_methods_on[chassis] ||= classes.collect { |c| c.methods_on(chassis) 
}.flatten
   end
 
   # Merge contents of elements.

Modified: incubator/qpid/trunk/qpid/cpp/rubygen/cppgen.rb
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/rubygen/cppgen.rb?view=diff&rev=564051&r1=564050&r2=564051
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/rubygen/cppgen.rb (original)
+++ incubator/qpid/trunk/qpid/cpp/rubygen/cppgen.rb Wed Aug  8 17:03:43 2007
@@ -69,8 +69,8 @@
 # Additional methods for AmqpMethod
 class AmqpMethod
   def cppname() name.lcaps.cppsafe; end
-  def param_names() fields.collect { |f| f.cppname }; end
-  def signature() fields.collect { |f| f.cpptype+" "+f.cppname }; end
+  def param_names() @param_names ||= fields.collect { |f| f.cppname }; end
+  def signature() @signature ||= fields.collect { |f| f.cpptype+" "+f.cppname 
}; end
   def body_name() amqp_parent.name.caps+name.caps+"Body"; end
 end
 
@@ -96,7 +96,7 @@
     "table"=>["FieldTable", "const FieldTable&", "const FieldTable&"],
     "content"=>["Content", "const Content&", "const Content&"],
     "rfc1982-long-set"=>["SequenceNumberSet", "const SequenceNumberSet&", 
"const SequenceNumberSet&"],
-    "uuid"=>["Uuid", "const Uuid&", "const Uuid&"]
+    "uuid"=>["string", "const string&"] # FIXME should be: ["Uuid", "const 
Uuid&", "const Uuid&"]
   }
 
   def lookup(amqptype)

Copied: incubator/qpid/trunk/qpid/cpp/rubygen/templates/Proxy.rb (from r563972, 
incubator/qpid/trunk/qpid/cpp/rubygen/samples/Proxy.rb)
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/rubygen/templates/Proxy.rb?view=diff&rev=564051&p1=incubator/qpid/trunk/qpid/cpp/rubygen/samples/Proxy.rb&r1=563972&p2=incubator/qpid/trunk/qpid/cpp/rubygen/templates/Proxy.rb&r2=564051
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/rubygen/samples/Proxy.rb (original)
+++ incubator/qpid/trunk/qpid/cpp/rubygen/templates/Proxy.rb Wed Aug  8 
17:03:43 2007
@@ -8,10 +8,9 @@
     super(outdir, amqp)
     @chassis=chassis
     @classname="[EMAIL PROTECTED]"
+    @filename="qpid/framing/[EMAIL PROTECTED]"
   end
 
-  def include(m) gen "#include \"#{m.body_name}.h\"\n"; end
-
   def proxy_member(c) c.name.lcaps+"Proxy"; end
   
   def inner_class_decl(c)
@@ -22,6 +21,7 @@
     {
       private:
         ChannelAdapter& channel;
+        RequestId responseTo;
 
       public:
         // Constructors and destructors
@@ -31,7 +31,9 @@
         virtual ~#{cname}() {}
 
         static #{cname}& get([EMAIL PROTECTED]& proxy) { return 
proxy.get#{cname}();}
-
+        // set for response correlation
+        void setResponseTo(RequestId r) { responseTo = r; }
+                 
         // Protocol methods
 EOS
     indent(2) { c.methods_on(@chassis).each { |m| inner_method_decl(m) } }
@@ -39,7 +41,8 @@
   end
 
   def inner_method_decl(m)
-    gen "virtual void #{m.cppname}(#{m.signature.join(",\n            
")})\n\n";
+    genl "virtual RequestId #{m.cppname}(#{m.signature.join(",\n            
")});"
+    genl
   end
 
   def inner_class_defn(c)
@@ -49,30 +52,16 @@
   end
   
   def inner_method_defn(m,cname)
-    if m.response?
-      rettype="void"
-      ret=""
-      sigadd=["RequestId responseTo"]
-      paramadd=["channel.getVersion(), responseTo"]
-    else
-      rettype="RequestId"
-      ret="return "
-      sigadd=[]
-      paramadd=["channel.getVersion()"]
-    end
-    sig=(m.signature+sigadd).join(", ")
-    params=(paramadd+m.param_names).join(",\n            ")
-    gen <<EOS
-#{rettype} [EMAIL PROTECTED]::#{cname}::#{m.cppname}(#{sig}) {
-    #{ret}channel.send(new #{m.body_name}(#{params}));
-}
-
-EOS
+    genl "RequestId [EMAIL 
PROTECTED]::#{cname}::#{m.cppname}(#{m.signature.join(", ")})"
+    scope { 
+      params=(["channel.getVersion()"]+m.param_names).join(", ")
+      genl "return channel.send(make_shared_ptr(new 
#{m.body_name}(#{params})));"
+    }
   end
 
   def get_decl(c)
     cname=c.name.caps
-    gen "    #{cname}& [EMAIL PROTECTED]::get#{cname}();\n"
+    gen "    #{cname}& get#{cname}();\n"
   end
   
   def get_defn(c)
@@ -87,7 +76,7 @@
 
   def generate
     # .h file
-    h_file(@classname+".h") {
+    h_file(@filename) {
       gen <<EOS
 #include "qpid/framing/Proxy.h"
 
@@ -118,14 +107,13 @@
   }
 
   # .cpp file
-  cpp_file(@classname+".cpp") {
-    gen <<EOS
-#include <sstream>
-#include "[EMAIL PROTECTED]"
-#include "qpid/framing/ChannelAdapter.h"
-#include "qpid/framing/amqp_types_full.h"
-EOS
-    @amqp.methods_on(@chassis).each { |m| include(m) }
+  cpp_file(@filename) {
+      include "<sstream>"
+      include "[EMAIL PROTECTED]"
+      include "qpid/framing/ChannelAdapter.h"
+      include "qpid/framing/amqp_types_full.h"
+      @amqp.methods_on(@chassis).each {
+        |m| include "qpid/framing/#{m.body_name}.h" }
     gen <<EOS
 namespace qpid {
 namespace framing {
@@ -142,7 +130,7 @@
     @amqp.classes.each { |c| get_defn(c) }
     gen "    // Inner class implementation\n\n"
     @amqp.classes.each { |c| inner_class_defn(c) }
-    gen "}} // namespae qpid::framing"
+    genl "}} // namespae qpid::framing"
   }
    end
 end

Propchange: incubator/qpid/trunk/qpid/cpp/src/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Wed Aug  8 17:03:43 2007
@@ -10,3 +10,5 @@
 generate.mk
 rubygen.mk
 method_variants.h
+generate.timestamp
+rubygen.timestamp

Modified: incubator/qpid/trunk/qpid/cpp/src/Makefile.am
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/Makefile.am?view=diff&rev=564051&r1=564050&r2=564051
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/Makefile.am (original)
+++ incubator/qpid/trunk/qpid/cpp/src/Makefile.am Wed Aug  8 17:03:43 2007
@@ -15,10 +15,10 @@
 [EMAIL PROTECTED]@ $(top_srcdir)/xml/cluster.xml
 
 # Makefiles are either generated or copied from $srcdir.
-sinclude gen/generate.mk
-sinclude rubygen.mk
+include generate.mk
+include rubygen.mk
 
-DISTCLEANFILES=gen/generate.mk rubygen.mk
+DISTCLEANFILES=generate.mk rubygen.mk
 
 if GENERATE
 
@@ -28,10 +28,10 @@
 
 gentools_dir=$(top_srcdir)/gentools
 
-gen/generate.mk: generate.sh $(specs) $(generator)
+generate.mk $(generated_cpp) $(generated_h): generate.timestamp
+generate.timestamp: generate.sh $(specs) $(generator)
        env gentools_dir=$(gentools_dir) specs="$(specs)" $(srcdir)/generate.sh
-
-gen $(generated_cpp) $(generated_h): gen/generate.mk
+       touch $@
 
 # Empty rule in case a generator file is renamed/removed.
 $(generator):
@@ -43,21 +43,26 @@
 
 rgen_dir=$(top_srcdir)/rubygen
 rgen_tdir=$(rgen_dir)/templates
-rgen_generator=$(rgen_dir)/generate $(rgen_dir)/amqpgen.rb 
$(rgen_dir)/cppgen.rb
-
 rgen_cmd=ruby -I $(rgen_dir) $(rgen_dir)/generate
-rgen_templates=$(rgen_tdir)/method_variants.rb 
$(rgen_tdir)/frame_body_lists.rb  $(rgen_tdir)/Session.rb
-
-rubygen.mk: $(rgen_generator) $(specs) $(rgen_templates)
-       { echo "rgen_srcs= \\"; \
-       for f in `$(rgen_cmd) . $(specs) $(rgen_templates) `; do echo " $$f 
\\"; done; \
-       echo; } > $@
-
-$(rgen_srcs): rubygen.mk
 
+rgen_templates=$(rgen_tdir)/method_variants.rb \
+       $(rgen_tdir)/frame_body_lists.rb        \
+       $(rgen_tdir)/Session.rb                 \
+       $(rgen_tdir)/Proxy.rb
+
+rgen_generator=$(rgen_dir)/generate            \
+       $(rgen_dir)/amqpgen.rb                  \
+       $(rgen_dir)/cppgen.rb
+
+rubygen.mk $(rgen_srcs): rubygen.timestamp
+rubygen.timestamp: $(rgen_generator) $(specs) $(rgen_templates)
+       { echo -n "rgen_srcs= "; \
+       for f in `$(rgen_cmd) . $(specs) $(rgen_templates) `; do echo "\\"; 
echo -n "   $$f "; done; \
+       echo; } > rubygen.mk
+       touch $@
 else                           # !GENERATE
 # If not generating, copy generated makefiles from source dir to build dir.
-gen/generate.mk:
+generate.mk:
        cp $(srcdir)/$@ $@
 rubygen.mk:
        cp $(srcdir)/$@ $@
@@ -150,10 +155,10 @@
   qpid/framing/Handler.h \
   qpid/framing/FrameHandler.h \
   qpid/framing/HandlerUpdater.h \
-  gen/qpid/framing/AMQP_ClientProxy.cpp \
+  qpid/framing/AMQP_ClientProxy.cpp \
+  qpid/framing/AMQP_ServerProxy.cpp \
   gen/qpid/framing/AMQP_HighestVersion.h \
   gen/qpid/framing/AMQP_MethodVersionMap.cpp \
-  gen/qpid/framing/AMQP_ServerProxy.cpp \
   qpid/Exception.cpp \
   qpid/Plugin.h \
   qpid/Plugin.cpp \
@@ -412,16 +417,4 @@
 
 # Force build of qpidd during dist phase so help2man will work.
 dist-hook: qpidd
-
-# FIXME aconway 2007-08-06: Use of gch should be conditional on gcc version.
-
-# Pre compiled headers - use BUILT_SOURCES to get them built first.
-BUILT_SOURCES=qpid/framing/method_variants.h.gch
-sinclude qpid/framing/method_variants.h.gch.deps
-CLEANFILES=qpid/framing/method_variants.h.gch 
qpid/framing/method_variants.h.gch.deps
-
-SUFFIXES=.h.gch
-.h.h.gch:
-       rm -f $@
-       $(CXXCOMPILE) -MT $@ -MD -MP -MF [EMAIL PROTECTED] -fPIC -DPIC -x 
c++-header -c -o $@ $<
 

Modified: incubator/qpid/trunk/qpid/cpp/src/generate.sh
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/generate.sh?view=diff&rev=564051&r1=564050&r2=564051
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/generate.sh (original)
+++ incubator/qpid/trunk/qpid/cpp/src/generate.sh Wed Aug  8 17:03:43 2007
@@ -40,8 +40,8 @@
        make_assign "generator" "" $specs \
            `find ../gentools \( -name '*.java' -o -name '*.tmpl' \) -print`
     fi
-) > gen/generate.mk-t
-mv gen/generate.mk-t gen/generate.mk
+) > generate.mk-t
+mv generate.mk-t generate.mk
 
 
 

Propchange: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Wed Aug  8 17:03:43 2007
@@ -5,3 +5,7 @@
 method_variants.h.gch.deps
 method_variants.h.gch
 method_variants.h
+AMQP_ClientProxy.cpp
+AMQP_ClientProxy.h
+AMQP_ServerProxy.cpp
+AMQP_ServerProxy.h

Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Proxy.h
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Proxy.h?view=diff&rev=564051&r1=564050&r2=564051
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Proxy.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/framing/Proxy.h Wed Aug  8 17:03:43 
2007
@@ -28,6 +28,7 @@
 class ChannelAdapter;
 class FieldTable;
 class Content;
+class Uuid;
 
 /**
  * Base class for proxies.


Reply via email to