Makefile.am 56.6 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_REFERENCES = $(top_srcdir)/autotools/check-man-references
27
CHECK_MAN_WARNINGS = $(top_srcdir)/autotools/check-man-warnings
28
CHECK_VERSION = $(top_srcdir)/autotools/check-version
29
CHECK_NEWS = $(top_srcdir)/autotools/check-news
30
CHECK_IMPORTS = $(top_srcdir)/autotools/check-imports
31
DOCPP = $(top_srcdir)/autotools/docpp
32
REPLACE_VARS_SED = autotools/replace_vars.sed
33
CONVERT_CONSTANTS = $(top_srcdir)/autotools/convert-constants
34
BUILD_RPC = $(top_srcdir)/autotools/build-rpc
35
SHELL_ENV_INIT = autotools/shell-env-init
36

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

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

58
HS_DIRS = \
Iustin Pop's avatar
Iustin Pop committed
59 60 61 62 63 64 65 66 67 68
	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 \
69 70 71 72 73 74 75 76 77
	test/hs \
	test/hs/Test \
	test/hs/Test/Ganeti \
	test/hs/Test/Ganeti/Block \
	test/hs/Test/Ganeti/Block/Drbd \
	test/hs/Test/Ganeti/Confd \
	test/hs/Test/Ganeti/HTools \
	test/hs/Test/Ganeti/HTools/Backend \
	test/hs/Test/Ganeti/Query
78

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

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

BUILDTIME_DIR_AUTOCREATE = \
	scripts \
	$(APIDOC_DIR) \
	$(ALL_APIDOC_HS_DIRS) \
Iustin Pop's avatar
Iustin Pop committed
131
	$(APIDOC_PY_DIR) \
132 133
	$(COVERAGE_DIR) \
	$(COVERAGE_HS_DIR) \
Iustin Pop's avatar
Iustin Pop committed
134
	$(COVERAGE_PY_DIR) \
135
	.hpc
136 137 138

BUILDTIME_DIRS = \
	$(BUILDTIME_DIR_AUTOCREATE) \
139 140
	doc/html \
	doc/man-html
141 142 143 144

DIRCHECK_EXCLUDE = \
	$(BUILDTIME_DIRS) \
	ganeti-[0-9]*.[0-9]*.[0-9]* \
Iustin Pop's avatar
Iustin Pop committed
145
	doc/html/_* \
146
	doc/man-html/_* \
Iustin Pop's avatar
Iustin Pop committed
147
	autom4te.cache
148

149 150 151 152 153 154 155 156
# 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
157
MAINTAINERCLEANFILES = \
158
	$(maninput) \
159
	doc/install-quick.rst \
160
	doc/news.rst \
161
	doc/upgrade.rst \
162
	vcs-version
Iustin Pop's avatar
Iustin Pop committed
163

164
maintainer-clean-local:
165
	rm -rf $(BUILDTIME_DIRS)
166

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

Iustin Pop's avatar
Iustin Pop committed
196
GENERATED_FILES = \
Iustin Pop's avatar
Iustin Pop committed
197
	$(built_base_sources) \
198 199 200
	$(BUILT_PYTHON_SOURCES) \
	$(PYTHON_BOOTSTRAP)

201
HS_GENERATED_FILES =
202
if WANT_HTOOLS
203
HS_GENERATED_FILES += $(HS_PROGS)
204
if ENABLE_CONFD
205
HS_GENERATED_FILES += src/hconfd src/ganeti-confd
206 207 208
endif
endif

209
built_base_sources = \
210 211
	stamp-directories \
	stamp-srclinks
212

213
built_python_base_sources = \
214
	lib/_autoconf.py \
215 216 217 218
	lib/_vcsversion.py

BUILT_PYTHON_SOURCES = \
	$(built_python_base_sources) \
219
	lib/_generated_rpc.py
220

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

225 226 227 228 229
# 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 \
230
	doc/examples/ganeti-master-role.ocf \
231
	doc/examples/ganeti-node-role.ocf \
232 233 234
	doc/examples/gnt-config-backup \
	doc/examples/hooks/ipsec

