diff --git a/GNUmakefile b/GNUmakefile
index 716409ccc8..0cb3e8a152 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -1,387 +1,387 @@
 #
 # Copyright (C) 2008 Andrew Beekhof
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; either version 2
 # of the License, or (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #
 
 default: $(shell test ! -e configure && echo init) $(shell test -e configure && echo core)
 
 -include Makefile
 
 PACKAGE		?= pacemaker
 
 # Force 'make dist' to be consistent with 'make export'
 distdir			= $(PACKAGE)-$(TAG)
 TARFILE			= $(PACKAGE)-$(SHORTTAG).tar.gz
 DIST_ARCHIVES		= $(TARFILE)
 
 RPM_ROOT	= $(shell pwd)
 RPM_OPTS	= --define "_sourcedir $(RPM_ROOT)" 	\
 		  --define "_specdir   $(RPM_ROOT)" 	\
 		  --define "_srcrpmdir $(RPM_ROOT)" 	\
 
 MOCK_OPTIONS	?= --resultdir=$(RPM_ROOT)/mock --no-cleanup-after
 
 # Default to building Fedora-compliant spec files
 # SLES:     /etc/SuSE-release
 # openSUSE: /etc/SuSE-release
 # RHEL:     /etc/redhat-release, /etc/system-release
 # Fedora:   /etc/fedora-release, /etc/redhat-release, /etc/system-release
 # CentOS:   /etc/centos-release, /etc/redhat-release, /etc/system-release
 F       ?= $(shell test ! -e /etc/fedora-release && echo 0; test -e /etc/fedora-release && rpm --eval %{fedora})
 ARCH    ?= $(shell test -e /etc/fedora-release && rpm --eval %{_arch})
 MOCK_CFG ?= $(shell test -e /etc/fedora-release && echo fedora-$(F)-$(ARCH))
 DISTRO  ?= $(shell test -e /etc/SuSE-release && echo suse; echo fedora)
 COMMIT  ?= HEAD
 TAG     ?= $(shell T=$$(git describe --all '$(COMMIT)' | sed -n 's|tags/\(.*\)|\1|p'); \
 	     test -n "$${T}" && echo "$${T}" \
 	       || git log --pretty=format:%H -n 1 '$(COMMIT)')
 lparen = (
 rparen = )
 SHORTTAG ?= $(shell case $(TAG) in Pacemaker-*$(rparen) echo '$(TAG)' | cut -c11-;; \
 	      *$(rparen) git log --pretty=format:%h -n 1 '$(TAG)';; esac)
 SHORTTAG_ABBREV = $(shell printf %s '$(SHORTTAG)' | wc -c)
 WITH    ?= --without doc
 #WITH    ?= --without=doc --with=gcov
 
 LAST_RC		?= $(shell test -e /Volumes || git tag -l | grep Pacemaker | sort -Vr | grep rc | head -n 1)
 ifneq ($(origin VERSION), undefined)
 LAST_RELEASE	?= Pacemaker-$(VERSION)
 else
 LAST_RELEASE	?= $(shell git tag -l | grep Pacemaker | sort -Vr | grep -v rc | head -n 1)
 endif
 NEXT_RELEASE	?= $(shell echo $(LAST_RELEASE) | awk -F. '/[0-9]+\./{$$3+=1;OFS=".";print $$1,$$2,$$3}')
 
 BUILD_COUNTER	?= build.counter
 LAST_COUNT      = $(shell test ! -e $(BUILD_COUNTER) && echo 0; test -e $(BUILD_COUNTER) && cat $(BUILD_COUNTER))
 COUNT           = $(shell expr 1 + $(LAST_COUNT))
 
 SPECVERSION	?= $(COUNT)
 
 # toplevel rsync destination for www targets (without trailing slash)
 RSYNC_DEST      ?= root@www.clusterlabs.org:/var/www/html
 
 # recursive, preserve symlinks/permissions/times, verbose, compress,
 # don't cross filesystems, sparse, show progress
 RSYNC_OPTS      = -rlptvzxS --progress
 
 # rpmbuild wrapper that translates "--with[out] FEATURE" into RPM macros
 #
 # Unfortunately, at least recent versions of rpm do not support mentioned
 # switch.  To work this around, we can emulate mechanism that rpm uses
 # internally: unfold the flags into respective macro definitions:
 #
 #    --with[out] FOO  ->  --define "_with[out]_FOO --with[out]-FOO"
 #
 # $(1) ... WITH string (e.g., --with pre_release --without cman)
 # $(2) ... options following the initial "rpmbuild" in the command
 # $(3) ... final arguments determined with $2 (e.g., pacemaker.spec)
 #
 # Note that if $(3) is a specfile, extra case is taken so as to reflect
 # pcmkversion correctly (using in-place modification).
 #
 # Also note that both ways to specify long option with an argument
 # (i.e., what getopt and, importantly, rpm itself support) can be used:
 #
 #    --with FOO
 #    --with=FOO
 rpmbuild-with = \
 	WITH=$$(getopt -o "" -l with:,without: -- $(1)) || exit 1; \
 	CMD='rpmbuild $(2)'; PREREL=0; \
 	eval set -- "$${WITH}"; \
 	while true; do \
 		case "$$1" in \
 		--with) CMD="$${CMD} --define \"_with_$$2 --with-$$2\""; \
 			[ "$$2" != pre_release ] || PREREL=1; shift 2;; \
 		--without) CMD="$${CMD} --define \"_without_$$2 --without-$$2\""; \
 		        [ "$$2" != pre_release ] || PREREL=0; shift 2;; \
 		--) shift ; break ;; \
 		*) echo "cannot parse WITH: $$1"; exit 1;; \
 		esac; \
 	done; \
 	case "$(3)" in \
 	*.spec) { [ $${PREREL} -eq 0 ] || [ $(LAST_RELEASE) = $(TAG) ]; } \
 		&& sed -i "s/^\(%global pcmkversion \).*/\1$$(echo $(LAST_RELEASE) | sed -e s:Pacemaker-:: -e s:-.*::)/" $(3) \
 		|| sed -i "s/^\(%global pcmkversion \).*/\1$$(echo $(NEXT_RELEASE) | sed -e s:Pacemaker-:: -e s:-.*::)/" $(3);; \
 	esac; \
 	CMD="$${CMD} $(3)"; \
 	eval "$${CMD}"
 
 init:
 	./autogen.sh init
 
 export:
 	rm -f $(PACKAGE)-dirty.tar.* $(PACKAGE)-tip.tar.* $(PACKAGE)-HEAD.tar.*
 	if [ ! -f $(TARFILE) ]; then						\
 	    rm -f $(PACKAGE).tar.*;						\
 	    if [ $(TAG) = dirty ]; then 					\
 		git commit -m "DO-NOT-PUSH" -a;					\
-		git archive --prefix=$(distdir)/ HEAD | gzip > $(TARFILE);	\
+		git archive --prefix=$(distdir)/ -o "$(TARFILE)" HEAD^{tree};	\
 		git reset --mixed HEAD^; 					\
 	    else								\
