[meta-virtualization] [PATCH] lxc: fixup builds with newer glibc

Bruce Ashfield bruce.ashfield at windriver.com
Thu Feb 2 12:56:08 PST 2017


On 2017-02-02 12:01 PM, Mark Asselstine wrote:
> The poky/oe-core commit [glibc: Upgrade to 2.25 snapshot] brought with
> it a change that has apparently been in the works for a while, to move
> major() and minor() definitions from <sys/types.h> to
> <sys/sysmacros.h>. This version of glibc took the step of adding a
> warning about this change which results in the build failure of lxc
> since we build with -Werror:
>
>   | lxclvm.c:139:13: error: In the GNU C Library, "major" is defined
>   |  by <sys/sysmacros.h>. For historical compatibility, it is
>   |  currently defined by <sys/types.h> as well, but we plan to
>   |  remove this soon. To use "major", include <sys/sysmacros.h>
>   |  directly. If you did not intend to use a system-defined macro
>   |  "major", you should undefine it after including <sys/types.h>. [-Werror]
>   |     major(statbuf.st_rdev), minor(statbuf.st_rdev));
>   |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> Instead of dropping -Werror we are opting instead to apply the
> upstream fix for this since it is available and applies relatively
> cleanly.

merged.

Bruce

>
> Signed-off-by: Mark Asselstine <mark.asselstine at windriver.com>
> ---
>  ...EADER_MAJOR-to-detect-major-minor-makedev.patch | 119 +++++++++++++++++++++
>  recipes-containers/lxc/lxc_2.0.0.bb                |   1 +
>  2 files changed, 120 insertions(+)
>  create mode 100644 recipes-containers/lxc/files/Use-AC_HEADER_MAJOR-to-detect-major-minor-makedev.patch
>
> diff --git a/recipes-containers/lxc/files/Use-AC_HEADER_MAJOR-to-detect-major-minor-makedev.patch b/recipes-containers/lxc/files/Use-AC_HEADER_MAJOR-to-detect-major-minor-makedev.patch
> new file mode 100644
> index 0000000..f9cecc0
> --- /dev/null
> +++ b/recipes-containers/lxc/files/Use-AC_HEADER_MAJOR-to-detect-major-minor-makedev.patch
> @@ -0,0 +1,119 @@
> +From 5c957671a511441b112b137b88bf0b1f31adac20 Mon Sep 17 00:00:00 2001
> +From: Sergei Trofimovich <siarheit at google.com>
> +Date: Sat, 21 Jan 2017 11:57:13 +0000
> +Subject: [PATCH] Use AC_HEADER_MAJOR to detect major()/minor()/makedev()
> +
> +commit af6824fce9c9536fbcabef8d5547f6c486f55fdf from
> +git://github.com/lxc/lxc.git
> +
> +Before the change build failed on Gentoo as:
> +
> +  bdev/lxclvm.c: In function 'lvm_detect':
> +  bdev/lxclvm.c:140:4: error: implicit declaration of function 'major' [-Werror=implicit-function-declaration]
> +    major(statbuf.st_rdev), minor(statbuf.st_rdev));
> +    ^~~~~
> +  bdev/lxclvm.c:140:28: error: implicit declaration of function 'minor' [-Werror=implicit-function-declaration]
> +    major(statbuf.st_rdev), minor(statbuf.st_rdev));
> +                            ^~~~~
> +
> +glibc plans to remove <sys/sysmacros.h> from glibc's <sys/types.h>:
> +    https://sourceware.org/ml/libc-alpha/2015-11/msg00253.html
> +
> +Gentoo already applied glibc patch to experimental glibc-2.24
> +to start preparingfor the change.
> +
> +Autoconf has AC_HEADER_MAJOR to find out which header defines
> +reqiured macros:
> +    https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Particular-Headers.html
> +
> +This change should also increase portability across other libcs.
> +
> +Bug: https://bugs.gentoo.org/604360
> +Signed-off-by: Sergei Trofimovich <siarheit at google.com>
> +Signed-off-by: Mark Asselstine <mark.asselstine at windriver.com>
> +---
> + configure.ac           | 3 +++
> + src/lxc/bdev/lxclvm.c  | 9 +++++++++
> + src/lxc/conf.c         | 8 ++++++++
> + src/lxc/lxccontainer.c | 8 ++++++++
> + 4 files changed, 28 insertions(+)
> +
> +diff --git a/configure.ac b/configure.ac
> +index 8f31c29..924baa1 100644
> +--- a/configure.ac
> ++++ b/configure.ac
> +@@ -601,6 +601,9 @@ AC_CHECK_DECLS([PR_CAPBSET_DROP], [], [], [#include <sys/prctl.h>])
> + # Check for some headers
> + AC_CHECK_HEADERS([sys/signalfd.h pty.h ifaddrs.h sys/capability.h sys/personality.h utmpx.h sys/timerfd.h])
> +
> ++# lookup major()/minor()/makedev()
> ++AC_HEADER_MAJOR
> ++
> + # Check for some syscalls functions
> + AC_CHECK_FUNCS([setns pivot_root sethostname unshare rand_r confstr faccessat])
> +
> +diff --git a/src/lxc/bdev/lxclvm.c b/src/lxc/bdev/lxclvm.c
> +index 3d41b10..419d1c2 100644
> +--- a/src/lxc/bdev/lxclvm.c
> ++++ b/src/lxc/bdev/lxclvm.c
> +@@ -32,10 +32,19 @@
> + #include <sys/wait.h>
> +
> + #include "bdev.h"
> ++#include "config.h"
> + #include "log.h"
> + #include "lxclvm.h"
> + #include "utils.h"
> +
> ++/* major()/minor() */
> ++#ifdef MAJOR_IN_MKDEV
> ++#    include <sys/mkdev.h>
> ++#endif
> ++#ifdef MAJOR_IN_SYSMACROS
> ++#    include <sys/sysmacros.h>
> ++#endif
> ++
> + lxc_log_define(lxclvm, lxc);
> +
> + extern char *dir_new_path(char *src, const char *oldname, const char *name,
> +diff --git a/src/lxc/conf.c b/src/lxc/conf.c
> +index 3b023ef..53406ca 100644
> +--- a/src/lxc/conf.c
> ++++ b/src/lxc/conf.c
> +@@ -39,6 +39,14 @@
> + #include <grp.h>
> + #include <time.h>
> +
> ++/* makedev() */
> ++#ifdef MAJOR_IN_MKDEV
> ++#    include <sys/mkdev.h>
> ++#endif
> ++#ifdef MAJOR_IN_SYSMACROS
> ++#    include <sys/sysmacros.h>
> ++#endif
> ++
> + #ifdef HAVE_STATVFS
> + #include <sys/statvfs.h>
> + #endif
> +diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
> +index 9f12ca2..aa02833 100644
> +--- a/src/lxc/lxccontainer.c
> ++++ b/src/lxc/lxccontainer.c
> +@@ -61,6 +61,14 @@
> + #include "utils.h"
> + #include "version.h"
> +
> ++/* major()/minor() */
> ++#ifdef MAJOR_IN_MKDEV
> ++#    include <sys/mkdev.h>
> ++#endif
> ++#ifdef MAJOR_IN_SYSMACROS
> ++#    include <sys/sysmacros.h>
> ++#endif
> ++
> + #if HAVE_IFADDRS_H
> + #include <ifaddrs.h>
> + #else
> +--
> +2.7.4
> +
> diff --git a/recipes-containers/lxc/lxc_2.0.0.bb b/recipes-containers/lxc/lxc_2.0.0.bb
> index dcbd171..f34d9bc 100644
> --- a/recipes-containers/lxc/lxc_2.0.0.bb
> +++ b/recipes-containers/lxc/lxc_2.0.0.bb
> @@ -31,6 +31,7 @@ SRC_URI = "http://linuxcontainers.org/downloads/${BPN}-${PV}.tar.gz \
>  	file://lxc-fix-B-S.patch \
>  	file://lxc-doc-upgrade-to-use-docbook-3.1-DTD.patch \
>  	file://logs-optionally-use-base-filenames-to-report-src-fil.patch \
> +	file://Use-AC_HEADER_MAJOR-to-detect-major-minor-makedev.patch \
>  	"
>
>  SRC_URI[md5sum] = "04a7245a614cd3296b0ae9ceeeb83fbb"
>



More information about the meta-virtualization mailing list