# sources
SET(INSTEAD_SRCS
	SDL_gif.c
	SDL_gfxBlitFunc.c
	SDL_rotozoom.c
	config.c
	game.c
	graphics.c
	input.c
	noise1234.c
	ioapi.c
	main.c
	menu.c
	sound.c
	themes.c
	unpack.c
	unzip.c
	utils.c
	instead_bits.c
	instead_sprites.c
	instead_timer.c
	instead_sound.c
	instead_paths.c
	instead/instead.c
	instead/util.c
	instead/list.c
	instead/cache.c
	instead/idf.c
	instead/tinymt32.c
	instead/lfs.c
)

# platform-specific sources
IF(APPLE)
	SET(INSTEAD_SRCS ${INSTEAD_SRCS} macosx.m)
	ADD_DEFINITIONS(-Dunix)
ELSEIF(WIN32)
	SET(INSTEAD_SRCS ${INSTEAD_SRCS} windows.c iowin32.c)
ELSEIF(UNIX)
	SET(INSTEAD_SRCS ${INSTEAD_SRCS} unix.c)
	ADD_DEFINITIONS(-Dunix)
ELSE(APPLE)
	MESSAGE(FATAL_ERROR "Your platform is not supported yet, sorry")
ENDIF(APPLE)

# flags
ADD_DEFINITIONS(
	-DVERSION=\"${INSTEAD_VERSION}\"
	-D_USE_UNPACK
	-Wall
	-D_USE_SDL
)

