From 628aa6e172bda140bb466a32e12508eec70e6766 Mon Sep 17 00:00:00 2001 From: Lars Wendler Date: Fri, 31 Jul 2020 10:31:28 +0200 Subject: 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 --- .../nano-4.9.3-disable-speller_build_fix.patch | 342 +++++++++++++++++++++ .../nano/files/nano-4.9.3-minimal_build_fix.patch | 46 +++ app-editors/nano/nano-4.9.3.ebuild | 5 + 3 files changed, 393 insertions(+) create mode 100644 app-editors/nano/files/nano-4.9.3-disable-speller_build_fix.patch create mode 100644 app-editors/nano/files/nano-4.9.3-minimal_build_fix.patch (limited to 'app-editors/nano') 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 +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 +--- + 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 +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 +--- + 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 -- cgit v1.2.3-65-gdbad