# Makefile for drbd.o
#
# This file is part of DRBD by Philipp Reisner and Lars Ellenberg.
#
# 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; see the file COPYING.  If not, write to
# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
#

# variables set by configure
DISTRO = @DISTRO@
prefix = @prefix@
exec_prefix = @exec_prefix@
localstatedir = @localstatedir@
datarootdir = @datarootdir@
datadir = @datadir@
sbindir = @sbindir@
sysconfdir = @sysconfdir@
BASH_COMPLETION_SUFFIX = @BASH_COMPLETION_SUFFIX@
UDEV_RULE_SUFFIX = @UDEV_RULE_SUFFIX@
INITDIR = @INITDIR@
LIBDIR = @prefix@/lib/@PACKAGE_TARNAME@
CC = @CC@
CFLAGS = @CFLAGS@
LDFLAGS = @LDFLAGS@
LN_S = @LN_S@

DRBD_LIB_DIR = @DRBD_LIB_DIR@
DRBD_RUN_DIR = @DRBD_RUN_DIR@
DRBD_LOCK_DIR = @DRBD_LOCK_DIR@
DRBD_CONFIG_DIR = @DRBD_CONFIG_DIR@

# features enabled or disabled by configure
WITH_83_SUPPORT = @WITH_83_SUPPORT@
WITH_84_SUPPORT = @WITH_84_SUPPORT@
WITH_UDEV = @WITH_UDEV@
WITH_XEN = @WITH_XEN@
WITH_PACEMAKER = @WITH_PACEMAKER@
WITH_RGMANAGER = @WITH_RGMANAGER@
WITH_BASHCOMPLETION = @WITH_BASHCOMPLETION@

# 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

# variables meant to be overridden from the make command line
DESTDIR ?= /

CFLAGS += -Wall -I../../drbd-headers -I.. -I.
CFLAGS += $(EXTRA_CFLAGS)

.PHONY: drbd_buildtag.h drbd_buildtag.c

all: drbdmeta_scanner.c drbd_buildtag.c

drbd_buildtag.h:
	@set -e; exec > $@.new;							\
	echo -e "/* automatically generated. DO NOT EDIT. */";			\
	if test -e ../../.git && GITHEAD=$$(git rev-parse HEAD); then		\
		GITDIFF=$$(cd .. && git diff --name-only HEAD |			\
			tr -s '\t\n' '  ' |					\
			sed -e 's/ *$$//');					\
		echo -e "#define GITHASH \"$$GITHEAD\"";			\
		echo -e "#define GITDIFF \"$$GITDIFF\"";			\
	elif ! test -e $@ ; then						\
		echo >&2 "$@ not found.";					\
		test -e ../../.git &&						\
		>&2 printf "%s\n"						\
			"git did not work, but this looks like a git checkout?"	\
			"Install git and try again." ||				\
		echo >&2 "Your DRBD source tree is broken. Unpack again.";	\
		exit 1;								\
	else									\
		grep GITHASH $@ ;						\
		grep GITDIFF $@ ;						\
	fi ;									\
	mv -f $@.new $@

drbd_buildtag.c: drbd_buildtag.h
	@set -e; exec > $@.new;							\
	echo -e "/* automatically generated. DO NOT EDIT. */";			\
	echo -e "#include \"drbd_buildtag.h\"";					\
	echo -e "const char *drbd_buildtag(void)\n{";				\
	echo -e "\treturn \"GIT-hash: \" GITHASH GITDIFF";			\
	if [ -z "${WANT_DRBD_REPRODUCIBLE_BUILD}" ] || [ -z "${SOURCE_DATE_EPOCH}" ] ; then	\
		buildinfo="build by $$USER@$$HOSTNAME, `date "+%F %T"`" ;			\
	else											\
		buildinfo="reproducible build, `date -u -d@${SOURCE_DATE_EPOCH} "+%F %T"`" ;	\
	fi ;											\
	echo -e "\t\t\" $$buildinfo\";\n}";							\
	mv -f $@.new $@

drbdmeta_scanner.c: drbdmeta_scanner.fl drbdmeta_parser.h
	flex -s -odrbdmeta_scanner.c drbdmeta_scanner.fl

# drbdmeta is in this directory; but some header files it depends on are in 
# v9, so that's where it gets built and installed.

clean:
	rm -f drbdmeta_scanner.c
	! test -e ../../.git || rm -f drbd_buildtag.[ch]

distclean: clean

install: ; @true

uninstall: ; @true

.PHONY: install uninstall clean distclean
../../configure:
	@echo "please (re-)run ./autogen.sh with appropriate arguments"; exit 1
../../config.status: ../../configure
	@echo "please (re-)run ./configure with appropriate arguments"; exit 1
Makefile.in: ;
Makefile: Makefile.in ../../config.status
	cd ../.. && ./config.status user/shared/Makefile

