linux-gpio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [libgpiod,v4 0/2] tools: fix compile issues when GNU extensions are not present
@ 2023-03-06 18:45 Benjamin Li
  2023-03-06 18:45 ` [libgpiod,v4 1/2] tools: remove dependency on glibc program_invocation_[short_]name Benjamin Li
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Benjamin Li @ 2023-03-06 18:45 UTC (permalink / raw)
  To: linux-gpio, Bartosz Golaszewski; +Cc: Benjamin Li

v4:
- Keep semantics consistent with before: help messages should return the full
  name, not the short name. (Bart)

v3:
- Collapse --version print into a single line. (Andy)
- Handle program name fully independently rather than rely on any extensions
  at all. (Bart)
- Move Android.bp into contrib/ folder. (Bart)
- Add SPDX license tag and clean up Android.bp patch comments in the context
  of it possibly being accepted into the upstream tree.

v2:
- Add missing Signed-off-by: tags.

v1:
Fix issue when building against a C library without GNU extensions, such
as Android's Bionic libc.

A commit with a sample Android.bp file that's working against Android 11 is
included for informational purposes, which I don't expect Bartosz to pull.

Benjamin Li (2):
  tools: remove dependency on glibc program_invocation_[short_]name
  contrib: add sample Android.bp to build within an Android tree

 contrib/Android.bp   | 136 +++++++++++++++++++++++++++++++++++++++++++
 tools/gpiodetect.c   |   5 +-
 tools/gpioget.c      |   5 +-
 tools/gpioinfo.c     |   5 +-
 tools/gpiomon.c      |   5 +-
 tools/gpionotify.c   |   5 +-
 tools/gpioset.c      |   5 +-
 tools/tools-common.c |  34 ++++++++---
 tools/tools-common.h |   4 +-
 9 files changed, 183 insertions(+), 21 deletions(-)
 create mode 100644 contrib/Android.bp

-- 
2.25.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [libgpiod,v4 1/2] tools: remove dependency on glibc program_invocation_[short_]name
  2023-03-06 18:45 [libgpiod,v4 0/2] tools: fix compile issues when GNU extensions are not present Benjamin Li
@ 2023-03-06 18:45 ` Benjamin Li
  2023-03-06 18:45 ` [libgpiod,v4 2/2] contrib: add sample Android.bp to build within an Android tree Benjamin Li
  2023-03-12 13:39 ` [libgpiod,v4 0/2] tools: fix compile issues when GNU extensions are not present Bartosz Golaszewski
  2 siblings, 0 replies; 5+ messages in thread
From: Benjamin Li @ 2023-03-06 18:45 UTC (permalink / raw)
  To: linux-gpio, Bartosz Golaszewski; +Cc: Benjamin Li

Platforms like Bionic libc don't have program_invocation_[short_]name,
which is a GNU extension. It does have getprogname(), a BSD extension,
but rather than supporting multiple extensions let's just introduce
our own local helpers.

We derive the short name ourselves rather than calling basename(),
as the POSIX version takes char *, not const char *, and is thus
not guaranteed to avoid modifying its input. (The GNU version does
take const char * but we are avoiding extensions here.)

Signed-off-by: Benjamin Li <benl@squareup.com>
---
 tools/gpiodetect.c   |  5 +++--
 tools/gpioget.c      |  5 +++--
 tools/gpioinfo.c     |  5 +++--
 tools/gpiomon.c      |  5 +++--
 tools/gpionotify.c   |  5 +++--
 tools/gpioset.c      |  5 +++--
 tools/tools-common.c | 34 ++++++++++++++++++++++++++--------
 tools/tools-common.h |  4 +++-
 8 files changed, 47 insertions(+), 21 deletions(-)

diff --git a/tools/gpiodetect.c b/tools/gpiodetect.c
index f0211da..0a3461b 100644
--- a/tools/gpiodetect.c
+++ b/tools/gpiodetect.c
@@ -12,7 +12,7 @@
 
 static void print_help(void)
 {
-	printf("Usage: %s [OPTIONS] [chip]...\n", get_progname());
+	printf("Usage: %s [OPTIONS] [chip]...\n", get_prog_name());
 	printf("\n");
 	printf("List GPIO chips, print their labels and number of GPIO lines.\n");
 	printf("\n");
@@ -51,7 +51,7 @@ static int parse_config(int argc, char **argv)
 			print_version();
 			exit(EXIT_SUCCESS);
 		case '?':
-			die("try %s --help", get_progname());
+			die("try %s --help", get_prog_name());
 		default:
 			abort();
 		}
