aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2023-03-07 15:00:51 +0100
committerbfredl <bjorn.linse@gmail.com>2023-03-07 20:16:52 +0100
commit30632dd21ab243bb2c4eb115819a32fdfd9155dc (patch)
treeebe91e82ac53a5b36a5512432b98fb2b5f510484
parent706bcab75eaad2c370d61bf828531054439d3a3e (diff)
downloadrneovim-30632dd21ab243bb2c4eb115819a32fdfd9155dc.tar.gz
rneovim-30632dd21ab243bb2c4eb115819a32fdfd9155dc.tar.bz2
rneovim-30632dd21ab243bb2c4eb115819a32fdfd9155dc.zip
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.
-rw-r--r--.github/workflows/test.yml12
-rw-r--r--cmake/InstallHelpers.cmake9
-rw-r--r--runtime/CMakeLists.txt30
3 files changed, 14 insertions, 37 deletions
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index e6c134b583..22be9bf719 100644
--- 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
index 3786c4177f..49d8692aae 100644
--- 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
index 581a4545db..c6447721a0 100644
--- 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/)