235 236 237
nodist_pkgpython_PYTHON = \
	$(BUILT_PYTHON_SOURCES)

238
noinst_PYTHON = \
Michael Hanselmann's avatar
Michael Hanselmann committed
239
	lib/build/__init__.py \
Iustin Pop's avatar
Iustin Pop committed
240 241
	lib/build/shell_example_lexer.py \
	lib/build/sphinx_ext.py
242

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

282
client_PYTHON = \
283
	lib/client/__init__.py \
284
	lib/client/gnt_backup.py \
285
	lib/client/gnt_cluster.py \
286
	lib/client/gnt_debug.py \
287
	lib/client/gnt_group.py \
288
	lib/client/gnt_instance.py \
289
	lib/client/gnt_job.py \
290
	lib/client/gnt_node.py \
291
	lib/client/gnt_network.py \
292 293
	lib/client/gnt_os.py \
	lib/client/gnt_storage.py
294

295 296 297
hypervisor_PYTHON = \
	lib/hypervisor/__init__.py \
	lib/hypervisor/hv_base.py \
298
	lib/hypervisor/hv_chroot.py \
299
	lib/hypervisor/hv_fake.py \
Guido Trotter's avatar
Guido Trotter committed
300
	lib/hypervisor/hv_kvm.py \
Iustin Pop's avatar
Iustin Pop committed
301
	lib/hypervisor/hv_lxc.py \
302 303
	lib/hypervisor/hv_xen.py

304 305
rapi_PYTHON = \
	lib/rapi/__init__.py \
306
	lib/rapi/baserlib.py \
David Knowles's avatar
David Knowles committed
307
	lib/rapi/client.py \
308
	lib/rapi/client_utils.py \
309
	lib/rapi/connector.py \
310 311
	lib/rapi/rlib2.py \
	lib/rapi/testutils.py
312

313
http_PYTHON = \
314
	lib/http/__init__.py \
315
	lib/http/auth.py \
316 317
	lib/http/client.py \
	lib/http/server.py
318

Guido Trotter's avatar
Guido Trotter committed
319
confd_PYTHON = \
Guido Trotter's avatar
Guido Trotter committed
320
	lib/confd/__init__.py \
321
	lib/confd/client.py
322

Michael Hanselmann's avatar
Michael Hanselmann committed
323
masterd_PYTHON = \
324
	lib/masterd/__init__.py \
René Nussbaumer's avatar
René Nussbaumer committed
325
	lib/masterd/iallocator.py \
326
	lib/masterd/instance.py
Michael Hanselmann's avatar
Michael Hanselmann committed
327

328 329 330
impexpd_PYTHON = \
	lib/impexpd/__init__.py

331
watcher_PYTHON = \
332
	lib/watcher/__init__.py \
333 334
	lib/watcher/nodemaint.py \
	lib/watcher/state.py
335

336
server_PYTHON = \
337
	lib/server/__init__.py \
338
	lib/server/masterd.py \
339 340
	lib/server/noded.py \
	lib/server/rapi.py
341

342 343
pytools_PYTHON = \
	lib/tools/__init__.py \
344
	lib/tools/burnin.py \
345
	lib/tools/ensure_dirs.py \
Michael Hanselmann's avatar
Michael Hanselmann committed
346
	lib/tools/node_cleanup.py \
347
	lib/tools/node_daemon_setup.py \
348
	lib/tools/prepare_node_join.py
349

350
utils_PYTHON = \
351
	lib/utils/__init__.py \
352
	lib/utils/algo.py \
353
	lib/utils/filelock.py \
354
	lib/utils/hash.py \
355
	lib/utils/io.py \
356
	lib/utils/log.py \
357
	lib/utils/lvm.py \
358
	lib/utils/mlock.py \
359
	lib/utils/nodesetup.py \
360
	lib/utils/process.py \
361
	lib/utils/retry.py \
362
	lib/utils/text.py \
363 364
	lib/utils/wrapper.py \
	lib/utils/x509.py
365

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

422 423 424
# Generates file names such as "doc/man-gnt-instance.rst"
mandocrst = $(addprefix doc/man-,$(notdir $(manrst)))

