Makefile.am 56.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_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
264
	lib/objects.py \
	lib/opcodes.py \
265
	lib/outils.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/design-hroller.rst \
405
	doc/design-storagespace.rst \
406
	doc/devnotes.rst \
407
	doc/glossary.rst \
408
	doc/hooks.rst \
409
	doc/iallocator.rst \
410
	doc/index.rst \
411
	doc/install-quick.rst \
412
	doc/install.rst \
413
	doc/locking.rst \
414
	doc/manpages-disabled.rst \
415
	doc/move-instance.rst \
Iustin Pop's avatar
Iustin Pop committed
416
	doc/news.rst \
417
	doc/ovfconverter.rst \
418
	doc/rapi.rst \
419
	doc/security.rst \
420
	doc/upgrade.rst \
421
	doc/virtual-cluster.rst \
Iustin Pop's avatar
Iustin Pop committed
422
	doc/walkthrough.rst
Michael Hanselmann's avatar
Michael Hanselmann committed
423

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

427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
# 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)

442
HS_BIN_ROLES = harep hbal hscan hspace hinfo hcheck hroller
443
HS_HTOOLS_PROGS = $(HS_BIN_ROLES) hail
444

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

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

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

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

478
HS_LIB_SRCS = \
Iustin Pop's avatar
Iustin Pop committed
479
480
481
482
483
484
485
486
487
488
489
490
491
492
	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 \
493
	src/Ganeti/DataCollectors/Types.hs \
Iustin Pop's avatar
Iustin Pop committed
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
	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 \
511
	src/Ganeti/HTools/Program/Harep.hs \
Iustin Pop's avatar
Iustin Pop committed
512
513
514
515
516
517
	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 \
518
	src/Ganeti/HTools/Program/Main.hs \
Iustin Pop's avatar
Iustin Pop committed
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
	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 \
536
	src/Ganeti/Query/Network.hs \
Iustin Pop's avatar
Iustin Pop committed
537
538
539
540
541
542
543
544
545
546
	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
547
548

HS_TEST_SRCS = \
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 \
580
	test/hs/Test/Ganeti/Runtime.hs \
581
582
583
584
585
586
587
	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
588

589
HS_LIBTEST_SRCS = $(HS_LIB_SRCS) $(HS_TEST_SRCS)
590

591
HS_BUILT_SRCS = \
592
	test/hs/Test/Ganeti/TestImports.hs \
Iustin Pop's avatar
Iustin Pop committed
593
594
	src/Ganeti/Constants.hs \
	src/Ganeti/Version.hs
595
HS_BUILT_SRCS_IN = $(patsubst %,%.in,$(HS_BUILT_SRCS))
596

597
$(RUN_IN_TEMPDIR): | stamp-directories
598

599
600
601
602
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
603
604
605
606
607
# 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
608
609
doc/html/index.html doc/man-html/index.html: $(docinput) doc/conf.py \
	configure.ac $(RUN_IN_TEMPDIR) lib/build/sphinx_ext.py \
610
	lib/build/shell_example_lexer.py lib/opcodes.py lib/ht.py \
611
	doc/css/style.css \
612
	| $(BUILT_PYTHON_SOURCES)
613
614
	@test -n "$(SPHINX)" || \
	    { echo 'sphinx-build' not found during configure; exit 1; }
615
616
617
618
619
620
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
621
622
623
624
625
626
## 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.
627
628
	dir=$(dir $@) && \
	@mkdir_p@ $$dir && \
629
630
	PYTHONPATH=. ENABLE_MANPAGES=$(ENABLE_MANPAGES) COPY_DOC=1 \
	$(RUN_IN_TEMPDIR) autotools/sphinx-wrapper $(SPHINX) -q -W -b html \
631
	    -d . \
632
633
	    -D version="$(VERSION_MAJOR).$(VERSION_MINOR)" \
	    -D release="$(PACKAGE_VERSION)" \
634
	    -D graphviz_dot="$(DOT)" \
635
636
637
	    -D enable_manpages="$(ENABLE_MANPAGES)" \
	    doc $(CURDIR)/$$dir && \
	rm -f $$dir/.buildinfo $$dir/objects.inv
638
639
	touch $@

640
doc/html: doc/html/index.html
Iustin Pop's avatar
Iustin Pop committed
641

642
643
doc/man-html: doc/man-html/index.html

644
doc/install-quick.rst: INSTALL
645
doc/news.rst: NEWS
646
doc/upgrade.rst: UPGRADE
647

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

656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
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

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

693
694
695
696
if MANPAGES_IN_DOC
noinst_DATA += doc/man-html
endif

697
gnt_scripts = \
698
699
700
	scripts/gnt-backup \
	scripts/gnt-cluster \
	scripts/gnt-debug \
701
	scripts/gnt-group \
702
703
	scripts/gnt-instance \
	scripts/gnt-job \
704
	scripts/gnt-network \
705
	scripts/gnt-node \
706
707
	scripts/gnt-os \
	scripts/gnt-storage
708

709
PYTHON_BOOTSTRAP_SBIN = \
710
	daemons/ganeti-masterd \
711
	daemons/ganeti-noded \
712
	daemons/ganeti-rapi \
Iustin Pop's avatar
Iustin Pop committed
713
	daemons/ganeti-watcher \
714
	$(gnt_scripts)
715

716
717
PYTHON_BOOTSTRAP = \
	$(PYTHON_BOOTSTRAP_SBIN) \
718
	tools/burnin \
719
	tools/ensure-dirs \
Michael Hanselmann's avatar
Michael Hanselmann committed
720
	tools/node-cleanup \
721
	tools/node-daemon-setup \
722
	tools/prepare-node-join
723

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

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

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

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

771
# we compile the hpc-htools binary with the program coverage
772
test/hs/hpc-htools: HEXTRA_INT=-fhpc
773

774
# we compile the hpc-mon-collector binary with the program coverage
775
test/hs/hpc-mon-collector: HEXTRA_INT=-fhpc
776

777
# test dependency
778
test/hs/offline-tests.sh: test/hs/hpc-htools test/hs/hpc-mon-collector
779

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

hs-prof-quick:
Iustin Pop's avatar
Iustin Pop committed
796
797
798
799
800
	@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"
801

802
803
dist_sbin_SCRIPTS = \
	tools/ganeti-listrunner
804

805
nodist_sbin_SCRIPTS = \
806
	$(PYTHON_BOOTSTRAP_SBIN) \
807
	daemons/ganeti-cleaner
808

809
if ENABLE_CONFD
Iustin Pop's avatar
Iustin Pop committed
810
src/ganeti-confd: src/hconfd
811
812
	cp -f $< $@

Iustin Pop's avatar
Iustin Pop committed
813
nodist_sbin_SCRIPTS += src/ganeti-confd
814
815
endif

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

828
dist_tools_SCRIPTS = \
829
	$(python_scripts) \
830
	tools/kvm-console-wrapper \
Iustin Pop's avatar
Iustin Pop committed
831
	tools/master-ip-setup \
832
	tools/xen-console-wrapper
833

Michael Hanselmann's avatar
Michael Hanselmann committed
834
835
836
nodist_tools_python_scripts = \
	tools/node-cleanup

837
nodist_tools_SCRIPTS = \
Michael Hanselmann's avatar
Michael Hanselmann committed
838
	$(nodist_tools_python_scripts) \
839
840
	tools/vcluster-setup

841
pkglib_python_scripts = \
842
843
	daemons/import-export \
	tools/check-cert-expired
844

845
nodist_pkglib_python_scripts = \
846
	tools/burnin \
847
	tools/ensure-dirs \