]> granicus.if.org Git - zfs/blob - config/zfs-build.m4
Add support for "--enable-code-coverage" option
[zfs] / config / zfs-build.m4
1 AC_DEFUN([ZFS_AC_LICENSE], [
2         AC_MSG_CHECKING([zfs author])
3         AC_MSG_RESULT([$ZFS_META_AUTHOR])
4
5         AC_MSG_CHECKING([zfs license])
6         AC_MSG_RESULT([$ZFS_META_LICENSE])
7 ])
8
9 AC_DEFUN([ZFS_AC_DEBUG_ENABLE], [
10         KERNELCPPFLAGS="${KERNELCPPFLAGS} -DDEBUG -Werror"
11         HOSTCFLAGS="${HOSTCFLAGS} -DDEBUG -Werror"
12         DEBUG_CFLAGS="-DDEBUG -Werror"
13         DEBUG_STACKFLAGS="-fstack-check"
14         DEBUG_ZFS="_with_debug"
15         AC_DEFINE(ZFS_DEBUG, 1, [zfs debugging enabled])
16 ])
17
18 AC_DEFUN([ZFS_AC_DEBUG_DISABLE], [
19         KERNELCPPFLAGS="${KERNELCPPFLAGS} -DNDEBUG "
20         HOSTCFLAGS="${HOSTCFLAGS} -DNDEBUG "
21         DEBUG_CFLAGS="-DNDEBUG"
22         DEBUG_STACKFLAGS=""
23         DEBUG_ZFS="_without_debug"
24 ])
25
26 AC_DEFUN([ZFS_AC_DEBUG], [
27         AC_MSG_CHECKING([whether assertion support will be enabled])
28         AC_ARG_ENABLE([debug],
29                 [AS_HELP_STRING([--enable-debug],
30                 [Enable assertion support @<:@default=no@:>@])],
31                 [],
32                 [enable_debug=no])
33
34         AS_CASE(["x$enable_debug"],
35                 ["xyes"],
36                 [ZFS_AC_DEBUG_ENABLE],
37                 ["xno"],
38                 [ZFS_AC_DEBUG_DISABLE],
39                 [AC_MSG_ERROR([Unknown option $enable_debug])])
40
41         AC_SUBST(DEBUG_STACKFLAGS)
42         AC_SUBST(DEBUG_ZFS)
43         AC_MSG_RESULT([$enable_debug])
44 ])
45
46 AC_DEFUN([ZFS_AC_DEBUGINFO_KERNEL], [
47         KERNELMAKE_PARAMS="$KERNELMAKE_PARAMS CONFIG_DEBUG_INFO=y"
48         KERNELCPPFLAGS="${KERNELCPPFLAGS} -fno-inline"
49 ])
50
51 AC_DEFUN([ZFS_AC_DEBUGINFO_USER], [
52         DEBUG_CFLAGS="${DEBUG_CFLAGS} -g -fno-inline"
53 ])
54
55 AC_DEFUN([ZFS_AC_DEBUGINFO], [
56         AC_MSG_CHECKING([whether debuginfo support will be forced])
57         AC_ARG_ENABLE([debuginfo],
58                 [AS_HELP_STRING([--enable-debuginfo],
59                 [Force generation of debuginfo @<:@default=no@:>@])],
60                 [],
61                 [enable_debuginfo=no])
62
63         AS_CASE(["x$enable_debuginfo"],
64                 ["xyes"],
65                 [ZFS_AC_DEBUGINFO_KERNEL
66                 ZFS_AC_DEBUGINFO_USER],
67                 ["xkernel"],
68                 [ZFS_AC_DEBUGINFO_KERNEL],
69                 ["xuser"],
70                 [ZFS_AC_DEBUGINFO_USER],
71                 ["xno"],
72                 [],
73                 [AC_MSG_ERROR([Unknown option $enable_debug])])
74
75         AC_SUBST(DEBUG_CFLAGS)
76         AC_MSG_RESULT([$enable_debuginfo])
77 ])
78
79 AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [
80         ZFS_AC_CONFIG_ALWAYS_NO_UNUSED_BUT_SET_VARIABLE
81         ZFS_AC_CONFIG_ALWAYS_NO_BOOL_COMPARE
82         ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD
83         ZFS_AC_CONFIG_ALWAYS_ARCH
84 ])
85
86 AC_DEFUN([ZFS_AC_CONFIG], [
87         ZFS_CONFIG=all
88         AC_ARG_WITH([config],
89                 AS_HELP_STRING([--with-config=CONFIG],
90                 [Config file 'kernel|user|all|srpm']),
91                 [ZFS_CONFIG="$withval"])
92         AC_ARG_ENABLE([linux-builtin],
93                 [AC_HELP_STRING([--enable-linux-builtin],
94                 [Configure for builtin in-tree kernel modules @<:@default=no@:>@])],
95                 [],
96                 [enable_linux_builtin=no])
97
98         AC_MSG_CHECKING([zfs config])
99         AC_MSG_RESULT([$ZFS_CONFIG]);
100         AC_SUBST(ZFS_CONFIG)
101
102         ZFS_AC_CONFIG_ALWAYS
103
104         case "$ZFS_CONFIG" in
105                 kernel) ZFS_AC_CONFIG_KERNEL ;;
106                 user)   ZFS_AC_CONFIG_USER   ;;
107                 all)    ZFS_AC_CONFIG_USER
108                         ZFS_AC_CONFIG_KERNEL ;;
109                 srpm)                        ;;
110                 *)
111                 AC_MSG_RESULT([Error!])
112                 AC_MSG_ERROR([Bad value "$ZFS_CONFIG" for --with-config,
113                               user kernel|user|all|srpm]) ;;
114         esac
115
116         AM_CONDITIONAL([CONFIG_USER],
117             [test "$ZFS_CONFIG" = user -o "$ZFS_CONFIG" = all])
118         AM_CONDITIONAL([CONFIG_KERNEL],
119             [test "$ZFS_CONFIG" = kernel -o "$ZFS_CONFIG" = all] &&
120             [test "x$enable_linux_builtin" != xyes ])
121         AM_CONDITIONAL([WANT_DEVNAME2DEVID],
122             [test "x$user_libudev" = xyes ])
123         AM_CONDITIONAL([CONFIG_QAT],
124             [test "$ZFS_CONFIG" = kernel -o "$ZFS_CONFIG" = all] &&
125             [test "x$qatsrc" != x ])
126 ])
127
128 dnl #
129 dnl # Check for rpm+rpmbuild to build RPM packages.  If these tools
130 dnl # are missing it is non-fatal but you will not be able to build
131 dnl # RPM packages and will be warned if you try too.
132 dnl #
133 dnl # By default the generic spec file will be used because it requires
134 dnl # minimal dependencies.  Distribution specific spec files can be
135 dnl # placed under the 'rpm/<distribution>' directory and enabled using
136 dnl # the --with-spec=<distribution> configure option.
137 dnl #
138 AC_DEFUN([ZFS_AC_RPM], [
139         RPM=rpm
140         RPMBUILD=rpmbuild
141
142         AC_MSG_CHECKING([whether $RPM is available])
143         AS_IF([tmp=$($RPM --version 2>/dev/null)], [
144                 RPM_VERSION=$(echo $tmp | $AWK '/RPM/ { print $[3] }')
145                 HAVE_RPM=yes
146                 AC_MSG_RESULT([$HAVE_RPM ($RPM_VERSION)])
147         ],[
148                 HAVE_RPM=no
149                 AC_MSG_RESULT([$HAVE_RPM])
150         ])
151
152         AC_MSG_CHECKING([whether $RPMBUILD is available])
153         AS_IF([tmp=$($RPMBUILD --version 2>/dev/null)], [
154                 RPMBUILD_VERSION=$(echo $tmp | $AWK '/RPM/ { print $[3] }')
155                 HAVE_RPMBUILD=yes
156                 AC_MSG_RESULT([$HAVE_RPMBUILD ($RPMBUILD_VERSION)])
157         ],[
158                 HAVE_RPMBUILD=no
159                 AC_MSG_RESULT([$HAVE_RPMBUILD])
160         ])
161
162         RPM_DEFINE_COMMON='--define "$(DEBUG_ZFS) 1"'
163         RPM_DEFINE_UTIL='--define "_dracutdir $(dracutdir)" --define "_udevdir $(udevdir)" --define "_udevruledir $(udevruledir)" --define "_initconfdir $(DEFAULT_INITCONF_DIR)" $(DEFINE_INITRAMFS)'
164         RPM_DEFINE_KMOD='--define "kernels $(LINUX_VERSION)" --define "require_spldir $(SPL)" --define "require_splobj $(SPL_OBJ)" --define "ksrc $(LINUX)" --define "kobj $(LINUX_OBJ)"'
165         RPM_DEFINE_DKMS=
166
167         SRPM_DEFINE_COMMON='--define "build_src_rpm 1"'
168         SRPM_DEFINE_UTIL=
169         SRPM_DEFINE_KMOD=
170         SRPM_DEFINE_DKMS=
171
172         RPM_SPEC_DIR="rpm/generic"
173         AC_ARG_WITH([spec],
174                 AS_HELP_STRING([--with-spec=SPEC],
175                 [Spec files 'generic|redhat']),
176                 [RPM_SPEC_DIR="rpm/$withval"])
177
178         AC_MSG_CHECKING([whether spec files are available])
179         AC_MSG_RESULT([yes ($RPM_SPEC_DIR/*.spec.in)])
180
181         AC_SUBST(HAVE_RPM)
182         AC_SUBST(RPM)
183         AC_SUBST(RPM_VERSION)
184
185         AC_SUBST(HAVE_RPMBUILD)
186         AC_SUBST(RPMBUILD)
187         AC_SUBST(RPMBUILD_VERSION)
188
189         AC_SUBST(RPM_SPEC_DIR)
190         AC_SUBST(RPM_DEFINE_UTIL)
191         AC_SUBST(RPM_DEFINE_KMOD)
192         AC_SUBST(RPM_DEFINE_DKMS)
193         AC_SUBST(RPM_DEFINE_COMMON)
194         AC_SUBST(SRPM_DEFINE_UTIL)
195         AC_SUBST(SRPM_DEFINE_KMOD)
196         AC_SUBST(SRPM_DEFINE_DKMS)
197         AC_SUBST(SRPM_DEFINE_COMMON)
198 ])
199
200 dnl #
201 dnl # Check for dpkg+dpkg-buildpackage to build DEB packages.  If these
202 dnl # tools are missing it is non-fatal but you will not be able to build
203 dnl # DEB packages and will be warned if you try too.
204 dnl #
205 AC_DEFUN([ZFS_AC_DPKG], [
206         DPKG=dpkg
207         DPKGBUILD=dpkg-buildpackage
208
209         AC_MSG_CHECKING([whether $DPKG is available])
210         AS_IF([tmp=$($DPKG --version 2>/dev/null)], [
211                 DPKG_VERSION=$(echo $tmp | $AWK '/Debian/ { print $[7] }')
212                 HAVE_DPKG=yes
213                 AC_MSG_RESULT([$HAVE_DPKG ($DPKG_VERSION)])
214         ],[
215                 HAVE_DPKG=no
216                 AC_MSG_RESULT([$HAVE_DPKG])
217         ])
218
219         AC_MSG_CHECKING([whether $DPKGBUILD is available])
220         AS_IF([tmp=$($DPKGBUILD --version 2>/dev/null)], [
221                 DPKGBUILD_VERSION=$(echo $tmp | \
222                     $AWK '/Debian/ { print $[4] }' | cut -f-4 -d'.')
223                 HAVE_DPKGBUILD=yes
224                 AC_MSG_RESULT([$HAVE_DPKGBUILD ($DPKGBUILD_VERSION)])
225         ],[
226                 HAVE_DPKGBUILD=no
227                 AC_MSG_RESULT([$HAVE_DPKGBUILD])
228         ])
229
230         AC_SUBST(HAVE_DPKG)
231         AC_SUBST(DPKG)
232         AC_SUBST(DPKG_VERSION)
233
234         AC_SUBST(HAVE_DPKGBUILD)
235         AC_SUBST(DPKGBUILD)
236         AC_SUBST(DPKGBUILD_VERSION)
237 ])
238
239 dnl #
240 dnl # Until native packaging for various different packing systems
241 dnl # can be added the least we can do is attempt to use alien to
242 dnl # convert the RPM packages to the needed package type.  This is
243 dnl # a hack but so far it has worked reasonable well.
244 dnl #
245 AC_DEFUN([ZFS_AC_ALIEN], [
246         ALIEN=alien
247
248         AC_MSG_CHECKING([whether $ALIEN is available])
249         AS_IF([tmp=$($ALIEN --version 2>/dev/null)], [
250                 ALIEN_VERSION=$(echo $tmp | $AWK '{ print $[3] }')
251                 HAVE_ALIEN=yes
252                 AC_MSG_RESULT([$HAVE_ALIEN ($ALIEN_VERSION)])
253         ],[
254                 HAVE_ALIEN=no
255                 AC_MSG_RESULT([$HAVE_ALIEN])
256         ])
257
258         AC_SUBST(HAVE_ALIEN)
259         AC_SUBST(ALIEN)
260         AC_SUBST(ALIEN_VERSION)
261 ])
262
263 dnl #
264 dnl # Using the VENDOR tag from config.guess set the default
265 dnl # package type for 'make pkg': (rpm | deb | tgz)
266 dnl #
267 AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [
268         AC_MSG_CHECKING([linux distribution])
269         if test -f /etc/toss-release ; then
270                 VENDOR=toss ;
271         elif test -f /etc/fedora-release ; then
272                 VENDOR=fedora ;
273         elif test -f /etc/redhat-release ; then
274                 VENDOR=redhat ;
275         elif test -f /etc/gentoo-release ; then
276                 VENDOR=gentoo ;
277         elif test -f /etc/arch-release ; then
278                 VENDOR=arch ;
279         elif test -f /etc/SuSE-release ; then
280                 VENDOR=sles ;
281         elif test -f /etc/slackware-version ; then
282                 VENDOR=slackware ;
283         elif test -f /etc/lunar.release ; then
284                 VENDOR=lunar ;
285         elif test -f /etc/lsb-release ; then
286                 VENDOR=ubuntu ;
287         elif test -f /etc/debian_version ; then
288                 VENDOR=debian ;
289         elif test -f /etc/alpine-release ; then
290                 VENDOR=alpine ;
291         else
292                 VENDOR= ;
293         fi
294         AC_MSG_RESULT([$VENDOR])
295         AC_SUBST(VENDOR)
296
297         AC_MSG_CHECKING([default package type])
298         case "$VENDOR" in
299                 toss)       DEFAULT_PACKAGE=rpm  ;;
300                 redhat)     DEFAULT_PACKAGE=rpm  ;;
301                 fedora)     DEFAULT_PACKAGE=rpm  ;;
302                 gentoo)     DEFAULT_PACKAGE=tgz  ;;
303                 alpine)     DEFAULT_PACKAGE=tgz  ;;
304                 arch)       DEFAULT_PACKAGE=tgz  ;;
305                 sles)       DEFAULT_PACKAGE=rpm  ;;
306                 slackware)  DEFAULT_PACKAGE=tgz  ;;
307                 lunar)      DEFAULT_PACKAGE=tgz  ;;
308                 ubuntu)     DEFAULT_PACKAGE=deb  ;;
309                 debian)     DEFAULT_PACKAGE=deb  ;;
310                 *)          DEFAULT_PACKAGE=rpm  ;;
311         esac
312         AC_MSG_RESULT([$DEFAULT_PACKAGE])
313         AC_SUBST(DEFAULT_PACKAGE)
314
315         DEFAULT_INIT_DIR=$sysconfdir/init.d
316         AC_MSG_CHECKING([default init directory])
317         AC_MSG_RESULT([$DEFAULT_INIT_DIR])
318         AC_SUBST(DEFAULT_INIT_DIR)
319
320         AC_MSG_CHECKING([default init script type])
321         case "$VENDOR" in
322                 toss)       DEFAULT_INIT_SCRIPT=redhat ;;
323                 redhat)     DEFAULT_INIT_SCRIPT=redhat ;;
324                 fedora)     DEFAULT_INIT_SCRIPT=fedora ;;
325                 gentoo)     DEFAULT_INIT_SCRIPT=openrc ;;
326                 alpine)     DEFAULT_INIT_SCRIPT=openrc ;;
327                 arch)       DEFAULT_INIT_SCRIPT=lsb    ;;
328                 sles)       DEFAULT_INIT_SCRIPT=lsb    ;;
329                 slackware)  DEFAULT_INIT_SCRIPT=lsb    ;;
330                 lunar)      DEFAULT_INIT_SCRIPT=lunar  ;;
331                 ubuntu)     DEFAULT_INIT_SCRIPT=lsb    ;;
332                 debian)     DEFAULT_INIT_SCRIPT=lsb    ;;
333                 *)          DEFAULT_INIT_SCRIPT=lsb    ;;
334         esac
335         AC_MSG_RESULT([$DEFAULT_INIT_SCRIPT])
336         AC_SUBST(DEFAULT_INIT_SCRIPT)
337
338         AC_MSG_CHECKING([default init config direectory])
339         case "$VENDOR" in
340                 alpine)     DEFAULT_INITCONF_DIR=/etc/conf.d    ;;
341                 gentoo)     DEFAULT_INITCONF_DIR=/etc/conf.d    ;;
342                 toss)       DEFAULT_INITCONF_DIR=/etc/sysconfig ;;
343                 redhat)     DEFAULT_INITCONF_DIR=/etc/sysconfig ;;
344                 fedora)     DEFAULT_INITCONF_DIR=/etc/sysconfig ;;
345                 sles)       DEFAULT_INITCONF_DIR=/etc/sysconfig ;;
346                 ubuntu)     DEFAULT_INITCONF_DIR=/etc/default   ;;
347                 debian)     DEFAULT_INITCONF_DIR=/etc/default   ;;
348                 *)          DEFAULT_INITCONF_DIR=/etc/default   ;;
349         esac
350         AC_MSG_RESULT([$DEFAULT_INITCONF_DIR])
351         AC_SUBST(DEFAULT_INITCONF_DIR)
352
353         AC_MSG_CHECKING([whether initramfs-tools is available])
354         if test -d /usr/share/initramfs-tools ; then
355                 DEFINE_INITRAMFS='--define "_initramfs 1"'
356                 AC_MSG_RESULT([yes])
357         else
358                 DEFINE_INITRAMFS=''
359                 AC_MSG_RESULT([no])
360         fi
361         AC_SUBST(DEFINE_INITRAMFS)
362 ])
363
364 dnl #
365 dnl # Default ZFS package configuration
366 dnl #
367 AC_DEFUN([ZFS_AC_PACKAGE], [
368         ZFS_AC_DEFAULT_PACKAGE
369         ZFS_AC_RPM
370         ZFS_AC_DPKG
371         ZFS_AC_ALIEN
372 ])