425 426 427 428 429 430 431 432 433 434 435 436 437 438 439
# Haskell programs to be installed in $PREFIX/bin
HS_BIN_PROGS=src/htools

# Haskell programs to be installed in the MYEXECLIB dir
HS_MYEXECLIB_PROGS=src/mon-collector

# Haskell programs to compiled but not installed automatically
# Usually they have their own specific installation rules
HS_COMPILE_PROGS= \
	src/hconfd \
	src/rpc-test

# All Haskell non-test programs to be compiled but not automatically installed
HS_PROGS = $(HS_BIN_PROGS) $(HS_MYEXECLIB_PROGS)

Guido Trotter's avatar
Guido Trotter committed
440
HS_BIN_ROLES = hbal hscan hspace hinfo hcheck hroller
441
HS_HTOOLS_PROGS = $(HS_BIN_ROLES) hail
442

443 444
HS_ALL_PROGS = \
	$(HS_PROGS) \
445 446
	test/hs/hpc-htools \
	test/hs/hpc-mon-collector \
Iustin Pop's avatar
Iustin Pop committed
447
	test/hs/htest \
448
	$(HS_COMPILE_PROGS)
449

450
HS_PROG_SRCS = $(patsubst %,%.hs,$(HS_ALL_PROGS))
451
HS_BUILT_TEST_HELPERS = $(HS_BIN_ROLES:%=test/hs/%) test/hs/hail
452

453
HFLAGS = \
Iustin Pop's avatar
Iustin Pop committed
454
	-O -Wall -Werror -isrc \
455 456 457 458
	-fwarn-monomorphism-restriction \
	-fwarn-tabs \
	$(GHC_BYVERSION_FLAGS)

459
# extra flags that can be overriden on the command line (e.g. -Wwarn, etc.)
460
HEXTRA =
Iustin Pop's avatar
Iustin Pop committed
461
# internal extra flags (used for test/hs/htest mainly)
462
HEXTRA_INT =
463
# exclude options for coverage reports
464
HPCEXCL = --exclude Main \
465
	--exclude Ganeti.Constants \
466
	--exclude Ganeti.HTools.QC \
Iustin Pop's avatar
Iustin Pop committed
467
	--exclude Ganeti.THH \
468
	--exclude Ganeti.Version \
469
	--exclude Test.Ganeti.Attoparsec \
470
	--exclude Test.Ganeti.TestCommon \
471 472
	--exclude Test.Ganeti.TestHTools \
	--exclude Test.Ganeti.TestHelper \
473
	--exclude Test.Ganeti.TestImports \
Iustin Pop's avatar
Iustin Pop committed
474
	$(patsubst src.%,--exclude Test.%,$(subst /,.,$(patsubst %.hs,%, $(HS_LIB_SRCS))))
475

476
HS_LIB_SRCS = \
Iustin Pop's avatar
Iustin Pop committed
477 478 479 480 481 482 483 484 485 486 487 488 489 490
	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 \
491
	src/Ganeti/DataCollectors/Types.hs \
Iustin Pop's avatar
Iustin Pop committed
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/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/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 \
515
	src/Ganeti/HTools/Program/Main.hs \
Iustin Pop's avatar
Iustin Pop committed
516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542
	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
543 544

