commit:     8ae581f317277614e761ff7659de8ba16abb2bab
Author:     Alfred Persson Forsberg <cat <AT> catcream <DOT> org>
AuthorDate: Thu Jul  7 17:36:44 2022 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Jul 15 01:17:05 2022 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8ae581f3

sys-apps/plocate: Fix build for musl

Read each patch for explaination, both are now upstreamed!
Should be in 1.1.17 (or whatever next release will be called).

Closes: https://bugs.gentoo.org/show_bug.cgi?id=829580
Closes: https://bugs.gentoo.org/show_bug.cgi?id=853769
Signed-off-by: Alfred Persson Forsberg <cat <AT> catcream.org>
Closes: https://github.com/gentoo/gentoo/pull/26268
Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...plocate-1.1.16-error-to-fprintf-exit-musl.patch | 337 +++++++++++++++++++++
 .../plocate-1.1.16-include-linux-stat_h-musl.patch |  30 ++
 sys-apps/plocate/plocate-1.1.16.ebuild             |   2 +
 3 files changed, 369 insertions(+)

diff --git 
a/sys-apps/plocate/files/plocate-1.1.16-error-to-fprintf-exit-musl.patch 
b/sys-apps/plocate/files/plocate-1.1.16-error-to-fprintf-exit-musl.patch
new file mode 100644
index 000000000000..6d108501307f
--- /dev/null
+++ b/sys-apps/plocate/files/plocate-1.1.16-error-to-fprintf-exit-musl.patch
@@ -0,0 +1,337 @@
+https://bugs.gentoo.org/829580
+https://git.sesse.net/?p=plocate;a=commit;h=fd6198891d6fd9642effc0843fef6f23b991af3e
+
+From fd6198891d6fd9642effc0843fef6f23b991af3e Mon Sep 17 00:00:00 2001
+From: "Steinar H. Gunderson" <steinar+...@gunderson.no>
+Date: Wed, 13 Jul 2022 22:31:54 +0200
+Subject: [PATCH 2/2] Remove dependency on non-POSIX header error.h.
+
+This helps compatibility with certain configurations of musl libc.
+Note that the output format on updatedb.conf errors will change somewhat,
+and only the first one will be reported followed by immediate exit
+(unlike earlier, where all updatedb.conf errors would be output before exit).
+
+Based on a patch by Alfred Persson Forsberg.
+---
+ conf.cpp | 178 +++++++++++++++++++++++++++++--------------------------
+ 1 file changed, 94 insertions(+), 84 deletions(-)
+
+diff --git a/conf.cpp b/conf.cpp
+index 1055fd7..60dd93f 100644
+--- a/conf.cpp
++++ b/conf.cpp
+@@ -22,7 +22,6 @@ any later version.
+ 
+ #include "conf.h"
+ 
+-#include "error.h"
+ #include "lib.h"
+ 
+ #include <algorithm>
+@@ -167,11 +166,6 @@ uc_lex(void)
+               /* Fall through */
+       case '\n':
+               uc_current_line++;
+-              if (uc_current_line == 0) {
+-                      error_at_line(0, 0, UPDATEDB_CONF, uc_current_line - 1,
+-                                    _("warning: Line number overflow"));
+-                      error_message_count--; /* Don't count as an error */
+-              }
+               return UCT_EOL;
+ 
+       case '=':
+@@ -180,10 +174,9 @@ uc_lex(void)
+       case '"': {
+               while ((c = getc_unlocked(uc_file)) != '"') {
+                       if (c == EOF || c == '\n') {
+-                              error_at_line(0, 0, UPDATEDB_CONF, uc_line,
+-                                            _("missing closing `\"'"));
+-                              ungetc(c, uc_file);
+-                              break;
++                              fprintf(stderr, "%s:%u: missing closing `\"'\n",
++                                      UPDATEDB_CONF, uc_line);
++                              exit(EXIT_FAILURE);
+                       }
+                       uc_lex_buf.push_back(c);
+               }
+@@ -215,21 +208,18 @@ uc_lex(void)
+ static void
+ parse_updatedb_conf(void)
+ {
+-      int old_error_one_per_line;
+-      unsigned old_error_message_count;
+       bool had_prune_bind_mounts, had_prunefs, had_prunenames, had_prunepaths;
+ 
+       uc_file = fopen(UPDATEDB_CONF, "r");
+       if (uc_file == NULL) {
+-              if (errno != ENOENT)
+-                      error(EXIT_FAILURE, errno, _("can not open `%s'"), 
UPDATEDB_CONF);
+-              goto err;
++              if (errno != ENOENT) {
++                      perror(UPDATEDB_CONF);
++                      exit(EXIT_FAILURE);
++              }
++              return;
+       }
+       flockfile(uc_file);
+       uc_current_line = 1;
+-      old_error_message_count = error_message_count;
+-      old_error_one_per_line = error_one_per_line;
+-      error_one_per_line = 1;
+       had_prune_bind_mounts = false;
+       had_prunefs = false;
+       had_prunenames = false;
+@@ -263,40 +253,39 @@ parse_updatedb_conf(void)
+                       break;
+ 
+               case UCT_IDENTIFIER:
+-                      error_at_line(0, 0, UPDATEDB_CONF, uc_line,
+-                                    _("unknown variable `%s'"), 
uc_lex_buf.c_str());
+-                      goto skip_to_eol;
++                      fprintf(stderr, "%s:%u: unknown variable: `%s'\n",
++                              UPDATEDB_CONF, uc_line, uc_lex_buf.c_str());
++                      exit(EXIT_FAILURE);
+ 
+               default:
+-                      error_at_line(0, 0, UPDATEDB_CONF, uc_line,
+-                                    _("variable name expected"));
+-                      goto skip_to_eol;
++                      fprintf(stderr, "%s:%u: variable name expected\n",
++                              UPDATEDB_CONF, uc_line);
++                      exit(EXIT_FAILURE);
+               }
+               if (*had_var != false) {
+-                      error_at_line(0, 0, UPDATEDB_CONF, uc_line,
+-                                    _("variable `%s' was already defined"), 
uc_lex_buf.c_str());
+-                      goto skip_to_eol;
++                      fprintf(stderr, "%s:%u: variable `%s' was already 
defined\n",
++                              UPDATEDB_CONF, uc_line, uc_lex_buf.c_str());
++                      exit(EXIT_FAILURE);
+               }
+               *had_var = true;
+               var_token = token;
+               token = uc_lex();
+               if (token != UCT_EQUAL) {
+-                      error_at_line(0, 0, UPDATEDB_CONF, uc_line,
+-                                    _("`=' expected after variable name"));
+-                      goto skip_to_eol;
++                      fprintf(stderr, "%s:%u: `=' expected after variable 
name\n",
++                              UPDATEDB_CONF, uc_line);
++                      exit(EXIT_FAILURE);
+               }
+               token = uc_lex();
+               if (token != UCT_QUOTED) {
+-                      error_at_line(0, 0, UPDATEDB_CONF, uc_line,
+-                                    _("value in quotes expected after `='"));
+-                      goto skip_to_eol;
++                      fprintf(stderr, "%s:%u: value in quotes expected after 
`='\n",
++                              UPDATEDB_CONF, uc_line);
++                      exit(EXIT_FAILURE);
+               }
+               if (var_token == UCT_PRUNE_BIND_MOUNTS) {
+                       if (parse_bool(&conf_prune_bind_mounts, 
uc_lex_buf.c_str()) != 0) {
+-                              error_at_line(0, 0, UPDATEDB_CONF, uc_line,
+-                                            _("invalid value `%s' of 
PRUNE_BIND_MOUNTS"),
+-                                            uc_lex_buf.c_str());
+-                              goto skip_to_eol;
++                              fprintf(stderr, "%s:%u: invalid value `%s' of 
PRUNE_BIND_MOUNTS\n",
++                                      UPDATEDB_CONF, uc_line, 
uc_lex_buf.c_str());
++                              exit(EXIT_FAILURE);
+                       }
+               } else if (var_token == UCT_PRUNEFS)
+                       var_add_values(&conf_prunefs, uc_lex_buf.c_str());
+@@ -308,12 +297,11 @@ parse_updatedb_conf(void)
+                       abort();
+               token = uc_lex();
+               if (token != UCT_EOL && token != UCT_EOF) {
+-                      error_at_line(0, 0, UPDATEDB_CONF, uc_line,
+-                                    _("unexpected data after variable 
value"));
+-                      goto skip_to_eol;
++                      fprintf(stderr, "%s:%u: unexpected data after variable 
value\n",
++                              UPDATEDB_CONF, uc_line);
++                      exit(EXIT_FAILURE);
+               }
+               /* Fall through */
+-      skip_to_eol:
+               while (token != UCT_EOL) {
+                       if (token == UCT_EOF)
+                               goto eof;
+@@ -321,14 +309,12 @@ parse_updatedb_conf(void)
+               }
+       }
+ eof:
+-      if (ferror(uc_file))
+-              error(EXIT_FAILURE, 0, _("I/O error reading `%s'"), 
UPDATEDB_CONF);
+-      error_one_per_line = old_error_one_per_line;
++      if (ferror(uc_file)) {
++              perror(UPDATEDB_CONF);
++              exit(EXIT_FAILURE);
++      }
+       funlockfile(uc_file);
+       fclose(uc_file);
+-      if (error_message_count != old_error_message_count)
+-              exit(EXIT_FAILURE);
+-err:;
+ }
+ 
+ /* Command-line argument parsing */
+@@ -384,8 +370,11 @@ prepend_cwd(const string &path)
+       do
+               buf.resize(buf.size() * 1.5);
+       while ((res = getcwd(buf.data(), buf.size())) == NULL && errno == 
ERANGE);
+-      if (res == NULL)
+-              error(EXIT_FAILURE, errno, _("can not get current working 
directory"));
++      if (res == NULL) {
++              fprintf(stderr, "%s: %s: can not get current working 
directory\n",
++                      program_invocation_name, strerror(errno));
++              exit(EXIT_FAILURE);
++      }
+       buf.resize(strlen(buf.data()));
+       return buf + '/' + path;
+ }
+@@ -438,54 +427,64 @@ parse_arguments(int argc, char *argv[])
+                       exit(EXIT_FAILURE);
+ 
+               case 'B':
+-                      if (got_prune_bind_mounts != false)
+-                              error(EXIT_FAILURE, 0,
+-                                    _("--%s would override earlier 
command-line argument"),
+-                                    "prune-bind-mounts");
++                      if (got_prune_bind_mounts != false) {
++                              fprintf(stderr, "%s: --%s would override 
earlier command-line argument\n",
++                                      program_invocation_name, 
"prune-bind-mounts");
++                              exit(EXIT_FAILURE);
++                      }
+                       got_prune_bind_mounts = true;
+-                      if (parse_bool(&conf_prune_bind_mounts, optarg) != 0)
+-                              error(EXIT_FAILURE, 0, _("invalid value `%s' of 
--%s"), optarg,
+-                                    "prune-bind-mounts");
++                      if (parse_bool(&conf_prune_bind_mounts, optarg) != 0) {
++                              fprintf(stderr, "%s: invalid value %s of 
--%s\n",
++                                      program_invocation_name, optarg, 
"prune-bind-mounts");
++                              exit(EXIT_FAILURE);
++                      }
+                       break;
+ 
+               case 'F':
+-                      if (prunefs_changed != false)
+-                              error(EXIT_FAILURE, 0,
+-                                    _("--%s would override earlier 
command-line argument"),
+-                                    "prunefs");
++                      if (prunefs_changed != false) {
++                              fprintf(stderr, "%s: --%s would override 
earlier command-line argument\n",
++                                      program_invocation_name, "prunefs");
++                              exit(EXIT_FAILURE);
++                      }
+                       prunefs_changed = true;
+                       conf_prunefs.clear();
+                       var_add_values(&conf_prunefs, optarg);
+                       break;
+ 
+               case 'N':
+-                      if (prunenames_changed != false)
+-                              error(EXIT_FAILURE, 0,
+-                                    _("--%s would override earlier 
command-line argument"),
+-                                    "prunenames");
++                      if (prunenames_changed != false) {
++                              fprintf(stderr, "%s: --%s would override 
earlier command-line argument\n",
++                                        program_invocation_name, 
"prunenames");
++                                exit(EXIT_FAILURE);
++                      }
+                       prunenames_changed = true;
+                       conf_prunenames.clear();
+                       var_add_values(&conf_prunenames, optarg);
+                       break;
+ 
+               case 'P':
+-                      if (prunepaths_changed != false)
+-                              error(EXIT_FAILURE, 0,
+-                                    _("--%s would override earlier 
command-line argument"),
+-                                    "prunepaths");
++                      if (prunepaths_changed != false) {
++                              fprintf(stderr, "%s: --%s would override 
earlier command-line argument\n",
++                                        program_invocation_name, 
"prunepaths");
++                                exit(EXIT_FAILURE);
++                      }
+                       prunepaths_changed = true;
+                       conf_prunepaths.clear();
+                       var_add_values(&conf_prunepaths, optarg);
+                       break;
+ 
+               case 'U':
+-                      if (conf_scan_root != NULL)
+-                              error(EXIT_FAILURE, 0, _("--%s specified 
twice"),
+-                                    "database-root");
++                      if (conf_scan_root != NULL) {
++                              fprintf(stderr, "%s: --%s specified twice\n",
++                                      program_invocation_name, 
"database-root");
++                              exit(EXIT_FAILURE);
++                      }
+                       conf_scan_root = realpath(optarg, nullptr);
+-                      if (conf_scan_root == NULL)
+-                              error(EXIT_FAILURE, errno, _("invalid value 
`%s' of --%s"), optarg,
+-                                    "database-root");
++                      if (conf_scan_root == NULL) {
++                              fprintf(stderr, "%s: %s: invalid value `%s' of 
--%s\n",
++                                      program_invocation_name, 
strerror(errno), optarg, "database-root");
++                              exit(EXIT_FAILURE);
++                      }
+                       break;
+ 
+               case 'V':
+@@ -517,13 +516,18 @@ parse_arguments(int argc, char *argv[])
+                       exit(EXIT_SUCCESS);
+ 
+               case 'l':
+-                      if (got_visibility != false)
+-                              error(EXIT_FAILURE, 0, _("--%s specified 
twice"),
+-                                    "require-visibility");
++                      if (got_visibility != false) {
++                              fprintf(stderr, "%s: --%s specified twice\n",
++                                        program_invocation_name, 
"require-visibility");
++                                exit(EXIT_FAILURE);
++                      }
++
+                       got_visibility = true;
+-                      if (parse_bool(&conf_check_visibility, optarg) != 0)
+-                              error(EXIT_FAILURE, 0, _("invalid value `%s' of 
--%s"), optarg,
+-                                    "require-visibility");
++                      if (parse_bool(&conf_check_visibility, optarg) != 0) {
++                              fprintf(stderr, "%s: invalid value `%s' of 
--%s",
++                                      program_invocation_name, optarg, 
"require-visibility");
++                              exit(EXIT_FAILURE);
++                      }
+                       break;
+ 
+               case 'n':
+@@ -532,8 +536,11 @@ parse_arguments(int argc, char *argv[])
+                       break;
+ 
+               case 'o':
+-                      if (!conf_output.empty())
+-                              error(EXIT_FAILURE, 0, _("--%s specified 
twice"), "output");
++                      if (!conf_output.empty()) {
++                              fprintf(stderr, "%s: --%s specified twice",
++                                      program_invocation_name, "output");
++                              exit(EXIT_FAILURE);
++                      }
+                       conf_output = optarg;
+                       break;
+ 
+@@ -558,8 +565,11 @@ parse_arguments(int argc, char *argv[])
+               }
+       }
+ options_done:
+-      if (optind != argc)
+-              error(EXIT_FAILURE, 0, _("unexpected operand on command line"));
++      if (optind != argc) {
++              fprintf(stderr, "%s: unexpected operand on command line",
++                      program_invocation_name);
++              exit(EXIT_FAILURE);
++      }
+       if (conf_scan_root == NULL) {
+               static char root[] = "/";
+ 
+-- 
+2.35.1
+

diff --git 
a/sys-apps/plocate/files/plocate-1.1.16-include-linux-stat_h-musl.patch 
b/sys-apps/plocate/files/plocate-1.1.16-include-linux-stat_h-musl.patch
new file mode 100644
index 000000000000..a4b9fe4d1bc6
--- /dev/null
+++ b/sys-apps/plocate/files/plocate-1.1.16-include-linux-stat_h-musl.patch
@@ -0,0 +1,30 @@
+https://git.sesse.net/?p=plocate;a=commit;h=0125004cd28c5f9124632b594e51dde73af1691c
+https://git.alpinelinux.org/aports/tree/community/plocate/include-statx.patch
+https://bugs.gentoo.org/853769
+
+From 0125004cd28c5f9124632b594e51dde73af1691c Mon Sep 17 00:00:00 2001
+From: "Steinar H. Gunderson" <steinar+...@gunderson.no>
+Date: Sat, 25 Jun 2022 10:01:49 +0200
+Subject: [PATCH 1/2] Add a missing #include.
+
+Taken from the Alpine Linux packaging; seems to be for statx()
+(presumably on musl libc).
+---
+ io_uring_engine.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/io_uring_engine.h b/io_uring_engine.h
+index 688a6ae..bcb1058 100644
+--- a/io_uring_engine.h
++++ b/io_uring_engine.h
+@@ -7,6 +7,7 @@
+ #include <string_view>
+ #include <sys/socket.h>
+ #include <sys/types.h>
++#include <linux/stat.h>
+ 
+ struct io_uring_sqe;
+ #ifndef WITHOUT_URING
+-- 
+2.35.1
+

diff --git a/sys-apps/plocate/plocate-1.1.16.ebuild 
b/sys-apps/plocate/plocate-1.1.16.ebuild
index baa634d92859..ea20d3fb9b1c 100644
--- a/sys-apps/plocate/plocate-1.1.16.ebuild
+++ b/sys-apps/plocate/plocate-1.1.16.ebuild
@@ -26,6 +26,8 @@ DEPEND="${RDEPEND}"
 
 PATCHES=(
        "${FILESDIR}"/${PN}-1.1.15-meson-use-feature-option-for-libiouring.patch
+       "${FILESDIR}"/${PN}-1.1.16-error-to-fprintf-exit-musl.patch
+       "${FILESDIR}"/${PN}-1.1.16-include-linux-stat_h-musl.patch
 )
 
 pkg_setup() {

Reply via email to