[Buildroot] [PATCH 1/8] package/netbsd-compat-headers: provide compatibility headers not in musl

Yann E. MORIN yann.morin.1998 at free.fr
Sun Aug 14 21:56:07 UTC 2016


Arnout, All,

On 2016-08-14 23:20 +0200, Arnout Vandecappelle spake thusly:
>  Subject line should be musl-compat-headers, not netbsd-...
> 
> On 12-08-16 22:49, Yann E. MORIN wrote:
> > musl provides neither sys/queue.h nor sys/cdefs.h. Those two headers are
> > however quite widely used in a lot of packages (though they should at
> > least not use cdefs,h which is only full of mostly-legacy macros, and
> > which is mostly an internal header of glibc and was never really meant to
> > be exposed to, and used by packages).
> > 
> > But we don;t live in an ideal world, so a lot of packages break when
>          don't
> 
> > those two headers are missing.
> > 
> > We already took care of sys/queue.h with the netbsd-queue package. But
> > the need for cdefs.h is getting more and more pressing.
> > 
> > We rename the netbsd-queue package into musl-compat-headers, and we
> > make it install sys/queue.h (from NetBSD) and sys/cdefs.h (a minimalist
> > one we bundle in Buildroot). We can't use the cdefs.h from NetBSD
> > because it includes machine-dependent headers; instead we bundle a very
> > minimalistic one, that covers only what we need.
> > 
> > Signed-off-by: "Yann E. MORIN" <yann.morin.1998 at free.fr>
> > Cc: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
> 
>  In general I prefer to use an upstream like Khem proposes. However, in this
> case, it's really a lot easier if we can add or change the header as needed by
> breaking packages. So I like the way it's done now.

What khem ponted to is not an upstream. It is a minimalist header
OpenEmbeded crafted.

As you can read in the commit log, we can not use the upstream cdefs.h
header, as it includes a machine-dependent header. And we don't really
want to go that route of downloadign yet another header, which is
moreover different for each target...

> [snip]
> > diff --git a/package/musl-compat-headers/musl-compat-headers.mk b/package/musl-compat-headers/musl-compat-headers.mk
> > new file mode 100644
> > index 0000000..0758021
> > --- /dev/null
> > +++ b/package/musl-compat-headers/musl-compat-headers.mk
> > @@ -0,0 +1,29 @@
> > +################################################################################
> > +#
> > +# musl-compat-headers
> > +#
> > +################################################################################
> > +
> > +MUSL_COMPAT_HEADERS_SITE = http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/sys
> > +MUSL_COMPAT_HEADERS_VERSION = 1.70
> > +MUSL_COMPAT_HEADERS_SOURCE = queue.h?rev=$(MUSL_COMPAT_HEADERS_VERSION)
> 
>  We may need additional files in the future (e.g. the tree.h that openembedded
> is carrying). Also, the definition of upstream here is not entirely correct,
> because that's only half the package. So I think it's nicer/cleaner to specify
> this as:
> 
> MUSL_COMPAT_HEADERS_EXTRA_DOWNLOADS = \
> 	http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/sys/queue.h?rev=1.70

That's what I initially did, as I agree with you.

However, I want it to be minimaly intrusive, as it might be applied to
master and we're post -rc1.

> > +MUSL_COMPAT_HEADERS_LICENSE = BSD-3c, Public Domain or CC0
> 
>  Shouldn't we specify here
> 
> MUSL_COMPAT_HEADERS_LICENSE_FILES = queue.h cdefs.h

Good point. Will do.

> > +MUSL_COMPAT_HEADERS_ADD_TOOLCHAIN_DEPENDENCY = NO
> > +
> > +# Only installs headers
> > +MUSL_COMPAT_HEADERS_INSTALL_TARGET = NO
> > +MUSL_COMPAT_HEADERS_INSTALL_STAGING = YES
> > +
> > +define MUSL_COMPAT_HEADERS_EXTRACT_CMDS
> > +	cp $(DL_DIR)/$(MUSL_COMPAT_HEADERS_SOURCE) $(@D)/queue.h
>                      ^^^This would become
>                      $(notdir $(MUSL_COMPAT_HEADERS_EXTRA_DOWNLOADS))
> 
>  BTW I think it makes sense to use install here as well.

I re-used what was previously in the netbsd-queue package. But yes,
install is better. Will do.

[--SNIP--]
> > diff --git a/toolchain/toolchain-external/toolchain-external.mk b/toolchain/toolchain-external/toolchain-external.mk
> > index 29c1f36..967f022 100644
> > --- a/toolchain/toolchain-external/toolchain-external.mk
> > +++ b/toolchain/toolchain-external/toolchain-external.mk
> > @@ -246,11 +246,13 @@ TOOLCHAIN_EXTERNAL_CFLAGS += -msoft-float
> >  TOOLCHAIN_EXTERNAL_TOOLCHAIN_WRAPPER_ARGS += -DBR_SOFTFLOAT=1
> >  endif
> >  
> > -# musl does not provide a sys/queue.h implementation, so add the
> > -# netbsd-queue package that will install a sys/queue.h file in the
> > -# staging directory based on the NetBSD implementation.
> > +# musl does not provide an implementation for sys/queue.h or sys/cdefs.h. So,
> > +# add the netbsd-compat-headers package that will install those files, into
>              ^^^^^^musl

Yeah. Remnants of successive renames back-n-forth between
musl-compat-headers, netbsd-compat-headers, netbsd-headers and
musl-compat...

Will fix.

Thanks! :-)

Regards,
Yann E. MORIN.

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'



More information about the buildroot mailing list