HS_TEST_SRCS = \
545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575
	test/hs/Test/Ganeti/Attoparsec.hs \
	test/hs/Test/Ganeti/BasicTypes.hs \
	test/hs/Test/Ganeti/Block/Drbd/Parser.hs \
	test/hs/Test/Ganeti/Block/Drbd/Types.hs \
	test/hs/Test/Ganeti/Common.hs \
	test/hs/Test/Ganeti/Confd/Types.hs \
	test/hs/Test/Ganeti/Confd/Utils.hs \
	test/hs/Test/Ganeti/Daemon.hs \
	test/hs/Test/Ganeti/Errors.hs \
	test/hs/Test/Ganeti/HTools/Backend/Simu.hs \
	test/hs/Test/Ganeti/HTools/Backend/Text.hs \
	test/hs/Test/Ganeti/HTools/CLI.hs \
	test/hs/Test/Ganeti/HTools/Cluster.hs \
	test/hs/Test/Ganeti/HTools/Container.hs \
	test/hs/Test/Ganeti/HTools/Graph.hs \
	test/hs/Test/Ganeti/HTools/Instance.hs \
	test/hs/Test/Ganeti/HTools/Loader.hs \
	test/hs/Test/Ganeti/HTools/Node.hs \
	test/hs/Test/Ganeti/HTools/PeerMap.hs \
	test/hs/Test/Ganeti/HTools/Types.hs \
	test/hs/Test/Ganeti/JSON.hs \
	test/hs/Test/Ganeti/Jobs.hs \
	test/hs/Test/Ganeti/JQueue.hs \
	test/hs/Test/Ganeti/Luxi.hs \
	test/hs/Test/Ganeti/Network.hs \
	test/hs/Test/Ganeti/Objects.hs \
	test/hs/Test/Ganeti/OpCodes.hs \
	test/hs/Test/Ganeti/Query/Filter.hs \
	test/hs/Test/Ganeti/Query/Language.hs \
	test/hs/Test/Ganeti/Query/Query.hs \
	test/hs/Test/Ganeti/Rpc.hs \
576
	test/hs/Test/Ganeti/Runtime.hs \
577 578 579 580 581 582 583
	test/hs/Test/Ganeti/Ssconf.hs \
	test/hs/Test/Ganeti/THH.hs \
	test/hs/Test/Ganeti/TestCommon.hs \
	test/hs/Test/Ganeti/TestHTools.hs \
	test/hs/Test/Ganeti/TestHelper.hs \
	test/hs/Test/Ganeti/Types.hs \
	test/hs/Test/Ganeti/Utils.hs
584

585
HS_LIBTEST_SRCS = $(HS_LIB_SRCS) $(HS_TEST_SRCS)
586

587
HS_BUILT_SRCS = \
588
	test/hs/Test/Ganeti/TestImports.hs \
Iustin Pop's avatar
Iustin Pop committed
589 590
	src/Ganeti/Constants.hs \
	src/Ganeti/Version.hs
591
HS_BUILT_SRCS_IN = $(patsubst %,%.in,$(HS_BUILT_SRCS))
592

593
$(RUN_IN_TEMPDIR): | stamp-directories
594

595 596 597 598
doc/html/index.html: ENABLE_MANPAGES =
doc/man-html/index.html: ENABLE_MANPAGES = 1
doc/man-html/index.html: doc/manpages-enabled.rst $(mandocrst)

Iustin Pop's avatar
Iustin Pop committed
599 600 601 602 603
# 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
604 605
doc/html/index.html doc/man-html/index.html: $(docinput) doc/conf.py \
	configure.ac $(RUN_IN_TEMPDIR) lib/build/sphinx_ext.py \
606
	lib/build/shell_example_lexer.py lib/opcodes.py lib/ht.py \
607
	doc/css/style.css \
608
	| $(BUILT_PYTHON_SOURCES)
609 610
	@test -n "$(SPHINX)" || \
	    { echo 'sphinx-build' not found during configure; exit 1; }
611 612 613 614 615 616
if !MANPAGES_IN_DOC
	if test -n '$(ENABLE_MANPAGES)'; then \
	  echo 'Man pages in documentation were disabled at configure time' >&2; \
	  exit 1; \
	fi
endif
617 618 619 620 621 622
## Sphinx provides little control over what content should be included. Some
## mechanisms exist, but they all have drawbacks or actual issues. Since we
## build two different versions of the documentation--once without man pages and
## once, if enabled, with them--some control is necessary. xmpp-wrapper provides
## us with this, but requires running in a temporary directory. It moves the
## correct files into place depending on environment variables.
623 624
	dir=$(dir $@) && \
	@mkdir_p@ $$dir && \
625 626
	PYTHONPATH=. ENABLE_MANPAGES=$(ENABLE_MANPAGES) COPY_DOC=1 \
	$(RUN_IN_TEMPDIR) autotools/sphinx-wrapper $(SPHINX) -q -W -b html \
627
	    -d . \
