Makefile.am 51.9 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 13 14 15 16
# Helper values for calling builtin functions
empty :=
space := $(empty) $(empty)
comma := ,

17 18 19
# Use bash in order to be able to use pipefail
SHELL=/bin/bash

20
ACLOCAL_AMFLAGS = -I autotools
21
BUILD_BASH_COMPLETION = $(top_srcdir)/autotools/build-bash-completion
22
RUN_IN_TEMPDIR = $(top_srcdir)/autotools/run-in-tempdir
23
CHECK_PYTHON_CODE = $(top_srcdir)/autotools/check-python-code
24
CHECK_HEADER = $(top_srcdir)/autotools/check-header
Iustin Pop's avatar
Iustin Pop committed
25
CHECK_MAN_DASHES = $(top_srcdir)/autotools/check-man-dashes
26
CHECK_MAN_WARNINGS = $(top_srcdir)/autotools/check-man-warnings
27
CHECK_VERSION = $(top_srcdir)/autotools/check-version
28
CHECK_NEWS = $(top_srcdir)/autotools/check-news
29
CHECK_IMPORTS = $(top_srcdir)/autotools/check-imports
30
DOCPP = $(top_srcdir)/autotools/docpp
31
REPLACE_VARS_SED = autotools/replace_vars.sed
32
CONVERT_CONSTANTS = $(top_srcdir)/autotools/convert-constants
33
BUILD_RPC = $(top_srcdir)/autotools/build-rpc
34
SHELL_ENV_INIT = autotools/shell-env-init
35

36 37
# Note: these are automake-specific variables, and must be named after
# the directory + 'dir' suffix
38
clientdir = $(pkgpythondir)/client
39
hypervisordir = $(pkgpythondir)/hypervisor
40
httpdir = $(pkgpythondir)/http
Michael Hanselmann's avatar
Michael Hanselmann committed
41
masterddir = $(pkgpythondir)/masterd
Guido Trotter's avatar
Guido Trotter committed
42
confddir = $(pkgpythondir)/confd
43
rapidir = $(pkgpythondir)/rapi
44
serverdir = $(pkgpythondir)/server
45
watcherdir = $(pkgpythondir)/watcher
46
impexpddir = $(pkgpythondir)/impexpd
47
utilsdir = $(pkgpythondir)/utils
48
toolsdir = $(pkglibdir)/tools
49
iallocatorsdir = $(pkglibdir)/iallocators
50
pytoolsdir = $(pkgpythondir)/tools
51
docdir = $(datadir)/doc/$(PACKAGE)
52
myexeclibdir = $(pkglibdir)
53

54 55 56
# Delete output file if an error occurred while building it
.DELETE_ON_ERROR:

57
HS_DIRS = \
Iustin Pop's avatar
Iustin Pop committed
58 59 60 61 62 63 64 65 66 67
	src \
	src/Ganeti \
	src/Ganeti/Block \
	src/Ganeti/Block/Drbd \
	src/Ganeti/Confd \
	src/Ganeti/DataCollectors \
	src/Ganeti/HTools \
	src/Ganeti/HTools/Backend \
	src/Ganeti/HTools/Program \
	src/Ganeti/Query \
Iustin Pop's avatar
Iustin Pop committed
68 69
	htest \
	htest/Test \
70
	htest/Test/Ganeti \
Michele Tartara's avatar
Michele Tartara committed
71 72
	htest/Test/Ganeti/Block \
	htest/Test/Ganeti/Block/Drbd \
73
	htest/Test/Ganeti/Confd \
74
	htest/Test/Ganeti/HTools \
75
	htest/Test/Ganeti/HTools/Backend \
76
	htest/Test/Ganeti/Query
77

78
DIRS = \
79
	$(HS_DIRS) \
80 81 82 83 84
	autotools \
	daemons \
	devel \
	doc \
	doc/examples \
85
	doc/examples/gnt-debug \
Iustin Pop's avatar
Iustin Pop committed
86 87 88 89
	doc/examples/hooks \
	htest/data \
	htest/data/rapi \
	htest/shelltests \
90
	lib \
91
	lib/build \
Iustin Pop's avatar
Iustin Pop committed
92
	lib/client \
93
	lib/confd \
94
	lib/http \
95
	lib/hypervisor \
96
	lib/impexpd \
Michael Hanselmann's avatar
Michael Hanselmann committed
97
	lib/masterd \
98
	lib/rapi \
99
	lib/server \
100
	lib/tools \
101
	lib/utils \
102
	lib/watcher \
103 104 105 106
	man \
	qa \
	test \
	test/data \
Agata Murawska's avatar
Agata Murawska committed
107
	test/data/ovfdata \
