Makefile.am 52.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_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 \
68
69
70
71
72
73
74
75
76
	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
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
	doc/examples/hooks \
87
88
89
	test/data/htools \
	test/data/htools/rapi \
	test/hs/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 \
Iustin Pop's avatar
Iustin Pop committed
109
	test/py \
110
111
	tools

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

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

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

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

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

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

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

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

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

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

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

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

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

219
220
221
222
223
# 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 \
224
	doc/examples/ganeti-master-role.ocf \
225
	doc/examples/ganeti-node-role.ocf \
226
227
228
	doc/examples/gnt-config-backup \
	doc/examples/hooks/ipsec

229
230
231
nodist_pkgpython_PYTHON = \
	$(BUILT_PYTHON_SOURCES)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

450
HS_LIB_SRCS = \
Iustin Pop's avatar
Iustin Pop committed
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
515
	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
516
517

HS_TEST_SRCS = \
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
543
544
545
546
547
548
549
550
551
552
553
554
555
	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 \
	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
556

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

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

565
$(RUN_IN_TEMPDIR): | stamp-directories
566

Iustin Pop's avatar
Iustin Pop committed
567
568
569
570
571
# 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
572
doc/html/index.html: $(docrst) $(docpng) doc/conf.py configure.ac \
573
574
	$(RUN_IN_TEMPDIR) lib/build/sphinx_ext.py \
	lib/build/shell_example_lexer.py lib/opcodes.py lib/ht.py \
575
	| $(BUILT_PYTHON_SOURCES)
576
577
	@test -n "$(SPHINX)" || \
	    { echo 'sphinx-build' not found during configure; exit 1; }
578
	@mkdir_p@ $(dir $@)
579
	PYTHONPATH=. $(RUN_IN_TEMPDIR) $(SPHINX) -q -W -b html \
580
	    -d . \
581
582
	    -D version="$(VERSION_MAJOR).$(VERSION_MINOR)" \
	    -D release="$(PACKAGE_VERSION)" \
583
584
585
586
	    $(abs_top_srcdir)/doc $(CURDIR)/doc/html
	rm -f doc/html/.buildinfo doc/html/objects.inv
	touch $@

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

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

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

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

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

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

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

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

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

643
qa_scripts = \
644
	qa/__init__.py \
645
646
647
648
649
650
	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
651
	qa/qa_group.py \
652
	qa/qa_instance.py \
653
	qa/qa_job.py \
654
655
656
657
658
659
	qa/qa_node.py \
	qa/qa_os.py \
	qa/qa_rapi.py \
	qa/qa_tags.py \
	qa/qa_utils.py

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

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

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

690
# we compile the hpc-htools binary with the program coverage
691
test/hs/hpc-htools: HEXTRA_INT=-fhpc
692

693
# we compile the hpc-mon-collector binary with the program coverage
694
test/hs/hpc-mon-collector: HEXTRA_INT=-fhpc
695

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

699
700
701
702
703
704
# 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
705
706
707
708
	@if [ -z "$(TARGET)" ]; then \
	  echo "You need to define TARGET when running this rule" 1>&2; \
	  exit 1; \
	fi
709
	$(MAKE) $(AM_MAKEFLAGS) clean
Iustin Pop's avatar
Iustin Pop committed
710
	$(MAKE) $(AM_MAKEFLAGS) $(TARGET) HEXTRA="-osuf o"
711
	rm -f $(HS_ALL_PROGS)
712
	$(MAKE) $(AM_MAKEFLAGS) hs-prof-quick
713
714

hs-prof-quick:
Iustin Pop's avatar
Iustin Pop committed
715
716
717
718
719
	@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"
720

721
722
dist_sbin_SCRIPTS = \
	tools/ganeti-listrunner
723

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

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

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

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

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

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

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

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

765
nodist_pkglib_python_scripts = \
766
	tools/ensure-dirs \
767
	tools/node-daemon-setup \
768
	tools/prepare-node-join
769

770
myexeclib_SCRIPTS = \
771
	daemons/daemon-util \
772
	tools/kvm-ifup \
773
	$(pkglib_python_scripts) \
Iustin Pop's avatar
Iustin Pop committed
774
	src/mon-collector
775

776
nodist_myexeclib_SCRIPTS = \
777
778
	$(nodist_pkglib_python_scripts)

779
780
EXTRA_DIST = \
	NEWS \
781
	UPGRADE \
782
	epydoc.conf.in \
Michael Hanselmann's avatar
Michael Hanselmann committed
783
	pylintrc \
784
	autotools/build-bash-completion \
785
	autotools/build-rpc \
786
	autotools/check-header \
787
	autotools/check-imports \
Iustin Pop's avatar
Iustin Pop committed
788
	autotools/check-man-dashes \
789
	autotools/check-man-warnings \
790
	autotools/check-news \
Iustin Pop's avatar
Iustin Pop committed
791
	autotools/check-python-code \
792
	autotools/check-tar \
793
	autotools/check-version \
794
	autotools/convert-constants \
795
	autotools/docpp \
Iustin Pop's avatar
Iustin Pop committed
796
	autotools/gen-py-coverage \
797
	autotools/testrunner \
798
	autotools/wrong-hardcoded-paths \
799
	$(RUN_IN_TEMPDIR) \
800
	daemons/daemon-util.in \
801
	daemons/ganeti-cleaner.in \
802
	$(pkglib_python_scripts) \
803
	devel/upload \
804
	tools/kvm-ifup.in \
805
	tools/vcluster-setup.in \