set(POST_INSTALL "")

set( ndscxx_srcs
     bash_pattern.c
     nds_buffer.cc
     nds_channel.cc
     nds_connection.cc
     nds_connection_ptype.cc
     nds_channel_cache.cc
     nds_channel_selection.cc
     nds_helper.cc
     nds_availability.cc
     nds_availability_internal.cc
     nds_request_fragment.cc
     nds_composer.cc
     nds_gap_handler.cc
     nds_static_val.cc
     nds_version.cc
     nds_parameter_block.cc
     nds_iterate_handler.cc
     nds_data_iterator.cc
     debug_stream.cc
     nds_standalone.cc
     nds_bash_pattern.hh
     nds_connection_ptype.hh
     nds_channel_selection.hh
     nds_availability_helper.hh
     nds_errno.hh
     nds_foreach.hh
     nds_iterate_handler.hh
     nds_iterate_handlers.hh
     nds_param_str.h
     nds_channel_cache.hh
     nds_standalone.hh
     nds_str_utility.hh
)

# headers that get installed
set( ndscxx_hdrs
     nds.hh 
     nds_availability.hh 
     nds_buffer.hh 
     nds_channel.hh 
     nds_connection.hh 
     nds_data_iterator.hh
     nds_epoch.hh
     nds_export.hh
     nds_version.hh
     nds_standalone.hh
)

include_directories( ${CMAKE_CURRENT_BINARY_DIR}
                     ${CMAKE_CURRENT_SOURCE_DIR}
		     ${PROJECT_BINARY_DIR}/src/client
		     ${PROJECT_SOURCE_DIR}/src/client )
add_definitions( "-DHAVE_CONFIG_H=1" )

#========================================================================
# Setup 
#========================================================================

#========================================================================
# Build rules
#========================================================================
cmake_policy(PUSH)
cmake_policy(SET CMP0003 NEW)
add_library(
  ndscxx
  SHARED ${ndscxx_srcs} ${ndscxx_hdrs}
)
target_requires_cpp11( ndscxx PUBLIC )
target_link_libraries( ndscxx PUBLIC ndsclient ${CMAKE_DL_LIBS} )
target_link_libraries( ndscxx PRIVATE nds::impl )
set_target_properties(
  ndscxx
  PROPERTIES
      C_STANDARD 99
      COMPILE_DEFINITIONS "NDS_EXPORT=1" )
set( install_libs ndscxx )
add_library(
  ndscxxStatic
  STATIC ${ndscxx_srcs} ${ndscxx_hdrs}
)
target_requires_cpp11( ndscxxStatic PUBLIC )
target_link_libraries( ndscxxStatic PUBLIC ndsclient ${CMAKE_DL_LIBS} )
target_link_libraries( ndscxxStatic PRIVATE nds::impl )
set_target_properties(
  ndscxxStatic
  PROPERTIES
      COMPILE_DEFINITIONS "NDS_EXPORT=1" )
add_library(
    ndscxx_obj
    OBJECT ${ndscxx_srcs} ${ndscxx_hdrs}
)
target_requires_cpp11( ndscxx_obj PUBLIC )
target_compile_options(ndscxx_obj PUBLIC -fPIC)
target_include_directories(ndscxx_obj PRIVATE ../../../src/common)
#target_link_libraries( ndscxx_obj PRIVATE nds::impl )
set_target_properties(
    ndscxx_obj
    PROPERTIES
    C_STANDARD 99
    COMPILE_DEFINITIONS "NDS_EXPORT=1" )
cmake_policy(POP)


set_target_properties(
  ndscxx PROPERTIES
  OUTPUT_NAME ndscxx
)
if( UNIX )
  set_target_properties(
    ndscxxStatic PROPERTIES
    OUTPUT_NAME ndscxx
  )
  set( install_libs ${install_libs} ndscxxStatic )
endif( UNIX )

set( NDSCXX_SOVERSION_CURRENT  1 )
set( NDSCXX_SOVERSION_REVISION 0 )
set( NDSCXX_SOVERSION_AGE      0 )

if ( UNIX )
  nds_libtool_version_calculation( NDSCXX
    ${NDSCXX_SOVERSION_CURRENT}
    ${NDSCXX_SOVERSION_REVISION}
    ${NDSCXX_SOVERSION_AGE} )
  set_target_properties(
    ndscxx PROPERTIES
    VERSION ${NDSCXX_VERSION}
    SOVERSION ${NDSCXX_SOVERSION} )
endif ( UNIX )

#------------------------------------------------------------------------
# Create the package configure files
#------------------------------------------------------------------------

configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/libndscxx.pc.in
                ${CMAKE_CURRENT_BINARY_DIR}/libndscxx.pc @ONLY)
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/libndscxx-uninstalled.pc.in
                ${CMAKE_CURRENT_BINARY_DIR}/libndscxx-uninstalled.pc )
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/conlibndscxx.pc.in
                ${CMAKE_CURRENT_BINARY_DIR}/conlibndscxx.pc @ONLY)
install(
  FILES
    ${CMAKE_CURRENT_BINARY_DIR}/libndscxx.pc
    ${CMAKE_CURRENT_BINARY_DIR}/conlibndscxx.pc
  DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
  COMPONENT Development
)
#========================================================================
# Installation Rules
#========================================================================
install(
  TARGETS ${install_libs}
  RUNTIME
    DESTINATION ${RUNTIME_DESTINATION}
    COMPONENT applications
  LIBRARY
    DESTINATION ${LIBRARY_DESTINATION}
    COMPONENT applications
  ARCHIVE
    DESTINATION ${CMAKE_INSTALL_LIBDIR}
    COMPONENT Development
)
install(
  FILES ${ndscxx_hdrs}
  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${PROJECT_NAME}
  COMPONENT Development
)

if ( ( CMAKE_VERSION VERSION_EQUAL "3.9.0" )
    OR ( CMAKE_VERSION VERSION_GREATER "3.9.0" ) )
  install(
    FILES $<TARGET_OBJECTS:ndscxx_obj>
    DESTINATION ${CONLIBNDSCXX_LIBDIR}
    COMPONENT Development
    )
else()
  install(
    DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/ndscxx_obj.dir/"
    DESTINATION ${CONLIBNDSCXX_LIBDIR}
    COMPONENT Development
    FILES_MATCHING PATTERN "*${CMAKE_CXX_OUTPUT_EXTENSION}"
    )
endif()
