CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
PROJECT (Iterative)


# Version numbers
SET (Iterative_VERSION_MAJOR 0)
SET (Iterative_VERSION_MINOR 1)

INCLUDE_DIRECTORIES (include)

#add cmake scripts
SET( CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}" )

# Additional linked libraries
SET ( LINKED_LIBS "" )

#Try to find FFTW
FIND_PACKAGE(FFTW REQUIRED)
if( FFTWF_FOUND OR FFTWD_FOUND )
  INCLUDE_DIRECTORIES( ${FFTW_INCLUDE_DIR} )
#  LINK_DIRECTORIES( ${FFTW_LIBRARIES_DIR} )
  SET( LINKED_LIBS ${LINKED_LIBS} ${FFTWF_LIBRARIES} ${FFTWD_LIBRARIES} )
ELSE( FFTWF_FOUND OR FFTWD_FOUND )
  MESSAGE( FATAL_ERROR "FFTW was not found! Please, set the cache entry FFTW_ROOT_DIR!" )
ENDIF( FFTWF_FOUND OR FFTWD_FOUND )

# Find the MDSTk library.
FIND_PACKAGE( MDSTk REQUIRED)
IF( MDSTk_FOUND )
  INCLUDE_DIRECTORIES( ${MDSTk_INCLUDE_DIR} )
  LINK_DIRECTORIES( ${MDSTk_LIBRARIES_DIR} )
  SET( LINKED_LIBS ${LINKED_LIBS} ${MDSTk_LIBRARIES} )
ELSE( MDSTk_FOUND )
  MESSAGE( FATAL_ERROR "MDSTk was not found! Please, set the cache entry MDSTk_ROOT_DIR!" )
ENDIF( MDSTk_FOUND )

# Find zlib library
FIND_PACKAGE( ZLIB REQUIRED )
# Set up used zlib library.
IF( ZLIB_FOUND )
  INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
  LINK_DIRECTORIES( ${ZLIB_LIB} )
  SET( LINKED_LIBS ${LINKED_LIBS} ${ZLIB_LIBRARY} )
ELSE( ZLIB_FOUND )
  MESSAGE( FATAL_ERROR "Zlib library was not found! Please, set the cache entry ZLIB_LIBRARY_DIR!" )
ENDIF( ZLIB_FOUND )

#Try to find PNG library
FIND_PACKAGE(PNG REQUIRED)
if( PNG_FOUND )
INCLUDE_DIRECTORIES( ${PNG_INCLUDE_DIR} )
  LINK_DIRECTORIES( ${PNG_LIBRARIES_DIR} )
  SET( LINKED_LIBS ${LINKED_LIBS} ${PNG_LIBRARIES} )
ELSE( PNG_FOUND )
  MESSAGE( FATAL_ERROR "PNG library was not found! Please, set the cache entry GLUT_ROOT_DIR!" )
ENDIF( PNG_FOUND )
 
#===============================================================================
# Macros

# Add sources directory - adds all source files from the directory
macro( ADD_SOURCE_DIRECTORY _DIR )
  file( GLOB_RECURSE _FILE_SOURCES ${_DIR}/*.c ${_DIR}/*.cpp ${_DIR}/*.cc )
  list( APPEND PROJECT_SOURCES ${_FILE_SOURCES} )
endmacro( ADD_SOURCE_DIRECTORY )
                                                                                
# Add include directory - adds all headers from the directory
macro( ADD_HEADER_DIRECTORY _DIR )
  file( GLOB_RECURSE _FILE_HEADERS ${_DIR}/*.h ${_DIR}/*.hxx ${_DIR}/*.hpp )
  list( APPEND PROJECT_HEADERS ${_FILE_HEADERS} )
endmacro( ADD_HEADER_DIRECTORY )

#===============================================================================
# Add source/header files
                          
add_source_directory( src )
add_header_directory( include )


#===============================================================================


# Set output path for binaries.
SET( OUT_DIR ${PROJECT_SOURCE_DIR}/bin)
SET( EXECUTABLE_OUTPUT_PATH ${OUT_DIR} )

# Set intermediate directory
SET( RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/build )

# Executable
ADD_EXECUTABLE( Iterative ${PROJECT_SOURCES} ${PROJECT_HEADERS} )
TARGET_LINK_LIBRARIES( Iterative ${LINKED_LIBS} )

# Install dir
INSTALL( TARGETS Iterative DESTINATION bin )