-		git archive --prefix=$(distdir)/ $(TAG) | gzip > $(TARFILE);	\
+		git archive --prefix=$(distdir)/ -o "$(TARFILE)" $(TAG)^{tree};	\
 	    fi;									\
 	    echo `date`: Rebuilt $(TARFILE);					\
 	else									\
 	    echo `date`: Using existing tarball: $(TARFILE);			\
 	fi
 
 $(PACKAGE)-opensuse.spec: $(PACKAGE)-suse.spec
 	cp $^ $@
 	@echo Rebuilt $@
 
 $(PACKAGE)-suse.spec: $(PACKAGE).spec.in GNUmakefile
 	rm -f $@
 	if [ x != x"`git ls-files -m | grep pacemaker.spec.in`" ]; then		\
 	    cp $(PACKAGE).spec.in $@;						\
 	    echo "Rebuilt $@ (local modifications)";				\
 	elif [ x = x"`git show $(TAG):pacemaker.spec.in 2>/dev/null`" ]; then	\
 	    cp $(PACKAGE).spec.in $@;						\
 	    echo "Rebuilt $@";							\
 	else 									\
 	    git show $(TAG):$(PACKAGE).spec.in >> $@;				\
 	    echo "Rebuilt $@ from $(TAG)";					\
 	fi
 	sed -i									\
 	    -e 's:%{_docdir}/%{name}:%{_docdir}/%{name}-%{version}:g'		\
 	    -e 's:%{name}-libs:lib%{name}3:g'					\
 	    -e 's@Requires:\( *\)%{python_pkg}\(-devel\)\? @Requires:\1python-curses python-xml %{python_pkg}\2 @' \
 	    -e 's: libtool-ltdl-devel\(%{?_isa}\)\?::g'				\
 	    -e 's:bzip2-devel:libbz2-devel:g'					\
 	    -e 's:docbook-style-xsl:docbook-xsl-stylesheets:g'			\
 	    -e 's: byacc::g'							\
 	    -e 's:gnutls-devel:libgnutls-devel:g'				\
 	    -e 's:corosynclib:libcorosync:g'					\
 	    -e 's:cluster-glue-libs:libglue:g'					\
 	    -e 's:shadow-utils:shadow:g'					\
 	    -e 's: publican::g'							\
 	    -e 's: 189: 90:g'							\
 	    -e 's:%{_libexecdir}/lcrso:%{_libdir}/lcrso:g'			\
 	    $@
 	@echo "Applied SUSE-specific modifications"
 
 
 # Works for all fedora based distros
 $(PACKAGE)-%.spec: $(PACKAGE).spec.in
 	rm -f $@
 	if [ x != x"`git ls-files -m | grep pacemaker.spec.in`" ]; then		\
 	    cp $(PACKAGE).spec.in $(PACKAGE)-$*.spec;				\
 	    echo "Rebuilt $@ (local modifications)";				\
 	elif [ x = x"`git show $(TAG):pacemaker.spec.in 2>/dev/null`" ]; then	\
 	    cp $(PACKAGE).spec.in $(PACKAGE)-$*.spec;				\
 	    echo "Rebuilt $@";							\
 	else 									\
 	    git show $(TAG):$(PACKAGE).spec.in >> $(PACKAGE)-$*.spec;		\
 	    echo "Rebuilt $@ from $(TAG)";					\
 	fi
 
 srpm-%:	export $(PACKAGE)-%.spec
 	rm -f *.src.rpm
 	cp $(PACKAGE)-$*.spec $(PACKAGE).spec
 	echo "* $(shell date +"%a %b %d %Y") Andrew Beekhof <andrew@beekhof.net> $(shell git describe --tags $(TAG) | sed -e s:Pacemaker-:: -e s:-.*::)-1" >> $(PACKAGE).spec
 	echo " - See included ChangeLog file or https://raw.github.com/ClusterLabs/pacemaker/master/ChangeLog for full details" >> $(PACKAGE).spec
 	if [ -e $(BUILD_COUNTER) ]; then					\
 		echo $(COUNT) > $(BUILD_COUNTER);				\
 	fi
 	sed -e 's/global\ specversion\ .*/global\ specversion\ $(SPECVERSION)/' \
 	    -e 's/global\ commit\ .*/global\ commit\ $(TAG)/' \
 	    -e 's/global\ commit_abbrev\ .*/global\ commit_abbrev\ $(SHORTTAG_ABBREV)/' \
 	    -i $(PACKAGE).spec
 	$(call rpmbuild-with,$(WITH),-bs --define "dist .$*" $(RPM_OPTS),$(PACKAGE).spec)
 
 chroot: mock-$(MOCK_CFG) mock-install-$(MOCK_CFG) mock-sh-$(MOCK_CFG)
 	echo "Done"
 
 mock-next:
 	make F=$(shell expr 1 + $(F)) mock
 
 mock-rawhide:
 	make F=rawhide mock
 
 mock-install-%:
 	echo "Installing packages"
 	mock --root=$* $(MOCK_OPTIONS) --install $(RPM_ROOT)/mock/*.rpm vi sudo valgrind lcov gdb fence-agents psmisc
 
 mock-install: mock-install-$(MOCK_CFG)
 	echo "Done"
 
 mock-sh: mock-sh-$(MOCK_CFG)
 	echo "Done"
 
 mock-sh-%:
 	echo "Connecting"
 	mock --root=$* $(MOCK_OPTIONS) --shell
 	echo "Done"
 
 # eg. WITH="--with cman" make rpm
 mock-%:
 	make srpm-$(firstword $(shell echo $(@:mock-%=%) | tr '-' ' '))
 	-rm -rf $(RPM_ROOT)/mock
 	@echo "mock --root=$* --rebuild $(WITH) $(MOCK_OPTIONS) $(RPM_ROOT)/*.src.rpm"
 	mock --root=$* --no-cleanup-after --rebuild $(WITH) $(MOCK_OPTIONS) $(RPM_ROOT)/*.src.rpm
 
 srpm:	srpm-$(DISTRO)
 	echo "Done"
 
 mock:   mock-$(MOCK_CFG)
 	echo "Done"
 
 rpm-dep: $(PACKAGE)-$(DISTRO).spec
 	if [ x != x`which yum-builddep 2>/dev/null` ]; then			\
 	    echo "Installing with yum-builddep";		\
 	    sudo yum-builddep $(PACKAGE)-$(DISTRO).spec;	\
 	elif [ x != x`which yum 2>/dev/null` ]; then				\
 	    echo -e "Installing: $(shell grep BuildRequires pacemaker.spec.in | sed -e s/BuildRequires:// -e s:\>.*0:: | tr '\n' ' ')\n\n";	\
 	    sudo yum install $(shell grep BuildRequires pacemaker.spec.in | sed -e s/BuildRequires:// -e s:\>.*0:: | tr '\n' ' ');	\
 	elif [ x != x`which zypper` ]; then			\
 	    echo -e "Installing: $(shell grep BuildRequires pacemaker.spec.in | sed -e s/BuildRequires:// -e s:\>.*0:: | tr '\n' ' ')\n\n";	\
 	    sudo zypper install $(shell grep BuildRequires pacemaker.spec.in | sed -e s/BuildRequires:// -e s:\>.*0:: | tr '\n' ' ');\
 	else							\
 	    echo "I don't know how to install $(shell grep BuildRequires pacemaker.spec.in | sed -e s/BuildRequires:// -e s:\>.*0:: | tr '\n' ' ')";\
 	fi
 
 rpm:	srpm
 	@echo To create custom builds, edit the flags and options in $(PACKAGE).spec first
 	$(call rpmbuild-with,$(WITH),$(RPM_OPTS),--rebuild $(RPM_ROOT)/*.src.rpm)
 
 release:
 	make TAG=$(LAST_RELEASE) rpm
 
 rc:
 	make TAG=$(LAST_RC) rpm
 
 dirty:
 	make TAG=dirty mock
 
 COVERITY_DIR	 = $(shell pwd)/coverity-$(TAG)
 COVFILE          = $(PACKAGE)-coverity-$(TAG).tgz
 COVHOST		?= scan5.coverity.com
 COVPASS		?= password
 
 # Public coverity
 coverity:
 	test -e configure || ./autogen.sh
 	test -e Makefile || ./configure
 	make core-clean
 	rm -rf $(COVERITY_DIR)
 	cov-build --dir $(COVERITY_DIR) make core
 	tar czf $(COVFILE) --transform=s@.*$(TAG)@cov-int@ $(COVERITY_DIR)
 	@echo "Uploading to public Coverity instance..."
 	curl --form file=@$(COVFILE) --form project=$(PACKAGE) --form password=$(COVPASS) --form email=andrew@beekhof.net http://$(COVHOST)/cgi-bin/upload.py
 	rm -rf $(COVFILE) $(COVERITY_DIR)
 
 coverity-corp:
 	test -e configure || ./autogen.sh
 	test -e Makefile || ./configure
 	make core-clean
 	rm -rf $(COVERITY_DIR)
 	cov-build --dir $(COVERITY_DIR) make core
 	@echo "Waiting for a corporate Coverity license..."
 	cov-analyze --dir $(COVERITY_DIR) --wait-for-license
 	cov-format-errors --dir $(COVERITY_DIR) --emacs-style > $(TAG).coverity
 	cov-format-errors --dir $(COVERITY_DIR)
 	rsync $(RSYNC_OPTS) "$(COVERITY_DIR)/c/output/errors/" "$(RSYNC_DEST)/$(PACKAGE)/coverity/$(TAG)/"
 	make core-clean
 #	cov-commit-defects --host $(COVHOST) --dir $(COVERITY_DIR) --stream $(PACKAGE) --user auto --password $(COVPASS)
 	rm -rf $(COVERITY_DIR)
 
 global: clean-generic
 	gtags -q
 
 global-upload: global
 	htags -sanhIT
 	rsync $(RSYNC_OPTS) HTML/ "$(RSYNC_DEST)/$(PACKAGE)/global/$(TAG)/"
 
 %.8.html: %.8
 	echo groff -mandoc `man -w ./$<` -T html > $@
 	groff -mandoc `man -w ./$<` -T html > $@
 	rsync $(RSYNC_OPTS) "$@" "$(RSYNC_DEST)/$(PACKAGE)/man/"
 
 %.7.html: %.7
 	echo groff -mandoc `man -w ./$<` -T html > $@
 	groff -mandoc `man -w ./$<` -T html > $@
 	rsync $(RSYNC_OPTS) "$@" "$(RSYNC_DEST)/$(PACKAGE)/man/"
 
 manhtml-upload: all
 	find . -name "[a-z]*.[78]" -exec make \{\}.html \;
 
 doxygen: Doxyfile
 	doxygen Doxyfile
 
 doxygen-upload: doxygen
 	rsync $(RSYNC_OPTS) doc/api/html/ "$(RSYNC_DEST)/$(PACKAGE)/doxygen/$(TAG)/"
 
 abi:
 	./abi-check pacemaker $(LAST_RELEASE) $(TAG)
 abi-www:
 	export RSYNC_DEST=$(RSYNC_DEST); ./abi-check -u pacemaker $(LAST_RELEASE) $(TAG)
 
 www:	manhtml-upload global-upload doxygen-upload
 	make RSYNC_DEST=$(RSYNC_DEST) -C doc www
 
 summary:
 	@printf "\n* `date +"%a %b %d %Y"` `git config user.name` <`git config user.email`> $(NEXT_RELEASE)-1"
 	@printf "\n- Update source tarball to revision: `git log --pretty=format:%h -n 1`"
 	@printf "\n- Changesets: `git log --pretty=oneline $(LAST_RELEASE)..HEAD | wc -l`"
 	@printf "\n- Diff:      "
 	@git diff -r $(LAST_RELEASE)..HEAD --stat include lib mcp pengine/*.c pengine/*.h  cib crmd fencing lrmd tools xml | tail -n 1
 
 rc-changes:
 	@make NEXT_RELEASE=$(shell echo $(LAST_RC) | sed s:-rc.*::) LAST_RELEASE=$(LAST_RC) changes
 
 changes: summary
 	@printf "\n- Features added since $(LAST_RELEASE)\n"
 	@git log --pretty=format:'  +%s' --abbrev-commit $(LAST_RELEASE)..HEAD | grep -e Feature: | sed -e 's@Feature:@@' | sort -uf
 	@printf "\n- Changes since $(LAST_RELEASE)\n"
 	@git log --pretty=format:'  +%s' --abbrev-commit $(LAST_RELEASE)..HEAD | grep -e High: -e Fix: -e Bug | sed -e 's@Fix:@@' -e s@High:@@ -e s@Fencing:@fencing:@ -e 's@Bug@ Bug@' -e s@PE:@pengine:@ | sort -uf
 
 changelog:
 	@make changes > ChangeLog
 	@printf "\n">> ChangeLog
 	git show $(LAST_RELEASE):ChangeLog >> ChangeLog
 	@echo -e "\033[1;35m -- Don't forget to run the bumplibs.sh script! --\033[0m"
 
 indent:
 	find . -name "*.h" -exec ./p-indent \{\} \;
 	find . -name "*.c" -exec ./p-indent \{\} \;
 	git co HEAD crmd/fsa_proto.h lib/gnu
 
 rel-tags: tags
 	find . -name TAGS -exec sed -i 's:\(.*\)/\(.*\)/TAGS:\2/TAGS:g' \{\} \;
 
 CLANG_analyzer = $(shell which scan-build)
 CLANG_checkers = 
 
 # Use CPPCHECK_ARGS to pass extra cppcheck options, e.g.:
 # --enable={warning,style,performance,portability,information,all}
 # --inconclusive --std=posix
 CPPCHECK_ARGS ?=
 cppcheck:
 	for d in replace lib mcp attrd pengine cib crmd fencing lrmd tools; \
 		do cppcheck $(CPPCHECK_ARGS) -q $$d; \
 	done
 
 clang:
 	test -e $(CLANG_analyzer)
 	scan-build $(CLANG_checkers:%=-enable-checker %) make clean all
 
 # V3	= scandir unsetenv alphasort xalloc
 # V2	= setenv strerror strchrnul strndup
 # http://www.gnu.org/software/gnulib/manual/html_node/Initial-import.html#Initial-import
 GNU_MODS	= crypto/md5
 gnulib-update:
 	-test ! -e gnulib && git clone git://git.savannah.gnu.org/gnulib.git
 	cd gnulib && git pull
 	gnulib/gnulib-tool --source-base=lib/gnu --lgpl=2 --no-vc-files --import $(GNU_MODS)
diff --git a/cts/cts.in b/cts/cts.in
index 9ff107c663..93ac1d3a3e 100755
--- a/cts/cts.in
+++ b/cts/cts.in
@@ -1,332 +1,332 @@
-#!@BASH_PATH
+#!@BASH_PATH@
 #
 # Copyright 2012-2018 Andrew Beekhof <andrew@beekhof.net>
 #
 # This source code is licensed under the GNU General Public License version 2
 # or later (GPLv2+) WITHOUT ANY WARRANTY.
 #
 
 if [ -e $PWD/cts/CTSlab.py ]; then
     cts_root=$PWD/cts
 elif [ -e $PWD/CTSlab.py ]; then
     cts_root=$PWD
 else
     cts_root=`dirname $0`
 fi
 
 logfile=0
 summary=0
 verbose=0
 pengine=0
 watch=0
 saved=0
 tests=""
 
 install=0
 clean=0
 build=0
 kill=0
 run=0
 boot=0
 setup=0
 target=rhel-7
 cmd=""
 trace=""
 
 custom_log=""
 patterns="-e CTS:"
 
 
 helpmsg=$(cat <<EOF
 Usage: %s [options] {[{init|local-init|setup} [TARGET]] | [OTHER-CMDS]}
 
 [--]help, -h            show help screen and exit
 -x                      turn on debugging
 -a                      show relevant screen sessions and exit
 -c,-g CLUSTER_NAME      set the cluster name
 -S                      show summary from the last CTS run
 -s                      show summary for the current log (see -l)
 -v                      increase verbosity
 -p                      (currently unused)
 -e PATTERN              grep pattern to apply when 'summary' or 'watch' requested
 -l                      print the filename of the log that would be operated on
 -w                      continous (filtered) monitoring of the log file
 -f,-sf FILE             show summary for the provided log
 -t TEST, [0-9]*         add a test to the working set
 [--]build               [???] request building Pacemaker
 [--]kill                request termination of cluster software
 [--]run                 request CTS run (passing remaining arguments through)
 [--]boot, start         request CTS run (with --boot option)
 [--]clean               request cleaning up after CTS run
 [--]install, --inst     request installing packages to get ready to run CTS
 [--]setup               request initialization to get ready to run CTS
 trace-ls, tls           list traced functions
 trace-add, tadd FUNC    add a function to the list of traced ones
 trace-rm, trm FUNC      remove a function from the list of traced ones
 trace-set, tset FUNC    set function(s) as the only to be traced
 (f|fedora|r|rhel).*     specify target distro
 init, local-init        [local] initialize CTS environment
 --wget                  [local] download up-to-date CTS helpers
 --                      delimits tests that follow
 EOF
 )
 
 while true; do
     case $1 in
 	-h|--help|help) printf "${helpmsg}\n" "$0"; exit;;
 	-x) set -x; shift;;
 	-a)
 	screen -ls | grep cts
 	exit 0;;
 	-c|-g) cluster_name=$2; shift; shift;;
 	-S) summary=1; saved=1; shift;;
 	-s) summary=1; shift;;
 	-v) verbose=`expr $verbose + 1`; shift;;
 	-p) pengine=1; shift;;
 	-e) patterns="$patterns -e `echo $2 | sed 's/ /\\\W/g'`"; shift; shift;;
 	-l) logfile=1; shift;;
 	-w) watch=1; shift;;
 	-f|-sf) summary=1; custom_log=$2; shift; shift;;
 	-t) tests="$tests $2"; shift; shift;;
 	[0-9]*) tests="$tests $1"; shift;;
 	--build|build) build=1; shift;;
 	--kill|kill) kill=1; shift; break;;
 	--run|run) run=1; shift; break;;
 	--boot|boot|start) boot=1; clean=1; shift; break;;
 	--clean|clean) clean=1; shift;;
 	--inst|--install|install) install=1; clean=1; shift;;
 	--setup|setup) setup=1; shift;;
 	trace-ls|tls) cmd=$1; shift;;
 	trace-add|tadd|trace-rm|trm|trace-set|tset) cmd=$1; trace=$2; shift; shift;;
 	f*|fedora*)
 		target="fedora-`echo $1 | sed -e s/fedora// -e s/-// -e s/f//`"
 		shift;;
 	r|rhel) target="rhel-7"; shift;;
 	r*|rhel*)
 		target="rhel-`echo $1 | sed -e s/rhel// -e s/-// -e s/r//`"
 		shift;;
 	init|local-init)
 	    local_root=
 	    case $cts_root in
 		/*) local_root=`dirname $cts_root`;;
 		*)  local_root=`dirname $PWD/$cts_root`;;
 	    esac
 
 	    cat << EOF > $cts_root/CTSvars.py
 class CTSvars:
         CTS_home="$local_root/cts"
         Fencing_home="$local_root/fencing"
         CRM_CONFIG_DIR="/var/lib/pacemaker/cib"
         CRM_DAEMON_USER="hacluster"
         CRM_DAEMON_DIR="/usr/libexec/pacemaker"
         OCF_ROOT_DIR="/usr/lib/ocf"
 EOF
 
 	    files="extra/cluster-init extra/cluster-helper extra/cluster-clean tools/crm_report.in"
 	    for f in $files; do
 		cp $local_root/$f $cts_root/
 	    done
 
 	    cp $local_root/tools/report.common.in $local_root/tools/report.common
 	    sed -i.sed s:@localstatedir@:/var: $local_root/tools/report.common
 
 	    cp $cts_root/crm_report.in $cts_root/crm_report
 	    sed -i.sed s:@datadir@/@PACKAGE@:$local_root/tools: $cts_root/crm_report
 	    chmod +x $cts_root/crm_report
 
 	    cp $cts_root/LSBDummy.in $cts_root/LSBDummy
 	    chmod +x $local_root/fencing/fence_*
 	    sed -i.sed s:@OCF_ROOT_DIR@:/usr/lib/ocf: $cts_root/LSBDummy
 	    
 	    echo "Make sure you add $cts_root to your PATH and set a value for \$cluster_name in .bashrc"
 	    exit 0
 	    ;;
 
 	--wget)
 	    files="cluster-helper cluster-init cluster-clean"
 	    for f in $files; do
 		rm -f $cts_root/$f
 		echo "Downloading helper script $f from GitHub"
 		wget -O $cts_root/$f https://raw.github.com/ClusterLabs/pacemaker/master/extra/$f
 		chmod +x $cts_root/$f
 	    done
 	    shift
 	    ;;
 	--) shift; tests="$tests $*"; break;;
 	"") break;;
 	*) echo "Unknown argument: $1"; exit 1;;
     esac
 done
 
 # Add the location of this script
 export PATH="$PATH:$cts_root"
 which cluster-helper &>/dev/null
 if [ $? != 0 ]; then
     echo $0 needs the cluster-helper script to be in your path
     echo You can obtain it from: https://raw.github.com/ClusterLabs/pacemaker/master/extra/cluster-helper
     exit 1
 fi
 
 which cluster-clean &>/dev/null
 if [ $? != 0 ]; then
     echo $0 needs the cluster-clean script to be in your path
     echo You can obtain it from: https://raw.github.com/ClusterLabs/pacemaker/master/extra/cluster-clean
     exit 1
 fi
 
 if [ "x$cluster_name" = x -o "x$cluster_name" = xpick ]; then
     clusters=`ls -1 ~/.dsh/group/[a-z]+[0-9] | sed s/.*group.// | tr '\n' ' ' `
 
     echo "custom) interactively define a cluster"
     for i in $clusters; do
 	echo "$i) `cluster-helper --list short -g $i`"
     done
 
     read -p "Choose a cluster [custom]: " cluster_name
     echo
 fi
 
 if [ -z $cluster_name ]; then
     cluster_name=custom
 fi
 
 
 case $cluster_name in
   custom)
     read -p "Cluster name: " cluster_name
     read -p "Cluster hosts: " cluster_hosts
     read -p "Cluster log file: " cluster_log
     cluster-helper add -g "$cluster_name" -w "$cluster_hosts"
     ;;
   *)
     cluster_hosts=`cluster-helper --list short -g $cluster_name`
     cluster_log=~/cluster-$cluster_name.log;
     ;;
 esac
 
 if [ x$cmd != x ]; then
     config=/etc/sysconfig/pacemaker
     case $cmd in
 	trace-ls|tls)
 	    cluster-helper -g $cluster_name -- grep PCMK_trace_functions $config
 	    ;;
 	trace-add|tadd)
 	    echo "Adding $trace to PCMK_trace_functions"
 	    cluster-helper -g $cluster_name -- sed -i "s/.*PCMK_trace_functions=/PCMK_trace_functions=$trace,/" $config
 	    ;;
 	trace-rm|trm)
 	    echo "Removing $trace from PCMK_trace_functions"
 	    cluster-helper -g $cluster_name -- sed -i "s/.*PCMK_trace_functions=\\\\\\(.*\\\\\\)$trace,\\\\\\(.*\\\\\\)/PCMK_trace_functions=\\\\\\1\\\\\\2/" $config
 	    ;;
 	trace-set|tset)
 	    echo "Setting PCMK_trace_functions to '$trace'"
 	    cluster-helper -g $cluster_name -- sed -i "s/.*PCMK_trace_functions.*/PCMK_trace_functions=$trace/" $config
 	    ;;
     esac
     exit 0
 fi
 
 if [ $build = 1 -a $run = 1 ]; then
     install=1
     clean=1
 fi
 
 if [ $build = 1 ]; then
     which build-pcmk
     if [ $? != 0 ]; then
 	echo "You'll need to write/obtain build-pcmk in order to build pacemaker from here.  Skipping"
     else
 	build-pcmk r7
 	rc=$?
 	if [ $rc != 0 ]; then
 	    echo "Build failed: $rc"
 	    exit $rc
 	fi
     fi
 fi
 
 if [ $clean = 1 ]; then
     rm -f $cluster_log; cluster-clean -g $cluster_name --kill
 elif [ $kill = 1 ]; then
     cluster-clean -g $cluster_name --kill-only
     exit 0
 fi
 
 if [ $install = 1 ]; then
     cluster-helper -g $cluster_name -- yum install -y pacemaker pacemaker-debuginfo pacemaker-cts libqb libqb-debuginfo
 fi
 
 if [ $setup = 1 ]; then
     cluster-init -g $cluster_name $target -u --test
     exit 0
 
 elif [ $boot = 1 ]; then
     $cts_root/CTSlab.py -r -c -g $cluster_name --boot
     rc=$?
     if [ $rc = 0 ]; then
 	echo "The cluster is ready..."
     fi
     exit $rc
 
 elif [ $run = 1 ]; then
     $cts_root/CTSlab.py -r -c -g $cluster_name 500 "$@"
     exit $?
 
 elif [ $clean = 1 ]; then
     exit 0
 fi
 
 screen -ls | grep cts-$cluster_name &>/dev/null
 active=$?
 
 if [ ! -z $custom_log ]; then
     cluster_log=$custom_log
 fi
 
 if [ "x$tests" != x -a "x$tests" != "x " ]; then
     for t in $tests; do
 	echo "crm_report --cts-log $cluster_log -d -T $t"
 	crm_report --cts-log $cluster_log -d -T $t
     done
 
 elif [ $logfile = 1 ]; then
     echo $cluster_log
 
 elif [ $summary = 1 ]; then
     files=$cluster_log
     if [ $saved = 1 ]; then
 	files=`ls -1tr ~/CTS-*/cluster-log.txt`
     fi
     for f in $files; do
 	echo $f
 	case $verbose in
 	    0) cat -n $f | grep $patterns | grep -v "CTS: debug:"
     		;;
 	    1) cat -n $f | grep $patterns | grep -v "CTS:.* cmd:"
     		;;
 	    *) cat -n $f | grep $patterns
 		;;
 	esac
 	echo ""
     done
 
 elif [ $watch = 1 ]; then
     case $verbose in
 	0) tail -F $cluster_log | grep $patterns | grep -v "CTS: debug:"
     		;;
 	1) tail -F $cluster_log | grep $patterns | grep -v "CTS:.* cmd:"
     		;;
 	*) tail -F $cluster_log | grep $patterns
 		;;
     esac
 
 elif [ $active = 0 ]; then
     screen -x cts-$cluster_name
 
 else
     touch $cluster_log
 
 #    . ~/.bashrc
     export cluster_name cluster_hosts cluster_log
     screen -S cts-$cluster_name bash
 fi
