CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12)

# project name
PROJECT(MyProject)

# specify sources and headers
SET(HDRS
   # module headers go here (*.h)
   )
SET(SRCS
   # module implementations go here (*.cpp)
   main.cpp
   )

# specify source directories
INCLUDE_DIRECTORIES(.)

# C++ standard
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98 -Wall -Werror")
IF (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.2)
   SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wvla")
ENDIF (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 5.2)

# default C++ compiler definitions
IF (NOT CMAKE_BUILD_TYPE)
   IF (UNIX)
      SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O")
   ENDIF (UNIX)
ENDIF (NOT CMAKE_BUILD_TYPE)
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG")

# extend cmake module path
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/CMakeModules)

# find NCurses
FIND_PACKAGE(Curses REQUIRED)
INCLUDE_DIRECTORIES(${CURSES_INCLUDE_DIRS})

# find SDL
FIND_PACKAGE(SDL QUIET)
IF (SDL_FOUND)
   INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR})
   INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR}/..)
   INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR}/SDL)
ENDIF (SDL_FOUND)

# find SDL mixer
FIND_PACKAGE(SDL_mixer QUIET)
IF (SDL_MIXER_FOUND)
   INCLUDE_DIRECTORIES(${SDL_MIXER_INCLUDE_DIR})
ENDIF (SDL_MIXER_FOUND)

# find SDL2
FIND_PACKAGE(SDL2 QUIET)
IF (SDL2_FOUND)
   INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIR})
   INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIR}/..)
   INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIR}/SDL2)
ENDIF (SDL2_FOUND)

# find SDL2 mixer
FIND_PACKAGE(SDL2_mixer QUIET)
IF (SDL2_MIXER_FOUND)
   INCLUDE_DIRECTORIES(${SDL2_MIXER_INCLUDE_DIR})
ENDIF (SDL2_MIXER_FOUND)

# SDL check
IF ((SDL_FOUND AND SDL_MIXER_FOUND) OR (SDL2_FOUND AND SDL2_MIXER_FOUND))
   ADD_DEFINITIONS("-DHAVE_SDL")
   IF (SDL_FOUND)
      MESSAGE(STATUS "SDL found")
   ELSE (SDL_FOUND)
      MESSAGE(STATUS "SDL2 found")
   ENDIF (SDL_FOUND)
ELSE ((SDL_FOUND AND SDL_MIXER_FOUND) OR (SDL2_FOUND AND SDL2_MIXER_FOUND))
   IF (NOT SDL_FOUND)
      MESSAGE(STATUS "SDL not found")
   ENDIF (NOT SDL_FOUND)
   IF (NOT SDL_MIXER_FOUND)
      MESSAGE(STATUS "SDL_mixer not found")
   ENDIF (NOT SDL_MIXER_FOUND)
   IF (NOT SDL2_FOUND)
      MESSAGE(STATUS "SDL2 not found")
   ENDIF (NOT SDL2_FOUND)
   IF (NOT SDL2_MIXER_FOUND)
      MESSAGE(STATUS "SDL2_mixer not found")
   ENDIF (NOT SDL2_MIXER_FOUND)
ENDIF ((SDL_FOUND AND SDL_MIXER_FOUND) OR (SDL2_FOUND AND SDL2_MIXER_FOUND))

# ASCII GFX library
FIND_PATH(GFXLIB_PATH ASCII-GFX.cmake PATHS ${CMAKE_CURRENT_LIST_DIR} PATH_SUFFIXES "ascii-gfx")
IF (GFXLIB_PATH)
   INCLUDE(${GFXLIB_PATH}/ASCII-GFX.cmake)
ENDIF (GFXLIB_PATH)

# ASCII GFX check
IF (GFXLIB_PATH)
   ADD_DEFINITIONS("-DHAVE_GFX")
   MESSAGE(STATUS "ASCII GFX found")
ELSE (GFXLIB_PATH)
   MESSAGE(STATUS "ASCII GFX not found")
ENDIF (GFXLIB_PATH)

# build and link executable
ADD_EXECUTABLE(main ${HDRS} ${SRCS}) # compile main executable
IF (GFXLIB_PATH)
   TARGET_LINK_LIBRARIES(main
      ${GFXLIB_NAME} # link with ascii gfx lib
      )
ENDIF (GFXLIB_PATH)
TARGET_LINK_LIBRARIES(main
   ${CURSES_LIBRARIES} # link with NCurses
   )
IF (SDL_FOUND AND SDL_MIXER_FOUND)
   TARGET_LINK_LIBRARIES(main
      ${SDL_LIBRARY} # link with SDL
      ${SDL_MIXER_LIBRARY} # link with SDL mixer
      )
ENDIF (SDL_FOUND AND SDL_MIXER_FOUND)
IF ((SDL2_FOUND AND SDL2_MIXER_FOUND) AND NOT (SDL_FOUND OR SDL_MIXER_FOUND))
   TARGET_LINK_LIBRARIES(main
      ${SDL2_LIBRARY} # link with SDL2
      ${SDL2_MIXER_LIBRARY} # link with SDL2 mixer
      )
ENDIF ((SDL2_FOUND AND SDL2_MIXER_FOUND) AND NOT (SDL_FOUND OR SDL_MIXER_FOUND))