neovim

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

CMakeLists.txt (4611B)


      1 set(GENERATED_RUNTIME_DIR ${PROJECT_BINARY_DIR}/runtime)
      2 
      3 set(GENERATED_HELP_TAGS ${GENERATED_RUNTIME_DIR}/doc/tags)
      4 set(GENERATED_PACKAGE_DIR ${GENERATED_RUNTIME_DIR}/pack/dist/opt)
      5 set(GENERATED_SYN_VIM ${GENERATED_RUNTIME_DIR}/syntax/vim/generated.vim)
      6 set(SYN_VIM_GENERATOR ${PROJECT_SOURCE_DIR}/src/gen/gen_vimvim.lua)
      7 
      8 file(MAKE_DIRECTORY ${GENERATED_RUNTIME_DIR}/syntax/vim)
      9 
     10 get_directory_property(LUA_GEN DIRECTORY ${PROJECT_SOURCE_DIR}/src/nvim DEFINITION LUA_GEN)
     11 get_directory_property(LUA_GEN_DEPS DIRECTORY ${PROJECT_SOURCE_DIR}/src/nvim DEFINITION LUA_GEN_DEPS)
     12 
     13 add_custom_command(OUTPUT ${GENERATED_SYN_VIM}
     14  COMMAND ${LUA_GEN} ${SYN_VIM_GENERATOR} ${GENERATED_SYN_VIM} ${FUNCS_DATA}
     15    ${PROJECT_SOURCE_DIR}/src/nvim/options.lua
     16    ${PROJECT_SOURCE_DIR}/src/nvim/auevents.lua
     17    ${PROJECT_SOURCE_DIR}/src/nvim/ex_cmds.lua
     18    ${PROJECT_SOURCE_DIR}/src/nvim/vvars.lua
     19  DEPENDS
     20    ${LUA_GEN_DEPS}
     21    ${SYN_VIM_GENERATOR}
     22    ${PROJECT_SOURCE_DIR}/src/nvim/ex_cmds.lua
     23    ${PROJECT_SOURCE_DIR}/src/nvim/auevents.lua
     24    ${PROJECT_SOURCE_DIR}/src/nvim/options.lua
     25    ${PROJECT_SOURCE_DIR}/src/nvim/vvars.lua
     26    ${PROJECT_SOURCE_DIR}/src/nvim/eval.c
     27    ${FUNCS_DATA}
     28 )
     29 
     30 file(GLOB PACKAGES CONFIGURE_DEPENDS ${PROJECT_SOURCE_DIR}/runtime/pack/dist/opt/*)
     31 
     32 set(GENERATED_PACKAGE_TAGS)
     33 foreach(PACKAGE ${PACKAGES})
     34  get_filename_component(PACKNAME ${PACKAGE} NAME)
     35  file(GLOB "${PACKNAME}_DOC_FILES" CONFIGURE_DEPENDS ${PACKAGE}/doc/*.txt)
     36  if(${PACKNAME}_DOC_FILES)
     37    file(MAKE_DIRECTORY ${GENERATED_PACKAGE_DIR}/${PACKNAME})
     38    add_custom_command(OUTPUT "${GENERATED_PACKAGE_DIR}/${PACKNAME}/doc/tags"
     39      COMMAND ${CMAKE_COMMAND} -E copy_directory
     40        ${PACKAGE} ${GENERATED_PACKAGE_DIR}/${PACKNAME}
     41      COMMAND $<TARGET_FILE:nvim_bin>
     42        -u NONE -i NONE -e --headless -c "helptags doc" -c quit
     43      DEPENDS
     44        nvim_bin
     45        nvim_runtime_deps
     46      WORKING_DIRECTORY "${GENERATED_PACKAGE_DIR}/${PACKNAME}"
     47    )
     48 
     49    set("${PACKNAME}_DOC_NAMES")
     50    foreach(DF "${${PACKNAME}_DOC_FILES}")
     51      get_filename_component(F ${DF} NAME)
     52      list(APPEND "${PACKNAME}_DOC_NAMES" ${GENERATED_PACKAGE_DIR}/${PACKNAME}/doc/${F})
     53    endforeach()
     54 
     55    install_helper(
     56      FILES ${GENERATED_PACKAGE_DIR}/${PACKNAME}/doc/tags "${${PACKNAME}_DOC_NAMES}"
     57      DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/pack/dist/opt/${PACKNAME}/doc)
     58 
     59    list(APPEND GENERATED_PACKAGE_TAGS "${GENERATED_PACKAGE_DIR}/${PACKNAME}/doc/tags")
     60  endif()
     61 endforeach()
     62 
     63 set(BUILDDOCFILES)
     64 foreach(DF ${DOCFILES})
     65  get_filename_component(F ${DF} NAME)
     66  list(APPEND BUILDDOCFILES ${GENERATED_RUNTIME_DIR}/doc/${F})
     67 endforeach()
     68 
     69 add_custom_command(OUTPUT ${GENERATED_HELP_TAGS}
     70  COMMAND ${CMAKE_COMMAND} -E remove_directory doc
     71  COMMAND ${CMAKE_COMMAND} -E copy_directory
     72    ${PROJECT_SOURCE_DIR}/runtime/doc doc
     73  COMMAND $<TARGET_FILE:nvim_bin>
     74    -u NONE -i NONE -e --headless -c "helptags ++t doc" -c quit
     75  DEPENDS
     76    nvim_bin
     77    nvim_runtime_deps
     78  WORKING_DIRECTORY "${GENERATED_RUNTIME_DIR}"
     79 )
     80 
     81 add_custom_target(
     82  nvim_runtime
     83  DEPENDS
     84    ${GENERATED_SYN_VIM}
     85    ${GENERATED_HELP_TAGS}
     86    ${GENERATED_PACKAGE_TAGS}
     87 )
     88 
     89 # CMake is painful here.  It will create the destination using the user's
     90 # current umask, and we don't want that.  And we don't just want to install
     91 # the target directory, as it will mess with existing permissions.  So this
     92 # seems like the best compromise.  If we create it, then everyone can see it.
     93 # If it's preexisting, leave it alone.
     94 
     95 install_helper(
     96  FILES ${GENERATED_HELP_TAGS} ${BUILDDOCFILES}
     97  DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/doc)
     98 
     99 install_helper(
    100  FILES ${GENERATED_SYN_VIM}
    101  DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/syntax/vim)
    102 
    103 if(NOT APPLE)
    104  install_helper(
    105    FILES ${CMAKE_CURRENT_SOURCE_DIR}/nvim.desktop
    106    DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
    107 endif()
    108 
    109 install_helper(
    110  FILES ${CMAKE_CURRENT_SOURCE_DIR}/nvim.png
    111  DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/128x128/apps)
    112 
    113 file(GLOB RUNTIME_ROOT_FILES CONFIGURE_DEPENDS *.vim *.lua *.ico)
    114 install_helper(FILES ${RUNTIME_ROOT_FILES}
    115               DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/)
    116 
    117 file(GLOB RUNTIME_DIRS CONFIGURE_DEPENDS */)
    118 foreach(D ${RUNTIME_DIRS})
    119  if(IS_DIRECTORY ${D})
    120    install_helper(DIRECTORY ${D}
    121                   DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/)
    122  endif()
    123 endforeach()
    124 
    125 # only foo.sh script in runtime/
    126 install_helper(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/scripts/less.sh DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim/runtime/scripts/)