summaryrefslogtreecommitdiff
path: root/Makefile.in
blob: 41f249fdcae12d54dd412657aae85dcdc321c5f3 (plain)
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
#
# Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
# Copyright (C) 2004-2018 Red Hat, Inc. All rights reserved.
#
# This file is part of LVM2.
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions
# of the GNU General Public License v.2.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

srcdir = @srcdir@
top_srcdir = @top_srcdir@
top_builddir = @top_builddir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@

SUBDIRS = libdm conf daemons include lib libdaemon man scripts tools

ifeq ("@UDEV_RULES@", "yes")
  SUBDIRS += udev
endif

ifeq ("@INTL@", "yes")
  SUBDIRS += po
endif

ifeq ($(MAKECMDGOALS),clean)
  SUBDIRS += test
endif
# FIXME Should use intermediate Makefiles here!
ifeq ($(MAKECMDGOALS),distclean)
  SUBDIRS = conf include man test scripts \
    libdaemon lib tools daemons libdm \
    udev po
tools.distclean: test.distclean
endif
DISTCLEAN_DIRS += lcov_reports* autom4te.cache
DISTCLEAN_TARGETS += config.cache config.log config.status make.tmpl

include make.tmpl

include $(top_srcdir)/base/Makefile
include $(top_srcdir)/device_mapper/Makefile
include $(top_srcdir)/test/unit/Makefile

lib: include libdaemon $(BASE_TARGET) $(DEVICE_MAPPER_TARGET)
daemons: lib libdaemon tools
scripts: lib
tools: lib libdaemon
po: tools daemons
man: tools
all_man: tools
test: tools daemons
unit-test  run-unit-test: test

daemons.device-mapper: libdm.device-mapper
tools.device-mapper: libdm.device-mapper
device-mapper: tools.device-mapper daemons.device-mapper man.device-mapper
device_mapper: device-mapper

ifeq ("@INTL@", "yes")
lib.pofile: include.pofile
tools.pofile: lib.pofile
daemons.pofile: lib.pofile
po.pofile: tools.pofile daemons.pofile
pofile: po.pofile
endif

ifneq ("$(CFLOW_CMD)", "")
tools.cflow: libdm.cflow lib.cflow
daemons.cflow: tools.cflow
cflow: include.cflow
endif

CSCOPE_DIRS = base daemons device_mapper include lib libdaemon scripts tools libdm test
ifneq ("@CSCOPE_CMD@", "")
cscope.out:
	@CSCOPE_CMD@ -b -R $(patsubst %,-s%,$(addprefix $(srcdir)/,$(CSCOPE_DIRS)))
all: cscope.out
endif
DISTCLEAN_TARGETS += cscope.out
CLEAN_DIRS += autom4te.cache

check check_system check_cluster check_local check_lvmpolld check_lvmlockd_test check_lvmlockd_dlm check_lvmlockd_sanlock: test
	$(MAKE) -C test $(@)

conf.generate man.generate: tools

