MESSAGE(STATUS "uGFX DIR: ${uGFX_DIR}")

IF(NOT uGFX_FIND_COMPONENTS) 
    SET(uGFX_FIND_COMPONENTS gos gos_freertos)
    MESSAGE(STATUS "No uGFX components specified, using default: ${uGFX_FIND_COMPONENTS}")
ENDIF()

LIST(APPEND uGFX_FIND_COMPONENTS gfx gdriver)

SET(uGFX_gfx_SEARCH_PATH ${uGFX_DIR} ${uGFX_DIR}/src)
SET(uGFX_gfx_HEADERS gfx.h)
SET(uGFX_gfx_SOURCES gfx.c)

SET(uGFX_gdriver_SEARCH_PATH ${uGFX_DIR}/src/gdriver)
SET(uGFX_gdriver_HEADERS gdriver_options.h gdriver_rules.h gdriver.h)
SET(uGFX_gdriver_SOURCES gdriver.c)

INCLUDE(uGFX_GOS)
INCLUDE(uGFX_GDISP)
INCLUDE(uGFX_GINPUT)
INCLUDE(uGFX_GQUEUE)
INCLUDE(uGFX_GTIMER)
INCLUDE(uGFX_GEVENT)
INCLUDE(uGFX_GFILE)
INCLUDE(uGFX_GWIN)

SET(uGFX_COMPONENTS gfx gdriver gos ${uGFX_GOS_MODULES} gdisp ${uGFX_GDISP_MODULES} ${uGFX_GINPUT_MODULES} ${uGFX_GQUEUE_MODULES} ${uGFX_GEVENT_MODULES} ${uGFX_GFILE_MODULES} ${uGFX_GTIMER_MODULES} ${uGFX_GWIN_MODULES})

FOREACH(comp ${uGFX_FIND_COMPONENTS})
    LIST(FIND uGFX_COMPONENTS ${comp} INDEX)
    IF(INDEX EQUAL -1)
        MESSAGE(FATAL_ERROR "Unknown uGFX component: ${comp}\nSupported uGFX components: ${uGFX_COMPONENTS}")
    ENDIF()
    IF(uGFX_${comp}_SOURCES)
        FOREACH(source ${uGFX_${comp}_SOURCES})
            FIND_FILE(uGFX_${comp}_${source} NAMES ${source} PATHS ${uGFX_${comp}_SEARCH_PATH} NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH)
            LIST(APPEND uGFX_SOURCES ${uGFX_${comp}_${source}})
        ENDFOREACH()
    ENDIF()
    IF(uGFX_${comp}_HEADERS)
        FOREACH(header ${uGFX_${comp}_HEADERS})
            FIND_PATH(uGFX_${comp}_${header}_INCLUDE_DIR NAMES ${header} PATHS ${uGFX_${comp}_SEARCH_PATH} NO_DEFAULT_PATH CMAKE_FIND_ROOT_PATH_BOTH)
            LIST(APPEND uGFX_INCLUDE_DIRS ${uGFX_${comp}_${header}_INCLUDE_DIR})
        ENDFOREACH()
    ENDIF()
ENDFOREACH()

MESSAGE(STATUS "uGFX uGFX_INCLUDE_DIRS: ${uGFX_INCLUDE_DIRS}")
MESSAGE(STATUS "uGFX SOURCES: ${uGFX_SOURCES}")