File: common.mk

package info (click to toggle)
rabbitmq-server 2.8.4-1
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 8,928 kB
  • sloc: erlang: 52,968; python: 2,846; xml: 1,987; sh: 816; makefile: 683; perl: 86; ruby: 63
file content (141 lines) | stat: -rw-r--r-- 4,327 bytes parent folder | download
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
131
132
133
134
135
136
137
138
139
140
141
# Various global definitions

# UMBRELLA_BASE_DIR should be set to the path of the
# rabbitmq-public-umbrella directory before this file is included.

# Make version check
REQUIRED_MAKE_VERSION:=3.81
ifneq ($(shell ( echo "$(MAKE_VERSION)" ; echo "$(REQUIRED_MAKE_VERSION)" ) | sort -t. -n | head -1),$(REQUIRED_MAKE_VERSION))
$(error GNU make version $(REQUIRED_MAKE_VERSION) required)
endif

# This is the standard trick for making pattern substitution work
# (amongst others) when the replacement needs to include a comma.
COMMA:=,

# Global settings that can be overridden on the command line

# These ones are expected to be passed down to the sub-makes invoked
# for non-integrated packages
VERSION ?= 0.0.0
ERL ?= erl
ERL_OPTS ?=
ERLC ?= erlc
ERLC_OPTS ?= -Wall +debug_info
TMPDIR ?= /tmp

NODENAME ?= rabbit-test
ERL_CALL ?= erl_call
ERL_CALL_OPTS ?= -sname $(NODENAME) -e

# Where we put all the files produced when running tests.
TEST_TMPDIR=$(TMPDIR)/rabbitmq-test

# Callable functions

# Convert a package name to the corresponding erlang app name
define package_to_app_name
$(subst -,_,$(1))
endef

# If the variable named $(1) holds a non-empty value, return it.
# Otherwise, set the variable to $(2) and return that value.
define memoize
$(if $($(1)),$($(1)),$(eval $(1):=$(2))$(2))
endef

# Return a canonical form for the path in $(1)
#
# Absolute path names can be a bit verbose.  This provides a way to
# canonicalize path names with more concise results.
define canonical_path
$(call memoize,SHORT_$(realpath $(1)),$(1))
endef

# Convert a package name to a path name
define package_to_path
$(call canonical_path,$(UMBRELLA_BASE_DIR)/$(1))
endef

# Produce a cp command to copy from $(1) to $(2), unless $(1) is
# empty, in which case do nothing.
#
# The optional $(3) gives a suffix to append to the command, if a
# command is produced.
define copy
$(if $(1),cp -r $(1) $(2)$(if $(3), $(3)))
endef

# Produce the makefile fragment for the package with path in $(1), if
# it hasn't already been visited.  The path should have been
# canonicalized via canonical_path.
define do_package
# Have we already visited this package?  If so, skip it
ifndef DONE_$(1)
PACKAGE_DIR:=$(1)
include $(UMBRELLA_BASE_DIR)/do-package.mk
endif
endef

# This is used to chain test rules, so that test-all-packages works in
# the presence of 'make -j'
define chain_test
$(if $(CHAIN_TESTS),$(CHAINED_TESTS)$(eval CHAINED_TESTS+=$(1)))
endef

# Mark the non-integrated repos
NON_INTEGRATED_$(call package_to_path,rabbitmq-server):=true
NON_INTEGRATED_$(call package_to_path,rabbitmq-erlang-client):=true
NON_INTEGRATED_DEPS_$(call package_to_path,rabbitmq-erlang-client):=rabbitmq-server

# Where the coverage package lives
COVERAGE_PATH:=$(call package_to_path,coverage)

# Where the rabbitmq-server package lives
RABBITMQ_SERVER_PATH=$(call package_to_path,rabbitmq-server)

# Cleaning support
ifndef MAKECMDGOALS
TESTABLEGOALS:=$(.DEFAULT_GOAL)
else
TESTABLEGOALS:=$(MAKECMDGOALS)
endif

# The CLEANING variable can be used to determine whether the top-level
# goal is cleaning related.  In particular, it can be used to prevent
# including generated files when cleaning, which might otherwise
# trigger undesirable activity.
ifeq "$(strip $(patsubst clean%,,$(patsubst %clean,,$(TESTABLEGOALS))))" ""
CLEANING:=true
endif

# Include a generated makefile fragment
#
# Note that this includes using "-include", and thus make will proceed
# even if an error occurs while the fragment is being re-made (we
# don't use "include" becuase it will produce a superfluous error
# message when the fragment is re-made because it doesn't exist).
# Thus you should also list the fragment as a dependency of any rules
# that will refer to the contents of the fragment.
define safe_include
ifndef CLEANING
-include $(1)

# If we fail to make the fragment, make will just loop trying to
# create it.  So we have to explicitly catch that case.
$$(if $$(MAKE_RESTARTS),$$(if $$(wildcard $(1)),,$$(error Failed to produce $(1))))

endif
endef

# This is not the make default, but it is a good idea
.DELETE_ON_ERROR:

# Declarations for global targets
.PHONY: all-releasable copy-releasable copy-srcdist all-packages clean-all-packages
all-releasable::
copy-releasable::
copy-srcdist::
all-packages::
clean-all-packages::
check-xref-packages::