summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilipe Brandenburger <filbranden@google.com>2018-07-15 22:43:35 -0700
committerSven Eden <sven.eden@prydeworx.com>2018-10-29 10:18:21 +0100
commite644f2ca294b161b65b95d924aa35d2ffcb28abe (patch)
treeb248ba00aee47bba8c469f0cc72ccd9ad9bc6615
parent2e2fcdca834119eaf45336a959327d94e989b29e (diff)
build-sys: Detect whether struct statx is defined in sys/stat.h
Starting with glibc 2.27.9000-36.fc29, include file sys/stat.h will have a definition for struct statx, in which case include file linux/stat.h should be avoided, in order to prevent a duplicate definition. In file included from ../src/basic/missing.h:18, from ../src/basic/util.h:28, from ../src/basic/hashmap.h:10, from ../src/shared/bus-util.h:12, from ../src/libsystemd/sd-bus/bus-creds.c:11: /usr/include/linux/stat.h:99:8: error: redefinition of ‘struct statx’ struct statx { ^~~~~ In file included from /usr/include/sys/stat.h:446, from ../src/basic/util.h:19, from ../src/basic/hashmap.h:10, from ../src/shared/bus-util.h:12, from ../src/libsystemd/sd-bus/bus-creds.c:11: /usr/include/bits/statx.h:36:8: note: originally defined here struct statx ^~~~~ Extend our meson.build to look for struct statx when only sys/stat.h is included and, in that case, do not include linux/stat.h anymore. Tested that systemd builds correctly when using a glibc version that includes a definition for struct statx. glibc Fedora RPM update: https://src.fedoraproject.org/rpms/glibc/c/28cb5d31fc1e5887912283c889689c47076278ae glibc upstream commit: https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=fd70af45528d59a00eb3190ef6706cb299488fcd (cherry picked from commit 75720bff62a84896e9a0654afc7cf9408cf89a38)
-rw-r--r--meson.build21
-rw-r--r--src/basic/missing.h2
-rw-r--r--src/basic/xattr-util.c1
3 files changed, 14 insertions, 10 deletions
diff --git a/meson.build b/meson.build
index dea50842a..f1975db8b 100644
--- a/meson.build
+++ b/meson.build
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: LGPL-2.1+
project('elogind', 'c',
- version : '239.1',
+ version : '239',
license : 'LGPLv2+',
default_options: [
'c_std=gnu99',
@@ -209,7 +209,6 @@ varrunissymllink = run_command('test', '-L', '/var/run').returncode() == 0
message('Setting VARRUN_IS_SYMLINK to: @0@'.format(varrunissymllink))
conf.set10('VARRUN_IS_SYMLINK', varrunissymllink)
#endif // 1
-
pamlibdir = get_option('pamlibdir')
if pamlibdir == ''
pamlibdir = join_paths(rootlibdir, 'security')
@@ -501,6 +500,7 @@ decl_headers = '''
#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',
@@ -515,6 +515,10 @@ foreach decl : ['char16_t',
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)
+
foreach decl : [['IFLA_INET6_ADDR_GEN_MODE', 'linux/if_link.h'],
['IN6_ADDR_GEN_MODE_STABLE_PRIVACY', 'linux/if_link.h'],
['IFLA_VRF_TABLE', 'linux/if_link.h'],
@@ -910,7 +914,7 @@ enable_debug_mmap_cache = false
#if 1 /// additional elogind debug mode
enable_debug_elogind = false
#endif // 1
-foreach name : get_option('debug-extra')
+foreach name : get_option('debug')
if name == 'hashmap'
enable_debug_hashmap = true
elif name == 'mmap-cache'
@@ -1476,7 +1480,6 @@ conf.set_quoted('USER_GENERATOR_PATH', '/dev/null')
#####################################################################
#endif // 1
-
config_h = configure_file(
output : 'config.h',
configuration : conf)
@@ -1602,10 +1605,10 @@ install_libelogind_static = static_library(
libselinux,
#if 0 /// No grypt with elogind
# libgcrypt],
+# c_args : libsystemd_c_args + (static_libsystemd_pic ? [] : ['-fno-PIC']))
#else
],
#endif // 0
- c_args : libelogind_c_args + (static_libelogind_pic ? [] : ['-fno-PIC']))
############################################################
@@ -3215,14 +3218,14 @@ status = [
'rootexeclib dir: @0@'.format(rootlibexecdir),
#endif // 1
#if 0 /// UNNEEDED by elogind
-# 'SysV init scripts: @0@'.format(sysvinit_path),
-# 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
#endif // 0
+ 'SysV init scripts: @0@'.format(sysvinit_path),
+ 'SysV rc?.d directories: @0@'.format(sysvrcnd_path),
'PAM modules directory: @0@'.format(pamlibdir),
'PAM configuration directory: @0@'.format(pamconfdir),
#if 0 /// UNNEEDED by elogind
-# 'RPM macros directory: @0@'.format(rpmmacrosdir),
#endif // 0
+ 'RPM macros directory: @0@'.format(rpmmacrosdir),
'modprobe.d directory: @0@'.format(modprobedir),
'D-Bus policy directory: @0@'.format(dbuspolicydir),
'D-Bus session directory: @0@'.format(dbussessionservicedir),
@@ -3388,12 +3391,12 @@ foreach tuple : [
# ['wheel group', get_option('wheel-group')],
# ['gshadow'],
#endif // 0
- ['valgrind', conf.get('VALGRIND') == 1],
#if 1 /// Extra debugging for elogind
['debug elogind'],
#endif // 1
['debug hashmap'],
['debug mmap cache'],
+ ['valgrind', conf.get('VALGRIND') == 1],
]
if tuple.length() >= 2
diff --git a/src/basic/missing.h b/src/basic/missing.h
index fb1478548..eddbb275e 100644
--- a/src/basic/missing.h
+++ b/src/basic/missing.h
@@ -27,6 +27,8 @@
/// Additional includes needed by elogind
#include "musl_missing.h"
+#if !HAVE_STRUCT_STATX_IN_SYS_STAT_H
+#endif
#if HAVE_AUDIT
#include <libaudit.h>
diff --git a/src/basic/xattr-util.c b/src/basic/xattr-util.c
index a9ec8e106..d3d0194c4 100644
--- a/src/basic/xattr-util.c
+++ b/src/basic/xattr-util.c
@@ -2,7 +2,6 @@
#include <errno.h>
#include <fcntl.h>
-//#include <linux/stat.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>