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
	$(maninput) \
154
	doc/install-quick.rst \
155
	doc/news.rst \
156
	doc/upgrade.rst \
157
	vcs-version
Iustin Pop's avatar
Iustin Pop committed
158

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

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

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

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

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

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

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

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

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

228
229
230
nodist_pkgpython_PYTHON = \
	$(BUILT_PYTHON_SOURCES)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
# 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
426
HS_BIN_ROLES = hbal hscan hspace hinfo hcheck hroller
427
HS_HTOOLS_PROGS = $(HS_BIN_ROLES) hail
428

429
430
HS_ALL_PROGS = \
	$(HS_PROGS) \
431
432
	test/hs/hpc-htools \
	test/hs/hpc-mon-collector \
Iustin Pop's avatar
Iustin Pop committed
433
	test/hs/htest \
434
	$(HS_COMPILE_PROGS)
435

436
HS_PROG_SRCS = $(patsubst %,%.hs,$(HS_ALL_PROGS))
437
HS_BUILT_TEST_HELPERS = $(HS_BIN_ROLES:%=test/hs/%) test/hs/hail
438

439
HFLAGS = \
Iustin Pop's avatar
Iustin Pop committed
440
	-O -Wall -Werror -isrc \
441
442
443
444
	-fwarn-monomorphism-restriction \
	-fwarn-tabs \
	$(GHC_BYVERSION_FLAGS)

445
# extra flags that can be overriden on the command line (e.g. -Wwarn, etc.)
446
HEXTRA =
Iustin Pop's avatar
Iustin Pop committed
447
# internal extra flags (used for test/hs/htest mainly)
448
HEXTRA_INT =
449
# exclude options for coverage reports
450
HPCEXCL = --exclude Main \
451
	--exclude Ganeti.Constants \
452
	--exclude Ganeti.HTools.QC \
Iustin Pop's avatar
Iustin Pop committed
453
	--exclude Ganeti.THH \
454
	--exclude Ganeti.Version \
455
	--exclude Test.Ganeti.Attoparsec \
456
	--exclude Test.Ganeti.TestCommon \
457
458
	--exclude Test.Ganeti.TestHTools \
	--exclude Test.Ganeti.TestHelper \
459
	--exclude Test.Ganeti.TestImports \
Iustin Pop's avatar
Iustin Pop committed
460
	$(patsubst src.%,--exclude Test.%,$(subst /,.,$(patsubst %.hs,%, $(HS_LIB_SRCS))))
461

462
HS_LIB_SRCS = \
Iustin Pop's avatar
Iustin Pop committed
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
	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 \
500
	src/Ganeti/HTools/Program/Main.hs \
Iustin Pop's avatar
Iustin Pop committed
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
	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
528
529

HS_TEST_SRCS = \
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
556
557
558
559
560
561
562
563
564
565
566
567
	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
568

569
HS_LIBTEST_SRCS = $(HS_LIB_SRCS) $(HS_TEST_SRCS)
570

571
HS_BUILT_SRCS = \
572
	test/hs/Test/Ganeti/TestImports.hs \
Iustin Pop's avatar
Iustin Pop committed
573
574
	src/Ganeti/Constants.hs \
	src/Ganeti/Version.hs
575
HS_BUILT_SRCS_IN = $(patsubst %,%.in,$(HS_BUILT_SRCS))
576

577
$(RUN_IN_TEMPDIR): | stamp-directories
578

Iustin Pop's avatar
Iustin Pop committed
579
580
581
582
583
# 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
Iustin Pop's avatar
Iustin Pop committed
584
doc/html/index.html: $(docrst) doc/conf.py configure.ac \
585
586
	$(RUN_IN_TEMPDIR) lib/build/sphinx_ext.py \
	lib/build/shell_example_lexer.py lib/opcodes.py lib/ht.py \
587
	| $(BUILT_PYTHON_SOURCES)
588
589
	@test -n "$(SPHINX)" || \
	    { echo 'sphinx-build' not found during configure; exit 1; }
590
	@mkdir_p@ $(dir $@)
591
	PYTHONPATH=. $(RUN_IN_TEMPDIR) $(SPHINX) -q -W -b html \
592
	    -d . \
593
594
	    -D version="$(VERSION_MAJOR).$(VERSION_MINOR)" \
	    -D release="$(PACKAGE_VERSION)" \
595
	    -D graphviz_dot="$(DOT)" \
596
597
598
599
	    $(abs_top_srcdir)/doc $(CURDIR)/doc/html
	rm -f doc/html/.buildinfo doc/html/objects.inv
	touch $@

600
doc/html: doc/html/index.html
Iustin Pop's avatar
Iustin Pop committed
601

602
doc/install-quick.rst: INSTALL
603
doc/news.rst: NEWS
604
doc/upgrade.rst: UPGRADE
605

606
doc/install-quick.rst doc/news.rst doc/upgrade.rst:
607
608
609
610
611
612
613
	set -e; \
	{ echo '.. This file is automatically updated at build time from $<.'; \
	  echo '.. Do not edit.'; \
	  echo; \
	  cat $<; \
	} > $@

614
615
616
617
# Things to build but not to install (add it to EXTRA_DIST if it should be
# distributed)
noinst_DATA = \
	doc/html \
618
	$(BUILT_EXAMPLES) \
