2 # Copyright (C) 2004 Christophe Varoqui, <christophe.varoqui@opensvc.com>
6 # Uncomment to disable libdmmp support
9 # Uncomment to disable dmevents polling support
10 # ENABLE_DMEVENTS_POLL = 0
12 # List of scsi device handler modules to load on boot, e.g.
13 # SCSI_DH_MODULES_PRELOAD := scsi_dh_alua scsi_dh_rdac
14 SCSI_DH_MODULES_PRELOAD :=
17 PKGCONFIG ?= pkg-config
24 ifeq ($(shell test -d /lib64 && echo 1),1)
32 ifeq ($(shell test -L /var/run -o ! -d /var/run && echo 1),1)
40 ifeq ($(shell $(PKGCONFIG) --modversion libsystemd >/dev/null 2>&1 && echo 1), 1)
41 SYSTEMD = $(shell $(PKGCONFIG) --modversion libsystemd | awk '{print $$1}')
43 ifeq ($(shell systemctl --version >/dev/null 2>&1 && echo 1), 1)
44 SYSTEMD = $(shell systemctl --version 2> /dev/null | \
45 sed -n 's/systemd \([0-9]*\).*/\1/p')
54 ifndef DEVMAPPER_INCDIR
55 ifeq ($(shell $(PKGCONFIG) --modversion devmapper >/dev/null 2>&1 && echo 1), 1)
56 DEVMAPPER_INCDIR = $(shell $(PKGCONFIG) --variable=includedir devmapper)
58 DEVMAPPER_INCDIR = /usr/include
63 ifeq ($(shell $(PKGCONFIG) --modversion libudev >/dev/null 2>&1 && echo 1), 1)
64 LIBUDEV_INCDIR = $(shell $(PKGCONFIG) --variable=includedir libudev)
66 LIBUDEV_INCDIR = /usr/include
70 # Allow user to override default location.
71 ifndef LINUX_HEADERS_INCDIR
72 LINUX_HEADERS_INCDIR = /usr/include
76 exec_prefix = $(prefix)
77 usr_prefix = $(prefix)
78 bindir = $(exec_prefix)/sbin
79 libudevdir = $(prefix)/$(SYSTEMDPATH)/udev
80 udevrulesdir = $(libudevdir)/rules.d
81 modulesloaddir = $(prefix)/$(SYSTEMDPATH)/modules-load.d
82 multipathdir = $(TOPDIR)/libmultipath
83 man8dir = $(prefix)/usr/share/man/man8
84 man5dir = $(prefix)/usr/share/man/man5
85 man3dir = $(prefix)/usr/share/man/man3
86 syslibdir = $(prefix)/$(LIB)
87 usrlibdir = $(usr_prefix)/$(LIB)
88 libdir = $(prefix)/$(LIB)/multipath
89 unitdir = $(prefix)/$(SYSTEMDPATH)/systemd/system
90 mpathpersistdir = $(TOPDIR)/libmpathpersist
91 mpathcmddir = $(TOPDIR)/libmpathcmd
92 mpathvaliddir = $(TOPDIR)/libmpathvalid
93 thirdpartydir = $(TOPDIR)/third-party
94 libdmmpdir = $(TOPDIR)/libdmmp
95 nvmedir = $(TOPDIR)/libmultipath/nvme
96 includedir = $(prefix)/usr/include
97 pkgconfdir = $(usrlibdir)/pkgconfig
99 GZIP_PROG = gzip -9 -c
102 INSTALL_PROGRAM = install
103 NV_VERSION_SCRIPT = $(VERSION_SCRIPT:%.version=%-nv.version)
105 # $(call TEST_CC_OPTION,option,fallback)
106 # Test if the C compiler supports the option.
107 # Evaluates to "option" if yes, and "fallback" otherwise.
108 TEST_CC_OPTION = $(shell \
109 if echo 'int main(void){return 0;}' | \
110 $(CC) -o /dev/null -c -Werror "$(1)" -xc - >/dev/null 2>&1; \
117 STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector)
118 ERROR_DISCARDED_QUALIFIERS := $(call TEST_CC_OPTION,-Werror=discarded-qualifiers,)
119 WNOCLOBBERED := $(call TEST_CC_OPTION,-Wno-clobbered -Wno-error=clobbered,)
120 WFORMATOVERFLOW := $(call TEST_CC_OPTION,-Wformat-overflow=2,)
122 OPTFLAGS := -O2 -g $(STACKPROT) --param=ssp-buffer-size=4
123 WARNFLAGS := -Werror -Wall -Wextra -Wformat=2 $(WFORMATOVERFLOW) -Werror=implicit-int \
124 -Werror=implicit-function-declaration -Werror=format-security \
125 $(WNOCLOBBERED) -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS)
126 CPPFLAGS := -Wp,-D_FORTIFY_SOURCE=2
127 CFLAGS := --std=gnu99 $(CFLAGS) $(OPTFLAGS) $(WARNFLAGS) -pipe \
128 -DBIN_DIR=\"$(bindir)\" -DLIB_STRING=\"${LIB}\" -DRUN_DIR=\"${RUN}\" \
130 BIN_CFLAGS = -fPIE -DPIE
132 SHARED_FLAGS = -shared
133 LDFLAGS := $(LDFLAGS) -Wl,-z,relro -Wl,-z,now -Wl,-z,defs
136 # Check whether a function with name $1 has been declared in header file $2.
137 check_func = $(shell \
138 if grep -Eq "^[^[:blank:]]+[[:blank:]]+$1[[:blank:]]*(.*)*" "$2"; then \
145 echo 1>&2 "Checking for $1 in $2 ... $$status"; \
149 # Checker whether a file with name $1 exists
150 check_file = $(shell \
151 if [ -f "$1" ]; then \
158 echo 1>&2 "Checking if $1 exists ... $$status"; \
162 # Check whether a file contains a variable with name $1 in header file $2
163 check_var = $(shell \
164 if grep -Eq "(^|[[:blank:]])$1([[:blank:]]|=|$$)" "$2"; then \
171 echo 1>&2 "Checking for .. $1 in $2 ... $$status"; \
176 @echo building $@ because of $?
177 $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<