summaryrefslogtreecommitdiffstats
path: root/config
diff options
context:
space:
mode:
authorOlaf Faaland <[email protected]>2017-03-31 09:32:00 -0700
committerBrian Behlendorf <[email protected]>2017-03-31 09:32:00 -0700
commit10cb2e0a19e46ecfe1378ccf79e71d986936f17e (patch)
treec09c39fe0d8d827466d11fe82d576ba6dae60b4d /config
parent8be64caabc662aaf332fd16c7b81d0dfe58fde69 (diff)
glibc 2.5 compat: use correct header for makedev() et al.
In glibc 2.5, makedev(), major(), and minor() are defined in sys/sysmacros.h. They are also defined in types.h for backward compatability, but using these definitions triggers a compile warning. This breaks the ZFS build, as it builds with -Werror. autoconf email threads indicate these macros may be defined in sys/mkdev.h in some cases. This commit adds configure checks to detect where makedev() is defined: sys/sysmacros.h sys/mkdev.h It assumes major() and minor() are defined in the same place. The libspl types.h then includes sys/sysmacros.h (preferred) or sys/mkdev.h (2nd choice) if one of those defines makedev(). This is done before including the system types.h. An alternative would be to remove uses of major, minor, and makedev, instead comparing the st_dev returned from stat64. These configure checks would then be unnecessary. This change revealed that __NORETURN was being defined unnecessarily in libspl/include/sys/sysmacros.h. That definition is removed. The files in which __NORETURN are used all include types.h, and so all will get the definition provided by feature_tests.h Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Olaf Faaland <[email protected]> Closes #5945
Diffstat (limited to 'config')
-rw-r--r--config/user-makedev.m439
-rw-r--r--config/user.m42
2 files changed, 41 insertions, 0 deletions
diff --git a/config/user-makedev.m4 b/config/user-makedev.m4
new file mode 100644
index 000000000..4383681a8
--- /dev/null
+++ b/config/user-makedev.m4
@@ -0,0 +1,39 @@
+dnl #
+dnl # glibc 2.25
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_USER_MAKEDEV_IN_SYSMACROS], [
+ AC_MSG_CHECKING([makedev() is declared in sys/sysmacros.h])
+ AC_TRY_COMPILE(
+ [
+ #include <sys/sysmacros.h>
+ ],[
+ int k;
+ k = makedev(0,0);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_MAKEDEV_IN_SYSMACROS, 1,
+ [makedev() is declared in sys/sysmacros.h])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
+
+dnl #
+dnl # glibc X < Y < 2.25
+dnl #
+AC_DEFUN([ZFS_AC_CONFIG_USER_MAKEDEV_IN_MKDEV], [
+ AC_MSG_CHECKING([makedev() is declared in sys/mkdev.h])
+ AC_TRY_COMPILE(
+ [
+ #include <sys/mkdev.h>
+ ],[
+ int k;
+ k = makedev(0,0);
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_MAKEDEV_IN_MKDEV, 1,
+ [makedev() is declared in sys/mkdev.h])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
diff --git a/config/user.m4 b/config/user.m4
index f70ab635f..0e3430757 100644
--- a/config/user.m4
+++ b/config/user.m4
@@ -15,6 +15,8 @@ AC_DEFUN([ZFS_AC_CONFIG_USER], [
ZFS_AC_CONFIG_USER_LIBUDEV
ZFS_AC_CONFIG_USER_FRAME_LARGER_THAN
ZFS_AC_CONFIG_USER_RUNSTATEDIR
+ ZFS_AC_CONFIG_USER_MAKEDEV_IN_SYSMACROS
+ ZFS_AC_CONFIG_USER_MAKEDEV_IN_MKDEV
ZFS_AC_CONFIG_USER_COMMANDS
ZFS_AC_TEST_FRAMEWORK