summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wendler <polynomial-c@gentoo.org>2020-07-31 10:31:28 +0200
committerLars Wendler <polynomial-c@gentoo.org>2020-07-31 10:38:07 +0200
commit628aa6e172bda140bb466a32e12508eec70e6766 (patch)
treeca0df196a9bd61ce3a89ec1ad0845205f6519a21 /app-editors
parentdev-perl/Software-License: Bump to version 0.103.14 (diff)
downloadgentoo-628aa6e172bda140bb466a32e12508eec70e6766.tar.gz
gentoo-628aa6e172bda140bb466a32e12508eec70e6766.tar.bz2
gentoo-628aa6e172bda140bb466a32e12508eec70e6766.zip
app-editors/nano: Fixed build with USE="minimal" and USE="-spell"
Closes: https://bugs.gentoo.org/734856 Package-Manager: Portage-3.0.1, Repoman-2.3.23 Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
Diffstat (limited to 'app-editors')
-rw-r--r--app-editors/nano/files/nano-4.9.3-disable-speller_build_fix.patch342
-rw-r--r--app-editors/nano/files/nano-4.9.3-minimal_build_fix.patch46
-rw-r--r--app-editors/nano/nano-4.9.3.ebuild5
3 files changed, 393 insertions, 0 deletions
diff --git a/app-editors/nano/files/nano-4.9.3-disable-speller_build_fix.patch b/app-editors/nano/files/nano-4.9.3-disable-speller_build_fix.patch
new file mode 100644
index 000000000000..978e24de805d
--- /dev/null
+++ b/app-editors/nano/files/nano-4.9.3-disable-speller_build_fix.patch
@@ -0,0 +1,342 @@
+From 4b7f7a30c9ec593d68186b1dfef44d4e2bda735b Mon Sep 17 00:00:00 2001
+From: Benno Schulenberg <bensberg@telfort.nl>
+Date: Mon, 22 Jun 2020 08:39:59 +0200
+Subject: [PATCH] build: fix compilation when configured with
+ --disable-speller
+
+Move two functions that are used by the formatter too
+to between the proper #ifdef.
+
+Problem existed since commit 8089f5ad from a month ago.
+
+Backported to v4.9.3
+Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
+---
+ src/text.c | 302 ++++++++++++++++++++++++++---------------------------
+ 1 file changed, 151 insertions(+), 151 deletions(-)
+
+diff --git a/src/text.c b/src/text.c
+index 93ad3704..c7690fd0 100644
+--- a/src/text.c
++++ b/src/text.c
+@@ -2011,8 +2011,159 @@ void construct_argument_list(char ***arguments, char *command, char *filename)
+ (*arguments)[count - 2] = filename;
+ (*arguments)[count - 1] = NULL;
+ }
++
++/* Open the specified file, and if that succeeds, remove the text of the marked
++ * region or of the entire buffer and read the file contents into its place. */
++bool replace_buffer(const char *filename, undo_type action, const char *operation)
++{
++ linestruct *was_cutbuffer = cutbuffer;
++ int descriptor;
++ FILE *stream;
++
++ descriptor = open_file(filename, FALSE, &stream);
++
++ if (descriptor < 0)
++ return FALSE;
++
++ cutbuffer = NULL;
++
++#ifndef NANO_TINY
++ add_undo(COUPLE_BEGIN, operation);
++
++ /* Cut either the marked region or the whole buffer. */
++ add_undo(action, NULL);
++#endif
++ do_snip(FALSE, openfile->mark, openfile->mark == NULL, FALSE);
++#ifndef NANO_TINY
++ update_undo(action);
+ #endif
+
++ /* Discard what was cut. */
++ free_lines(cutbuffer);
++ cutbuffer = was_cutbuffer;
++
++ /* Insert the spell-checked file into the cleared area. */
++ read_file(stream, descriptor, filename, TRUE);
++
++#ifndef NANO_TINY
++ add_undo(COUPLE_END, operation);
++#endif
++ return TRUE;
++}
++
++/* Execute the given program, with the given temp file as last argument. */
++const char *treat(char *tempfile_name, char *theprogram, bool spelling)
++{
++ ssize_t lineno_save = openfile->current->lineno;
++ size_t current_x_save = openfile->current_x;
++ size_t pww_save = openfile->placewewant;
++ bool was_at_eol = (openfile->current->data[openfile->current_x] == '\0');
++ struct stat fileinfo;
++ long timestamp_sec, timestamp_nsec;
++ static char **arguments = NULL;
++ pid_t thepid;
++ int program_status;
++ bool replaced = FALSE;
++
++ /* Get the timestamp and the size of the temporary file. */
++ stat(tempfile_name, &fileinfo);
++ timestamp_sec = (long)fileinfo.st_mtim.tv_sec;
++ timestamp_nsec = (long)fileinfo.st_mtim.tv_nsec;
++
++ /* If the number of bytes to check is zero, get out. */
++ if (fileinfo.st_size == 0)
++ return NULL;
++
++ /* Exit from curses mode to give the program control of the terminal. */
++ endwin();
++
++ construct_argument_list(&arguments, theprogram, tempfile_name);
++
++ /* Fork a child process and run the given program in it. */
++ if ((thepid = fork()) == 0) {
++ execvp(arguments[0], arguments);
++
++ /* Terminate the child if the program is not found. */
++ exit(9);
++ } else if (thepid < 0)
++ return _("Could not fork");
++
++ /* Block SIGWINCHes while waiting for the program to end,
++ * so nano doesn't get pushed past the wait(). */
++ block_sigwinch(TRUE);
++ wait(&program_status);
++ block_sigwinch(FALSE);
++
++ /* Restore the terminal state and reenter curses mode. */
++ terminal_init();
++ doupdate();
++
++ if (!WIFEXITED(program_status) || WEXITSTATUS(program_status) > 2) {
++ statusline(ALERT, _("Error invoking '%s'"), arguments[0]);
++ return NULL;
++ } else if (WEXITSTATUS(program_status) != 0)
++ statusline(ALERT, _("Program '%s' complained"), arguments[0]);
++
++ /* Stat the temporary file again. */
++ stat(tempfile_name, &fileinfo);
++
++ /* When the temporary file wasn't touched, say so and leave. */
++ if ((long)fileinfo.st_mtim.tv_sec == timestamp_sec &&
++ (long)fileinfo.st_mtim.tv_nsec == timestamp_nsec) {
++ statusbar(_("Nothing changed"));
++ return NULL;
++ }
++
++#ifndef NANO_TINY
++ /* Replace the marked text (or entire text) with the corrected text. */
++ if (spelling && openfile->mark) {
++ ssize_t was_mark_lineno = openfile->mark->lineno;
++ bool upright = mark_is_before_cursor();
++
++ replaced = replace_buffer(tempfile_name, CUT, "spelling correction");
++
++ /* Adjust the end point of the marked region for any change in
++ * length of the region's last line. */
++ if (upright)
++ current_x_save = openfile->current_x;
++ else
++ openfile->mark_x = openfile->current_x;
++
++ /* Restore the mark. */
++ openfile->mark = line_from_number(was_mark_lineno);
++ } else
++#endif
++ {
++ openfile->current = openfile->filetop;
++ openfile->current_x = 0;
++
++ replaced = replace_buffer(tempfile_name, CUT_TO_EOF,
++ /* TRANSLATORS: The next two go with Undid/Redid messages. */
++ (spelling ? N_("spelling correction") : N_("formatting")));
++ }
++
++ /* Go back to the old position. */
++ goto_line_posx(lineno_save, current_x_save);
++ if (was_at_eol || openfile->current_x > strlen(openfile->current->data))
++ openfile->current_x = strlen(openfile->current->data);
++
++#ifndef NANO_TINY
++ if (replaced)
++ update_undo(COUPLE_END);
++#endif
++
++ openfile->placewewant = pww_save;
++ adjust_viewport(STATIONARY);
++
++ if (spelling)
++ statusbar(_("Finished checking spelling"));
++ else
++ statusbar(_("Buffer has been processed"));
++
++ return NULL;
++}
++#endif /* ENABLE_SPELLER || ENABLE_COLOR */
++
+ #ifdef ENABLE_SPELLER
+ /* Let the user edit the misspelled word. Return FALSE if the user cancels. */
+ bool fix_spello(const char *word)
+@@ -2307,157 +2458,6 @@ const char *do_int_speller(const char *tempfile_name)
+ return NULL;
+ }
+
+-/* Open the specified file, and if that succeeds, remove the text of the marked
+- * region or of the entire buffer and read the file contents into its place. */
+-bool replace_buffer(const char *filename, undo_type action, const char *operation)
+-{
+- linestruct *was_cutbuffer = cutbuffer;
+- int descriptor;
+- FILE *stream;
+-
+- descriptor = open_file(filename, FALSE, &stream);
+-
+- if (descriptor < 0)
+- return FALSE;
+-
+- cutbuffer = NULL;
+-
+-#ifndef NANO_TINY
+- add_undo(COUPLE_BEGIN, operation);
+-
+- /* Cut either the marked region or the whole buffer. */
+- add_undo(action, NULL);
+-#endif
+- do_snip(FALSE, openfile->mark, openfile->mark == NULL, FALSE);
+-#ifndef NANO_TINY
+- update_undo(action);
+-#endif
+-
+- /* Discard what was cut. */
+- free_lines(cutbuffer);
+- cutbuffer = was_cutbuffer;
+-
+- /* Insert the spell-checked file into the cleared area. */
+- read_file(stream, descriptor, filename, TRUE);
+-
+-#ifndef NANO_TINY
+- add_undo(COUPLE_END, operation);
+-#endif
+- return TRUE;
+-}
+-
+-/* Execute the given program, with the given temp file as last argument. */
+-const char *treat(char *tempfile_name, char *theprogram, bool spelling)
+-{
+- ssize_t lineno_save = openfile->current->lineno;
+- size_t current_x_save = openfile->current_x;
+- size_t pww_save = openfile->placewewant;
+- bool was_at_eol = (openfile->current->data[openfile->current_x] == '\0');
+- struct stat fileinfo;
+- long timestamp_sec, timestamp_nsec;
+- static char **arguments = NULL;
+- pid_t thepid;
+- int program_status;
+- bool replaced = FALSE;
+-
+- /* Get the timestamp and the size of the temporary file. */
+- stat(tempfile_name, &fileinfo);
+- timestamp_sec = (long)fileinfo.st_mtim.tv_sec;
+- timestamp_nsec = (long)fileinfo.st_mtim.tv_nsec;
+-
+- /* If the number of bytes to check is zero, get out. */
+- if (fileinfo.st_size == 0)
+- return NULL;
+-
+- /* Exit from curses mode to give the program control of the terminal. */
+- endwin();
+-
+- construct_argument_list(&arguments, theprogram, tempfile_name);
+-
+- /* Fork a child process and run the given program in it. */
+- if ((thepid = fork()) == 0) {
+- execvp(arguments[0], arguments);
+-
+- /* Terminate the child if the program is not found. */
+- exit(9);
+- } else if (thepid < 0)
+- return _("Could not fork");
+-
+- /* Block SIGWINCHes while waiting for the program to end,
+- * so nano doesn't get pushed past the wait(). */
+- block_sigwinch(TRUE);
+- wait(&program_status);
+- block_sigwinch(FALSE);
+-
+- /* Restore the terminal state and reenter curses mode. */
+- terminal_init();
+- doupdate();
+-
+- if (!WIFEXITED(program_status) || WEXITSTATUS(program_status) > 2) {
+- statusline(ALERT, _("Error invoking '%s'"), arguments[0]);
+- return NULL;
+- } else if (WEXITSTATUS(program_status) != 0)
+- statusline(ALERT, _("Program '%s' complained"), arguments[0]);
+-
+- /* Stat the temporary file again. */
+- stat(tempfile_name, &fileinfo);
+-
+- /* When the temporary file wasn't touched, say so and leave. */
+- if ((long)fileinfo.st_mtim.tv_sec == timestamp_sec &&
+- (long)fileinfo.st_mtim.tv_nsec == timestamp_nsec) {
+- statusbar(_("Nothing changed"));
+- return NULL;
+- }
+-
+-#ifndef NANO_TINY
+- /* Replace the marked text (or entire text) with the corrected text. */
+- if (spelling && openfile->mark) {
+- ssize_t was_mark_lineno = openfile->mark->lineno;
+- bool upright = mark_is_before_cursor();
+-
+- replaced = replace_buffer(tempfile_name, CUT, "spelling correction");
+-
+- /* Adjust the end point of the marked region for any change in
+- * length of the region's last line. */
+- if (upright)
+- current_x_save = openfile->current_x;
+- else
+- openfile->mark_x = openfile->current_x;
+-
+- /* Restore the mark. */
+- openfile->mark = line_from_number(was_mark_lineno);
+- } else
+-#endif
+- {
+- openfile->current = openfile->filetop;
+- openfile->current_x = 0;
+-
+- replaced = replace_buffer(tempfile_name, CUT_TO_EOF,
+- /* TRANSLATORS: The next two go with Undid/Redid messages. */
+- (spelling ? N_("spelling correction") : N_("formatting")));
+- }
+-
+- /* Go back to the old position. */
+- goto_line_posx(lineno_save, current_x_save);
+- if (was_at_eol || openfile->current_x > strlen(openfile->current->data))
+- openfile->current_x = strlen(openfile->current->data);
+-
+-#ifndef NANO_TINY
+- if (replaced)
+- update_undo(COUPLE_END);
+-#endif
+-
+- openfile->placewewant = pww_save;
+- adjust_viewport(STATIONARY);
+-
+- if (spelling)
+- statusbar(_("Finished checking spelling"));
+- else
+- statusbar(_("Buffer has been processed"));
+-
+- return NULL;
+-}
+-
+ /* Spell check the current file. If an alternate spell checker is
+ * specified, use it. Otherwise, use the internal spell checker. */
+ void do_spell(void)
+--
+2.28.0
+
diff --git a/app-editors/nano/files/nano-4.9.3-minimal_build_fix.patch b/app-editors/nano/files/nano-4.9.3-minimal_build_fix.patch
new file mode 100644
index 000000000000..52112bab7235
--- /dev/null
+++ b/app-editors/nano/files/nano-4.9.3-minimal_build_fix.patch
@@ -0,0 +1,46 @@
+From a98f48b4e82db7d30aa04925fb28344f5bce8c7c Mon Sep 17 00:00:00 2001
+From: Benno Schulenberg <bensberg@telfort.nl>
+Date: Mon, 22 Jun 2020 14:00:23 +0200
+Subject: [PATCH] build: fix compilation for --enable-tiny --enable-color
+ --enable-nanorc
+
+Backported to v4.9.3
+Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
+---
+ src/nano.c | 2 +-
+ src/text.c | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/nano.c b/src/nano.c
+index be80a073..3ac81ba4 100644
+--- a/src/nano.c
++++ b/src/nano.c
+@@ -1079,7 +1079,7 @@ RETSIGTYPE do_continue(int signal)
+ ungetch(KEY_FLUSH);
+ }
+
+-#if !defined(NANO_TINY) || defined(ENABLE_SPELLER)
++#if !defined(NANO_TINY) || defined(ENABLE_SPELLER) || defined(ENABLE_COLOR)
+ /* Block or unblock the SIGWINCH signal, depending on the blockit parameter. */
+ void block_sigwinch(bool blockit)
+ {
+diff --git a/src/text.c b/src/text.c
+index c7690fd0..32727946 100644
+--- a/src/text.c
++++ b/src/text.c
+@@ -2032,10 +2032,10 @@ bool replace_buffer(const char *filename, undo_type action, const char *operatio
+
+ /* Cut either the marked region or the whole buffer. */
+ add_undo(action, NULL);
+-#endif
+ do_snip(FALSE, openfile->mark, openfile->mark == NULL, FALSE);
+-#ifndef NANO_TINY
+ update_undo(action);
++#else
++ do_snip(FALSE, TRUE, FALSE, FALSE);
+ #endif
+
+ /* Discard what was cut. */
+--
+2.28.0
+
diff --git a/app-editors/nano/nano-4.9.3.ebuild b/app-editors/nano/nano-4.9.3.ebuild
index 076c22b9c609..bd791de7db48 100644
--- a/app-editors/nano/nano-4.9.3.ebuild
+++ b/app-editors/nano/nano-4.9.3.ebuild
@@ -32,6 +32,11 @@ BDEPEND="
nls? ( sys-devel/gettext )
virtual/pkgconfig
"
+PATCHES=(
+ "${FILESDIR}/${P}-disable-speller_build_fix.patch"
+ "${FILESDIR}/${P}-minimal_build_fix.patch" #734856
+)
+
src_prepare() {
default
if [[ ${PV} == "9999" ]] ; then