set(sources
	cfgform.cpp
	dashboard.cpp
	enemy.cpp
	form.cpp
	gamectl.cpp
	kobo.cpp
	map.cpp
	options.cpp
	prefs.cpp
	random.cpp
	sound.cpp
	graphics.cpp
	cfgparse.cpp
	enemies.cpp
	filemap.cpp
	game.cpp
	gamestate.cpp
	manage.cpp
	myship.cpp
	radar.cpp
	scenes.cpp
	screen.cpp
	states.cpp
	spinplanet.cpp
	starfield.cpp
	gridtfx.cpp
	fire.cpp
	themeparser.cpp
	replay.cpp
	replay_gst.cpp
	pfile.cpp
	campaign.cpp
	savemanager.cpp
	openurl.cpp
	logger.c
	dbgconsole.cpp
	gfxengine/gfxengine.cpp
	gfxengine/sofont.cpp
	gfxengine/toolkit.cpp
	gfxengine/window.cpp
	gfxengine/vidmodes.c
	gfxengine/sprite.c
	gfxengine/filters.c
	gfxengine/cs.c
	gfxengine/palette.c
)

include(FindPkgConfig)
include(CheckIncludeFiles)
include(CheckFunctionExists)
include(CheckCSourceCompiles)

include_directories(${KOBOREDUX_SOURCE_DIR})
include_directories(${KOBOREDUX_SOURCE_DIR}/src)
include_directories(${KOBOREDUX_SOURCE_DIR}/src/gfxengine)
include_directories(${CMAKE_BINARY_DIR}/include)

if(DEMO_BUILD)
	add_definitions(-DKOBO_DEMO)
	set(KOBO_EXE_SUFFIX "-demo")
else(DEMO_BUILD)
	set(KOBO_EXE_SUFFIX "")
endif(DEMO_BUILD)

pkg_search_module(SDL2 REQUIRED sdl2)
include_directories(${SDL2_INCLUDE_DIRS})
link_directories(${SDL2_LIBDIR})

pkg_search_module(SDL2IMAGE REQUIRED SDL2_image>=2.0.0)
include_directories(${SDL2IMAGE_INCLUDE_DIRS})

#find_package(PNG REQUIRED)
#include_directories(${PNG_INCLUDE_DIR})

#find_package(AUDIALITY2 REQUIRED)
#include_directories(${AUDIALITY2_INCLUDE_DIR})
pkg_search_module(AUDIALITY2 REQUIRED audiality2)
include_directories(${AUDIALITY2_INCLUDE_DIRS})

set(RES_FILES "")
if(MINGW)
	set(RES_FILES "${KOBOREDUX_SOURCE_DIR}/icons/windows/kobord.rc")
	set(CMAKE_RC_COMPILER_INIT windres)
	ENABLE_LANGUAGE(RC)
	SET(CMAKE_RC_COMPILE_OBJECT
		"<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>")
endif(MINGW)

add_executable(kobord WIN32 MACOSX_BUNDLE ${sources} ${RES_FILES})
set_target_properties(kobord PROPERTIES OUTPUT_NAME
	"kobord${KOBO_EXE_SUFFIX}")

target_link_libraries(kobord ${SDL2_LIBRARIES} ${SDL2IMAGE_LIBRARIES}
	${AUDIALITY2_LIBRARIES} ${KOBO_EXTRA_LIBRARIES})

if(WIN32)
	target_link_libraries(kobord winmm dxguid)
endif(WIN32)

# Release build: full optimization, no debug features, no debug info
set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")

# Maintainer build: No optimizations, lots of warnings, fail on warnings
set(f "-O1 -g -DDEBUG -Wall -Wwrite-strings -Wcast-align")
set(f "${f} -Waggregate-return")
set(f "${f} -fno-builtin -Wshadow")
set(f "${f} -Wmissing-declarations -Wdisabled-optimization")
set(fc "${f} -Wbad-function-cast -Wstrict-prototypes")
set(fc "${f} -Wdeclaration-after-statement -Wmissing-prototypes")
set(CMAKE_C_FLAGS_MAINTAINER "${fc} -Werror")
set(CMAKE_CXX_FLAGS_MAINTAINER "${f} -Werror")

# Debug build: Maintainer + extra debug features, don't fail on warnings
set(CMAKE_C_FLAGS_DEBUG ${fc})
set(CMAKE_CXX_FLAGS_DEBUG ${f})

set(CMAKE_EXTRA_INCLUDE_FILES stdio.h)
check_function_exists(snprintf		KOBO_HAVE_SNPRINTF)
check_function_exists(_snprintf		KOBO_HAVE__SNPRINTF)
check_function_exists(vsnprintf		KOBO_HAVE_VSNPRINTF)
check_function_exists(_vsnprintf	KOBO_HAVE__VSNPRINTF)

set(CMAKE_EXTRA_INCLUDE_FILES unistd.h)
check_function_exists(getegid		KOBO_HAVE_GETEGID)
check_function_exists(setgid		KOBO_HAVE_SETGID)

set(CMAKE_EXTRA_INCLUDE_FILES sys/types.h sys/stat.h unistd.h)
check_function_exists(stat		KOBO_HAVE_STAT)
check_function_exists(lstat		KOBO_HAVE_LSTAT)

set(CMAKE_EXTRA_INCLUDE_FILES)

if(NOT WIN32)
	set(KOBO_DATADIR "${CMAKE_INSTALL_PREFIX}/share/${KOBO_PACKAGE_NAME}")
	set(KOBO_USERDIR "HOME>>.${KOBO_PACKAGE_NAME}")
	set(KOBO_SYSCONFDIR "/etc")
endif(NOT WIN32)
set(KOBO_CONFIGFILE "${KOBO_PACKAGE_NAME}.cfg")

CHECK_C_SOURCE_COMPILES(
	"#include <sys/types.h>
	 #include <signal.h>
	 int main(void) {
	 	return *(signal(0,0))(0) == 1;
	 }"
	RETSIGTYPE_INT
)
if(RETSIGTYPE_INT)
	set(RETSIGTYPE int)
else(RETSIGTYPE_INT)
	set(RETSIGTYPE void)
endif(RETSIGTYPE_INT)
MESSAGE(STATUS "Signal handler return type: ${RETSIGTYPE}")

set(KOBOREDUX_AUTO_MESSAGE
	"This file is automatically generated. Do not edit!")
configure_file(${CMAKE_SOURCE_DIR}/buildconfig.h.cmake
	${CMAKE_BINARY_DIR}/include/buildconfig.h)

install(TARGETS kobord DESTINATION "${KOBO_BIN_DIR}")
