message(STATUS "**** ${PROJECT_NAME} ****")

set(PDCURSES_SRCDIR ${CMAKE_SOURCE_DIR})
set(PDCURSES_DIST ${CMAKE_INSTALL_PREFIX}/${CMAKE_BUILD_TYPE})

set(osdir ${PDCURSES_SRCDIR}/${PROJECT_NAME})
set(demodir ${PDCURSES_SRCDIR}/demos)

set(pdc_src_files
    ${osdir}/pdcclip.c
    ${osdir}/pdcdisp.c
    ${osdir}/pdcgetsc.c
    ${osdir}/pdckbd.c
    ${osdir}/pdcscrn.c
    ${osdir}/pdcsetsc.c
    ${osdir}/pdcutil.c
)

include_directories (..)
include_directories (${osdir})


if(WIN32 AND NOT WATCOM)
    include(dll_version)
    list(APPEND pdc_src_files ${CMAKE_CURRENT_BINARY_DIR}/version.rc)

    add_definitions(-D_WIN32 -D_CRT_SECURE_NO_WARNINGS)

    if(${TARGET_ARCH} STREQUAL "ARM" OR ${TARGET_ARCH} STREQUAL "ARM64")
        add_definitions(-D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE=1)
    endif()

    set(EXTRA_LIBS gdi32.lib winspool.lib shell32.lib ole32.lib comdlg32.lib advapi32.lib)
    set(SDL2_DEP_LIBRARIES version.lib winmm.lib imm32.lib)
elseif(APPLE)
    set(EXTRA_LIBS "")
    set(SDL2_DEP_LIBRARIES "dl")
else()
    set(EXTRA_LIBS "")
    set(SDL2_DEP_LIBRARIES "dl")
endif()

if (APPLE)
    find_library(COREVIDEO CoreVideo)
    list(APPEND EXTRA_LIBS ${COREVIDEO})

    find_library(COCOA_LIBRARY Cocoa)
    list(APPEND EXTRA_LIBS ${COCOA_LIBRARY})

    find_library(IOKIT IOKit)
    list(APPEND EXTRA_LIBS ${IOKIT})

    find_library(FORCEFEEDBACK ForceFeedback)
    list(APPEND EXTRA_LIBS ${FORCEFEEDBACK})

    find_library(CARBON_LIBRARY Carbon)
    list(APPEND EXTRA_LIBS ${CARBON_LIBRARY})

    find_library(COREAUDIO CoreAudio)
    list(APPEND EXTRA_LIBS ${COREAUDIO})

    find_library(AUDIOTOOLBOX AudioToolbox)
    list(APPEND EXTRA_LIBS ${AUDIOTOOLBOX})

    include(CheckLibraryExists)
    check_library_exists(iconv iconv_open "" HAVE_LIBICONV)
    if(HAVE_LIBICONV)
      list(APPEND EXTRA_LIBS iconv)
    endif()
endif()

if(PDC_BUILD_SHARED)
    set(PDCURSE_PROJ ${PROJECT_NAME}_pdcurses)
    add_library(${PDCURSE_PROJ} SHARED ${pdc_src_files} ${pdcurses_src_files})

    if(APPLE)
        set_target_properties(${PDCURSE_PROJ} PROPERTIES MACOSX_RPATH 1)
    endif()

    if(${PROJECT_NAME} STREQUAL "sdl2")
        if(PDC_WIDE)
            target_link_libraries(${PDCURSE_PROJ} ${EXTRA_LIBS}
                ${SDL2_LIBRARIES} ${SDL2_TTF_LIBRARY} ${FT2_LIBRARY} ${ZLIB_LIBRARY} 
                ${SDL2_DEP_LIBRARIES})
        else()
            target_link_libraries(${PDCURSE_PROJ} ${EXTRA_LIBS}
                ${SDL2_LIBRARIES} ${SDL2_DEP_LIBRARIES})
        endif()
    else()
        target_link_libraries(${PDCURSE_PROJ} ${EXTRA_LIBS})
    endif()

    install(TARGETS ${PDCURSE_PROJ}
        ARCHIVE DESTINATION ${PDCURSES_DIST}/lib/${PROJECT_NAME}
        LIBRARY DESTINATION ${PDCURSES_DIST}/lib/${PROJECT_NAME}
        RUNTIME DESTINATION ${PDCURSES_DIST}/bin/${PROJECT_NAME} COMPONENT applications)
    set_target_properties(${PDCURSE_PROJ} PROPERTIES OUTPUT_NAME "pdcurses")
else()
    set(PDCURSE_PROJ ${PROJECT_NAME}_pdcursesstatic)
    add_library (${PDCURSE_PROJ} STATIC ${pdc_src_files} ${pdcurses_src_files})
    install (TARGETS ${PDCURSE_PROJ} ARCHIVE DESTINATION ${PDCURSES_DIST}/lib/${PROJECT_NAME} COMPONENT applications)
    set_target_properties(${PDCURSE_PROJ} PROPERTIES OUTPUT_NAME "pdcursesstatic")
endif()

macro (demo_app dir targ)
    set(bin_name "${PROJECT_NAME}_${targ}")
    if(${targ} STREQUAL "tuidemo")
        set(src_files ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/tuidemo.c ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/tui.c)
    else()
        set(src_files ${CMAKE_CURRENT_SOURCE_DIR}/${dir}/${targ}.c)
    endif()

    add_executable(${bin_name} ${ARGV2} ${src_files})

    target_link_libraries(${bin_name} ${PDCURSE_PROJ} ${EXTRA_LIBS})

    add_dependencies(${bin_name} ${PDCURSE_PROJ})
    set_target_properties(${bin_name} PROPERTIES OUTPUT_NAME ${targ})

    install(TARGETS ${bin_name} RUNTIME DESTINATION ${PDCURSES_DIST}/bin/${PROJECT_NAME} COMPONENT applications)
endmacro ()