Agata Murawska's avatar
Agata Murawska committed
108
	test/data/ovfdata/other \
109 110
	tools

111
ALL_APIDOC_HS_DIRS = \
112
	$(APIDOC_HS_DIR) \
Iustin Pop's avatar
Iustin Pop committed
113
	$(APIDOC_HS_DIR)/Ganeti \
114 115
	$(APIDOC_HS_DIR)/Ganeti/Block \
	$(APIDOC_HS_DIR)/Ganeti/Block/Drbd \
Iustin Pop's avatar
Iustin Pop committed
116
	$(APIDOC_HS_DIR)/Ganeti/Confd \
117
	$(APIDOC_HS_DIR)/Ganeti/DataCollectors \
Iustin Pop's avatar
Iustin Pop committed
118
	$(APIDOC_HS_DIR)/Ganeti/HTools \
119
	$(APIDOC_HS_DIR)/Ganeti/HTools/Backend \
120
	$(APIDOC_HS_DIR)/Ganeti/HTools/Program \
Iustin Pop's avatar
Iustin Pop committed
121
	$(APIDOC_HS_DIR)/Ganeti/Query
122 123 124 125 126

BUILDTIME_DIR_AUTOCREATE = \
	scripts \
	$(APIDOC_DIR) \
	$(ALL_APIDOC_HS_DIRS) \
Iustin Pop's avatar
Iustin Pop committed
127
	$(APIDOC_PY_DIR) \
128 129
	$(COVERAGE_DIR) \
	$(COVERAGE_HS_DIR) \
Iustin Pop's avatar
Iustin Pop committed
130
	$(COVERAGE_PY_DIR) \
131
	.hpc
132 133 134

BUILDTIME_DIRS = \
	$(BUILDTIME_DIR_AUTOCREATE) \
135 136 137 138 139
	doc/html

DIRCHECK_EXCLUDE = \
	$(BUILDTIME_DIRS) \
	ganeti-[0-9]*.[0-9]*.[0-9]* \
Iustin Pop's avatar
Iustin Pop committed
140 141
	doc/html/_* \
	autom4te.cache
142

143 144 145 146 147 148 149 150
# some helper vars
COVERAGE_DIR = doc/coverage
COVERAGE_PY_DIR = $(COVERAGE_DIR)/py
COVERAGE_HS_DIR = $(COVERAGE_DIR)/hs
APIDOC_DIR = doc/api
APIDOC_PY_DIR = $(APIDOC_DIR)/py
APIDOC_HS_DIR = $(APIDOC_DIR)/hs

Iustin Pop's avatar
Iustin Pop committed
151
MAINTAINERCLEANFILES = \
152
	$(docpng) \
153
	$(maninput) \
154
	doc/install-quick.rst \
155
	doc/news.rst \
156
	doc/upgrade.rst \
157
	vcs-version
Iustin Pop's avatar
Iustin Pop committed
158

159
maintainer-clean-local:
160
	rm -rf $(BUILDTIME_DIRS)
161

