From e644f2ca294b161b65b95d924aa35d2ffcb28abe Mon Sep 17 00:00:00 2001 From: Filipe Brandenburger Date: Sun, 15 Jul 2018 22:43:35 -0700 Subject: build-sys: Detect whether struct statx is defined in sys/stat.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- meson.build | 21 ++++++++++++--------- src/basic/missing.h | 2 ++ src/basic/xattr-util.c | 1 - 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 ''' # 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 +''', 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 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 #include -//#include #include #include #include -- cgit v1.2.3