Makefile.am 8.28 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
ACLOCAL_AMFLAGS = -I autotools
13
DOCBOOK_WRAPPER = $(top_srcdir)/autotools/docbook-wrapper
Michael Hanselmann's avatar
Michael Hanselmann committed
14
BUILD_RAPI_RESOURCE_DOC = $(top_srcdir)/doc/build-rapi-resources-doc
15 16 17
REPLACE_VARS_SED = autotools/replace_vars.sed

hypervisordir = $(pkgpythondir)/hypervisor
18
rapidir = $(pkgpythondir)/rapi
19 20 21 22 23 24 25 26 27 28 29
toolsdir = $(pkglibdir)/tools
docdir = $(datadir)/doc/$(PACKAGE)

DIRS = \
	autotools \
	daemons \
	devel \
	doc \
	doc/examples \
	lib \
	lib/hypervisor \
30
	lib/rapi \
31 32 33 34 35 36 37 38 39 40 41 42 43
	man \
	qa \
	scripts \
	test \
	test/data \
	tools

CLEANFILES = \
	autotools/replace_vars.sed \
	devel/upload \
	doc/*.html \
	doc/*.in \
	doc/*.pdf \
Michael Hanselmann's avatar
Michael Hanselmann committed
44
	doc/rapi-resources.sgml \
45 46 47 48
	doc/examples/ganeti.initd \
	doc/examples/ganeti.cron \
	lib/*.py[co] \
	lib/hypervisor/*.py[co] \
49
	lib/rapi/*.py[co] \
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
	man/*.[78] \
	man/*.in \
	qa/*.py[co] \
	test/*.py[co] \
	stamp-directories \
	$(nodist_pkgpython_PYTHON)

nodist_pkgpython_PYTHON = \
	lib/_autoconf.py

pkgpython_PYTHON = \
	lib/__init__.py \
	lib/backend.py \
	lib/bdev.py \
	lib/bootstrap.py \
	lib/cli.py \
	lib/cmdlib.py \
	lib/config.py \
	lib/constants.py \
69
	lib/daemon.py \
70
	lib/errors.py \
71
	lib/http.py \
72
	lib/jqueue.py \
73
	lib/jstore.py \
74 75 76 77 78 79 80 81 82
	lib/locking.py \
	lib/luxi.py \
	lib/mcpu.py \
	lib/objects.py \
	lib/opcodes.py \
	lib/rpc.py \
	lib/serializer.py \
	lib/ssconf.py \
	lib/ssh.py \
83 84
	lib/utils.py \
	lib/workerpool.py
85 86 87 88 89

hypervisor_PYTHON = \
	lib/hypervisor/__init__.py \
	lib/hypervisor/hv_base.py \
	lib/hypervisor/hv_fake.py \
Guido Trotter's avatar
Guido Trotter committed
90
	lib/hypervisor/hv_kvm.py \
91 92
	lib/hypervisor/hv_xen.py

93 94
rapi_PYTHON = \
	lib/rapi/__init__.py \
95 96 97 98
	lib/rapi/baserlib.py \
	lib/rapi/connector.py \
	lib/rapi/rlib1.py \
	lib/rapi/rlib2.py
99 100


101 102 103 104
docsgml = \
	doc/hooks.sgml \
	doc/install.sgml \
	doc/admin.sgml \
105
	doc/rapi.sgml \
106 107
	doc/iallocator.sgml

Michael Hanselmann's avatar
Michael Hanselmann committed
108
docrst = \
109
	doc/design-2.0-cluster-parameters.rst \
Michael Hanselmann's avatar
Michael Hanselmann committed
110 111 112 113 114
	doc/design-2.0-commandline-parameters.rst \
	doc/design-2.0-disk-handling.rst \
	doc/design-2.0-index.rst \
	doc/design-2.0-job-queue.rst \
	doc/design-2.0-locking.rst \
Oleksiy Mishchenko's avatar
Oleksiy Mishchenko committed
115
	doc/design-2.0-master-daemon.rst \
116
	doc/design-2.0-os-interface.rst \
117 118
	doc/design-2.0-rapi-changes.rst \
	doc/security.rst
Michael Hanselmann's avatar
Michael Hanselmann committed
119

120
doc_DATA = \
Michael Hanselmann's avatar
Michael Hanselmann committed
121
	$(patsubst %.rst,%.html,$(docrst)) \
122 123 124 125 126 127 128
	$(patsubst %.sgml,%.html,$(docsgml)) \
	$(patsubst %.sgml,%.pdf,$(docsgml))

dist_sbin_SCRIPTS = \
	daemons/ganeti-noded \
	daemons/ganeti-watcher \
	daemons/ganeti-masterd \
129
	daemons/ganeti-rapi \
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
	scripts/gnt-backup \
	scripts/gnt-cluster \
	scripts/gnt-debug \
	scripts/gnt-instance \
	scripts/gnt-job \
	scripts/gnt-node \
	scripts/gnt-os

dist_tools_SCRIPTS = \
	tools/burnin \
	tools/cfgshell \
	tools/cfgupgrade \
	tools/lvmstrap

EXTRA_DIST = \
	NEWS \
	DEVNOTES \
	autotools/docbook-wrapper \
	devel/upload.in \
Michael Hanselmann's avatar
Michael Hanselmann committed
149
	$(docrst) \
150
	$(docsgml) \
151
	doc/build-rapi-resources-doc \
152 153 154
	doc/examples/ganeti.initd.in \
	doc/examples/ganeti.cron.in \
	doc/examples/dumb-allocator \
155
	doc/locking.txt \
156 157 158 159 160 161 162
	test/testutils.py \
	test/mocks.py \
	$(dist_TESTS) \
	$(TEST_FILES) \
	man/footer.sgml \
	$(mansgml) \
	qa/ganeti-qa.py \
Michael Hanselmann's avatar
Michael Hanselmann committed
163
	qa/qa-sample.json \
164 165 166 167 168 169 170 171
	qa/qa_cluster.py \
	qa/qa_config.py \
	qa/qa_daemon.py \
	qa/qa_env.py \
	qa/qa_error.py \
	qa/qa_instance.py \
	qa/qa_node.py \
	qa/qa_os.py \
Oleksiy Mishchenko's avatar
Oleksiy Mishchenko committed
172
	qa/qa_rapi.py \
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
	qa/qa_tags.py \
	qa/qa_utils.py

man_MANS = \
	man/ganeti.7 \
	man/ganeti-noded.8 \
	man/ganeti-os-interface.7 \
	man/ganeti-watcher.8 \
	man/gnt-backup.8 \
	man/gnt-cluster.8 \
	man/gnt-instance.8 \
	man/gnt-node.8 \
	man/gnt-os.8

maninput = $(patsubst %.7,%.in,$(patsubst %.8,%.in,$(man_MANS)))
mansgml = $(patsubst %.in,%.sgml,$(maninput))

TEST_FILES = \
	test/data/bdev-both.txt \
	test/data/bdev-disk.txt \
	test/data/bdev-net.txt \
	test/data/proc_drbd8.txt

dist_TESTS = \
	test/ganeti.config_unittest.py \
	test/ganeti.hooks_unittest.py \
	test/ganeti.utils_unittest.py \
	test/ganeti.bdev_unittest.py \
	test/ganeti.ssh_unittest.py \
	test/ganeti.locking_unittest.py \
203
	test/ganeti.serializer_unittest.py \
204
	test/ganeti.workerpool_unittest.py \
205
	test/ganeti.rapi.resources_unittest.py \
206
	test/ganeti.http_unittest.py \
207 208
	test/ganeti.constants_unittest.py \
	test/ganeti.cli_unittest.py
209 210 211 212 213 214 215

nodist_TESTS =

TESTS = $(dist_TESTS) $(nodist_TESTS)

TESTS_ENVIRONMENT = PYTHONPATH=.:$(top_builddir)

216

217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234
all-local: stamp-directories lib/_autoconf.py devel/upload \
	doc/examples/ganeti.initd doc/examples/ganeti.cron

devel/upload: devel/upload.in stamp-directories $(REPLACE_VARS_SED)
	sed -f $(REPLACE_VARS_SED) < $< > $@
	chmod u+x $@

doc/examples/ganeti.%: doc/examples/ganeti.%.in stamp-directories \
		$(REPLACE_VARS_SED)
	sed -f $(REPLACE_VARS_SED) < $< > $@

doc/%.in: doc/%.sgml stamp-directories $(REPLACE_VARS_SED)
	sed -f $(REPLACE_VARS_SED) < $< > $@

man/%.in: man/%.sgml stamp-directories $(REPLACE_VARS_SED)
	sed -f $(REPLACE_VARS_SED) < $< > $@

doc/%.pdf: doc/%.in $(DOCBOOK_WRAPPER)
235
	$(DOCBOOK_WRAPPER) "$(DOCBOOK2PDF)" $< $@
236 237

doc/%.html: doc/%.in $(DOCBOOK_WRAPPER)
238
	$(DOCBOOK_WRAPPER) "$(DOCBOOK2HTML) --nochunks" $< $@
239

Michael Hanselmann's avatar
Michael Hanselmann committed
240 241 242
doc/%.html: doc/%.rst
	$(RST2HTML) $< $@

243
doc/rapi.pdf doc/rapi.html doc/rapi.in: doc/rapi-resources.sgml
244

245
doc/rapi-resources.sgml: $(BUILD_RAPI_RESOURCE_DOC) lib/rapi/connector.py
Michael Hanselmann's avatar
Michael Hanselmann committed
246
	PYTHONPATH=.:$(top_builddir) $(BUILD_RAPI_RESOURCE_DOC) > $@ || rm -f $@
247

248
man/%.7: man/%.in man/footer.sgml $(DOCBOOK_WRAPPER)
249
	$(DOCBOOK_WRAPPER) "$(DOCBOOK2MAN)" $< $@
250 251

man/%.8: man/%.in man/footer.sgml $(DOCBOOK_WRAPPER)
252
	$(DOCBOOK_WRAPPER) "$(DOCBOOK2MAN)" $< $@
253 254 255

man/footer.sgml $(TESTS): srclinks

Michael Hanselmann's avatar
Michael Hanselmann committed
256
$(TESTS) $(BUILD_RAPI_RESOURCE_DOC): ganeti lib/_autoconf.py
257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276

lib/_autoconf.py: Makefile stamp-directories
	set -e; \
	{ echo '# This file is automatically generated, do not edit!'; \
	  echo '#'; \
	  echo "PACKAGE_VERSION = '$(PACKAGE_VERSION)'"; \
	  echo "VERSION_MAJOR = '$(VERSION_MAJOR)'"; \
	  echo "VERSION_MINOR = '$(VERSION_MINOR)'"; \
	  echo "VERSION_REVISION = '$(VERSION_REVISION)'"; \
	  echo "VERSION_SUFFIX = '$(VERSION_SUFFIX)'"; \
	  echo "VERSION_FULL = '$(VERSION_FULL)'"; \
	  echo "LOCALSTATEDIR = '$(localstatedir)'"; \
	  echo "SYSCONFDIR = '$(sysconfdir)'"; \
	  echo "SSH_INITD_SCRIPT = '$(SSH_INITD_SCRIPT)'"; \
	  echo "EXPORT_DIR = '$(EXPORT_DIR)'"; \
	  echo "OS_SEARCH_PATH = [$(OS_SEARCH_PATH)]"; \
	  echo "XEN_KERNEL = '$(XEN_KERNEL)'"; \
	  echo "XEN_INITRD = '$(XEN_INITRD)'"; \
	  echo "FILE_STORAGE_DIR = '$(FILE_STORAGE_DIR)'"; \
	  echo "IALLOCATOR_SEARCH_PATH = [$(IALLOCATOR_SEARCH_PATH)]"; \
277
	  echo "KVM_PATH = '$(KVM_PATH)'"; \
278 279 280 281 282 283 284 285 286 287 288 289
	} > $@

$(REPLACE_VARS_SED): Makefile stamp-directories
	set -e; \
	{ echo 's#@PREFIX@#$(prefix)#g'; \
	  echo 's#@SYSCONFDIR@#$(sysconfdir)#g'; \
	  echo 's#@LOCALSTATEDIR@#$(localstatedir)#g'; \
	  echo 's#@SBINDIR@#$(sbindir)#g'; \
	  echo 's#@GANETI_VERSION@#$(PACKAGE_VERSION)#g'; \
	  echo 's#@LOCALSTATEDIR@#$(localstatedir)#g'; \
	  echo 's#@CUSTOM_XEN_KERNEL@#$(XEN_KERNEL)#g'; \
	  echo 's#@CUSTOM_XEN_INITRD@#$(XEN_INITRD)#g'; \
Michael Hanselmann's avatar
Michael Hanselmann committed
290 291 292 293
	  echo '/@INCLUDE_RAPI_RESOURCES@/ {'; \
	  echo '  r $(abs_top_builddir)/doc/rapi-resources.sgml'; \
	  echo '  d'; \
	  echo '}'; \
294 295 296 297 298 299 300
	} > $@

# We need to create symlinks because "make distcheck" will not install Python
# files when building.
#.PHONY: srclinks
srclinks: stamp-directories
	set -e; \
301
	for i in man/footer.sgml $(pkgpython_PYTHON) $(hypervisor_PYTHON) $(rapi_PYTHON); do \
302 303 304 305
		if test ! -f $$i -a -f $(abs_top_srcdir)/$$i; then \
			$(LN_S) $(abs_top_srcdir)/$$i $$i; \
		fi; \
	done
306

Michael Hanselmann's avatar
Michael Hanselmann committed
307 308 309 310
.PHONY: ganeti
ganeti:
	cd $(top_builddir) && rm -f $@ && $(LN_S) lib $@

Iustin Pop's avatar
Iustin Pop committed
311 312 313 314 315 316 317
# a dist hook rule for catching revision control directories
distcheck-hook:
	if find $(top_distdir) | grep -F -e '.svn' -e '.git'; then \
		echo "Found revision control files in final archive" 1>&2 ; \
		exit 1; \
	fi

Iustin Pop's avatar
Iustin Pop committed
318
install-exec-local:
319
	@mkdir_p@ "$(DESTDIR)${localstatedir}/lib/ganeti" \
320 321
	  "$(DESTDIR)${localstatedir}/log/ganeti" \
	  "$(DESTDIR)${localstatedir}/run/ganeti"
322 323 324 325 326

stamp-directories: Makefile
	@mkdir_p@ $(DIRS)
	touch $@

Iustin Pop's avatar
Iustin Pop committed
327 328 329 330 331 332 333 334 335 336 337 338 339
.PHONY: apidoc
apidoc:
	test -e doc/api || mkdir doc/api
	TMPDIR=`mktemp -d ./temp-epydoc.XXXXXX` && { \
		cp -r scripts daemons lib $$TMPDIR && \
		( \
			cd $$TMPDIR && \
			mv lib ganeti && \
			epydoc --conf ../epydoc.conf \
		) ; \
		rm -rf $$TMPDIR ; \
	}

340
# vim: set noet :