# how to use parenthesis in makefiles
leftparen:=(
LVM_VER := $(firstword $(subst $(leftparen), ,$(LVM_VERSION)))
VER := LVM2.$(LVM_VER)
# release file name
FILE_VER := $(VER).tgz
CLEAN_TARGETS += $(FILE_VER)
CLEAN_DIRS += $(rpmbuilddir)

dist:
	@echo "Generating $(FILE_VER)";\
	(cd $(top_srcdir); git ls-tree -r HEAD --name-only | xargs tar --transform "s,^,$(VER)/," -c) | gzip >$(FILE_VER)

rpm: dist
	$(RM) -r $(rpmbuilddir)/SOURCES
	$(MKDIR_P) $(rpmbuilddir)/SOURCES
	$(LN_S) -f $(abs_top_builddir)/$(FILE_VER) $(rpmbuilddir)/SOURCES
	$(LN_S) -f $(abs_top_srcdir)/spec/build.inc $(rpmbuilddir)/SOURCES
	$(LN_S) -f $(abs_top_srcdir)/spec/macros.inc $(rpmbuilddir)/SOURCES
	$(LN_S) -f $(abs_top_srcdir)/spec/packages.inc $(rpmbuilddir)/SOURCES
	DM_VER=$$(cut -d- -f1 $(top_srcdir)/VERSION_DM);\
	GIT_VER=$$(cd $(top_srcdir); git describe | cut -d- --output-delimiter=. -f2,3 || echo 0);\
	$(SED) -e "s,\(device_mapper_version\) [0-9.]*$$,\1 $$DM_VER," \
	    -e "s,^\(Version:[^0-9%]*\)[0-9.]*$$,\1 $(LVM_VER)," \
	    -e "s,^\(Release:[^0-9%]*\)[0-9.]\+,\1 $$GIT_VER," \
	    $(top_srcdir)/spec/source.inc >$(rpmbuilddir)/SOURCES/source.inc
	V=$(V) rpmbuild -v --define "_topdir $(rpmbuilddir)" -ba $(top_srcdir)/spec/lvm2.spec

generate: conf.generate man.generate
	$(MAKE) -C conf generate
	$(MAKE) -C man generate

all_man:
	$(MAKE) -C man all_man

install_system_dirs:
	$(INSTALL_DIR) $(DESTDIR)$(DEFAULT_SYS_DIR)
	$(INSTALL_ROOT_DIR) $(DESTDIR)$(DEFAULT_ARCHIVE_DIR)
	$(INSTALL_ROOT_DIR) $(DESTDIR)$(DEFAULT_BACKUP_DIR)
	$(INSTALL_ROOT_DIR) $(DESTDIR)$(DEFAULT_CACHE_DIR)
	$(INSTALL_ROOT_DIR) $(DESTDIR)$(DEFAULT_LOCK_DIR)
	$(INSTALL_ROOT_DIR) $(DESTDIR)$(DEFAULT_RUN_DIR)
	$(INSTALL_ROOT_DATA) /dev/null $(DESTDIR)$(DEFAULT_CACHE_DIR)/.cache

install_initscripts:
	$(MAKE) -C scripts install_initscripts

install_systemd_generators:
	$(MAKE) -C scripts install_systemd_generators
	$(MAKE) -C man install_systemd_generators

install_systemd_units:
	$(MAKE) -C scripts install_systemd_units

install_all_man:
	$(MAKE) -C man install_all_man

install_tmpfiles_configuration:
	$(MAKE) -C scripts install_tmpfiles_configuration

help:
	@echo -e "\nAvailable targets:"
	@echo "  all			Default target."
	@echo "  all_man		Build all man pages with generators."
	@echo "  clean			Remove all compile files."
	@echo "  device-mapper		Device mapper part of lvm2."
	@echo "  dist			Generate distributable file."
	@echo "  distclean		Remove all build files."
	@echo "  generate		Generate man pages for sources."
	@echo "  help			Display callable targets."
	@echo "  install		Install all files."
	@echo "  install_all_man	Install all man pages."
	@echo "  install_cluster	Install cmirrord."
	@echo "  install_device-mapper	Install device mapper files."
	@echo "  install_initscripts	Install initialization scripts."
	@echo "  install_lvm2		Install lvm2 files."
	@echo "  install_systemd_units	Install systemd units."
	@echo "  lcov			Generate lcov output."
	@echo "  lcov-dated		Generate lcov with timedate suffix."
	@echo "  lcov-reset		Reset lcov counters"
	@echo "  man			Build man pages."
	@echo "  print-VARIABLE		Resolve make variable."
	@echo "  rpm			Build rpm."
	@echo "  run-unit-test		Run unit tests."
	@echo "  tags			Generate c/etags."

ifneq ("$(LCOV)", "")
.PHONY: lcov-reset lcov lcov-dated

ifeq ($(MAKECMDGOALS),lcov-dated)
LCOV_REPORTS_DIR := lcov_reports-$(shell date +%Y%m%d%k%M%S)
lcov-dated: lcov
else
LCOV_REPORTS_DIR := lcov_reports
endif

lcov-reset:
	$(LCOV) --zerocounters --directory $(top_builddir)

ifneq ("$(GENHTML)", "")
lcov:
	$(RM) -rf $(LCOV_REPORTS_DIR)
	$(MKDIR_P) $(LCOV_REPORTS_DIR)
	$(LCOV) --capture --directory $(top_builddir) --ignore-errors source \
		--output-file $(LCOV_REPORTS_DIR)/out.info
	-test ! -s $(LCOV_REPORTS_DIR)/out.info || \
		$(GENHTML) -o $(LCOV_REPORTS_DIR) --ignore-errors source \
		$(LCOV_REPORTS_DIR)/out.info
endif

endif

ifneq ($(shell which ctags 2>/dev/null),)
.PHONY: tags
tags:
	test -z "$(shell find $(addprefix $(top_srcdir)/,$(CSCOPE_DIRS)) -type f -name '*.[ch]' -newer tags 2>/dev/null | head -1)" || $(RM) tags
	test -f tags || find $(addprefix $(top_srcdir)/,$(CSCOPE_DIRS)) -maxdepth 5 -type f -name '*.[ch]' -exec ctags -a '{}' +

CLEAN_TARGETS += tags
endif