mirror of
https://gitlab.com/buildroot.org/buildroot.git
synced 2026-08-08 00:20:38 -09:00
package/tini: fix build w/ musl
When building tini with musl libc, the following error occurs dur to
missing declaration of 'basename':
```
/home/buildroot/instance-0/output-1/build/tini-0.19.0/src/tini.c: In function 'print_usage':
/home/buildroot/instance-0/output-1/build/tini-0.19.0/src/tini.c:227:36: error: implicit declaration of function 'basename' [-Wimplicit-function-declaration]
227 | fprintf(file, "%s (%s)\n", basename(name), TINI_VERSION_STRING);
| ^~~~~~~~
make: *** [package/pkg-generic.mk:273: /home/buildroot/instance-0/output-1/build/tini-0.19.0/.stamp_built] Error 1
make: Leaving directory '/home/buildroot/instance-0/buildroot'
```
This error can be reproduced with:
```
cat >.config <<EOF
BR2_aarch64=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_AARCH64_MUSL_BLEEDING_EDGE=y
BR2_PACKAGE_TINI=y
EOF
make olddefconfig
make tini
```
This patch adds the upstream commit [1], that fixes this issue by
including `libgen.h`.
[1] 924c4bd602
Fixes: https://autobuild.buildroot.org/results/f0d/f0d10cd25f3b0e2a4af7266f7417b339ea5d242a
Signed-off-by: Thomas Perale <thomas.perale@mind.be>
Signed-off-by: Romain Naour <romain.naour@smile.fr>
(cherry picked from commit 064f7592d3)
Signed-off-by: Thomas Perale <thomas.perale@mind.be>
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
From 924c4bd6028457188942ecbfdc75e6a343fa9395 Mon Sep 17 00:00:00 2001
|
||||
From: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
Date: Sun, 14 Apr 2024 15:33:51 +0200
|
||||
Subject: [PATCH] Support POSIX basename() from musl libc
|
||||
|
||||
Musl libc 1.2.5 removed the definition of the basename() function from
|
||||
string.h and only provides it in libgen.h as the POSIX standard
|
||||
defines it.
|
||||
|
||||
This change fixes compilation with musl libc 1.2.5.
|
||||
````
|
||||
build_dir/target-mips_24kc_musl/tini-0.19.0/src/tini.c:227:36: error: implicit declaration of function 'basename' [-Wimplicit-function-declaration]
|
||||
227 | fprintf(file, "%s (%s)\n", basename(name), TINI_VERSION_STRING);
|
||||
build_dir/target-mips_24kc_musl/tini-0.19.0/src/tini.c:227:25: error: format '%s' expects argument of type 'char *', but argument 3 has type 'int' [-Werror=format=]
|
||||
227 | fprintf(file, "%s (%s)\n", basename(name), TINI_VERSION_STRING);
|
||||
| ~^ ~~~~~~~~~~~~~~
|
||||
| | |
|
||||
| char * int
|
||||
| %d
|
||||
|
||||
````
|
||||
|
||||
basename() modifies the input string, copy it first with strdup(), If
|
||||
strdup() returns NULL the code will handle it.
|
||||
|
||||
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
|
||||
Upstream: https://github.com/krallin/tini/commit/924c4bd6028457188942ecbfdc75e6a343fa9395
|
||||
Signed-off-by: Thomas Perale <thomas.perale@mind.be>
|
||||
---
|
||||
src/tini.c | 15 +++++++++++----
|
||||
1 file changed, 11 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/tini.c b/src/tini.c
|
||||
index 7914d3a..41d1506 100644
|
||||
--- a/src/tini.c
|
||||
+++ b/src/tini.c
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <stdbool.h>
|
||||
+#include <libgen.h>
|
||||
|
||||
#include "tiniConfig.h"
|
||||
#include "tiniLicense.h"
|
||||
@@ -224,14 +225,19 @@ int spawn(const signal_configuration_t* const sigconf_ptr, char* const argv[], i
|
||||
}
|
||||
|
||||
void print_usage(char* const name, FILE* const file) {
|
||||
- fprintf(file, "%s (%s)\n", basename(name), TINI_VERSION_STRING);
|
||||
+ char *dirc, *bname;
|
||||
+
|
||||
+ dirc = strdup(name);
|
||||
+ bname = basename(dirc);
|
||||
+
|
||||
+ fprintf(file, "%s (%s)\n", bname, TINI_VERSION_STRING);
|
||||
|
||||
#if TINI_MINIMAL
|
||||
- fprintf(file, "Usage: %s PROGRAM [ARGS] | --version\n\n", basename(name));
|
||||
+ fprintf(file, "Usage: %s PROGRAM [ARGS] | --version\n\n", bname);
|
||||
#else
|
||||
- fprintf(file, "Usage: %s [OPTIONS] PROGRAM -- [ARGS] | --version\n\n", basename(name));
|
||||
+ fprintf(file, "Usage: %s [OPTIONS] PROGRAM -- [ARGS] | --version\n\n", bname);
|
||||
#endif
|
||||
- fprintf(file, "Execute a program under the supervision of a valid init process (%s)\n\n", basename(name));
|
||||
+ fprintf(file, "Execute a program under the supervision of a valid init process (%s)\n\n", bname);
|
||||
|
||||
fprintf(file, "Command line options:\n\n");
|
||||
|
||||
@@ -261,6 +267,7 @@ void print_usage(char* const name, FILE* const file) {
|
||||
fprintf(file, " %s: Send signals to the child's process group.\n", KILL_PROCESS_GROUP_GROUP_ENV_VAR);
|
||||
|
||||
fprintf(file, "\n");
|
||||
+ free(dirc);
|
||||
}
|
||||
|
||||
void print_license(FILE* const file) {
|
||||
Reference in New Issue
Block a user