neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 30632dd21ab243bb2c4eb115819a32fdfd9155dc
parent 706bcab75eaad2c370d61bf828531054439d3a3e
Author: bfredl <bjorn.linse@gmail.com>
Date:   Tue,  7 Mar 2023 15:00:51 +0100

refactor(build): make installation of runtime/ more effective

Currently files to install in runtime/ is detected by recursive glob
pattern which has two problems:

- cmake needs to do a of work at config time and
  build/runtime/cmake_install.cmake becomes HUGE (2.5MB, biggest config file)
- we need to explicitly specify each file suffix used in the entire
  runtime, which is duplication of information.

These globs specify every single file in a subdirectory.
Thus, we can just install every runtime/ subdirectory as a single
install command. Furthermore, at the top-level, only .vim and .lua files
need to be installed.

Further possible refactor: we could move files which does not belong
in $PREFIX/runtime out of $REPO/runtime. Then runtime could be installed
with a single install_helper(DIRECTORY ...) command.

Diffstat:
M.github/workflows/test.yml | 12++----------
Mcmake/InstallHelpers.cmake | 9---------
Mruntime/CMakeLists.txt | 30++++++++++++------------------
3 files changed, 14 insertions(+), 37 deletions(-)

diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml @@ -241,17 +241,9 @@ jobs: fi # Check that all runtime files were installed - for file in $(git -C runtime ls-files '*.vim' '*.ps' '*.dict' '*.py' '*.tutor'); do + for file in $(git -C runtime ls-files '*.vim' '*.ps' '*.dict' '*.py' '*.tutor' '*.awk' '*.sh' '*.bat'); do if ! test -e "$INSTALL_PREFIX/share/nvim/runtime/$file"; then - printf "%s%s" 'It appears that %s is not installed.' "$file" - exit 1 - fi - done - - # Check that some runtime files are installed and are executables - for file in $(git -C runtime ls-files '*.awk' '*.sh' '*.bat'); do - if ! test -x "$INSTALL_PREFIX/share/nvim/runtime/$file"; then - printf "%s%s" 'It appears that %s is not installed or is not executable.' "$file" + printf "It appears that %s is not installed." "$file" exit 1 fi done diff --git a/cmake/InstallHelpers.cmake b/cmake/InstallHelpers.cmake @@ -167,12 +167,3 @@ function(glob_wrapper outvar) endif() set(${outvar} ${${outvar}} PARENT_SCOPE) endfunction() - -function(globrecurse_wrapper outvar root) - if(${CMAKE_VERSION} VERSION_LESS 3.12) - file(GLOB_RECURSE ${outvar} RELATIVE ${root} ${ARGN}) - else() - file(GLOB_RECURSE ${outvar} CONFIGURE_DEPENDS RELATIVE ${root} ${ARGN}) - endif() - set(${outvar} ${${outvar}} PARENT_SCOPE) -endfunction() diff --git a/runtime/CMakeLists.txt b/runtime/CMakeLists.txt @@ -116,23 +116,17 @@ install_helper( FILES ${CMAKE_CURRENT_SOURCE_DIR}/nvim.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/128x128/apps) -install_helper( - FILES ${CMAKE_CURRENT_SOURCE_DIR}/neovim.ico - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime) - -globrecurse_wrapper(RUNTIME_PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR} *.awk *.sh *.bat) - -foreach(PROG ${RUNTIME_PROGRAMS}) - get_filename_component(BASEDIR ${PROG} DIRECTORY) - install_helper(PROGRAMS ${PROG} - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/${BASEDIR}) +glob_wrapper(RUNTIME_ROOT_FILES *.vim *.lua *.ico) +install_helper(FILES ${RUNTIME_ROOT_FILES} + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/) + +glob_wrapper(RUNTIME_DIRS */) +foreach(D ${RUNTIME_DIRS}) + if(IS_DIRECTORY ${D}) + install_helper(DIRECTORY ${D} + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/) + endif() endforeach() -globrecurse_wrapper(RUNTIME_FILES ${CMAKE_CURRENT_SOURCE_DIR} - *.vim *.lua *.scm *.dict *.py *.rb *.ps *.spl *.tutor *.tutor.json) - -foreach(F ${RUNTIME_FILES}) - get_filename_component(BASEDIR ${F} DIRECTORY) - install_helper(FILES ${F} - DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/${BASEDIR}) -endforeach() +# only foo.sh script in runtime/ +install_helper(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/macros/less.sh DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/macros/)