# --- dependencies ---

# --- variables ---

# --- helpers ---
MACRO(OY_CREATE_MODULE TEST_SHARED TEST_STATIC)
  IF(ENABLE_SHARED_LIBS AND ${TEST_SHARED})
    ADD_LIBRARY( ${OY_MODULE_LIB} SHARED ${SOURCES} )
    IF(MODULE_DEFS)
      SET_TARGET_PROPERTIES( ${OY_MODULE_LIB} PROPERTIES COMPILE_DEFINITIONS "${MODULE_DEFS}" )
    ENDIF()
    TARGET_LINK_LIBRARIES ( ${OY_MODULE_LIB} ${PROJECT_NAME} ${MODULE_EXTRA_LIBS} )
    INSTALL (TARGETS ${OY_MODULE_LIB} DESTINATION ${CMAKE_INSTALL_LIBDIR}/${OY_CMMSUBPATH})
  ENDIF(ENABLE_SHARED_LIBS AND ${TEST_SHARED})

  SET( OY_MODULE_LIBRARIES ${OY_MODULE_LIBRARIES} ${MODULE_EXTRA_LIBS} )
  IF(ENABLE_STATIC_LIBS AND ${TEST_STATIC})
    #ADD_LIBRARY( ${OY_MODULE_LIB}-static STATIC ${SOURCES} )
    SET( SOURCES_STATIC ${SOURCES_STATIC} ${SOURCES} )
    #SET_TARGET_PROPERTIES( ${OY_MODULE_LIB}-static PROPERTIES COMPILE_DEFINITIONS ${MODULE_DEFS} )
    #TARGET_LINK_LIBRARIES ( ${OY_MODULE_LIB}-static ${PACKAGE_NAME}-static ${MODULE_EXTRA_LIBS} )
    SET( OY_MODULE_STATIC ${OY_MODULE_STATIC} ${OY_MODULE_LIB}-static )
  ENDIF(ENABLE_STATIC_LIBS AND ${TEST_STATIC})
ENDMACRO(OY_CREATE_MODULE TEST_SHARED TEST_STATIC)

# --- normal modules ---
ADD_SUBDIRECTORY (lcms2)

IF( HAVE_LCMS )
  SET( OY_MODULE lcms )
  SET( MODULE_EXTRA_LIBS ${EXTRA_LIBS} )
  SET( OY_MODULE_LIB ${PACKAGE_NAME}_${OY_MODULE}${OY_MODULE_NAME} )
  # lcms 1 and lcms 2 APIs are too close to handle safely in a static library; just use the later
  SET( SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}.c )
  IF(ENABLE_SHARED_LIBS)
    ADD_LIBRARY( ${OY_MODULE_LIB} SHARED ${SOURCES} )
    TARGET_LINK_LIBRARIES ( ${OY_MODULE_LIB} ${PROJECT_NAME} ${MODULE_EXTRA_LIBS} )
# ${LCMS_LIBRARIES}
    INSTALL (TARGETS ${OY_MODULE_LIB} DESTINATION ${CMAKE_INSTALL_LIBDIR}/${OY_CMMSUBPATH})
  ENDIF(ENABLE_SHARED_LIBS)

  IF(ENABLE_STATIC_LIBS AND NOT HAVE_LCMS2)
    #ADD_LIBRARY( ${OY_MODULE_LIB}-static STATIC ${SOURCES} )
    SET( SOURCES_STATIC ${SOURCES_STATIC} ${SOURCES} )
    SET( MODULE_EXTRA_LIBS ${EXTRA_LIBS} ${LCMS_LIBRARIES} )
    #TARGET_LINK_LIBRARIES ( ${OY_MODULE_LIB}-static ${PACKAGE_NAME}-static ${MODULE_EXTRA_LIBS} )
    SET( OY_MODULE_STATIC ${OY_MODULE_STATIC} ${OY_MODULE_LIB}-static )
  ENDIF(ENABLE_STATIC_LIBS AND NOT HAVE_LCMS2)
  SET( OY_MODULE_LIBRARIES ${OY_MODULE_LIBRARIES} ${MODULE_EXTRA_LIBS} )
ENDIF( HAVE_LCMS )


IF( HAVE_LIBRAW_PLUGIN )
  SET( OY_MODULE lraw )
  SET( MODULE_EXTRA_LIBS ${EXTRA_LIBS} ${LIBRAW_LIBRARIES} ${EXIF_LIBRARIES} )
  SET( OY_MODULE_LIB ${PACKAGE_NAME}_${OY_MODULE}${OY_MODULE_NAME} )
  SET( SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}.cpp )
  OY_CREATE_MODULE(ENABLE_SHARED_LIBS ENABLE_STATIC_LIBS)
ENDIF( HAVE_LIBRAW_PLUGIN )


SET( OY_MODULE oicc )
SET( MODULE_EXTRA_LIBS ${EXTRA_LIBS} )
SET( OY_MODULE_LIB ${PACKAGE_NAME}_${OY_MODULE}${OY_MODULE_NAME} )
SET( SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}.c )
OY_CREATE_MODULE(ENABLE_SHARED_LIBS ENABLE_STATIC_LIBS)


