Amlogic/Rockchip: Fix build with glibc-2.28

This commit is contained in:
MilhouseVH 2018-08-13 12:21:34 +01:00
parent 3892b13f1b
commit 499c11c7b5

View File

@ -0,0 +1,124 @@
From 9c869d08d82c73f62ab3527567858ce4b0cf1257 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Wed, 18 Jul 2018 17:26:17 +0200
Subject: [PATCH 1/2] meson: unify linux/stat.h check with other checks and use
_GNU_SOURCE
Using _GNU_SOURCE is better because that's how we include the headers in the
actual build, and some headers define different stuff when it is defined.
sys/stat.h for example defines 'struct statx' conditionally.
---
meson.build | 20 ++++++++++++++------
src/basic/missing.h | 2 +-
2 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/meson.build b/meson.build
index 68423bdfa5e..99035d2306c 100644
--- a/meson.build
+++ b/meson.build
@@ -421,11 +421,9 @@ decl_headers = '''
#include <uchar.h>
#include <linux/ethtool.h>
#include <linux/fib_rules.h>
-#include <linux/stat.h>
#include <sys/stat.h>
'''
# FIXME: key_serial_t is only defined in keyutils.h, this is bound to fail
-# FIXME: these should use -D_GNU_SOURCE, since that is defined at build time
foreach decl : ['char16_t',
'char32_t',
@@ -436,13 +434,23 @@ foreach decl : ['char16_t',
]
# We get -1 if the size cannot be determined
- have = cc.sizeof(decl, prefix : decl_headers) > 0
+ have = cc.sizeof(decl, prefix : decl_headers, args : '-D_GNU_SOURCE') > 0
+
+ if decl == 'struct statx'
+ if have
+ want_linux_stat_h = false
+ else
+ have = cc.sizeof(decl,
+ prefix : decl_headers + '#include <linux/stat.h>',
+ args : '-D_GNU_SOURCE') > 0
+ want_linux_stat_h = have
+ endif
+ endif
+
conf.set10('HAVE_' + decl.underscorify().to_upper(), have)
endforeach
-conf.set10('HAVE_STRUCT_STATX_IN_SYS_STAT_H', cc.sizeof('struct statx', prefix : '''
-#include <sys/stat.h>
-''', args : '-D_GNU_SOURCE') > 0)
+conf.set10('WANT_LINUX_STAT_H', want_linux_stat_h)
foreach decl : [['IFLA_INET6_ADDR_GEN_MODE', 'linux/if_link.h'],
['IN6_ADDR_GEN_MODE_STABLE_PRIVACY', 'linux/if_link.h'],
diff --git a/src/basic/missing.h b/src/basic/missing.h
index 14ad3d49140..9044683b15f 100644
--- a/src/basic/missing.h
+++ b/src/basic/missing.h
@@ -24,7 +24,7 @@
#include <uchar.h>
#include <unistd.h>
-#if !HAVE_STRUCT_STATX_IN_SYS_STAT_H
+#if WANT_LINUX_STAT_H
#include <linux/stat.h>
#endif
From 1d7aedf11a22d0c1aca40905e953a25f03252cde Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Wed, 18 Jul 2018 17:42:06 +0200
Subject: [PATCH 2/2] meson: remove false check for key_serial_t
key_serial_t is defined in keyutil.h, which wasn't included in the header list
in the test, so the test always failed. We were always compiling stuff with
!HAVE_KEY_SERIAL_T.
We could try to add keyutil.h to the test, but then we'd have to first check if
it is available, which just doesn't seem worth the trouble.
key_serial_t should always be defined as int32_t. Let's keep the uncoditional
define, since repeated compatible typedefs are not a problem, and it allows us
to compile even if the header file is missing. If there's ever a change in the
definition, we'll have to adjust the code for the different type anyway, and
our compiler will tell us.
---
meson.build | 2 --
src/basic/missing.h | 2 --
2 files changed, 4 deletions(-)
diff --git a/meson.build b/meson.build
index 99035d2306c..84656cdc7e8 100644
--- a/meson.build
+++ b/meson.build
@@ -423,11 +423,9 @@ decl_headers = '''
#include <linux/fib_rules.h>
#include <sys/stat.h>
'''
-# FIXME: key_serial_t is only defined in keyutils.h, this is bound to fail
foreach decl : ['char16_t',
'char32_t',
- 'key_serial_t',
'struct ethtool_link_settings',
'struct fib_rule_uid_range',
'struct statx',
diff --git a/src/basic/missing.h b/src/basic/missing.h
index 9044683b15f..477992fbcba 100644
--- a/src/basic/missing.h
+++ b/src/basic/missing.h
@@ -1183,9 +1183,7 @@ struct input_mask {
#define KEY_ALS_TOGGLE 0x230
#endif
-#if ! HAVE_KEY_SERIAL_T
typedef int32_t key_serial_t;
-#endif
#ifndef KEYCTL_JOIN_SESSION_KEYRING
#define KEYCTL_JOIN_SESSION_KEYRING 1