From c121a8de96ce06595ab13cad386f1f01e732f590 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kang-Che=20Sung=20=28=E5=AE=8B=E5=B2=A1=E5=93=B2=29?= Date: Mon, 26 Feb 2018 21:15:05 +0800 Subject: [PATCH] Fix build failure ('major' undefined) in glibc 2.28. (#746) glibc 2.28 no longer defines 'major' and 'minor' in and requires us to include . (glibc 2.25 starts deprecating the macros in .) Now do include the latter if found on the system. At the moment, let's also utilize AC_HEADER_MAJOR in configure script. However as Autoconf 2.69 has not yet updated the AC_HEADER_MAJOR macro to reflect the glibc change [1], so add a workaround code. Fixes #663. Supersedes pull request #729. Reference: [1] https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commit;h=e17a30e987d7ee695fb4294a82d987ec3dc9b974 Signed-off-by: Kang-Che Sung --- Process.c | 6 ++++++ configure.ac | 10 ++++++++++ linux/LinuxProcessList.c | 6 ++++++ 3 files changed, 22 insertions(+) diff --git a/Process.c b/Process.c index 18360802..5ec46bc4 100644 --- a/Process.c +++ b/Process.c @@ -28,6 +28,12 @@ in the source distribution for its full text. #include #include #include +#ifdef MAJOR_IN_MKDEV +#include +#elif defined(MAJOR_IN_SYSMACROS) || \ + (defined(HAVE_SYS_SYSMACROS_H) && HAVE_SYS_SYSMACROS_H) +#include +#endif #ifdef __ANDROID__ #define SYS_ioprio_get __NR_ioprio_get diff --git a/configure.ac b/configure.ac index df922e07..481c3f0b 100644 --- a/configure.ac +++ b/configure.ac @@ -61,6 +61,16 @@ AC_CHECK_HEADERS([stdlib.h string.h strings.h sys/param.h sys/time.h unistd.h],[ ]) AC_CHECK_HEADERS([execinfo.h],[:],[:]) +AC_HEADER_MAJOR +dnl glibc 2.25 deprecates 'major' and 'minor' in and requires to +dnl include . However the logic in AC_HEADER_MAJOR has not yet +dnl been updated in Autoconf 2.69, so use a workaround: +m4_version_prereq([2.70], [], +[if test $ac_cv_header_sys_mkdev_h = no; then + AC_CHECK_HEADER(sys/sysmacros.h, [AC_DEFINE(MAJOR_IN_SYSMACROS, 1, + [Define to 1 if `major', `minor', and `makedev' are declared in .])]) +fi]) + # Checks for typedefs, structures, and compiler characteristics. # ---------------------------------------------------------------------- AC_HEADER_STDBOOL diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c index 6f2631af..77c12262 100644 --- a/linux/LinuxProcessList.c +++ b/linux/LinuxProcessList.c @@ -26,6 +26,12 @@ in the source distribution for its full text. #include #include #include +#ifdef MAJOR_IN_MKDEV +#include +#elif defined(MAJOR_IN_SYSMACROS) || \ + (defined(HAVE_SYS_SYSMACROS_H) && HAVE_SYS_SYSMACROS_H) +#include +#endif #ifdef HAVE_DELAYACCT #include