diff mbox

[v2] musl: add a sys/queue.h implementation

Message ID 1449017908-7935-1-git-send-email-sergio.prado@e-labworks.com
State Accepted
Headers show

Commit Message

Sergio Prado Dec. 2, 2015, 12:58 a.m. UTC
Musl does not provide a 'sys/queue.h' implementation, and this has been
a problem for packages that depend on it.

So lets create a package called netbsd-queue that will install a
'sys/queue.h' in the staging directory when enabled, based on the
NetBSD implementation.

Musl toolchain and external toolchain packages will depend on this
package, so that 'sys/queue.h' will be always installed when compiling
with a musl based toolchain.

Tested on ARM and x86 in the following cases:
  - Buildroot musl toolchain.
  - External musl toolchain without 'sys/queue.h'.
  - External musl toolchain with 'sys/queue.h'.

Fixes:
http://autobuild.buildroot.net/results/24bad2d06ab40024dacf136bee722072d587f84e

And possibly many others.

Signed-off-by: Sergio Prado <sergio.prado@e-labworks.com>

---
Changes v1 -> v2:
  - package name changed to netbsd-queue
  - queue.h is now downloaded from NetBSD CVS server
  - Config.in removed
  - license changed to BSD-3c
  - instead of checking if queue.h already exists before installing, 
    it will be installed unconditionally.
---
 package/musl/musl.mk                               |  5 +++++
 package/netbsd-queue/netbsd-queue.hash             |  2 ++
 package/netbsd-queue/netbsd-queue.mk               | 23 ++++++++++++++++++++++
 toolchain/toolchain-external/toolchain-external.mk |  7 +++++++
 4 files changed, 37 insertions(+)
 create mode 100644 package/netbsd-queue/netbsd-queue.hash
 create mode 100644 package/netbsd-queue/netbsd-queue.mk

Comments

Thomas Petazzoni Dec. 2, 2015, 9:45 a.m. UTC | #1
Dear Sergio Prado,

On Tue,  1 Dec 2015 22:58:28 -0200, Sergio Prado wrote:
> Musl does not provide a 'sys/queue.h' implementation, and this has been
> a problem for packages that depend on it.
> 
> So lets create a package called netbsd-queue that will install a
> 'sys/queue.h' in the staging directory when enabled, based on the
> NetBSD implementation.
> 
> Musl toolchain and external toolchain packages will depend on this
> package, so that 'sys/queue.h' will be always installed when compiling
> with a musl based toolchain.
> 
> Tested on ARM and x86 in the following cases:
>   - Buildroot musl toolchain.
>   - External musl toolchain without 'sys/queue.h'.
>   - External musl toolchain with 'sys/queue.h'.
> 
> Fixes:
> http://autobuild.buildroot.net/results/24bad2d06ab40024dacf136bee722072d587f84e
> 
> And possibly many others.
> 
> Signed-off-by: Sergio Prado <sergio.prado@e-labworks.com>

From a quick look, it looks good. Can you chase down the packages that
had their own workaround for the lack of queue.h ?

At the moment, I see only libtirpc, but I might have missed others. If
you could prepare a patch for those packages to make them use the now
globally available queue.h, it would be good.

Thanks!

Thomas
Sergio Prado Dec. 2, 2015, 1 p.m. UTC | #2
Hi Thomas,

2015-12-02 7:45 GMT-02:00 Thomas Petazzoni <
thomas.petazzoni@free-electrons.com>:

> Dear Sergio Prado,
>
> On Tue,  1 Dec 2015 22:58:28 -0200, Sergio Prado wrote:
> > Musl does not provide a 'sys/queue.h' implementation, and this has been
> > a problem for packages that depend on it.
> >
> > So lets create a package called netbsd-queue that will install a
> > 'sys/queue.h' in the staging directory when enabled, based on the
> > NetBSD implementation.
> >
> > Musl toolchain and external toolchain packages will depend on this
> > package, so that 'sys/queue.h' will be always installed when compiling
> > with a musl based toolchain.
> >
> > Tested on ARM and x86 in the following cases:
> >   - Buildroot musl toolchain.
> >   - External musl toolchain without 'sys/queue.h'.
> >   - External musl toolchain with 'sys/queue.h'.
> >
> > Fixes:
> >
> http://autobuild.buildroot.net/results/24bad2d06ab40024dacf136bee722072d587f84e
> >
> > And possibly many others.
> >
> > Signed-off-by: Sergio Prado <sergio.prado@e-labworks.com>
>
> From a quick look, it looks good. Can you chase down the packages that
> had their own workaround for the lack of queue.h ?
>

