cmake_minimum_required ( VERSION 3.8.2 )
project ( libiconv C )
set ( CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} )

include ( configure )
include ( configure_file_iconv )

# Options
option ( ICONV_ENABLE_EXTRA "Enable a few rarely used encodings" ON)
option ( ICONV_ENABLE_NLS "Translation of program messages to the user's native language is requested" ON)

if ( ICONV_ENABLE_EXTRA )
  set ( ENABLE_EXTRA 1 )
else()
  set ( ENABLE_EXTRA 0 )
endif()
if ( ICONV_ENABLE_NLS )
  set ( ENABLE_NLS 1 )
else()
  set ( ENABLE_NLS 0 )
endif()

set(ENABLE_RELOCATABLE 0)
add_definitions("-DICONV_CONST=")

configure_file ( config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/include/config.h )

configure_file_iconv (LIBRARY_NAME iconv 
  INPUT include/iconv.h.build.in 
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/include/iconv.h )

configure_file_iconv (LIBRARY_NAME charset
  INPUT libcharset/include/libcharset.h.in 
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/include/libcharset.h )

configure_file_iconv (LIBRARY_NAME charset
  INPUT libcharset/include/localcharset.h.build.in 
  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/include/localcharset.h )

# setup default include directories 
include_directories ( ${CMAKE_CURRENT_BINARY_DIR}/include
                      ${CMAKE_CURRENT_BINARY_DIR}/srclib
                      ${CMAKE_CURRENT_SOURCE_DIR}/include
                      ${CMAKE_CURRENT_SOURCE_DIR}/srclib)

# libcharset
set ( SRC_LIBCHARSET
  libcharset/lib/localcharset.c
  libcharset/lib/relocatable-stub.c
)

add_library ( charsetobj OBJECT ${SRC_LIBCHARSET} )
target_compile_definitions ( charsetobj PRIVATE
  BUILDING_LIBCHARSET HAVE_CONFIG_H )

# libiconv
set ( SRC_LIBICONV
  lib/iconv.c
  lib/relocatable.c
)

add_library ( iconvobj OBJECT ${SRC_LIBICONV} )
target_compile_definitions ( iconvobj PRIVATE
  LIBDIR=\"\" BUILDING_LIBICONV BUILDING_DLL NO_XMALLOC IN_LIBRARY
  ENABLE_RELOCATABLE=1 INSTALLDIR=\"\"
  set_relocation_prefix=libiconv_set_relocation_prefix
  relocate=libiconv_relocate relocate2=libiconv_relocate2
  HAVE_CONFIG_H )

add_library ( iconv $<TARGET_OBJECTS:iconvobj> $<TARGET_OBJECTS:charsetobj> )

target_include_directories( iconv PUBLIC $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include> )

# fix library naming for Visual Studio compilers
if ( MSVC )
  set_target_properties ( iconv PROPERTIES OUTPUT_NAME "libiconv" )
endif()

if(NOT SKIP_INSTALL_ALL)
  set(VERSION 1.16)
  include(GNUInstallDirs)
  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/include/iconv.h
                ${CMAKE_CURRENT_BINARY_DIR}/include/libcharset.h
                ${CMAKE_CURRENT_BINARY_DIR}/include/localcharset.h
    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT development)
  install(TARGETS iconv EXPORT iconvTargets
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT development
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT development
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime)
  set(prefix      "${CMAKE_INSTALL_PREFIX}")
  set(includedir  "${CMAKE_INSTALL_INCLUDEDIR}")
  set(libdir      "${CMAKE_INSTALL_LIBDIR}")
  configure_file(iconv.pc.in iconv.pc @ONLY)
  install (FILES "${CMAKE_CURRENT_BINARY_DIR}/iconv.pc"
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
  configure_file(iconv-config.cmake.in iconv-config.cmake @ONLY)
  install(FILES ${CMAKE_CURRENT_BINARY_DIR}/iconv-config.cmake
    DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/iconv")
endif()

