mirror of
https://github.com/neovim/neovim.git
synced 2024-12-20 19:25:11 -07:00
702892270d
This one generates a runtime/ file instead of a source file. But otherwise it works the same like all other generators. It has the same prerequisites (shared and mpack modules, etc), and, importantly, it uses results from the source generators. The odd location makes it easy to overlook when refactoring generators (like I did last time, lol)
136 lines
4.8 KiB
CMake
136 lines
4.8 KiB
CMake
set(SYN_VIM_GENERATOR ${PROJECT_SOURCE_DIR}/src/nvim/generators/gen_vimvim.lua)
|
|
set(GENERATED_RUNTIME_DIR ${PROJECT_BINARY_DIR}/runtime)
|
|
set(GENERATED_SYN_VIM ${GENERATED_RUNTIME_DIR}/syntax/vim/generated.vim)
|
|
set(GENERATED_HELP_TAGS ${GENERATED_RUNTIME_DIR}/doc/tags)
|
|
set(GENERATED_PACKAGE_DIR ${GENERATED_RUNTIME_DIR}/pack/dist/opt)
|
|
set(FUNCS_DATA ${PROJECT_BINARY_DIR}/funcs_data.mpack)
|
|
|
|
file(MAKE_DIRECTORY ${GENERATED_RUNTIME_DIR})
|
|
file(MAKE_DIRECTORY ${GENERATED_RUNTIME_DIR}/syntax)
|
|
file(MAKE_DIRECTORY ${GENERATED_RUNTIME_DIR}/syntax/vim)
|
|
|
|
get_directory_property(LUA_GEN DIRECTORY ${PROJECT_SOURCE_DIR}/src/nvim DEFINITION LUA_GEN)
|
|
get_directory_property(LUA_GEN_DEPS DIRECTORY ${PROJECT_SOURCE_DIR}/src/nvim DEFINITION LUA_GEN_DEPS)
|
|
|
|
add_custom_command(OUTPUT ${GENERATED_SYN_VIM}
|
|
COMMAND ${LUA_GEN} ${SYN_VIM_GENERATOR} ${GENERATED_SYN_VIM} ${FUNCS_DATA}
|
|
DEPENDS
|
|
${LUA_GEN_DEPS}
|
|
${SYN_VIM_GENERATOR}
|
|
${PROJECT_SOURCE_DIR}/src/nvim/ex_cmds.lua
|
|
${PROJECT_SOURCE_DIR}/src/nvim/auevents.lua
|
|
${PROJECT_SOURCE_DIR}/src/nvim/options.lua
|
|
${PROJECT_SOURCE_DIR}/src/nvim/eval.c
|
|
${FUNCS_DATA}
|
|
)
|
|
|
|
glob_wrapper(PACKAGES ${PROJECT_SOURCE_DIR}/runtime/pack/dist/opt/*)
|
|
|
|
set(GENERATED_PACKAGE_TAGS)
|
|
foreach(PACKAGE ${PACKAGES})
|
|
get_filename_component(PACKNAME ${PACKAGE} NAME)
|
|
glob_wrapper("${PACKNAME}_DOC_FILES" ${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 "${PROJECT_BINARY_DIR}/bin/nvim"
|
|
-u NONE -i NONE -e --headless -c "helptags doc" -c quit
|
|
DEPENDS
|
|
nvim
|
|
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()
|
|
|
|
glob_wrapper(DOCFILES ${PROJECT_SOURCE_DIR}/runtime/doc/*.txt)
|
|
|
|
set(BUILDDOCFILES)
|
|
foreach(DF ${DOCFILES})
|
|
get_filename_component(F ${DF} NAME)
|
|
list(APPEND BUILDDOCFILES ${GENERATED_RUNTIME_DIR}/doc/${F})
|
|
endforeach()
|
|
|
|
add_custom_command(OUTPUT ${GENERATED_HELP_TAGS}
|
|
COMMAND ${CMAKE_COMMAND} -E remove_directory doc
|
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
|
${PROJECT_SOURCE_DIR}/runtime/doc doc
|
|
COMMAND "${PROJECT_BINARY_DIR}/bin/nvim"
|
|
-u NONE -i NONE -e --headless -c "helptags ++t doc" -c quit
|
|
DEPENDS
|
|
nvim
|
|
nvim_runtime_deps
|
|
WORKING_DIRECTORY "${GENERATED_RUNTIME_DIR}"
|
|
)
|
|
|
|
|
|
# TODO: This doesn't work. wait for "nvim -l" to land?
|
|
add_custom_target(doc_html
|
|
COMMAND "${PROJECT_BINARY_DIR}/bin/nvim"
|
|
-V1 -es --clean -c "lua require('scripts.gen_help_html').gen('./build/runtime/doc', './build/doc_html', nil, 'todo_commit_id')" -c "0cq"
|
|
DEPENDS
|
|
${GENERATED_HELP_TAGS}
|
|
WORKING_DIRECTORY "${GENERATED_RUNTIME_DIR}/doc"
|
|
)
|
|
|
|
add_custom_target(
|
|
runtime ALL
|
|
DEPENDS
|
|
${GENERATED_SYN_VIM}
|
|
${GENERATED_HELP_TAGS}
|
|
${GENERATED_PACKAGE_TAGS}
|
|
)
|
|
|
|
# CMake is painful here. It will create the destination using the user's
|
|
# current umask, and we don't want that. And we don't just want to install
|
|
# the target directory, as it will mess with existing permissions. So this
|
|
# seems like the best compromise. If we create it, then everyone can see it.
|
|
# 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)
|
|
|
|
if(NOT APPLE)
|
|
install_helper(
|
|
FILES ${CMAKE_CURRENT_SOURCE_DIR}/nvim.desktop
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
|
|
endif()
|
|
|
|
install_helper(
|
|
FILES ${CMAKE_CURRENT_SOURCE_DIR}/nvim.png
|
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/128x128/apps)
|
|
|
|
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()
|
|
|
|
# only foo.sh script in runtime/
|
|
install_helper(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/macros/less.sh DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/macros/)
|