libbsd: Fix build with musl
PATCH 1/2 libbsd: Fix build with musl
a.out.h support is not across all architectures only x86/x86_64 support is in linux/a.out.h, this patch abstracts the minimum needed constructs into itself
Signed-off-by Khem Raj <[email protected]>
--- ...001-Replace-__BEGIN_DECLS-and-__END_DECLS.patch | 363 +++++++++++++++++++++ .../libbsd/libbsd/0002-Remove-funopen.patch | 55 ++++ ...3-Fix-build-breaks-due-to-missing-a.out.h.patch | 130 ++++++++ meta/recipes-support/libbsd/libbsd_0.8.3.bb | 5 + 4 files changed, 553 insertions(+) create mode 100644 meta/recipes-support/libbsd/libbsd/0001-Replace-__BEGIN_DECLS-and-__END_DECLS.patch create mode 100644 meta/recipes-support/libbsd/libbsd/0002-Remove-funopen.patch create mode 100644 meta/recipes-support/libbsd/libbsd/0003-Fix-build-breaks-due-to-missing-a.out.h.patch
meta/recipes-support/libbsd/libbsd/0001-Replace-__BEGIN_DECLS-and-__END_DECLS.patch new file +363 -0
@@ -0,0 +1,363 @@ +From 88adbe1a855b7aa95bd925c80ed83c86f3fc42e3 Mon Sep 17 00:00:00 2001 +From: Khem Raj <[email protected]> +Date: Sun, 6 Nov 2016 09:39:31 -0800 +Subject: [PATCH 1/3] Replace __BEGIN_DECLS and __END_DECLS + +Signed-off-by: Khem Raj <[email protected]> +--- +Upstream-Status: Pending + + include/bsd/err.h | 10 ++++++++-- + include/bsd/libutil.h | 10 ++++++++-- + include/bsd/md5.h | 10 ++++++++-- + include/bsd/nlist.h | 10 ++++++++-- + include/bsd/readpassphrase.h | 10 ++++++++-- + include/bsd/stdio.h | 10 ++++++++-- + include/bsd/stdlib.h | 10 ++++++++-- + include/bsd/string.h | 10 ++++++++-- + include/bsd/stringlist.h | 10 ++++++++-- + include/bsd/unistd.h | 10 ++++++++-- + include/bsd/vis.h | 10 ++++++++-- + include/bsd/wchar.h | 10 ++++++++-- + src/hash/sha512.h | 10 ++++++++-- + 13 files changed, 104 insertions(+), 26 deletions(-) + +diff --git a/include/bsd/err.h b/include/bsd/err.h +index 12fd051..43dfc32 100644 +--- a/include/bsd/err.h ++++ b/include/bsd/err.h +@@ -42,7 +42,10 @@ + + #include <stdarg.h> + +-__BEGIN_DECLS ++/* __BEGIN_DECLS */ ++#ifdef __cplusplus ++extern "C" { ++#endif + void warnc(int code, const char *format, ...) + __printflike(2, 3); + void vwarnc(int code, const char *format, va_list ap) +@@ -51,6 +54,9 @@ void errc(int status, int code, const char *format, ...) + __printflike(3, 4); + void verrc(int status, int code, const char *format, va_list ap) + __printflike(3, 0); +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif ++/* __END_DECLS */ + + #endif +diff --git a/include/bsd/libutil.h b/include/bsd/libutil.h +index ebb6160..28b919d 100644 +--- a/include/bsd/libutil.h ++++ b/include/bsd/libutil.h +@@ -53,7 +53,10 @@ struct pidfh { + ino_t pf_ino; + }; + +-__BEGIN_DECLS ++/* __BEGIN_DECLS */ ++#ifdef __cplusplus ++extern "C" { ++#endif + int humanize_number(char *buf, size_t len, int64_t bytes, + const char *suffix, int scale, int flags); + int expand_number(const char *_buf, uint64_t *_num); +@@ -66,7 +69,10 @@ int pidfile_close(struct pidfh *pfh); + int pidfile_remove(struct pidfh *pfh); + + char *fparseln(FILE *, size_t *, size_t *, const char[3], int); +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif ++/* __END_DECLS */ + + /* humanize_number(3) */ + #define HN_DECIMAL 0x01 +diff --git a/include/bsd/md5.h b/include/bsd/md5.h +index 9a75fad..3531fd6 100644 +--- a/include/bsd/md5.h ++++ b/include/bsd/md5.h +@@ -30,7 +30,10 @@ typedef struct MD5Context { + #include <sys/cdefs.h> + #include <sys/types.h> + +-__BEGIN_DECLS ++/* __BEGIN_DECLS */ ++#ifdef __cplusplus ++extern "C" { ++#endif + void MD5Init(MD5_CTX *); + void MD5Update(MD5_CTX *, const uint8_t *, size_t) + __attribute__((__bounded__(__string__,2,3))); +@@ -49,6 +52,9 @@ char *MD5FileChunk(const char *, char *, off_t, off_t) + char *MD5Data(const uint8_t *, size_t, char *) + __attribute__((__bounded__(__string__,1,2))) + __attribute__((__bounded__(__minbytes__,3,MD5_DIGEST_STRING_LENGTH))); +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif ++/* __END_DECLS */ + + #endif /* _MD5_H_ */ +diff --git a/include/bsd/nlist.h b/include/bsd/nlist.h +index 2730237..0389ab7 100644 +--- a/include/bsd/nlist.h ++++ b/include/bsd/nlist.h +@@ -30,8 +30,14 @@ + #include <sys/cdefs.h> + #include <a.out.h> + +-__BEGIN_DECLS ++/* __BEGIN_DECLS */ ++#ifdef __cplusplus ++extern "C" { ++#endif + extern int nlist(const char *filename, struct nlist *list); +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif ++/* __END_DECLS */ + + #endif +diff --git a/include/bsd/readpassphrase.h b/include/bsd/readpassphrase.h +index e1dacc3..76e0d33 100644 +--- a/include/bsd/readpassphrase.h ++++ b/include/bsd/readpassphrase.h +@@ -34,8 +34,14 @@ + #include <sys/cdefs.h> + #include <sys/types.h> + +-__BEGIN_DECLS ++/* __BEGIN_DECLS */ ++#ifdef __cplusplus ++extern "C" { ++#endif + char * readpassphrase(const char *, char *, size_t, int); +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif ++/* __END_DECLS */ + + #endif /* !_READPASSPHRASE_H_ */ +diff --git a/include/bsd/stdio.h b/include/bsd/stdio.h +index 7697425..b5b3efd 100644 +--- a/include/bsd/stdio.h ++++ b/include/bsd/stdio.h +@@ -41,7 +41,10 @@ + #include <sys/cdefs.h> + #include <sys/types.h> + +-__BEGIN_DECLS ++/* __BEGIN_DECLS */ ++#ifdef __cplusplus ++extern "C" { ++#endif + const char *fmtcheck(const char *, const char *); + + /* XXX: The function requires cooperation from the system libc to store the +@@ -69,7 +72,10 @@ FILE *funopen(const void *cookie, + #define fwopen(cookie, fn) funopen(cookie, NULL, fn, NULL, NULL) + + int fpurge(FILE *fp); +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif ++/* __END_DECLS */ + + #endif + #endif +diff --git a/include/bsd/stdlib.h b/include/bsd/stdlib.h +index 0604cad..b9f0515 100644 +--- a/include/bsd/stdlib.h ++++ b/include/bsd/stdlib.h +@@ -46,7 +46,10 @@ + #include <sys/stat.h> + #include <stdint.h> + +-__BEGIN_DECLS ++/* __BEGIN_DECLS */ ++#ifdef __cplusplus ++extern "C" { ++#endif + uint32_t arc4random(void); + void arc4random_stir(void); + void arc4random_addrandom(u_char *dat, int datlen); +@@ -73,6 +76,9 @@ long long strtonum(const char *nptr, long long minval, long long maxval, + const char **errstr); + + char *getbsize(int *headerlenp, long *blocksizep); +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif ++/* __END_DECLS */ + + #endif +diff --git a/include/bsd/string.h b/include/bsd/string.h +index ee2f953..fbf8c54 100644 +--- a/include/bsd/string.h ++++ b/include/bsd/string.h +@@ -36,13 +36,19 @@ + #include <sys/cdefs.h> + #include <sys/types.h> + +-__BEGIN_DECLS ++/* __BEGIN_DECLS */ ++#ifdef __cplusplus ++extern "C" { ++#endif + size_t strlcpy(char *dst, const char *src, size_t siz); + size_t strlcat(char *dst, const char *src, size_t siz); + char *strnstr(const char *str, const char *find, size_t str_len); + void strmode(mode_t mode, char *str); + + void explicit_bzero(void *buf, size_t len); +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif ++/* __END_DECLS */ + + #endif +diff --git a/include/bsd/stringlist.h b/include/bsd/stringlist.h +index e3c42e9..40d0a52 100644 +--- a/include/bsd/stringlist.h ++++ b/include/bsd/stringlist.h +@@ -43,12 +43,18 @@ typedef struct _stringlist { + size_t sl_cur; + } StringList; + +-__BEGIN_DECLS ++/* __BEGIN_DECLS */ ++#ifdef __cplusplus ++extern "C" { ++#endif + StringList *sl_init(void); + int sl_add(StringList *, char *); + void sl_free(StringList *, int); + char *sl_find(StringList *, const char *); + int sl_delete(StringList *, const char *, int); +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif ++/* __END_DECLS */ + + #endif /* _STRINGLIST_H */ +diff --git a/include/bsd/unistd.h b/include/bsd/unistd.h +index 1f9c5f8..5b2f4c7 100644 +--- a/include/bsd/unistd.h ++++ b/include/bsd/unistd.h +@@ -45,7 +45,10 @@ + #define S_ISTXT S_ISVTX + #endif + +-__BEGIN_DECLS ++/* __BEGIN_DECLS */ ++#ifdef __cplusplus ++extern "C" { ++#endif + extern int optreset; + + #ifdef LIBBSD_OVERLAY +@@ -68,6 +71,9 @@ void setproctitle(const char *fmt, ...) + __printflike(1, 2); + + int getpeereid(int s, uid_t *euid, gid_t *egid); +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif ++/* __END_DECLS */ + + #endif +diff --git a/include/bsd/vis.h b/include/bsd/vis.h +index 835d2d6..63c951e 100644 +--- a/include/bsd/vis.h ++++ b/include/bsd/vis.h +@@ -74,7 +74,10 @@ + + #include <sys/cdefs.h> + +-__BEGIN_DECLS ++/* __BEGIN_DECLS */ ++#ifdef __cplusplus ++extern "C" { ++#endif + char *vis(char *, int, int, int); + int strvis(char *, const char *, int); + int strvisx(char *, const char *, size_t, int); +@@ -83,6 +86,9 @@ int strunvis(char *, const char *); + int strunvisx(char *, const char *, int); + ssize_t strnunvis(char *, const char *, size_t); + int unvis(char *, int, int *, int); +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif ++/* __END_DECLS */ + + #endif /* !_VIS_H_ */ +diff --git a/include/bsd/wchar.h b/include/bsd/wchar.h +index 33a500e..aa70742 100644 +--- a/include/bsd/wchar.h ++++ b/include/bsd/wchar.h +@@ -43,12 +43,18 @@ + #include <sys/cdefs.h> + #include <sys/types.h> + +-__BEGIN_DECLS ++/* __BEGIN_DECLS */ ++#ifdef __cplusplus ++extern "C" { ++#endif + wchar_t *fgetwln(FILE *stream, size_t *len); + + size_t wcslcat(wchar_t *dst, const wchar_t *src, size_t size); + size_t wcslcpy(wchar_t *dst, const wchar_t *src, size_t size); +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif ++/* __END_DECLS */ + + #endif + #endif +diff --git a/src/hash/sha512.h b/src/hash/sha512.h +index 4f368a1..27ddc24 100644 +--- a/src/hash/sha512.h ++++ b/src/hash/sha512.h +@@ -39,7 +39,10 @@ typedef struct SHA512Context { + unsigned char buf[128]; + } SHA512_CTX; + +-__BEGIN_DECLS ++/* __BEGIN_DECLS */ ++#ifdef __cplusplus ++extern "C" { ++#endif + + void SHA512_Init(SHA512_CTX *); + void SHA512_Update(SHA512_CTX *, const void *, size_t); +@@ -48,6 +51,9 @@ char *SHA512_End(SHA512_CTX *, char *); + char *SHA512_File(const char *, char *); + char *SHA512_FileChunk(const char *, char *, off_t, off_t); + char *SHA512_Data(const void *, unsigned int, char *); +-__END_DECLS ++#ifdef __cplusplus ++} ++#endif ++/* __END_DECLS */ + + #endif /* !_SHA512_H_ */ +-- +2.10.2 +
meta/recipes-support/libbsd/libbsd/0002-Remove-funopen.patch new file +55 -0
55 lines not on this page · raw message
meta/recipes-support/libbsd/libbsd/0003-Fix-build-breaks-due-to-missing-a.out.h.patch new file +130 -0
130 lines not on this page · raw message
meta/recipes-support/libbsd/libbsd_0.8.3.bb +5 -0
@@ -36,6 +36,11 @@ SECTION = "libs" SRC_URI = " \ http://libbsd.freedesktop.org/releases/${BPN}-${PV}.tar.xz \ " +SRC_URI_append_libc-musl = " \ + file://0001-Replace-__BEGIN_DECLS-and-__END_DECLS.patch \ + file://0002-Remove-funopen.patch \ + file://0003-Fix-build-breaks-due-to-missing-a.out.h.patch \ +" SRC_URI[md5sum] = "e935c1bb6cc98a4a43cb1da22795493a" SRC_URI[sha256sum] = "934b634f4dfd865b6482650b8f522c70ae65c463529de8be907b53c89c3a34a8"
Signature · 1 line
2.10.2
PATCH 2/2 glibc-2.0: Detect pthread_getname_np() before use
Fixes build with musl
Signed-off-by Khem Raj <[email protected]>
--- ...st-for-pthread_getname_np-before-using-it.patch | 70 ++++++++++++++++++++++ meta/recipes-core/glib-2.0/glib-2.0_2.50.1.bb | 1 + 2 files changed, 71 insertions(+) create mode 100644 meta/recipes-core/glib-2.0/glib-2.0/0001-Test-for-pthread_getname_np-before-using-it.patch
meta/recipes-core/glib-2.0/glib-2.0/0001-Test-for-pthread_getname_np-before-using-it.patch new file +70 -0
@@ -0,0 +1,70 @@ +From f627fe16099a2b08d8b4e9023ae6b4f352451967 Mon Sep 17 00:00:00 2001 +From: Khem Raj <[email protected]> +Date: Sun, 6 Nov 2016 08:59:08 -0800 +Subject: [PATCH] Test for pthread_getname_np before using it + +Its a GNU extention and not all libc implement it +musl e.g. implements the setname API but not getname +in any case, it seems to be safer to check for the +function before using it. + +Signed-off-by: Khem Raj <[email protected]> +--- +Upstream-Status: Submitted + + config.h.in | 3 +++ + configure.ac | 10 ++++++++++ + glib/tests/thread.c | 2 +- + 3 files changed, 14 insertions(+), 1 deletion(-) + +diff --git a/config.h.in b/config.h.in +index 2c35ff1..da7ac30 100644 +--- a/config.h.in ++++ b/config.h.in +@@ -326,6 +326,9 @@ + #undef HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE_NP + + /* Have function pthread_setname_np(const char*) */ ++#undef HAVE_PTHREAD_GETNAME_NP ++ ++/* Have function pthread_setname_np(const char*) */ + #undef HAVE_PTHREAD_SETNAME_NP_WITHOUT_TID + + /* Have function pthread_setname_np(pthread_t, const char*) */ +diff --git a/configure.ac b/configure.ac +index 4309671..209770a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -2121,6 +2121,16 @@ AS_IF([ test x"$have_threads" = xposix], [ + AC_DEFINE(HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE_NP,1, + [Have function pthread_cond_timedwait_relative_np])], + [AC_MSG_RESULT(no)]) ++ dnl gets thread names ++ AC_MSG_CHECKING(for pthread_getname_np(pthread_t, char*, size_t)) ++ AC_LINK_IFELSE( ++ [AC_LANG_PROGRAM( ++ [#include <pthread.h>], ++ [pthread_getname_np(pthread_self(),"example",0)])], ++ [AC_MSG_RESULT(yes) ++ AC_DEFINE(HAVE_PTHREAD_GETNAME_NP,1, ++ [Have function pthread_setname_np(const char*)])], ++ [AC_MSG_RESULT(no)]) + dnl Sets thread names on OS X 10.6, iOS 3.2 (and higher) + AC_MSG_CHECKING(for pthread_setname_np(const char*)) + AC_LINK_IFELSE( +diff --git a/glib/tests/thread.c b/glib/tests/thread.c +index 5447836..2f248a6 100644 +--- a/glib/tests/thread.c ++++ b/glib/tests/thread.c +@@ -174,7 +174,7 @@ test_thread5 (void) + static gpointer + thread6_func (gpointer data) + { +-#ifdef HAVE_PTHREAD_SETNAME_NP_WITH_TID ++#if defined(HAVE_PTHREAD_SETNAME_NP_WITH_TID) && defined(HAVE_PTHREAD_GETNAME_NP) + char name[16]; + + pthread_getname_np (pthread_self(), name, 16); +-- +2.10.2 +
meta/recipes-core/glib-2.0/glib-2.0_2.50.1.bb +1 -0
@@ -16,6 +16,7 @@ SRC_URI = "${GNOME_MIRROR}/glib/${SHRT_VER}/glib-${PV}.tar.xz \ file://gi-exclude.patch \ file://0001-Install-gio-querymodules-as-libexec_PROGRAM.patch \ file://0001-Do-not-ignore-return-value-of-write.patch \ + file://0001-Test-for-pthread_getname_np-before-using-it.patch \ " SRC_URI_append_class-native = " file://glib-gettextize-dir.patch \
Signature · 1 line
2.10.2