OK. I will do it.


>
> At the moment, I see only libtirpc, but I might have missed others. If
> you could prepare a patch for those packages to make them use the now
> globally available queue.h, it would be good.


> Thanks!
>

Thanks,


>
> Thomas
> --
> Thomas Petazzoni, CTO, Free Electrons
> Embedded Linux, Kernel and Android engineering
> http://free-electrons.com
>
Sergio Prado Dec. 2, 2015, 2:58 p.m. UTC | #3
Hi Thomas,

Via "git log" and "git grep" I identified two packages that have changes
because of queue.h: fastd and libtirpc.

Fastd is using a patch that removes the need of queue.h, and that patch is
already upstream. So I think we do not need to change that.

Libtirpc is using a patch to add a local sys/queue.h implementation. I will
prepare a patch for this one.

Best regards,

Sergio Prado
Embedded Labworks
Office: +55 11 2628-3461
Mobile: +55 11 97123-3420

2015-12-02 11:00 GMT-02:00 Sergio Prado <sergio.prado@e-labworks.com>:

> Hi Thomas,
>
> 2015-12-02 7:45 GMT-02:00 Thomas Petazzoni <
> thomas.petazzoni@free-electrons.com>:
>
>> Dear Sergio Prado,
>>
>> On Tue,  1 Dec 2015 22:58:28 -0200, Sergio Prado wrote:
>> > Musl does not provide a 'sys/queue.h' implementation, and this has been
>> > a problem for packages that depend on it.
>> >
>> > So lets create a package called netbsd-queue that will install a
>> > 'sys/queue.h' in the staging directory when enabled, based on the
>> > NetBSD implementation.
>> >
>> > Musl toolchain and external toolchain packages will depend on this
>> > package, so that 'sys/queue.h' will be always installed when compiling
>> > with a musl based toolchain.
>> >
>> > Tested on ARM and x86 in the following cases:
>> >   - Buildroot musl toolchain.
>> >   - External musl toolchain without 'sys/queue.h'.
>> >   - External musl toolchain with 'sys/queue.h'.
>> >
>> > Fixes:
>> >
>> http://autobuild.buildroot.net/results/24bad2d06ab40024dacf136bee722072d587f84e
>> >
>> > And possibly many others.
>> >
>> > Signed-off-by: Sergio Prado <sergio.prado@e-labworks.com>
>>
>> From a quick look, it looks good. Can you chase down the packages that
>> had their own workaround for the lack of queue.h ?
>>
>
> OK. I will do it.
>
>
>>
>> At the moment, I see only libtirpc, but I might have missed others. If
>> you could prepare a patch for those packages to make them use the now
>> globally available queue.h, it would be good.
>
>
>> Thanks!
>>
>
> Thanks,
>
>
>>
>> Thomas
>> --
>> Thomas Petazzoni, CTO, Free Electrons
>> Embedded Linux, Kernel and Android engineering
>> http://free-electrons.com
>>
>
>
Thomas Petazzoni Dec. 17, 2015, 9:05 p.m. UTC | #4
Dear Sergio Prado,

