--select-instances hbal manpage update
[ganeti-local] / Makefile.am
index cb750fa..f8f836b 100644 (file)
@@ -21,6 +21,7 @@ CHECK_VERSION = $(top_srcdir)/autotools/check-version
 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
@@ -36,6 +37,7 @@ impexpddir = $(pkgpythondir)/impexpd
 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
@@ -65,6 +67,7 @@ DIRS = \
        lib/masterd \
        lib/rapi \
        lib/server \
+       lib/tools \
        lib/utils \
        lib/watcher \
        man \
@@ -123,7 +126,6 @@ CLEANFILES = \
        epydoc.conf \
        autotools/replace_vars.sed \
        daemons/daemon-util \
-       daemons/ensure-dirs \
        daemons/ganeti-cleaner \
        devel/upload \
        doc/examples/bash_completion \
@@ -247,6 +249,10 @@ server_PYTHON = \
        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 \
@@ -272,11 +278,14 @@ docrst = \
        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 \
@@ -331,7 +340,7 @@ HS_LIB_SRCS = \
        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)
@@ -399,7 +408,7 @@ gnt_scripts = \
        scripts/gnt-node \
        scripts/gnt-os
 
-PYTHON_BOOTSTRAP = \
+PYTHON_BOOTSTRAP_SBIN = \
        daemons/ganeti-confd \
        daemons/ganeti-masterd \
        daemons/ganeti-noded \
@@ -414,6 +423,10 @@ PYTHON_BOOTSTRAP = \
        scripts/gnt-node \
        scripts/gnt-os
 
+PYTHON_BOOTSTRAP = \
+       $(PYTHON_BOOTSTRAP_SBIN) \
+       tools/ensure-dirs
+
 qa_scripts = \
        qa/ganeti-qa.py \
        qa/qa_cluster.py \
@@ -436,11 +449,18 @@ iallocators_SCRIPTS += $(filter htools/hail,$(HS_PROGS))
 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 \
@@ -451,7 +471,7 @@ dist_sbin_SCRIPTS = \
        tools/ganeti-listrunner
 
 nodist_sbin_SCRIPTS = \
-       $(PYTHON_BOOTSTRAP) \
+       $(PYTHON_BOOTSTRAP_SBIN) \
        daemons/ganeti-cleaner
 
 dist_tools_SCRIPTS = \
@@ -469,12 +489,17 @@ pkglib_python_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 \
@@ -486,12 +511,12 @@ EXTRA_DIST = \
        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 \
@@ -610,6 +635,7 @@ python_tests = \
        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 \
@@ -657,12 +683,14 @@ all_python_code = \
        $(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) \
@@ -790,6 +818,11 @@ htools/Ganeti/HTools/Version.hs: htools/Ganeti/HTools/Version.hs.in vcs-version
        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`; \
@@ -846,8 +879,14 @@ lib/_autoconf.py: Makefile vcs-version | lib/.dir
          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
@@ -881,6 +920,7 @@ $(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; }
@@ -949,6 +989,21 @@ check-local: check-dirs
        $(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)
@@ -1092,6 +1147,7 @@ hs-coverage: $(haskell_tests)
        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)