1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
# file : build/bootstrap.make
# copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC
# license : GNU GPL v2; see accompanying LICENSE file
project_name := odb-examples
# First try to include the bundled bootstrap.make if it exist. If that
# fails, let make search for the external bootstrap.make.
#
build := build-0.3
-include $(dir $(lastword $(MAKEFILE_LIST)))../../$(build)/bootstrap.make
ifeq ($(patsubst %build/bootstrap.make,,$(lastword $(MAKEFILE_LIST))),)
include $(build)/bootstrap.make
endif
# Configuration
#
$(call include,$(scf_root)/configuration.make)
def_goal := $(.DEFAULT_GOAL)
# Include C++ configuration. We need to know if we are using the generic
# C++ compiler in which case we need to compensate for missing dependency
# auto-generation (see below).
#
$(call include,$(bld_root)/cxx/configuration.make)
# Aliases
#
.PHONY: $(out_base)/ \
$(out_base)/.test \
$(out_base)/.dist \
$(out_base)/.clean
ifdef %interactive%
.PHONY: test dist clean
test: $(out_base)/.test
dist: $(out_base)/.dist
clean: $(out_base)/.clean
endif
# Database schema creation.
#
ifeq ($(filter $(db_id),sqlite),)
$(out_base)/.test: schema = \
$(foreach h,$(header),$(call \
message,sql $$1,$(dcf_root)/db-driver \
$$1,$(out_base)/$(basename $h).sql)$(literal_newline)$(literal_tab))
endif
# Dist setup.
#
ifneq ($(filter $(MAKECMDGOALS),dist),)
# Make sure the distribution prefix is set if the goal is dist.
#
ifeq ($(dist_prefix),)
$(error dist_prefix is not set)
endif
databases := mysql sqlite pgsql oracle mssql
$(dist): databases := $(databases)
# $1 project template without the -vcN.vc[x]proj suffix.
# $2 project name without the -vcN.vc[x]proj suffix.
#
$(dist): meta-vc9projs = \
$(foreach d,$(databases),$(call \
meta-vc9proj,$1-vc9.vcproj,$(if $2,$2,$(notdir \
$1))-$d-vc9.vcproj,database,$d)$(literal_newline)$(literal_tab))@:
$(dist): meta-vc10projs = \
$(foreach d,$(databases),$(call \
meta-vc10proj,$1-vc10.vcxproj,$(if $2,$2,$(notdir \
$1))-$d-vc10.vcxproj,database,$d)$(literal_newline)$(literal_tab))@:
# $1 project name without the -vcN.vc[x]proj suffix.
#
vc9projs = $(addprefix $1-,$(addsuffix -vc9.vcproj,$(databases)))
vc10projs = $(addprefix $1-,$(addsuffix -vc10.vcxproj,$(databases))) \
$(addprefix $1-,$(addsuffix -vc10.vcxproj.filters,$(databases)))
# $1 solution name without the -vcN.sln suffix.
#
$(dist): meta-vc9slns = \
$(foreach d,$(databases),$(call \
meta-vc9sln,$1-vc9.sln,$1-$d-vc9.sln,-$d-vc9.vcproj,database,$d)$(literal_newline)\
$(literal_tab))@:
$(dist): meta-vc10slns = \
$(foreach d,$(databases),$(call \
meta-vc10sln,$1-vc10.sln,$1-$d-vc10.sln,-$d-vc10.vcxproj,database,$d)$(literal_newline)\
$(literal_tab))@:
vc9slns = $(addprefix $1-,$(addsuffix -vc9.sln,$(databases)))
vc10slns = $(addprefix $1-,$(addsuffix -vc10.sln,$(databases)))
endif
# If we don't have dependency auto-generation then we need to manually
# make sure that ODB files are generated before C++ file are compiler.
# To do this we make the object files ($2) depend in order-only on
# generated files ($3).
#
ifeq ($(cxx_id),generic)
define include-dep
$(if $2,$(eval $2: | $3))
endef
else
define include-dep
$(call -include,$1)
endef
endif
# Don't include dependency info for certain targets.
#
ifneq ($(filter $(MAKECMDGOALS),clean disfigure dist),)
include-dep =
endif
.DEFAULT_GOAL := $(def_goal)
|