1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264
|
# Makefile for drbd
#
# This file is part of DRBD by Philipp Reisner and Lars Ellenberg.
#
# Copyright (C) 2001-2008, LINBIT Information Technologies GmbH.
# Copyright (C) 2001-2008, Philipp Reisner <philipp.reisner@linbit.com>.
# Copyright (C) 2002-2008, Lars Ellenberg <lars.ellenberg@linbit.com>.
#
# drbd 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, or (at your option)
# any later version.
#
# drbd 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 drbd
# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
#
# TODO move some of the more cryptic bash scriptlets here into scripts/*
# and call those from here. -- lge
# variables set by configure
GIT = @GIT@
LN_S = @LN_S@
PREFIX = @prefix@
RPMBUILD = @RPMBUILD@
SED = @SED@
# features enabled or disabled by configure
WITH_UDEV = @WITH_UDEV@
WITH_XEN = @WITH_XEN@
WITH_PACEMAKER = @WITH_PACEMAKER@
WITH_HEARTBEAT = @WITH_HEARTBEAT@
WITH_RGMANAGER = @WITH_RGMANAGER@
WITH_BASHCOMPLETION = @WITH_BASHCOMPLETION@
WITH_83_SUPPORT = @WITH_83_SUPPORT@
WITH_84_SUPPORT = @WITH_84_SUPPORT@
WITH_MANUAL = @WITH_MANUAL@
WITH_DRBDMON = @WITH_DRBDMON@
# for some reason some of the commands below only work correctly in bash,
# and not in e.g. dash. I'm too lazy to fix it to be compatible.
SHELL=/bin/bash
TOOLS_DIRS = user/shared user/v9 user/v84 user/v83 scripts user/drbdmon
DOC_DIRS = documentation/v83 documentation/v84 documentation/v9
SUBDIRS = $(TOOLS_DIRS) $(DOC_DIRS)
REL_VERSION := $(shell $(SED) -ne '/^AC_INIT/{s/^[^,]*, *\([^,]*\) *,.*/\1/;p;q}' configure.ac)
ifdef FORCE
#
# NOTE to generate a tgz even if too lazy to update the changelogs,
# or to forcefully include the FIXME to be done: latest change date;
# for now, include the git hash of the latest commit
# in the tgz name:
# make distclean doc tgz FORCE=1
#
REL_VERSION := $(REL_VERSION)-$(shell $(GIT) rev-parse HEAD)
endif
DIST_VERSION := $(REL_VERSION)
FDIST_VERSION := $(shell test -e .filelist && sed -ne 's,^drbd-utils-\([^/]*\)/.*,\1,p;q' < .filelist)
ifeq ($(FDIST_VERSION),)
FDIST_VERSION := $(DIST_VERSION)
endif
all-yes := check-submods configure tools
all-$(WITH_MANUAL) += doc
all: $(all-yes)
.PHONY: all tools doc
tools:
@ set -e; for i in $(TOOLS_DIRS); do $(MAKE) -C $$i ; done
@ echo -e "\n\tUserland tools build was successful."
doc:
$(MAKE) -C documentation/v9 doc
ifeq ($(WITH_83_SUPPORT),yes)
$(MAKE) -C documentation/v83 doc
endif
ifeq ($(WITH_84_SUPPORT),yes)
$(MAKE) -C documentation/v84 doc
endif
# we cannot use 'git submodule foreach':
# foreach only works if submodule already checked out
.PHONY: check-submods
check-submods:
@if test -d .git && test -s .gitmodules; then \
for d in `grep "^\[submodule" .gitmodules | cut -f2 -d'"'`; do \
if [ ! "`ls -A $$d`" ]; then \
git submodule init; \
git submodule update; \
break; \
fi; \
done; \
fi
.PHONY: doc-clean install install-tools clean distclean extra-clean uninstall
doc-clean:
$(MAKE) -C documentation/v9 doc-clean
ifeq ($(WITH_83_SUPPORT),yes)
$(MAKE) -C documentation/v83 doc-clean
endif
ifeq ($(WITH_84_SUPPORT),yes)
$(MAKE) -C documentation/v84 doc-clean
endif
install-yes := install-tools
install-$(WITH_MANUAL) += install-doc
install: $(install-yes)
install-tools:
@ set -e; for i in $(patsubst drbd,,$(TOOLS_DIRS)); do $(MAKE) -C $$i install; done
install-doc:
@ set -e; for i in $(patsubst drbd,,$(DOC_DIRS)); do $(MAKE) -C $$i install; done
.NOTPARALLEL clean:
@ set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i clean; done
rm -f *~
rm -rf dist
distclean:
@ set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i distclean; done
rm -f *~ .filelist
rm -rf dist
rm -rf autom4te.cache
rm -f config.log
EXTRA_CLEAN += Makefile user/Makefile user/v83/Makefile user/v84/Makefile user/v9/Makefile scripts/Makefile user/drbdmon/Makefile
EXTRA_CLEAN += documentation/Makefile documentation/v83/Makefile documentation/v84/Makefile documentation/v9/Makefile
EXTRA_CLEAN += user/shared/config.h drbd.spec
EXTRA_CLEAN += configure config.status
extra-clean: distclean
rm -f $(EXTRA_CLEAN)
uninstall:
@ set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i uninstall; done
.PHONY: check_changelogs_up2date
check_changelogs_up2date:
@ up2date=true; dver_re=$(DIST_VERSION); dver_re=$${dver_re//./\\.}; \
echo "checking for presence of $$dver_re in various changelog files"; \
in_changelog=$$(sed -n -e '0,/^%changelog/d' \
-e '/- '"$$dver_re"'-/p' < drbd.spec.in) ; \
if test -z "$$in_changelog" ; \
then \
echo -e "\n\t%changelog in drbd.spec.in needs update"; \
up2date=false; fi; \
if ! grep "^$$dver_re\>" >/dev/null 2>&1 ChangeLog; \
then \
echo -e "\n\tChangeLog needs update"; \
up2date=false; fi ; \
if ! grep "^AC_INIT(DRBD, $$dver_re" >/dev/null 2>&1 configure.ac; \
then \
echo -e "\n\tconfigure.ac needs update"; \
up2date=false; fi ; \
if ! grep "^drbd-utils ($$dver_re+linbit" >/dev/null 2>&1 debian/changelog; \
then \
echo -e "\n\tdebian/changelog needs update [ignored]\n"; \
: do not fail the build because of outdated debian/changelog ; fi ; \
$$up2date
PNAME := drbd-utils
.PHONY: .filelist
.filelist:
@set -e ; submodules=`$(GIT) submodule foreach --quiet 'echo $$path'`; \
$(GIT) ls-files | \
grep -vxF -e "$$submodules" | \
sed '$(if $(PRESERVE_DEBIAN),,/^debian/d);s#^#$(PNAME)-$(DIST_VERSION)/#' | \
grep -v "gitignore\|gitmodules" > .filelist
@$(GIT) submodule foreach --quiet 'git ls-files | sed -e "s,^,$(PNAME)-$(DIST_VERSION)/$$path/,"' | \
grep -v "gitignore\|gitmodules" >> .filelist
@[ -s .filelist ] # assert there is something in .filelist now
@find documentation -name "[^.]*.[58]" -o -name "*.html" | \
sed "s/^/$(PNAME)-$(DIST_VERSION)\//" >> .filelist ; \
echo $(PNAME)-$(DIST_VERSION)/user/shared/drbd_buildtag.c >> .filelist ; \
echo $(PNAME)-$(DIST_VERSION)/user/shared/config.h.in >> .filelist ; \
echo $(PNAME)-$(DIST_VERSION)/.filelist >> .filelist ; \
echo $(PNAME)-$(DIST_VERSION)/configure >> .filelist ; \
echo "./.filelist updated."
# tgz will no longer automatically update .filelist,
# so the tgz and therefore rpm target will work within
# an extracted tarball, too.
# to generate a distribution tarball, use make tarball,
# which will regenerate .filelist
.PHONY: tgz
tgz:
test -e .filelist
rm -f drbd-utils-$(FDIST_VERSION)
$(LN_S) . drbd-utils-$(FDIST_VERSION)
for f in $$(<.filelist) ; do [ -e $$f ] && continue ; echo missing: $$f ; exit 1; done
grep debian .filelist >/dev/null 2>&1 && _DEB=-debian || _DEB="" ; \
test -n "$$KEEPNAME" && _DEB="" || :; \
tar --owner=0 --group=0 -czf - -T .filelist > drbd-utils-$(FDIST_VERSION)$$_DEB.tar.gz
rm drbd-utils-$(FDIST_VERSION)
ifeq ($(FORCE),)
tgz: check_changelogs_up2date doc
endif
tools doc tgz: check-submods
.PHONY: check_all_committed prepare_release tarball
check_all_committed:
@$(if $(FORCE),-,)modified=`$(GIT) ls-files -m -t`; \
if test -n "$$modified" ; then \
echo "$$modified"; \
false; \
fi
prepare_release:
$(MAKE) tarball
$(MAKE) tarball PRESERVE_DEBIAN=1
debrelease:
$(MAKE) tarball PRESERVE_DEBIAN=1 KEEPNAME=1
configure.ac: ;
configure: configure.ac
aclocal
autoheader
autoconf
config.status: configure
@printf "\nYou need to call ./configure with appropriate arguments (again).\n\n"; exit 1
tarball: check-submods check_all_committed distclean doc configure .filelist
$(MAKE) tgz
ifdef RPMBUILD
drbd.spec: drbd.spec.in configure
./configure --enable-spec
.PHONY: rpmprep
rpmprep: tgz drbd.spec
cp drbd-utils-$(FDIST_VERSION).tar.gz `rpm -E "%_sourcedir"`
.PHONY: rpm
rpm: rpmprep
$(RPMBUILD) -bb \
$(RPMOPT) \
drbd.spec
@echo "You have now:" ; find `rpm -E "%_rpmdir"` -name *.rpm
.PHONY: srpm
srpm: rpmprep
$(RPMBUILD) -bs \
$(RPMOPT) \
drbd.spec
@echo "You have now:" ; find `rpm -E "%_srcrpmdir"` -name *.src.rpm
endif
Makefile.in: ;
Makefile: Makefile.in config.status
./config.status Makefile
|