Makefile.am 55 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 \
Agata Murawska's avatar
Agata Murawska committed
109
	test/data/ovfdata \
Agata Murawska's avatar
Agata Murawska committed
110
	test/data/ovfdata/other \
Iustin Pop's avatar
Iustin Pop committed
111
	test/py \
112
113
	tools

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

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

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

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

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

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

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

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

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

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

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

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

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

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

234
235
236
nodist_pkgpython_PYTHON = \
	$(BUILT_PYTHON_SOURCES)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
# 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
438
HS_BIN_ROLES = hbal hscan hspace hinfo hcheck hroller
439
HS_HTOOLS_PROGS = $(HS_BIN_ROLES) hail
440

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

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

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

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

474
HS_LIB_SRCS = \
Iustin Pop's avatar
Iustin Pop committed
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
	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/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 \
512
	src/Ganeti/HTools/Program/Main.hs \
Iustin Pop's avatar
Iustin Pop committed
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
	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
540
541

HS_TEST_SRCS = \
542
543
544
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
576
577
578
579
	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
580

581
HS_LIBTEST_SRCS = $(HS_LIB_SRCS) $(HS_TEST_SRCS)
582

583
HS_BUILT_SRCS = \
584
	test/hs/Test/Ganeti/TestImports.hs \
Iustin Pop's avatar
Iustin Pop committed
585
586
	src/Ganeti/Constants.hs \
	src/Ganeti/Version.hs
587
HS_BUILT_SRCS_IN = $(patsubst %,%.in,$(HS_BUILT_SRCS))
588

589
$(RUN_IN_TEMPDIR): | stamp-directories
590

591
592
593
594
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
595
596
597
598
599
# 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
600
601
doc/html/index.html doc/man-html/index.html: $(docinput) doc/conf.py \
	configure.ac $(RUN_IN_TEMPDIR) lib/build/sphinx_ext.py \
602
	lib/build/shell_example_lexer.py lib/opcodes.py lib/ht.py \
603
	doc/css/style.css \
604
	| $(BUILT_PYTHON_SOURCES)
605
606
	@test -n "$(SPHINX)" || \
	    { echo 'sphinx-build' not found during configure; exit 1; }
607
608
609
610
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
	dir=$(dir $@) && \
	@mkdir_p@ $$dir && \
	PYTHONPATH=. ENABLE_MANPAGES=$(ENABLE_MANPAGES) \
	$(RUN_IN_TEMPDIR) bash autotools/sphinx-wrapper $(SPHINX) -q -W -b html \
617
	    -d . \
618
619
	    -D version="$(VERSION_MAJOR).$(VERSION_MINOR)" \
	    -D release="$(PACKAGE_VERSION)" \
620
	    -D graphviz_dot="$(DOT)" \
621
622
623
	    -D enable_manpages="$(ENABLE_MANPAGES)" \
	    doc $(CURDIR)/$$dir && \
	rm -f $$dir/.buildinfo $$dir/objects.inv
624
625
	touch $@

626
doc/html: doc/html/index.html
Iustin Pop's avatar
Iustin Pop committed
627

628
629
doc/man-html: doc/man-html/index.html

630
doc/install-quick.rst: INSTALL
631
doc/news.rst: NEWS
632
doc/upgrade.rst: UPGRADE
633

634
doc/install-quick.rst doc/news.rst doc/upgrade.rst:
635
636
637
638
639
640
641
	set -e; \
	{ echo '.. This file is automatically updated at build time from $<.'; \
	  echo '.. Do not edit.'; \
	  echo; \
	  cat $<; \
	} > $@

642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
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

670
671
672
673
# Things to build but not to install (add it to EXTRA_DIST if it should be
# distributed)
noinst_DATA = \
	doc/html \
674
	$(BUILT_EXAMPLES) \
675
	doc/examples/bash_completion \
676
	doc/examples/bash_completion-debug \
677
	$(manhtml)
678

679
680
681
682
if MANPAGES_IN_DOC
noinst_DATA += doc/man-html
endif

683
gnt_scripts = \
684
685
686
	scripts/gnt-backup \
	scripts/gnt-cluster \
	scripts/gnt-debug \
687
	scripts/gnt-group \
688
689
	scripts/gnt-instance \
	scripts/gnt-job \
690
	scripts/gnt-network \
691
	scripts/gnt-node \
692
693
	scripts/gnt-os \
	scripts/gnt-storage
694

695
PYTHON_BOOTSTRAP_SBIN = \
696
	daemons/ganeti-masterd \
697
	daemons/ganeti-noded \
698
	daemons/ganeti-rapi \
Iustin Pop's avatar
Iustin Pop committed
699
	daemons/ganeti-watcher \
700
	$(gnt_scripts)
701

702
703
PYTHON_BOOTSTRAP = \
	$(PYTHON_BOOTSTRAP_SBIN) \
704
	tools/ensure-dirs \
Michael Hanselmann's avatar
Michael Hanselmann committed
705
	tools/node-cleanup \
706
	tools/node-daemon-setup \
707
	tools/prepare-node-join
708

709
qa_scripts = \
710
	qa/__init__.py \
711
712
713
714
715
716
	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
717
	qa/qa_group.py \
718
	qa/qa_instance.py \
719
	qa/qa_job.py \
720
721
722
723
724
725
	qa/qa_node.py \
	qa/qa_os.py \
	qa/qa_rapi.py \
	qa/qa_tags.py \
	qa/qa_utils.py

