Home Explore Blog CI



neovim

8th chunk of `src/nvim/CMakeLists.txt`
2ee865fffaaad40f5a19e3affbebbb7d390c8af1464079420000000100000fba
 ${NVIM_SOURCES}
              ${NVIM_HEADERS}
              ${GENERATED_API_DISPATCH}
              "${GENERATED_UI_EVENTS_CALL}"
              "${GENERATED_UI_EVENTS_REMOTE}"
              "${GENERATED_UI_EVENTS_CLIENT}"
              )
  get_filename_component(full_d ${sfile} DIRECTORY)
  file(RELATIVE_PATH d "${CMAKE_CURRENT_LIST_DIR}" "${full_d}")
  if(${d} MATCHES "^[.][.]|auto/")
    file(RELATIVE_PATH d "${GENERATED_DIR}" "${full_d}")
  endif()
  get_filename_component(f ${sfile} NAME)
  get_filename_component(r ${sfile} NAME_WE)
  get_filename_component(ext ${sfile} EXT)
  if(NOT ${d} EQUAL ".")
    set(f "${d}/${f}")
    set(r "${d}/${r}")
  endif()
  if ("${ext}" STREQUAL ".c.h")
    continue() # .c.h files are sussy baka, skip
  elseif(${sfile} IN_LIST NVIM_HEADERS)
    set(gf_basename "${r}.h.inline.generated.h")
    set(gf_c_h "${GENERATED_INCLUDES_DIR}/${r}.h.inline.generated.h")
    set(gf_h_h "SKIP")
    set(gf_h_h_out "")
  else()
    set(gf_basename "${r}.c.generated.h")
    set(gf_c_h "${GENERATED_DIR}/${r}.c.generated.h")
    set(gf_h_h "${GENERATED_INCLUDES_DIR}/${r}.h.generated.h")
    set(gf_h_h_out "${gf_h_h}")
  endif()
  set(gf_i "${GENERATED_DIR}/${f}.i")

  if(MSVC)
    set(PREPROC_OUTPUT /P /Fi${gf_i} /nologo)
  else()
    set(PREPROC_OUTPUT -w -E -o ${gf_i})
  endif()

  set(depends "${HEADER_GENERATOR}" "${sfile}" "${LUA_GEN_DEPS}" "${GENERATOR_C_GRAMMAR}")
  if("${f}" STREQUAL "version.c")
    # Ensure auto/versiondef_git.h exists after "make clean".
    list(APPEND depends update_version_stamp "${NVIM_VERSION_GIT_H}" "${NVIM_VERSION_DEF_H}")
  endif()
  add_custom_command(
    OUTPUT "${gf_c_h}" ${gf_h_h_out}
    COMMAND ${CMAKE_C_COMPILER} ${sfile} ${PREPROC_OUTPUT} ${gen_cflags}
    COMMAND ${LUA_GEN} "${HEADER_GENERATOR}" "${sfile}" "${gf_c_h}" "${gf_h_h}" "${gf_i}" "${gf_basename}"
    DEPENDS ${depends})
  list(APPEND NVIM_GENERATED_FOR_SOURCES "${gf_c_h}")
  if (NOT ${sfile} IN_LIST NVIM_HEADERS)
    list(APPEND NVIM_GENERATED_FOR_HEADERS "${gf_h_h}")
    if(${d} MATCHES "^api$" AND NOT ${f} MATCHES "^api/helpers.c$")
      list(APPEND API_HEADERS ${gf_h_h})
    endif()
  endif()
endforeach()

set(NVIM_VERSION_LUA ${PROJECT_BINARY_DIR}/nvim_version.lua)
configure_file(${GENERATOR_DIR}/nvim_version.lua.in ${NVIM_VERSION_LUA})

add_custom_command(
  OUTPUT ${GENERATED_API_DISPATCH} ${GENERATED_API_METADATA}
  ${FUNCS_METADATA} ${LUA_API_C_BINDINGS} ${GENERATED_KEYSETS_DEFS}
         COMMAND ${LUA_GEN} ${API_DISPATCH_GENERATOR}
                         ${GENERATED_API_DISPATCH}
                         ${GENERATED_API_METADATA} ${FUNCS_METADATA}
                         ${LUA_API_C_BINDINGS}
                         ${GENERATED_KEYSETS_DEFS}
                         ${UI_METADATA}
                         ${NVIM_VERSION_GIT_H} ${NVIM_VERSION_LUA}
                         ${GENERATOR_DIR}/dump_bin_array.lua
                         ${CMAKE_CURRENT_LIST_DIR}/api/dispatch_deprecated.lua
                         ${API_HEADERS}

  DEPENDS
    ${LUA_GEN_DEPS}
    ${API_HEADERS}
    ${MSGPACK_RPC_HEADERS}
    ${API_DISPATCH_GENERATOR}
    ${GENERATOR_C_GRAMMAR}
    ${GENERATOR_HASHY}
    ${GENERATOR_DIR}/dump_bin_array.lua
    ${UI_METADATA}
    ${NVIM_VERSION_LUA}
    ${NVIM_VERSION_GIT_H}
    ${CMAKE_CURRENT_LIST_DIR}/api/dispatch_deprecated.lua
)

add_custom_command(
  OUTPUT ${VIM_MODULE_FILE}
  COMMAND ${CMAKE_COMMAND} -E env
      "LUAC_PRG=${LUAC_PRG}"
      ${LUA_PRG} ${CHAR_BLOB_GENERATOR} -c ${VIM_MODULE_FILE}
      # NB: vim._init_packages and vim.inspect must be be first and second ones
      # respectively, otherwise --luamod-dev won't work properly.
      ${LUA_INIT_PACKAGES_MODULE_SOURCE} "vim._init_packages"
      ${LUA_INSPECT_MODULE_SOURCE} "vim.inspect"
      ${LUA_EDITOR_MODULE_SOURCE} "vim._editor"
      ${LUA_FILETYPE_MODULE_SOURCE} "vim.filetype"
      ${LUA_FS_MODULE_SOURCE} "vim.fs"
      ${LUA_F_MODULE_SOURCE} "vim.F"
      ${LUA_KEYMAP_MODULE_SOURCE} "vim.keymap"
      ${LUA_LOADER_MODULE_SOURCE}

Title: Generated Header Commands
Summary
This section defines custom commands to generate header files from source files, including handling file paths, preprocessor output, and dependencies. It differentiates between header and source file generation, creating `.c.generated.h` and `.h.generated.h` files. Specific dependencies are added for `version.c`. It populates lists for generated headers and sources and configures the generation of API dispatch files and metadata using Lua scripts. Additionally, it defines a command to generate the `vim` module file by combining several Lua modules into a single file.