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.