Newer
Older
# 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.
# - Use autogen.sh to generate Makefile.in and configure script.
# Automake doesn't export these variables before version 1.10.
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
# Helper values for calling builtin functions
empty :=
space := $(empty) $(empty)
comma := ,
# Use bash in order to be able to use pipefail
SHELL=/bin/bash
ACLOCAL_AMFLAGS = -I autotools
BUILD_BASH_COMPLETION = $(top_srcdir)/autotools/build-bash-completion
RUN_IN_TEMPDIR = $(top_srcdir)/autotools/run-in-tempdir
CHECK_PYTHON_CODE = $(top_srcdir)/autotools/check-python-code
CHECK_HEADER = $(top_srcdir)/autotools/check-header
CHECK_MAN_DASHES = $(top_srcdir)/autotools/check-man-dashes
CHECK_MAN_REFERENCES = $(top_srcdir)/autotools/check-man-references
CHECK_MAN_WARNINGS = $(top_srcdir)/autotools/check-man-warnings
CHECK_VERSION = $(top_srcdir)/autotools/check-version
CHECK_NEWS = $(top_srcdir)/autotools/check-news
CHECK_IMPORTS = $(top_srcdir)/autotools/check-imports
DOCPP = $(top_srcdir)/autotools/docpp
REPLACE_VARS_SED = autotools/replace_vars.sed
CONVERT_CONSTANTS = $(top_srcdir)/autotools/convert-constants
BUILD_RPC = $(top_srcdir)/autotools/build-rpc
SHELL_ENV_INIT = autotools/shell-env-init
# Note: these are automake-specific variables, and must be named after
# the directory + 'dir' suffix
clientdir = $(pkgpythondir)/client
hypervisordir = $(pkgpythondir)/hypervisor
rapidir = $(pkgpythondir)/rapi
serverdir = $(pkgpythondir)/server
watcherdir = $(pkgpythondir)/watcher
impexpddir = $(pkgpythondir)/impexpd
toolsdir = $(pkglibdir)/tools
iallocatorsdir = $(pkglibdir)/iallocators
docdir = $(datadir)/doc/$(PACKAGE)
myexeclibdir = $(pkglibdir)
# Delete output file if an error occurred while building it
.DELETE_ON_ERROR:
src \
src/Ganeti \
src/Ganeti/Block \
src/Ganeti/Block/Drbd \
src/Ganeti/Confd \
src/Ganeti/DataCollectors \
src/Ganeti/HTools \
src/Ganeti/HTools/Backend \
src/Ganeti/HTools/Program \
src/Ganeti/Query \
test/hs \
test/hs/Test \
test/hs/Test/Ganeti \
test/hs/Test/Ganeti/Block \
test/hs/Test/Ganeti/Block/Drbd \
test/hs/Test/Ganeti/Confd \
test/hs/Test/Ganeti/HTools \
test/hs/Test/Ganeti/HTools/Backend \
test/hs/Test/Ganeti/Query
autotools \
daemons \
devel \
doc \
test/data/htools \
test/data/htools/rapi \
test/hs/shelltests \
lib/confd \
lib/impexpd \
man \
qa \
test \
test/data \
ALL_APIDOC_HS_DIRS = \
$(APIDOC_HS_DIR)/Ganeti/Block \
$(APIDOC_HS_DIR)/Ganeti/Block/Drbd \
$(APIDOC_HS_DIR)/Ganeti/DataCollectors \
$(APIDOC_HS_DIR)/Ganeti/HTools/Backend \
$(APIDOC_HS_DIR)/Ganeti/HTools/Program \
BUILDTIME_DIR_AUTOCREATE = \
scripts \
$(APIDOC_DIR) \
$(ALL_APIDOC_HS_DIRS) \
$(COVERAGE_DIR) \
$(COVERAGE_HS_DIR) \
BUILDTIME_DIRS = \
$(BUILDTIME_DIR_AUTOCREATE) \
doc/html \
doc/man-html
DIRCHECK_EXCLUDE = \
$(BUILDTIME_DIRS) \
ganeti-[0-9]*.[0-9]*.[0-9]* \
# some helper vars
COVERAGE_DIR = doc/coverage
COVERAGE_PY_DIR = $(COVERAGE_DIR)/py
COVERAGE_HS_DIR = $(COVERAGE_DIR)/hs
APIDOC_DIR = doc/api
APIDOC_PY_DIR = $(APIDOC_DIR)/py
APIDOC_HS_DIR = $(APIDOC_DIR)/hs
doc/upgrade.rst \
$(addsuffix /*.py[co],$(DIRS)) \
$(addsuffix /*.hi,$(HS_DIRS)) \
$(addsuffix /*.o,$(HS_DIRS)) \
$(PYTHON_BOOTSTRAP) \
$(SHELL_ENV_INIT) \
daemons/daemon-util \
daemons/ganeti-cleaner \
$(mandocrst) \
doc/manpages-enabled.rst \
doc/examples/bash_completion \
doc/examples/bash_completion-debug \
stamp-directories \
stamp-srclinks \
$(HS_ALL_PROGS) $(HS_BUILT_SRCS) \
.hpc/*.mix src/*.tix test/hs/*.tix \
$(BUILT_PYTHON_SOURCES) \
$(PYTHON_BOOTSTRAP)
HS_GENERATED_FILES += $(HS_PROGS)
HS_GENERATED_FILES += src/hconfd src/ganeti-confd
stamp-directories \
stamp-srclinks
lib/_vcsversion.py
BUILT_PYTHON_SOURCES = \
$(built_python_base_sources) \
# Generating the RPC wrappers depends on many things, so make sure
# it's built at the end of the built sources
lib/_generated_rpc.py: | $(built_base_sources) $(built_python_base_sources)
# these are all built from the underlying %.in sources
BUILT_EXAMPLES = \
doc/examples/ganeti-kvm-poweroff.initd \
doc/examples/ganeti.cron \
doc/examples/ganeti.initd \
doc/examples/ganeti-master-role.ocf \
doc/examples/ganeti-node-role.ocf \
doc/examples/gnt-config-backup \
doc/examples/hooks/ipsec
nodist_pkgpython_PYTHON = \
$(BUILT_PYTHON_SOURCES)
lib/build/shell_example_lexer.py \
lib/build/sphinx_ext.py
pkgpython_PYTHON = \
lib/__init__.py \
lib/backend.py \
lib/bdev.py \
lib/bootstrap.py \
lib/cli.py \
lib/cmdlib.py \
lib/compat.py \
lib/config.py \
lib/constants.py \
lib/locking.py \
lib/luxi.py \
lib/mcpu.py \
lib/rpc_defs.py \
lib/serializer.py \
lib/ssconf.py \
lib/ssh.py \
lib/storage.py \
lib/network.py \
lib/client/gnt_backup.py \
lib/client/gnt_cluster.py \
lib/client/gnt_instance.py \
lib/client/gnt_network.py \
lib/client/gnt_os.py \
lib/client/gnt_storage.py
hypervisor_PYTHON = \
lib/hypervisor/__init__.py \
lib/hypervisor/hv_base.py \
lib/hypervisor/hv_chroot.py \
lib/hypervisor/hv_fake.py \
lib/hypervisor/hv_xen.py
rapi_PYTHON = \
lib/rapi/__init__.py \
lib/rapi/client_utils.py \
lib/rapi/rlib2.py \
lib/rapi/testutils.py
lib/http/__init__.py \
lib/http/auth.py \
lib/http/client.py \
lib/http/server.py
lib/masterd/__init__.py \
lib/masterd/instance.py
impexpd_PYTHON = \
lib/impexpd/__init__.py
lib/watcher/__init__.py \
lib/watcher/nodemaint.py \
lib/watcher/state.py
lib/server/__init__.py \
lib/server/noded.py \
lib/server/rapi.py
pytools_PYTHON = \
lib/tools/__init__.py \
lib/tools/ensure_dirs.py \
lib/tools/prepare_node_join.py
lib/utils/filelock.py \
lib/utils/hash.py \
lib/utils/log.py \
lib/utils/nodesetup.py \
lib/utils/process.py \
lib/utils/retry.py \
lib/utils/wrapper.py \
lib/utils/x509.py
docinput = \
doc/conf.py \
doc/css/style.css \
doc/design-2.6.rst \
doc/design-autorepair.rst \
doc/design-bulk-create.rst \
doc/design-chained-jobs.rst \
doc/design-draft.rst \
doc/design-htools-2.3.rst \
doc/design-http-server.rst \
doc/design-impexp2.rst \
doc/design-lu-generated-jobs.rst \
doc/design-multi-reloc.rst \
doc/design-ovf-support.rst \
doc/design-opportunistic-locking.rst \
doc/design-partitioned.rst \
doc/design-query-splitting.rst \
doc/design-query2.rst \
doc/design-remote-commands.rst \
doc/design-resource-model.rst \
doc/design-shared-storage.rst \
doc/design-monitoring-agent.rst \
doc/design-virtual-clusters.rst \
doc/manpages-disabled.rst \
doc/move-instance.rst \
doc/virtual-cluster.rst \
# Generates file names such as "doc/man-gnt-instance.rst"
mandocrst = $(addprefix doc/man-,$(notdir $(manrst)))
# Haskell programs to be installed in $PREFIX/bin
HS_BIN_PROGS=src/htools
# Haskell programs to be installed in the MYEXECLIB dir
HS_MYEXECLIB_PROGS=src/mon-collector
# Haskell programs to compiled but not installed automatically
# Usually they have their own specific installation rules
HS_COMPILE_PROGS= \
src/hconfd \
src/rpc-test
# All Haskell non-test programs to be compiled but not automatically installed
HS_PROGS = $(HS_BIN_PROGS) $(HS_MYEXECLIB_PROGS)
HS_BIN_ROLES = hbal hscan hspace hinfo hcheck hroller
HS_HTOOLS_PROGS = $(HS_BIN_ROLES) hail
test/hs/hpc-htools \
test/hs/hpc-mon-collector \
HS_PROG_SRCS = $(patsubst %,%.hs,$(HS_ALL_PROGS))
HS_BUILT_TEST_HELPERS = $(HS_BIN_ROLES:%=test/hs/%) test/hs/hail
-fwarn-monomorphism-restriction \
-fwarn-tabs \
$(GHC_BYVERSION_FLAGS)
# extra flags that can be overriden on the command line (e.g. -Wwarn, etc.)
# internal extra flags (used for test/hs/htest mainly)
# exclude options for coverage reports
--exclude Ganeti.Constants \
--exclude Test.Ganeti.Attoparsec \
--exclude Test.Ganeti.TestCommon \
--exclude Test.Ganeti.TestHTools \
--exclude Test.Ganeti.TestHelper \
--exclude Test.Ganeti.TestImports \
$(patsubst src.%,--exclude Test.%,$(subst /,.,$(patsubst %.hs,%, $(HS_LIB_SRCS))))
src/Ganeti/Block/Drbd/Types.hs \
src/Ganeti/Block/Drbd/Parser.hs \
src/Ganeti/BasicTypes.hs \
src/Ganeti/Common.hs \
src/Ganeti/Compat.hs \
src/Ganeti/Confd/Client.hs \
src/Ganeti/Confd/Server.hs \
src/Ganeti/Confd/Types.hs \
src/Ganeti/Confd/Utils.hs \
src/Ganeti/Config.hs \
src/Ganeti/Daemon.hs \
src/Ganeti/DataCollectors/CLI.hs \
src/Ganeti/DataCollectors/Drbd.hs \
src/Ganeti/DataCollectors/Program.hs \
src/Ganeti/DataCollectors/Types.hs \
src/Ganeti/Errors.hs \
src/Ganeti/HTools/Backend/IAlloc.hs \
src/Ganeti/HTools/Backend/Luxi.hs \
src/Ganeti/HTools/Backend/Rapi.hs \
src/Ganeti/HTools/Backend/Simu.hs \
src/Ganeti/HTools/Backend/Text.hs \
src/Ganeti/HTools/CLI.hs \
src/Ganeti/HTools/Cluster.hs \
src/Ganeti/HTools/Container.hs \
src/Ganeti/HTools/ExtLoader.hs \
src/Ganeti/HTools/Graph.hs \
src/Ganeti/HTools/Group.hs \
src/Ganeti/HTools/Instance.hs \
src/Ganeti/HTools/Loader.hs \
src/Ganeti/HTools/Node.hs \
src/Ganeti/HTools/PeerMap.hs \
src/Ganeti/HTools/Program/Hail.hs \
src/Ganeti/HTools/Program/Hbal.hs \
src/Ganeti/HTools/Program/Hcheck.hs \
src/Ganeti/HTools/Program/Hinfo.hs \
src/Ganeti/HTools/Program/Hscan.hs \
src/Ganeti/HTools/Program/Hspace.hs \
src/Ganeti/HTools/Program/Hroller.hs \
src/Ganeti/HTools/Program/Main.hs \
src/Ganeti/HTools/Types.hs \
src/Ganeti/Hash.hs \
src/Ganeti/JQueue.hs \
src/Ganeti/JSON.hs \
src/Ganeti/Jobs.hs \
src/Ganeti/Logging.hs \
src/Ganeti/Luxi.hs \
src/Ganeti/Network.hs \
src/Ganeti/Objects.hs \
src/Ganeti/OpCodes.hs \
src/Ganeti/OpParams.hs \
src/Ganeti/Path.hs \
src/Ganeti/Query/Common.hs \
src/Ganeti/Query/Filter.hs \
src/Ganeti/Query/Group.hs \
src/Ganeti/Query/Job.hs \
src/Ganeti/Query/Language.hs \
src/Ganeti/Query/Node.hs \
src/Ganeti/Query/Query.hs \
src/Ganeti/Query/Server.hs \
src/Ganeti/Query/Types.hs \
src/Ganeti/Rpc.hs \
src/Ganeti/Runtime.hs \
src/Ganeti/Ssconf.hs \
src/Ganeti/THH.hs \
src/Ganeti/Types.hs \
src/Ganeti/Utils.hs
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
test/hs/Test/Ganeti/Attoparsec.hs \
test/hs/Test/Ganeti/BasicTypes.hs \
test/hs/Test/Ganeti/Block/Drbd/Parser.hs \
test/hs/Test/Ganeti/Block/Drbd/Types.hs \
test/hs/Test/Ganeti/Common.hs \
test/hs/Test/Ganeti/Confd/Types.hs \
test/hs/Test/Ganeti/Confd/Utils.hs \
test/hs/Test/Ganeti/Daemon.hs \
test/hs/Test/Ganeti/Errors.hs \
test/hs/Test/Ganeti/HTools/Backend/Simu.hs \
test/hs/Test/Ganeti/HTools/Backend/Text.hs \
test/hs/Test/Ganeti/HTools/CLI.hs \
test/hs/Test/Ganeti/HTools/Cluster.hs \
test/hs/Test/Ganeti/HTools/Container.hs \
test/hs/Test/Ganeti/HTools/Graph.hs \
test/hs/Test/Ganeti/HTools/Instance.hs \
test/hs/Test/Ganeti/HTools/Loader.hs \
test/hs/Test/Ganeti/HTools/Node.hs \
test/hs/Test/Ganeti/HTools/PeerMap.hs \
test/hs/Test/Ganeti/HTools/Types.hs \
test/hs/Test/Ganeti/JSON.hs \
test/hs/Test/Ganeti/Jobs.hs \
test/hs/Test/Ganeti/JQueue.hs \
test/hs/Test/Ganeti/Luxi.hs \
test/hs/Test/Ganeti/Network.hs \
test/hs/Test/Ganeti/Objects.hs \
test/hs/Test/Ganeti/OpCodes.hs \
test/hs/Test/Ganeti/Query/Filter.hs \
test/hs/Test/Ganeti/Query/Language.hs \
test/hs/Test/Ganeti/Query/Query.hs \
test/hs/Test/Ganeti/Rpc.hs \
test/hs/Test/Ganeti/Ssconf.hs \
test/hs/Test/Ganeti/THH.hs \
test/hs/Test/Ganeti/TestCommon.hs \
test/hs/Test/Ganeti/TestHTools.hs \
test/hs/Test/Ganeti/TestHelper.hs \
test/hs/Test/Ganeti/Types.hs \
test/hs/Test/Ganeti/Utils.hs
HS_LIBTEST_SRCS = $(HS_LIB_SRCS) $(HS_TEST_SRCS)
test/hs/Test/Ganeti/TestImports.hs \
HS_BUILT_SRCS_IN = $(patsubst %,%.in,$(HS_BUILT_SRCS))
$(RUN_IN_TEMPDIR): | stamp-directories
doc/html/index.html: ENABLE_MANPAGES =
doc/man-html/index.html: ENABLE_MANPAGES = 1
doc/man-html/index.html: doc/manpages-enabled.rst $(mandocrst)
# Note: we use here an order-only prerequisite, as the contents of
# _autoconf.py are not actually influencing the html build output: it
# has to exist in order for the sphinx module to be loaded
# successfully, but we certainly don't want the docs to be rebuilt if
# it changes
doc/html/index.html doc/man-html/index.html: $(docinput) doc/conf.py \
configure.ac $(RUN_IN_TEMPDIR) lib/build/sphinx_ext.py \
lib/build/shell_example_lexer.py lib/opcodes.py lib/ht.py \
@test -n "$(SPHINX)" || \
{ echo 'sphinx-build' not found during configure; exit 1; }
if !MANPAGES_IN_DOC
if test -n '$(ENABLE_MANPAGES)'; then \
echo 'Man pages in documentation were disabled at configure time' >&2; \
exit 1; \
fi
endif
## Sphinx provides little control over what content should be included. Some
## mechanisms exist, but they all have drawbacks or actual issues. Since we
## build two different versions of the documentation--once without man pages and
## once, if enabled, with them--some control is necessary. xmpp-wrapper provides
## us with this, but requires running in a temporary directory. It moves the
## correct files into place depending on environment variables.
dir=$(dir $@) && \
@mkdir_p@ $$dir && \
PYTHONPATH=. ENABLE_MANPAGES=$(ENABLE_MANPAGES) COPY_DOC=1 \
$(RUN_IN_TEMPDIR) autotools/sphinx-wrapper $(SPHINX) -q -W -b html \
-D version="$(VERSION_MAJOR).$(VERSION_MINOR)" \
-D release="$(PACKAGE_VERSION)" \
-D enable_manpages="$(ENABLE_MANPAGES)" \
doc $(CURDIR)/$$dir && \
rm -f $$dir/.buildinfo $$dir/objects.inv
touch $@
doc/html: doc/html/index.html
doc/man-html: doc/man-html/index.html
doc/upgrade.rst: UPGRADE
doc/install-quick.rst doc/news.rst doc/upgrade.rst:
set -e; \
{ echo '.. This file is automatically updated at build time from $<.'; \
echo '.. Do not edit.'; \
echo; \
cat $<; \
} > $@
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
doc/manpages-enabled.rst: Makefile | $(built_base_sources)
{ echo '.. This file is automatically generated, do not edit!'; \
echo ''; \
echo 'Man pages'; \
echo '========='; \
echo; \
echo '.. toctree::'; \
echo ' :maxdepth: 1'; \
echo; \
for i in $(notdir $(mandocrst)); do \
echo " $$i"; \
done | LC_ALL=C sort; \
} > $@
doc/man-%.rst: man/%.gen Makefile $(REPLACE_VARS_SED) | $(built_base_sources)
if MANPAGES_IN_DOC
{ echo '.. This file is automatically updated at build time from $<.'; \
echo '.. Do not edit.'; \
echo; \
echo "$*"; \
echo '=========================================='; \
tail -n +3 $< | sed -f $(REPLACE_VARS_SED); \
} > $@
else
echo 'Man pages in documentation were disabled at configure time' >&2; \
exit 1;
endif
# Things to build but not to install (add it to EXTRA_DIST if it should be
# distributed)
noinst_DATA = \
doc/html \
doc/examples/bash_completion \
doc/examples/bash_completion-debug \
$(manhtml)
if MANPAGES_IN_DOC
noinst_DATA += doc/man-html
endif
scripts/gnt-backup \
scripts/gnt-cluster \
scripts/gnt-debug \
scripts/gnt-instance \
scripts/gnt-job \
scripts/gnt-network \
scripts/gnt-os \
scripts/gnt-storage
daemons/ganeti-masterd \
PYTHON_BOOTSTRAP = \
$(PYTHON_BOOTSTRAP_SBIN) \
tools/ensure-dirs \
tools/prepare-node-join
qa/ganeti-qa.py \
qa/qa_cluster.py \
qa/qa_config.py \
qa/qa_daemon.py \
qa/qa_env.py \
qa/qa_error.py \
qa/qa_node.py \
qa/qa_os.py \
qa/qa_rapi.py \
qa/qa_tags.py \
qa/qa_utils.py
bin_SCRIPTS =
if WANT_HTOOLS
bin_SCRIPTS += $(HS_BIN_PROGS)
install-exec-hook:
@mkdir_p@ $(DESTDIR)$(iallocatorsdir)
# FIXME: this is a hardcoded logic, instead of auto-resolving
$(LN_S) -f ../../../bin/htools \
for role in $(HS_BIN_ROLES); do \
$(LN_S) -f htools $(DESTDIR)$(bindir)/$$role ; \
$(HS_ALL_PROGS): %: %.hs $(HS_LIBTEST_SRCS) $(HS_BUILT_SRCS) Makefile
@if [ "$(notdir $@)" = "test" ] && [ "$(HS_NODEV)" ]; then \
echo "Error: cannot run unittests without the development" \
" libraries (see devnotes.rst)" 1>&2; \
@rm -f $(notdir $@).tix
$(GHC) --make \
$(HS_NOCURL) $(HS_PARALLEL3) $(HS_REGEX_PCRE) \
-osuf $(notdir $@).o -hisuf $(notdir $@).hi \
# for the test/hs/htest binary, we need to enable profiling/coverage
test/hs/htest: HEXTRA_INT=-fhpc -itest/hs
# we compile the hpc-htools binary with the program coverage
test/hs/hpc-htools: HEXTRA_INT=-fhpc
# we compile the hpc-mon-collector binary with the program coverage
test/hs/hpc-mon-collector: HEXTRA_INT=-fhpc
test/hs/offline-tests.sh: test/hs/hpc-htools test/hs/hpc-mon-collector
# rules for building profiling-enabled versions of the haskell
# programs: hs-prof does the full two-step build, whereas
# hs-prof-quick does only the final rebuild (hs-prof must have been
# run before)
.PHONY: hs-prof hs-prof-quick
hs-prof:
@if [ -z "$(TARGET)" ]; then \
echo "You need to define TARGET when running this rule" 1>&2; \
exit 1; \
fi
@if [ -z "$(TARGET)" ]; then \
echo "You need to define TARGET when running this rule" 1>&2; \
exit 1; \
fi
$(MAKE) $(AM_MAKEFLAGS) $(TARGET) HEXTRA="-osuf prof_o -prof -auto-all"
dist_sbin_SCRIPTS = \
tools/ganeti-listrunner
nodist_sbin_SCRIPTS = \
daemons/ganeti-cleaner
python_scripts = \
tools/cfgshell \
tools/cfgupgrade \
$(python_scripts) \
tools/kvm-console-wrapper \
nodist_tools_python_scripts = \
tools/node-cleanup
pkglib_python_scripts = \
daemons/import-export \
tools/check-cert-expired
tools/ensure-dirs \
tools/prepare-node-join
$(pkglib_python_scripts) \
nodist_myexeclib_SCRIPTS = \
autotools/build-bash-completion \
autotools/check-imports \
autotools/check-man-references \
autotools/convert-constants \
autotools/docpp \
autotools/sphinx-wrapper \
autotools/wrong-hardcoded-paths \
daemons/daemon-util.in \
daemons/ganeti-cleaner.in \
$(pkglib_python_scripts) \
doc/examples/ganeti.default \
doc/examples/ganeti.default-debug \
doc/examples/gnt-debug/README \
doc/examples/gnt-debug/delay0.json \
doc/examples/gnt-debug/delay50.json \
test/py/lockperf.py \
test/py/testutils.py \
test/py/mocks.py \
$(dist_TESTS) \
$(TEST_FILES) \
$(maninput) \
$(HS_LIBTEST_SRCS) $(HS_BUILT_SRCS_IN) \
test/hs/cli-tests-defs.sh \
test/hs/offline-test.sh \
man/ganeti-noded.8 \
man/ganeti-os-interface.7 \
man/ganeti-extstorage-interface.7 \
man/gnt-backup.8 \
man/gnt-cluster.8 \
man/gnt-network.8 \
man/htools.1 \
man/mon-collector.7
# Remove extensions from all filenames in man_MANS
mannoext = $(patsubst %.1,%,$(patsubst %.7,%,$(patsubst %.8,%,$(man_MANS))))
manrst = $(patsubst %,%.rst,$(mannoext))
manhtml = $(patsubst %.rst,%.html,$(manrst))
mangen = $(patsubst %.rst,%.gen,$(manrst))
$(patsubst %.1,%.1.in,$(patsubst %.7,%.7.in,$(patsubst %.8,%.8.in,$(man_MANS)))) \
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
test/data/htools/clean-nonzero-score.data \
test/data/htools/common-suffix.data \
test/data/htools/empty-cluster.data \
test/data/htools/hail-alloc-drbd.json \
test/data/htools/hail-change-group.json \
test/data/htools/hail-invalid-reloc.json \
test/data/htools/hail-node-evac.json \
test/data/htools/hail-reloc-drbd.json \
test/data/htools/hbal-excl-tags.data \
test/data/htools/hbal-split-insts.data \
test/data/htools/invalid-node.data \
test/data/htools/missing-resources.data \
test/data/htools/n1-failure.data \
test/data/htools/rapi/groups.json \
test/data/htools/rapi/info.json \
test/data/htools/rapi/instances.json \
test/data/htools/rapi/nodes.json \
test/hs/shelltests/htools-balancing.test \
test/hs/shelltests/htools-basic.test \
test/hs/shelltests/htools-dynutil.test \
test/hs/shelltests/htools-excl.test \
test/hs/shelltests/htools-hail.test \
test/hs/shelltests/htools-hspace.test \
test/hs/shelltests/htools-invalid.test \
test/hs/shelltests/htools-multi-group.test \
test/hs/shelltests/htools-no-backend.test \
test/hs/shelltests/htools-rapi.test \
test/hs/shelltests/htools-single-group.test \
test/hs/shelltests/htools-text-backend.test \
test/hs/shelltests/htools-mon-collector.test \
test/data/bdev-drbd-8.0.txt \
test/data/bdev-drbd-8.3.txt \
test/data/bdev-drbd-disk.txt \
test/data/bdev-drbd-net-ip4.txt \
test/data/bdev-drbd-net-ip6.txt \
test/data/cert1.pem \
test/data/cert2.pem \
test/data/instance-minor-pairing.txt \
test/data/ip-addr-show-dummy0.txt \
test/data/ip-addr-show-lo-ipv4.txt \
test/data/ip-addr-show-lo-ipv6.txt \
test/data/ip-addr-show-lo-oneline-ipv4.txt \
test/data/ip-addr-show-lo-oneline-ipv6.txt \
test/data/ip-addr-show-lo-oneline.txt \
test/data/ip-addr-show-lo.txt \