summaryrefslogtreecommitdiff
path: root/qpid/cpp/gen
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2007-04-14 16:38:02 +0000
committerAlan Conway <aconway@apache.org>2007-04-14 16:38:02 +0000
commit1b3168902f3e3c03288860e55ba02e5200606cff (patch)
tree1d7215ec8a0c762d86104df93acb62d18d8da0db /qpid/cpp/gen
parentf50d67546eda00e1b0ea875ea4043770405ce7b6 (diff)
downloadqpid-python-1b3168902f3e3c03288860e55ba02e5200606cff.tar.gz
* Moved code generation into top-level gen/ dir with own Makefile.am
to correctly install generated headers. * Fixed gen-src.mk/Makefile dependency loop, bootstrap no longer needs to pre-create gen-src.mk. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@528835 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/gen')
-rw-r--r--qpid/cpp/gen/Makefile.am41
-rwxr-xr-xqpid/cpp/gen/gen-src-mk.sh36
2 files changed, 77 insertions, 0 deletions
diff --git a/qpid/cpp/gen/Makefile.am b/qpid/cpp/gen/Makefile.am
new file mode 100644
index 0000000000..de524374e1
--- /dev/null
+++ b/qpid/cpp/gen/Makefile.am
@@ -0,0 +1,41 @@
+#
+# Generate code from AMQP XML specification.
+#
+-include gen-src.mk
+
+BUILT_SOURCES = gen-src.mk $(generated_cpp) $(generated_h)
+
+# Distribute the generated sources, since the code generator depends
+# on tools that may not be available in the build environment.
+EXTRA_DIST = $(BUILT_SOURCES)
+
+# Install generated headers
+nobase_include_HEADERS = $(generated_h)
+
+# Don't attempt to run the code generator unless configure has set
+# CAN_GENERATE_CODE, indicating that the amqp.xml and tools needed
+# to run the code generator are available.
+#
+if CAN_GENERATE_CODE
+gentools_dir = $(top_srcdir)/gentools
+gentools_srcdir = $(gentools_dir)/src/org/apache/qpid/gentools
+spec_dir = $(top_srcdir)/../specs
+spec = $(spec_dir)/amqp.0-9.xml $(spec_dir)/amqp-errata.0-9.xml
+
+qpid $(generated_cpp) $(generated_h): $(spec) $(java_sources) $(cxx_templates)
+ rm -rf qpid
+ mkdir -p qpid/framing
+ cd $(gentools_srcdir) && rm -f *.class && $(JAVAC) *.java
+ $(JAVA) -cp $(gentools_dir)/src org.apache.qpid.gentools.Main \
+ -c -o qpid/framing -t $(gentools_dir)/templ.cpp $(spec)
+ touch qpid
+
+gen-src.mk: qpid gen-src-mk.sh
+ ./gen-src-mk.sh $(gentools_dir) $(gentools_srcdir) > $@-t
+ mv $@-t $@
+
+endif
+
+maintainer-clean-local:
+ rm -rf qpid gen-src.mk $(gentools_srcdir)/*.class
+
diff --git a/qpid/cpp/gen/gen-src-mk.sh b/qpid/cpp/gen/gen-src-mk.sh
new file mode 100755
index 0000000000..c17bc14307
--- /dev/null
+++ b/qpid/cpp/gen/gen-src-mk.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+# Generates gen-src.mk makefile fragment, to stdout.
+# Usage: <gentools_dir> <gentools_srcdir>
+
+gentools_dir=$1
+gentools_srcdir=$2
+
+backslashify() {
+ for x in $* ; do
+ echo " \\"
+ echo -n " $x"
+ done
+ echo ; echo
+}
+
+
+echo -n "generated_cpp = "
+backslashify `find * -name '*.cpp' -print`
+echo -n "generated_h = "
+backslashify `find * -name '*.h' -print`
+
+echo
+echo -n "java_sources ="
+backslashify `find $gentools_srcdir -name '*.java' -print`
+echo -n "cxx_templates ="
+backslashify `find $gentools_dir/templ.cpp -name '*.tmpl'`
+
+cat <<EOF
+# Empty rules in case one of these files is removed,
+# renamed or no longer generated.
+\$(spec):
+\$(java_sources):
+\$(cxx_templates):
+EOF
+
+