Imported Upstream version 0.8.9
[platform/upstream/multipath-tools.git] / Makefile.inc
1 #
2 # Copyright (C) 2004 Christophe Varoqui, <christophe.varoqui@opensvc.com>
3 #
4
5 #
6 # Uncomment to disable libdmmp support
7 # ENABLE_LIBDMMP = 0
8 #
9 # Uncomment to disable dmevents polling support
10 # ENABLE_DMEVENTS_POLL = 0
11
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 :=
15
16
17 PKGCONFIG       ?= pkg-config
18
19 ifeq ($(TOPDIR),)
20         TOPDIR  = ..
21 endif
22
23 ifndef LIB
24         ifeq ($(shell test -d /lib64 && echo 1),1)
25                 LIB=lib64
26         else
27                 LIB=lib
28         endif
29 endif
30
31 ifndef RUN
32         ifeq ($(shell test -L /var/run -o ! -d /var/run && echo 1),1)
33                 RUN=run
34         else
35                 RUN=var/run
36         endif
37 endif
38
39 ifndef SYSTEMD
40         ifeq ($(shell $(PKGCONFIG) --modversion libsystemd >/dev/null 2>&1 && echo 1), 1)
41                 SYSTEMD = $(shell $(PKGCONFIG) --modversion libsystemd | awk '{print $$1}')
42         else
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')
46                 endif
47         endif
48 endif
49
50 ifndef SYSTEMDPATH
51         SYSTEMDPATH=usr/lib
52 endif
53
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)
57         else
58                 DEVMAPPER_INCDIR = /usr/include
59         endif
60 endif
61
62 ifndef LIBUDEV_INCDIR
63         ifeq ($(shell $(PKGCONFIG) --modversion libudev >/dev/null 2>&1 && echo 1), 1)
64                 LIBUDEV_INCDIR = $(shell $(PKGCONFIG) --variable=includedir libudev)
65         else
66                 LIBUDEV_INCDIR = /usr/include
67         endif
68 endif
69
70 # Allow user to override default location.
71 ifndef LINUX_HEADERS_INCDIR
72         LINUX_HEADERS_INCDIR = /usr/include
73 endif
74
75 prefix          =
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
98
99 GZIP_PROG       = gzip -9 -c
100 RM              = rm -f
101 LN              = ln -sf
102 INSTALL_PROGRAM = install
103 NV_VERSION_SCRIPT = $(VERSION_SCRIPT:%.version=%-nv.version)
104
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; \
111         then \
112                 echo "$(1)"; \
113         else \
114                 echo "$(2)"; \
115         fi)
116
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,)
121
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}\" \
129                    -MMD -MP
130 BIN_CFLAGS      = -fPIE -DPIE
131 LIB_CFLAGS      = -fPIC
132 SHARED_FLAGS    = -shared
133 LDFLAGS         := $(LDFLAGS) -Wl,-z,relro -Wl,-z,now -Wl,-z,defs
134 BIN_LDFLAGS     = -pie
135
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 \
139                 found=1; \
140                 status="yes"; \
141         else \
142                 found=0; \
143                 status="no"; \
144         fi; \
145         echo 1>&2 "Checking for $1 in $2 ... $$status"; \
146         echo "$$found" \
147         )
148
149 # Checker whether a file with name $1 exists
150 check_file = $(shell \
151         if [ -f "$1" ]; then \
152                 found=1; \
153                 status="yes"; \
154         else \
155                 found=0; \
156                 status="no"; \
157         fi; \
158         echo 1>&2 "Checking if $1 exists ... $$status"; \
159         echo "$$found" \
160         )
161
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 \
165                 found=1; \
166                 status="yes"; \
167         else \
168                 found=0; \
169                 status="no"; \
170         fi; \
171         echo 1>&2 "Checking for ..  $1 in $2 ... $$status"; \
172         echo "$$found" \
173         )
174
175 %.o:    %.c
176         @echo building $@ because of $?
177         $(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<
178
179 %.abi:  %.so.0
180         abidw $< >$@
181
182 %.abi:  %.so
183         abidw $< >$@