argp-standalone: Add recipe

This helps packages like gnutls to compile with musl
any package that needs glibc's implementation of argp
can link to this library

(From OE-Core rev: d2bb8bb1406ef1ca53539912a463bd518211110a)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Khem Raj 2015-12-17 08:51:39 +00:00 committed by Richard Purdie
parent a7d780c1bc
commit 1a6fe71e7e
3 changed files with 163 additions and 0 deletions

View File

@ -0,0 +1,28 @@
# Copyright (C) 2015 Khem Raj <raj.khem@gmail.com>
# Released under the MIT license (see COPYING.MIT for the terms)
DESCRIPTION = "Glibc hierarchical argument parsing standalone library"
HOMEPAGE = "http://www.lysator.liu.se/~nisse/misc/"
LICENSE = "LGPL-2.1"
LIC_FILES_CHKSUM = "file://argp.h;beginline=1;endline=20;md5=008b7e53dea6f9e1d9fdef0d9cf3184a"
SECTION = "libs"
SRC_URI = "http://www.lysator.liu.se/~nisse/misc/argp-standalone-${PV}.tar.gz \
file://0001-throw-in-funcdef.patch \
file://0002-isprint.patch \
"
SRC_URI[md5sum] = "720704bac078d067111b32444e24ba69"
SRC_URI[sha256sum] = "dec79694da1319acd2238ce95df57f3680fea2482096e483323fddf3d818d8be"
inherit autotools
CFLAGS += "-fPIC -U__OPTIMIZE__"
do_install() {
install -D -m 0644 ${B}/libargp.a ${D}${libdir}/libargp.a
install -D -m 0644 ${S}/argp.h ${D}${includedir}/argp.h
}
#
# We will skip parsing for non-musl systems
#
COMPATIBLE_HOST = ".*-musl.*"

View File

@ -0,0 +1,84 @@
# --- T2-COPYRIGHT-NOTE-BEGIN ---
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
#
# T2 SDE: package/.../rng-tools/throw-in-funcdef.patch.argp-standalone
# Copyright (C) 2006 The T2 SDE Project
#
# More information can be found in the files COPYING and README.
#
# This patch file is dual-licensed. It is available under the license the
# patched project is licensed under, as long as it is an OpenSource license
# as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms
# of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
# --- T2-COPYRIGHT-NOTE-END ---
No __THROW in function implementation.
--jsaw
Taken from buildroot
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
--- argp-standalone-1.4-test2/argp.h.orig 2006-01-06 02:29:59.000000000 +0100
+++ argp-standalone-1.4-test2/argp.h 2006-01-06 02:41:10.000000000 +0100
@@ -560,17 +560,17 @@
# endif
# ifndef ARGP_EI
-# define ARGP_EI extern __inline__
+# define ARGP_EI extern inline
# endif
ARGP_EI void
-__argp_usage (__const struct argp_state *__state) __THROW
+__argp_usage (__const struct argp_state *__state)
{
__argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
}
ARGP_EI int
-__option_is_short (__const struct argp_option *__opt) __THROW
+__option_is_short (__const struct argp_option *__opt)
{
if (__opt->flags & OPTION_DOC)
return 0;
@@ -582,7 +582,7 @@
}
ARGP_EI int
-__option_is_end (__const struct argp_option *__opt) __THROW
+__option_is_end (__const struct argp_option *__opt)
{
return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;
}
--- argp-standalone-1.4-test2/argp-parse.c.orig 2006-01-06 02:47:48.000000000 +0100
+++ argp-standalone-1.4-test2/argp-parse.c 2006-01-06 02:48:16.000000000 +0100
@@ -1290,13 +1290,13 @@
/* Defined here, in case a user is not inlining the definitions in
* argp.h */
void
-__argp_usage (__const struct argp_state *__state) __THROW
+__argp_usage (__const struct argp_state *__state)
{
__argp_state_help (__state, stderr, ARGP_HELP_STD_USAGE);
}
int
-__option_is_short (__const struct argp_option *__opt) __THROW
+__option_is_short (__const struct argp_option *__opt)
{
if (__opt->flags & OPTION_DOC)
return 0;
@@ -1310,7 +1310,7 @@
}
int
-__option_is_end (__const struct argp_option *__opt) __THROW
+__option_is_end (__const struct argp_option *__opt)
{
return !__opt->key && !__opt->name && !__opt->doc && !__opt->group;
}

View File

@ -0,0 +1,51 @@
Subject: restrict value range passed to isprint function
According to C standards isprint argument shall be representable as an
unsigned char or be equal to EOF, otherwise the behaviour is undefined.
Passing arbitrary ints leads to segfault in nm program from elfutils.
Restrict isprint argument range to values representable by unsigned char.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Taken from buildroot
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Index: b/argp.h
===================================================================
--- a/argp.h
+++ b/argp.h
@@ -23,6 +23,7 @@
#include <stdio.h>
#include <ctype.h>
+#include <limits.h>
#define __need_error_t
#include <errno.h>
@@ -577,7 +578,7 @@
else
{
int __key = __opt->key;
- return __key > 0 && isprint (__key);
+ return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
}
}
Index: b/argp-parse.c
===================================================================
--- a/argp-parse.c
+++ b/argp-parse.c
@@ -1292,7 +1292,7 @@
int __key = __opt->key;
/* FIXME: whether or not a particular key implies a short option
* ought not to be locale dependent. */
- return __key > 0 && isprint (__key);
+ return __key > 0 && __key <= UCHAR_MAX && isprint (__key);
}
}