1# file      : examples/cxx/tree/streaming/makefile
2# copyright : Copyright (c) 2005-2017 Code Synthesis Tools CC
3# license   : GNU GPL v2 + exceptions; see accompanying LICENSE file
4
5include $(dir $(lastword $(MAKEFILE_LIST)))../../../../build/bootstrap.make
6
7xsd := position.xsd
8cxx := driver.cxx parser.cxx serializer.cxx grammar-input-stream.cxx
9
10obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=.o))
11dep := $(obj:.o=.o.d)
12
13driver   := $(out_base)/driver
14install  := $(out_base)/.install
15dist     := $(out_base)/.dist
16dist-win := $(out_base)/.dist-win
17clean    := $(out_base)/.clean
18
19
20# Import.
21#
22$(call import,\
23  $(scf_root)/import/libxerces-c/stub.make,\
24  l: xerces_c.l,cpp-options: xerces_c.l.cpp-options)
25
26
27# Build.
28#
29$(driver): $(obj) $(xerces_c.l)
30
31$(obj) $(dep): cpp_options := -I$(out_base) -I$(src_base) -I$(src_root)/libxsd
32$(obj) $(dep): $(xerces_c.l.cpp-options)
33
34genf := $(xsd:.xsd=.hxx) $(xsd:.xsd=.ixx) $(xsd:.xsd=.cxx)
35gen  := $(addprefix $(out_base)/,$(genf))
36
37$(gen): xsd := $(out_root)/xsd/xsd
38$(gen): xsd_options += --generate-serialization
39$(gen): $(out_root)/xsd/xsd
40
41$(call include-dep,$(dep),$(obj),$(gen))
42
43# Convenience alias for default target.
44#
45$(out_base)/: $(driver)
46
47
48# Install & Dist.
49#
50dist-common := $(out_base)/.dist-common
51
52$(install) $(dist) $(dist-win) $(dist-common): path := $(subst $(src_root)/,,$(src_base))
53
54$(install):
55	$(call install-data,$(src_base)/README,$(install_doc_dir)/xsd/$(path)/README)
56	$(call install-data,$(src_base)/driver.cxx,$(install_doc_dir)/xsd/$(path)/driver.cxx)
57	$(call install-data,$(src_base)/parser.cxx,$(install_doc_dir)/xsd/$(path)/parser.cxx)
58	$(call install-data,$(src_base)/parser.hxx,$(install_doc_dir)/xsd/$(path)/parser.hxx)
59	$(call install-data,$(src_base)/serializer.cxx,$(install_doc_dir)/xsd/$(path)/serializer.cxx)
60	$(call install-data,$(src_base)/serializer.hxx,$(install_doc_dir)/xsd/$(path)/serializer.hxx)
61	$(call install-data,$(src_base)/grammar-input-stream.cxx,$(install_doc_dir)/xsd/$(path)/grammar-input-stream.cxx)
62	$(call install-data,$(src_base)/grammar-input-stream.hxx,$(install_doc_dir)/xsd/$(path)/grammar-input-stream.hxx)
63	$(call install-data,$(src_base)/position.xsd,$(install_doc_dir)/xsd/$(path)/position.xsd)
64	$(call install-data,$(src_base)/position.xml,$(install_doc_dir)/xsd/$(path)/position.xml)
65
66$(dist-common):
67	$(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx)
68	$(call install-data,$(src_base)/parser.cxx,$(dist_prefix)/$(path)/parser.cxx)
69	$(call install-data,$(src_base)/parser.hxx,$(dist_prefix)/$(path)/parser.hxx)
70	$(call install-data,$(src_base)/serializer.cxx,$(dist_prefix)/$(path)/serializer.cxx)
71	$(call install-data,$(src_base)/serializer.hxx,$(dist_prefix)/$(path)/serializer.hxx)
72	$(call install-data,$(src_base)/grammar-input-stream.cxx,$(dist_prefix)/$(path)/grammar-input-stream.cxx)
73	$(call install-data,$(src_base)/grammar-input-stream.hxx,$(dist_prefix)/$(path)/grammar-input-stream.hxx)
74	$(call install-data,$(src_base)/position.xsd,$(dist_prefix)/$(path)/position.xsd)
75	$(call install-data,$(src_base)/position.xml,$(dist_prefix)/$(path)/position.xml)
76
77$(dist): $(dist-common)
78	$(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README)
79
80$(dist-win): $(dist-common)
81	$(call install-data,$(src_base)/README,$(dist_prefix)/$(path)/README.txt)
82	$(call message,,todos $(dist_prefix)/$(path)/README.txt)
83
84
85# Clean.
86#
87$(clean): $(driver).o.clean                            \
88  $(addsuffix .cxx.clean,$(obj))                       \
89  $(addsuffix .cxx.clean,$(dep))                       \
90  $(addprefix $(out_base)/,$(xsd:.xsd=.cxx.xsd.clean))
91	$(call message,rm $$1,rm -f $$1,$(out_base)/out.xml)
92
93# Generated .gitignore.
94#
95ifeq ($(out_base),$(src_base))
96$(gen): | $(out_base)/.gitignore
97$(driver): | $(out_base)/.gitignore
98
99$(out_base)/.gitignore: files := driver out.xml $(genf)
100$(clean): $(out_base)/.gitignore.clean
101
102$(call include,$(bld_root)/git/gitignore.make)
103endif
104
105# How to.
106#
107$(call include,$(bld_root)/cxx/o-e.make)
108$(call include,$(bld_root)/cxx/cxx-o.make)
109$(call include,$(bld_root)/cxx/cxx-d.make)
110$(call include,$(bld_root)/install.make)
111$(call include,$(scf_root)/xsd/tree/xsd-cxx.make)
112
113# Dependencies.
114#
115$(call import,$(src_root)/xsd/makefile)
116