cmake_minimum_required(VERSION 3.10)
project(classicsnake)


set(CMAKE_C_COMPILER "gcc")
set(CMAKE_C_STANDARD 11)

#find_package(SDL REQUIRED)
#find_package(Threads REQUIRED)
#find_package(SDL_ttf REQUIRED)
find_package(PkgConfig REQUIRED)


pkg_search_module(GLIB REQUIRED glib-2.0)
#pkg_search_module(SDL REQUIRED SDL)
pkg_search_module(SDL REQUIRED sdl12_compat)
pkg_search_module(SDL_TTF REQUIRED SDL_ttf)

if (UNIX)

add_executable(classicsnake
	sources/classicsnake.h
	sources/path_linux.h
	sources/gfx/splash.h
	sources/gfx/units.h
	sources/sfx/bitten.h
	sources/sfx/food.h
	sources/sfx/start.h
	sources/menu.c
	sources/game.c
	sources/file.c
	sources/audio.c
	sources/main.c
)
message(STATUS "Build host runs Linux")
target_compile_definitions(classicsnake PRIVATE LINUX)
endif (UNIX)

if (MINGW)

set(APP_ICON_RESOURCE_WINDOWS "${CMAKE_CURRENT_SOURCE_DIR}/MINGW32/classicsnake.rc")

add_executable(classicsnake
	sources/classicsnake.h
	sources/path_windows.h
	sources/gfx/splash.h
	sources/gfx/units.h
	sources/sfx/bitten.h
	sources/sfx/food.h
	sources/sfx/start.h
	sources/menu.c
	sources/game.c
	sources/file.c
	sources/audio.c
	sources/main.c
	${APP_ICON_RESOURCE_WINDOWS}
)
#set(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32/)

message(STATUS "Target system is Windows")
#set(GUI_TYPE WIN32)
#add_definitions(-DWIN32 -D_WINDOWS -D_UNICODE -DUNICODE)
target_compile_definitions(classicsnake PRIVATE WINDOWS)

endif (MINGW)

set_target_properties(classicsnake PROPERTIES
	WIN32_EXECUTABLE TRUE
	LINUX_EXECUTABLE TRUE
)

# Połącz z bibliotekami SDL2 i pthread
target_include_directories(classicsnake PRIVATE ${SDL_INCLUDE_DIRS})
target_include_directories(classicsnake PRIVATE ${GLIB_INCLUDE_DIRS})
#target_link_libraries(classicsnake ${SDL_LIBRARIES} ${SDL_ttf_LIBRARIES} ${GLIB_LDFLAGS})
target_link_libraries(classicsnake ${SDL_LIBRARIES} ${SDL_TTF_LIBRARIES} ${GLIB_LDFLAGS})
#target_link_libraries(classicsnake Synchronization)

#target_link_libraries(classicsnake Threads::Threads)

# Support both 32 and 64 bit builds
if (${CMAKE_SIZEOF_VOID_P} MATCHES 8)
  set(SDL_LIBRARIES "${CMAKE_CURRENT_LIST_DIR}/lib/x64/SDL2.lib;${CMAKE_CURRENT_LIST_DIR}/lib/x64/SDL2main.lib")
else ()
  set(SDL_LIBRARIES "${CMAKE_CURRENT_LIST_DIR}/lib/x86/SDL2.lib;${CMAKE_CURRENT_LIST_DIR}/lib/x86/SDL2main.lib")
endif ()

# Ustawienia instalacji
install(TARGETS classicsnake
	RUNTIME DESTINATION pietraszczyk/classicsnake
#    LIBRARY DESTINATION lib
#    ARCHIVE DESTINATION lib
)

# Instalacja dodatkowych plików (np. konfiguracyjnych)
#install(FILES ClassicSnake.desktop DESTINATION share/applications/)
install(FILES assets/classicsnake.png DESTINATION pietraszczyk/classicsnake)
install(FILES ZapfHumanist.ttf DESTINATION pietraszczyk/classicsnake)


# Znajdź ścieżkę do pliku .desktop
set(DESKTOP_FILE "ClassicSnake.desktop")

# Skonfiguruj plik .desktop z odpowiednimi ścieżkami
configure_file(
    ${CMAKE_CURRENT_SOURCE_DIR}/${DESKTOP_FILE}
    ${CMAKE_CURRENT_BINARY_DIR}/${DESKTOP_FILE}
    @ONLY
)

# Instalacja pliku .desktop do systemowego katalogu
install(
    FILES ${CMAKE_CURRENT_BINARY_DIR}/${DESKTOP_FILE}
    DESTINATION /usr/share/applications
    COMPONENT desktop
)


# Sekcja uninstall
configure_file(
    "${CMAKE_SOURCE_DIR}/cmake_uninstall.cmake.in"
    "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
    IMMEDIATE @ONLY
)
add_custom_target(uninstall
    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake
    COMMENT "Uninstalling..."
)
