neovim

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

LibiconvCMakeLists.txt (5047B)


      1 cmake_minimum_required(VERSION 3.16)
      2 project(libiconv C)
      3 
      4 add_compile_options(-w)
      5 
      6 include_directories(
      7  ${CMAKE_CURRENT_SOURCE_DIR}
      8  ${CMAKE_CURRENT_SOURCE_DIR}/srclib
      9  ${CMAKE_CURRENT_BINARY_DIR}
     10  ${CMAKE_CURRENT_BINARY_DIR}/srclib
     11  ${CMAKE_CURRENT_SOURCE_DIR}/build-aux/snippet)
     12 
     13 configure_file(config.h.in config.h)
     14 file(READ "${CMAKE_CURRENT_BINARY_DIR}/config.h" CONFIG_CONTENT)
     15 string(REPLACE "#undef EILSEQ" "" CONFIG_CONTENT "${CONFIG_CONTENT}")
     16 string(REPLACE "#undef HAVE_MBRTOWC" "#define HAVE_MBRTOWC 1" CONFIG_CONTENT "${CONFIG_CONTENT}")
     17 string(REPLACE "#undef HAVE_MBSINIT" "#define HAVE_MBSINIT 1" CONFIG_CONTENT "${CONFIG_CONTENT}")
     18 string(REPLACE "#undef HAVE_WCRTOMB" "#define HAVE_WCRTOMB 1" CONFIG_CONTENT "${CONFIG_CONTENT}")
     19 string(REPLACE "#undef HAVE_DECL___ARGV" "#define HAVE_DECL___ARGV 1" CONFIG_CONTENT "${CONFIG_CONTENT}")
     20 string(REPLACE "#undef HAVE_WORKING_O_NOFOLLOW" "#define HAVE_WORKING_O_NOFOLLOW 0" CONFIG_CONTENT "${CONFIG_CONTENT}")
     21 string(REPLACE "#undef ICONV_CONST" "#define ICONV_CONST const" CONFIG_CONTENT "${CONFIG_CONTENT}")
     22 string(REPLACE "#undef WORDS_LITTLEENDIAN" "#define WORDS_LITTLEENDIAN 1" CONFIG_CONTENT "${CONFIG_CONTENT}")
     23 string(REPLACE "#undef HAVE_DECL_STRERROR_R" "#define HAVE_DECL_STRERROR_R 0" CONFIG_CONTENT "${CONFIG_CONTENT}")
     24 string(REPLACE "#undef mode_t" "#define mode_t int" CONFIG_CONTENT "${CONFIG_CONTENT}")
     25 string(REPLACE "#undef ssize_t" "#include <BaseTsd.h>\n#define ssize_t SSIZE_T" CONFIG_CONTENT "${CONFIG_CONTENT}")
     26 file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/config.h" "${CONFIG_CONTENT}")
     27 
     28 set(BROKEN_WCHAR_H 0)
     29 set(HAVE_VISIBILITY 0)
     30 set(HAVE_WCHAR_T 1)
     31 set(ICONV_CONST "const")
     32 set(USE_MBSTATE_T 0)
     33 configure_file(libcharset/include/localcharset.h.build.in localcharset.h)
     34 configure_file(include/iconv.h.build.in iconv.h)
     35 
     36 add_definitions(-DLIBDIR)
     37 
     38 add_library(libcharset libcharset/lib/localcharset.c)
     39 
     40 add_library(libiconv lib/iconv.c)
     41 target_link_libraries(libiconv libcharset)
     42 
     43 add_executable(iconv src/iconv.c srclib/progname.c srclib/getprogname.c
     44  srclib/safe-read.c srclib/uniwidth/width.c srclib/error.c srclib/xmalloc.c
     45  srclib/basename-lgpl.c)
     46 target_link_libraries(iconv libiconv)
     47 
     48 set(HEADER_TEMPLATES_PATH "srclib")
     49 set(HEADER_TEMPLATES_ABS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${HEADER_TEMPLATES_PATH}")
     50 file(GLOB_RECURSE HEADER_TEMPLATES "${HEADER_TEMPLATES_ABS_PATH}/*.in.h")
     51 list(REMOVE_ITEM HEADER_TEMPLATES  "${HEADER_TEMPLATES_ABS_PATH}/stdint.in.h")
     52 list(REMOVE_ITEM HEADER_TEMPLATES  "${HEADER_TEMPLATES_ABS_PATH}/wchar.in.h")
     53 foreach(HEADER_TEMPLATE ${HEADER_TEMPLATES})
     54  file(READ ${HEADER_TEMPLATE} HEADER_CONTENT)
     55  string(REPLACE "/* The definition of _GL_ARG_NONNULL is copied here.  */" "#include \"arg-nonnull.h\"" HEADER_CONTENT "${HEADER_CONTENT}")
     56  string(REPLACE "/* The definition of _GL_WARN_ON_USE is copied here.  */" "#include \"warn-on-use.h\"" HEADER_CONTENT "${HEADER_CONTENT}")
     57  string(REPLACE "/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */" "#include \"c++defs.h\"" HEADER_CONTENT "${HEADER_CONTENT}")
     58  string(REPLACE "@GNULIB_LSTAT@" "1" HEADER_CONTENT "${HEADER_CONTENT}")
     59  string(REPLACE "@GNULIB_SIGACTION@" "1" HEADER_CONTENT "${HEADER_CONTENT}")
     60  string(REPLACE "@GNULIB_SIGPROCMASK@" "1" HEADER_CONTENT "${HEADER_CONTENT}")
     61  string(REPLACE "@HAVE_ISWCNTRL@" "1" HEADER_CONTENT "${HEADER_CONTENT}")
     62  string(REPLACE "@HAVE_WCTYPE_T@" "1" HEADER_CONTENT "${HEADER_CONTENT}")
     63  string(REPLACE "@PRAGMA_COLUMNS@" "" HEADER_CONTENT "${HEADER_CONTENT}")
     64 
     65  string(REGEX REPLACE "^${HEADER_TEMPLATES_ABS_PATH}/" "" HEADER_PATH "${HEADER_TEMPLATE}")
     66  string(REPLACE ".in" "" HEADER_PATH ${HEADER_PATH})
     67  string(REPLACE "_" "/" HEADER_PATH ${HEADER_PATH})
     68  # find_file will create a cache entry for the variable
     69  # SYSTEM_HEADER, so reset it before each call
     70  set(SYSTEM_HEADER "SYSTEM_HEADER-NOTFOUND")
     71  find_file(SYSTEM_HEADER ${HEADER_PATH} PATHS "${LIBICONV_INCLUDE_DIRS}")
     72  if(SYSTEM_HEADER)
     73    # Gnulib uses #include_next to extend system header files,
     74    # but MSVC doesn't support it, so a regular include directive
     75    # with a relative path is used instead
     76    string(REGEX REPLACE ".*/(.*/${HEADER_PATH})" "../\\1"
     77      INCLUDE_PATH "${SYSTEM_HEADER}")
     78    string(REGEX REPLACE "@INCLUDE_NEXT[^@]*@ @NEXT_[^@\n]+@"
     79      "include <${INCLUDE_PATH}>" HEADER_CONTENT "${HEADER_CONTENT}")
     80  endif()
     81 
     82  # Default any remaining template variables to 0
     83  string(REGEX REPLACE "@[^@\n]+@" "0" HEADER_CONTENT "${HEADER_CONTENT}")
     84 
     85  file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${HEADER_TEMPLATES_PATH}/${HEADER_PATH}" "${HEADER_CONTENT}")
     86 endforeach()
     87 
     88 include(GNUInstallDirs)
     89 
     90 install(FILES
     91  ${CMAKE_CURRENT_BINARY_DIR}/iconv.h
     92  ${CMAKE_CURRENT_BINARY_DIR}/localcharset.h
     93  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
     94 
     95 install(TARGETS libcharset libiconv iconv
     96  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
     97  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
     98  PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
     99  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
    100 
    101 # vim: set ft=cmake: