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
HTOOLS_DIRS = \
htools \
htools/Ganeti \
- htools/Ganeti/HTools
+ htools/Ganeti/HTools \
+ htools/Ganeti/HTools/Program
DIRS = \
autotools \
$(APIDOC_PY_DIR) \
$(APIDOC_HS_DIR) \
$(APIDOC_HS_DIR)/Ganeti $(APIDOC_HS_DIR)/Ganeti/HTools \
+ $(APIDOC_HS_DIR)/Ganeti/HTools/Program \
$(COVERAGE_DIR) \
$(COVERAGE_PY_DIR) \
$(COVERAGE_HS_DIR) \
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/design-chained-jobs.rst \
doc/cluster-merge.rst \
doc/design-shared-storage.rst \
doc/devnotes.rst \
doc/walkthrough.rst
HS_PROGS = \
- htools/hbal \
htools/hscan \
- htools/hail \
- htools/hspace
+ htools/hspace \
+ htools/htools
+HS_BIN_ROLES = hbal
HS_ALL_PROGS = $(HS_PROGS) htools/test
HS_PROG_SRCS = $(patsubst %,%.hs,$(HS_ALL_PROGS))
# extra flags that can be overriden on the command line
HEXTRA =
# exclude options for coverage reports
-HPCEXCL = --exclude Main --exclude Ganeti.HTools.QC
+HPCEXCL = --exclude Main --exclude Ganeti.HTools.QC \
+ --exclude Ganeti.Constants \
+ --exclude Ganeti.HTools.Version
HS_LIB_SRCS = \
htools/Ganeti/HTools/CLI.hs \
htools/Ganeti/HTools/Cluster.hs \
+ htools/Ganeti/HTools/Compat.hs \
htools/Ganeti/HTools/Container.hs \
htools/Ganeti/HTools/ExtLoader.hs \
htools/Ganeti/HTools/Group.hs \
htools/Ganeti/HTools/Text.hs \
htools/Ganeti/HTools/Types.hs \
htools/Ganeti/HTools/Utils.hs \
+ htools/Ganeti/HTools/Program/Hail.hs \
+ htools/Ganeti/HTools/Program/Hbal.hs \
htools/Ganeti/Jobs.hs \
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)
qa/qa_utils.py
bin_SCRIPTS =
-iallocators_SCRIPTS =
if WANT_HTOOLS
bin_SCRIPTS += $(filter-out htools/hail,$(HS_PROGS))
-iallocators_SCRIPTS += $(filter htools/hail,$(HS_PROGS))
+install-exec-hook:
+ @mkdir_p@ $(DESTDIR)$(iallocatorsdir)
+ $(LN_S) -f $(DESTDIR)$(bindir)/htools \
+ $(DESTDIR)$(iallocatorsdir)/hail
+ for role in $(HS_BIN_ROLES); do \
+ $(LN_S) -f $(DESTDIR)$(bindir)/htools \
+ $(DESTDIR)$(bindir)/$$role ; \
+ done
endif
$(HS_ALL_PROGS): %: %.hs $(HS_LIB_SRCS) $(HS_BUILT_SRCS) Makefile
echo "Error: htools compilation disabled at configure time" 1>&2 ;\
exit 1; \
fi
- BINARY=$(@:htools/%=%); \
- if [ "$$BINARY" = "test" ] && [ -z "$(GHC_PKG_QUICKCHECK)" ]; then \
+ @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; \
- $(GHC) --make \
- $(HFLAGS) $(HEXTRA) $(HTOOLS_NOCURL) \
- -osuf $$BINARY.o -hisuf $$BINARY.hi \
- $@
+ fi
+ BINARY=$(@:htools/%=%); $(GHC) --make \
+ $(HFLAGS) $(HEXTRA) \
+ $(HTOOLS_NOCURL) $(HTOOLS_PARALLEL3) \
+ -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 \
$(PYTHON_BOOTSTRAP_SBIN) \
daemons/ganeti-cleaner
-dist_tools_SCRIPTS = \
+dist_tools_PYTHON = \
tools/burnin \
tools/cfgshell \
tools/cfgupgrade \
tools/setup-ssh \
tools/sanitize-config
+dist_tools_SCRIPTS = \
+ $(dist_tools_PYTHON) \
+ tools/kvm-console-wrapper \
+ tools/xm-console-wrapper
+
pkglib_python_scripts = \
daemons/import-export \
tools/check-cert-expired
autotools/check-news \
autotools/check-tar \
autotools/check-version \
+ autotools/convert-constants \
autotools/docpp \
autotools/gen-coverage \
autotools/testrunner \
man/hail.1 \
man/hbal.1 \
man/hscan.1 \
- man/hspace.1
+ man/hspace.1 \
+ man/htools.1
manrst = $(patsubst %.1,%.rst,$(patsubst %.7,%.rst,$(patsubst %.8,%.rst,$(man_MANS))))
manhtml = $(patsubst %.rst,%.html,$(manrst))
$(python_tests)
nodist_TESTS =
-if WANT_HTOOLS
+if WANT_HTOOLSTESTS
nodist_TESTS += $(haskell_tests)
endif
all_python_code = \
$(dist_sbin_SCRIPTS) \
- $(dist_tools_SCRIPTS) \
+ $(dist_tools_PYTHON) \
$(pkglib_python_scripts) \
$(nodist_pkglib_python_scripts) \
$(python_tests) \
ganeti \
ganeti/http/server.py \
$(dist_sbin_SCRIPTS) \
- $(dist_tools_SCRIPTS) \
+ $(dist_tools_PYTHON) \
$(pkglib_python_scripts) \
$(BUILD_BASH_COMPLETION) \
$(DOCPP) \
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 \
$(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)
@test -n "$(HADDOCK)" || \
{ echo 'haddock' not found during configure; exit 1; }
rm -rf $(APIDOC_HS_DIR)/*
- @mkdir_p@ $(APIDOC_HS_DIR)/Ganeti/HTools
+ @mkdir_p@ $(APIDOC_HS_DIR)/Ganeti/HTools/Program
$(HSCOLOUR) -print-css > $(APIDOC_HS_DIR)/Ganeti/hscolour.css
ln -s ../hscolour.css $(APIDOC_HS_DIR)/Ganeti/HTools/hscolour.css
set -e ; \
then OPTGHC="--optghc=$(HTOOLS_NOCURL)"; \
else OPTGHC=""; \
fi; \
- RELSRCS="$(HS_LIB_SRCS:htools/%=%)"; \
+ if [ "$(HTOOLS_PARALLEL3)" ]; \
+ then OPTGHC="$$OPTGHC --optghc=$(HTOOLS_PARALLEL3)"; \
+ fi; \
+ RELSRCS="$(HS_LIB_SRCS:htools/%=%) $(HS_BUILT_SRCS:htools/%=%)"; \
for file in $$RELSRCS; do \
hfile=`echo $$file|sed 's/\\.hs$$//'`.html; \
$(HSCOLOUR) -css -anchor $$file > ../$(APIDOC_HS_DIR)/$$hfile ; \
.PHONY: hs-coverage
hs-coverage: $(haskell_tests)
cd htools && rm -f *.tix *.mix && ./test
- mkdir -p $(COVERAGE_HS_DIR)
+ @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