# Initialize ######################################################################################

Include                             ( cotire        OPTIONAL RESULT_VARIABLE HAS_COTIRE )
Include                             ( pedantic      OPTIONAL RESULT_VARIABLE HAS_PEDANTIC )
Include                             ( strip_symbols OPTIONAL RESULT_VARIABLE HAS_STRIP_SYMBOLS )

Find_Package                        ( cppfs REQUIRED )
Find_Package                        ( cppcore REQUIRED )

# Interface Library ###############################################################################

Set                                 ( ASYNCPP_GENERATED_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated )
Configure_File                      ( ${CMAKE_CURRENT_SOURCE_DIR}/../cmake/config.h.in
                                      ${ASYNCPP_GENERATED_INCLUDE_DIR}/asyncpp/config.h )
Set                                 ( ASYNCPP_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../include )
Add_Library                         ( asyncpp INTERFACE )
Target_Include_Directories          ( asyncpp
                                      INTERFACE
                                        $<BUILD_INTERFACE:${ASYNCPP_INCLUDE_DIR}>
                                        $<BUILD_INTERFACE:${ASYNCPP_GENERATED_INCLUDE_DIR}>
                                        $<INSTALL_INTERFACE:${ASYNCPP_INSTALL_DIR_INCLUDE}> )
Target_Link_Libraries               ( asyncpp
                                      INTERFACE
                                        cppfs::cppfs
                                        cppcore::cppcore )

# Install #########################################################################################

Set                                 ( ASYNCPP_HAS_EXPORT False PARENT_SCOPE )

# Header
If                                  ( ASYNCPP_INSTALL_HEADER )
    Set                                 ( ASYNCPP_HAS_EXPORT True PARENT_SCOPE )
    Install                             ( FILES ${ASYNCPP_INCLUDE_DIR}/asyncpp.h
                                          DESTINATION ${ASYNCPP_INSTALL_DIR_INCLUDE} )
    Install                             ( DIRECTORY ${ASYNCPP_INCLUDE_DIR}/asyncpp
                                          DESTINATION ${ASYNCPP_INSTALL_DIR_INCLUDE} )
    Install                             ( DIRECTORY ${ASYNCPP_GENERATED_INCLUDE_DIR}/cppcore
                                          DESTINATION ${ASYNCPP_INSTALL_DIR_INCLUDE} )
    Install                             ( TARGETS asyncpp
                                          EXPORT asyncpp
                                          DESTINATION ${ASYNCPP_INSTALL_DIR_INCLUDE} )
EndIf                               ( )
