]> granicus.if.org Git - zfs/blob - config/zfs-build.m4
Make "-fno-inline" compile option more accessible
[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_GCOV_KERNEL], [
80 ])
81
82 AC_DEFUN([ZFS_AC_GCOV_USER], [
83         DEBUG_CFLAGS="$DEBUG_CFLAGS -fprofile-arcs -ftest-coverage"
84 ])
85
86 AC_DEFUN([ZFS_AC_GCOV], [
87         AC_MSG_CHECKING([whether gcov profiling will be enabled])
88         AC_ARG_ENABLE([gcov],
89                 [AS_HELP_STRING([--enable-gcov],
90                 [Enable gcov profiling @<:@default=no@:>@])],
91                 [],
92                 [enable_gcov=no])
93
94         AS_CASE(["x$enable_gcov"],
95                 ["xyes"],
96                 [ZFS_AC_GCOV_KERNEL
97                 ZFS_AC_GCOV_USER],
98                 ["xkernel"],
99                 [ZFS_AC_GCOV_KERNEL],
100                 ["xuser"],
101                 [ZFS_AC_GCOV_USER],
102                 ["xno"],
103                 [],
104                 [AC_MSG_ERROR([Unknown option $enable_gcov])])
105
106         AC_SUBST(DEBUG_CFLAGS)
107         AC_MSG_RESULT([$enable_gcov])
108 ])
109
110 AC_DEFUN([ZFS_AC_CONFIG_ALWAYS], [
111         ZFS_AC_CONFIG_ALWAYS_NO_UNUSED_BUT_SET_VARIABLE
112         ZFS_AC_CONFIG_ALWAYS_NO_BOOL_COMPARE
113         ZFS_AC_CONFIG_ALWAYS_TOOLCHAIN_SIMD
114         ZFS_AC_CONFIG_ALWAYS_ARCH
115 ])
116
117 AC_DEFUN([ZFS_AC_CONFIG], [
118         ZFS_CONFIG=all
119         AC_ARG_WITH([config],
120                 AS_HELP_STRING([--with-config=CONFIG],
121                 [Config file 'kernel|user|all|srpm']),
122                 [ZFS_CONFIG="$withval"])
123         AC_ARG_ENABLE([linux-builtin],
124                 [AC_HELP_STRING([--enable-linux-builtin],
125                 [Configure for builtin in-tree kernel modules @<:@default=no@:>@])],
126                 [],
127                 [enable_linux_builtin=no])
128
129         AC_MSG_CHECKING([zfs config])
130         AC_MSG_RESULT([$ZFS_CONFIG]);
131         AC_SUBST(ZFS_CONFIG)
132
133         ZFS_AC_CONFIG_ALWAYS
134
135         case "$ZFS_CONFIG" in
136                 kernel) ZFS_AC_CONFIG_KERNEL ;;
137                 user)   ZFS_AC_CONFIG_USER   ;;
138                 all)    ZFS_AC_CONFIG_USER
139                         ZFS_AC_CONFIG_KERNEL ;;
140                 srpm)                        ;;
141                 *)
142                 AC_MSG_RESULT([Error!])
143                 AC_MSG_ERROR([Bad value "$ZFS_CONFIG" for --with-config,
144                               user kernel|user|all|srpm]) ;;
145         esac
146
147         AM_CONDITIONAL([CONFIG_USER],
148             [test "$ZFS_CONFIG" = user -o "$ZFS_CONFIG" = all])
149         AM_CONDITIONAL([CONFIG_KERNEL],
150             [test "$ZFS_CONFIG" = kernel -o "$ZFS_CONFIG" = all] &&
151             [test "x$enable_linux_builtin" != xyes ])
152         AM_CONDITIONAL([WANT_DEVNAME2DEVID],
153             [test "x$user_libudev" = xyes ])
154         AM_CONDITIONAL([CONFIG_QAT],
155             [test "$ZFS_CONFIG" = kernel -o "$ZFS_CONFIG" = all] &&
156             [test "x$qatsrc" != x ])
157 ])
158
159 dnl #
160 dnl # Check for rpm+rpmbuild to build RPM packages.  If these tools
161 dnl # are missing it is non-fatal but you will not be able to build
162 dnl # RPM packages and will be warned if you try too.
163 dnl #
164 dnl # By default the generic spec file will be used because it requires
165 dnl # minimal dependencies.  Distribution specific spec files can be
166 dnl # placed under the 'rpm/<distribution>' directory and enabled using
167 dnl # the --with-spec=<distribution> configure option.
168 dnl #
169 AC_DEFUN([ZFS_AC_RPM], [
170         RPM=rpm
171         RPMBUILD=rpmbuild
172
173         AC_MSG_CHECKING([whether $RPM is available])
174         AS_IF([tmp=$($RPM --version 2>/dev/null)], [
175                 RPM_VERSION=$(echo $tmp | $AWK '/RPM/ { print $[3] }')
176                 HAVE_RPM=yes
177                 AC_MSG_RESULT([$HAVE_RPM ($RPM_VERSION)])
178         ],[
179                 HAVE_RPM=no
180                 AC_MSG_RESULT([$HAVE_RPM])
181         ])
182
183         AC_MSG_CHECKING([whether $RPMBUILD is available])
184         AS_IF([tmp=$($RPMBUILD --version 2>/dev/null)], [
185                 RPMBUILD_VERSION=$(echo $tmp | $AWK '/RPM/ { print $[3] }')
186                 HAVE_RPMBUILD=yes
187                 AC_MSG_RESULT([$HAVE_RPMBUILD ($RPMBUILD_VERSION)])
188         ],[
189                 HAVE_RPMBUILD=no
190                 AC_MSG_RESULT([$HAVE_RPMBUILD])
191         ])
192
193         RPM_DEFINE_COMMON='--define "$(DEBUG_ZFS) 1"'
194         RPM_DEFINE_UTIL='--define "_dracutdir $(dracutdir)" --define "_udevdir $(udevdir)" --define "_udevruledir $(udevruledir)" --define "_initconfdir $(DEFAULT_INITCONF_DIR)" $(DEFINE_INITRAMFS)'
195         RPM_DEFINE_KMOD='--define "kernels $(LINUX_VERSION)" --define "require_spldir $(SPL)" --define "require_splobj $(SPL_OBJ)" --define "ksrc $(LINUX)" --define "kobj $(LINUX_OBJ)"'
196         RPM_DEFINE_DKMS=
197
198         SRPM_DEFINE_COMMON='--define "build_src_rpm 1"'
199         SRPM_DEFINE_UTIL=
200         SRPM_DEFINE_KMOD=
201         SRPM_DEFINE_DKMS=
202
203         RPM_SPEC_DIR="rpm/generic"
204         AC_ARG_WITH([spec],
205                 AS_HELP_STRING([--with-spec=SPEC],
206                 [Spec files 'generic|redhat']),
207                 [RPM_SPEC_DIR="rpm/$withval"])
208
209         AC_MSG_CHECKING([whether spec files are available])
210         AC_MSG_RESULT([yes ($RPM_SPEC_DIR/*.spec.in)])
211
212         AC_SUBST(HAVE_RPM)
213         AC_SUBST(RPM)
214         AC_SUBST(RPM_VERSION)
215
216         AC_SUBST(HAVE_RPMBUILD)
217         AC_SUBST(RPMBUILD)
218         AC_SUBST(RPMBUILD_VERSION)
219
220         AC_SUBST(RPM_SPEC_DIR)
221         AC_SUBST(RPM_DEFINE_UTIL)
222         AC_SUBST(RPM_DEFINE_KMOD)
223         AC_SUBST(RPM_DEFINE_DKMS)
224         AC_SUBST(RPM_DEFINE_COMMON)
225         AC_SUBST(SRPM_DEFINE_UTIL)
226         AC_SUBST(SRPM_DEFINE_KMOD)
227         AC_SUBST(SRPM_DEFINE_DKMS)
228         AC_SUBST(SRPM_DEFINE_COMMON)
229 ])
230
231 dnl #
232 dnl # Check for dpkg+dpkg-buildpackage to build DEB packages.  If these
233 dnl # tools are missing it is non-fatal but you will not be able to build
234 dnl # DEB packages and will be warned if you try too.
235 dnl #
236 AC_DEFUN([ZFS_AC_DPKG], [
237         DPKG=dpkg
238         DPKGBUILD=dpkg-buildpackage
239
240         AC_MSG_CHECKING([whether $DPKG is available])
241         AS_IF([tmp=$($DPKG --version 2>/dev/null)], [
242                 DPKG_VERSION=$(echo $tmp | $AWK '/Debian/ { print $[7] }')
243                 HAVE_DPKG=yes
244                 AC_MSG_RESULT([$HAVE_DPKG ($DPKG_VERSION)])
245         ],[
246                 HAVE_DPKG=no
247                 AC_MSG_RESULT([$HAVE_DPKG])
248         ])
249
250         AC_MSG_CHECKING([whether $DPKGBUILD is available])
251         AS_IF([tmp=$($DPKGBUILD --version 2>/dev/null)], [
252                 DPKGBUILD_VERSION=$(echo $tmp | \
253                     $AWK '/Debian/ { print $[4] }' | cut -f-4 -d'.')
254                 HAVE_DPKGBUILD=yes
255                 AC_MSG_RESULT([$HAVE_DPKGBUILD ($DPKGBUILD_VERSION)])
256         ],[
257                 HAVE_DPKGBUILD=no
258                 AC_MSG_RESULT([$HAVE_DPKGBUILD])
259         ])
260
261         AC_SUBST(HAVE_DPKG)
262         AC_SUBST(DPKG)
263         AC_SUBST(DPKG_VERSION)
264
265         AC_SUBST(HAVE_DPKGBUILD)
266         AC_SUBST(DPKGBUILD)
267         AC_SUBST(DPKGBUILD_VERSION)
268 ])
269
270 dnl #
271 dnl # Until native packaging for various different packing systems
272 dnl # can be added the least we can do is attempt to use alien to
273 dnl # convert the RPM packages to the needed package type.  This is
274 dnl # a hack but so far it has worked reasonable well.
275 dnl #
276 AC_DEFUN([ZFS_AC_ALIEN], [
277         ALIEN=alien
278
279         AC_MSG_CHECKING([whether $ALIEN is available])
280         AS_IF([tmp=$($ALIEN --version 2>/dev/null)], [
281                 ALIEN_VERSION=$(echo $tmp | $AWK '{ print $[3] }')
282                 HAVE_ALIEN=yes
283                 AC_MSG_RESULT([$HAVE_ALIEN ($ALIEN_VERSION)])
284         ],[
285                 HAVE_ALIEN=no
286                 AC_MSG_RESULT([$HAVE_ALIEN])
287         ])
288
289         AC_SUBST(HAVE_ALIEN)
290         AC_SUBST(ALIEN)
291         AC_SUBST(ALIEN_VERSION)
292 ])
293
294 dnl #
295 dnl # Using the VENDOR tag from config.guess set the default
296 dnl # package type for 'make pkg': (rpm | deb | tgz)
297 dnl #
298 AC_DEFUN([ZFS_AC_DEFAULT_PACKAGE], [
299         AC_MSG_CHECKING([linux distribution])
300         if test -f /etc/toss-release ; then
301                 VENDOR=toss ;
302         elif test -f /etc/fedora-release ; then
303                 VENDOR=fedora ;
304         elif test -f /etc/redhat-release ; then
305                 VENDOR=redhat ;
306         elif test -f /etc/gentoo-release ; then
307                 VENDOR=gentoo ;
308         elif test -f /etc/arch-release ; then
309                 VENDOR=arch ;
310         elif test -f /etc/SuSE-release ; then
311                 VENDOR=sles ;
312         elif test -f /etc/slackware-version ; then
313                 VENDOR=slackware ;
314         elif test -f /etc/lunar.release ; then
315                 VENDOR=lunar ;
316         elif test -f /etc/lsb-release ; then
317                 VENDOR=ubuntu ;
318         elif test -f /etc/debian_version ; then
319                 VENDOR=debian ;
320         elif test -f /etc/alpine-release ; then
321                 VENDOR=alpine ;
322         else
323                 VENDOR= ;
324         fi
325         AC_MSG_RESULT([$VENDOR])
326         AC_SUBST(VENDOR)
327
328         AC_MSG_CHECKING([default package type])
329         case "$VENDOR" in
330                 toss)       DEFAULT_PACKAGE=rpm  ;;
331                 redhat)     DEFAULT_PACKAGE=rpm  ;;
332                 fedora)     DEFAULT_PACKAGE=rpm  ;;
333                 gentoo)     DEFAULT_PACKAGE=tgz  ;;
334                 alpine)     DEFAULT_PACKAGE=tgz  ;;
335                 arch)       DEFAULT_PACKAGE=tgz  ;;
336                 sles)       DEFAULT_PACKAGE=rpm  ;;
337                 slackware)  DEFAULT_PACKAGE=tgz  ;;
338                 lunar)      DEFAULT_PACKAGE=tgz  ;;
339                 ubuntu)     DEFAULT_PACKAGE=deb  ;;
340                 debian)     DEFAULT_PACKAGE=deb  ;;
341                 *)          DEFAULT_PACKAGE=rpm  ;;
342         esac
343         AC_MSG_RESULT([$DEFAULT_PACKAGE])
344         AC_SUBST(DEFAULT_PACKAGE)
345
346         DEFAULT_INIT_DIR=$sysconfdir/init.d
347         AC_MSG_CHECKING([default init directory])
348         AC_MSG_RESULT([$DEFAULT_INIT_DIR])
349         AC_SUBST(DEFAULT_INIT_DIR)
350
351         AC_MSG_CHECKING([default init script type])
352         case "$VENDOR" in
353                 toss)       DEFAULT_INIT_SCRIPT=redhat ;;
354                 redhat)     DEFAULT_INIT_SCRIPT=redhat ;;
355                 fedora)     DEFAULT_INIT_SCRIPT=fedora ;;
356                 gentoo)     DEFAULT_INIT_SCRIPT=openrc ;;
357                 alpine)     DEFAULT_INIT_SCRIPT=openrc ;;
358                 arch)       DEFAULT_INIT_SCRIPT=lsb    ;;
359                 sles)       DEFAULT_INIT_SCRIPT=lsb    ;;
360                 slackware)  DEFAULT_INIT_SCRIPT=lsb    ;;
361                 lunar)      DEFAULT_INIT_SCRIPT=lunar  ;;
362                 ubuntu)     DEFAULT_INIT_SCRIPT=lsb    ;;
363                 debian)     DEFAULT_INIT_SCRIPT=lsb    ;;
364                 *)          DEFAULT_INIT_SCRIPT=lsb    ;;
365         esac
366         AC_MSG_RESULT([$DEFAULT_INIT_SCRIPT])
367         AC_SUBST(DEFAULT_INIT_SCRIPT)
368
369         AC_MSG_CHECKING([default init config direectory])
370         case "$VENDOR" in
371                 alpine)     DEFAULT_INITCONF_DIR=/etc/conf.d    ;;
372                 gentoo)     DEFAULT_INITCONF_DIR=/etc/conf.d    ;;
373                 toss)       DEFAULT_INITCONF_DIR=/etc/sysconfig ;;
374                 redhat)     DEFAULT_INITCONF_DIR=/etc/sysconfig ;;
375                 fedora)     DEFAULT_INITCONF_DIR=/etc/sysconfig ;;
376                 sles)       DEFAULT_INITCONF_DIR=/etc/sysconfig ;;
377                 ubuntu)     DEFAULT_INITCONF_DIR=/etc/default   ;;
378                 debian)     DEFAULT_INITCONF_DIR=/etc/default   ;;
379                 *)          DEFAULT_INITCONF_DIR=/etc/default   ;;
380         esac
381         AC_MSG_RESULT([$DEFAULT_INITCONF_DIR])
382         AC_SUBST(DEFAULT_INITCONF_DIR)
383
384         AC_MSG_CHECKING([whether initramfs-tools is available])
385         if test -d /usr/share/initramfs-tools ; then
386                 DEFINE_INITRAMFS='--define "_initramfs 1"'
387                 AC_MSG_RESULT([yes])
388         else
389                 DEFINE_INITRAMFS=''
390                 AC_MSG_RESULT([no])
391         fi
392         AC_SUBST(DEFINE_INITRAMFS)
393 ])
394
395 dnl #
396 dnl # Default ZFS package configuration
397 dnl #
398 AC_DEFUN([ZFS_AC_PACKAGE], [
399         ZFS_AC_DEFAULT_PACKAGE
400         ZFS_AC_RPM
401         ZFS_AC_DPKG
402         ZFS_AC_ALIEN
403 ])