# CMake file for development of IMF Player
# This CMake file is used under Linux normally. 

cmake_minimum_required(VERSION 2.4)
IF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.4)
	cmake_policy(SET CMP0005 OLD)
	cmake_policy(SET CMP0003 OLD)
	#include(PCHSupport_26.cmake)
ENDIF (${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} GREATER 2.4)

	MESSAGE( "Preparing the Build-System for IMF Player" )

# This parts detects, if we are working on a 64-bit System
#IF( NOT APPLE )
#	IF( CMAKE_SIZEOF_VOID_P MATCHES 4 )
#	  set( HAVE_64_BIT 0 )
#	ELSEIF( CMAKE_SIZEOF_VOID_P MATCHES 8 )
#	  set( HAVE_64_BIT 1 )
#	ELSE( CMAKE_SIZEOF_VOID_P MATCHES 4 )
#	  set( HAVE_64_BIT 0 )
#	ENDIF( CMAKE_SIZEOF_VOID_P MATCHES 4 )
#ENDIF( NOT APPLE )
#set( HAVE_64_BIT 0 )

OPTION(DEBUG "enable debug build" Yes)
OPTION(SDL "SDL support (will not work without)" Yes)

IF (DEBUG)
	SET(CMAKE_BUILD_TYPE Debug)
ELSE (DEBUG)
	SET(CMAKE_BUILD_TYPE Release)
ENDIF (DEBUG)

# Platform specific things can be put here
# Compilers and other specific variables can be found here:
# http://www.cmake.org/Wiki/CMake_Useful_Variables


# Check wether in what system it is configured
IF(NOT HAVE_64_BIT AND BUILD_TYPE STREQUAL LINUX64)
	MESSAGE( "Warning: Building 64-bit Version on 32-bit machine is not supported!" )
ENDIF(NOT HAVE_64_BIT AND BUILD_TYPE STREQUAL LINUX64)


# Directory creation of all the builds
EXEC_PROGRAM(mkdir ARGS -p ${CMAKE_CURRENT_SOURCE_DIR}/build OUTPUT_VARIABLE NULL)
EXEC_PROGRAM(mkdir ARGS -p ${CMAKE_CURRENT_SOURCE_DIR}/build/Linux32 OUTPUT_VARIABLE NULL)
EXEC_PROGRAM(mkdir ARGS -p ${CMAKE_CURRENT_SOURCE_DIR}/build/Linux64 OUTPUT_VARIABLE NULL)
EXEC_PROGRAM(mkdir ARGS -p ${CMAKE_CURRENT_SOURCE_DIR}/build/Win32 OUTPUT_VARIABLE NULL)
EXEC_PROGRAM(mkdir ARGS -p ${CMAKE_CURRENT_SOURCE_DIR}/build/Xcode OUTPUT_VARIABLE NULL)

PROJECT(imfplayer)

# main includes
INCLUDE_DIRECTORIES(optional-includes/generated)
INCLUDE_DIRECTORIES(src)
#INCLUDE_DIRECTORIES(src/fileio)
#INCLUDE_DIRECTORIES(src/hardware)
#INCLUDE_DIRECTORIES(src/sdl/music)

AUX_SOURCE_DIRECTORY(src ROOT_S)
AUX_SOURCE_DIRECTORY(src/hardware HARDWARE_S)
AUX_SOURCE_DIRECTORY(src/sdl/music SDLMUSIC_S)

SET(ALL_SRCS ${ROOT_S} ${HARDWARE_S} ${SDLMUSIC_S})

IF(UNIX)
# Compilation under Linux
	ADD_DEFINITIONS("-c -fmessage-length=0")

	IF(BUILD_TYPE STREQUAL WIN32)
		set(PREFIX /usr/i586-mingw32msvc/include)
		set(CMAKE_INCLUDE_PATH ${PREFIX})
		set(CMAKE_C_COMPILER i586-mingw32msvc-gcc)
		set(CMAKE_CXX_COMPILER i586-mingw32msvc-g++)
		set(CMAKE_FIND_ROOT_PATH ${PREFIX})
		set(CMAKE_INSTALL_PREFIX ${PREFIX})
		SET(BUILD_DIR Win32)
		ADD_DEFINITIONS(-DWIN32)
		ADD_DEFINITIONS(-DTARGET_WIN32)
		
	ELSEIF(BUILD_TYPE STREQUAL LINUX32)
		ADD_DEFINITIONS("-DTARGET_LNX")

		IF(HAVE_64_BIT)
			ADD_DEFINITIONS(-D__i386__)
			ADD_DEFINITIONS(-m32)
		ELSE(HAVE_64_BIT)
		ENDIF(HAVE_64_BIT)
		SET(BUILD_DIR Linux32)

	ELSEIF(BUILD_TYPE STREQUAL LINUX64)
		ADD_DEFINITIONS("-DTARGET_LNX")
		SET(BUILD_DIR Linux64)
	ELSE(BUILD_TYPE STREQUAL WIN32)
	ENDIF(BUILD_TYPE STREQUAL WIN32)

	SET(OPTIMIZE_COMPILER_FLAG -O3)
