Anything changed on rawhide builders recently? Can't build ladvd

Josh Boyer jwboyer at gmail.com
Wed Nov 7 15:51:01 UTC 2012


On Wed, Nov 7, 2012 at 10:05 AM, Tomasz Torcz <tomek at pipebreaker.pl> wrote:
> Hi,
>
>   Today I tried to build ladvd 1.0.4 package for rawhide, but it failed with
> some strange message http://koji.fedoraproject.org/koji/getfile?taskID=4662562&name=build.log&offset=-4000 ,
> which is pasted below.  So I rolled back to 1.0.2 and it failed to build, too.
> It was building fine previously.
>   Then I tried to build for F18, it was built succesfuly (although it packaging ultimately
> failed because of unrelated reason).
>
>   So the question is: what's broken with rawhide builders?

The kernel-headers package is newer and includes the UAPI split done by
David Howells.

>   The message on rawhide builder is:
> #v+
> libtool: compile:  gcc -std=gnu99 -DHAVE_CONFIG_H -I. -Wall -Werror -Wformat -Wformat-security -D_FORTIFY_SOURCE=2 -fno-delete-null-pointer-checks -fstack-protector -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i686 -mtune=atom -fasynchronous-unwind-tables -c child.c  -fPIC -DPIC -o .libs/child.o
> In file included from cli.c:20:0:
> common.h:152:8: error: redefinition of 'struct sysinfo'
> In file included from /usr/include/linux/kernel.h:4:0,
>                  from /usr/include/linux/sysctl.h:25,
>                  from /usr/include/sys/sysctl.h:43,
>                  from common.h:50,
>                  from cli.c:20:
> /usr/include/linux/sysinfo.h:7:8: note: originally defined here
> make[2]: *** [cli.lo] Error 1

So it seems ladvd has carried a redefinition of struct sysinfo basically
forever.  They could have very well named it ladvd_sysinfo or something
and that might work as a temporary patch, but I think there is a bigger
issue going on here.

It seems that /usr/include/sys/sysctl.h has been doing a bit of ifdefery
to prevent inclusion of certain header files from the kernel.  That
header file is provided by glibc.  In it, you can see things like:

	#include <stddef.h>
	/* Prevent more kernel headers than necessary to be included.  */
	#ifndef _LINUX_KERNEL_H
	# define _LINUX_KERNEL_H        1
	# define __undef_LINUX_KERNEL_H
	#endif

	...

	#include <linux/sysctl.h>

	#ifdef __undef_LINUX_KERNEL_H
	# undef _LINUX_KERNEL_H
	# undef __undef_LINUX_KERNEL_H
	#endif

That works with kernel-headers from <= the 3.6 kernel, but the UAPI
rework has redefined the header guards for a number of files, including
<linux/kernel.h>.  That file is now specifically guarded by:

	#ifndef _UAPI_LINUX_KERNEL_H
	#define _UAPI_LINUX_KERNEL_H

which means the tests glibc is doing above are failing.

David, any thoughts on what the general solution to that would be?

josh


More information about the devel mailing list