diff --git a/pacemaker.spec.in b/pacemaker.spec.in
index b0629ce1d7..9890882c05 100644
--- a/pacemaker.spec.in
+++ b/pacemaker.spec.in
@@ -1,775 +1,750 @@
 # Globals and defines to control package behavior (configure these as desired)
 
 ## User and group to use for nonprivileged services
 %global uname hacluster
 %global gname haclient
 
 ## Where to install Pacemaker documentation
 %global pcmk_docdir %{_docdir}/%{name}
 
 ## GitHub entity that distributes source (for ease of using a fork)
 %global github_owner ClusterLabs
 
 ## Upstream pacemaker version, and its package version (specversion
 ## can be incremented to build packages reliably considered "newer"
 ## than previously built packages with the same pcmkversion)
 %global pcmkversion 2.0.0
 %global specversion 1
 
 ## Upstream commit (or git tag, such as "Pacemaker-" plus the
 ## {pcmkversion} macro for an official release) to use for this package
 %global commit HEAD
 ## Since git v2.11, the extent of abbreviation is autoscaled by default
 ## (used to be constant of 7), so we need to convey it for non-tags, too.
 %global commit_abbrev 7
 
 ## Python major version to use (2, 3, or 0 for auto-detect)
 %global python_major 0
 
 
 # Define globals for convenient use later
 
 ## Workaround to use parentheses in other globals
 %global lparen (
 %global rparen )
 
 ## Short version of git commit
 %define shortcommit %(c=%{commit}; case ${c} in
                       Pacemaker-*%{rparen} echo ${c:10};;
                       *%{rparen} echo ${c:0:%{commit_abbrev}};; esac)
 
 ## Whether this is a tagged release
 %define tag_release %([ %{commit} != Pacemaker-%{shortcommit} ]; echo $?)
 
 ## Whether this is a release candidate (in case of a tagged release)
 %define pre_release %([ "%{tag_release}" -eq 0 ] || {
                       case "%{shortcommit}" in *-rc[[:digit:]]*%{rparen} false;;
                       esac; }; echo $?)
 
 ## Heuristic used to infer bleeding-edge deployments that are
 ## less likely to have working versions of the documentation tools
 %define bleeding %(test ! -e /etc/yum.repos.d/fedora-rawhide.repo; echo $?)
 
 ## Whether this platform defaults to using systemd as an init system
 ## (needs to be evaluated prior to BuildRequires being enumerated and
 ## installed as it's intended to conditionally select some of these, and
 ## for that there are only few indicators with varying reliability:
 ## - presence of systemd-defined macros (when building in a full-fledged
 ##   environment, which is not the case with ordinary mock-based builds)
 ## - systemd-aware rpm as manifested with the presence of particular
 ##   macro (rpm itself will trivially always be present when building)
 ## - existence of /usr/lib/os-release file, which is something heavily
 ##   propagated by systemd project
 ## - when not good enough, there's always a possibility to check
 ##   particular distro-specific macros (incl. version comparison)