628 629
	    -D version="$(VERSION_MAJOR).$(VERSION_MINOR)" \
	    -D release="$(PACKAGE_VERSION)" \
630
	    -D graphviz_dot="$(DOT)" \
631 632 633
	    -D enable_manpages="$(ENABLE_MANPAGES)" \
	    doc $(CURDIR)/$$dir && \
	rm -f $$dir/.buildinfo $$dir/objects.inv
634 635
	touch $@

636
doc/html: doc/html/index.html
Iustin Pop's avatar
Iustin Pop committed
637

638 639
doc/man-html: doc/man-html/index.html

640
doc/install-quick.rst: INSTALL
641
doc/news.rst: NEWS
642
doc/upgrade.rst: UPGRADE
643

644
doc/install-quick.rst doc/news.rst doc/upgrade.rst:
645 646 647 648 649 650 651
	set -e; \
	{ echo '.. This file is automatically updated at build time from $<.'; \
	  echo '.. Do not edit.'; \
	  echo; \
	  cat $<; \
	} > $@

652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679
doc/manpages-enabled.rst: Makefile | $(built_base_sources)
	{ echo '.. This file is automatically generated, do not edit!'; \
	  echo ''; \
	  echo 'Man pages'; \
	  echo '========='; \
	  echo; \
	  echo '.. toctree::'; \
	  echo '   :maxdepth: 1'; \
	  echo; \
	  for i in $(notdir $(mandocrst)); do \
	    echo "   $$i"; \
	  done | LC_ALL=C sort; \
	} > $@

doc/man-%.rst: man/%.gen Makefile $(REPLACE_VARS_SED) | $(built_base_sources)
if MANPAGES_IN_DOC
	{ echo '.. This file is automatically updated at build time from $<.'; \
	  echo '.. Do not edit.'; \
	  echo; \
	  echo "$*"; \
	  echo '=========================================='; \
	  tail -n +3 $< | sed -f $(REPLACE_VARS_SED); \
	} > $@
else
	echo 'Man pages in documentation were disabled at configure time' >&2; \
	exit 1;
endif

680 681 682 683
# Things to build but not to install (add it to EXTRA_DIST if it should be
# distributed)
noinst_DATA = \
	doc/html \
684
	$(BUILT_EXAMPLES) \
685
	doc/examples/bash_completion \
686
	doc/examples/bash_completion-debug \
687
	$(manhtml)
688

689 690 691 692
if MANPAGES_IN_DOC
noinst_DATA += doc/man-html
endif

693
gnt_scripts = \
694 695 696
	scripts/gnt-backup \
	scripts/gnt-cluster \
	scripts/gnt-debug \
697
	scripts/gnt-group \
698 699
	scripts/gnt-instance \
	scripts/gnt-job \
700
	scripts/gnt-network \
701
	scripts/gnt-node \
702 703
	scripts/gnt-os \
	scripts/gnt-storage
704

705
PYTHON_BOOTSTRAP_SBIN = \
706
	daemons/ganeti-masterd \
707
	daemons/ganeti-noded \
708
	daemons/ganeti-rapi \
Iustin Pop's avatar
Iustin Pop committed
709
	daemons/ganeti-watcher \
710
	$(gnt_scripts)
711

712 713
PYTHON_BOOTSTRAP = \
	$(PYTHON_BOOTSTRAP_SBIN) \
714
	tools/burnin \
715
	tools/ensure-dirs \
Michael Hanselmann's avatar
Michael Hanselmann committed
716
	tools/node-cleanup \
717
	tools/node-daemon-setup \
718
	tools/prepare-node-join
719

720
qa_scripts = \
721
	qa/__init__.py \
722 723 724 725 726 727
	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
728
	qa/qa_group.py \
729
	qa/qa_instance.py \
730
	qa/qa_job.py \
731 732 733 734 735 736
	qa/qa_node.py \
	qa/qa_os.py \
	qa/qa_rapi.py \
	qa/qa_tags.py \
	qa/qa_utils.py

737 738
bin_SCRIPTS =
if WANT_HTOOLS
739
bin_SCRIPTS += $(HS_BIN_PROGS)
740 741
install-exec-hook:
	@mkdir_p@ $(DESTDIR)$(iallocatorsdir)
