Configure checks for kernel build options incompatible with the license

Twice now I've been bitten by building agaist a kernel which is
configured such that it is incompatible with the CDDL license.  These
build failures don't occur until the linking phase at which point they
simply callout the offending symbol.  No location information can be
provided at this point so it often can be confusing what the problem is
particularly when building against a new kernel for the first time.

To help address this I've added a configure check which can be extended
over time to detect known kernel config options which if set will break
the ZFS build.  Currently I have just added CONFIG_DEBUG_LOCK_ALLOC which
makes mutex's GPL-only and is on by default in the RHEL6 alpha builds.
I know for a fact there are other similiar options which can be added
as they are encountered.
This commit is contained in:
Brian Behlendorf 2010-03-08 10:27:42 -08:00
parent 7df02c0f57
commit fd7578215e
4 changed files with 39 additions and 8 deletions

2
META
View File

@ -4,3 +4,5 @@ Branch: 1.0
Version: 0.4.7
Release: 1
Release-Tags: relext
License: CDDL
Author: Sun Microsystems/Oracle, Lawrence Livermore National Laboratory

View File

@ -4,6 +4,7 @@ dnl #
AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
ZFS_AC_KERNEL
ZFS_AC_SPL
ZFS_AC_KERNEL_CONFIG
ZFS_AC_KERNEL_BDEV_BLOCK_DEVICE_OPERATIONS
ZFS_AC_KERNEL_TYPE_FMODE_T
ZFS_AC_KERNEL_OPEN_BDEV_EXCLUSIVE
@ -238,6 +239,30 @@ AC_DEFUN([ZFS_AC_SPL], [
ZFS_AC_SPL_MODULE_SYMVERS
])
dnl #
dnl # There are certain kernel build options which when enabled are
dnl # completely incompatible with non GPL kernel modules. It is best
dnl # to detect these at configure time and fail with a clear error
dnl # rather than build everything and fail during linking.
dnl #
dnl # CONFIG_DEBUG_LOCK_ALLOC - Maps mutex_lock() to mutex_lock_nested()
dnl #
AC_DEFUN([ZFS_AC_KERNEL_CONFIG], [
if test "$ZFS_META_LICENSE" = CDDL; then
ZFS_LINUX_CONFIG([DEBUG_LOCK_ALLOC],
AC_MSG_ERROR([
*** Kernel built with CONFIG_DEBUG_LOCK_ALLOC which is
*** incompatible with the CDDL license. You must rebuild
*** your kernel without this option.]), [])
fi
if test "$ZFS_META_LICENSE" = GPL; then
AC_DEFINE([HAVE_GPL_ONLY_SYMBOLS], [1],
[Define to 1 if licensed under the GPL])
fi
])
dnl #
dnl # ZFS_LINUX_CONFTEST
dnl #

View File

@ -1,13 +1,9 @@
AC_DEFUN([ZFS_AC_LICENSE], [
AC_MSG_CHECKING([zfs license])
LICENSE=`grep MODULE_LICENSE module/zfs/zfs_ioctl.c | cut -f2 -d'"'`
AC_MSG_RESULT([$LICENSE])
if test "$LICENSE" = GPL; then
AC_DEFINE([HAVE_GPL_ONLY_SYMBOLS], [1],
[Define to 1 if module is licensed under the GPL])
fi
AC_MSG_CHECKING([zfs author])
AC_MSG_RESULT([$ZFS_META_AUTHOR])
AC_SUBST(LICENSE)
AC_MSG_CHECKING([zfs license])
AC_MSG_RESULT([$ZFS_META_LICENSE])
])
AC_DEFUN([ZFS_AC_DEBUG], [

View File

@ -48,6 +48,14 @@ AC_DEFUN([ZFS_AC_META], [
AC_SUBST([ZFS_META_RELEASE])
fi
ZFS_META_LICENSE=_ZFS_AC_META_GETVAL([LICENSE]);
if test -n "$ZFS_META_LICENSE"; then
AC_DEFINE_UNQUOTED([ZFS_META_LICENSE], ["$ZFS_META_LICENSE"],
[Define the project license.]
)
AC_SUBST([ZFS_META_LICENSE])
fi
if test -n "$ZFS_META_NAME" -a -n "$ZFS_META_VERSION"; then
ZFS_META_ALIAS="$ZFS_META_NAME-$ZFS_META_VERSION"
test -n "$ZFS_META_RELEASE" &&