@@ -89,6 +89,7 @@ int main(int argc, char **argv)
 	int num_chips, i, ret = EXIT_SUCCESS;
 	char **paths, *path;
 
+	set_prog_name(argv[0]);
 	i = parse_config(argc, argv);
 	argc -= i;
 	argv += i;
diff --git a/tools/gpioget.c b/tools/gpioget.c
index 08c17e6..f611737 100644
--- a/tools/gpioget.c
+++ b/tools/gpioget.c
@@ -26,7 +26,7 @@ struct config {
 
 static void print_help(void)
 {
-	printf("Usage: %s [OPTIONS] <line>...\n", get_progname());
+	printf("Usage: %s [OPTIONS] <line>...\n", get_prog_name());
 	printf("\n");
 	printf("Read values of GPIO lines.\n");
 	printf("\n");
@@ -120,7 +120,7 @@ static int parse_config(int argc, char **argv, struct config *cfg)
 			print_version();
 			exit(EXIT_SUCCESS);
 		case '?':
-			die("try %s --help", get_progname());
+			die("try %s --help", get_prog_name());
 		case 0:
 			break;
 		default:
@@ -146,6 +146,7 @@ int main(int argc, char **argv)
 	struct config cfg;
 	const char *fmt;
 
+	set_prog_name(argv[0]);
 	i = parse_config(argc, argv, &cfg);
 	argc -= i;
 	argv += i;
diff --git a/tools/gpioinfo.c b/tools/gpioinfo.c
index 1ec7f63..44d1c8c 100644
--- a/tools/gpioinfo.c
+++ b/tools/gpioinfo.c
@@ -20,7 +20,7 @@ struct config {
 
 static void print_help(void)
 {
-	printf("Usage: %s [OPTIONS] [line]...\n", get_progname());
+	printf("Usage: %s [OPTIONS] [line]...\n", get_prog_name());
 	printf("\n");
 	printf("Print information about GPIO lines.\n");
 	printf("\n");
@@ -83,7 +83,7 @@ static int parse_config(int argc, char **argv, struct config *cfg)
 			print_version();
 			exit(EXIT_SUCCESS);
 		case '?':
-			die("try %s --help", get_progname());
+			die("try %s --help", get_prog_name());
 		case 0:
 			break;
 		default:
@@ -228,6 +228,7 @@ int main(int argc, char **argv)
 	struct config cfg;
 	char **paths;
 
+	set_prog_name(argv[0]);
 	i = parse_config(argc, argv, &cfg);
 	argc -= i;
 	argv += i;
diff --git a/tools/gpiomon.c b/tools/gpiomon.c
index 93ff463..ec177df 100644
--- a/tools/gpiomon.c
+++ b/tools/gpiomon.c
@@ -34,7 +34,7 @@ struct config {
 
 static void print_help(void)
 {
-	printf("Usage: %s [OPTIONS] <line>...\n", get_progname());
+	printf("Usage: %s [OPTIONS] <line>...\n", get_prog_name());
 	printf("\n");
 	printf("Wait for events on GPIO lines and print them to standard output.\n");
 	printf("\n");
@@ -195,7 +195,7 @@ static int parse_config(int argc, char **argv, struct config *cfg)
 			print_version();
 			exit(EXIT_SUCCESS);
 		case '?':
-			die("try %s --help", get_progname());
+			die("try %s --help", get_prog_name());
 		case 0:
 			break;
 		default:
@@ -360,6 +360,7 @@ int main(int argc, char **argv)
 	struct config cfg;
 	int ret, i, j;
 
+	set_prog_name(argv[0]);
 	i = parse_config(argc, argv, &cfg);
 	argc -= i;
 	argv += i;
diff --git a/tools/gpionotify.c b/tools/gpionotify.c
index a0976f7..990ca04 100644
--- a/tools/gpionotify.c
+++ b/tools/gpionotify.c
@@ -27,7 +27,7 @@ struct config {
 
 static void print_help(void)
 {
-	printf("Usage: %s [OPTIONS] <line>...\n", get_progname());
+	printf("Usage: %s [OPTIONS] <line>...\n", get_prog_name());
 	printf("\n");
 	printf("Wait for changes to info on GPIO lines and print them to standard output.\n");
 	printf("\n");
@@ -144,7 +144,7 @@ static int parse_config(int argc, char **argv, struct config *cfg)
 			print_version();
 			exit(EXIT_SUCCESS);
 		case '?':
-			die("try %s --help", get_progname());
+			die("try %s --help", get_prog_name());
 		case 0:
 			break;
 		default:
@@ -370,6 +370,7 @@ int main(int argc, char **argv)
 	struct pollfd *pollfds;
 	struct config cfg;
 
+	set_prog_name(argv[0]);
 	i = parse_config(argc, argv, &cfg);
 	argc -= optind;
 	argv += optind;
diff --git a/tools/gpioset.c b/tools/gpioset.c
index a7084a3..9dc5aeb 100644
--- a/tools/gpioset.c
+++ b/tools/gpioset.c
@@ -36,7 +36,7 @@ struct config {
 
 static void print_help(void)
 {
-	printf("Usage: %s [OPTIONS] <line=value>...\n", get_progname());
+	printf("Usage: %s [OPTIONS] <line=value>...\n", get_prog_name());
 	printf("\n");
 	printf("Set values of GPIO lines.\n");
 	printf("\n");
@@ -212,7 +212,7 @@ static int parse_config(int argc, char **argv, struct config *cfg)
 			print_version();
 			exit(EXIT_SUCCESS);
 		case '?':
-			die("try %s --help", get_progname());
+			die("try %s --help", get_prog_name());
 		case 0:
 			break;
 		default:
@@ -876,6 +876,7 @@ int main(int argc, char **argv)
 	struct config cfg;
 	char **lines;
 
+	set_prog_name(argv[0]);
 	i = parse_config(argc, argv, &cfg);
 	argc -= i;
 	argv += i;
diff --git a/tools/tools-common.c b/tools/tools-common.c
index a0080fc..e5f6fc1 100644
--- a/tools/tools-common.c
+++ b/tools/tools-common.c
@@ -19,9 +19,28 @@
 
 #include "tools-common.h"
 
-const char *get_progname(void)
+static const char *prog_name = NULL;
+static const char *prog_short_name = NULL;
+
+void set_prog_name(const char *name)
+{
+	prog_name = name;
+	prog_short_name = name;
+	while (*name) {
+		if (*name++ == '/') {
+			prog_short_name = name;
+		}
+	}
+}
+
+const char *get_prog_name(void)
+{
+	return prog_name;
+}
+
+const char *get_prog_short_name(void)
 {
-	return program_invocation_name;
+	return prog_short_name;
 }
 
 void print_error(const char *fmt, ...)
@@ -29,7 +48,7 @@ void print_error(const char *fmt, ...)
 	va_list va;
 
 	va_start(va, fmt);
-	fprintf(stderr, "%s: ", program_invocation_name);
+	fprintf(stderr, "%s: ", get_prog_name());
 	vfprintf(stderr, fmt, va);
 	fprintf(stderr, "\n");
 	va_end(va);
@@ -40,7 +59,7 @@ void print_perror(const char *fmt, ...)
 	va_list va;
 
 	va_start(va, fmt);
-	fprintf(stderr, "%s: ", program_invocation_name);
+	fprintf(stderr, "%s: ", get_prog_name());
 	vfprintf(stderr, fmt, va);
 	fprintf(stderr, ": %s\n", strerror(errno));
 	va_end(va);
@@ -51,7 +70,7 @@ void die(const char *fmt, ...)
 	va_list va;
 
 	va_start(va, fmt);
-	fprintf(stderr, "%s: ", program_invocation_name);
+	fprintf(stderr, "%s: ", get_prog_name());
 	vfprintf(stderr, fmt, va);
 	fprintf(stderr, "\n");
 	va_end(va);
@@ -64,7 +83,7 @@ void die_perror(const char *fmt, ...)
 	va_list va;
 
 	va_start(va, fmt);
-	fprintf(stderr, "%s: ", program_invocation_name);
+	fprintf(stderr, "%s: ", get_prog_name());
 	vfprintf(stderr, fmt, va);
 	fprintf(stderr, ": %s\n", strerror(errno));
 	va_end(va);
@@ -74,8 +93,7 @@ void die_perror(const char *fmt, ...)
 
 void print_version(void)
 {
-	printf("%s (libgpiod) v%s\n",
-	       program_invocation_short_name, gpiod_api_version());
+	printf("%s (libgpiod) v%s\n", get_prog_short_name(), gpiod_api_version());
 	printf("Copyright (C) 2017-2023 Bartosz Golaszewski\n");
 	printf("License: GPL-2.0-or-later\n");
 	printf("This is free software: you are free to change and redistribute it.\n");
diff --git a/tools/tools-common.h b/tools/tools-common.h
index 434e5ba..c82317a 100644
--- a/tools/tools-common.h
+++ b/tools/tools-common.h
@@ -78,7 +78,9 @@ struct line_resolver {
 	struct resolved_line lines[];
 };
 
-const char *get_progname(void);
+void set_prog_name(const char *name);
+const char *get_prog_name(void);
+const char *get_prog_short_name(void);
 void print_error(const char *fmt, ...) PRINTF(1, 2);
 void print_perror(const char *fmt, ...) PRINTF(1, 2);
 void die(const char *fmt, ...) NORETURN PRINTF(1, 2);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [libgpiod,v4 2/2] contrib: add sample Android.bp to build within an Android tree
  2023-03-06 18:45 [libgpiod,v4 0/2] tools: fix compile issues when GNU extensions are not present Benjamin Li
  2023-03-06 18:45 ` [libgpiod,v4 1/2] tools: remove dependency on glibc program_invocation_[short_]name Benjamin Li
@ 2023-03-06 18:45 ` Benjamin Li
  2023-03-12 13:39 ` [libgpiod,v4 0/2] tools: fix compile issues when GNU extensions are not present Bartosz Golaszewski
  2 siblings, 0 replies; 5+ messages in thread
From: Benjamin Li @ 2023-03-06 18:45 UTC (permalink / raw)
  To: linux-gpio, Bartosz Golaszewski; +Cc: Benjamin Li

Add an Android.bp file for Soong, the Android build system, to build
the library including C++ bindings along with all the CLI tools.

This reference Android build file will live in a contrib/ folder to
indiciate it is a less-maintained part of libgpiod. It will need to
be moved to the root directory in order to use it, though, as Soong
doesn't let Blueprint files reference sources in a parent directory.

  error: external/libgpiod/contrib/Android.bp:5:1: module "libgpiod" variant "...": Path is outside directory: ../include
  error: external/libgpiod/contrib/Android.bp:5:1: module "libgpiod" variant "...": Path is outside directory: ../bindings/cxx
  error: external/libgpiod/contrib/Android.bp:5:1: module "libgpiod" variant "...": Path is outside directory: ../lib/*.c
  error: external/libgpiod/contrib/Android.bp:5:1: module "libgpiod" variant "...": Path is outside directory: ../bindings/cxx/*.cpp

Signed-off-by: Benjamin Li <benl@squareup.com>
---
 contrib/Android.bp | 136 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 136 insertions(+)
 create mode 100644 contrib/Android.bp

diff --git a/contrib/Android.bp b/contrib/Android.bp
new file mode 100644
index 0000000..fbc2196
--- /dev/null
+++ b/contrib/Android.bp
@@ -0,0 +1,136 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+// SPDX-FileCopyrightText: 2023 Benjamin Li <benl@squareup.com>
+
+// Instructions:
+// - Check out this repository as external/libgpiod.
+// - Move this build file to the project's root directory.
+
+//
+// libgpiod main library
+//
+
+cc_library {
+    name: "libgpiod",
+    defaults: [
+        "libgpiod_defaults",
+    ],
+    srcs: [
+        "lib/*.c",
+        "bindings/cxx/*.cpp",
+    ],
+    export_include_dirs: [
+        "include",
+        "bindings/cxx",
+    ],
+}
+
+cc_defaults {
+    name: "libgpiod_defaults",
+    device_specific: true,
+    cpp_std: "gnu++17",
+    cflags: [
+        // You may want to edit this with the version from configure.ac of
+        // the release you are using.
+        "-DGPIOD_VERSION_STR=\"unstable\"",
+    ],
+    cppflags: [
+        // Google C++ style is to not use exceptions, but this library does
+        // use them.
+        "-fexceptions",
+    ],
+    // Google C++ style is to not use runtime type information, but this
+    // library does use it.
+    rtti: true,
+}
+
+//
+// libgpiod tools
+//
+
+phony {
+    name: "libgpiod_tools",
+    required: [
+        "gpiodetect",
+        "gpioget",
+        "gpioinfo",
+        "gpiomon",
+        "gpionotify",
+        "gpioset",
+    ],
+}
+
+cc_binary {
+    name: "gpiodetect",
+    defaults: [
+        "libgpiod_defaults",
+        "libgpiod_tools_defaults",
+    ],
+    srcs: [
+        "tools/gpiodetect.c",
+    ],
+}
+
+cc_binary {
+    name: "gpioget",
+    defaults: [
+        "libgpiod_defaults",
+        "libgpiod_tools_defaults",
+    ],
+    srcs: [
+        "tools/gpioget.c",
+    ],
+}
+
+cc_binary {
+    name: "gpioinfo",
+    defaults: [
+        "libgpiod_defaults",
+        "libgpiod_tools_defaults",
+    ],
+    srcs: [
+        "tools/gpioinfo.c",
+    ],
+}
+
+cc_binary {
+    name: "gpiomon",
+    defaults: [
+        "libgpiod_defaults",
+        "libgpiod_tools_defaults",
+    ],
+    srcs: [
+        "tools/gpiomon.c",
+    ],
+}
+
+cc_binary {
+    name: "gpionotify",
+    defaults: [
+        "libgpiod_defaults",
+        "libgpiod_tools_defaults",
+    ],
+    srcs: [
+        "tools/gpionotify.c",
+    ],
+}
+
+cc_binary {
+    name: "gpioset",
+    defaults: [
+        "libgpiod_defaults",
+        "libgpiod_tools_defaults",
+    ],
+    srcs: [
+        "tools/gpioset.c",
+    ],
+}
+
+cc_defaults {
+    name: "libgpiod_tools_defaults",
+    srcs: [
+        "tools/tools-common.c",
+    ],
+    shared_libs: [
+        "libgpiod",
+    ],
+}
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [libgpiod,v4 0/2] tools: fix compile issues when GNU extensions are not present
  2023-03-06 18:45 [libgpiod,v4 0/2] tools: fix compile issues when GNU extensions are not present Benjamin Li
  2023-03-06 18:45 ` [libgpiod,v4 1/2] tools: remove dependency on glibc program_invocation_[short_]name Benjamin Li
  2023-03-06 18:45 ` [libgpiod,v4 2/2] contrib: add sample Android.bp to build within an Android tree Benjamin Li
@ 2023-03-12 13:39 ` Bartosz Golaszewski
  2023-03-13 17:38   ` Benjamin Li
  2 siblings, 1 reply; 5+ messages in thread
From: Bartosz Golaszewski @ 2023-03-12 13:39 UTC (permalink / raw)
  To: Benjamin Li; +Cc: linux-gpio, Bartosz Golaszewski

On Mon, Mar 6, 2023 at 7:46 PM Benjamin Li <benl@squareup.com> wrote:
>
> v4:
> - Keep semantics consistent with before: help messages should return the full
>   name, not the short name. (Bart)
>
> v3:
> - Collapse --version print into a single line. (Andy)
> - Handle program name fully independently rather than rely on any extensions
>   at all. (Bart)
> - Move Android.bp into contrib/ folder. (Bart)
> - Add SPDX license tag and clean up Android.bp patch comments in the context
>   of it possibly being accepted into the upstream tree.
>
> v2:
> - Add missing Signed-off-by: tags.
>
> v1:
> Fix issue when building against a C library without GNU extensions, such
> as Android's Bionic libc.
>
> A commit with a sample Android.bp file that's working against Android 11 is
> included for informational purposes, which I don't expect Bartosz to pull.
>
> Benjamin Li (2):
>   tools: remove dependency on glibc program_invocation_[short_]name
>   contrib: add sample Android.bp to build within an Android tree
>
>  contrib/Android.bp   | 136 +++++++++++++++++++++++++++++++++++++++++++
>  tools/gpiodetect.c   |   5 +-
>  tools/gpioget.c      |   5 +-
>  tools/gpioinfo.c     |   5 +-
>  tools/gpiomon.c      |   5 +-
>  tools/gpionotify.c   |   5 +-
>  tools/gpioset.c      |   5 +-
>  tools/tools-common.c |  34 ++++++++---
>  tools/tools-common.h |   4 +-
>  9 files changed, 183 insertions(+), 21 deletions(-)
>  create mode 100644 contrib/Android.bp
>
> --
> 2.25.1
>

Thanks, I applied both patches. For the second one: I extended it so
that the android build file ends up in release tarballs generated by
'make dist'.

Bartosz

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [libgpiod,v4 0/2] tools: fix compile issues when GNU extensions are not present
  2023-03-12 13:39 ` [libgpiod,v4 0/2] tools: fix compile issues when GNU extensions are not present Bartosz Golaszewski
@ 2023-03-13 17:38   ` Benjamin Li
  0 siblings, 0 replies; 5+ messages in thread
From: Benjamin Li @ 2023-03-13 17:38 UTC (permalink / raw)
  To: Bartosz Golaszewski; +Cc: linux-gpio, Bartosz Golaszewski

On 3/12/23 6:39 AM, Bartosz Golaszewski wrote:
> On Mon, Mar 6, 2023 at 7:46 PM Benjamin Li <benl@squareup.com> wrote:
>>
>> v4:
>> - Keep semantics consistent with before: help messages should return the full
>>   name, not the short name. (Bart)
>>
>> v3:
>> - Collapse --version print into a single line. (Andy)
>> - Handle program name fully independently rather than rely on any extensions
>>   at all. (Bart)
>> - Move Android.bp into contrib/ folder. (Bart)
>> - Add SPDX license tag and clean up Android.bp patch comments in the context
>>   of it possibly being accepted into the upstream tree.
>>
>> v2:
>> - Add missing Signed-off-by: tags.
>>
>> v1:
>> Fix issue when building against a C library without GNU extensions, such
>> as Android's Bionic libc.
>>
>> A commit with a sample Android.bp file that's working against Android 11 is
>> included for informational purposes, which I don't expect Bartosz to pull.
>>
>> Benjamin Li (2):
>>   tools: remove dependency on glibc program_invocation_[short_]name
>>   contrib: add sample Android.bp to build within an Android tree
>>
>>  contrib/Android.bp   | 136 +++++++++++++++++++++++++++++++++++++++++++
>>  tools/gpiodetect.c   |   5 +-
>>  tools/gpioget.c      |   5 +-
>>  tools/gpioinfo.c     |   5 +-
>>  tools/gpiomon.c      |   5 +-
>>  tools/gpionotify.c   |   5 +-
>>  tools/gpioset.c      |   5 +-
>>  tools/tools-common.c |  34 ++++++++---
>>  tools/tools-common.h |   4 +-
>>  9 files changed, 183 insertions(+), 21 deletions(-)
>>  create mode 100644 contrib/Android.bp
>>
>> --
>> 2.25.1
>>
> 
> Thanks, I applied both patches. For the second one: I extended it so
> that the android build file ends up in release tarballs generated by
> 'make dist'.
> 
> Bartosz

Nice, thank you Bart!

Ben

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-03-13 17:38 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-06 18:45 [libgpiod,v4 0/2] tools: fix compile issues when GNU extensions are not present Benjamin Li
2023-03-06 18:45 ` [libgpiod,v4 1/2] tools: remove dependency on glibc program_invocation_[short_]name Benjamin Li
2023-03-06 18:45 ` [libgpiod,v4 2/2] contrib: add sample Android.bp to build within an Android tree Benjamin Li
2023-03-12 13:39 ` [libgpiod,v4 0/2] tools: fix compile issues when GNU extensions are not present Bartosz Golaszewski
2023-03-13 17:38   ` Benjamin Li

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).