726
727
bin_SCRIPTS =
if WANT_HTOOLS
728
bin_SCRIPTS += $(HS_BIN_PROGS)
729
730
install-exec-hook:
	@mkdir_p@ $(DESTDIR)$(iallocatorsdir)
731
732
# FIXME: this is a hardcoded logic, instead of auto-resolving
	$(LN_S) -f ../../../bin/htools \
Iustin Pop's avatar
Iustin Pop committed
733
	  $(DESTDIR)$(iallocatorsdir)/hail
734
	for role in $(HS_BIN_ROLES); do \
Iustin Pop's avatar
Iustin Pop committed
735
	  $(LN_S) -f htools $(DESTDIR)$(bindir)/$$role ; \
736
	done
737
738
endif

739
$(HS_ALL_PROGS): %: %.hs $(HS_LIBTEST_SRCS) $(HS_BUILT_SRCS) Makefile
740
	@if [ "$(notdir $@)" = "test" ] && [ "$(HS_NODEV)" ]; then \
741
742
	  echo "Error: cannot run unittests without the development" \
	       " libraries (see devnotes.rst)" 1>&2; \
743
	  exit 1; \
744
	fi
Iustin Pop's avatar
Iustin Pop committed
745
746
	@rm -f $(notdir $@).tix
	$(GHC) --make \
Iustin Pop's avatar
Iustin Pop committed
747
	  $(HFLAGS) \
748
	  $(HS_NOCURL) $(HS_PARALLEL3) $(HS_REGEX_PCRE) \
Iustin Pop's avatar
Iustin Pop committed
749
	  -osuf $(notdir $@).o -hisuf $(notdir $@).hi \
750
	  $(HEXTRA) $(HEXTRA_INT) $@
751
752
	@touch "$@"

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

756
# we compile the hpc-htools binary with the program coverage
757
test/hs/hpc-htools: HEXTRA_INT=-fhpc
758

759
# we compile the hpc-mon-collector binary with the program coverage
760
test/hs/hpc-mon-collector: HEXTRA_INT=-fhpc
761

762
# test dependency
763
test/hs/offline-tests.sh: test/hs/hpc-htools test/hs/hpc-mon-collector
764

765
766
767
768
769
770
# 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
771
772
773
774
	@if [ -z "$(TARGET)" ]; then \
	  echo "You need to define TARGET when running this rule" 1>&2; \
	  exit 1; \
	fi
775
	$(MAKE) $(AM_MAKEFLAGS) clean
Iustin Pop's avatar
Iustin Pop committed
776
	$(MAKE) $(AM_MAKEFLAGS) $(TARGET) HEXTRA="-osuf o"
777
	rm -f $(HS_ALL_PROGS)
778
	$(MAKE) $(AM_MAKEFLAGS) hs-prof-quick
779
780

hs-prof-quick:
Iustin Pop's avatar
Iustin Pop committed
781
782
783
784
785
	@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"
786

787
788
dist_sbin_SCRIPTS = \
	tools/ganeti-listrunner
789

790
nodist_sbin_SCRIPTS = \
791
	$(PYTHON_BOOTSTRAP_SBIN) \
792
	daemons/ganeti-cleaner
793

794
if ENABLE_CONFD
Iustin Pop's avatar
Iustin Pop committed
795
src/ganeti-confd: src/hconfd
796
797
	cp -f $< $@

Iustin Pop's avatar
Iustin Pop committed
798
nodist_sbin_SCRIPTS += src/ganeti-confd
799
800
endif

801
python_scripts = \
802
803
804
	tools/burnin \
	tools/cfgshell \
	tools/cfgupgrade \
805
	tools/cfgupgrade12 \
806
	tools/cluster-merge \
Iustin Pop's avatar
Iustin Pop committed
807
	tools/confd-client \
808
	tools/fmtjson \
Iustin Pop's avatar
Iustin Pop committed
809
	tools/lvmstrap \
810
	tools/move-instance \
811
	tools/ovfconverter \
Michael Hanselmann's avatar
Michael Hanselmann committed
812
	tools/sanitize-config
813

814
dist_tools_SCRIPTS = \
815
	$(python_scripts) \
816
	tools/kvm-console-wrapper \
Iustin Pop's avatar
Iustin Pop committed
817
	tools/master-ip-setup \
818
	tools/xen-console-wrapper
819

Michael Hanselmann's avatar
Michael Hanselmann committed
820
821
822
nodist_tools_python_scripts = \
	tools/node-cleanup

823
nodist_tools_SCRIPTS = \
Michael Hanselmann's avatar
Michael Hanselmann committed
824
	$(nodist_tools_python_scripts) \
825
826
	tools/vcluster-setup

827
pkglib_python_scripts = \
828
829
	daemons/import-export \
	tools/check-cert-expired
830

831
nodist_pkglib_python_scripts = \
832
	tools/ensure-dirs \
833
	tools/node-daemon-setup \
834
	tools/prepare-node-join
835

836
myexeclib_SCRIPTS = \
837
	daemons/daemon-util \
838
	tools/kvm-ifup \
839
	$(pkglib_python_scripts) \
840
	$(HS_MYEXECLIB_PROGS)
841

842
nodist_myexeclib_SCRIPTS = \
843
844
	$(nodist_pkglib_python_scripts)

845
846
EXTRA_DIST = \
	NEWS \
847
	UPGRADE \
848
	epydoc.conf.in \
Michael Hanselmann's avatar
Michael Hanselmann committed
849
	pylintrc \
850
	autotools/build-bash-completion \