INCLUDE(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG(-Wextra WEXTRA_FLAG_SUPPORTED)
CHECK_CXX_COMPILER_FLAG(-Wno-unused-parameter WNO_UNUSED_PARAMETER_FLAG_SUPPORTED)

IF(WEXTRA_FLAG_SUPPORTED)
	ADD_DEFINITIONS(-Wextra)
ENDIF(WEXTRA_FLAG_SUPPORTED)

IF(WNO_UNUSED_PARAMETER_FLAG_SUPPORTED)
	ADD_DEFINITIONS(-Wno-unused-parameter)
ENDIF(WNO_UNUSED_PARAMETER_FLAG_SUPPORTED)

IF(APPIMAGE)
	ADD_DEFINITIONS(-DAPPIMAGE)
ENDIF(APPIMAGE)

IF(SYSTEMWIDE)
	if(APPIMAGE)
		ADD_DEFINITIONS(
			-DLANG_PATH=\"usr/${LANGDIR}/\"
			-DSTEAD_PATH=\"usr/${STEADDIR}/\"
			-DGAMES_PATH=\"usr/${GAMESDIR}/\"
			-DTHEMES_PATH=\"usr/${THEMESDIR}/\"
			-DICON_PATH=\"usr/${ICONDIR}/\"
		)
	ELSE(APPIMAGE)
		# Systemwide installation, global data paths
		ADD_DEFINITIONS(
			-DLANG_PATH=\"${CMAKE_INSTALL_PREFIX}/${LANGDIR}/\"
			-DSTEAD_PATH=\"${CMAKE_INSTALL_PREFIX}/${STEADDIR}/\"
			-DGAMES_PATH=\"${CMAKE_INSTALL_PREFIX}/${GAMESDIR}/\"
			-DTHEMES_PATH=\"${CMAKE_INSTALL_PREFIX}/${THEMESDIR}/\"
			-DICON_PATH=\"${CMAKE_INSTALL_PREFIX}/${ICONDIR}/\"
		)
	ENDIF(APPIMAGE)
ELSEIF(STANDALONE)
	# Standalone installation, local data paths
	ADD_DEFINITIONS(
		-DLANG_PATH=\"lang/\"
		-DSTEAD_PATH=\"stead/\"
		-DGAMES_PATH=\"games/\"
		-DTHEMES_PATH=\"themes/\"
		-DICON_PATH=\"icon/\"
		-D_LOCAL_APPDATA
	)
ELSE(SYSTEMWIDE)
	# Neither, data paths point to source tree
	ADD_DEFINITIONS(
		-DLANG_PATH=\"${CMAKE_SOURCE_DIR}/lang/\"
		-DSTEAD_PATH=\"${CMAKE_SOURCE_DIR}/stead/\"
		-DGAMES_PATH=\"${CMAKE_SOURCE_DIR}/games/\"
		-DTHEMES_PATH=\"${CMAKE_SOURCE_DIR}/themes/\"
		-DICON_PATH=\"${CMAKE_SOURCE_DIR}/icon/\"
	)
ENDIF(SYSTEMWIDE)

# depends
IF(WITH_LUAJIT)
FIND_PACKAGE(LuaJIT REQUIRED)
ELSE(WITH_LUAJIT)
FIND_PACKAGE(Lua51 REQUIRED)
ENDif(WITH_LUAJIT)

FIND_PACKAGE(ZLIB REQUIRED)
FIND_LIBRARY(MATH_LIBRARY m)

INCLUDE_DIRECTORIES(
	${ZLIB_INCLUDE_DIRS}
	${LUA_INCLUDE_DIR}
)

SET(INSTEAD_LIBS
	${ZLIB_LIBRARIES}
	${LUA_LIBRARIES}
	${MATH_LIBRARY}
)

IF(APPLE)
	SET(INSTEAD_LIBS ${INSTEAD_LIBS} "-framework AppKit")
ENDIF(APPLE)

FIND_PACKAGE(SDL2 REQUIRED)
FIND_PACKAGE(SDL2_mixer REQUIRED)
FIND_PACKAGE(SDL2_image REQUIRED)
FIND_PACKAGE(SDL2_ttf REQUIRED)

INCLUDE_DIRECTORIES(
	${SDL2_INCLUDE_DIR}
	${SDL2MIXER_INCLUDE_DIR}
	${SDL2IMAGE_INCLUDE_DIR}
	${SDL2TTF_INCLUDE_DIR}
)

LIST(APPEND INSTEAD_LIBS
	${SDL2_LIBRARY}
	${SDL2MIXER_LIBRARY}
	${SDL2IMAGE_LIBRARY}
	${SDL2TTF_LIBRARY}
)

IF(WITH_ICONV)
	FIND_PACKAGE(Iconv REQUIRED)
	ADD_DEFINITIONS(-D_HAVE_ICONV)
	INCLUDE_DIRECTORIES(${ICONV_INCLUDE_DIR})
	SET(INSTEAD_LIBS ${INSTEAD_LIBS} ${ICONV_LIBRARY})
ENDIF(WITH_ICONV)

IF(WITH_GTK2)
	FIND_PACKAGE(GTK2 REQUIRED)
	ADD_DEFINITIONS(-D_USE_GTK -D_USE_BROWSE ${GTK2_DEFINITIONS})
	INCLUDE_DIRECTORIES(${GTK2_INCLUDE_DIRS})
	SET(INSTEAD_LIBS ${INSTEAD_LIBS} ${GTK2_LIBRARIES})
ELSEIF(WITH_GTK3)
	FIND_PACKAGE(GTK3 REQUIRED)
	ADD_DEFINITIONS(-D_USE_GTK -D_USE_BROWSE)
	INCLUDE_DIRECTORIES(${GTK3_INCLUDE_DIRS})
	SET(INSTEAD_LIBS ${INSTEAD_LIBS} ${GTK3_LIBRARIES})
ENDIF(WITH_GTK2)

IF(WITH_HARFBUZZ)
	FIND_PACKAGE(HarfBuzz REQUIRED)
	ADD_DEFINITIONS(-D_USE_HARFBUZZ ${HARFBUZZ_DEFINITIONS})
	INCLUDE_DIRECTORIES(${HARFBUZZ_INCLUDE_DIR})
	SET(INSTEAD_LIBS ${INSTEAD_LIBS} ${HARFBUZZ_LIBRARY})
	FIND_PACKAGE(PkgConfig REQUIRED)
ENDIF(WITH_HARFBUZZ)

IF(WITH_HARFBUZZ AND NOT WITH_GTK3)
	FIND_PACKAGE(GLIB REQUIRED)
	ADD_DEFINITIONS(${GLIB_DEFINITIONS})
	INCLUDE_DIRECTORIES(${GLIB_INCLUDE_DIRS})
	SET(INSTEAD_LIBS ${INSTEAD_LIBS} ${GLIB_LIBRARIES})
	FIND_PACKAGE(PkgConfig REQUIRED)
ENDIF(WITH_HARFBUZZ AND NOT WITH_GTK3)

# targets
ADD_EXECUTABLE(sdl-instead ${INSTEAD_SRCS})
TARGET_LINK_LIBRARIES(sdl-instead ${INSTEAD_LIBS})

# install
INCLUDE(InstallSymlink)

IF(SYSTEMWIDE)
	INSTALL(TARGETS sdl-instead DESTINATION ${BINDIR})
	INSTALL_SYMLINK(sdl-instead instead${CMAKE_EXECUTABLE_SUFFIX} ${BINDIR})
ELSEIF(STANDALONE)
	INSTALL(TARGETS sdl-instead DESTINATION ${STANDALONEDIR})
	INSTALL_SYMLINK(sdl-instead instead${CMAKE_EXECUTABLE_SUFFIX} ${STANDALONEDIR})
ENDIF(SYSTEMWIDE)
