1# file      : examples/cxx/parser/multiroot/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 := protocol.xsd
8cxx := driver.cxx protocol-pimpl.cxx
9
10obj := $(addprefix $(out_base)/,$(cxx:.cxx=.o) $(xsd:.xsd=-pskel.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=-pskel.hxx) $(xsd:.xsd=-pskel.ixx) $(xsd:.xsd=-pskel.cxx)
35gen  := $(addprefix $(out_base)/,$(genf))
36
37$(gen): xsd := $(out_root)/xsd/xsd
38$(gen): xsd_options += --type-map $(src_base)/protocol.map
39$(gen): $(out_root)/xsd/xsd $(src_base)/protocol.map
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)/protocol.xsd,$(install_doc_dir)/xsd/$(path)/protocol.xsd)
58	$(call install-data,$(src_base)/balance.xml,$(install_doc_dir)/xsd/$(path)/balance.xml)
59	$(call install-data,$(src_base)/deposit.xml,$(install_doc_dir)/xsd/$(path)/deposit.xml)
60	$(call install-data,$(src_base)/withdraw.xml,$(install_doc_dir)/xsd/$(path)/withdraw.xml)
61	$(call install-data,$(src_base)/protocol.map,$(install_doc_dir)/xsd/$(path)/protocol.map)
62	$(call install-data,$(src_base)/protocol.hxx,$(install_doc_dir)/xsd/$(path)/protocol.hxx)
63	$(call install-data,$(src_base)/protocol-pimpl.hxx,$(install_doc_dir)/xsd/$(path)/protocol-pimpl.hxx)
64	$(call install-data,$(src_base)/protocol-pimpl.cxx,$(install_doc_dir)/xsd/$(path)/protocol-pimpl.cxx)
65
66$(dist-common):
67	$(call install-data,$(src_base)/driver.cxx,$(dist_prefix)/$(path)/driver.cxx)
68	$(call install-data,$(src_base)/protocol.xsd,$(dist_prefix)/$(path)/protocol.xsd)
69	$(call install-data,$(src_base)/balance.xml,$(dist_prefix)/$(path)/balance.xml)
70	$(call install-data,$(src_base)/deposit.xml,$(dist_prefix)/$(path)/deposit.xml)
71	$(call install-data,$(src_base)/withdraw.xml,$(dist_prefix)/$(path)/withdraw.xml)
72	$(call install-data,$(src_base)/protocol.map,$(dist_prefix)/$(path)/protocol.map)
73	$(call install-data,$(src_base)/protocol.hxx,$(dist_prefix)/$(path)/protocol.hxx)
74	$(call install-data,$(src_base)/protocol-pimpl.hxx,$(dist_prefix)/$(path)/protocol-pimpl.hxx)
75	$(call install-data,$(src_base)/protocol-pimpl.cxx,$(dist_prefix)/$(path)/protocol-pimpl.cxx)
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# Clean.
85#
86$(clean): $(driver).o.clean                                 \
87  $(addsuffix .cxx.clean,$(obj))                            \
88  $(addsuffix .cxx.clean,$(dep))                            \
89  $(addprefix $(out_base)/,$(xsd:.xsd=-pskel.cxx.xsd.clean))
90
91# Generated .gitignore.
92#
93ifeq ($(out_base),$(src_base))
94$(gen): | $(out_base)/.gitignore
95$(driver): | $(out_base)/.gitignore
96
97$(out_base)/.gitignore: files := driver $(genf)
98$(clean): $(out_base)/.gitignore.clean
99
100$(call include,$(bld_root)/git/gitignore.make)
101endif
102
103# How to.
104#
105$(call include,$(bld_root)/cxx/o-e.make)
106$(call include,$(bld_root)/cxx/cxx-o.make)
107$(call include,$(bld_root)/cxx/cxx-d.make)
108$(call include,$(bld_root)/install.make)
109$(call include,$(scf_root)/xsd/parser/xsd-cxx.make)
110
111# Dependencies.
112#
113$(call import,$(src_root)/xsd/makefile)
114