project(s11n)
cmake_minimum_required(VERSION 3.1)

option(BUILD_SHARED_LIBS "Build s11n as a shared library" ON)

set(CMAKE_CXX_STANDARD 98)

set(S11_SRC_ROOT "./src")

set(S11_SRC 	

${S11_SRC_ROOT}/argv_parser.cpp
${S11_SRC_ROOT}/compact.flex.cpp
${S11_SRC_ROOT}/compact_serializer.cpp
${S11_SRC_ROOT}/data_node_io.cpp
${S11_SRC_ROOT}/exception.cpp
${S11_SRC_ROOT}/funtxt.flex.cpp
${S11_SRC_ROOT}/funtxt_serializer.cpp
${S11_SRC_ROOT}/funxml.flex.cpp
${S11_SRC_ROOT}/funxml_serializer.cpp
${S11_SRC_ROOT}/parens.flex.cpp
${S11_SRC_ROOT}/parens_serializer.cpp
${S11_SRC_ROOT}/path_finder.cpp
${S11_SRC_ROOT}/plugin.cpp
${S11_SRC_ROOT}/s11n.cpp
${S11_SRC_ROOT}/s11nlite.cpp
${S11_SRC_ROOT}/s11n_node.cpp
${S11_SRC_ROOT}/simplexml.flex.cpp
${S11_SRC_ROOT}/simplexml_serializer.cpp
${S11_SRC_ROOT}/strtool.cpp
${S11_SRC_ROOT}/wesnoth.flex.cpp
${S11_SRC_ROOT}/wesnoth_serializer.cpp
)

file(GLOB_RECURSE S11_HEADERS ${PROJECT_SOURCE_DIR}/include/*.hpp)

include(GNUInstallDirs)
include(CMakePackageConfigHelpers)

add_library(s11n ${S11_SRC})

set_property(TARGET s11n PROPERTY POSITION_INDEPENDENT_CODE ON)

target_include_directories(s11n
  PUBLIC
    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
  PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/src
  )

install(
    DIRECTORY ${PROJECT_SOURCE_DIR}/include/
    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  )

install(TARGETS s11n
    EXPORT ${PROJECT_NAME}_Targets
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
  )

configure_package_config_file(
    ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in
    ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
  INSTALL_DESTINATION
    ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
  )

# Export target configuration (for installation)
install(EXPORT ${PROJECT_NAME}_Targets
    FILE ${PROJECT_NAME}Targets.cmake
    NAMESPACE ${PROJECT_NAME}::
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
  )

install(FILES
    "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
  )