test/data/ovfdata/other \
tools
-BUILDTIME_DIR_AUTOCREATE = \
- scripts \
- $(APIDOC_DIR) \
+ALL_APIDOC_HS_DIRS = \
$(APIDOC_HS_DIR) \
$(APIDOC_HS_DIR)/Ganeti \
$(APIDOC_HS_DIR)/Ganeti/Block \
$(APIDOC_HS_DIR)/Ganeti/HTools \
$(APIDOC_HS_DIR)/Ganeti/HTools/Backend \
$(APIDOC_HS_DIR)/Ganeti/HTools/Program \
- $(APIDOC_HS_DIR)/Ganeti/Query \
+ $(APIDOC_HS_DIR)/Ganeti/Query
+
+BUILDTIME_DIR_AUTOCREATE = \
+ scripts \
+ $(APIDOC_DIR) \
+ $(ALL_APIDOC_HS_DIRS) \
$(APIDOC_PY_DIR) \
$(COVERAGE_DIR) \
$(COVERAGE_HS_DIR) \
DIRCHECK_EXCLUDE = \
$(BUILDTIME_DIRS) \
ganeti-[0-9]*.[0-9]*.[0-9]* \
- doc/html/_*
+ doc/html/_* \
+ autom4te.cache
# some helper vars
COVERAGE_DIR = doc/coverage
doc/design-node-add.rst \
doc/design-oob.rst \
doc/design-ovf-support.rst \
+ doc/design-opportunistic-locking.rst \
doc/design-partitioned.rst \
doc/design-query-splitting.rst \
doc/design-query2.rst \
--exclude Ganeti.HTools.QC \
--exclude Ganeti.THH \
--exclude Ganeti.Version \
+ --exclude Test.Ganeti.Attoparsec \
--exclude Test.Ganeti.TestCommon \
--exclude Test.Ganeti.TestHTools \
--exclude Test.Ganeti.TestHelper \
htest/Test/Ganeti/Attoparsec.hs \
htest/Test/Ganeti/BasicTypes.hs \
htest/Test/Ganeti/Block/Drbd/Parser.hs \
+ htest/Test/Ganeti/Block/Drbd/Types.hs \
htest/Test/Ganeti/Common.hs \
htest/Test/Ganeti/Confd/Utils.hs \
htest/Test/Ganeti/Daemon.hs \
@mkdir_p@ $(DESTDIR)$(iallocatorsdir)
# FIXME: this is a hardcoded logic, instead of auto-resolving
$(LN_S) -f ../../../bin/htools \
- $(DESTDIR)$(iallocatorsdir)/hail
+ $(DESTDIR)$(iallocatorsdir)/hail
for role in $(HS_BIN_ROLES); do \
- $(LN_S) -f htools \
- $(DESTDIR)$(bindir)/$$role ; \
+ $(LN_S) -f htools $(DESTDIR)$(bindir)/$$role ; \
done
endif
.PHONY: hs-prof hs-prof-quick
hs-prof:
$(MAKE) $(AM_MAKEFLAGS) clean
- $(MAKE) $(AM_MAKEFLAGS) $(HS_ALL_PROGS) HEXTRA="-osuf .o"
+ $(MAKE) $(AM_MAKEFLAGS) $(HS_ALL_PROGS) HEXTRA="-osuf o"
rm -f $(HS_ALL_PROGS)
$(MAKE) $(AM_MAKEFLAGS) hs-prof-quick
hs-prof-quick:
- $(MAKE) $(AM_MAKEFLAGS) $(HS_ALL_PROGS) HEXTRA="-osuf .prof_o -prof -auto-all"
+ $(MAKE) $(AM_MAKEFLAGS) $(HS_ALL_PROGS) HEXTRA="-osuf prof_o -prof -auto-all"
dist_sbin_SCRIPTS = \
tools/ganeti-listrunner
stamp-srclinks: Makefile | stamp-directories
set -e; \
for i in $(srclink_files); do \
- if test ! -f $$i -a -f $(abs_top_srcdir)/$$i; then \
- $(LN_S) $(abs_top_srcdir)/$$i $$i; \
- fi; \
+ if test ! -f $$i -a -f $(abs_top_srcdir)/$$i; then \
+ $(LN_S) $(abs_top_srcdir)/$$i $$i; \
+ fi; \
done
touch $@
.PHONY: check-dirs
check-dirs: $(GENERATED_FILES)
@set -e; \
- find . -type d \( \( -name . \) -o \( \
- -name .git -o \
- -name autom4te.cache \
- \) -prune -o -print \) | { \
- error=; \
- while read dir; do \
- case "$$dir" in \
- $(strip $(patsubst %,(./%) ;;,$(DIRCHECK_EXCLUDE) $(DIRS))) \
- *) error=1; echo "Directory $$dir not listed in Makefile" >&2 ;; \
- esac; \
- done; \
- for dir in $(DIRS); do \
- if ! test -d "$$dir"; then \
- echo "Directory $$dir listed in DIRS does not exist" >&2; \
- error=1; \
- fi \
- done; \
- if test -n "$$error"; then exit 1; else exit 0; fi; \
+ find . -type d \( -name . -o -name .git -prune -o -print \) | { \
+ error=; \
+ while read dir; do \
+ case "$$dir" in \
+ $(strip $(patsubst %,(./%) ;;,$(DIRCHECK_EXCLUDE) $(DIRS))) \
+ *) error=1; echo "Directory $$dir not listed in Makefile" >&2 ;; \
+ esac; \
+ done; \
+ for dir in $(DIRS); do \
+ if ! test -d "$$dir"; then \
+ echo "Directory $$dir listed in DIRS does not exist" >&2; \
+ error=1; \
+ fi \
+ done; \
+ test -z "$$error"; \
}
.PHONY: check-local
PYTHONPATH=. $(RUN_IN_TEMPDIR) $(CURDIR)/$(CHECK_IMPORTS) . $(standalone_python_modules)
@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; \
+ echo "Incorrect version in README, expected $$expver"; \
+ exit 1; \
fi; \
for file in doc/iallocator.rst doc/hooks.rst doc/virtual-cluster.rst \
- doc/security.rst; do \
- if test "`sed -ne '4 p' $(top_srcdir)/$$file`" != \
- "Documents Ganeti version $$expver"; then \
- echo "Incorrect version in $$file, expected $$expver"; \
- exit 1; \
- fi; \
+ doc/security.rst; do \
+ if test "`sed -ne '4 p' $(top_srcdir)/$$file`" != \
+ "Documents Ganeti version $$expver"; then \
+ echo "Incorrect version in $$file, expected $$expver"; \
+ exit 1; \
+ fi; \
done; \
if ! test -f $(top_srcdir)/doc/design-$$expver.rst; then \
- echo "File $(top_srcdir)/doc/design-$$expver.rst not found"; \
- exit 1; \
+ echo "File $(top_srcdir)/doc/design-$$expver.rst not found"; \
+ exit 1; \
fi; \
- if test $$(wc --max-line-length < $(top_srcdir)/configure.ac) -gt 80; then \
- echo 'Longest line in configure.ac is longer than 80 characters' >&2; \
- fi
+ error= ; \
+ for file in configure.ac $(HS_LIBTEST_SRCS) $(HS_PROG_SRCS); do \
+ if test $$(wc --max-line-length < $(top_srcdir)/$$file) -gt 80; then \
+ echo "Longest line in $$file is longer than 80 characters" >&2; \
+ error=1; \
+ fi; \
+ done; \
+ test -z "$$error"
.PHONY: hs-check
hs-check: htest/test htest/hpc-htools $(HS_BUILT_TEST_HELPERS)
pep8: $(GENERATED_FILES)
@test -n "$(PEP8)" || { echo 'pep8' not found during configure; exit 1; }
$(PEP8) --ignore='$(PEP8_IGNORE)' --exclude='$(PEP8_EXCLUDE)' \
- --repeat $(pep8_python_code)
+ --repeat $(pep8_python_code)
# FIXME: remove ignore "Use void" when GHC 6.x is deprecated
+HLINT_EXCLUDES = htools/Ganeti/THH.hs htest/hpc-htools.hs
.PHONY: hlint
hlint: $(HS_BUILT_SRCS) htools/lint-hints.hs
@test -n "$(HLINT)" || { echo 'hlint' not found during configure; exit 1; }
--ignore "Use &&&" \
--ignore "Use void" \
--hint htools/lint-hints \
- $(filter-out htools/Ganeti/THH.hs,$(HS_LIBTEST_SRCS) $(HS_PROG_SRCS))
+ $(filter-out $(HLINT_EXCLUDES),$(HS_LIBTEST_SRCS) $(HS_PROG_SRCS))
# a dist hook rule for updating the vcs-version file; this is
# hardcoded due to where it needs to build the file...
# a distcheck hook rule for catching revision control directories
distcheck-hook:
if find $(top_distdir) -name .svn -or -name .git | grep .; then \
- echo "Found revision control files in final archive." 1>&2; \
- exit 1; \
+ echo "Found revision control files in final archive." 1>&2; \
+ exit 1; \
fi
if find $(top_distdir) -name '*.py[co]' | grep .; then \
- echo "Found Python byte code in final archive." 1>&2; \
- exit 1; \
+ echo "Found Python byte code in final archive." 1>&2; \
+ exit 1; \
fi
if find $(top_distdir) -name '*~' | grep .; then \
- echo "Found backup files in final archive." 1>&2; \
- exit 1; \
+ echo "Found backup files in final archive." 1>&2; \
+ exit 1; \
fi
# Empty files or directories should not be distributed. They can cause
# unnecessary warnings for packagers. Directories used by automake during
# distcheck must be excluded.
if find $(top_distdir) -empty -and -not \( \
- -path $(top_distdir)/_build -or \
- -path $(top_distdir)/_inst \) | grep .; then \
- echo "Found empty files or directories in final archive." 1>&2; \
- exit 1; \
+ -path $(top_distdir)/_build -or \
+ -path $(top_distdir)/_inst \) | grep .; then \
+ echo "Found empty files or directories in final archive." 1>&2; \
+ exit 1; \
fi
if test -n "$(BUILD_RELEASE)" && \
grep -n -H -E '^\*.*unreleased' $(top_distdir)/NEWS; then \
- echo "Found unreleased version in NEWS." >&2; \
- exit 1; \
+ echo "Found unreleased version in NEWS." >&2; \
+ exit 1; \
fi
# When building a release, stricter checks should be used
dist-release: dist
set -e; \
for i in $(DIST_ARCHIVES); do \
- echo -n "Checking $$i ... "; \
- autotools/check-tar < $$i; \
- echo OK; \
+ echo -n "Checking $$i ... "; \
+ autotools/check-tar < $$i; \
+ echo OK; \
done
install-exec-local:
.PHONY: py-apidoc
py-apidoc: epydoc.conf $(RUN_IN_TEMPDIR) $(GENERATED_FILES)
$(RUN_IN_TEMPDIR) epydoc -v \
- --conf $(CURDIR)/epydoc.conf \
- --output $(CURDIR)/$(APIDOC_PY_DIR)
+ --conf $(CURDIR)/epydoc.conf \
+ --output $(CURDIR)/$(APIDOC_PY_DIR)
.PHONY: hs-apidoc
hs-apidoc: $(HS_BUILT_SRCS)
@test -n "$(HADDOCK)" || \
{ echo 'haddock' not found during configure; exit 1; }
rm -rf $(APIDOC_HS_DIR)/*
- @mkdir_p@ $(APIDOC_HS_DIR)/Ganeti/HTools/Backend
- @mkdir_p@ $(APIDOC_HS_DIR)/Ganeti/HTools/Program
- @mkdir_p@ $(APIDOC_HS_DIR)/Ganeti/Block
- @mkdir_p@ $(APIDOC_HS_DIR)/Ganeti/Block/Drbd
- @mkdir_p@ $(APIDOC_HS_DIR)/Ganeti/Confd
- @mkdir_p@ $(APIDOC_HS_DIR)/Ganeti/Query
+ for i in $(ALL_APIDOC_HS_DIRS); do \
+ @mkdir_p@ $$i; \
+ done
$(HSCOLOUR) -print-css > $(APIDOC_HS_DIR)/Ganeti/hscolour.css
$(LN_S) ../hscolour.css $(APIDOC_HS_DIR)/Ganeti/HTools/hscolour.css
$(LN_S) ../hscolour.css $(APIDOC_HS_DIR)/Ganeti/Confd/hscolour.css
fi; \
RELSRCS="$(HS_LIB_SRCS:htools/%=%) $(patsubst htools/%,%,$(filter htools/%,$(HS_BUILT_SRCS)))"; \
for file in $$RELSRCS; do \
- hfile=`echo $$file|sed 's/\\.hs$$//'`.html; \
- $(HSCOLOUR) -css -anchor $$file > ../$(APIDOC_HS_DIR)/$$hfile ; \
+ hfile=`echo $$file|sed 's/\\.hs$$//'`.html; \
+ $(HSCOLOUR) -css -anchor $$file > ../$(APIDOC_HS_DIR)/$$hfile ; \
done ; \
$(HADDOCK) --odir ../$(APIDOC_HS_DIR) --html --ignore-all-exports -w \
- -t ganeti -p haddock-prologue \
- --source-module="%{MODULE/.//}.html" \
- --source-entity="%{MODULE/.//}.html#%{NAME}" \
- $$OPTGHC \
- $(filter-out Ganeti/HTools/ExtLoader.hs,$(HS_LIB_SRCS:htools/%=%))
+ -t ganeti -p haddock-prologue \
+ --source-module="%{MODULE/.//}.html" \
+ --source-entity="%{MODULE/.//}.html#%{NAME}" \
+ $$OPTGHC \
+ $(filter-out Ganeti/HTools/ExtLoader.hs,$(HS_LIB_SRCS:htools/%=%))
.PHONY: TAGS
TAGS: $(GENERATED_FILES)
--output=live-test.tix ; \
@mkdir_p@ ../$(COVERAGE_HS_DIR) ; \
hpc markup --destdir=../$(COVERAGE_HS_DIR) live-test \
- --srcdir=.. $(HPCEXCL) ; \
+ --srcdir=.. $(HPCEXCL) ; \
hpc report --srcdir=.. live-test $(HPCEXCL)
commit-check: distcheck lint apidoc
# Target that builds all binaries (including those that are not
# rebuilt except when running the tests)
.PHONY: really-all
-really-all: all $(check_SCRIPTS) $(haskell_tests)
+really-all: all $(check_SCRIPTS) $(haskell_tests) $(HS_ALL_PROGS)
# we don't need the ancient implicit rules:
%: %,v