Makefile.am 8.3 KB
Newer Older
1
2
3
4
5
# Ganeti makefile
# - Indent with tabs only.
# - Keep files sorted; one line per file.
# - Directories in lib/ must have their own *dir variable (see hypervisor).
# - All directories must be listed DIRS.
Michael Hanselmann's avatar
Michael Hanselmann committed
6
# - Use autogen.sh to generate Makefile.in and configure script.
7
8
9
10
11

# Automake doesn't export these variables before version 1.10.
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@

12
ACLOCAL_AMFLAGS = -I autotools
13
DOCBOOK_WRAPPER = $(top_srcdir)/autotools/docbook-wrapper
Michael Hanselmann's avatar
Michael Hanselmann committed
14
BUILD_RAPI_RESOURCE_DOC = $(top_srcdir)/doc/build-rapi-resources-doc
15
16
17
REPLACE_VARS_SED = autotools/replace_vars.sed

hypervisordir = $(pkgpythondir)/hypervisor
18
rapidir = $(pkgpythondir)/rapi
19
20
21
22
23
24
25
26
27
28
29
toolsdir = $(pkglibdir)/tools
docdir = $(datadir)/doc/$(PACKAGE)

DIRS = \
	autotools \
	daemons \
	devel \
	doc \
	doc/examples \
	lib \
	lib/hypervisor \
30
	lib/rapi \
31
32
33
34
35
36
37
38
39
40
41
42
43
	man \
	qa \
	scripts \
	test \
	test/data \
	tools