619
	doc/examples/bash_completion \
620
	doc/examples/bash_completion-debug \
621
	$(manhtml)
622

623
gnt_scripts = \
624
625
626
	scripts/gnt-backup \
	scripts/gnt-cluster \
	scripts/gnt-debug \
627
	scripts/gnt-group \
628
629
	scripts/gnt-instance \
	scripts/gnt-job \
630
	scripts/gnt-network \
631
	scripts/gnt-node \
632
633
	scripts/gnt-os \
	scripts/gnt-storage
634

635
PYTHON_BOOTSTRAP_SBIN = \
636
	daemons/ganeti-masterd \
637
	daemons/ganeti-noded \
638
	daemons/ganeti-rapi \
Iustin Pop's avatar
Iustin Pop committed
639
	daemons/ganeti-watcher \
640
	$(gnt_scripts)
641

642
643
PYTHON_BOOTSTRAP = \
	$(PYTHON_BOOTSTRAP_SBIN) \
644
	tools/ensure-dirs \
Michael Hanselmann's avatar
Michael Hanselmann committed
645
	tools/node-cleanup \
646
	tools/node-daemon-setup \
647
	tools/prepare-node-join
648

649
qa_scripts = \
650
	qa/__init__.py \
651
652
653
654
655
656
	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
657
	qa/qa_group.py \
658
	qa/qa_instance.py \
659
	qa/qa_job.py \
660
661
662
663
664
665
	qa/qa_node.py \
	qa/qa_os.py \
	qa/qa_rapi.py \
	qa/qa_tags.py \
	qa/qa_utils.py

666
667
bin_SCRIPTS =
if WANT_HTOOLS
668
bin_SCRIPTS += $(HS_BIN_PROGS)
669
670
install-exec-hook:
	@mkdir_p@ $(DESTDIR)$(iallocatorsdir)
671
672
# FIXME: this is a hardcoded logic, instead of auto-resolving
	$(LN_S) -f ../../../bin/htools \
Iustin Pop's avatar
Iustin Pop committed
673
	  $(DESTDIR)$(iallocatorsdir)/hail
674
	for role in $(HS_BIN_ROLES); do \
Iustin Pop's avatar
Iustin Pop committed
675
	  $(LN_S) -f htools $(DESTDIR)$(bindir)/$$role ; \
676
	done
677
678
endif

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

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

696
# we compile the hpc-htools binary with the program coverage
697
test/hs/hpc-htools: HEXTRA_INT=-fhpc
698

699
# we compile the hpc-mon-collector binary with the program coverage
700
test/hs/hpc-mon-collector: HEXTRA_INT=-fhpc
701

702
# test dependency
703
test/hs/offline-tests.sh: test/hs/hpc-htools test/hs/hpc-mon-collector
704

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

hs-prof-quick:
Iustin Pop's avatar
Iustin Pop committed
721
722
723
724
725
	@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"
726

727
728
dist_sbin_SCRIPTS = \
	tools/ganeti-listrunner
729

730
nodist_sbin_SCRIPTS = \
731
	$(PYTHON_BOOTSTRAP_SBIN) \
732
	daemons/ganeti-cleaner
733

734
if ENABLE_CONFD
Iustin Pop's avatar
Iustin Pop committed
735
src/ganeti-confd: src/hconfd
736
737
	cp -f $< $@

Iustin Pop's avatar
Iustin Pop committed
738
nodist_sbin_SCRIPTS += src/ganeti-confd
739
740
endif

741
python_scripts = \
742
743
744
	tools/burnin \
	tools/cfgshell \
	tools/cfgupgrade \
745
	tools/cfgupgrade12 \
746
	tools/cluster-merge \
Iustin Pop's avatar
Iustin Pop committed
747
	tools/confd-client \
748
	tools/fmtjson \
Iustin Pop's avatar
Iustin Pop committed
749
	tools/lvmstrap \
750
	tools/move-instance \
751
	tools/ovfconverter \
Michael Hanselmann's avatar
Michael Hanselmann committed
752
	tools/sanitize-config
753

754
dist_tools_SCRIPTS = \
755
	$(python_scripts) \
756
	tools/kvm-console-wrapper \
Iustin Pop's avatar
Iustin Pop committed
757
	tools/master-ip-setup \
758
	tools/xen-console-wrapper
759

Michael Hanselmann's avatar
Michael Hanselmann committed
760
761
762
nodist_tools_python_scripts = \
	tools/node-cleanup

763
nodist_tools_SCRIPTS = \
Michael Hanselmann's avatar
Michael Hanselmann committed
764
	$(nodist_tools_python_scripts) \
765
766
	tools/vcluster-setup

767
pkglib_python_scripts = \
768
769
	daemons/import-export \
	tools/check-cert-expired
770

771
nodist_pkglib_python_scripts = \
772
	tools/ensure-dirs \
773
	tools/node-daemon-setup \
774
	tools/prepare-node-join
775

776
myexeclib_SCRIPTS = \
777
	daemons/daemon-util \
778
	tools/kvm-ifup \
779
	$(pkglib_python_scripts) \
780
	$(HS_MYEXECLIB_PROGS)
781

782
nodist_myexeclib_SCRIPTS = \
783
784
	$(nodist_pkglib_python_scripts)

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