diff --git a/recipes/wip/text/neovim/recipe.toml b/recipes/wip/text/neovim/recipe.toml index c521fd348..8978c7ed2 100644 --- a/recipes/wip/text/neovim/recipe.toml +++ b/recipes/wip/text/neovim/recipe.toml @@ -1,6 +1,9 @@ #TODO mostly work, kinda slow, can't quit (signal issues?) [source] tar = "https://github.com/neovim/neovim/archive/refs/tags/v0.11.3.tar.gz" +patches = [ + "redox.patch" +] [build] template = "custom" diff --git a/recipes/wip/text/neovim/redox.patch b/recipes/wip/text/neovim/redox.patch new file mode 100644 index 000000000..30b3f7229 --- /dev/null +++ b/recipes/wip/text/neovim/redox.patch @@ -0,0 +1,141 @@ +diff -ruwN source/runtime/CMakeLists.txt source-new/runtime/CMakeLists.txt +--- source/runtime/CMakeLists.txt 2025-07-13 01:34:12.000000000 +0700 ++++ source-new/runtime/CMakeLists.txt 2025-09-16 14:46:20.134790482 +0700 +@@ -24,37 +24,6 @@ + + file(GLOB PACKAGES CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR}/runtime/pack/dist/opt/*) + +-set(GENERATED_PACKAGE_TAGS) +-foreach(PACKAGE ${PACKAGES}) +- get_filename_component(PACKNAME ${PACKAGE} NAME) +- file(GLOB "${PACKNAME}_DOC_FILES" CONFIGURE_DEPENDS ${PACKAGE}/doc/*.txt) +- if(${PACKNAME}_DOC_FILES) +- file(MAKE_DIRECTORY ${GENERATED_PACKAGE_DIR}/${PACKNAME}) +- add_custom_command(OUTPUT "${GENERATED_PACKAGE_DIR}/${PACKNAME}/doc/tags" +- COMMAND ${CMAKE_COMMAND} -E copy_directory +- ${PACKAGE} ${GENERATED_PACKAGE_DIR}/${PACKNAME} +- COMMAND $ +- -u NONE -i NONE -e --headless -c "helptags doc" -c quit +- DEPENDS +- nvim_bin +- nvim_runtime_deps +- WORKING_DIRECTORY "${GENERATED_PACKAGE_DIR}/${PACKNAME}" +- ) +- +- set("${PACKNAME}_DOC_NAMES") +- foreach(DF "${${PACKNAME}_DOC_FILES}") +- get_filename_component(F ${DF} NAME) +- list(APPEND "${PACKNAME}_DOC_NAMES" ${GENERATED_PACKAGE_DIR}/${PACKNAME}/doc/${F}) +- endforeach() +- +- install_helper( +- FILES ${GENERATED_PACKAGE_DIR}/${PACKNAME}/doc/tags "${${PACKNAME}_DOC_NAMES}" +- DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/pack/dist/opt/${PACKNAME}/doc) +- +- list(APPEND GENERATED_PACKAGE_TAGS "${GENERATED_PACKAGE_DIR}/${PACKNAME}/doc/tags") +- endif() +-endforeach() +- + set(BUILDDOCFILES) + foreach(DF ${DOCFILES}) + get_filename_component(F ${DF} NAME) +@@ -65,8 +34,6 @@ + COMMAND ${CMAKE_COMMAND} -E remove_directory doc + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${PROJECT_SOURCE_DIR}/runtime/doc doc +- COMMAND $ +- -u NONE -i NONE -e --headless -c "helptags ++t doc" -c quit + DEPENDS + nvim_bin + nvim_runtime_deps +@@ -78,7 +45,6 @@ + DEPENDS + ${GENERATED_SYN_VIM} + ${GENERATED_HELP_TAGS} +- ${GENERATED_PACKAGE_TAGS} + ) + + # CMake is painful here. It will create the destination using the user's +@@ -88,10 +54,6 @@ + # If it's preexisting, leave it alone. + + install_helper( +- FILES ${GENERATED_HELP_TAGS} ${BUILDDOCFILES} +- DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/doc) +- +-install_helper( + FILES ${GENERATED_SYN_VIM} + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/syntax/vim) + +diff -ruwN source/src/nvim/channel.c source-new/src/nvim/channel.c +--- source/src/nvim/channel.c 2025-07-13 01:34:12.000000000 +0700 ++++ source-new/src/nvim/channel.c 2025-09-16 13:41:27.109978099 +0700 +@@ -547,8 +547,23 @@ + // Redirect stdout/stdin (the UI channel) to stderr. Use fnctl(F_DUPFD_CLOEXEC) instead of dup() + // to prevent child processes from inheriting the file descriptors, which are used by UIs to + // detect when Nvim exits. ++ #ifdef __redox__ ++ int new_stdin_fd = dup(STDIN_FILENO); ++ if (new_stdin_fd >= 0) { ++ fcntl(new_stdin_fd, F_SETFD, FD_CLOEXEC); ++ } ++ stdin_dup_fd = new_stdin_fd; ++ ++ // 2. Duplicate STDOUT and set CLOEXEC flag ++ int new_stdout_fd = dup(STDOUT_FILENO); ++ if (new_stdout_fd >= 0) { ++ fcntl(new_stdout_fd, F_SETFD, FD_CLOEXEC); ++ } ++ stdout_dup_fd = new_stdout_fd; ++ #else + stdin_dup_fd = fcntl(STDIN_FILENO, F_DUPFD_CLOEXEC, STDERR_FILENO + 1); + stdout_dup_fd = fcntl(STDOUT_FILENO, F_DUPFD_CLOEXEC, STDERR_FILENO + 1); ++ #endif // __redox__ + dup2(STDERR_FILENO, STDOUT_FILENO); + dup2(STDERR_FILENO, STDIN_FILENO); + } +diff -ruwN source/src/nvim/CMakeLists.txt source-new/src/nvim/CMakeLists.txt +--- source/src/nvim/CMakeLists.txt 2025-07-13 01:34:12.000000000 +0700 ++++ source-new/src/nvim/CMakeLists.txt 2025-09-16 16:07:40.327319085 +0700 +@@ -93,19 +93,6 @@ + endif() + + # -fstack-protector breaks Mingw-w64 builds +-if(NOT MINGW) +- check_c_compiler_flag(-fstack-protector-strong HAS_FSTACK_PROTECTOR_STRONG_FLAG) +- if(HAS_FSTACK_PROTECTOR_STRONG_FLAG) +- target_compile_options(main_lib INTERFACE -fstack-protector-strong) +- target_link_libraries(main_lib INTERFACE -fstack-protector-strong) +- else() +- check_c_compiler_flag(-fstack-protector HAS_FSTACK_PROTECTOR_FLAG) +- if(HAS_FSTACK_PROTECTOR_FLAG) +- target_compile_options(main_lib INTERFACE -fstack-protector --param ssp-buffer-size=4) +- target_link_libraries(main_lib INTERFACE -fstack-protector --param ssp-buffer-size=4) +- endif() +- endif() +-endif() + + # Compiler specific options + if(MSVC) +@@ -145,9 +132,6 @@ + # Platform specific options + if(UNIX) + target_link_libraries(main_lib INTERFACE m) +- if (NOT CMAKE_SYSTEM_NAME STREQUAL "SunOS") +- target_link_libraries(main_lib INTERFACE util) +- endif() + endif() + + if(CMAKE_SYSTEM_NAME MATCHES "Windows") +diff -ruwN source/src/nvim/os/os_defs.h source-new/src/nvim/os/os_defs.h +--- source/src/nvim/os/os_defs.h 2025-07-13 01:34:12.000000000 +0700 ++++ source-new/src/nvim/os/os_defs.h 2025-09-16 13:45:00.379142388 +0700 +@@ -28,6 +28,8 @@ + + #if !defined(NAME_MAX) && defined(_XOPEN_NAME_MAX) + # define NAME_MAX _XOPEN_NAME_MAX ++#elif !defined(NAME_MAX) ++# define NAME_MAX 255 + #endif + + #define BASENAMELEN (NAME_MAX - 5)