#version minimale de cmake nécessaire
cmake_minimum_required(VERSION 2.6...3.13)

#nom du projet
project ("Lightup" C)

# enable testing
enable_testing()
set(MEMORYCHECK_COMMAND_OPTIONS "--error-exitcode=1 --leak-check=full")
include(CTest)

## use pkgconfig to solve SDL2 dependencies (Linux only)
# include(FindPkgConfig) # pkg-config --list-all  | grep -i sdl2
# pkg_search_module(SDL2 REQUIRED sdl2)
# pkg_search_module(SDL2_IMG REQUIRED SDL2_image)
# pkg_search_module(SDL2_TTF REQUIRED SDL2_ttf)
# pkg_search_module(SDL2_MIXER REQUIRED SDL2_mixer)
# set(SDL2_ALL_LIBS ${SDL2_LIBRARIES} ${SDL2_IMG_LIBRARIES} ${SDL2_TTF_LIBRARIES})
# set(SDL2_ALL_INC ${SDL2_INCLUDE_DIRS} ${SDL2_IMG_INCLUDE_DIRS} ${SDL2_TTF_INCLUDE_DIRS})

## use a CMake3 package to solve SDL2 dependencies
find_package(SDL2 REQUIRED)
set(SDL2_ALL_INC ${SDL2_INCLUDE_DIRS})
set(SDL2_ALL_LIBS ${SDL2_LIBRARIES} -lSDL2_ttf -lSDL2_image -lSDL2_mixer) # add extra SDL2 libraries


message(STATUS "SDL2 include dir: ${SDL2_ALL_INC}")
message(STATUS "SDL2 all libraries: ${SDL2_ALL_LIBS}")

#positionne la variable
set(CMAKE_C_FLAGS "-std=c99 -Wall")
set(CMAKE_C_FLAGS_DEBUG "-g --coverage -pthread -Wextra -Wunused-parameter -Wpedantic -Werror")    # use CMake option: -DCMAKE_BUILD_TYPE=DEBUG
set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG")   # use CMake option: -DCMAKE_BUILD_TYPE=RELEASE

######################### COPY IMGAES #########################

file(GLOB ASSETS
  "${CMAKE_CURRENT_SOURCE_DIR}/assets/*"
)
message(STATUS "Assets found: ${ASSETS}")
file(COPY ${ASSETS} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})


############################# SRC #############################

# game_text
add_executable(game_text game_text.c)
target_link_libraries(game_text game)

# game_tests
add_executable(game_test game_test.c)
target_link_libraries(game_test game)

# game_solve
add_executable(game_solve game_solve.c)
target_link_libraries(game_solve game)

# game_sdl
include_directories(${SDL2_ALL_INC})
add_executable(game_sdl main.c model.c)
target_link_libraries(game_sdl game ${SDL2_ALL_LIBS})

# libgame
add_library (game game.c game_aux.c game_ext.c game_private.c history.c game_tools.c game_examples.c)

# history tests
#add_executable(history_test history_test.c)
#target_link_libraries(history_test game)


############################# TEST V1 #############################

add_test(test_thoguet_game_new_v1 ./game_test game_new)
add_test(test_thoguet_game_default_v1 ./game_test game_default)
add_test(test_thoguet_game_default_solution_v1 ./game_test game_default_solution)
add_test(test_nnunes_game_set_square_v1 ./game_test game_set_square)
add_test(test_nnunes_game_get_state_v1 ./game_test game_get_state)
add_test(test_nnunes_game_get_flags_v1 ./game_test game_get_flags)
add_test(test_nnunes_game_is_marked_v1 ./game_test game_is_marked)
add_test(test_nnunes_game_is_lighted_v1 ./game_test game_is_lighted)
add_test(test_thperrier_game_is_black_v1 ./game_test game_is_black)
add_test(test_thoguet_game_is_over_v1 ./game_test game_is_over)
add_test(test_thperrier_game_get_black_number_v1 ./game_test game_get_black_number)
add_test(test_thperrier_game_is_lightbulb_v1 ./game_test game_is_lightbulb)
add_test(test_thperrier_game_is_blank_v1 ./game_test game_is_blank)
add_test(test_thperrier_game_new_empty_v1 ./game_test game_new_empty)
add_test(test_game_equal_v1 ./game_test equal)


############################# TEST V2 #############################

add_test(test_thoguet_game_get_square_v2 ./game_test game_get_square)
add_test(test_thoguet_game_restart_v2 ./game_test game_restart)
add_test(test_thoguet_game_update_flags_v2 ./game_test game_update_flags)
add_test(test_thoguet_game_play_move_v2 ./game_test game_play_move)
add_test(test_thoguet_game_check_move_v2 ./game_test game_check_move)
add_test(test_thoguet_game_new_empty_ext_v2 ./game_test game_new_empty_ext)
add_test(test_thoguet_game_new_ext_v2 ./game_test game_new_ext)
add_test(test_thperrier_game_copy_v2 ./game_test game_copy)
add_test(test_game_equal_v2 ./game_test equal_ext)
add_test(test_thperrier_game_delete_v2 ./game_test game_delete)
add_test(test_thperrier_game_undo_v2 ./game_test game_undo)
add_test(test_thperrier_game_redo_v2 ./game_test game_redo)
add_test(test_nnunes_game_has_error_v2 ./game_test game_has_error)
add_test(test_nnunes_game_nb_rows_v2 ./game_test game_nb_rows)
add_test(test_nnunes_game_nb_cols_v2 ./game_test game_nb_cols)
add_test(test_nnunes_game_is_wrapping_v2 ./game_test game_is_wrapping)
add_test(test_thoguet_game_print_v2 ./game_test game_print)


############################# TEST V3 #############################

add_test(test_thoguet_game_save_v3 ./game_test game_save)
add_test(test_mfatih_game_load_v3 ./game_test game_load)
add_test(test_thoguet_game_solve_v3 ./game_test game_solve)
add_test(test_vcarmona_game_nb_solutions_v3 ./game_test game_nb_solutions)


############################# TEST HISTORY #############################

# add_test(test_history_history_alloc ./history_test history_alloc)
# add_test(test_history_create_empty ./history_test history_create_empty)
# add_test(test_history_delete_entire_history ./history_test history_delete_entire_history)
# add_test(test_history_is_empty ./history_test history_is_empty)
# add_test(test_history_next ./history_test history_next)
# add_test(test_history_prev ./history_test history_prev)
# add_test(test_history_insert_first ./history_test history_insert_first)
# add_test(test_history_delete_first ./history_test history_delete_first)
# add_test(test_history_insert_after ./history_test history_insert_after)
# add_test(test_history_delete_after ./history_test history_delete_after)
# add_test(test_history_insert_before ./history_test history_insert_before)
# add_test(test_history_delete_before ./history_test history_delete_before)
# add_test(test_history_last ./history_test history_last)
# add_test(test_history_first ./history_test history_first)
# add_test(test_history_append ./history_test history_append)
# add_test(test_history_copy ./history_test history_copy)