-%define systemd_native (%{?_unitdir:1}%{?!_unitdir:0}%{nil \
-  } || %{?__transaction_systemd_inhibit:1}%{?!__transaction_systemd_inhibit:0}%{nil \
+%define systemd_native (%{?_unitdir:1}%{!?_unitdir:0}%{nil \
+  } || %{?__transaction_systemd_inhibit:1}%{!?__transaction_systemd_inhibit:0}%{nil \
   } || %(test -f /usr/lib/os-release; test $? -ne 0; echo $?))
 
 
 # Python-related definitions
 
 ## Use Python 3 on certain platforms if major version not specified
 %if %{?python_major} == 0
 %if 0%{?fedora} > 26 || 0%{?rhel} > 7
 %global python_major 3
 %endif
 %endif
 
 ## Turn off auto-compilation of Python files outside site-packages directory,
 ## so that the -libs-devel package is multilib-compliant (no *.py[co] files)
 %global __os_install_post %(echo '%{__os_install_post}' | {
                             sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g'; })
 
 ## Values that differ by Python major version
 %if 0%{?python_major} > 2
 %global python_path /usr/bin/python%{?python3_pkgversion}%{!?python3_pkgversion:3}
 %global python_pkg python3
 %global python_min 3.2
 %define py_site %{?python3_sitelib}%{!?python3_sitelib:%(
   python3 -c 'from distutils.sysconfig import get_python_lib as gpl; print(gpl(1))' 2>/dev/null)}
 %else
 %if 0%{?python_major} > 1
 %global python_path /usr/bin/python%{?python2_pkgversion}%{!?python2_pkgversion:2}
 %global python_pkg python2
 %global python_min 2.7
 %define py_site %{?python2_sitelib}%{!?python2_sitelib:%(
   python2 -c 'from distutils.sysconfig import get_python_lib as gpl; print(gpl(1))' 2>/dev/null)}
 %else
 %global python_min 2.7
 %global python_pkg python
 %define py_site %{?python_sitelib}%{!?python_sitelib:%(
   python -c 'from distutils.sysconfig import get_python_lib as gpl; print(gpl(1))' 2>/dev/null)}
 %endif
 %endif
 
 
 # Definitions for backward compatibility with older RPM versions
 
 ## Ensure the license macro behaves consistently (older RPM will otherwise
 ## overwrite it once it encounters "License:"). Courtesy Jason Tibbitts:
 ## https://pkgs.fedoraproject.org/cgit/rpms/epel-rpm-macros.git/tree/macros.zzz-epel?h=el6&id=e1adcb77
 %if !%{defined _licensedir}
 %define description %{lua:
     rpm.define("license %doc")
     print("%description")
 }
 %endif
 
 
 # Define conditionals so that "rpmbuild --with <feature>" and
 # "rpmbuild --without <feature>" can enable and disable specific features
 
 ## Add option to enable support for stonith/external fencing agents
 %bcond_with stonithd
 
 ## Add option to create binaries suitable for use with profiling tools
 %bcond_with profiling
 
 ## Add option to create binaries with coverage analysis
 %bcond_with coverage
 
 ## Add option to skip generating documentation
 ## (the build tools aren't available everywhere)
 %bcond_without doc
 
 ## Add option to prefix package version with "0."
 ## (so later "official" packages will be considered updates)
 %bcond_with pre_release
 
 ## Add option to ship Upstart job files
 %bcond_with upstart_job
 
 ## Add option to turn off hardening of libraries and daemon executables
 %bcond_without hardening
 
 
 # Keep sane profiling data if requested
 %if %{with profiling}
 
 ## Disable -debuginfo package and stripping binaries/libraries
 %define debug_package %{nil}
 
 %endif
 
 
 # Define the release version
 # (do not look at externally enforced pre-release flag for tagged releases
 # as only -rc tags, captured with the second condition, implies that then)
 %if (!%{tag_release} && %{with pre_release}) || 0%{pre_release}
 %if 0%{pre_release}
 %define pcmk_release 0.%{specversion}.%(s=%{shortcommit}; echo ${s: -3})
 %else
 %define pcmk_release 0.%{specversion}.%{shortcommit}.git
 %endif
 %else
 %if 0%{tag_release}
 %define pcmk_release %{specversion}
 %else
 %define pcmk_release %{specversion}.%{shortcommit}.git
 %endif
 %endif
 
 Name:          pacemaker
 Summary:       Scalable High-Availability cluster resource manager
 Version:       %{pcmkversion}
 Release:       %{pcmk_release}%{?dist}
 %if %{defined _unitdir}
 License:       GPLv2+ and LGPLv2+
 %else
 # initscript is Revised BSD
 License:       GPLv2+ and LGPLv2+ and BSD
 %endif
 Url:           http://www.clusterlabs.org
 Group:         System Environment/Daemons
 
 # Hint: use "spectool -s 0 pacemaker.spec" (rpmdevtools) to check the final URL:
 # https://github.com/ClusterLabs/pacemaker/archive/e91769e5a39f5cb2f7b097d3c612368f0530535e/pacemaker-e91769e.tar.gz
 Source0:       https://github.com/%{github_owner}/%{name}/archive/%{commit}/%{name}-%{shortcommit}.tar.gz
-BuildRoot:     %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
-AutoReqProv:   on
 Requires:      resource-agents
 Requires:      %{name}-libs = %{version}-%{release}
 Requires:      %{name}-cluster-libs = %{version}-%{release}
 Requires:      %{name}-cli = %{version}-%{release}
-
-%if %{defined systemd_requires}
-%systemd_requires
-%endif
+%{?systemd_requires}
 
 # Pacemaker requires a minimum Python functionality
 Requires:      %{python_pkg} >= %{python_min}
 BuildRequires: %{python_pkg}-devel >= %{python_min}
 
 # Pacemaker requires a minimum libqb functionality
 Requires:      libqb >= 0.13.0
 BuildRequires: libqb-devel >= 0.13.0
 
 # Basics required for the build (even if usually satisfied through other BRs)
 BuildRequires: coreutils findutils grep sed
 
 # Required for core functionality
 BuildRequires: automake autoconf gcc libtool pkgconfig libtool-ltdl-devel
 BuildRequires: pkgconfig(glib-2.0) >= 2.16
 BuildRequires: libxml2-devel libxslt-devel libuuid-devel
 BuildRequires: bzip2-devel pam-devel
 
 # Enables optional functionality
 BuildRequires: ncurses-devel docbook-style-xsl
 BuildRequires: help2man gnutls-devel pkgconfig(dbus-1)
 
 %if %{systemd_native}
 BuildRequires: pkgconfig(systemd)
 %endif
 
 Requires:      corosync >= 2.0.0
 BuildRequires: corosynclib-devel >= 2.0.0
 
 %if %{with stonithd}
 BuildRequires: cluster-glue-libs-devel
 %endif
 
 ## (note no avoiding effect when building through non-customized mock)
 %if !%{bleeding}
 %if %{with doc}
 BuildRequires: inkscape asciidoc publican
 %endif
 %endif
 
 %description
 Pacemaker is an advanced, scalable High-Availability cluster resource
 manager.
 
 It supports more than 16 node clusters with significant capabilities
 for managing resources and dependencies.
 
 It will run scripts at initialization, when machines go up or down,
 when related resources fail and can be configured to periodically check
 resource health.
 
 Available rpmbuild rebuild options:
   --with(out) : coverage doc stonithd hardening pre_release profiling
                 upstart_job
 
 %package cli
 License:       GPLv2+ and LGPLv2+
 Summary:       Command line tools for controlling Pacemaker clusters
 Group:         System Environment/Daemons
 Requires:      %{name}-libs = %{version}-%{release}
 Requires:      perl-TimeDate
 
 %description cli
 Pacemaker is an advanced, scalable High-Availability cluster resource
 manager.
 
 The %{name}-cli package contains command line tools that can be used
 to query and control the cluster from machines that may, or may not,
 be part of the cluster.
 
-%package -n %{name}-libs
+%package libs
 License:       GPLv2+ and LGPLv2+
 Summary:       Core Pacemaker libraries
 Group:         System Environment/Daemons
 Requires(pre): shadow-utils
 
-%description -n %{name}-libs
+%description libs
 Pacemaker is an advanced, scalable High-Availability cluster resource
 manager.
 
 The %{name}-libs package contains shared libraries needed for cluster
 nodes and those just running the CLI tools.
 
-%package -n %{name}-cluster-libs
+%package cluster-libs
 License:       GPLv2+ and LGPLv2+
 Summary:       Cluster Libraries used by Pacemaker
 Group:         System Environment/Daemons
 Requires:      %{name}-libs = %{version}-%{release}
 
-%description -n %{name}-cluster-libs
+%description cluster-libs
 Pacemaker is an advanced, scalable High-Availability cluster resource
 manager.
 
 The %{name}-cluster-libs package contains cluster-aware shared
 libraries needed for nodes that will form part of the cluster nodes.
 
 %package remote
 %if %{defined _unitdir}
 License:       GPLv2+ and LGPLv2+
 %else
 # initscript is Revised BSD
 License:       GPLv2+ and LGPLv2+ and BSD
 %endif
 Summary:       Pacemaker remote daemon for non-cluster nodes
 Group:         System Environment/Daemons
 Requires:      %{name}-libs = %{version}-%{release}
 Requires:      %{name}-cli = %{version}-%{release}
 Requires:      resource-agents
-%if %{defined systemd_requires}
-%systemd_requires
-%endif
+# -remote can be fully independent of systemd
+%{?systemd_ordering}%{!?systemd_ordering:%{?systemd_requires}}
 
 %description remote
 Pacemaker is an advanced, scalable High-Availability cluster resource
 manager.
 
 The %{name}-remote package contains the Pacemaker Remote daemon
 which is capable of extending pacemaker functionality to remote
 nodes not running the full corosync/cluster stack.
 
-%package -n %{name}-libs-devel
+%package libs-devel
 License:       GPLv2+ and LGPLv2+
 Summary:       Pacemaker development package
 Group:         Development/Libraries
 Requires:      %{name}-cts = %{version}-%{release}
 Requires:      %{name}-libs%{?_isa} = %{version}-%{release}
 Requires:      %{name}-cluster-libs%{?_isa} = %{version}-%{release}
 Requires:      libuuid-devel%{?_isa} libtool-ltdl-devel%{?_isa}
 Requires:      libxml2-devel%{?_isa} libxslt-devel%{?_isa}
 Requires:      bzip2-devel%{?_isa} glib2-devel%{?_isa}
 Requires:      libqb-devel%{?_isa}
 Requires:      corosynclib-devel%{?_isa} >= 2.0.0
 
-%description -n %{name}-libs-devel
+%description libs-devel
 Pacemaker is an advanced, scalable High-Availability cluster resource
 manager.
 
 The %{name}-libs-devel package contains headers and shared libraries
 for developing tools for Pacemaker.
 
 %package       cts
 License:       GPLv2+ and LGPLv2+
 Summary:       Test framework for cluster-related technologies like Pacemaker
 Group:         System Environment/Daemons
 Requires:      %{python_pkg} >= %{python_min}
 Requires:      %{name}-libs = %{version}-%{release}
+BuildArch:     noarch
 
 # systemd python bindings are separate package in some distros
 %if %{defined systemd_requires}
 
 %if 0%{?fedora} > 22 || 0%{?rhel} > 7
 Requires:      %{python_pkg}-systemd
 %else
 %if 0%{?fedora} > 20 || 0%{?rhel} > 6
 Requires:      systemd-python
 %endif
 %endif
 
 %endif
 
 %description   cts
 Test framework for cluster-related technologies like Pacemaker
 
 %package       doc
 License:       CC-BY-SA-4.0
 Summary:       Documentation for Pacemaker
 Group:         Documentation
+BuildArch:     noarch
 
 %description   doc
 Documentation for Pacemaker.
 
 Pacemaker is an advanced, scalable High-Availability cluster resource
 manager.
 
 %prep
 %setup -q -n %{name}-%{commit}
 
-# Force the local time
-#
-# 'git' sets the file date to the date of the last commit.
-# This can result in files having been created in the future
-# when building on machines in timezones 'behind' the one the
-# commit occurred in - which seriously confuses 'make'
-find . -exec touch \{\} \;
-
 %build
 
 # Early versions of autotools (e.g. RHEL <= 5) do not support --docdir
 export docdir=%{pcmk_docdir}
 
-export systemdunitdir=%{?_unitdir}%{?!_unitdir:no}
+export systemdunitdir=%{?_unitdir}%{!?_unitdir:no}
 
 %if %{with hardening}
 # prefer distro-provided hardening flags in case they are defined
 # through _hardening_{c,ld}flags macros, configure script will
 # use its own defaults otherwise; if such hardenings are completely
 # undesired, rpmbuild using "--without hardening"
 # (or "--define '_without_hardening 1'")
 export CFLAGS_HARDENED_EXE="%{?_hardening_cflags}"
 export CFLAGS_HARDENED_LIB="%{?_hardening_cflags}"
 export LDFLAGS_HARDENED_EXE="%{?_hardening_ldflags}"
 export LDFLAGS_HARDENED_LIB="%{?_hardening_ldflags}"
 %endif
 
 ./autogen.sh
 
 %{configure}                                       \
         %{?with_profiling:   --with-profiling}     \
         %{?with_coverage:    --with-coverage}      \
         %{!?with_doc:        --with-brand=}        \
         %{!?with_hardening:  --disable-hardening}  \
         %{?python_path:      PYTHON=%{python_path}} \
         --with-initdir=%{_initrddir}               \
         --localstatedir=%{_var}                    \
         --with-version=%{version}-%{release}
 
 %if 0%{?suse_version} >= 1200
 # Fedora handles rpath removal automagically
 sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
 sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
 %endif
 
 make %{_smp_mflags} V=1 all
 
 %check
 { cts/cts-pengine --run one-or-more-unrunnable-instances \
   && cts/cts-cli \
   && touch .CHECKED
 } 2>&1 | sed 's/[fF]ail/faiil/g'  # prevent false positives in rpmlint
-[ -f .CHECKED ] && rm -f -- .CHECKED || false
+[ -f .CHECKED ] && rm -f -- .CHECKED
+exit $?  # TODO remove when rpm<4.14 compatibility irrelevant
 
 %install
-rm -rf %{buildroot}
 make DESTDIR=%{buildroot} docdir=%{pcmk_docdir} V=1 install
 
 mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig
 install -m 644 mcp/pacemaker.sysconfig ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig/pacemaker
 install -m 644 tools/crm_mon.sysconfig ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig/crm_mon
 
 %if %{with upstart_job}
 mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/init
 install -m 644 mcp/pacemaker.upstart ${RPM_BUILD_ROOT}%{_sysconfdir}/init/pacemaker.conf
 install -m 644 mcp/pacemaker.combined.upstart ${RPM_BUILD_ROOT}%{_sysconfdir}/init/pacemaker.combined.conf
 install -m 644 tools/crm_mon.upstart ${RPM_BUILD_ROOT}%{_sysconfdir}/init/crm_mon.conf
 %endif
 
 %if %{defined _unitdir}
 mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/lib/rpm-state/%{name}
 %endif
 
 # These are not actually scripts
 find %{buildroot} -name '*.xml' -type f -print0 | xargs -0 chmod a-x
 
 # Don't package static libs
 find %{buildroot} -name '*.a' -type f -print0 | xargs -0 rm -f
 find %{buildroot} -name '*.la' -type f -print0 | xargs -0 rm -f
 
 # Do not package these either
 rm -f %{buildroot}/%{_libdir}/service_crm.so
 
 # Don't ship init scripts for systemd based platforms
 %if %{defined _unitdir}
 rm -f %{buildroot}/%{_initrddir}/pacemaker
 rm -f %{buildroot}/%{_initrddir}/pacemaker_remote
 %endif
 
 %if %{with coverage}
 GCOV_BASE=%{buildroot}/%{_var}/lib/pacemaker/gcov
 mkdir -p $GCOV_BASE
 find . -name '*.gcno' -type f | while read F ; do
         D=`dirname $F`
         mkdir -p ${GCOV_BASE}/$D
         cp $F ${GCOV_BASE}/$D
 done
 %endif
 
-%clean
-rm -rf %{buildroot}
-
 %post
 %if %{defined _unitdir}
 %systemd_post pacemaker.service
 %else
 /sbin/chkconfig --add pacemaker || :
 %endif
 
 %preun
 %if %{defined _unitdir}
 %systemd_preun pacemaker.service
 %else
 /sbin/service pacemaker stop >/dev/null 2>&1 || :
 if [ $1 -eq 0 ]; then
     # Package removal, not upgrade
     /sbin/chkconfig --del pacemaker || :
 fi
 %endif
 
 %postun
 %if %{defined _unitdir}
 %systemd_postun_with_restart pacemaker.service
 %endif
 
 %pre remote
 %if %{defined _unitdir}
 # Stop the service before anything is touched, and remember to restart
 # it as one of the last actions (compared to using systemd_postun_with_restart,
 # this avoids suicide when sbd is in use)
 systemctl --quiet is-active pacemaker_remote
 if [ $? -eq 0 ] ; then
     mkdir -p %{_localstatedir}/lib/rpm-state/%{name}
     touch %{_localstatedir}/lib/rpm-state/%{name}/restart_pacemaker_remote
     systemctl stop pacemaker_remote >/dev/null 2>&1
 else
     rm -f %{_localstatedir}/lib/rpm-state/%{name}/restart_pacemaker_remote
 fi
 %endif
 
 %post remote
 %if %{defined _unitdir}
 %systemd_post pacemaker_remote.service
 %else
 /sbin/chkconfig --add pacemaker_remote || :
 %endif
 
 %preun remote
 %if %{defined _unitdir}
 %systemd_preun pacemaker_remote.service
 %else
 /sbin/service pacemaker_remote stop >/dev/null 2>&1 || :
 if [ $1 -eq 0 ]; then
     # Package removal, not upgrade
     /sbin/chkconfig --del pacemaker_remote || :
 fi
 %endif
 
 %postun remote
 %if %{defined _unitdir}
 # This next line is a no-op, because we stopped the service earlier, but
 # we leave it here because it allows us to revert to the standard behavior
 # in the future if desired
 %systemd_postun_with_restart pacemaker_remote.service
 # Explicitly take care of removing the flag-file(s) upon final removal
 if [ $1 -eq 0 ] ; then
     rm -f %{_localstatedir}/lib/rpm-state/%{name}/restart_pacemaker_remote
 fi
 %endif
 
 %posttrans remote
 %if %{defined _unitdir}
 if [ -e %{_localstatedir}/lib/rpm-state/%{name}/restart_pacemaker_remote ] ; then
     systemctl start pacemaker_remote >/dev/null 2>&1
     rm -f %{_localstatedir}/lib/rpm-state/%{name}/restart_pacemaker_remote
 fi
 %endif
 
 %post cli
 %if %{defined _unitdir}
 %systemd_post crm_mon.service
 %endif
 
 %preun cli
 %if %{defined _unitdir}
 %systemd_preun crm_mon.service
 %endif
 
 %postun cli
 %if %{defined _unitdir}
 %systemd_postun_with_restart crm_mon.service
 %endif
 
-%pre -n %{name}-libs
-
+%pre libs
 getent group %{gname} >/dev/null || groupadd -r %{gname} -g 189
 getent passwd %{uname} >/dev/null || useradd -r -g %{gname} -u 189 -s /sbin/nologin -c "cluster user" %{uname}
 exit 0
 
-%post -n %{name}-libs -p /sbin/ldconfig
-
-%postun -n %{name}-libs -p /sbin/ldconfig
-
-%post -n %{name}-cluster-libs -p /sbin/ldconfig
+%if %{defined ldconfig_scriptlets}
+%ldconfig_scriptlets libs
+%ldconfig_scriptlets cluster-libs
+%else
+%post libs -p /sbin/ldconfig
+%postun libs -p /sbin/ldconfig
 
-%postun -n %{name}-cluster-libs -p /sbin/ldconfig
+%post cluster-libs -p /sbin/ldconfig
+%postun cluster-libs -p /sbin/ldconfig
+%endif
 
 %files
 ###########################################################
-%defattr(-,root,root)
-
 %config(noreplace) %{_sysconfdir}/sysconfig/pacemaker
 %{_sbindir}/pacemakerd
 
 %if %{defined _unitdir}
 %{_unitdir}/pacemaker.service
 %else
 %{_initrddir}/pacemaker
 %endif
 
 %exclude %{_libexecdir}/pacemaker/lrmd_test
 %exclude %{_sbindir}/pacemaker_remoted
 %{_libexecdir}/pacemaker/*
 
 %{_sbindir}/crm_attribute
 %{_sbindir}/crm_master
 %{_sbindir}/crm_node
 %{_sbindir}/fence_legacy
 %{_sbindir}/stonith_admin
 
 %doc %{_mandir}/man7/crmd.*
 %doc %{_mandir}/man7/pengine.*
 %doc %{_mandir}/man7/stonithd.*
 %doc %{_mandir}/man7/ocf_pacemaker_controld.*
 %doc %{_mandir}/man7/ocf_pacemaker_o2cb.*
 %doc %{_mandir}/man7/ocf_pacemaker_remote.*
 %doc %{_mandir}/man8/crm_attribute.*
 %doc %{_mandir}/man8/crm_node.*
 %doc %{_mandir}/man8/crm_master.*
 %doc %{_mandir}/man8/fence_legacy.*
 %doc %{_mandir}/man8/pacemakerd.*
 %doc %{_mandir}/man8/stonith_admin.*
 
 %doc %{_datadir}/pacemaker/alerts
 
 %license licenses/GPLv2
 %doc COPYING
 %doc ChangeLog
 
 %dir %attr (750, %{uname}, %{gname}) %{_var}/lib/pacemaker/cib
 %dir %attr (750, %{uname}, %{gname}) %{_var}/lib/pacemaker/pengine
 /usr/lib/ocf/resource.d/pacemaker/controld
 /usr/lib/ocf/resource.d/pacemaker/o2cb
 /usr/lib/ocf/resource.d/pacemaker/remote
 
 %if %{with upstart_job}
 %config(noreplace) %{_sysconfdir}/init/pacemaker.conf
 %config(noreplace) %{_sysconfdir}/init/pacemaker.combined.conf
 %endif
 
 %files cli
-%defattr(-,root,root)
-
 %dir %attr (750, root, %{gname}) %{_sysconfdir}/pacemaker
 %config(noreplace) %{_sysconfdir}/logrotate.d/pacemaker
 %config(noreplace) %{_sysconfdir}/sysconfig/crm_mon
 
 %if %{defined _unitdir}
 %{_unitdir}/crm_mon.service
 %endif
 
 %if %{with upstart_job}
 %config(noreplace) %{_sysconfdir}/init/crm_mon.conf
 %endif
 
 %{_sbindir}/attrd_updater
 %{_sbindir}/cibadmin
 %{_sbindir}/crm_diff
 %{_sbindir}/crm_error
 %{_sbindir}/crm_failcount
 %{_sbindir}/crm_mon
 %{_sbindir}/crm_resource
 %{_sbindir}/crm_standby
 %{_sbindir}/crm_verify
 %{_sbindir}/crmadmin
 %{_sbindir}/iso8601
 %{_sbindir}/crm_shadow
 %{_sbindir}/crm_simulate
 %{_sbindir}/crm_report
 %{_sbindir}/crm_ticket
 %exclude %{_datadir}/pacemaker/alerts
 %exclude %{_datadir}/pacemaker/tests
 %{_datadir}/pacemaker
 %{_datadir}/snmp/mibs/PCMK-MIB.txt
 %{_libexecdir}/pacemaker/lrmd_test
 
 %exclude /usr/lib/ocf/resource.d/pacemaker/controld
 %exclude /usr/lib/ocf/resource.d/pacemaker/o2cb
 %exclude /usr/lib/ocf/resource.d/pacemaker/remote
 
 %dir /usr/lib/ocf
 %dir /usr/lib/ocf/resource.d
 /usr/lib/ocf/resource.d/pacemaker
 
 %doc %{_mandir}/man7/*
 %exclude %{_mandir}/man7/crmd.*
 %exclude %{_mandir}/man7/pengine.*
 %exclude %{_mandir}/man7/stonithd.*
 %exclude %{_mandir}/man7/ocf_pacemaker_controld.*
 %exclude %{_mandir}/man7/ocf_pacemaker_o2cb.*
 %exclude %{_mandir}/man7/ocf_pacemaker_remote.*
 %doc %{_mandir}/man8/*
 %exclude %{_mandir}/man8/crm_attribute.*
 %exclude %{_mandir}/man8/crm_node.*
 %exclude %{_mandir}/man8/crm_master.*
 %exclude %{_mandir}/man8/fence_legacy.*
 %exclude %{_mandir}/man8/pacemakerd.*
 %exclude %{_mandir}/man8/pacemaker_remoted.*
 %exclude %{_mandir}/man8/stonith_admin.*
 
 %license licenses/GPLv2
 %doc COPYING
 %doc ChangeLog
 
 %dir %attr (750, %{uname}, %{gname}) %{_var}/lib/pacemaker
 %dir %attr (750, %{uname}, %{gname}) %{_var}/lib/pacemaker/blackbox
 %dir %attr (750, %{uname}, %{gname}) %{_var}/lib/pacemaker/cores
 %dir %attr (770, %{uname}, %{gname}) %{_var}/log/pacemaker
 %dir %attr (770, %{uname}, %{gname}) %{_var}/log/pacemaker/bundles
 
-%files -n %{name}-libs
-%defattr(-,root,root)
-
+%files libs
 %{_libdir}/libcib.so.*
 %{_libdir}/liblrmd.so.*
 %{_libdir}/libcrmservice.so.*
 %{_libdir}/libcrmcommon.so.*
 %{_libdir}/libpe_status.so.*
 %{_libdir}/libpe_rules.so.*
 %{_libdir}/libpengine.so.*
 %{_libdir}/libstonithd.so.*
 %{_libdir}/libtransitioner.so.*
 %license licenses/LGPLv2.1
 %doc COPYING
 %doc ChangeLog
 
-%files -n %{name}-cluster-libs
-%defattr(-,root,root)
+%files cluster-libs
 %{_libdir}/libcrmcluster.so.*
 %license licenses/LGPLv2.1
 %doc COPYING
 %doc ChangeLog
 
 %files remote
-%defattr(-,root,root)
-
 %config(noreplace) %{_sysconfdir}/sysconfig/pacemaker
 %if %{defined _unitdir}
 # state directory is shared between the subpackets
 # let rpm take care of removing it once it isn't
 # referenced anymore and empty
 %ghost %dir %{_localstatedir}/lib/rpm-state/%{name}
 %{_unitdir}/pacemaker_remote.service
 %else
 %{_initrddir}/pacemaker_remote
 %endif
 
 %{_sbindir}/pacemaker_remoted
 %{_mandir}/man8/pacemaker_remoted.*
 %license licenses/GPLv2
 %doc COPYING
 %doc ChangeLog
 
 %files doc
-%defattr(-,root,root)
 %doc %{pcmk_docdir}
 %license licenses/CC-BY-SA-4.0
 
 %files cts
-%defattr(-,root,root)
 %{py_site}/cts
 %{_datadir}/pacemaker/tests
 %license licenses/GPLv2
 %doc COPYING
 %doc ChangeLog
 
-%files -n %{name}-libs-devel
-%defattr(-,root,root)
+%files libs-devel
 %{_includedir}/pacemaker
 %{_libdir}/*.so
 %if %{with coverage}
 %{_var}/lib/pacemaker/gcov
 %endif
 %{_libdir}/pkgconfig/*.pc
 %license licenses/LGPLv2.1
 %doc COPYING
 %doc ChangeLog
 
 %changelog