CHECK_NEWS = $(top_srcdir)/autotools/check-news
DOCPP = $(top_srcdir)/autotools/docpp
REPLACE_VARS_SED = autotools/replace_vars.sed
+CONVERT_CONSTANTS = $(top_srcdir)/autotools/convert-constants
# Note: these are automake-specific variables, and must be named after
# the directory + 'dir' suffix
utilsdir = $(pkgpythondir)/utils
toolsdir = $(pkglibdir)/tools
iallocatorsdir = $(pkglibdir)/iallocators
+pytoolsdir = $(pkgpythondir)/tools
docdir = $(datadir)/doc/$(PACKAGE)
# Delete output file if an error occurred while building it
lib/masterd \
lib/rapi \
lib/server \
+ lib/tools \
lib/utils \
lib/watcher \
man \
epydoc.conf \
autotools/replace_vars.sed \
daemons/daemon-util \
- daemons/ensure-dirs \
daemons/ganeti-cleaner \
devel/upload \
doc/examples/bash_completion \
lib/server/noded.py \
lib/server/rapi.py
+pytools_PYTHON = \
+ lib/tools/__init__.py \
+ lib/tools/ensure_dirs.py
+
utils_PYTHON = \
lib/utils/__init__.py \
lib/utils/algo.py \
doc/design-2.4.rst \
doc/design-draft.rst \
doc/design-oob.rst \
+ doc/design-cpu-pinning.rst \
doc/design-query2.rst \
doc/design-x509-ca.rst \
doc/design-http-server.rst \
doc/design-impexp2.rst \
doc/design-lu-generated-jobs.rst \
+ doc/design-multi-reloc.rst \
+ doc/design-network.rst \
doc/cluster-merge.rst \
doc/design-shared-storage.rst \
doc/devnotes.rst \
htools/Ganeti/Luxi.hs \
htools/Ganeti/OpCodes.hs
-HS_BUILT_SRCS = htools/Ganeti/HTools/Version.hs
+HS_BUILT_SRCS = htools/Ganeti/HTools/Version.hs htools/Ganeti/Constants.hs
HS_BUILT_SRCS_IN = $(patsubst %,%.in,$(HS_BUILT_SRCS))
$(RUN_IN_TEMPDIR): | $(all_dirfiles)
scripts/gnt-node \
scripts/gnt-os
-PYTHON_BOOTSTRAP = \
+PYTHON_BOOTSTRAP_SBIN = \
daemons/ganeti-confd \
daemons/ganeti-masterd \
daemons/ganeti-noded \
scripts/gnt-node \
scripts/gnt-os
+PYTHON_BOOTSTRAP = \
+ $(PYTHON_BOOTSTRAP_SBIN) \
+ tools/ensure-dirs
+
qa_scripts = \
qa/ganeti-qa.py \
qa/qa_cluster.py \
endif
$(HS_ALL_PROGS): %: %.hs $(HS_LIB_SRCS) $(HS_BUILT_SRCS) Makefile
- BINARY=$(@:htools/%=%); \
- $(GHC) --make \
+ @if [ -z "$(HTOOLS)" ]; then \
+ echo "Error: htools compilation disabled at configure time" 1>&2 ;\
+ exit 1; \
+ fi
+ @BINARY=$(@:htools/%=%); \
+ if [ "$BINARY" = "test" ] && [ -z "$(GHC_PKG_QUICKCHECK)" ]; then \
+ echo "Error: cannot run unittests without the QuickCheck library (see devnotes.rst)" 1>&2; \
+ exit 1; \
+ fi
+ BINARY=$(@:htools/%=%); $(GHC) --make \
$(HFLAGS) $(HEXTRA) $(HTOOLS_NOCURL) \
- -osuf $$BINARY.o -hisuf $$BINARY.hi \
- $@
+ -osuf $$BINARY.o -hisuf $$BINARY.hi $@
# for the htools/test binary, we need to enable profiling/coverage
htools/test: HEXTRA=-fhpc -Wwarn -fno-warn-missing-signatures \
tools/ganeti-listrunner
nodist_sbin_SCRIPTS = \
- $(PYTHON_BOOTSTRAP) \
+ $(PYTHON_BOOTSTRAP_SBIN) \
daemons/ganeti-cleaner
dist_tools_SCRIPTS = \
daemons/import-export \
tools/check-cert-expired
+nodist_pkglib_python_scripts = \
+ tools/ensure-dirs
+
pkglib_SCRIPTS = \
daemons/daemon-util \
- daemons/ensure-dirs \
tools/kvm-ifup \
$(pkglib_python_scripts)
+nodist_pkglib_SCRIPTS = \
+ $(nodist_pkglib_python_scripts)
+
EXTRA_DIST = \
NEWS \
UPGRADE \
autotools/check-news \
autotools/check-tar \
autotools/check-version \
+ autotools/convert-constants \
autotools/docpp \
autotools/gen-coverage \
autotools/testrunner \
$(RUN_IN_TEMPDIR) \
daemons/daemon-util.in \
- daemons/ensure-dirs.in \
daemons/ganeti-cleaner.in \
$(pkglib_python_scripts) \
devel/upload.in \
test/ganeti.runtime_unittest.py \
test/ganeti.serializer_unittest.py \
test/ganeti.ssh_unittest.py \
+ test/ganeti.tools.ensure_dirs_unittest.py \
test/ganeti.uidpool_unittest.py \
test/ganeti.utils.algo_unittest.py \
test/ganeti.utils.filelock_unittest.py \
$(dist_sbin_SCRIPTS) \
$(dist_tools_SCRIPTS) \
$(pkglib_python_scripts) \
+ $(nodist_pkglib_python_scripts) \
$(python_tests) \
$(pkgpython_PYTHON) \
$(client_PYTHON) \
$(hypervisor_PYTHON) \
$(rapi_PYTHON) \
$(server_PYTHON) \
+ $(pytools_PYTHON) \
$(http_PYTHON) \
$(confd_PYTHON) \
$(masterd_PYTHON) \
VCSVER=`cat $(abs_top_srcdir)/vcs-version`; \
sed -e "s/%ver%/$$VCSVER/" < $< > $@
+htools/Ganeti/Constants.hs: htools/Ganeti/Constants.hs.in \
+ lib/constants.py lib/_autoconf.py $(CONVERT_CONSTANTS)
+ set -e; \
+ { cat $< ; PYTHONPATH=. $(CONVERT_CONSTANTS); } > $@
+
lib/_autoconf.py: Makefile vcs-version | lib/.dir
set -e; \
VCSVER=`cat $(abs_top_srcdir)/vcs-version`; \
echo "CONFD_USER = '$(CONFD_USER)'"; \
echo "CONFD_GROUP = '$(CONFD_GROUP)'"; \
echo "NODED_USER = '$(NODED_USER)'"; \
+ echo "NODED_GROUP = '$(NODED_GROUP)'"; \
echo "VCS_VERSION = '$$VCSVER'"; \
echo "DISK_SEPARATOR = '$(DISK_SEPARATOR)'"; \
+ if [ "$(HTOOLS)" ]; then \
+ echo "HTOOLS = True"; \
+ else \
+ echo "HTOOLS = False"; \
+ fi; \
} > $@
$(REPLACE_VARS_SED): Makefile
daemons/ganeti-%: MODULE = ganeti.server.$(patsubst ganeti-%,%,$(notdir $@))
daemons/ganeti-watcher: MODULE = ganeti.watcher
scripts/%: MODULE = ganeti.client.$(subst -,_,$(notdir $@))
+tools/ensure-dirs: MODULE = ganeti.tools.ensure_dirs
$(PYTHON_BOOTSTRAP): Makefile | $(all_dirfiles)
test -n "$(MODULE)" || { echo Missing module; exit 1; }
$(CHECK_PYTHON_CODE) $(check_python_code)
$(CHECK_VERSION) $(VERSION) $(top_srcdir)/NEWS
$(CHECK_NEWS) < $(top_srcdir)/NEWS
+ expver=$(VERSION_MAJOR).$(VERSION_MINOR); \
+ if test "`head -n 1 $(top_srcdir)/README`" != "Ganeti $$expver"; then \
+ echo "Incorrect version in README, expected $$expver"; \
+ exit 1; \
+ fi; \
+ if test "`sed -ne '4 p' $(top_srcdir)/doc/iallocator.rst`" != \
+ "Documents Ganeti version $$expver"; then \
+ echo "Incorrect version in iallocator.rst, expected $$expver"; \
+ exit 1; \
+ fi
+
+.PHONY: hs-check
+hs-check: htools/test
+ @rm -f test.tix
+ ./htools/test
.PHONY: lint
lint: $(BUILT_SOURCES)
mkdir -p $(COVERAGE_HS_DIR)
hpc markup --destdir=$(COVERAGE_HS_DIR) htools/test $(HPCEXCL)
hpc report htools/test $(HPCEXCL)
+ ln -sf hpc_index.html $(COVERAGE_HS_DIR)/index.html
# Special "kind-of-QA" target for htools, needs special setup (all
# tools compiled with -fhpc)