summaryrefslogtreecommitdiff
path: root/package/musl-compat-headers
diff options
context:
space:
mode:
authorYann E. MORIN <yann.morin.1998@free.fr>2016-08-18 23:50:13 +0200
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>2016-08-19 11:29:12 +0200
commite31eb720408bb0826ec5a27e804dbe6afaf30390 (patch)
tree87506d5dc33987534053c715fce90c0a7f73169c /package/musl-compat-headers
parentf55adea434876cf1ee2604abe367ed1b6c555faf (diff)
package/musl-compat-headers: provide compatibility headers not in musl
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 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@free.fr> Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Cc: Baruch Siach <baruch@tkos.co.il> Cc: Arnout Vandecappelle <arnout@mind.be> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Diffstat (limited to 'package/musl-compat-headers')
-rw-r--r--package/musl-compat-headers/Config.in2
-rw-r--r--package/musl-compat-headers/cdefs.h51
-rw-r--r--package/musl-compat-headers/musl-compat-headers.hash2
-rw-r--r--package/musl-compat-headers/musl-compat-headers.mk34
4 files changed, 89 insertions, 0 deletions
diff --git a/package/musl-compat-headers/Config.in b/package/musl-compat-headers/Config.in
new file mode 100644
index 000000000..c672f9cac
--- /dev/null
+++ b/package/musl-compat-headers/Config.in
@@ -0,0 +1,2 @@
+config BR2_PACKAGE_MUSL_COMPAT_HEADERS
+ bool
diff --git a/package/musl-compat-headers/cdefs.h b/package/musl-compat-headers/cdefs.h
new file mode 100644
index 000000000..6fe7aa435
--- /dev/null
+++ b/package/musl-compat-headers/cdefs.h
@@ -0,0 +1,51 @@
+/* Copyright (C) 2016 Yann E. MORIN <yann.morin.1998@free.fr>
+ *
+ * This file is in the Public Domain.
+ *
+ * For jurisdictions in which the Public Domain does not exist
+ * or it is not otherwise applicable, this file is licensed CC0
+ * (Creative Commons Zero).
+ */
+
+/* This file contains definitions for non-standard macros defined by
+ * glibc, but quite commonly used in packages.
+ *
+ * Because they are non-standard, musl does not define those macros.
+ * It does not provide cdefs.h either.
+ *
+ * This file is a compatibility header written from scratch, to be
+ * installed when the C library is musl.
+ *
+ * Not all macros from the glibc's cdefs.h are available, only the
+ * most commonly used ones.
+ *
+ * Please refer to the glibc documentation and source code for
+ * explanations about those macros.
+ */
+
+#ifndef BUILDROOT_SYS_CDEFS_H
+#define BUILDROOT_SYS_CDEFS_H
+
+/* Function prototypes. */
+#undef __P
+#define __P(arg) arg
+
+/* C declarations in C++ mode. */
+#ifdef __cplusplus
+# define __BEGIN_DECLS extern "C" {
+# define __END_DECLS }
+#else
+# define __BEGIN_DECLS
+# define __END_DECLS
+#endif
+
+/* Don't throw exceptions in C functions. */
+#ifndef __cplusplus
+# define __THROW __attribute__ ((__nothrow__))
+# define __NTH(f) __attribute__ ((__nothrow__)) f
+#else
+# define __THROW
+# define __NTH(f) f
+#endif
+
+#endif /* ifndef BUILDROOT_SYS_CDEFS_H */
diff --git a/package/musl-compat-headers/musl-compat-headers.hash b/package/musl-compat-headers/musl-compat-headers.hash
new file mode 100644
index 000000000..f8e2a6c59
--- /dev/null
+++ b/package/musl-compat-headers/musl-compat-headers.hash
@@ -0,0 +1,2 @@
+# Locally calculated
+sha256 c13407edd0e33be73cae72514cb234f8612e1c0e54401c9448daffd3a240158b queue.h?rev=1.70
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 000000000..25e032c72
--- /dev/null
+++ b/package/musl-compat-headers/musl-compat-headers.mk
@@ -0,0 +1,34 @@
+################################################################################
+#
+# musl-compat-headers
+#
+################################################################################
+
+# No main site, just using extra downloads
+MUSL_COMPAT_HEADERS_QUEUE_H = http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/sys/queue.h?rev=1.70
+
+MUSL_COMPAT_HEADERS_EXTRA_DOWNLOADS = $(MUSL_COMPAT_HEADERS_QUEUE_H)
+
+MUSL_COMPAT_HEADERS_LICENSE = BSD-3c, Public Domain or CC0
+MUSL_COMPAT_HEADERS_LICENSE_FILES = queue.h cdefs.h
+
+MUSL_COMPAT_HEADERS_ADD_TOOLCHAIN_DEPENDENCY = NO
+
+# Only installs headers
+MUSL_COMPAT_HEADERS_INSTALL_TARGET = NO
+MUSL_COMPAT_HEADERS_INSTALL_STAGING = YES
+
+# Copying both headers so legal-info finds them (they are _LICENSE_FILES)
+define MUSL_COMPAT_HEADERS_EXTRACT_CMDS
+ $(INSTALL) -m 0644 -D $(DL_DIR)/$(notdir $(MUSL_COMPAT_HEADERS_QUEUE_H)) $(@D)/queue.h
+ $(INSTALL) -m 0644 -D $(MUSL_COMPAT_HEADERS_PKGDIR)/cdefs.h $(@D)/cdefs.h
+endef
+
+define MUSL_COMPAT_HEADERS_INSTALL_STAGING_CMDS
+ $(INSTALL) -D -m 0644 $(@D)/queue.h \
+ $(STAGING_DIR)/usr/include/sys/queue.h
+ $(INSTALL) -D -m 0644 $(@D)/cdefs.h \
+ $(STAGING_DIR)/usr/include/sys/cdefs.h
+endef
+
+$(eval $(generic-package))