aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-10-22 11:23:21 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-10-22 11:23:21 +0200
commitf4c94ca015b123ec01037e521582d3a04f4c4b81 (patch)
tree21492eece1c7e8c16c8128a5986d7cc3c163345a
parentc2bb4633ac31e1933908dc73476ce9ddffff8dad (diff)
Implement inclusion of dependant -odb headers
New test: tracer/include.
-rw-r--r--tracer/include/driver.cxx41
-rw-r--r--tracer/include/makefile87
-rw-r--r--tracer/include/obj1.hxx27
-rw-r--r--tracer/include/obj2.hxx27
-rw-r--r--tracer/include/obj3.hxx27
-rw-r--r--tracer/include/objs1.hxx15
-rw-r--r--tracer/include/objs2.hxx15
-rw-r--r--tracer/include/objs3.hxx13
-rw-r--r--tracer/include/objs4.hxx13
-rw-r--r--tracer/include/test.std0
-rw-r--r--tracer/include/test1.hxx18
-rw-r--r--tracer/include/test2.hxx17
-rw-r--r--tracer/include/test3.hxx14
-rw-r--r--tracer/include/test4.hxx14
-rw-r--r--tracer/makefile3
15 files changed, 330 insertions, 1 deletions
diff --git a/tracer/include/driver.cxx b/tracer/include/driver.cxx
new file mode 100644
index 0000000..111f542
--- /dev/null
+++ b/tracer/include/driver.cxx
@@ -0,0 +1,41 @@
+// file : tracer/include/driver.cxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+// Test inclusion of -odb files (compilation test).
+//
+// The setup of this test is as follows: the ODB compiler has two
+// additional include directories in its search path: .. and ../..
+// while the C++ compiler has only ../.. . This way, if a ..-based
+// path is used in the generated code, the C++ compilation will
+// fail.
+//
+
+#include <memory>
+#include <cassert>
+#include <iostream>
+
+#include <odb/exceptions.hxx>
+#include <odb/transaction.hxx>
+#include <odb/tracer/database.hxx>
+
+#include "test1.hxx"
+#include "test1-odb.hxx"
+
+#include "test2.hxx"
+#include "test2-odb.hxx"
+
+#include "test3.hxx"
+#include "test3-odb.hxx"
+
+#include "test4.hxx"
+#include "test4-odb.hxx"
+
+using namespace std;
+using namespace odb;
+
+int
+main ()
+{
+}
diff --git a/tracer/include/makefile b/tracer/include/makefile
new file mode 100644
index 0000000..8bb6914
--- /dev/null
+++ b/tracer/include/makefile
@@ -0,0 +1,87 @@
+# file : tracer/include/makefile
+# author : Boris Kolpackov <boris@codesynthesis.com>
+# copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
+# license : GNU GPL v2; see accompanying LICENSE file
+
+include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make
+
+cxx_tun := driver.cxx
+odb_hdr := obj1.hxx obj2.hxx obj3.hxx test1.hxx test2.hxx test3.hxx test4.hxx
+cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o) $(odb_hdr:.hxx=-odb.o))
+cxx_od := $(cxx_obj:.o=.o.d)
+
+driver := $(out_base)/driver
+dist := $(out_base)/.dist
+test := $(out_base)/.test
+clean := $(out_base)/.clean
+
+# Import.
+#
+$(call import,\
+ $(scf_root)/import/odb/stub.make,\
+ odb: odb,odb-rules: odb_rules)
+
+$(call import,\
+ $(scf_root)/import/libodb/stub.make,\
+ l: odb.l,cpp-options: odb.l.cpp-options)
+
+$(call import,\
+ $(scf_root)/import/libodb-tracer/stub.make,\
+ l: odb_tracer.l,cpp-options: odb_tracer.l.cpp-options)
+
+# Build.
+#
+$(driver): $(cxx_obj) $(odb_tracer.l) $(odb.l)
+$(cxx_obj) $(cxx_od): cpp_options := -I$(out_base) -I$(out_base)/../.. \
+-I$(src_base)/../..
+$(cxx_obj) $(cxx_od): $(odb_tracer.l.cpp-options) $(odb.l.cpp-options)
+
+genf := $(foreach f,$(odb_hdr:.hxx=-odb),$(addprefix $f,.hxx .ixx .cxx))
+gen := $(addprefix $(out_base)/,$(genf))
+
+$(gen): $(odb)
+$(gen): odb := $(odb)
+$(gen): odb_options += --database tracer
+$(gen): cpp_options := -I$(out_base) -I$(src_base)/.. -I$(src_base)/../..
+$(gen): $(odb_tracer.l.cpp-options) $(odb.l.cpp-options)
+
+$(call include-dep,$(cxx_od),$(cxx_obj),$(gen))
+
+# Alias for default target.
+#
+$(out_base)/: $(driver)
+
+# Dist: not supported.
+#
+$(dist):
+
+# Test.
+#
+$(test): $(driver) $(src_base)/test.std
+ $(call message,test $<,$< | diff -u $(src_base)/test.std -)
+
+# Clean.
+#
+$(clean): \
+ $(driver).o.clean \
+ $(addsuffix .cxx.clean,$(cxx_obj)) \
+ $(addsuffix .cxx.clean,$(cxx_od)) \
+ $(addprefix $(out_base)/,$(odb_hdr:.hxx=-odb.cxx.hxx.clean))
+
+# Generated .gitignore.
+#
+ifeq ($(out_base),$(src_base))
+$(driver): | $(out_base)/.gitignore
+
+$(out_base)/.gitignore: files := driver $(genf)
+$(clean): $(out_base)/.gitignore.clean
+
+$(call include,$(bld_root)/git/gitignore.make)
+endif
+
+# How to.
+#
+$(call include,$(odb_rules))
+$(call include,$(bld_root)/cxx/cxx-d.make)
+$(call include,$(bld_root)/cxx/cxx-o.make)
+$(call include,$(bld_root)/cxx/o-e.make)
diff --git a/tracer/include/obj1.hxx b/tracer/include/obj1.hxx
new file mode 100644
index 0000000..f994c43
--- /dev/null
+++ b/tracer/include/obj1.hxx
@@ -0,0 +1,27 @@
+// file : tracer/include/obj1.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef OBJ1_HXX
+#define OBJ1_HXX
+
+#include <odb/core.hxx>
+
+#pragma db object
+struct object1
+{
+ object1 (unsigned long id)
+ : id_ (id)
+ {
+ }
+
+ object1 ()
+ {
+ }
+
+ #pragma db id
+ unsigned long id_;
+};
+
+#endif // OBJ1_HXX
diff --git a/tracer/include/obj2.hxx b/tracer/include/obj2.hxx
new file mode 100644
index 0000000..d29cbad
--- /dev/null
+++ b/tracer/include/obj2.hxx
@@ -0,0 +1,27 @@
+// file : tracer/include/obj2.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef OBJ2_HXX
+#define OBJ2_HXX
+
+#include <odb/core.hxx>
+
+#pragma db object
+struct object2
+{
+ object2 (unsigned long id)
+ : id_ (id)
+ {
+ }
+
+ object2 ()
+ {
+ }
+
+ #pragma db id
+ unsigned long id_;
+};
+
+#endif // OBJ2_HXX
diff --git a/tracer/include/obj3.hxx b/tracer/include/obj3.hxx
new file mode 100644
index 0000000..0490176
--- /dev/null
+++ b/tracer/include/obj3.hxx
@@ -0,0 +1,27 @@
+// file : tracer/include/obj3.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef OBJ3_HXX
+#define OBJ3_HXX
+
+#include <odb/core.hxx>
+
+#pragma db object
+struct object3
+{
+ object3 (unsigned long id)
+ : id_ (id)
+ {
+ }
+
+ object3 ()
+ {
+ }
+
+ #pragma db id
+ unsigned long id_;
+};
+
+#endif // OBJ3_HXX
diff --git a/tracer/include/objs1.hxx b/tracer/include/objs1.hxx
new file mode 100644
index 0000000..3df76ee
--- /dev/null
+++ b/tracer/include/objs1.hxx
@@ -0,0 +1,15 @@
+// file : tracer/include/objs1.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef OBJS1_HXX
+#define OBJS1_HXX
+
+#ifdef ODB_COMPILER
+# include <include/obj1.hxx>
+# include <include/obj2.hxx>
+# include <include/obj3.hxx>
+#endif
+
+#endif // OBJS1_HXX
diff --git a/tracer/include/objs2.hxx b/tracer/include/objs2.hxx
new file mode 100644
index 0000000..991fea1
--- /dev/null
+++ b/tracer/include/objs2.hxx
@@ -0,0 +1,15 @@
+// file : tracer/include/objs2.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef OBJS2_HXX
+#define OBJS2_HXX
+
+#ifdef ODB_COMPILER
+# include "include/obj1.hxx"
+# include "include/obj2.hxx"
+# include "include/obj3.hxx"
+#endif
+
+#endif // OBJS2_HXX
diff --git a/tracer/include/objs3.hxx b/tracer/include/objs3.hxx
new file mode 100644
index 0000000..ed72d3c
--- /dev/null
+++ b/tracer/include/objs3.hxx
@@ -0,0 +1,13 @@
+// file : tracer/include/objs3.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef OBJS3_HXX
+#define OBJS3_HXX
+
+#include "../include/obj1.hxx"
+#include "../include/obj2.hxx"
+#include "../include/obj3.hxx"
+
+#endif // OBJS3_HXX
diff --git a/tracer/include/objs4.hxx b/tracer/include/objs4.hxx
new file mode 100644
index 0000000..d7d6d97
--- /dev/null
+++ b/tracer/include/objs4.hxx
@@ -0,0 +1,13 @@
+// file : tracer/include/objs1.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef OBJS4_HXX
+#define OBJS4_HXX
+
+#include <tracer/include/obj1.hxx>
+#include <tracer/include/obj2.hxx>
+#include <tracer/include/obj3.hxx>
+
+#endif // OBJS4_HXX
diff --git a/tracer/include/test.std b/tracer/include/test.std
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tracer/include/test.std
diff --git a/tracer/include/test1.hxx b/tracer/include/test1.hxx
new file mode 100644
index 0000000..d3bc35c
--- /dev/null
+++ b/tracer/include/test1.hxx
@@ -0,0 +1,18 @@
+// file : tracer/include/test1.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef TEST1_HXX
+#define TEST1_HXX
+
+// Test include directive parsing.
+//
+#include"obj1.hxx"
+
+ # include \
+ <tracer/include/obj2.hxx>
+
+/*comment*/ # /*comment*/ include /* comment */ "obj3.hxx" // comment
+
+#endif // TEST1_HXX
diff --git a/tracer/include/test2.hxx b/tracer/include/test2.hxx
new file mode 100644
index 0000000..9db23c4
--- /dev/null
+++ b/tracer/include/test2.hxx
@@ -0,0 +1,17 @@
+// file : tracer/include/test2.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef TEST2_HXX
+#define TEST2_HXX
+
+// Test preference of includes from the main file.
+//
+#include "objs1.hxx"
+
+#include "obj1.hxx"
+#include "obj2.hxx"
+#include "obj3.hxx"
+
+#endif // TEST2_HXX
diff --git a/tracer/include/test3.hxx b/tracer/include/test3.hxx
new file mode 100644
index 0000000..2ff8af7
--- /dev/null
+++ b/tracer/include/test3.hxx
@@ -0,0 +1,14 @@
+// file : tracer/include/test3.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef TEST3_HXX
+#define TEST3_HXX
+
+// Test preference of longer (more qualified) paths.
+//
+#include "objs2.hxx"
+#include "objs3.hxx"
+
+#endif // TEST3_HXX
diff --git a/tracer/include/test4.hxx b/tracer/include/test4.hxx
new file mode 100644
index 0000000..d6dc74b
--- /dev/null
+++ b/tracer/include/test4.hxx
@@ -0,0 +1,14 @@
+// file : tracer/include/test3.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
+// license : GNU GPL v2; see accompanying LICENSE file
+
+#ifndef TEST3_HXX
+#define TEST3_HXX
+
+// Test preference of <> over "".
+//
+#include "objs2.hxx"
+#include "objs4.hxx"
+
+#endif // TEST3_HXX
diff --git a/tracer/makefile b/tracer/makefile
index c94af17..ef393ad 100644
--- a/tracer/makefile
+++ b/tracer/makefile
@@ -8,6 +8,7 @@ include $(dir $(lastword $(MAKEFILE_LIST)))../build/bootstrap.make
tests := \
template \
object \
+include \
pragma \
transaction \
types
@@ -20,7 +21,7 @@ clean := $(out_base)/.clean
$(default): $(addprefix $(out_base)/,$(addsuffix /,$(tests)))
$(dist): name := $(notdir $(src_base))
-$(dist): export dirs := $(tests)
+$(dist): export dirs := $(filter-out include,$(tests))
$(dist): export extra_dist := $(name)-vc9.sln $(name)-vc10.sln test.bat
$(dist): $(addprefix $(out_base)/,$(addsuffix /.dist,$(tests)))
$(call meta-automake)