On Tue,  1 Dec 2015 22:58:28 -0200, Sergio Prado wrote:
> Musl does not provide a 'sys/queue.h' implementation, and this has been
> a problem for packages that depend on it.
> 
> So lets create a package called netbsd-queue that will install a
> 'sys/queue.h' in the staging directory when enabled, based on the
> NetBSD implementation.
> 
> Musl toolchain and external toolchain packages will depend on this
> package, so that 'sys/queue.h' will be always installed when compiling
> with a musl based toolchain.
> 
> Tested on ARM and x86 in the following cases:
>   - Buildroot musl toolchain.
>   - External musl toolchain without 'sys/queue.h'.
>   - External musl toolchain with 'sys/queue.h'.
> 
> Fixes:
> http://autobuild.buildroot.net/results/24bad2d06ab40024dacf136bee722072d587f84e
> 
> And possibly many others.
> 
> Signed-off-by: Sergio Prado <sergio.prado@e-labworks.com>
> 
> ---
> Changes v1 -> v2:
>   - package name changed to netbsd-queue
>   - queue.h is now downloaded from NetBSD CVS server
>   - Config.in removed
>   - license changed to BSD-3c
>   - instead of checking if queue.h already exists before installing, 
>     it will be installed unconditionally.
> ---
>  package/musl/musl.mk                               |  5 +++++
>  package/netbsd-queue/netbsd-queue.hash             |  2 ++
>  package/netbsd-queue/netbsd-queue.mk               | 23 ++++++++++++++++++++++
>  toolchain/toolchain-external/toolchain-external.mk |  7 +++++++
>  4 files changed, 37 insertions(+)
>  create mode 100644 package/netbsd-queue/netbsd-queue.hash
>  create mode 100644 package/netbsd-queue/netbsd-queue.mk

Applied, thanks.

Thomas
diff mbox

Patch

diff --git a/package/musl/musl.mk b/package/musl/musl.mk
index 6fdcc7312288..2cc6699a35b2 100644
--- a/package/musl/musl.mk
+++ b/package/musl/musl.mk
@@ -13,6 +13,11 @@  MUSL_LICENSE_FILES = COPYRIGHT
 # cross-compiler and the kernel headers
 MUSL_DEPENDENCIES = host-gcc-initial linux-headers
 
+# 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_DEPENDENCIES += netbsd-queue
+
 # musl is part of the toolchain so disable the toolchain dependency
 MUSL_ADD_TOOLCHAIN_DEPENDENCY = NO
 
diff --git a/package/netbsd-queue/netbsd-queue.hash b/package/netbsd-queue/netbsd-queue.hash
new file mode 100644
index 000000000000..f8e2a6c59878
--- /dev/null
+++ b/package/netbsd-queue/netbsd-queue.hash
@@ -0,0 +1,2 @@ 
+# Locally calculated
+sha256 c13407edd0e33be73cae72514cb234f8612e1c0e54401c9448daffd3a240158b  queue.h?rev=1.70
diff --git a/package/netbsd-queue/netbsd-queue.mk b/package/netbsd-queue/netbsd-queue.mk
new file mode 100644
index 000000000000..0f486fa25880
--- /dev/null
+++ b/package/netbsd-queue/netbsd-queue.mk
@@ -0,0 +1,23 @@ 
+################################################################################
+#
+# netbsd-queue
+#
+################################################################################
+
+NETBSD_QUEUE_VERSION = 1.70
+NETBSD_QUEUE_SITE = http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/sys
+NETBSD_QUEUE_SOURCE = queue.h?rev=$(NETBSD_QUEUE_VERSION)
+NETBSD_QUEUE_LICENSE = BSD-3c
+
+NETBSD_QUEUE_INSTALL_STAGING = YES
+
+define NETBSD_QUEUE_EXTRACT_CMDS
+	cp $(DL_DIR)/$(NETBSD_QUEUE_SOURCE) $(@D)/queue.h
+endef
+
+define NETBSD_QUEUE_INSTALL_STAGING_CMDS
+	$(INSTALL) -D -m 0644 $(@D)/queue.h \
+		$(STAGING_DIR)/usr/include/sys/queue.h
+endef
+
+$(eval $(generic-package))
diff --git a/toolchain/toolchain-external/toolchain-external.mk b/toolchain/toolchain-external/toolchain-external.mk
index 613ce506608b..745b6858a2a7 100644
--- a/toolchain/toolchain-external/toolchain-external.mk
+++ b/toolchain/toolchain-external/toolchain-external.mk
@@ -237,6 +237,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.
+ifeq ($(BR2_TOOLCHAIN_USES_MUSL),y)
+TOOLCHAIN_EXTERNAL_DEPENDENCIES += netbsd-queue
+endif
+
 # The Linaro ARMhf toolchain expects the libraries in
 # {/usr,}/lib/arm-linux-gnueabihf, but Buildroot copies them to
 # {/usr,}/lib, so we need to create a symbolic link.