162
CLEANFILES = \
163
	$(addsuffix /*.py[co],$(DIRS)) \
164 165
	$(addsuffix /*.hi,$(HS_DIRS)) \
	$(addsuffix /*.o,$(HS_DIRS)) \
166
	$(PYTHON_BOOTSTRAP) \
167
	epydoc.conf \
Iustin Pop's avatar
Iustin Pop committed
168
	$(REPLACE_VARS_SED) \
169
	$(SHELL_ENV_INIT) \
170
	daemons/daemon-util \
171
	daemons/ganeti-cleaner \
172
	$(BUILT_EXAMPLES) \
173
	doc/examples/bash_completion \
174
	doc/examples/bash_completion-debug \
175
	lib/_generated_rpc.py \
Iustin Pop's avatar
Iustin Pop committed
176 177
	$(man_MANS) \
	$(manhtml) \
178
	tools/kvm-ifup \
179
	tools/vcluster-setup \
180
	stamp-directories \
181
	stamp-srclinks \
182
	$(nodist_pkgpython_PYTHON) \
183
	$(HS_ALL_PROGS) $(HS_BUILT_SRCS) \
184
	$(HS_BUILT_TEST_HELPERS) \
Iustin Pop's avatar
Iustin Pop committed
185 186
	src/ganeti-confd \
	.hpc/*.mix src/*.tix htest/*.tix \
187
	doc/hs-lint.html
188

Iustin Pop's avatar
Iustin Pop committed
189
GENERATED_FILES = \
Iustin Pop's avatar
Iustin Pop committed
190
	$(built_base_sources) \
191 192 193
	$(BUILT_PYTHON_SOURCES) \
	$(PYTHON_BOOTSTRAP)

194
HS_GENERATED_FILES =
195
if WANT_HTOOLS
196
HS_GENERATED_FILES += $(HS_PROGS)
197
if ENABLE_CONFD
198
HS_GENERATED_FILES += src/hconfd src/ganeti-confd
199 200 201
endif
endif

202
built_base_sources = \
203 204
	stamp-directories \
	stamp-srclinks
205

206
built_python_base_sources = \
207
	lib/_autoconf.py \
208 209 210 211
	lib/_vcsversion.py

BUILT_PYTHON_SOURCES = \
	$(built_python_base_sources) \
212
	lib/_generated_rpc.py
213

Iustin Pop's avatar
Iustin Pop committed
214 215
# Generating the RPC wrappers depends on many things, so make sure
# it's built at the end of the built sources
216 217
lib/_generated_rpc.py: | $(built_base_sources) $(built_python_base_sources)

218 219 220 221 222
# these are all built from the underlying %.in sources
BUILT_EXAMPLES = \
	doc/examples/ganeti-kvm-poweroff.initd \
	doc/examples/ganeti.cron \
	doc/examples/ganeti.initd \
223
	doc/examples/ganeti-master-role.ocf \
224
	doc/examples/ganeti-node-role.ocf \
225 226 227
	doc/examples/gnt-config-backup \
	doc/examples/hooks/ipsec

228 229 230
nodist_pkgpython_PYTHON = \
	$(BUILT_PYTHON_SOURCES)

231
noinst_PYTHON = \
Michael Hanselmann's avatar
Michael Hanselmann committed
232
	lib/build/__init__.py \
Iustin Pop's avatar
Iustin Pop committed
233 234
	lib/build/shell_example_lexer.py \
	lib/build/sphinx_ext.py
235

236 237
pkgpython_PYTHON = \
	lib/__init__.py \
Guido Trotter's avatar
Guido Trotter committed
238
	lib/asyncnotifier.py \
239 240 241 242 243
	lib/backend.py \
	lib/bdev.py \
	lib/bootstrap.py \
	lib/cli.py \
	lib/cmdlib.py \
244
	lib/compat.py \
245 246
	lib/config.py \
	lib/constants.py \
247
	lib/daemon.py \
248
	lib/errors.py \
249
	lib/ht.py \
250
	lib/jqueue.py \
251
	lib/jstore.py \
252 253 254
	lib/locking.py \
	lib/luxi.py \
	lib/mcpu.py \
255
	lib/netutils.py \
256
	lib/objects.py \
257
	lib/objectutils.py \
258
	lib/opcodes.py \
259
	lib/ovf.py \
260
	lib/pathutils.py \
261
	lib/qlang.py \
262
	lib/query.py \
263
	lib/rpc.py \
264
	lib/rpc_defs.py \
265
	lib/runtime.py \
266 267 268
	lib/serializer.py \
	lib/ssconf.py \
	lib/ssh.py \
269
	lib/storage.py \
270
	lib/uidpool.py \
271
	lib/vcluster.py \
272
	lib/network.py \
273
	lib/workerpool.py
274

275
client_PYTHON = \
276
	lib/client/__init__.py \
277
	lib/client/gnt_backup.py \
278
	lib/client/gnt_cluster.py \
279
	lib/client/gnt_debug.py \
280
	lib/client/gnt_group.py \
281
	lib/client/gnt_instance.py \
282
	lib/client/gnt_job.py \
283
	lib/client/gnt_node.py \
284
	lib/client/gnt_network.py \
285 286
	lib/client/gnt_os.py \
	lib/client/gnt_storage.py
287

288 289 290
hypervisor_PYTHON = \
	lib/hypervisor/__init__.py \
	lib/hypervisor/hv_base.py \
291
	lib/hypervisor/hv_chroot.py \
292
	lib/hypervisor/hv_fake.py \
Guido Trotter's avatar
Guido Trotter committed
293
	lib/hypervisor/hv_kvm.py \
Iustin Pop's avatar
Iustin Pop committed
294
	lib/hypervisor/hv_lxc.py \
295 296
	lib/hypervisor/hv_xen.py

297 298
rapi_PYTHON = \
	lib/rapi/__init__.py \
299
	lib/rapi/baserlib.py \
David Knowles's avatar
David Knowles committed
300
	lib/rapi/client.py \
301
	lib/rapi/client_utils.py \
302
	lib/rapi/connector.py \
303 304
	lib/rapi/rlib2.py \
	lib/rapi/testutils.py
305

306
http_PYTHON = \
307
	lib/http/__init__.py \
308
	lib/http/auth.py \
309 310
	lib/http/client.py \
	lib/http/server.py
311

Guido Trotter's avatar
Guido Trotter committed
312
confd_PYTHON = \
Guido Trotter's avatar
Guido Trotter committed
313
	lib/confd/__init__.py \
314
	lib/confd/client.py
315

Michael Hanselmann's avatar
Michael Hanselmann committed
316
masterd_PYTHON = \
317
	lib/masterd/__init__.py \
René Nussbaumer's avatar
René Nussbaumer committed
318
	lib/masterd/iallocator.py \
319
	lib/masterd/instance.py
Michael Hanselmann's avatar
Michael Hanselmann committed
320

321 322 323
impexpd_PYTHON = \
	lib/impexpd/__init__.py

324
watcher_PYTHON = \
325
	lib/watcher/__init__.py \
326 327
	lib/watcher/nodemaint.py \
	lib/watcher/state.py
328

329
server_PYTHON = \
330
	lib/server/__init__.py \
331
	lib/server/masterd.py \
332 333
	lib/server/noded.py \
	lib/server/rapi.py
334

335 336
pytools_PYTHON = \
	lib/tools/__init__.py \
337
	lib/tools/ensure_dirs.py \
Michael Hanselmann's avatar
Michael Hanselmann committed
338
	lib/tools/node_cleanup.py \
339
	lib/tools/node_daemon_setup.py \
340
	lib/tools/prepare_node_join.py
341

342
utils_PYTHON = \
343
	lib/utils/__init__.py \
344
	lib/utils/algo.py \
345
	lib/utils/filelock.py \
346
	lib/utils/hash.py \
347
	lib/utils/io.py \
348
	lib/utils/log.py \
349
	lib/utils/lvm.py \
350
	lib/utils/mlock.py \
351
	lib/utils/nodesetup.py \
352
	lib/utils/process.py \
353
	lib/utils/retry.py \
354
	lib/utils/text.py \
355 356
	lib/utils/wrapper.py \
	lib/utils/x509.py
357

Michael Hanselmann's avatar
Michael Hanselmann committed
358
docrst = \
359
	doc/admin.rst \
Iustin Pop's avatar
Iustin Pop committed
360
	doc/cluster-merge.rst \
361
	doc/design-2.0.rst \
362
	doc/design-2.1.rst \
363
	doc/design-2.2.rst \
Guido Trotter's avatar
Guido Trotter committed
364
	doc/design-2.3.rst \
365
	doc/design-2.4.rst \
366
	doc/design-2.5.rst \
367
	doc/design-2.6.rst \
368
	doc/design-2.7.rst \
Iustin Pop's avatar
Iustin Pop committed
369 370 371
	doc/design-autorepair.rst \
	doc/design-bulk-create.rst \
	doc/design-chained-jobs.rst \
Tsachy Shacham's avatar
Tsachy Shacham committed
372
	doc/design-cpu-pinning.rst \
Iustin Pop's avatar
Iustin Pop committed
373 374
	doc/design-draft.rst \
	doc/design-htools-2.3.rst \
375
	doc/design-http-server.rst \
376
	doc/design-impexp2.rst \
377
	doc/design-lu-generated-jobs.rst \
378
	doc/design-linuxha.rst \
379
	doc/design-multi-reloc.rst \
380
	doc/design-network.rst \
381
	doc/design-node-add.rst \
Iustin Pop's avatar
Iustin Pop committed
382
	doc/design-oob.rst \
383
	doc/design-ovf-support.rst \
384
	doc/design-opportunistic-locking.rst \
Iustin Pop's avatar
Iustin Pop committed
385 386 387
	doc/design-partitioned.rst \
	doc/design-query-splitting.rst \
	doc/design-query2.rst \
388
	doc/design-remote-commands.rst \
389
	doc/design-resource-model.rst \
390
	doc/design-shared-storage.rst \
391
	doc/design-monitoring-agent.rst \
392
	doc/design-virtual-clusters.rst \
Iustin Pop's avatar
Iustin Pop committed
393
	doc/design-x509-ca.rst \
394
	doc/devnotes.rst \
395
	doc/glossary.rst \
396
	doc/hooks.rst \
397
	doc/iallocator.rst \
398
	doc/index.rst \
399
	doc/install-quick.rst \
400
	doc/install.rst \
401
	doc/locking.rst \
402
	doc/move-instance.rst \
Iustin Pop's avatar
Iustin Pop committed
403
	doc/news.rst \
404
	doc/ovfconverter.rst \
405
	doc/rapi.rst \
406
	doc/security.rst \
407
	doc/upgrade.rst \
408
	doc/virtual-cluster.rst \
Iustin Pop's avatar
Iustin Pop committed
409
	doc/walkthrough.rst
Michael Hanselmann's avatar
Michael Hanselmann committed
410

Iustin Pop's avatar
Iustin Pop committed
411
HS_PROGS = src/htools src/mon-collector
Guido Trotter's avatar
Guido Trotter committed
412
HS_BIN_ROLES = hbal hscan hspace hinfo hcheck hroller
413
HS_HTOOLS_PROGS = $(HS_BIN_ROLES) hail
414

415 416 417
HS_ALL_PROGS = \
	$(HS_PROGS) \
	htest/hpc-htools \
418
	htest/hpc-mon-collector \
419
	htest/test \
Iustin Pop's avatar
Iustin Pop committed
420 421
	src/hconfd \
	src/rpc-test
422

423
HS_PROG_SRCS = $(patsubst %,%.hs,$(HS_ALL_PROGS))
424
HS_BUILT_TEST_HELPERS = $(HS_BIN_ROLES:%=htest/%) htest/hail
425

426
HFLAGS = \
Iustin Pop's avatar
Iustin Pop committed
427
	-O -Wall -Werror -isrc \
428 429 430 431
	-fwarn-monomorphism-restriction \
	-fwarn-tabs \
	$(GHC_BYVERSION_FLAGS)

432
# extra flags that can be overriden on the command line (e.g. -Wwarn, etc.)
433
HEXTRA =
Iustin Pop's avatar
Iustin Pop committed
434
# internal extra flags (used for htest/test mainly)
435
HEXTRA_INT =
436
# exclude options for coverage reports
437
HPCEXCL = --exclude Main \
438
	--exclude Ganeti.Constants \
439
	--exclude Ganeti.HTools.QC \
Iustin Pop's avatar
Iustin Pop committed
440
	--exclude Ganeti.THH \
441
	--exclude Ganeti.Version \
442
	--exclude Test.Ganeti.Attoparsec \
443
	--exclude Test.Ganeti.TestCommon \
444 445
	--exclude Test.Ganeti.TestHTools \
	--exclude Test.Ganeti.TestHelper \
446
	--exclude Test.Ganeti.TestImports \
Iustin Pop's avatar
Iustin Pop committed
447
	$(patsubst src.%,--exclude Test.%,$(subst /,.,$(patsubst %.hs,%, $(HS_LIB_SRCS))))
448

449
HS_LIB_SRCS = \
Iustin Pop's avatar
Iustin Pop committed
450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514
	src/Ganeti/Block/Drbd/Types.hs \
	src/Ganeti/Block/Drbd/Parser.hs \
	src/Ganeti/BasicTypes.hs \
	src/Ganeti/Common.hs \
	src/Ganeti/Compat.hs \
	src/Ganeti/Confd/Client.hs \
	src/Ganeti/Confd/Server.hs \
	src/Ganeti/Confd/Types.hs \
	src/Ganeti/Confd/Utils.hs \
	src/Ganeti/Config.hs \
	src/Ganeti/Daemon.hs \
	src/Ganeti/DataCollectors/CLI.hs \
	src/Ganeti/DataCollectors/Drbd.hs \
	src/Ganeti/DataCollectors/Program.hs \
	src/Ganeti/Errors.hs \
	src/Ganeti/HTools/Backend/IAlloc.hs \
	src/Ganeti/HTools/Backend/Luxi.hs \
	src/Ganeti/HTools/Backend/Rapi.hs \
	src/Ganeti/HTools/Backend/Simu.hs \
	src/Ganeti/HTools/Backend/Text.hs \
	src/Ganeti/HTools/CLI.hs \
	src/Ganeti/HTools/Cluster.hs \
	src/Ganeti/HTools/Container.hs \
	src/Ganeti/HTools/ExtLoader.hs \
	src/Ganeti/HTools/Graph.hs \
	src/Ganeti/HTools/Group.hs \
	src/Ganeti/HTools/Instance.hs \
	src/Ganeti/HTools/Loader.hs \
	src/Ganeti/HTools/Node.hs \
	src/Ganeti/HTools/PeerMap.hs \
	src/Ganeti/HTools/Program.hs \
	src/Ganeti/HTools/Program/Hail.hs \
	src/Ganeti/HTools/Program/Hbal.hs \
	src/Ganeti/HTools/Program/Hcheck.hs \
	src/Ganeti/HTools/Program/Hinfo.hs \
	src/Ganeti/HTools/Program/Hscan.hs \
	src/Ganeti/HTools/Program/Hspace.hs \
	src/Ganeti/HTools/Program/Hroller.hs \
	src/Ganeti/HTools/Types.hs \
	src/Ganeti/Hash.hs \
	src/Ganeti/JQueue.hs \
	src/Ganeti/JSON.hs \
	src/Ganeti/Jobs.hs \
	src/Ganeti/Logging.hs \
	src/Ganeti/Luxi.hs \
	src/Ganeti/Network.hs \
	src/Ganeti/Objects.hs \
	src/Ganeti/OpCodes.hs \
	src/Ganeti/OpParams.hs \
	src/Ganeti/Path.hs \
	src/Ganeti/Query/Common.hs \
	src/Ganeti/Query/Filter.hs \
	src/Ganeti/Query/Group.hs \
	src/Ganeti/Query/Job.hs \
	src/Ganeti/Query/Language.hs \
	src/Ganeti/Query/Node.hs \
	src/Ganeti/Query/Query.hs \
	src/Ganeti/Query/Server.hs \
	src/Ganeti/Query/Types.hs \
	src/Ganeti/Rpc.hs \
	src/Ganeti/Runtime.hs \
	src/Ganeti/Ssconf.hs \
	src/Ganeti/THH.hs \
	src/Ganeti/Types.hs \
	src/Ganeti/Utils.hs
515 516

HS_TEST_SRCS = \
517
	htest/Test/Ganeti/Attoparsec.hs \
518
	htest/Test/Ganeti/BasicTypes.hs \
Michele Tartara's avatar
Michele Tartara committed
519
	htest/Test/Ganeti/Block/Drbd/Parser.hs \
520
	htest/Test/Ganeti/Block/Drbd/Types.hs \
Iustin Pop's avatar
Iustin Pop committed
521
	htest/Test/Ganeti/Common.hs \
522
	htest/Test/Ganeti/Confd/Types.hs \
Iustin Pop's avatar
Iustin Pop committed
523
	htest/Test/Ganeti/Confd/Utils.hs \
Iustin Pop's avatar
Iustin Pop committed
524
	htest/Test/Ganeti/Daemon.hs \
525
	htest/Test/Ganeti/Errors.hs \
526 527
	htest/Test/Ganeti/HTools/Backend/Simu.hs \
	htest/Test/Ganeti/HTools/Backend/Text.hs \
528 529 530
	htest/Test/Ganeti/HTools/CLI.hs \
	htest/Test/Ganeti/HTools/Cluster.hs \
	htest/Test/Ganeti/HTools/Container.hs \
Guido Trotter's avatar
Guido Trotter committed
531
	htest/Test/Ganeti/HTools/Graph.hs \
532 533 534 535 536
	htest/Test/Ganeti/HTools/Instance.hs \
	htest/Test/Ganeti/HTools/Loader.hs \
	htest/Test/Ganeti/HTools/Node.hs \
	htest/Test/Ganeti/HTools/PeerMap.hs \
	htest/Test/Ganeti/HTools/Types.hs \
537 538
	htest/Test/Ganeti/JSON.hs \
	htest/Test/Ganeti/Jobs.hs \
Iustin Pop's avatar
Iustin Pop committed
539
	htest/Test/Ganeti/JQueue.hs \
540
	htest/Test/Ganeti/Luxi.hs \
541
	htest/Test/Ganeti/Network.hs \
542
	htest/Test/Ganeti/Objects.hs \
543
	htest/Test/Ganeti/OpCodes.hs \
Iustin Pop's avatar
Iustin Pop committed
544
	htest/Test/Ganeti/Query/Filter.hs \
545
	htest/Test/Ganeti/Query/Language.hs \
546
	htest/Test/Ganeti/Query/Query.hs \
547
	htest/Test/Ganeti/Rpc.hs \
548
	htest/Test/Ganeti/Ssconf.hs \
549
	htest/Test/Ganeti/THH.hs \
550 551
	htest/Test/Ganeti/TestCommon.hs \
	htest/Test/Ganeti/TestHTools.hs \
552
	htest/Test/Ganeti/TestHelper.hs \
553
	htest/Test/Ganeti/Types.hs \
554
	htest/Test/Ganeti/Utils.hs
555

556
HS_LIBTEST_SRCS = $(HS_LIB_SRCS) $(HS_TEST_SRCS)
557

558 559
HS_BUILT_SRCS = \
	htest/Test/Ganeti/TestImports.hs \
Iustin Pop's avatar
Iustin Pop committed
560 561
	src/Ganeti/Constants.hs \
	src/Ganeti/Version.hs
562
HS_BUILT_SRCS_IN = $(patsubst %,%.in,$(HS_BUILT_SRCS))
563

564
$(RUN_IN_TEMPDIR): | stamp-directories
565

Iustin Pop's avatar
Iustin Pop committed
566 567 568 569 570
# Note: we use here an order-only prerequisite, as the contents of
# _autoconf.py are not actually influencing the html build output: it
# has to exist in order for the sphinx module to be loaded
# successfully, but we certainly don't want the docs to be rebuilt if
# it changes
571
doc/html/index.html: $(docrst) $(docpng) doc/conf.py configure.ac \
572 573
	$(RUN_IN_TEMPDIR) lib/build/sphinx_ext.py \
	lib/build/shell_example_lexer.py lib/opcodes.py lib/ht.py \
574
	| $(BUILT_PYTHON_SOURCES)
575 576
	@test -n "$(SPHINX)" || \
	    { echo 'sphinx-build' not found during configure; exit 1; }
577
	@mkdir_p@ $(dir $@)
578
	PYTHONPATH=. $(RUN_IN_TEMPDIR) $(SPHINX) -q -W -b html \
579
	    -d . \
580 581
	    -D version="$(VERSION_MAJOR).$(VERSION_MINOR)" \
	    -D release="$(PACKAGE_VERSION)" \
582 583 584 585
	    $(abs_top_srcdir)/doc $(CURDIR)/doc/html
	rm -f doc/html/.buildinfo doc/html/objects.inv
	touch $@

586
doc/html: doc/html/index.html
Iustin Pop's avatar
Iustin Pop committed
587

588
doc/install-quick.rst: INSTALL
589
doc/news.rst: NEWS
590
doc/upgrade.rst: UPGRADE
591

592
doc/install-quick.rst doc/news.rst doc/upgrade.rst:
593 594 595 596 597 598 599
	set -e; \
	{ echo '.. This file is automatically updated at build time from $<.'; \
	  echo '.. Do not edit.'; \
	  echo; \
	  cat $<; \
	} > $@

600
docdot = \
601 602 603
	doc/arch-2.0.dot \
	doc/design-2.1-lock-acquire.dot \
	doc/design-2.1-lock-release.dot
604

605
docpng = $(patsubst %.dot,%.png,$(docdot))
606

607 608 609 610
# Things to build but not to install (add it to EXTRA_DIST if it should be
# distributed)
noinst_DATA = \
	doc/html \
611
	$(BUILT_EXAMPLES) \
612
	doc/examples/bash_completion \
613
	doc/examples/bash_completion-debug \
614
	$(manhtml)
615

616
gnt_scripts = \
617 618 619
	scripts/gnt-backup \
	scripts/gnt-cluster \
	scripts/gnt-debug \
620
	scripts/gnt-group \
621 622
	scripts/gnt-instance \
	scripts/gnt-job \
623
	scripts/gnt-network \
624
	scripts/gnt-node \
625 626
	scripts/gnt-os \
	scripts/gnt-storage
627

628
PYTHON_BOOTSTRAP_SBIN = \
629
	daemons/ganeti-masterd \
630
	daemons/ganeti-noded \
631
	daemons/ganeti-rapi \
Iustin Pop's avatar
Iustin Pop committed
632
	daemons/ganeti-watcher \
633
	$(gnt_scripts)
634

635 636
PYTHON_BOOTSTRAP = \
	$(PYTHON_BOOTSTRAP_SBIN) \
637
	tools/ensure-dirs \
Michael Hanselmann's avatar
Michael Hanselmann committed
638
	tools/node-cleanup \
639
	tools/node-daemon-setup \
640
	tools/prepare-node-join
641

642
qa_scripts = \
643
	qa/__init__.py \
644 645 646 647 648 649
	qa/ganeti-qa.py \
	qa/qa_cluster.py \
	qa/qa_config.py \
	qa/qa_daemon.py \
	qa/qa_env.py \
	qa/qa_error.py \
Andrea Spadaccini's avatar
Andrea Spadaccini committed
650
	qa/qa_group.py \
651
	qa/qa_instance.py \
652
	qa/qa_job.py \
653 654 655 656 657 658
	qa/qa_node.py \
	qa/qa_os.py \
	qa/qa_rapi.py \
	qa/qa_tags.py \
	qa/qa_utils.py

659 660
bin_SCRIPTS =
if WANT_HTOOLS
Iustin Pop's avatar
Iustin Pop committed
661
bin_SCRIPTS += $(filter-out src/hail,$(HS_PROGS))
662 663
install-exec-hook:
	@mkdir_p@ $(DESTDIR)$(iallocatorsdir)
664 665
# FIXME: this is a hardcoded logic, instead of auto-resolving
	$(LN_S) -f ../../../bin/htools \
Iustin Pop's avatar
Iustin Pop committed
666
	  $(DESTDIR)$(iallocatorsdir)/hail
667
	for role in $(HS_BIN_ROLES); do \
Iustin Pop's avatar
Iustin Pop committed
668
	  $(LN_S) -f htools $(DESTDIR)$(bindir)/$$role ; \
669
	done
670 671
endif

672
$(HS_ALL_PROGS): %: %.hs $(HS_LIBTEST_SRCS) $(HS_BUILT_SRCS) Makefile
673
	@if [ "$(notdir $@)" = "test" ] && [ "$(HS_NODEV)" ]; then \
674 675
	  echo "Error: cannot run unittests without the development" \
	       " libraries (see devnotes.rst)" 1>&2; \
676
	  exit 1; \
677
	fi
Iustin Pop's avatar
Iustin Pop committed
678 679
	@rm -f $(notdir $@).tix
	$(GHC) --make \
Iustin Pop's avatar
Iustin Pop committed
680
	  $(HFLAGS) \
681
	  $(HS_NOCURL) $(HS_PARALLEL3) $(HS_REGEX_PCRE) \
Iustin Pop's avatar
Iustin Pop committed
682
	  -osuf $(notdir $@).o -hisuf $(notdir $@).hi \
683
	  $(HEXTRA) $(HEXTRA_INT) $@
684 685
	@touch "$@"

Iustin Pop's avatar
Iustin Pop committed
686 687
# for the htest/test binary, we need to enable profiling/coverage
htest/test: HEXTRA_INT=-fhpc -ihtest
688

689
# we compile the hpc-htools binary with the program coverage
Iustin Pop's avatar
Iustin Pop committed
690
htest/hpc-htools: HEXTRA_INT=-fhpc
691

692 693 694
# we compile the hpc-mon-collector binary with the program coverage
htest/hpc-mon-collector: HEXTRA_INT=-fhpc

695
# test dependency
696
htest/offline-tests.sh: htest/hpc-htools htest/hpc-mon-collector
697

698 699 700 701 702 703
# rules for building profiling-enabled versions of the haskell
# programs: hs-prof does the full two-step build, whereas
# hs-prof-quick does only the final rebuild (hs-prof must have been
# run before)
.PHONY: hs-prof hs-prof-quick
hs-prof:
Iustin Pop's avatar
Iustin Pop committed
704 705 706 707
	@if [ -z "$(TARGET)" ]; then \
	  echo "You need to define TARGET when running this rule" 1>&2; \
	  exit 1; \
	fi
708
	$(MAKE) $(AM_MAKEFLAGS) clean
Iustin Pop's avatar
Iustin Pop committed
709
	$(MAKE) $(AM_MAKEFLAGS) $(TARGET) HEXTRA="-osuf o"
710
	rm -f $(HS_ALL_PROGS)
711
	$(MAKE) $(AM_MAKEFLAGS) hs-prof-quick
712 713

hs-prof-quick:
Iustin Pop's avatar
Iustin Pop committed
714 715 716 717 718
	@if [ -z "$(TARGET)" ]; then \
	  echo "You need to define TARGET when running this rule" 1>&2; \
	  exit 1; \
	fi
	$(MAKE) $(AM_MAKEFLAGS) $(TARGET) HEXTRA="-osuf prof_o -prof -auto-all"
719

720 721
dist_sbin_SCRIPTS = \
	tools/ganeti-listrunner
722

723
nodist_sbin_SCRIPTS = \
724
	$(PYTHON_BOOTSTRAP_SBIN) \
725
	daemons/ganeti-cleaner
726

727
if ENABLE_CONFD
Iustin Pop's avatar
Iustin Pop committed
728
src/ganeti-confd: src/hconfd
729 730
	cp -f $< $@

Iustin Pop's avatar
Iustin Pop committed
731
nodist_sbin_SCRIPTS += src/ganeti-confd
732 733
endif

734
python_scripts = \
735 736 737
	tools/burnin \
	tools/cfgshell \
	tools/cfgupgrade \
738
	tools/cfgupgrade12 \
739
	tools/cluster-merge \
Iustin Pop's avatar
Iustin Pop committed
740
	tools/confd-client \
741
	tools/fmtjson \
Iustin Pop's avatar
Iustin Pop committed
742
	tools/lvmstrap \
743
	tools/move-instance \
744
	tools/ovfconverter \
Michael Hanselmann's avatar
Michael Hanselmann committed
745
	tools/sanitize-config
746

747
dist_tools_SCRIPTS = \
748
	$(python_scripts) \
749
	tools/kvm-console-wrapper \
Iustin Pop's avatar
Iustin Pop committed
750
	tools/master-ip-setup \
751
	tools/xen-console-wrapper
752

Michael Hanselmann's avatar
Michael Hanselmann committed
753 754 755
nodist_tools_python_scripts = \
	tools/node-cleanup

756
nodist_tools_SCRIPTS = \
Michael Hanselmann's avatar
Michael Hanselmann committed
757
	$(nodist_tools_python_scripts) \
758 759
	tools/vcluster-setup

760
pkglib_python_scripts = \
761 762
	daemons/import-export \
	tools/check-cert-expired
763