CLEANFILES = \
	autotools/replace_vars.sed \
	devel/upload \
	doc/*.html \
	doc/*.in \
	doc/*.pdf \
Michael Hanselmann's avatar
Michael Hanselmann committed
44
	doc/rapi-resources.sgml \
45
46
47
48
	doc/examples/ganeti.initd \
	doc/examples/ganeti.cron \
	lib/*.py[co] \
	lib/hypervisor/*.py[co] \
49
	lib/rapi/*.py[co] \
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
	man/*.[78] \
	man/*.in \
	qa/*.py[co] \
	test/*.py[co] \
	stamp-directories \
	$(nodist_pkgpython_PYTHON)

nodist_pkgpython_PYTHON = \
	lib/_autoconf.py

pkgpython_PYTHON = \
	lib/__init__.py \
	lib/backend.py \
	lib/bdev.py \
	lib/bootstrap.py \
	lib/cli.py \
	lib/cmdlib.py \
	lib/config.py \
	lib/constants.py \
69
	lib/daemon.py \
70
	lib/errors.py \
71
	lib/http.py \
72
	lib/jqueue.py \
73
	lib/jstore.py \
74
75
76
77
78
79
80
81
82
	lib/locking.py \
	lib/luxi.py \
	lib/mcpu.py \
	lib/objects.py \
	lib/opcodes.py \
	lib/rpc.py \
	lib/serializer.py \
	lib/ssconf.py \
	lib/ssh.py \
83
84
	lib/utils.py \
	lib/workerpool.py
85
86
87
88
89

hypervisor_PYTHON = \
	lib/hypervisor/__init__.py \
	lib/hypervisor/hv_base.py \
	lib/hypervisor/hv_fake.py \
Guido Trotter's avatar
Guido Trotter committed
90
	lib/hypervisor/hv_kvm.py \
91
92
	lib/hypervisor/hv_xen.py

93
94
rapi_PYTHON = \
	lib/rapi/__init__.py \
95
96
97
98
	lib/rapi/baserlib.py \
	lib/rapi/connector.py \
	lib/rapi/rlib1.py \
	lib/rapi/rlib2.py
99
100


101
102
103
104
docsgml = \
	doc/hooks.sgml \
	doc/install.sgml \
	doc/admin.sgml \
105
	doc/rapi.sgml \
106
107
	doc/iallocator.sgml

Michael Hanselmann's avatar
Michael Hanselmann committed
108
docrst = \
109
	doc/design-2.0-cluster-parameters.rst \
Michael Hanselmann's avatar
Michael Hanselmann committed
110
111
112
113
114
	doc/design-2.0-commandline-parameters.rst \
	doc/design-2.0-disk-handling.rst \
	doc/design-2.0-index.rst \
	doc/design-2.0-job-queue.rst \
	doc/design-2.0-locking.rst \
Oleksiy Mishchenko's avatar
Oleksiy Mishchenko committed
115
	doc/design-2.0-master-daemon.rst \
116
	doc/design-2.0-os-interface.rst \
117
118
	doc/design-2.0-rapi-changes.rst \
	doc/security.rst
Michael Hanselmann's avatar
Michael Hanselmann committed
119

120
doc_DATA = \
Michael Hanselmann's avatar
Michael Hanselmann committed
121
	$(patsubst %.rst,%.html,$(docrst)) \
122
123
124
125
126
127
128
	$(patsubst %.sgml,%.html,$(docsgml)) \
	$(patsubst %.sgml,%.pdf,$(docsgml))

dist_sbin_SCRIPTS = \
	daemons/ganeti-noded \
	daemons/ganeti-watcher \
	daemons/ganeti-masterd \
129
	daemons/ganeti-rapi \
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
	scripts/gnt-backup \
	scripts/gnt-cluster \
	scripts/gnt-debug \
	scripts/gnt-instance \
	scripts/gnt-job \
	scripts/gnt-node \
	scripts/gnt-os

dist_tools_SCRIPTS = \
	tools/burnin \
	tools/cfgshell \
	tools/cfgupgrade \
	tools/lvmstrap

EXTRA_DIST = \
	NEWS \
	DEVNOTES \
	autotools/docbook-wrapper \
	devel/upload.in \
Michael Hanselmann's avatar
Michael Hanselmann committed
149
	$(docrst) \
150
	$(docsgml) \
151
	doc/build-rapi-resources-doc \
152
153
154
	doc/examples/ganeti.initd.in \
	doc/examples/ganeti.cron.in \
	doc/examples/dumb-allocator \
155
	doc/locking.txt \
156
157
158
159
160
161
162
	test/testutils.py \
	test/mocks.py \
	$(dist_TESTS) \
	$(TEST_FILES) \
	man/footer.sgml \
	$(mansgml) \
	qa/ganeti-qa.py \
Michael Hanselmann's avatar
Michael Hanselmann committed
163
	qa/qa-sample.json \
164
165
166
167
168
169
170
171
	qa/qa_cluster.py \
	qa/qa_config.py \
	qa/qa_daemon.py \
	qa/qa_env.py \
	qa/qa_error.py \
	qa/qa_instance.py \
	qa/qa_node.py \
	qa/qa_os.py \
Oleksiy Mishchenko's avatar
Oleksiy Mishchenko committed
172
	qa/qa_rapi.py \
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
	qa/qa_tags.py \
	qa/qa_utils.py

man_MANS = \
	man/ganeti.7 \
	man/ganeti-noded.8 \
	man/ganeti-os-interface.7 \
	man/ganeti-watcher.8 \
	man/gnt-backup.8 \
	man/gnt-cluster.8 \
	man/gnt-instance.8 \
	man/gnt-node.8 \
	man/gnt-os.8

maninput = $(patsubst %.7,%.in,$(patsubst %.8,%.in,$(man_MANS)))
mansgml = $(patsubst %.in,%.sgml,$(maninput))

TEST_FILES = \
	test/data/bdev-both.txt \
	test/data/bdev-disk.txt \
	test/data/bdev-net.txt \
	test/data/proc_drbd8.txt

dist_TESTS = \
	test/ganeti.config_unittest.py \
	test/ganeti.hooks_unittest.py \
	test/ganeti.utils_unittest.py \
	test/ganeti.bdev_unittest.py \
	test/ganeti.ssh_unittest.py \
	test/ganeti.locking_unittest.py \
203
	test/ganeti.serializer_unittest.py \
204
	test/ganeti.workerpool_unittest.py \
205
	test/ganeti.rapi.resources_unittest.py \
206
	test/ganeti.http_unittest.py \
207
208
	test/ganeti.constants_unittest.py \
	test/ganeti.cli_unittest.py
209
210
211
212
213
214
215

nodist_TESTS =

TESTS = $(dist_TESTS) $(nodist_TESTS)

TESTS_ENVIRONMENT = PYTHONPATH=.:$(top_builddir)

216

217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
all-local: stamp-directories lib/_autoconf.py devel/upload \
	doc/examples/ganeti.initd doc/examples/ganeti.cron

devel/upload: devel/upload.in stamp-directories $(REPLACE_VARS_SED)
	sed -f $(REPLACE_VARS_SED) < $< > $@
	chmod u+x $@

doc/examples/ganeti.%: doc/examples/ganeti.%.in stamp-directories \
		$(REPLACE_VARS_SED)
	sed -f $(REPLACE_VARS_SED) < $< > $@

doc/%.in: doc/%.sgml stamp-directories $(REPLACE_VARS_SED)
	sed -f $(REPLACE_VARS_SED) < $< > $@

man/%.in: man/%.sgml stamp-directories $(REPLACE_VARS_SED)
	sed -f $(REPLACE_VARS_SED) < $< > $@

doc/%.pdf: doc/%.in $(DOCBOOK_WRAPPER)
235
	$(DOCBOOK_WRAPPER) "$(DOCBOOK2PDF)" $< $@
236
237

doc/%.html: doc/%.in $(DOCBOOK_WRAPPER)
238
	$(DOCBOOK_WRAPPER) "$(DOCBOOK2HTML) --nochunks" $< $@
239

Michael Hanselmann's avatar
Michael Hanselmann committed
240
241
242
doc/%.html: doc/%.rst
	$(RST2HTML) $< $@

243
doc/rapi.pdf doc/rapi.html doc/rapi.in: doc/rapi-resources.sgml
244

245
doc/rapi-resources.sgml: $(BUILD_RAPI_RESOURCE_DOC) lib/rapi/connector.py
Michael Hanselmann's avatar
Michael Hanselmann committed
246
	PYTHONPATH=.:$(top_builddir) $(BUILD_RAPI_RESOURCE_DOC) > $@ || rm -f $@
247

248
man/%.7: man/%.in man/footer.sgml $(DOCBOOK_WRAPPER)
249
	$(DOCBOOK_WRAPPER) "$(DOCBOOK2MAN)" $< $@
250
251

man/%.8: man/%.in man/footer.sgml $(DOCBOOK_WRAPPER)
252
	$(DOCBOOK_WRAPPER) "$(DOCBOOK2MAN)" $< $@
253
254
255

man/footer.sgml $(TESTS): srclinks

Michael Hanselmann's avatar
Michael Hanselmann committed
256
$(TESTS) $(BUILD_RAPI_RESOURCE_DOC): ganeti lib/_autoconf.py
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276

lib/_autoconf.py: Makefile stamp-directories
	set -e; \
	{ echo '# This file is automatically generated, do not edit!'; \
	  echo '#'; \
	  echo "PACKAGE_VERSION = '$(PACKAGE_VERSION)'"; \
	  echo "VERSION_MAJOR = '$(VERSION_MAJOR)'"; \
	  echo "VERSION_MINOR = '$(VERSION_MINOR)'"; \
	  echo "VERSION_REVISION = '$(VERSION_REVISION)'"; \
	  echo "VERSION_SUFFIX = '$(VERSION_SUFFIX)'"; \
	  echo "VERSION_FULL = '$(VERSION_FULL)'"; \
	  echo "LOCALSTATEDIR = '$(localstatedir)'"; \
	  echo "SYSCONFDIR = '$(sysconfdir)'"; \
	  echo "SSH_INITD_SCRIPT = '$(SSH_INITD_SCRIPT)'"; \
	  echo "EXPORT_DIR = '$(EXPORT_DIR)'"; \
	  echo "OS_SEARCH_PATH = [$(OS_SEARCH_PATH)]"; \
	  echo "XEN_KERNEL = '$(XEN_KERNEL)'"; \
	  echo "XEN_INITRD = '$(XEN_INITRD)'"; \
	  echo "FILE_STORAGE_DIR = '$(FILE_STORAGE_DIR)'"; \
	  echo "IALLOCATOR_SEARCH_PATH = [$(IALLOCATOR_SEARCH_PATH)]"; \
277
	  echo "KVM_PATH = '$(KVM_PATH)'"; \
278
279
280
281
282
283
284
285
286
287
288
289
	} > $@

$(REPLACE_VARS_SED): Makefile stamp-directories
	set -e; \
	{ echo 's#@PREFIX@#$(prefix)#g'; \
	  echo 's#@SYSCONFDIR@#$(sysconfdir)#g'; \
	  echo 's#@LOCALSTATEDIR@#$(localstatedir)#g'; \
	  echo 's#@SBINDIR@#$(sbindir)#g'; \
	  echo 's#@GANETI_VERSION@#$(PACKAGE_VERSION)#g'; \
	  echo 's#@LOCALSTATEDIR@#$(localstatedir)#g'; \
	  echo 's#@CUSTOM_XEN_KERNEL@#$(XEN_KERNEL)#g'; \
	  echo 's#@CUSTOM_XEN_INITRD@#$(XEN_INITRD)#g'; \
Michael Hanselmann's avatar
Michael Hanselmann committed
290
291
292
293
	  echo '/@INCLUDE_RAPI_RESOURCES@/ {'; \
	  echo '  r $(abs_top_builddir)/doc/rapi-resources.sgml'; \
	  echo '  d'; \
	  echo '}'; \
294
295
296
297
298
299
300
	} > $@

# We need to create symlinks because "make distcheck" will not install Python
# files when building.
#.PHONY: srclinks
srclinks: stamp-directories
	set -e; \
301
	for i in man/footer.sgml $(pkgpython_PYTHON) $(hypervisor_PYTHON) $(rapi_PYTHON); do \
302
303
304
305
		if test ! -f $$i -a -f $(abs_top_srcdir)/$$i; then \
			$(LN_S) $(abs_top_srcdir)/$$i $$i; \
		fi; \
	done
306

Michael Hanselmann's avatar
Michael Hanselmann committed
307
308
.PHONY: ganeti
ganeti:
309
	cd $(top_builddir) && test -h "$@" || { rm -f $@ && $(LN_S) lib $@; }
Michael Hanselmann's avatar
Michael Hanselmann committed
310

Iustin Pop's avatar
Iustin Pop committed
311
312
313
314
315
316
317
# a dist hook rule for catching revision control directories
distcheck-hook:
	if find $(top_distdir) | grep -F -e '.svn' -e '.git'; then \
		echo "Found revision control files in final archive" 1>&2 ; \
		exit 1; \
	fi

Iustin Pop's avatar
Iustin Pop committed
318
install-exec-local:
319
	@mkdir_p@ "$(DESTDIR)${localstatedir}/lib/ganeti" \
320
321
	  "$(DESTDIR)${localstatedir}/log/ganeti" \
	  "$(DESTDIR)${localstatedir}/run/ganeti"
322
323
324
325
326

stamp-directories: Makefile
	@mkdir_p@ $(DIRS)
	touch $@

Iustin Pop's avatar
Iustin Pop committed
327
328
329
330
331
332
333
334
335
336
337
338
339
.PHONY: apidoc
apidoc:
	test -e doc/api || mkdir doc/api
	TMPDIR=`mktemp -d ./temp-epydoc.XXXXXX` && { \
		cp -r scripts daemons lib $$TMPDIR && \
		( \
			cd $$TMPDIR && \
			mv lib ganeti && \
			epydoc --conf ../epydoc.conf \
		) ; \
		rm -rf $$TMPDIR ; \
	}

340
# vim: set noet :