Home Explore Blog CI



neovim

2nd chunk of `cmake.deps/cmake/LibiconvCMakeLists.txt`
e2f36e37209f5ea5861438cdbe1b5053e30b38bebd51c7850000000100000dc9
 "${CMAKE_CURRENT_BINARY_DIR}/config.h" "${CONFIG_CONTENT}")

set(BROKEN_WCHAR_H 0)
set(HAVE_VISIBILITY 0)
set(HAVE_WCHAR_T 1)
set(ICONV_CONST "const")
set(USE_MBSTATE_T 0)
configure_file(libcharset/include/localcharset.h.build.in localcharset.h)
configure_file(include/iconv.h.build.in iconv.h)

add_definitions(-DLIBDIR)

add_library(libcharset libcharset/lib/localcharset.c)

add_library(libiconv lib/iconv.c)
target_link_libraries(libiconv libcharset)

add_executable(iconv src/iconv.c srclib/progname.c srclib/getprogname.c
  srclib/safe-read.c srclib/uniwidth/width.c srclib/error.c srclib/xmalloc.c
  srclib/basename-lgpl.c)
target_link_libraries(iconv libiconv)

set(HEADER_TEMPLATES_PATH "srclib")
set(HEADER_TEMPLATES_ABS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${HEADER_TEMPLATES_PATH}")
file(GLOB_RECURSE HEADER_TEMPLATES "${HEADER_TEMPLATES_ABS_PATH}/*.in.h")
list(REMOVE_ITEM HEADER_TEMPLATES  "${HEADER_TEMPLATES_ABS_PATH}/stdint.in.h")
list(REMOVE_ITEM HEADER_TEMPLATES  "${HEADER_TEMPLATES_ABS_PATH}/wchar.in.h")
foreach(HEADER_TEMPLATE ${HEADER_TEMPLATES})
  file(READ ${HEADER_TEMPLATE} HEADER_CONTENT)
  string(REPLACE "/* The definition of _GL_ARG_NONNULL is copied here.  */" "#include \"arg-nonnull.h\"" HEADER_CONTENT "${HEADER_CONTENT}")
  string(REPLACE "/* The definition of _GL_WARN_ON_USE is copied here.  */" "#include \"warn-on-use.h\"" HEADER_CONTENT "${HEADER_CONTENT}")
  string(REPLACE "/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */" "#include \"c++defs.h\"" HEADER_CONTENT "${HEADER_CONTENT}")
  string(REPLACE "@GNULIB_LSTAT@" "1" HEADER_CONTENT "${HEADER_CONTENT}")
  string(REPLACE "@GNULIB_SIGACTION@" "1" HEADER_CONTENT "${HEADER_CONTENT}")
  string(REPLACE "@GNULIB_SIGPROCMASK@" "1" HEADER_CONTENT "${HEADER_CONTENT}")
  string(REPLACE "@HAVE_ISWCNTRL@" "1" HEADER_CONTENT "${HEADER_CONTENT}")
  string(REPLACE "@HAVE_WCTYPE_T@" "1" HEADER_CONTENT "${HEADER_CONTENT}")
  string(REPLACE "@PRAGMA_COLUMNS@" "" HEADER_CONTENT "${HEADER_CONTENT}")

  string(REGEX REPLACE "^${HEADER_TEMPLATES_ABS_PATH}/" "" HEADER_PATH "${HEADER_TEMPLATE}")
  string(REPLACE ".in" "" HEADER_PATH ${HEADER_PATH})
  string(REPLACE "_" "/" HEADER_PATH ${HEADER_PATH})
  # find_file will create a cache entry for the variable
  # SYSTEM_HEADER, so reset it before each call
  set(SYSTEM_HEADER "SYSTEM_HEADER-NOTFOUND")
  find_file(SYSTEM_HEADER ${HEADER_PATH} PATHS "${LIBICONV_INCLUDE_DIRS}")
  if(SYSTEM_HEADER)
    # Gnulib uses #include_next to extend system header files,
    # but MSVC doesn't support it, so a regular include directive
    # with a relative path is used instead
    string(REGEX REPLACE ".*/(.*/${HEADER_PATH})" "../\\1"
      INCLUDE_PATH "${SYSTEM_HEADER}")
    string(REGEX REPLACE "@INCLUDE_NEXT[^@]*@ @NEXT_[^@\n]+@"
      "include <${INCLUDE_PATH}>" HEADER_CONTENT "${HEADER_CONTENT}")
  endif()

  # Default any remaining template variables to 0
  string(REGEX REPLACE "@[^@\n]+@" "0" HEADER_CONTENT "${HEADER_CONTENT}")

  file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${HEADER_TEMPLATES_PATH}/${HEADER_PATH}" "${HEADER_CONTENT}")
endforeach()

include(GNUInstallDirs)

install(FILES
  ${CMAKE_CURRENT_BINARY_DIR}/iconv.h
  ${CMAKE_CURRENT_BINARY_DIR}/localcharset.h
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

install(TARGETS libcharset libiconv iconv
  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})

# vim: set ft=cmake:

Title: Finishing CMake Configuration, Header Templating, and Installation
Summary
This section completes the CMake configuration for libiconv. It processes header templates by reading their content, replacing specific placeholders with appropriate values or includes. It handles system header inclusion differently for MSVC due to lack of #include_next support. Any remaining undefined template variables are defaulted to 0. The modified content is then written to corresponding files in the build directory. Finally, it uses GNUInstallDirs to define installation directories and installs the generated header files, libraries (libcharset, libiconv), and the executable (iconv) to their designated locations.