IF( HAVE_LIBPNG )
  SET( OY_MODULE oPNG )
  FIND_LIBRARY( ZLIB_LIBRARIES NAMES z )
  IF( ZLIB_LIBRARIES )
    SET( PNG_EXTRA_LIBS ${EXTRA_LIBS} ${ZLIB_LIBRARIES} )
  ENDIF( ZLIB_LIBRARIES )
  SET( MODULE_EXTRA_LIBS ${EXTRA_LIBS} ${LIBPNG_LIBRARIES} ${PNG_EXTRA_LIBS} )
  SET( OY_MODULE_LIB ${PACKAGE_NAME}_${OY_MODULE}${OY_MODULE_NAME} )
  SET( SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}.c )
  OY_CREATE_MODULE(ENABLE_SHARED_LIBS ENABLE_STATIC_LIBS)
ENDIF()

IF( HAVE_JPEG )
  SET( OY_MODULE oJPG )
  SET( MODULE_EXTRA_LIBS ${EXTRA_LIBS} ${JPEG_LIBRARY} )
  SET( OY_MODULE_LIB ${PACKAGE_NAME}_${OY_MODULE}${OY_MODULE_NAME} )
  SET( SOURCES
       ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}.c
       ${CMAKE_CURRENT_SOURCE_DIR}/jpegmarkers.c
     )
  OY_CREATE_MODULE(ENABLE_SHARED_LIBS ENABLE_STATIC_LIBS)
ENDIF()


SET( OY_MODULE oydi )
SET( MODULE_EXTRA_LIBS ${EXTRA_LIBS} ${XCM_LIBRARIES} ${X11_EXTRA_LIBS} )
SET( OY_MODULE_LIB ${PACKAGE_NAME}_${OY_MODULE}${OY_MODULE_NAME} )
SET( SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}.c )
OY_CREATE_MODULE(ENABLE_SHARED_LIBS ENABLE_STATIC_LIBS)

SET( OY_MODULE oyra )
SET( MODULE_EXTRA_LIBS ${EXTRA_LIBS} ${XCM_LIBRARIES} ${X11_EXTRA_LIBS} )
SET( OY_MODULE_LIB ${PACKAGE_NAME}_${OY_MODULE}${OY_MODULE_NAME} )
SET( SOURCES
         ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}.c
         ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}.c
         ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}_image.c
         ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}_image_channel.c
         ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}_image_expose.c
         ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}_image_scale.c
         ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}_image_ppm.c
         ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}_profile_graph2d.c
       )
OY_CREATE_MODULE(ENABLE_SHARED_LIBS ENABLE_STATIC_LIBS)

# threads handler
IF( HAVE_PTHREAD )
  SET( OY_MODULE trds )
  SET( MODULE_EXTRA_LIBS ${EXTRA_LIBS} ${THREAD_LIBRARIES} )
  SET( OY_MODULE_LIB ${PACKAGE_NAME}_${OY_MODULE}${OY_MODULE_NAME} )
  SET( SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}.c )
  OY_CREATE_MODULE(ENABLE_SHARED_LIBS ENABLE_STATIC_LIBS)
ENDIF( HAVE_PTHREAD )

# DB handlers
IF( HAVE_OPENICC )
  SET( OY_MODULE oiDB )
  SET( MODULE_EXTRA_LIBS ${EXTRA_LIBS} ${OPENICC_LIBRARY} )
  SET( OY_MODULE_LIB ${PACKAGE_NAME}_${OY_MODULE}${OY_MODULE_NAME} )
  SET( SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}.c )
  OY_CREATE_MODULE(ENABLE_SHARED_LIBS ENABLE_STATIC_LIBS)
ENDIF( HAVE_OPENICC )

IF( HAVE_ELEKTRA )
  SET( OY_MODULE elDB )
  IF( ${CMAKE_SYSTEM_NAME} MATCHES Windows)
    # currently (Elektra-0.8.9) only a statically linked elektra works for Oyranos
    SET( MODULE_EXTRA_LIBS ${EXTRA_LIBS} ${ELEKTRA_LDFLAGS} elektra-full )
  ELSE()
    SET( MODULE_EXTRA_LIBS ${EXTRA_LIBS} ${ELEKTRA_LDFLAGS} )
  ENDIF()
  SET( OY_MODULE_LIB ${PACKAGE_NAME}_${OY_MODULE}${OY_MODULE_NAME} )
  SET( SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/${PACKAGE_NAME}_cmm_${OY_MODULE}.c )
  OY_CREATE_MODULE(ENABLE_SHARED_LIBS ENABLE_STATIC_LIBS)
ENDIF( HAVE_ELEKTRA )

# --- device modules ---
ADD_SUBDIRECTORY (devices)

SET( SOURCES_STATIC ${SOURCES_STATIC} PARENT_SCOPE )
SET( DEFS_STATIC ${DEFS_STATIC} PARENT_SCOPE )
SET( OY_MODULE_STATIC ${OY_MODULE_STATIC} PARENT_SCOPE )
SET( OY_MODULE_LIBRARIES ${OY_MODULE_LIBRARIES} PARENT_SCOPE )
