cmake_minimum_required(VERSION 2.6)
project(siril)

# Version
set(VERSION "0.9.0rc1")

set(PACKAGE_BUGREPORT "")
set(PACKAGE_URL "")

set(INCLUDE_DIRS "${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/src ${PROJECT_BINARY_DIR}")

macro(package_found package)
  if(${package}_FOUND)
#    add_to_string(INCLUDE_DIRS "${${package}_INCLUDE_DIRS}")
#    set(LIBRARY_DIRS "${LIBRARY_DIRS} ${${package}_LIBRARY_DIRS}")
    add_to_string(LIBRARIES "${${package}_LIBRARIES}")
    add_to_string(CFLAGS "${${package}_CFLAGS}")
    add_to_string(LDFLAGS "${${package}_LDFLAGS}")
#    message("${LIBRARIES}")
  endif()
endmacro()

macro(optional_package_found package)
  package_found(${package})
  if(${package}_FOUND)
    set(HAVE_${package} 1)
  else()
    message("Warning: ${package} not found.")
  endif()
endmacro()

macro(add_to_string string list)
#  message("+++${list}")
  foreach(var ${list})
    if(${string})
#      message("!!!${var}")
      set(${string} "${${string}} ${var}")
    else()
#      message("???${var}")
      set(${string} "${var}")
    endif()
  endforeach()
endmacro()

find_package(OpenMP)
if(OPENMP_FOUND)
  add_to_string(CMAKE_C_FLAGS "${CMAKE_C_FLAGS};${OpenMP_C_FLAGS}")
  add_to_string(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS};${OpenMP_CXX_FLAGS}")
endif()

find_package(PkgConfig REQUIRED)

# :GTK+3,GSL,FFTW,CFITSIO,LIBCONFIG
pkg_check_modules(GTK3 REQUIRED gtk+-3.0>=3.6)
package_found(GTK3)

find_package(GSL REQUIRED)
if(GSL_FOUND)
  add_to_string(LIBRARIES "${GSL_LIBRARIES}")
#  set(LIBRARY_DIRS "${LIBRARY_DIRS} ${GSL_LINK_DIRECTORIES}")
  add_to_string(INCLUDE_DIRS "${GSL_INCLUDE_DIR}")
endif()

#find_path(FFTW3 fftw3.h
#  "$ENV{PATH}")
#if(FFTW3)
#  add_to_string(LIBRARIES "${FFTW3}/libfftw3-3.a")
#  add_to_string(INCLUDE_DIRS "${FFTW3}")
#  message(STATUS "FFTW3 found.")
#else()
#  message(FATAL_ERROR "FFTW3 not found.")
#endif()

pkg_check_modules(FFTW3 REQUIRED fftw3)
package_found(FFTW3)

pkg_check_modules(CFITSIO REQUIRED cfitsio)
package_found(CFITSIO)

pkg_check_modules(LIBCONFIG REQUIRED libconfig)
package_found(LIBCONFIG)

# ѡ:LibRaw,LIBJPEG,LIBPNG,LIBTIFF,FFMS2,OpenCV
pkg_check_modules(LIBRAW libraw)
optional_package_found(LIBRAW)

find_package(JPEG)
if(JPEG_FOUND)
  add_to_string(INCLUDE_DIRS "${JPEG_INCLUDE_DIR}")
  add_to_string(LIBRARIES "${JPEG_LIBRARIES}")
  set(HAVE_JPEG 1)
endif()

pkg_check_modules(LIBTIFF libtiff-4)
optional_package_found(LIBTIFF)

pkg_check_modules(LIBPNG libpng)
optional_package_found(LIBPNG)

pkg_check_modules(FFMS2 ffms2)
optional_package_found(FFMS2)

#pkg_check_modules(OPENCV opencv>=2.0)
#optional_package_found(OPENCV)

configure_file(
  "${PROJECT_SOURCE_DIR}/config.h.in"
  "${PROJECT_BINARY_DIR}/config.h"
)

aux_source_directory(src SOURCES)
list(REMOVE_ITEM SOURCES "src/opencv.cpp")
list(REMOVE_ITEM SOURCES "src/main_ser.c")
#message("${SOURCES}")

add_executable(siril ${SOURCES})

add_custom_command(
  OUTPUT siril.exp
  COMMAND dlltool -d ${PROJECT_SOURCE_DIR}/siril.def -e ${PROJECT_BINARY_DIR}/siril.exp
  DEPENDS ${PROJECT_SOURCE_DIR}/siril.def
  COMMENT "Build siril.exp..."
  VERBATIM
)

add_custom_target(siril_exp DEPENDS siril.exp)

add_dependencies(siril siril_exp)

separate_arguments(INCLUDE_DIRS)
include_directories("${INCLUDE_DIRS}")
#link_directories("${LIBRARY_DIRS}")
add_to_string(LIBRARIES "${PROJECT_BINARY_DIR}/siril.exp")
separate_arguments(LIBRARIES)
target_link_libraries(siril ${LIBRARIES})

add_to_string(CMAKE_C_FLAGS "-g;${CFLAGS}")
#add_to_string(CMAKE_CXX_FLAGS ${CXXFLAGS})
add_to_string(CMAKE_EXE_LINKER_FLAGS "-mwindows;${LDFLAGS}")

#message("${INCLUDE_DIRS}")
#message("${LIBRARY_DIRS}")
#message("${LIBRARIES}")
#message("${CFLAGS}")
#message("${CMAKE_EXE_LINKER_FLAGS}")
#message("${OBJECTS}")

#message("${CMAKE_C_LINK_EXECUTABLE}")
#set(CMAKE_C_LINK_EXECUTABLE "cmake -E echo \"${CMAKE_C_LINK_EXECUTABLE}\"")

add_definitions(-DHAVE_CONFIG_H)

install(DIRECTORY pixmaps/ DESTINATION share/siril)
install(TARGETS siril DESTINATION bin)
install(FILES src/siril3.glade DESTINATION share/siril)
install(FILES src/gtk.css DESTINATION share/siril)