ENDIF(UNIX)


IF (SDL)
	ADD_DEFINITIONS(-DSDL)

	IF(BUILD_TYPE STREQUAL WIN32)
		INCLUDE_DIRECTORIES(/usr/i586-mingw32msvc/include/SDL)
	ELSE(BUILD_TYPE STREQUAL WIN32)
		INCLUDE_DIRECTORIES(/usr/include/SDL)
	ENDIF(BUILD_TYPE STREQUAL WIN32)
ENDIF (SDL)

IF(DEBUG)
	ADD_DEFINITIONS(-DDEBUG)
ENDIF(DEBUG)

# Executable definition
ADD_EXECUTABLE(imfplayer ${ALL_SRCS})

# Linking part under Linux
IF(SDL)	
	IF(BUILD_TYPE STREQUAL WIN32)
		TARGET_LINK_LIBRARIES(imfplayer mingw32)
		TARGET_LINK_LIBRARIES(imfplayer SDLmain)
		TARGET_LINK_LIBRARIES(imfplayer SDL)
	ELSEIF(BUILD_TYPE STREQUAL LINUX32)
		IF(HAVE_64_BIT)
			TARGET_LINK_LIBRARIES(imfplayer SDL-1.2)
		ELSE(HAVE_64_BIT)
			TARGET_LINK_LIBRARIES(imfplayer SDL)
		ENDIF(HAVE_64_BIT)
	ELSE(BUILD_TYPE STREQUAL LINUX32)
		TARGET_LINK_LIBRARIES(imfplayer SDL)
	ENDIF(BUILD_TYPE STREQUAL WIN32)
ENDIF(SDL)

IF(BUILD_TYPE STREQUAL LINUX32)
	IF(HAVE_64_BIT)
		SET_TARGET_PROPERTIES(imfplayer PROPERTIES LINK_FLAGS -L/usr/lib32)
		SET_TARGET_PROPERTIES(imfplayer PROPERTIES LINK_FLAGS -m32)
	ENDIF(HAVE_64_BIT)
ENDIF(BUILD_TYPE STREQUAL LINUX32)

IF(BUILD_TYPE STREQUAL WIN32)
	SET_TARGET_PROPERTIES(imfplayer PROPERTIES LINK_FLAGS -L/usr/i586-mingw32msvc/lib)
	SET_TARGET_PROPERTIES(imfplayer PROPERTIES LINK_FLAGS -mwindows)
ENDIF(BUILD_TYPE STREQUAL WIN32)

# Set binary(executable) file name. In Windows this filename needs the exe extension
# The Windows Version has an icon in the executable
IF(BUILD_TYPE STREQUAL WIN32)
	SET_TARGET_PROPERTIES(imfplayer PROPERTIES OUTPUT_NAME "build/${BUILD_DIR}/IMFPlayer.exe")
ELSE(BUILD_TYPE STREQUAL WIN32)
	SET_TARGET_PROPERTIES(imfplayer PROPERTIES OUTPUT_NAME "build/${BUILD_DIR}/IMFPlayer")
ENDIF(BUILD_TYPE STREQUAL WIN32)

IF(NOT DEFINED BUILD_TYPE)
	SET(BUILD_TYPE LINUX32)
	MESSAGE( "WARNING: You did not specify the build type with the -DBUILD_TYPE= Parameter. LINUX32 has been choosen" )
	MESSAGE( "Available Builds are: WIN32, LINUX32, LINUX64, For 64-bit Linux use 'cmake . -DBUILD_TYPE=LINUX64'" )
ENDIF(NOT DEFINED BUILD_TYPE)


MESSAGE( "BUILD_TYPE = ${BUILD_TYPE}" )
MESSAGE( "BUILD_DIR = ${BUILD_DIR}" )
MESSAGE( "DEBUG = ${DEBUG}" )
MESSAGE( "CMAKE_C_COMPILER = ${CMAKE_C_COMPILER}" )
MESSAGE( "CMAKE_C_FLAGS = ${CMAKE_C_FLAGS}" )
MESSAGE( "CMAKE_CXX_COMPILER = ${CMAKE_CXX_COMPILER}" )
MESSAGE( "CMAKE_CXX_FLAGS = ${CMAKE_CXX_FLAGS}" )
MESSAGE( "OPENGL = ${OPENGL}" )
MESSAGE( "OGG = ${OGG}" )
MESSAGE( "TREMOR = ${TREMOR}" )
MESSAGE( "64BIT = ${HAVE_64_BIT}" )

