From 6e3a69b4cf5c526443b96cf857847d6c3b0586d8 Mon Sep 17 00:00:00 2001 From: dundargoc <33953936+dundargoc@users.noreply.github.com> Date: Tue, 6 Sep 2022 16:52:39 +0200 Subject: build: consistently set build type regardless of generator or platform #19760 Change the default build type to always be Debug, and allow only four predefined build types: Debug, Release, RelWithDebInfo and MinRelSize. Furthermore, flags meant for single-configuration generator (make, ninja) will not be used for multi-configuration generators (visual studio, Xcode), and flags meant for multi-configuration generators will not be used for single-configuration generators. This will allow Debug builds to be built with MSVC which requires that all dependencies are also built with the Debug build type to avoid runtime library mismatch. The correct way to specify build type (for example Release) for single-configuration generators (Make and Ninja) is to run cmake -B build -D CMAKE_BUILD_TYPE=Release cmake --build build while for multi-configuration generators (Visual Studio, Xcode and Ninja Multi-Config) is to run cmake -B build cmake --build build --config Release Passing CMAKE_BUILD_TYPE for multi-config generators will now not only not be used, but also generate a warning for the user. Co-authored-by: dundargoc --- CMakeLists.txt | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index caf9658699..6654cc62b5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,22 +127,12 @@ endif() message(STATUS "CMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}") -# Build type. -if(NOT CMAKE_BUILD_TYPE) - message(STATUS "CMAKE_BUILD_TYPE not specified, default is 'Debug'") - set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build" FORCE) -else() - message(STATUS "CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}") -endif() +set_default_buildtype() if(CMAKE_BUILD_TYPE MATCHES Debug) set(DEBUG 1) else() set(DEBUG 0) endif() -# Set available build types for CMake GUIs. -# Other build types can still be set by -DCMAKE_BUILD_TYPE=... -set_property(CACHE CMAKE_BUILD_TYPE PROPERTY - STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") # If not in a git repo (e.g., a tarball) these tokens define the complete # version string, else they are combined with the result of `git describe`. -- cgit From 42aeb5c5b18af1362362a2e6bdf10a2a4ec70f0f Mon Sep 17 00:00:00 2001 From: dundargoc Date: Tue, 9 Aug 2022 17:02:51 +0200 Subject: build: remove unnecessary policy related code Having cmake version 3.10 as the required minimum version ensures these are set to new by default. --- CMakeLists.txt | 6 ------ 1 file changed, 6 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 6654cc62b5..749bfb75ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,12 +6,6 @@ cmake_minimum_required(VERSION 3.10) project(nvim C) -if(POLICY CMP0065) - cmake_policy(SET CMP0065 NEW) -endif() -if(POLICY CMP0060) - cmake_policy(SET CMP0060 NEW) -endif() if(POLICY CMP0075) cmake_policy(SET CMP0075 NEW) endif() -- cgit From b9aafb85e6daf9ba141baad92d7eb0ef893a4c21 Mon Sep 17 00:00:00 2001 From: Dundar Göc Date: Fri, 26 Aug 2022 14:30:55 +0200 Subject: build: replace deprecated CMAKE_COMPILER_IS_GNUCC variable Instead use the recommended form `CMAKE_C_COMPILER_ID MATCHES "GNU"` --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 749bfb75ac..d3764f4a99 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,7 +96,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") # Work around some old, broken detection by CMake for knowing when to use the # isystem flag. Apple's compilers have supported this for quite some time # now. - if(CMAKE_COMPILER_IS_GNUCC) + if(CMAKE_C_COMPILER_ID MATCHES "GNU") set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ") endif() endif() @@ -170,7 +170,7 @@ if(CMAKE_C_FLAGS_RELEASE MATCHES "-O3") string(REPLACE "-O3" "-O2" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") endif() -if(CMAKE_COMPILER_IS_GNUCC) +if(CMAKE_C_COMPILER_ID MATCHES "GNU") check_c_compiler_flag(-Og HAS_OG_FLAG) else() set(HAS_OG_FLAG 0) -- cgit From 6d557e324fd4223fff3279a0112f40431c540163 Mon Sep 17 00:00:00 2001 From: dundargoc <33953936+dundargoc@users.noreply.github.com> Date: Sun, 18 Sep 2022 03:17:15 +0200 Subject: vim-patch:8.1.0941: macros for MS-Windows are inconsistent (#20215) Problem: Macros for MS-Windows are inconsistent, using "32", "3264 and others. Solution: Use MSWIN for all MS-Windows builds. Use FEAT_GUI_MSWIN for the GUI build. (Hirohito Higashi, closes vim/vim#3932) https://github.com/vim/vim/commit/4f97475d326c2773a78561fb874e4f23c25cbcd9 --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index d3764f4a99..1a1b0c6391 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -273,7 +273,7 @@ if(MSVC) # XXX: /W4 gives too many warnings. #3241 add_compile_options(/W3) add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE) - add_definitions(-DWIN32) + add_definitions(-DMSWIN) else() add_compile_options(-Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion @@ -320,6 +320,7 @@ endif() if(MINGW) # Use POSIX compatible stdio in Mingw add_definitions(-D__USE_MINGW_ANSI_STDIO) + add_definitions(-DMSWIN) endif() if(WIN32) # Windows Vista is the minimum supported version -- cgit From ede66a0b85fcff44890cb34d71e22995eb621006 Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Fri, 23 Sep 2022 12:02:16 -0400 Subject: fix: cleanup contrib/ #20304 - YouCompleteMe is unnecessary since Nvim LSP works well. - vim-addon-local-vimrc is not needed since we added `.editorconfig`. - Inline flake8 arguments. Eventually we will remove all python code, don't need a top-level `.flake8` file meanwhile. --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a1b0c6391..81a0a2f667 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -639,6 +639,7 @@ include(InstallHelpers) add_glob_targets( TARGET lintpy COMMAND ${FLAKE8_PRG} + FLAGS --max-line-length 88 GLOB_DIRS contrib scripts src test GLOB_PAT *.py TOUCH_STRATEGY SINGLE -- cgit From 6427dc8ab66e5885c133698e3e96e82ab74a89f3 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Wed, 28 Sep 2022 09:28:15 +0200 Subject: build(deps): require libtermkey version 0.22 Reduces #ifdef code. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 81a0a2f667..034c349c9f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -498,7 +498,7 @@ if(FEAT_TUI) add_definitions(-DNVIM_UNIBI_HAS_VAR_FROM) endif() - find_package(LibTermkey 0.18 REQUIRED) + find_package(LibTermkey 0.22 REQUIRED) include_directories(SYSTEM ${LIBTERMKEY_INCLUDE_DIRS}) endif() -- cgit From 6917a2e569e9f7306a9858f1aeeb32dd1c3ece4e Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Wed, 28 Sep 2022 09:30:47 +0200 Subject: build(deps): require libvterm version 0.3 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 81a0a2f667..5a613a812c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -502,7 +502,7 @@ if(FEAT_TUI) include_directories(SYSTEM ${LIBTERMKEY_INCLUDE_DIRS}) endif() -find_package(LIBVTERM 0.1 REQUIRED) +find_package(LIBVTERM 0.3 REQUIRED) include_directories(SYSTEM ${LIBVTERM_INCLUDE_DIRS}) option(CLANG_ASAN_UBSAN "Enable Clang address & undefined behavior sanitizer for nvim binary." OFF) -- cgit From d367ed9b23d481998d297d812f54b950e5511c24 Mon Sep 17 00:00:00 2001 From: bfredl Date: Fri, 30 Sep 2022 17:09:47 +0200 Subject: NVIM v0.8.0 BREAKING CHANGES - Remove 'insertmode' 'remap' and 'terse' options - highlight: Rename attributes to match Vim (#19159) - highlight: Error on invalid names and allow '.' and '@' - terminal: Drop winpty, require Windows 10 #18253 - treesitter: Use @foo.bar style highlight groups - treesitter: Do not merge queries by default (#20105) FEATURES - runtime: Enable filetype.lua by default (#19216) - Add `undo!` - Add "prerelease" to version dict - Click support for 'statusline', 'winbar' #18650 - Add preview functionality to user commands - allow cmdheight=0 (EXPERIMENTAL) #16251 - Stdpath('run'), /tmp/nvim.user/ #18993 - Add 'mousescroll' option (#12355) - Allow :wincmd to accept a count (#19815) - Multibuffer preview support for inccommand - Man: Port to Lua (#19912) - api: Ui options relevant for remote TUI - api: Add `nvim_parse_cmd` And `nvim_cmd` - api: Support handling stdin stream in remote ui - api: Add `group_name` to `nvim_get_autocmds` - api: Enable nvim_exec_autocmds to pass arbitrary data (#18613) - api: Support pattern array for exec_autocmds - api: Add `unsilent` to command APIs - api: Add replace_keycodes to nvim_set_keymap (#19598) - api: Add support for :horizontal modifier - api: Add "move" to nvim_input_mouse - api/ui: "ui_watched" option for ui-side extmarks - build: Add_glob_target runs only on changed files #19070 - checkhealth: Check for slow shell #17829 - defaults: Session data in $XDG_STATE_HOME #15583 - defaults: Search selection by * and # in visual mode (#18538) - defaults: Nnoremap & :&& #19365 - defaults: enable mouse by default (set mouse=nvi) #19290 - diagnostic: Pass diagnostics as data to DiagnosticChanged autocmd (#20173) - docs: Gen_help_html.lua - edit: Insert an unsimplified key using CTRL-SHIFT-V - treesitter: Full support for spelling - filetype: Convert more patterns to filetype.lua - filetype: Remove side effects from vim.filetype.match (#18894) - filetype: Expand environment variables in filetype patterns (#20145) - fs: Add vim.fs functions: parents() dirname() basename() dir() find() normalize() - highlight: Implement CurSearch highlight - highlight: Support scoped @spam.eggs.baked_beans groups - input: Delay all simplifications - l10n: Turkish translations #19441 - l10n: Improve zh_CN translations (#19483) - lsp: Remove capabilities sanitization (#17814) - lsp: Show feedback on empty hover response (#18308) - lsp: Options to filter and auto-apply code actions (#18221) - lsp: Add vim.lsp.buf.format (#18193) - lsp: Add logging level "OFF" (#18379) - lsp: Add LspAttach and LspDetach autocommands - lsp: Add filter to vim.lsp.get_active_clients() - lsp: Option to reuse_win for jump actions (#18577) - lsp: Add a start function (#18631) - lsp: Send didChangeConfiguration after init (#18847) - lsp: Defaults: tagfunc, omnifunc, formatexpr (#19003, #19677) - lsp: Allow passing custom list handler to LSP functions that return lists (#19213) - lsp: Provide feedback if server can't compute rename result (#19546) - lsp: Add range option to code_action; deprecate range_code_action (#19551) - lsp: Disable exit_timeout by default (#19672) - lsp: Add tcp support - lua: Vim.deprecate() #18320 - lua: Vim.cmd() with kwargs acts like nvim_cmd() #18523 - lua: Allow some vim script functions to run in fast callbacks - lua: Measure require in --startuptime - lua: Allow vim.cmd to be indexed (#19238) - lua: Print source locations of lua callbacks (#19597) - lua: Add vim.iconv (#18286) - lua: Vim.ui_attach to get ui events from lua (EXPERIMENTAL) - man.vim: List command flags in "gO" outline #17558 - mappings: Do not replace existing mapping for simplified form - mappings: Allow special keys and modifiers in mapping - mapset: Support restoring "replace_keycodes" and "desc" - mapset: Support restoring Lua callback (#20024) - marks: Restore viewport on jump #15831 - nvim_create_user_command: Pass structured modifiers to commands - pum: Pretend 'mousemoveevent' is set when showing right-click menu - server: Set $NVIM, unset $NVIM_LISTEN_ADDRESS #11009 - server: Instance "name", store pipes in stdpath(state) - term: Add support for libvterm >= 0.2 - terminal: Implement for terminal mode - terminal: Recognize underdouble and undercurl - terminfo: Bump built-in terminfo entries (#18570) - treesitter: Allow customizing language symbol name - treesitter: Add ability to retreive a tree/node given a range - treesitter: Upstream node methods from nvim-treesitter - treesitter: Include language in invalid query error (#14053) - treesitter: Bundle Lua parser and queries - treesitter: Add viml parser and queries - treesitter: Add injections - treesitter: Add vim.treesitter.start(), enable for Lua - treesitter: Bundle :help parser and queries - tui: Query terminal for CSI u support (#18181) - tui: Recognize keypad keys when using kitty keyboard protocol - tui: Try terminfo for [re]set_cursor_color OSC #19255 - tui: Allow grid and host to disagree on ambiguous-width chars (#19686) - tui: Recognize sidescroll events (#19992) - tui: Support 'mousemoveevent' - ui: Add `'winbar'` - ui: Clear message history explicitly with msg_history_clear event - ui: Make right-click menu work properly with ext_multigrid - ui: Allow to set the highlight namespace per window - ui: Use msg_grid based implementation for cmdheight=0 - ui-ext: Make 'mousemoveevent' a ui_option - eval: Make Lua Funcref work as method and in substitute() (#20217) - eval: Input() support any type for "cancelreturn" in a dict (#19357) BUG FIXES - Show autocmd output when F is in shortmess (#18251) - Has() should preserve v:shell_error #18280 - Suppress "is a directory" messages with shortmess 'F' (#18296) - Display global statusline correctly with ext_messages - Correct nlua_wait error message #18867 - Right-click in clickable statusline #19252 - Remote UI may get invalid 'pumblend' value #19379 - Assertion failure when requiring missing module in autocmd - api: Nvim_eval_statusline should validate input #18347 - api: Check error after getting win/buf handle (#19052) - api: Check for inclusive buffer line index out of bounds correctly (#19056) - api: Change default value of 'pattern' in nvim_exec_autocmds (#19115) - api: Do not switch win/buf if getting option in current win/buf (#19383) - api: Make nvim_set_hl(ns=0, ...) redraw screen properly - api: Nvim_set_hl bail out on invalid group name (#20021) - api: Notify dict watchers on nvim_set_var and vim.g setter - api/command: Fargs behavior when no arguments are passed (#19862) - autocmds: Separate command from desc (#18617) - buffer: Disable buffer-updates before removing from window #18933 - build: Missing definitions for sizeof macros #16393 - build: Only pass -municode if MINGW #19049 - build: Strip trailing newline from variable (#19084) - build: Don't disable byte precompilation on debug builds - build: Fails if git is missing #19366 - charclass: Make behavior with empty str match latest Vim (#19749) - checkhealth: Skip vim.health #18816 - ci: Remove 2000ms blocking wait in many plugin/lsp_spec.lua tests - cmd: Make :-tabmove work with modifiers (#18447) - cmdheight=0: Various issues part3 #19816 - cmdline: Fix passing -1 as char - cmdline: Trigger CmdlineEnter and ModeChanged earlier (#19474) - cmdline: Do not trigger completion at wrong time (#19920) - cmdline: Don't send invalid cursor with incsearch and cmdheight=0 - column: Move sign sentinel after inserting/deleting lines (#20400) - completion: Remove wrong FUNC_ATTR_NONNULL_ALL (#19627) - diagnostic: Use nvim_exec_autocmds to trigger DiagnosticChanged (#18188) - diagnostic: Check for negative column value (#18868) - diagnostic: Remove buf from cache on `BufWipeout` (#20099) - diagnostic: Populate data key in DiagnosticChanged autocmd in reset (#20207) - docs: Correct obsolete note about 'writedelay' in dev docs - docs: Remove internal function from docs - edit.c: Indentkeys double indent after "!" #12894 - eval: Check for v:lua when calling callback (#19855) - eval/f_getmatches: Return empty list for invalid win argument (#18893) - events: Make CursorHold behave as documented - ex_cmds: Correct flags for :const (#19387) - exceptions: Restore `did_throw` (#20000) - exmode: Do not throttle messages when pressing enter to print line - extmarks: Make virt_lines always start at 0 virtcol - filetype: Fix and improve filetype patterns - fillchars: Change fallback after setcellwidths() - float: Make `screen*()` functions respect floating windows - float: Fix glitch when making float window with border a split - float: Fix mouse drag position if float window turned to a split - folds: Fix fold regression with :move (#18685) - folds: Fix fold remains when :delete makes buffer empty (#19673) - ftdetect: Source plugins in autogroup (#18237) - gen_vimdoc.py: Handle missing luajit - getchar: Flush screen before doing a blocking wait - handlers: More specific error messages (#16772) - health: Correct shada file path #18603 - health: Handle non-existent log file #18610 - highlight: Use ctermbg/fg instead of bg/fg when use_rgb=false #18982 - highlight: Add missing 'nocombine' to nvim_get_hl apis (#19586) - highlight: Set the window namespace when redrawing statusline - hl: Set Normal hl group sg_attr value #18820 - hl: Return cterm fg/bg even if they match Normal #18981 - inccommand: Do not try to preview an ambiguous command (#18827) - inccommand: Avoid crash if callback changes inccommand option (#18830) - inccommand: Clear cmdpreview state if preview is not shown (#18923) - inccommand: Skip split window if not enough room #18937 - inccommand: Never preview if parsing command failed (#18944) - inccommand: Parse the command to check if it is previewable - inccommand: Deal with unsynced undo (#20041) - input: Allow Ctrl-C to interrupt a recursive mapping even if mapped (#18885) - input: Fix macro recording with ALT and special key (#18917) - input: Use correct grid when restoring cursor for mapping (#19047) - input: Do no reinterpret mouse keys with ALT modifiers - input: Use click number of last click for mouse drag (#20300) - inspect: Escape identifiers that are lua keywords (#19898) - keywordprg: Default to :help if set to empty string (#19983) - l10n: Improve zh_CN and zh_TW translations (#19969) - log: Back even again - logging: Skip recursion, fix crash #18764 - logging: Make logmsg() thread-safe again - logging: Try harder to resolve Nvim "name" #19016 - lsp: Unify progress message handling (#18040) - lsp: Fix unnecessary buffers being added on empty diagnostics (#18275) - lsp: Fix infinite loop in resolved_capabilities deprecation message (#18333) - lsp: Add missing bufnr argument (#18382) - lsp: Fix rename capability checks and multi client support (#18441) - lsp: Detach spawned LSP server processes (#18477) - lsp: Perform client side filtering of code actions (#18392) - lsp: Only send diagnostics from current buffer in code_action() (#18639) - lsp: Respect global syntax setting in open float preview (#15225) - lsp: Include cancellable in progress message table (#18809) - lsp: Adjust offset encoding in lsp.buf.rename() (#18829) - lsp: Set buflisted before switching to buffer (#18854) - lsp: Fix multi client handling in code action (#18869) - lsp: Small bugs in snippet-parser #18998 - lsp: Pcall nvim_del_augroup_by_name (#19302) - lsp: Abort pending changes after flush when debouncing (#19314) - lsp: Don't attach a client in lsp.start() if there is none (#19328) - lsp: Account for initializing servers in vim.lsp.start (#19329) - lsp: Move augroup define to if statement (#19406) - lsp: Set workspace.configuration capability (#19548) - lsp: Send didOpen if name changes on write (#19583) - lsp: Prevent unexpected position jumps (#19370) - lsp: Avoid ^M character in hover window on Windows (#19640) - lsp: Set end_col in formatexpr (#19676) - lsp: Handle multiple clients with incremental sync (#19658) - lsp: Fix some type annotations in lsp.rpc (#19714) - lsp: Avoid pipe leaks if lsp cmd isn't executable (#19717) - lsp: Handle nil client in onexit callback (#19722) - lsp: Fix nil value error in get_group (#19735) - lsp: Clean the diagnostic cache when buffer delete (#19449) - lsp: When buffer detach remove buffer from client attached buffers (#20081) - lsp: Schedule removal of client object (#20148) - lsp: Support `false` result in handlers (#20252) - lsp: Out of bounds error in lsp.util.apply_text_edits (#20137) - lsp: Use correct function name in deprecated message (#20308) - lsp: Create missing directory before creating file (#19835) - lua: Don't mutate opts parameter of vim.keymap.del (#18227) - lua: Stop pending highlight.on_yank timer, if any (#18824) - lua: Highlight.on_yank can close timer in twice #18976 - lua: Clear got_int when calling vim.on_key() callback (#18979) - lua: Don't leak memory on error - lua: Double entries in :lua completion #19410 - lua: Make it possible to cancel vim.wait() with Ctrl-C (#19217) - lua: Make ui_attach()/ui_detach() take effect immediately (#20037) - lua: Make vim.str_utfindex and vim.str_byteindex handle NUL bytes - lua: Free vim.ui_attach callback before lua close (#20205) - lua: Fix architecture-dependent behavior in usercmd "reg" (#20384) - mac: Use same $LANG fallback mechanism as Vim - mac: Add CoreServices to flake.nix #18358 - man.vim: Q in "$MANPAGER mode" does not quit #18443 - maparg: Remove double allocation (#20033) - mappings: Fix double-free when unmapping simplifiable Lua mapping - mapset: Remove existing abbreviation of same lhs (#20320) - mark: Set mark fnum from buffer (#19195) - mark: Mark without a view restores at topline #19224 - mark: Fix unexpected cursor movements (#19253) - mark: Give correct error message when mark is in another buffer (#19454) - menu: Make :menu still print header when there are no menus - messages: Add color when showing nvim_echo in :messages history - messages: Do not crash on cmdheight=0 and g< redisplay - messages: Validate msg_grid before silent! message with cmdheight=0 - mksession: Don't store floats in session #18635 - mouse: Click on global statusline with splits (#19390) - mouse: Fix using uninitialized memory with K_MOUSEMOVE (#19480) - mpack: Make sure a `bool` always is a `bool` - normal: Fix segfault with bracket command jumping to a mark - options: Properly free string options (#19510) - options: Mark `winhighlight` as list style (#19477) - packaging: Remove excess forward slash in Wix Patch (#18121) - paste: Ignore mappings in Cmdline mode (#18114) - path: Path_is_url returns false for "foo:/" #19797 - powershell: Filter ":!" commands with args #19268 - pum: Make right drag in anchor grid to select work in multigrid UI (#19382) - query: Fix unnatural order for inherits in treesitter queries (#20298) - redraw: Make sure :redraw! redraws command line - redraw: Handle switching to a tabpage with larger p_ch value - redraw: Avoid unnecessary redraws and glitches with floats+messages - redraw: Make redrawdebug=nodelta handle all the cases - rpc: Break nvim_error_event feedback loop between two nvim instances - runtime/genvimvim: Omit s[ubstitute] from vimCommand #18480 - screen: Restart win_update() if a decor provider changes signcols (#18768) - screen: Check for col instead of vcol when drawing fold (#19572) - session: Respect sessionoptions=terminal #19497 - shared: Avoid indexing unindexable values in vim.tbl_get() (#18337) - signs: Priority of extmark signs (#19718) - source: Make changing 'shellslash' change expand() result - source: Fix expand('') no longer works for Lua - spell: Make setting 'encoding' clear word list - spell: Correct spell move behavior without "noplainbuffer" (#20386) - startup: Nvim with --clean should not load user rplugins - substitute: Subtract number of backslashes later - tabpage: Check if ROWS_AVAIL changed for resize (#19620) - terminal: Invalid pointer comparison #18453 - terminal: Do not trim whitespace that is actually in the terminal (#16423) - terminal: Scrollback delete lines immediately #18832 - terminal: Coverity USE_AFTER_FREE #18978 - terminal: Crash if TermClose deletes own buffer #19222 - terminal: Avoid reading over the end of cell.chars (#19580) - terminal: Skip aucmd_win when checking terminal size (#19668) - terminal: Adopt altscreen test for libvterm 0.2 changes - terminfo: Disable smglr for vtpcon and conemu (#18855) - termopen: Avoid ambiguity in URI when CWD is root dir (#16988) - tests: Fix some screen.lua warnings - tests: Fix some issues with ui/inccommand_spec.lua causing slowness - tests: Unreliable parser_spec #18911 - tests: Check for EOF on exit of nvim properly - tests: Missing clear() #18927 - tests: Remove misleading $TEST_PATH segment #19050 - tests: Remove irrelevant usage of display-=msgsep - tests: Use pending_c_parser when needed - tests: Indicate in test logs when nvim exit times out - tmpdir: Invalid tempname() if username has slashes #19323 - treesitter: Create new parser if language is not the same as cached parser (#18149) - treesitter: Bump match limit up - treesitter: Offset directive associates range with capture (#18276) - treesitter: Correct region for string parser (#18794) - treesitter: New iter if folded - treesitter: Don't error when node argument of predicate is nil (#19355) - treesitter: Free memory on removing parser (#19933) - treesitter: More efficient node:root() - treesitter: Make it get_captures_at_position - treesitter: Do not link @error by default - treesitter: Don't support legacy syntax in start() - treesitter: Use the right loading order for base queries (#20117) - treesitter: Prevent endless loop on self-inheritence - treesitter: Return full metadata for get_captures_at_position (#20203) - ts: Do not clobber spelloptions (#20095) - tui: Update modifyOtherKeys reporting (#18158) - tui: Disable extended keys before exiting alternate screen (#18318) - tui: Piping nodejs to nvim breaks input handling #18932 - tui: Resize at startup #17795 - tui: Add fixups for hterm family #19078 - tui: Handle padding requirements for visual bell (#20238) - ui: Require window-local value to show winbar on floating windows (#18773) - ui: Do not call showmode() when setting window height (#18969) - ui: Set redraw_cmdline when setting window height (#19630) - ui: Don't allow decor provider with ns_id==0 - ui: Ui compositor does not correctly free event callbacks - ui: Allow redrawing statusline when msgsep is used (#20337) - ui: Redraw end of buffer if last line is modified (#20354) - unittests: Coredump when running unit tests #18663 - usercmd: Also check for whitespace after escaped character (#19942) - version.c: Mark N/A vim patches #18587 - vim.ui.input: Accept nil or empty "opts" #19109 - window: Close floats first when closing buffer in other tab (#20284) - window: Fix equalization with cmdheight=0 (#20369) - windows: Stdpath("state") => "nvim-data" #18546 - windows: Exepath, stdpath return wrong slashes #19111 - winhl: Do not crash when unsetting winhl in just opened window - Make :undo! notify buffer update callbacks (#20344) - eval: Make Vim functions return inner window width and height (#19743) BUILD SYSTEM - Bump Doxyfile to minimum required version 1.9.0 #18118 - Bump msgpack to 4.0.0 - Enable EXITFREE on Debug builds (#17783) - Add formatting targets for c and lua files (#19488) - clang-format: Align with project style #18192 - clint: Remove all python2-isms with pyupgrade - clint: Remove "function size is too large" warning - clint: Remove rules for includes, whitespace, tabs #18611 - cmake: Simplify and speed up the uninstall target - cmake: Simplify def_cmd_target function - cmake: Use glob_wrapper instead of file(GLOB in main CMakeLists - cmake: Fix static `libintl` test on macOS - deps: Bump LuaJIT, Luv and libuv - deps: Support universal builds on macOS - deps: Bump tree-sitter to v0.20.7 (#20067) - deps: Bump tree-sitter parsers - deps: Bump required libvterm to v0.3 (#20222) - deps: Require libtermkey version 0.22 - deps: update neovim-qt, win32tools.zip PERFORMANCE - Only redraw for CurSearch when it is currently in use - highlight: Allocate permanent names in an arena for fun and cache locality - highlight: Use binary search to lookup RGB color names - map: Visit only one hash bucket instead of all, like an actual hash table - memory: Get rid of extraneous heap allocations - memory: implement arena memory allocation with a shared freelist - memory: Use an arena for RPC decoding and some API return values - messages: Don't call ui_flush() per message line in various places - treesitter: Use a reuse list for query cursors - ui: Reduce allocations when encoding and decoding "redraw" events - ui: Avoid ui_flush() work in headless mode REFACTOR - checkhealth: Rename to vim.health, move logic to Lua #18720 - Add pure attribute to pure functions - Replace char_u variables and functions with char - Enable -Wconversion warning for all Nvim source files - Add warnings for deprecated functions (#18662) - Change type of linenr_T from long to int32_t - Use nvim_get/set_option_value for vim.{b,w}o - Remove functions marked for deprecation in 0.8 (#19299) - Rename function prefix mb to the more accurate utf_cp (#19590) - Remove some unused includes - Change remaining sourcing_name/sourcing_lnum to exestack - Change FALSE/TRUE to false/true - api: Use a hashy hash for looking up api method and event names - api: Use a unpacker based on libmpack instead of msgpack-c - api: restructure api/vim.c and api/private/helpers.c code in separate files - api: Remove redundant fields of CmdParseInfo - aucmd: Call define_autocmd() directly for default autocmds - ci: Cleanup release.yml #19132 - cmd: Format do_one_cmd() - cmd: Hoist out some code into functions - cmd: Unify execute_cmd with do_one_cmd - decor: Use decor levels properly - drawline.c: Factor out utf8 multibyte check - eval: Use Hashy McHashFace instead of gperf - eval.c: Resolve all clint issues (#19774) - eval/funcs.c: Resolve all clint errors - events: Remove unnecessary fudging of updating_screen - ex_cd: Add an early return to fix clint warning - ex_docmd.c: Resolve most clint errors (#19775) - filetype: Allow vim.filetype.match to accept buf and filename (#19114) - highlight: Make hlattrs2dict always use pre-allocated dict - log: Simplify log_path_init #18898 - log: Use msg_schedule_semsg #18950 - lsp: Remove redundant client cleanup (#18744) - lsp: Make the use of local aliases more consistent - lsp: Use autocmd api (#19407) - lsp: Factor out read_loop function - lsp: Encapsulate rpc uv handle - lsp: Extract rpc client from rpc.start - lua: Replace hard-coded gsub with vim.pesc() (#18407) - lua: Reformat with stylua 0.14.0 (#19264) - lua: Git-blame-ignore stylua update PR (#19273) - lua: Replace vim.cmd use with API calls (#19283) - map: Simplify free_all_mem handling - map: Statically initialize maphash array - map: Simplify add_map params - normal: Convert function comments to doxygen format - object: Get rid of redundant FIXED_TEMP_ARRAY - ops: Doxygen docstrings #17743 - option: DRY get/set option value #19038 - plines: Use a struct for chartabsize state - provider: Use list comprehension #19027 - regexp_nfa.c: Match where Vim calls fopen() (#18778) - runtime: Convert dist#ft functions to lua (#18247) - runtime: Convert more dist#ft functions to lua (#18430) - runtime: Convert the remaining dist#ft functions to lua (#18623) - runtime: Port remaining patterns from filetype.vim to filetype.lua (#18814) - runtime: Refactor filetype.lua (#18813) - runtime: Port scripts.vim to lua (#18710) - setcellwidths: Use TV_LIST_ITEM_NEXT properly - signs: Handle non-sign attrs separately (#19784) - tests: Introduce testprg() - treesitter: Get_{nodes,captures}_at_{position,cursor} - typval: Change FC_CFUNC abstraction into FC_LUAREF - ui: Simplify stdin handling - uncrustify: Format all c code under /src/nvim/ - vim.opt: Remove del arg - vim.opt: Unify vim.bo/wo building - vim.opt: Optimize append/prepend/remove - Format runtime with stylua --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 76526d6ccb..94373dd6ef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -133,12 +133,12 @@ endif() set(NVIM_VERSION_MAJOR 0) set(NVIM_VERSION_MINOR 8) set(NVIM_VERSION_PATCH 0) -set(NVIM_VERSION_PRERELEASE "-dev") # for package maintainers +set(NVIM_VERSION_PRERELEASE "") # for package maintainers # API level set(NVIM_API_LEVEL 10) # Bump this after any API change. set(NVIM_API_LEVEL_COMPAT 0) # Adjust this after a _breaking_ API change. -set(NVIM_API_PRERELEASE true) +set(NVIM_API_PRERELEASE false) set(NVIM_VERSION_BUILD_TYPE "${CMAKE_BUILD_TYPE}") # NVIM_VERSION_CFLAGS set further below. -- cgit From 4396c3ef2cbd043bdd88c8a525f5a8caa9470f7a Mon Sep 17 00:00:00 2001 From: bfredl Date: Fri, 30 Sep 2022 17:26:25 +0200 Subject: version bump --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 94373dd6ef..35af9f88bf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -131,9 +131,9 @@ endif() # If not in a git repo (e.g., a tarball) these tokens define the complete # version string, else they are combined with the result of `git describe`. set(NVIM_VERSION_MAJOR 0) -set(NVIM_VERSION_MINOR 8) +set(NVIM_VERSION_MINOR 9) set(NVIM_VERSION_PATCH 0) -set(NVIM_VERSION_PRERELEASE "") # for package maintainers +set(NVIM_VERSION_PRERELEASE "-dev") # for package maintainers # API level set(NVIM_API_LEVEL 10) # Bump this after any API change. -- cgit From 2f80839cfe2cffcf42fe95d284a7f60f53714f67 Mon Sep 17 00:00:00 2001 From: dundargoc <33953936+dundargoc@users.noreply.github.com> Date: Sun, 2 Oct 2022 17:17:40 +0200 Subject: build: only generate compilation database for the nvim target (#20449) Some tools like clang-tidy get confused and repeat unnecessary work if there are multiple entries with the same name. This will only generate a compilation database for cmake version 3.20 and above. Generating a compilation database is only necessary for development, so we don't need to maintain compatibility with the minimum required version. Closes https://github.com/neovim/neovim/issues/10632 --- CMakeLists.txt | 2 -- 1 file changed, 2 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 35af9f88bf..78da39b211 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -143,8 +143,6 @@ set(NVIM_API_PRERELEASE false) set(NVIM_VERSION_BUILD_TYPE "${CMAKE_BUILD_TYPE}") # NVIM_VERSION_CFLAGS set further below. -set(CMAKE_EXPORT_COMPILE_COMMANDS ON) - # Log level (MIN_LOG_LEVEL in log.h) if("${MIN_LOG_LEVEL}" MATCHES "^$") # Minimize logging for release-type builds. -- cgit From 09dffb9db7d16496e55e86f78ab60241533d86f6 Mon Sep 17 00:00:00 2001 From: "Justin M. Keyes" Date: Sun, 9 Oct 2022 08:21:52 -0400 Subject: docs: various #12823 - increase python line-length limit from 88 => 100. - gen_help_html: fix bug in "tag" case (tbl_count => tbl_contains) ref #15632 fix #18215 fix #18479 fix #20527 fix #20532 Co-authored-by: Ben Weedon --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 78da39b211..6a25e1de8d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,7 @@ # CMAKE REFERENCE # intro: https://codingnest.com/basic-cmake/ # best practices (3.0+): https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1 +# pitfalls: https://izzys.casa/2019/02/everything-you-never-wanted-to-know-about-cmake/ # Version should match the tested CMAKE_URL in .github/workflows/ci.yml. cmake_minimum_required(VERSION 3.10) @@ -637,7 +638,7 @@ include(InstallHelpers) add_glob_targets( TARGET lintpy COMMAND ${FLAKE8_PRG} - FLAGS --max-line-length 88 + FLAGS --max-line-length 100 GLOB_DIRS contrib scripts src test GLOB_PAT *.py TOUCH_STRATEGY SINGLE -- cgit From 5046b4b4adb154bbdb50a5e96e29f777b5f807ac Mon Sep 17 00:00:00 2001 From: dundargoc <33953936+dundargoc@users.noreply.github.com> Date: Mon, 17 Oct 2022 17:16:31 +0200 Subject: ci: add cirrus to isCI function to skip tests (#20526) The environment variable CIRRUS_CI is manually passed to RunTests.cmake as it doesn't get passed when using cmake script mode. --- CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a25e1de8d..34eed2826b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -721,6 +721,7 @@ if(BUSTED_PRG) -DTEST_DIR=${CMAKE_CURRENT_SOURCE_DIR}/test -DBUILD_DIR=${CMAKE_BINARY_DIR} -DTEST_TYPE=unit + -DCIRRUS_CI=$ENV{CIRRUS_CI} -P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake DEPENDS ${UNITTEST_PREREQS} ${TEST_TARGET_ARGS}) @@ -751,6 +752,7 @@ if(BUSTED_PRG) -DTEST_DIR=${CMAKE_CURRENT_SOURCE_DIR}/test -DBUILD_DIR=${CMAKE_BINARY_DIR} -DTEST_TYPE=functional + -DCIRRUS_CI=$ENV{CIRRUS_CI} -P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake DEPENDS ${FUNCTIONALTEST_PREREQS} ${TEST_TARGET_ARGS}) @@ -766,6 +768,7 @@ if(BUSTED_PRG) -DTEST_DIR=${CMAKE_CURRENT_SOURCE_DIR}/test -DBUILD_DIR=${CMAKE_BINARY_DIR} -DTEST_TYPE=benchmark + -DCIRRUS_CI=$ENV{CIRRUS_CI} -P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake DEPENDS ${BENCHMARK_PREREQS} ${TEST_TARGET_ARGS}) @@ -783,6 +786,7 @@ if(BUSTED_LUA_PRG) -DTEST_DIR=${CMAKE_CURRENT_SOURCE_DIR}/test -DBUILD_DIR=${CMAKE_BINARY_DIR} -DTEST_TYPE=functional + -DCIRRUS_CI=$ENV{CIRRUS_CI} -P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake DEPENDS ${FUNCTIONALTEST_PREREQS} ${TEST_TARGET_ARGS}) -- cgit From 1d625a3cf794f49661af3f0d7cdb80c11d35c807 Mon Sep 17 00:00:00 2001 From: dundargoc <33953936+dundargoc@users.noreply.github.com> Date: Sat, 29 Oct 2022 19:42:10 +0200 Subject: build: remove python linting #20851 This includes both the `lintpy` make target and for CI. We're actively trying to reduce our python usage, so this only seems to give warnings for unimportant things such as exceeding the line after deleting python code. --- CMakeLists.txt | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 34eed2826b..e721402613 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -608,7 +608,6 @@ endif() # find_program(LUACHECK_PRG luacheck) find_program(STYLUA_PRG stylua) -find_program(FLAKE8_PRG flake8) find_program(UNCRUSTIFY_PRG uncrustify) find_program(SHELLCHECK_PRG shellcheck) @@ -635,14 +634,6 @@ add_custom_target(lintlua) add_dependencies(lintlua lintlua-luacheck lintlua-stylua) include(InstallHelpers) -add_glob_targets( - TARGET lintpy - COMMAND ${FLAKE8_PRG} - FLAGS --max-line-length 100 - GLOB_DIRS contrib scripts src test - GLOB_PAT *.py - TOUCH_STRATEGY SINGLE - ) add_glob_targets( TARGET lintsh @@ -658,7 +649,7 @@ add_custom_target(lintcommit add_dependencies(lintcommit nvim) add_custom_target(lint) -add_dependencies(lint check-single-includes lintc lintlua lintpy lintsh lintcommit lintuncrustify) +add_dependencies(lint check-single-includes lintc lintlua lintsh lintcommit lintuncrustify) # # Format -- cgit From aeb87f8b4a87e99c392e7ec11b29b715e1f31ac3 Mon Sep 17 00:00:00 2001 From: dundargoc Date: Tue, 1 Nov 2022 14:29:17 +0100 Subject: build: add EXCLUDE option to add_glob_target EXCLUDE filters out all elements containing regex, meaning it works on both files and directories. Also rename add_glob_targets to add_glob_target since only one target is being created. --- CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index e721402613..bd5a9edb6b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -611,7 +611,7 @@ find_program(STYLUA_PRG stylua) find_program(UNCRUSTIFY_PRG uncrustify) find_program(SHELLCHECK_PRG shellcheck) -add_glob_targets( +add_glob_target( REQUIRED TARGET lintlua-luacheck COMMAND ${LUACHECK_PRG} @@ -621,7 +621,7 @@ add_glob_targets( TOUCH_STRATEGY SINGLE ) -add_glob_targets( +add_glob_target( TARGET lintlua-stylua COMMAND ${STYLUA_PRG} FLAGS --color=always --check @@ -635,7 +635,7 @@ add_dependencies(lintlua lintlua-luacheck lintlua-stylua) include(InstallHelpers) -add_glob_targets( +add_glob_target( TARGET lintsh COMMAND ${SHELLCHECK_PRG} FILES scripts/vim-patch.sh -- cgit From 502b5ee10fedc97e1455e7365a10c9bad7268c67 Mon Sep 17 00:00:00 2001 From: dundargoc Date: Sun, 30 Oct 2022 13:50:41 +0100 Subject: build(lint): add more shell scripts to lintsh --- CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index bd5a9edb6b..a78b8d5e47 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -638,7 +638,13 @@ include(InstallHelpers) add_glob_target( TARGET lintsh COMMAND ${SHELLCHECK_PRG} - FILES scripts/vim-patch.sh + FLAGS -x -a + GLOB_DIRS scripts ci + GLOB_PAT *.sh + EXCLUDE + scripts/pvscheck.sh + ci/common + ci/snap TOUCH_STRATEGY SINGLE ) -- cgit From 2755510f7800ff675a5fbe2cfaa59459ff3ab6b2 Mon Sep 17 00:00:00 2001 From: dundargoc Date: Sat, 12 Nov 2022 13:34:14 +0100 Subject: ci(windows): treat compiler warnings as errors Reduce the warning level from 3 to 1 and fix all warnings. --- CMakeLists.txt | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index a78b8d5e47..a6e0ee017a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,12 @@ # Version should match the tested CMAKE_URL in .github/workflows/ci.yml. cmake_minimum_required(VERSION 3.10) + +# Can be removed once minimum version is at least 3.15 +if(POLICY CMP0092) + cmake_policy(SET CMP0092 NEW) +endif() + project(nvim C) if(POLICY CMP0075) @@ -270,7 +276,7 @@ int main(void) option(ENABLE_COMPILER_SUGGESTIONS "Enable -Wsuggest compiler warnings" OFF) if(MSVC) # XXX: /W4 gives too many warnings. #3241 - add_compile_options(/W3) + add_compile_options(-W1 -wd4311) add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE) add_definitions(-DMSWIN) else() @@ -364,10 +370,14 @@ option(CI_BUILD "CI, extra flags will be set" OFF) if(CI_BUILD) message(STATUS "CI build enabled") - add_compile_options(-Werror) - if(DEFINED ENV{BUILD_UCHAR}) - # Get some test coverage for unsigned char - add_compile_options(-funsigned-char) + if(MSVC) + add_compile_options(-WX) + else() + add_compile_options(-Werror) + if(DEFINED ENV{BUILD_UCHAR}) + # Get some test coverage for unsigned char + add_compile_options(-funsigned-char) + endif() endif() endif() -- cgit From 66360675cf4d091b7460e4a8e1435c13216c1929 Mon Sep 17 00:00:00 2001 From: dundargoc Date: Sun, 11 Sep 2022 17:12:44 +0200 Subject: build: allow IWYU to fix includes for all .c files Allow Include What You Use to remove unnecessary includes and only include what is necessary. This helps with reducing compilation times and makes it easier to visualise which dependencies are actually required. Work on https://github.com/neovim/neovim/issues/549, but doesn't close it since this only works fully for .c files and not headers. --- CMakeLists.txt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index a78b8d5e47..6d5e7a8c1c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -186,6 +186,20 @@ if(CMAKE_C_FLAGS_RELWITHDEBINFO MATCHES DNDEBUG) string(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") endif() +option(ENABLE_IWYU "Run include-what-you-use with the compiler." OFF) +if(ENABLE_IWYU) + find_program(IWYU_PRG NAMES include-what-you-use iwyu) + if(NOT IWYU_PRG) + message(FATAL_ERROR "ENABLE_IWYU is ON but include-what-you-use is not found!") + endif() + set(CMAKE_C_INCLUDE_WHAT_YOU_USE ${IWYU_PRG} + -Xiwyu --mapping_file=${PROJECT_SOURCE_DIR}/cmake.config/iwyu/mapping.imp + -Xiwyu --mapping_file=${PROJECT_SOURCE_DIR}/cmake.config/iwyu/gcc.libc.imp + -Xiwyu --mapping_file=${PROJECT_SOURCE_DIR}/cmake.config/iwyu/gcc.symbols.imp + -Xiwyu --no_default_mappings) + add_definitions(-DEXITFREE) +endif() + # gcc 4.0+ sets _FORTIFY_SOURCE=2 automatically. This currently # does not work with Neovim due to some uses of dynamically-sized structures. # https://github.com/neovim/neovim/issues/223 -- cgit From a7332ba9b429f9676723eb88cffb2068f5a95c9b Mon Sep 17 00:00:00 2001 From: Tom Churchman Date: Mon, 19 Dec 2022 00:10:47 +0100 Subject: fix(tui): set cursor color param as string when required #21407 Problem: See #20628. Terminals supporting cursor color changing usually set the "user-defined" `Cs` terminfo capability. Most terminals expect the parameter to the capability to be a string (in hex format like `#0099ff` or like `rgb:00/99/ff`), others may expect a number. Nvim currently can't handle string parameters, causing terminals to receive a bogus command. Unfortunately, as the `Cs` capability is "user-defined", there's no strict format. The parameter it takes isn't really standardized. It seems most terminals in use follow xterm; iTerm appears to be an exception. Solution: Use the `Cs` capability more reliable by following terminfo and sending the color in hex format, at the cost of using unibilium string vars. Alternatively, could revert https://github.com/neovim/neovim/commit/34d41baf8a8e4ab8c006b7f29a8106e60e311aa2 and hardcode the specific format required by terminals, instead of reading terminfo. Fixes #20628 Fixes #19607 --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 10106f9499..a47869a3c6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -512,6 +512,7 @@ if(FEAT_TUI) int main(void) { + unibi_str_from_var(unibi_var_from_str(\"\")); return unibi_num_from_var(unibi_var_from_num(0)); } " UNIBI_HAS_VAR_FROM) -- cgit From 43e8ec92de9e0850e7d202cb7ff9051bc408447e Mon Sep 17 00:00:00 2001 From: bfredl Date: Mon, 2 May 2022 21:10:01 +0200 Subject: fix(tui): more work in the TUI --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index a47869a3c6..c3f490fc83 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -143,9 +143,9 @@ set(NVIM_VERSION_PATCH 0) set(NVIM_VERSION_PRERELEASE "-dev") # for package maintainers # API level -set(NVIM_API_LEVEL 10) # Bump this after any API change. +set(NVIM_API_LEVEL 11) # Bump this after any API change. set(NVIM_API_LEVEL_COMPAT 0) # Adjust this after a _breaking_ API change. -set(NVIM_API_PRERELEASE false) +set(NVIM_API_PRERELEASE true) set(NVIM_VERSION_BUILD_TYPE "${CMAKE_BUILD_TYPE}") # NVIM_VERSION_CFLAGS set further below. -- cgit From 9fdcbbb4063daa125e420e0ffe9dae6801c264bc Mon Sep 17 00:00:00 2001 From: bfredl Date: Tue, 27 Dec 2022 14:43:03 +0100 Subject: feat(tui): graduate the +tui feature This was previously disabled due to build issues on windows. Any reasonable platform can now be expected to have the necessary interfaces to build and run the TUI subsystem. Runtime quality issues of using the TUI (on any new platform) are not relevant here. Just run Nvim in an external UI instead of the TUI as always. --- CMakeLists.txt | 46 +++++++++++++++++++++------------------------- 1 file changed, 21 insertions(+), 25 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index c3f490fc83..cb5cb09595 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -498,34 +498,30 @@ if(MSGPACK_HAS_FLOAT32) add_definitions(-DNVIM_MSGPACK_HAS_FLOAT32) endif() -option(FEAT_TUI "Enable the Terminal UI" ON) - -if(FEAT_TUI) - find_package(UNIBILIUM 2.0 REQUIRED) - include_directories(SYSTEM ${UNIBILIUM_INCLUDE_DIRS}) - - list(APPEND CMAKE_REQUIRED_INCLUDES "${UNIBILIUM_INCLUDE_DIRS}") - list(APPEND CMAKE_REQUIRED_LIBRARIES "${UNIBILIUM_LIBRARIES}") - check_c_source_compiles(" - #include - - int - main(void) - { - unibi_str_from_var(unibi_var_from_str(\"\")); - return unibi_num_from_var(unibi_var_from_num(0)); - } - " UNIBI_HAS_VAR_FROM) - list(REMOVE_ITEM CMAKE_REQUIRED_INCLUDES "${UNIBILIUM_INCLUDE_DIRS}") - list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES "${UNIBILIUM_LIBRARIES}") - if(UNIBI_HAS_VAR_FROM) - add_definitions(-DNVIM_UNIBI_HAS_VAR_FROM) - endif() +find_package(UNIBILIUM 2.0 REQUIRED) +include_directories(SYSTEM ${UNIBILIUM_INCLUDE_DIRS}) + +list(APPEND CMAKE_REQUIRED_INCLUDES "${UNIBILIUM_INCLUDE_DIRS}") +list(APPEND CMAKE_REQUIRED_LIBRARIES "${UNIBILIUM_LIBRARIES}") +check_c_source_compiles(" +#include - find_package(LibTermkey 0.22 REQUIRED) - include_directories(SYSTEM ${LIBTERMKEY_INCLUDE_DIRS}) +int +main(void) +{ + unibi_str_from_var(unibi_var_from_str(\"\")); + return unibi_num_from_var(unibi_var_from_num(0)); +} +" UNIBI_HAS_VAR_FROM) +list(REMOVE_ITEM CMAKE_REQUIRED_INCLUDES "${UNIBILIUM_INCLUDE_DIRS}") +list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES "${UNIBILIUM_LIBRARIES}") +if(UNIBI_HAS_VAR_FROM) + add_definitions(-DNVIM_UNIBI_HAS_VAR_FROM) endif() +find_package(LibTermkey 0.22 REQUIRED) +include_directories(SYSTEM ${LIBTERMKEY_INCLUDE_DIRS}) + find_package(LIBVTERM 0.3 REQUIRED) include_directories(SYSTEM ${LIBVTERM_INCLUDE_DIRS}) -- cgit From 623dad1a2c7d18a5b25313d02a93849401b73c4a Mon Sep 17 00:00:00 2001 From: dundargoc Date: Sat, 7 Jan 2023 13:36:26 +0100 Subject: build: remove workaround for old luajit versions Luajit version 2.1.0-beta3 was released 2017, there's no reason to use such an old version on macOS. Also, the version check doesn't work anymore as LUAJIT_VERSION seems to not be defined anywhere. --- CMakeLists.txt | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index cb5cb09595..9eb701dd3f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -414,16 +414,6 @@ if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") add_definitions(-D_GNU_SOURCE) endif() -if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_SIZEOF_VOID_P EQUAL 8 AND NOT PREFER_LUA AND LUAJIT_VERSION LESS "2.1.0-beta3") - # Required for luajit < 2.1.0-beta3. - set(CMAKE_EXE_LINKER_FLAGS - "${CMAKE_EXE_LINKER_FLAGS} -pagezero_size 10000 -image_base 100000000") - set(CMAKE_SHARED_LINKER_FLAGS - "${CMAKE_SHARED_LINKER_FLAGS} -image_base 100000000") - set(CMAKE_MODULE_LINKER_FLAGS - "${CMAKE_MODULE_LINKER_FLAGS} -image_base 100000000") -endif() - include_directories("${PROJECT_BINARY_DIR}/cmake.config") include_directories("${PROJECT_SOURCE_DIR}/src") -- cgit From 438b4361cc761a2950689668f008cfe06c1510f7 Mon Sep 17 00:00:00 2001 From: dundargoc <33953936+dundargoc@users.noreply.github.com> Date: Tue, 10 Jan 2023 18:49:57 +0100 Subject: build: use modern cmake (#21589) Replace old-school cmake with the so-called "Modern CMake", meaning preferring using targets and properties over directory settings and variables. This allows greater flexibility, robustness and clarity over how the code works. The following deprecated commands will be replaced with their modern alternatives that operates on a specific target, rather than all targets in the current directory: - add_compile_options -> target_compile_options - include_directories -> target_include_directories - link_libraries -> target_link_libraries - add_definitions -> target_compile_definitions There are mainly four main targets that we currently use: nvim, libnvim, nvim-test (used by unittests) and ${texe} (used by check-single-includes). The goal is to explicitly define the dependencies of each target fully, rather than having everything be dependent on everything else. --- CMakeLists.txt | 375 ++++----------------------------------------------------- 1 file changed, 22 insertions(+), 353 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 9eb701dd3f..878d5134ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,10 @@ endif() # Point CMake at any custom modules we may ship list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") -# We don't support building in-tree. +include(CheckCCompilerFlag) +include(CheckCSourceCompiles) +include(InstallHelpers) +include(LuaHelpers) # Find Lua interpreter include(PreventInTreeBuilds) include(Util) @@ -78,9 +81,6 @@ endif() list(INSERT CMAKE_PREFIX_PATH 0 ${DEPS_PREFIX}) set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${DEPS_PREFIX}/lib/pkgconfig") -# used for check_c_compiler_flag -include(CheckCCompilerFlag) - if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") # CMake tries to treat /sw and /opt/local as extension of the system path, but # that doesn't really work out very well. Once you have a dependency that @@ -98,7 +98,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") OUTPUT_STRIP_TRAILING_WHITESPACE) set(CMAKE_OSX_DEPLOYMENT_TARGET "${MACOS_VERSION}") endif() - message("Using deployment target ${CMAKE_OSX_DEPLOYMENT_TARGET}") + message(STATUS "Using deployment target ${CMAKE_OSX_DEPLOYMENT_TARGET}") # Work around some old, broken detection by CMake for knowing when to use the # isystem flag. Apple's compilers have supported this for quite some time @@ -115,8 +115,6 @@ if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Darwin") set(USE_FNAME_CASE TRUE) endif() -option(ENABLE_LIBINTL "enable libintl" ON) -option(ENABLE_LIBICONV "enable libiconv" ON) if (MINGW) # Disable LTO by default as it may not compile # See https://github.com/Alexpux/MINGW-packages/issues/3516 @@ -192,24 +190,9 @@ if(CMAKE_C_FLAGS_RELWITHDEBINFO MATCHES DNDEBUG) string(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") endif() -option(ENABLE_IWYU "Run include-what-you-use with the compiler." OFF) -if(ENABLE_IWYU) - find_program(IWYU_PRG NAMES include-what-you-use iwyu) - if(NOT IWYU_PRG) - message(FATAL_ERROR "ENABLE_IWYU is ON but include-what-you-use is not found!") - endif() - set(CMAKE_C_INCLUDE_WHAT_YOU_USE ${IWYU_PRG} - -Xiwyu --mapping_file=${PROJECT_SOURCE_DIR}/cmake.config/iwyu/mapping.imp - -Xiwyu --mapping_file=${PROJECT_SOURCE_DIR}/cmake.config/iwyu/gcc.libc.imp - -Xiwyu --mapping_file=${PROJECT_SOURCE_DIR}/cmake.config/iwyu/gcc.symbols.imp - -Xiwyu --no_default_mappings) - add_definitions(-DEXITFREE) -endif() - # gcc 4.0+ sets _FORTIFY_SOURCE=2 automatically. This currently # does not work with Neovim due to some uses of dynamically-sized structures. # https://github.com/neovim/neovim/issues/223 -include(CheckCSourceCompiles) # Include the build type's default flags in the check for _FORTIFY_SOURCE, # otherwise we may incorrectly identify the level as acceptable and find out @@ -221,300 +204,8 @@ if(${INIT_FLAGS_NAME}) set(CMAKE_REQUIRED_FLAGS "${${INIT_FLAGS_NAME}}") endif() -# Include because some toolchains define _FORTIFY_SOURCE=2 in -# internal header files, which should in turn be #included by . -check_c_source_compiles(" -#include - -#if defined(_FORTIFY_SOURCE) && _FORTIFY_SOURCE > 1 -#error \"_FORTIFY_SOURCE > 1\" -#endif -int -main(void) -{ - return 0; -} -" HAS_ACCEPTABLE_FORTIFY) - -if(NOT HAS_ACCEPTABLE_FORTIFY) - message(STATUS "Unsupported _FORTIFY_SOURCE found, forcing _FORTIFY_SOURCE=1") - # Extract possible prefix to _FORTIFY_SOURCE (e.g. -Wp,-D_FORTIFY_SOURCE). - STRING(REGEX MATCH "[^\ ]+-D_FORTIFY_SOURCE" _FORTIFY_SOURCE_PREFIX "${CMAKE_C_FLAGS}") - STRING(REPLACE "-D_FORTIFY_SOURCE" "" _FORTIFY_SOURCE_PREFIX "${_FORTIFY_SOURCE_PREFIX}" ) - if(NOT _FORTIFY_SOURCE_PREFIX STREQUAL "") - message(STATUS "Detected _FORTIFY_SOURCE Prefix=${_FORTIFY_SOURCE_PREFIX}") - endif() - # -U in add_definitions doesn't end up in the correct spot, so we add it to - # the flags variable instead. - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_FORTIFY_SOURCE_PREFIX}-U_FORTIFY_SOURCE ${_FORTIFY_SOURCE_PREFIX}-D_FORTIFY_SOURCE=1") -endif() - -# Remove --sort-common from linker flags, as this seems to cause bugs (see #2641, #3374). -# TODO: Figure out the root cause. -if(CMAKE_EXE_LINKER_FLAGS MATCHES "--sort-common" OR - CMAKE_SHARED_LINKER_FLAGS MATCHES "--sort-common" OR - CMAKE_MODULE_LINKER_FLAGS MATCHES "--sort-common") - message(STATUS "Removing --sort-common from linker flags") - string(REGEX REPLACE ",--sort-common(=[^,]+)?" "" CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") - string(REGEX REPLACE ",--sort-common(=[^,]+)?" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") - string(REGEX REPLACE ",--sort-common(=[^,]+)?" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") - - # If no linker flags remain for a -Wl argument, remove it. - # '-Wl$' will match LDFLAGS="-Wl,--sort-common", - # '-Wl ' will match LDFLAGS="-Wl,--sort-common -Wl,..." - string(REGEX REPLACE "-Wl($| )" "" CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}") - string(REGEX REPLACE "-Wl($| )" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") - string(REGEX REPLACE "-Wl($| )" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") -endif() - -check_c_source_compiles(" -#include -int main(void) -{ - void *trace[1]; - backtrace(trace, 1); - return 0; -} -" HAVE_EXECINFO_BACKTRACE) - -check_c_source_compiles(" -int main(void) -{ - int a = 42; - __builtin_add_overflow(a, a, &a); - __builtin_sub_overflow(a, a, &a); - return 0; -} -" HAVE_BUILTIN_ADD_OVERFLOW) - -option(ENABLE_COMPILER_SUGGESTIONS "Enable -Wsuggest compiler warnings" OFF) -if(MSVC) - # XXX: /W4 gives too many warnings. #3241 - add_compile_options(-W1 -wd4311) - add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE) - add_definitions(-DMSWIN) -else() - add_compile_options(-Wall -Wextra -pedantic -Wno-unused-parameter - -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion - -Wdouble-promotion - -Wmissing-noreturn - -Wmissing-format-attribute - -Wmissing-prototypes) - - check_c_compiler_flag(-Wimplicit-fallthrough HAVE_WIMPLICIT_FALLTHROUGH_FLAG) - if(HAVE_WIMPLICIT_FALLTHROUGH_FLAG) - add_compile_options(-Wimplicit-fallthrough) - endif() - - if(ENABLE_COMPILER_SUGGESTIONS) - # Clang doesn't have -Wsuggest-attribute so check for each one. - check_c_compiler_flag(-Wsuggest-attribute=pure HAVE_WSUGGEST_ATTRIBUTE_PURE) - if(HAVE_WSUGGEST_ATTRIBUTE_PURE) - add_compile_options(-Wsuggest-attribute=pure) - endif() - - check_c_compiler_flag(-Wsuggest-attribute=const HAVE_WSUGGEST_ATTRIBUTE_CONST) - if(HAVE_WSUGGEST_ATTRIBUTE_CONST) - add_compile_options(-Wsuggest-attribute=const) - endif() - - check_c_compiler_flag(-Wsuggest-attribute=malloc HAVE_WSUGGEST_ATTRIBUTE_MALLOC) - if(HAVE_WSUGGEST_ATTRIBUTE_MALLOC) - add_compile_options(-Wsuggest-attribute=malloc) - endif() - - check_c_compiler_flag(-Wsuggest-attribute=cold HAVE_WSUGGEST_ATTRIBUTE_COLD) - if(HAVE_WSUGGEST_ATTRIBUTE_COLD) - add_compile_options(-Wsuggest-attribute=cold) - endif() - endif() - - # On FreeBSD 64 math.h uses unguarded C11 extension, which taints clang - # 3.4.1 used there. - if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" AND CMAKE_C_COMPILER_ID MATCHES "Clang") - add_compile_options(-Wno-c11-extensions) - endif() -endif() - -if(MINGW) - # Use POSIX compatible stdio in Mingw - add_definitions(-D__USE_MINGW_ANSI_STDIO) - add_definitions(-DMSWIN) -endif() -if(WIN32) - # Windows Vista is the minimum supported version - add_definitions(-D_WIN32_WINNT=0x0600) -endif() - -# OpenBSD's GCC (4.2.1) doesn't have -Wvla -check_c_compiler_flag(-Wvla HAS_WVLA_FLAG) -if(HAS_WVLA_FLAG) - add_compile_options(-Wvla) -endif() - -if(UNIX) - # -fstack-protector breaks non Unix builds even in Mingw-w64 - check_c_compiler_flag(-fstack-protector-strong HAS_FSTACK_PROTECTOR_STRONG_FLAG) - check_c_compiler_flag(-fstack-protector HAS_FSTACK_PROTECTOR_FLAG) - - if(HAS_FSTACK_PROTECTOR_STRONG_FLAG) - add_compile_options(-fstack-protector-strong) - link_libraries(-fstack-protector-strong) - elseif(HAS_FSTACK_PROTECTOR_FLAG) - add_compile_options(-fstack-protector --param ssp-buffer-size=4) - link_libraries(-fstack-protector --param ssp-buffer-size=4) - endif() -endif() - -check_c_compiler_flag(-fno-common HAVE_FNO_COMMON) -if (HAVE_FNO_COMMON) - add_compile_options(-fno-common) -endif() - -check_c_compiler_flag(-fdiagnostics-color=auto HAS_DIAG_COLOR_FLAG) -if(HAS_DIAG_COLOR_FLAG) - if(CMAKE_GENERATOR MATCHES "Ninja") - add_compile_options(-fdiagnostics-color=always) - else() - add_compile_options(-fdiagnostics-color=auto) - endif() -endif() - -option(CI_BUILD "CI, extra flags will be set" OFF) - -if(CI_BUILD) - message(STATUS "CI build enabled") - if(MSVC) - add_compile_options(-WX) - else() - add_compile_options(-Werror) - if(DEFINED ENV{BUILD_UCHAR}) - # Get some test coverage for unsigned char - add_compile_options(-funsigned-char) - endif() - endif() -endif() - option(LOG_LIST_ACTIONS "Add list actions logging" OFF) -add_definitions(-DINCLUDE_GENERATED_DECLARATIONS) - -if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang") - if(CMAKE_SYSTEM_NAME STREQUAL "SunOS") - set(NO_UNDEFINED "-Wl,--no-undefined -lsocket") - elseif(NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(NO_UNDEFINED "-Wl,--no-undefined") - endif() - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${NO_UNDEFINED}") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${NO_UNDEFINED}") - - # For O_CLOEXEC, O_DIRECTORY, and O_NOFOLLOW flags on older systems - # (pre POSIX.1-2008: glibc 2.11 and earlier). #4042 - # For ptsname(). #6743 - add_definitions(-D_GNU_SOURCE) -endif() - -include_directories("${PROJECT_BINARY_DIR}/cmake.config") -include_directories("${PROJECT_SOURCE_DIR}/src") - -find_package(LibUV 1.28.0 REQUIRED) -include_directories(SYSTEM ${LIBUV_INCLUDE_DIRS}) - -find_package(Msgpack 1.0.0 REQUIRED) -include_directories(SYSTEM ${MSGPACK_INCLUDE_DIRS}) - -find_package(LibLUV 1.43.0 REQUIRED) -include_directories(SYSTEM ${LIBLUV_INCLUDE_DIRS}) - -find_package(TreeSitter REQUIRED) -include_directories(SYSTEM ${TreeSitter_INCLUDE_DIRS}) - -list(APPEND CMAKE_REQUIRED_INCLUDES "${TreeSitter_INCLUDE_DIRS}") -list(APPEND CMAKE_REQUIRED_LIBRARIES "${TreeSitter_LIBRARIES}") -check_c_source_compiles(" -#include -int -main(void) -{ - TSQueryCursor *cursor = ts_query_cursor_new(); - ts_query_cursor_set_match_limit(cursor, 32); - return 0; -} -" TS_HAS_SET_MATCH_LIMIT) -if(TS_HAS_SET_MATCH_LIMIT) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNVIM_TS_HAS_SET_MATCH_LIMIT") -endif() -check_c_source_compiles(" -#include -#include -int -main(void) -{ - ts_set_allocator(malloc, calloc, realloc, free); - return 0; -} -" TS_HAS_SET_ALLOCATOR) -if(TS_HAS_SET_ALLOCATOR) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNVIM_TS_HAS_SET_ALLOCATOR") -endif() - -# The unit test lib requires LuaJIT; it will be skipped if LuaJIT is missing. -option(PREFER_LUA "Prefer Lua over LuaJIT in the nvim executable." OFF) - -if(PREFER_LUA) - find_package(Lua 5.1 EXACT REQUIRED) - set(LUA_PREFERRED_INCLUDE_DIRS ${LUA_INCLUDE_DIR}) - set(LUA_PREFERRED_LIBRARIES ${LUA_LIBRARIES}) - # Passive (not REQUIRED): if LUAJIT_FOUND is not set, nvim-test is skipped. - find_package(LuaJit) -else() - find_package(LuaJit REQUIRED) - set(LUA_PREFERRED_INCLUDE_DIRS ${LUAJIT_INCLUDE_DIRS}) - set(LUA_PREFERRED_LIBRARIES ${LUAJIT_LIBRARIES}) -endif() - -list(APPEND CMAKE_REQUIRED_INCLUDES "${MSGPACK_INCLUDE_DIRS}") -check_c_source_compiles(" -#include - -int -main(void) -{ - return MSGPACK_OBJECT_FLOAT32; -} -" MSGPACK_HAS_FLOAT32) -list(REMOVE_ITEM CMAKE_REQUIRED_INCLUDES "${MSGPACK_INCLUDE_DIRS}") -if(MSGPACK_HAS_FLOAT32) - add_definitions(-DNVIM_MSGPACK_HAS_FLOAT32) -endif() - -find_package(UNIBILIUM 2.0 REQUIRED) -include_directories(SYSTEM ${UNIBILIUM_INCLUDE_DIRS}) - -list(APPEND CMAKE_REQUIRED_INCLUDES "${UNIBILIUM_INCLUDE_DIRS}") -list(APPEND CMAKE_REQUIRED_LIBRARIES "${UNIBILIUM_LIBRARIES}") -check_c_source_compiles(" -#include - -int -main(void) -{ - unibi_str_from_var(unibi_var_from_str(\"\")); - return unibi_num_from_var(unibi_var_from_num(0)); -} -" UNIBI_HAS_VAR_FROM) -list(REMOVE_ITEM CMAKE_REQUIRED_INCLUDES "${UNIBILIUM_INCLUDE_DIRS}") -list(REMOVE_ITEM CMAKE_REQUIRED_LIBRARIES "${UNIBILIUM_LIBRARIES}") -if(UNIBI_HAS_VAR_FROM) - add_definitions(-DNVIM_UNIBI_HAS_VAR_FROM) -endif() - -find_package(LibTermkey 0.22 REQUIRED) -include_directories(SYSTEM ${LIBTERMKEY_INCLUDE_DIRS}) - -find_package(LIBVTERM 0.3 REQUIRED) -include_directories(SYSTEM ${LIBVTERM_INCLUDE_DIRS}) - option(CLANG_ASAN_UBSAN "Enable Clang address & undefined behavior sanitizer for nvim binary." OFF) option(CLANG_MSAN "Enable Clang memory sanitizer for nvim binary." OFF) option(CLANG_TSAN "Enable Clang thread sanitizer for nvim binary." OFF) @@ -529,22 +220,6 @@ if((CLANG_ASAN_UBSAN OR CLANG_MSAN OR CLANG_TSAN) AND NOT CMAKE_C_COMPILER_ID MA message(FATAL_ERROR "Sanitizers are only supported for Clang") endif() -if(ENABLE_LIBICONV) - find_package(Iconv REQUIRED) - include_directories(SYSTEM ${Iconv_INCLUDE_DIRS}) -endif() - -if(ENABLE_LIBINTL) - # LibIntl (not Intl) selects our FindLibIntl.cmake script. #8464 - find_package(LibIntl REQUIRED) - include_directories(SYSTEM ${LibIntl_INCLUDE_DIRS}) -endif() - -# Determine platform's threading library. Set CMAKE_THREAD_PREFER_PTHREAD -# explicitly to indicate a strong preference for pthread. -set(CMAKE_THREAD_PREFER_PTHREAD ON) -find_package(Threads REQUIRED) - # Place targets in bin/ or lib/ for all build configurations set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) @@ -556,8 +231,6 @@ foreach(CFGNAME ${CMAKE_CONFIGURATION_TYPES}) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CFGNAME} ${CMAKE_BINARY_DIR}/lib) endforeach() -# Find Lua interpreter -include(LuaHelpers) set(LUA_DEPENDENCIES lpeg mpack bit) if(NOT LUA_PRG) foreach(CURRENT_LUA_PRG luajit lua5.1 lua5.2 lua) @@ -607,13 +280,6 @@ if(LUAC_PRG) message(STATUS "Using Lua compiler: ${LUAC_PRG}") endif() -# Setup busted. -find_program(BUSTED_PRG NAMES busted busted.bat) -find_program(BUSTED_LUA_PRG busted-lua) -if(NOT BUSTED_OUTPUT_TYPE) - set(BUSTED_OUTPUT_TYPE "nvim") -endif() - # # Lint # @@ -644,8 +310,6 @@ add_glob_target( add_custom_target(lintlua) add_dependencies(lintlua lintlua-luacheck lintlua-stylua) -include(InstallHelpers) - add_glob_target( TARGET lintsh COMMAND ${SHELLCHECK_PRG} @@ -685,6 +349,11 @@ install_helper( FILES ${CMAKE_SOURCE_DIR}/src/man/nvim.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) +option(ENABLE_LIBICONV "enable libiconv" ON) +if(ENABLE_LIBICONV) + find_package(Iconv REQUIRED) +endif() + # # Go down the tree. # @@ -702,17 +371,17 @@ if(WIN32) DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim-qt/runtime/plugin) endif() +# Setup busted. +find_program(BUSTED_PRG NAMES busted busted.bat) +find_program(BUSTED_LUA_PRG busted-lua) +if(NOT BUSTED_OUTPUT_TYPE) + set(BUSTED_OUTPUT_TYPE "nvim") +endif() + # Setup some test-related bits. We do this after going down the tree because we # need some of the targets. if(BUSTED_PRG) - get_property(TEST_INCLUDE_DIRS DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - PROPERTY INCLUDE_DIRECTORIES) - - # When running tests from 'ninja' we need to use the - # console pool: to do so we need to use the USES_TERMINAL - # option, but this is only available in CMake 3.2 - set(TEST_TARGET_ARGS) - list(APPEND TEST_TARGET_ARGS "USES_TERMINAL") + get_target_property(TEST_INCLUDE_DIRS main_lib INTERFACE_INCLUDE_DIRECTORIES) set(UNITTEST_PREREQS nvim-test unittest-headers) set(FUNCTIONALTEST_PREREQS nvim printenv-test printargs-test shell-test pwsh-test streams-test tty-test ${GENERATED_HELP_TAGS}) @@ -732,7 +401,7 @@ if(BUSTED_PRG) -DCIRRUS_CI=$ENV{CIRRUS_CI} -P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake DEPENDS ${UNITTEST_PREREQS} - ${TEST_TARGET_ARGS}) + USES_TERMINAL) set_target_properties(unittest PROPERTIES FOLDER test) else() message(WARNING "disabling unit tests: no Luajit FFI in ${LUA_PRG}") @@ -763,7 +432,7 @@ if(BUSTED_PRG) -DCIRRUS_CI=$ENV{CIRRUS_CI} -P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake DEPENDS ${FUNCTIONALTEST_PREREQS} - ${TEST_TARGET_ARGS}) + USES_TERMINAL) set_target_properties(functionaltest PROPERTIES FOLDER test) add_custom_target(benchmark @@ -779,7 +448,7 @@ if(BUSTED_PRG) -DCIRRUS_CI=$ENV{CIRRUS_CI} -P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake DEPENDS ${BENCHMARK_PREREQS} - ${TEST_TARGET_ARGS}) + USES_TERMINAL) set_target_properties(benchmark PROPERTIES FOLDER test) endif() @@ -797,7 +466,7 @@ if(BUSTED_LUA_PRG) -DCIRRUS_CI=$ENV{CIRRUS_CI} -P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake DEPENDS ${FUNCTIONALTEST_PREREQS} - ${TEST_TARGET_ARGS}) + USES_TERMINAL) set_target_properties(functionaltest-lua PROPERTIES FOLDER test) endif() -- cgit From a0b2c124a3cba591575ecf6d2dfe91f515c2ebe2 Mon Sep 17 00:00:00 2001 From: dundargoc <33953936+dundargoc@users.noreply.github.com> Date: Thu, 12 Jan 2023 16:49:17 +0100 Subject: build: include our libraries before system libraries (#21746) Including our libraries as system libraries is helpful to suppress any warnings, but the default behavior is to include it after existing libraries. This can become a problem with some package managers such as macports, as CMake automatically adds /opt/local to the include path, which is where they store all includes. This means that the wrong header might be chosen if it has the same name as the one from our dependencies. Adding the BEFORE keyword when including will ensure that our dependency headers are chosen first. Also remove old Darwin workarounds that shouldn't be necessary anymore. Closes: https://github.com/neovim/neovim/issues/21742 --- CMakeLists.txt | 15 --------------- 1 file changed, 15 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 878d5134ab..949de8487d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,14 +82,6 @@ list(INSERT CMAKE_PREFIX_PATH 0 ${DEPS_PREFIX}) set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${DEPS_PREFIX}/lib/pkgconfig") if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - # CMake tries to treat /sw and /opt/local as extension of the system path, but - # that doesn't really work out very well. Once you have a dependency that - # resides there and have to add it as an include directory, then any other - # dependency that could be satisfied from there must be--otherwise you can end - # up with conflicting versions. So, let's make them more of a priority having - # them be included as one of the first places to look for dependencies. - list(APPEND CMAKE_PREFIX_PATH /sw /opt/local) - # If the macOS deployment target is not set manually (via $MACOSX_DEPLOYMENT_TARGET), # fall back to local system version. Needs to be done both here and in cmake.deps. if(NOT CMAKE_OSX_DEPLOYMENT_TARGET) @@ -99,13 +91,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") set(CMAKE_OSX_DEPLOYMENT_TARGET "${MACOS_VERSION}") endif() message(STATUS "Using deployment target ${CMAKE_OSX_DEPLOYMENT_TARGET}") - - # Work around some old, broken detection by CMake for knowing when to use the - # isystem flag. Apple's compilers have supported this for quite some time - # now. - if(CMAKE_C_COMPILER_ID MATCHES "GNU") - set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ") - endif() endif() if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Darwin") -- cgit From 9220755302317e8030c5bbf334357c0d64df9fa4 Mon Sep 17 00:00:00 2001 From: dundargoc <33953936+dundargoc@users.noreply.github.com> Date: Sat, 14 Jan 2023 00:48:10 +0100 Subject: build: remove clint error suppression #21782 Fix remaining clint errors and remove error suppression completely. Rename the lint targets to align with the established naming convention: - lintc-clint lints with clint.py. - lintc-uncrustify lints with uncrustify. - lintc runs both targets. lintc is also provided as a make target for convenience. After this change we can remove these files: https://github.com/neovim/doc/tree/gh-pages/reports/clint https://github.com/neovim/doc/blob/main/ci/clint-errors.sh --- CMakeLists.txt | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index 949de8487d..cadab62ce6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -280,8 +280,7 @@ add_glob_target( FLAGS -q GLOB_DIRS runtime/ scripts/ src/ test/ GLOB_PAT *.lua - TOUCH_STRATEGY SINGLE - ) + TOUCH_STRATEGY SINGLE) add_glob_target( TARGET lintlua-stylua @@ -289,8 +288,7 @@ add_glob_target( FLAGS --color=always --check GLOB_DIRS runtime/ GLOB_PAT *.lua - TOUCH_STRATEGY SINGLE - ) + TOUCH_STRATEGY SINGLE) add_custom_target(lintlua) add_dependencies(lintlua lintlua-luacheck lintlua-stylua) @@ -305,8 +303,7 @@ add_glob_target( scripts/pvscheck.sh ci/common ci/snap - TOUCH_STRATEGY SINGLE - ) + TOUCH_STRATEGY SINGLE) add_custom_target(lintcommit COMMAND ${PROJECT_BINARY_DIR}/bin/nvim -u NONE -es -c [[lua require('scripts.lintcommit').main({trace=false})]] @@ -315,7 +312,7 @@ add_custom_target(lintcommit add_dependencies(lintcommit nvim) add_custom_target(lint) -add_dependencies(lint check-single-includes lintc lintlua lintsh lintcommit lintuncrustify) +add_dependencies(lint check-single-includes lintc lintlua lintsh lintcommit) # # Format -- cgit From cb757f2663e6950e655c6306d713338dfa66b18d Mon Sep 17 00:00:00 2001 From: Arnout Engelen Date: Mon, 23 Jan 2023 10:26:46 +0100 Subject: build: make generated source files reproducible #21586 Problem: Build is not reproducible, because generated source files (.c/.h/) are not deterministic, mostly because Lua pairs() is unordered by design (for security). https://github.com/LuaJIT/LuaJIT/issues/626#issuecomment-707005671 https://www.lua.org/manual/5.1/manual.html#pdf-next > The order in which the indices are enumerated is not specified [...] > >> The hardening of the VM deliberately randomizes string hashes. This in >> turn randomizes the iteration order of tables with string keys. Solution: - Update the code generation scripts to be deterministic. - That is only a partial solution: the exported function (funcs_metadata.generated.h) and ui event (ui_events_metadata.generated.h) metadata have some mpack'ed tables, which are not serialized deterministically. - As a workaround, introduce `PRG_GEN_LUA` cmake setting, so you can inject a modified build of luajit (with LUAJIT_SECURITY_PRN=0) that preserves table order. - Longer-term we should change the mpack'ed data structure so it no longer uses tables keyed by strings. Closes #20124 Co-Authored-By: dundargoc Co-Authored-By: Arnout Engelen --- CMakeLists.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index cadab62ce6..c83a8dd617 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -242,6 +242,17 @@ endif() message(STATUS "Using Lua interpreter: ${LUA_PRG}") +# Some of the code generation still relies on stable table ordering in order to +# produce reproducible output - specifically the msgpack'ed data in +# funcs_metadata.generated.h and ui_events_metadata.generated.h. This should +# ideally be fixed in the generators, but until then as a workaround you may provide +# a specific lua implementation that provides the needed stability by setting LUA_GEN_PRG: +if(NOT LUA_GEN_PRG) + set(LUA_GEN_PRG "${LUA_PRG}" CACHE FILEPATH "Path to the lua used for code generation.") +endif() + +message(STATUS "Using Lua interpreter for code generation: ${LUA_GEN_PRG}") + option(COMPILE_LUA "Pre-compile Lua sources into bytecode (for sources that are included in the binary)" ON) if(COMPILE_LUA AND NOT WIN32) -- cgit From f08051c2e61f63b2088a42d641393253b8ca1ca1 Mon Sep 17 00:00:00 2001 From: Lewis Russell Date: Mon, 23 Jan 2023 16:33:45 +0000 Subject: feat!: make iconv a non-optional dep --- CMakeLists.txt | 5 ----- 1 file changed, 5 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index c83a8dd617..b3ad290c7a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -342,11 +342,6 @@ install_helper( FILES ${CMAKE_SOURCE_DIR}/src/man/nvim.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) -option(ENABLE_LIBICONV "enable libiconv" ON) -if(ENABLE_LIBICONV) - find_package(Iconv REQUIRED) -endif() - # # Go down the tree. # -- cgit From 322c83896d6fe6ccc4f799f282d8e1feb7cf7ebe Mon Sep 17 00:00:00 2001 From: dundargoc <33953936+dundargoc@users.noreply.github.com> Date: Tue, 24 Jan 2023 00:03:25 +0100 Subject: build: remove unnecessary unit test code (#21940) The files generated by test/includes/CMakeLists.txt have been unused since commit c49e22d396. The unittests include the headers in test/includes directly without any processing, meaning that the CMakeLists.txt file is no longer necessary. --- CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'CMakeLists.txt') diff --git a/CMakeLists.txt b/CMakeLists.txt index b3ad290c7a..493c212996 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -348,7 +348,6 @@ install_helper( add_subdirectory(src/nvim) get_directory_property(NVIM_VERSION_CFLAGS DIRECTORY src/nvim DEFINITION NVIM_VERSION_CFLAGS) -add_subdirectory(test/includes) add_subdirectory(cmake.config) add_subdirectory(test/functional/fixtures) # compile test programs add_subdirectory(runtime) @@ -371,7 +370,7 @@ endif() if(BUSTED_PRG) get_target_property(TEST_INCLUDE_DIRS main_lib INTERFACE_INCLUDE_DIRECTORIES) - set(UNITTEST_PREREQS nvim-test unittest-headers) + set(UNITTEST_PREREQS nvim-test) set(FUNCTIONALTEST_PREREQS nvim printenv-test printargs-test shell-test pwsh-test streams-test tty-test ${GENERATED_HELP_TAGS}) set(BENCHMARK_PREREQS nvim tty-test) -- cgit