742 743
# FIXME: this is a hardcoded logic, instead of auto-resolving
	$(LN_S) -f ../../../bin/htools \
Iustin Pop's avatar
Iustin Pop committed
744
	  $(DESTDIR)$(iallocatorsdir)/hail
745
	for role in $(HS_BIN_ROLES); do \
Iustin Pop's avatar
Iustin Pop committed
746
	  $(LN_S) -f htools $(DESTDIR)$(bindir)/$$role ; \
747
	done
748 749
endif

750
$(HS_ALL_PROGS): %: %.hs $(HS_LIBTEST_SRCS) $(HS_BUILT_SRCS) Makefile
751
	@if [ "$(notdir $@)" = "test" ] && [ "$(HS_NODEV)" ]; then \
752 753
	  echo "Error: cannot run unittests without the development" \
	       " libraries (see devnotes.rst)" 1>&2; \
754
	  exit 1; \
755
	fi
Iustin Pop's avatar
Iustin Pop committed
756 757
	@rm -f $(notdir $@).tix
	$(GHC) --make \
Iustin Pop's avatar
Iustin Pop committed
758
	  $(HFLAGS) \
759
	  $(HS_NOCURL) $(HS_PARALLEL3) $(HS_REGEX_PCRE) \
Iustin Pop's avatar
Iustin Pop committed
760
	  -osuf $(notdir $@).o -hisuf $(notdir $@).hi \
761
	  $(HEXTRA) $(HEXTRA_INT) $@
762 763
	@touch "$@"

Iustin Pop's avatar
Iustin Pop committed
764 765
# for the test/hs/htest binary, we need to enable profiling/coverage
test/hs/htest: HEXTRA_INT=-fhpc -itest/hs
766

767
# we compile the hpc-htools binary with the program coverage
768
test/hs/hpc-htools: HEXTRA_INT=-fhpc
769

770
# we compile the hpc-mon-collector binary with the program coverage
771
test/hs/hpc-mon-collector: HEXTRA_INT=-fhpc
772

773
# test dependency
774
test/hs/offline-tests.sh: test/hs/hpc-htools test/hs/hpc-mon-collector
775

776 777 778 779 780 781
# 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
782 783 784 785
	@if [ -z "$(TARGET)" ]; then \
	  echo "You need to define TARGET when running this rule" 1>&2; \
	  exit 1; \
	fi
786
	$(MAKE) $(AM_MAKEFLAGS) clean
Iustin Pop's avatar
Iustin Pop committed
787
	$(MAKE) $(AM_MAKEFLAGS) $(TARGET) HEXTRA="-osuf o"
788
	rm -f $(HS_ALL_PROGS)
789
	$(MAKE) $(AM_MAKEFLAGS) hs-prof-quick
790 791

hs-prof-quick:
Iustin Pop's avatar
Iustin Pop committed
792 793 794 795 796
	@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"
797

798 799
dist_sbin_SCRIPTS = \
	tools/ganeti-listrunner
800

801
nodist_sbin_SCRIPTS = \
802
	$(PYTHON_BOOTSTRAP_SBIN) \
803
	daemons/ganeti-cleaner
804

805
if ENABLE_CONFD
Iustin Pop's avatar
Iustin Pop committed
806
src/ganeti-confd: src/hconfd
807 808
	cp -f $< $@

Iustin Pop's avatar
Iustin Pop committed
809
nodist_sbin_SCRIPTS += src/ganeti-confd
810 811
endif

812
python_scripts = \
813 814
	tools/cfgshell \
	tools/cfgupgrade \
815
	tools/cfgupgrade12 \
816
	tools/cluster-merge \
Iustin Pop's avatar
Iustin Pop committed
817
	tools/confd-client \
818
	tools/fmtjson \
Iustin Pop's avatar
Iustin Pop committed
819
	tools/lvmstrap \
820
	tools/move-instance \
821
	tools/ovfconverter \
Michael Hanselmann's avatar
Michael Hanselmann committed
822
	tools/sanitize-config
823

824
dist_tools_SCRIPTS = \
825
	$(python_scripts) \