aboutsummaryrefslogtreecommitdiff
path: root/build/bootstrap.make
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-09-14 15:19:16 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-09-14 15:19:16 +0200
commit349178ecf6c69be63bd81ce81d310404574cb373 (patch)
treefccbd90c0cae4f43389ec830c9d7924c30c62113 /build/bootstrap.make
parent22dd2e8a904d26c18f6e4c634e14b21a8aaddc7d (diff)
Establish base build system
Diffstat (limited to 'build/bootstrap.make')
-rw-r--r--build/bootstrap.make122
1 files changed, 122 insertions, 0 deletions
diff --git a/build/bootstrap.make b/build/bootstrap.make
new file mode 100644
index 0000000..b4f7ed8
--- /dev/null
+++ b/build/bootstrap.make
@@ -0,0 +1,122 @@
+# file : build/bootstrap.make
+# author : Boris Kolpackov <boris@codesynthesis.com>
+# copyright : Copyright (c) 2009-2010 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
+
+# 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
+$(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)