# Check third party libraries
set(EPIAR_3RD_PARTY "${PROJECT_SOURCE_DIR}/ThirdParty")
set(EpiarLIBS "" CACHE STRING "Epiar linked libraries" FORCE)
if (MSVC_IDE)
	# Since MSVC controls Debug/Relese information, we can't know for sure which
	# ones to use.
else (MSVC_IDE)
	set(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH}
		"${PROJECT_SOURCE_DIR}/lib")
endif (MSVC_IDE)
# Add option to download dependencies
if (WIN32)
	option(THIRDPARTY_DOWNLOAD "Download/Build missing dependencies?" true)
else (WIN32)
	option(THIRDPARTY_DOWNLOAD "Download/Build missing dependencies?" false)
endif (WIN32)

macro(CHECK_3RD_PARTY)
	# First we parse the arguments
	#  - Argument 1			- Include directory to add to search
	#  - Argument 2			- Download mirror for the library source
	#  - Argument 3			- Basename for the Package variable
	#  - FNDNAME			- Find${FNDNAME}.cmake is the module
	#  - FOUNDVAR			- Variable that is set when the package is found
	#  - INCLUDEVAR			- Variable that will contain the include directory
	#  - LIBVAR				- Variable that will contain the library
	#  - DEP				- Dependencies to add to the Epiar binary
	#  - COMPONENTS			- Components in the FindPackage command
	#  - NOADDLIB			- Don't add this to the Epiar dependencies
	PARSE_ARGUMENTS(CHK3RD "FNDNAME;FOUNDVAR;INCLUDEVAR;LIBVAR;DEP;COMPONENTS" "NOADDLIB" ${ARGV})
	list(GET CHK3RD_DEFAULT_ARGS 0 3RD_INCLUDE)
	list(GET CHK3RD_DEFAULT_ARGS 1 3RD_MIRROR)
	list(GET CHK3RD_DEFAULT_ARGS 2 3RD_BASENAME)

	# Name for the Package name
	set(3RD_FNDNAME ${CHK3RD_FNDNAME})
	if ( NOT CHK3RD_FNDNAME )
		set(3RD_FNDNAME ${3RD_BASENAME})
	endif ( NOT CHK3RD_FNDNAME )

	# Name for the FOUND variable
	set(3RD_FOUNDVAR ${CHK3RD_FOUNDVAR})
	if( NOT CHK3RD_FOUNDVAR )
		set(3RD_FOUNDVAR ${3RD_BASENAME}_FOUND)
	endif( NOT CHK3RD_FOUNDVAR )

	# Name for the INCLUDE variable
	set(3RD_INCVAR ${CHK3RD_INCLUDEVAR})
	if ( NOT CHK3RD_INCLUDEVAR )
		set(3RD_INCVAR ${3RD_BASENAME}_INCLUDE_DIR)
	endif ( NOT CHK3RD_INCLUDEVAR )

	# Name for the LIBRARY variable
	set(3RD_LIBVAR ${CHK3RD_LIBVAR})
	if( NOT CHK3RD_LIBVAR )
		set(3RD_LIBVAR ${3RD_BASENAME}_LIBRARIES)
	endif( NOT CHK3RD_LIBVAR )

	# We only support tar.gz formats
	set(3RD_ARCFORMAT "tar.gz")

	# First add include path to search path
	set(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH}
		"${EPIAR_3RD_PARTY}/${3RD_INCLUDE}")

	# Check if we're downloading
	if (THIRDPARTY_DOWNLOAD)
		set(DL_${3RD_BASENAME}_MIRROR "${3RD_MIRROR}")
		set(${3RD_BASENAME}_BUILD FALSE CACHE STRING "Build ${3RD_BASENAME}")
	else (THIRDPARTY_DOWNLOAD)
		set(TP_REQUIRE "REQUIRED")
	endif (THIRDPARTY_DOWNLOAD)

	# Find the package
	if (NOT ${3RD_BASENAME}_BUILD)
		FIND_THIRD_PARTY(${3RD_FNDNAME} ${TP_REQUIRE} FOUNDVAR ${3RD_FOUNDVAR}
			COMPONENTS ${CHK3RD_COMPONENTS})
	endif (NOT ${3RD_BASENAME}_BUILD)

	# If not found, then we're downloading
	if (THIRDPARTY_DOWNLOAD AND 3RD_MIRROR)
		if (NOT ${3RD_FOUNDVAR})
			# These dummy variables are place holders
			set(${3RD_INCVAR} Dummy)
			set(${3RD_LIBVAR} Dummy)
			set(${3RD_BASENAME}_BUILD TRUE CACHE STRING "Build ${3RD_BASENAME}" FORCE)
			if (NOT EXISTS "${EPIAR_3RD_PARTY}/${3RD_BASENAME}.${3RD_ARCFORMAT}")
				DOWNLOAD_FILE("${DL_${3RD_BASENAME}_MIRROR}"
					"${EPIAR_3RD_PARTY}/${3RD_BASENAME}.${3RD_ARCFORMAT}" REQUIRED)
			endif (NOT EXISTS "${EPIAR_3RD_PARTY}/${3RD_BASENAME}.${3RD_ARCFORMAT}")
			EXTRACT_ARCHIVE("${EPIAR_3RD_PARTY}/${3RD_BASENAME}.${3RD_ARCFORMAT}"
				"${EPIAR_3RD_PARTY}/${3RD_FNDNAME}" REQUIRED)
		endif (NOT ${3RD_FOUNDVAR})
	endif (THIRDPARTY_DOWNLOAD AND 3RD_MIRROR)

	# Add dependencies (if necessary)
	if (${3RD_BASENAME}_BUILD)
		set(${3RD_BASENAME}_STATICLIB_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/lib" CACHE PATH "Output to Epiar's Lib Folder" FORCE)
		add_subdirectory("${EPIAR_3RD_PARTY}/${3RD_FNDNAME}")
		mark_as_advanced(${3RD_BASENAME}_SOURCE_NAME ${3RD_BASENAME}_STATICLIB_OUTPUT_PATH ${3RD_LIBVAR} ${3RD_INCVAR})
		add_dependencies(EpiarBIN ${${3RD_LIBVAR}})
		if ( CHK3RD_DEP )
			add_dependencies(EpiarBIN ${CHK3RD_DEP})
		endif ( CHK3RD_DEP )
	endif(${3RD_BASENAME}_BUILD)
	include_directories(${${3RD_INCVAR}})
	if ( NOT CHK3RD_NOADDLIB )
		set(EpiarLIBS ${EpiarLIBS}
			${${3RD_LIBVAR}} CACHE STRING "Epiar linked libraries" FORCE)
	endif ( NOT CHK3RD_NOADDLIB )
	mark_as_advanced(${3RD_BASENAME}_BUILD)
endmacro(CHECK_3RD_PARTY)

FIND_THIRD_PARTY(OpenGL ${TP_REQUIRE})
set(EpiarLIBS ${EpiarLIBS}
	${OPENGL_gl_LIBRARY}
	${OPENGL_glu_LIBRARY}
	)

CHECK_3RD_PARTY("Zlib/zlib-1.2.3" 
	"http://sourceforge.net/projects/libpng/files/zlib/1.2.3/zlib-1.2.3.tar.gz/download" ZLIB NOADDLIB)

CHECK_3RD_PARTY("PNG/libpng-1.4.0"
	"http://prdownloads.sourceforge.net/libpng/libpng-1.4.0.tar.gz?download" PNG NOADDLIB)

CHECK_3RD_PARTY("SDL/SDL-1.2.14/include"
	"http://www.libsdl.org/release/SDL-1.2.14.tar.gz" SDL
	LIBVAR SDL_LIBRARY)

CHECK_3RD_PARTY("SDL_image/SDL_image-1.2.10"
	"http://www.libsdl.org/projects/SDL_image/release/SDL_image-1.2.10.tar.gz" SDLIMAGE
	FNDNAME SDL_image
	LIBVAR SDLIMAGE_LIBRARY)

# External audio headers for windows
if (WIN32)
	CHECK_3RD_PARTY("MIKMOD/libmikmod-3.1.12/include"
		"http://sourceforge.net/projects/mikmod/files/libmikmod%20(source)/3.1.12/libmikmod-3.1.12.tar.gz/download" MIKMOD)
	
	CHECK_3RD_PARTY("OGG/libogg-1.1.4/include"
		"http://downloads.xiph.org/releases/ogg/libogg-1.1.4.tar.gz" OGG NOADDLIB)
	
	CHECK_3RD_PARTY("VORBIS/libvorbis-1.2.3/include"
	"http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.3.tar.gz" VORBIS)

	set(SDLMIXER_EXTERNAL_INC "${PROJECT_SOURCE_DIR}/include" CACHE PATH "External Audio libraries" FORCE)
	mark_as_advanced(SDLMIXER_EXTERNAL_INC)
endif (WIN32)
CHECK_3RD_PARTY("SDL_mixer/SDL_mixer-1.2.11"
	"http://www.libsdl.org/projects/SDL_mixer/release/SDL_mixer-1.2.11.tar.gz" SDLMIXER
	FNDNAME SDL_mixer
	LIBVAR SDLMIXER_LIBRARY)

if (USE_INTERNAL_LUA)
	set(LUA_SRC_FOLDER "${Epiar_SRC_DIR}/Lua/src" CACHE STRING "Path to Lua source")
	add_subdirectory("${EPIAR_3RD_PARTY}/Lua51")
	mark_as_advanced(LUA_SOURCE_NAME LUA_STATICLIB_OUTPUT_PATH LUA_LIBRARIES LUA_INCLUDE_DIR)
	add_dependencies(EpiarBIN ${LUA_LIBRARIES})
	set(EpiarLIBS ${EpiarLIBS}
		${LUA_LIBRARIES})
else (USE_INTERNAL_LUA)
	unset(LUA_LIBRARIES CACHE)
	if (USE_LUAJIT)
		set(LUAJIT_FIND_STATIC ON)
		CHECK_3RD_PARTY("LuaJIT/LuaJIT-1.1.5/src"
			"http://luajit.org/download/LuaJIT-1.1.5.tar.gz" LUAJIT
			COMPONENTS STATIC)
	else (USE_LUAJIT)
		CHECK_3RD_PARTY("Lua51/lua-5.1.4/src"
			"http://www.lua.org/ftp/lua-5.1.4.tar.gz" LUA
			FNDNAME Lua51
			FOUNDVAR LUA51_FOUND)
	endif (USE_LUAJIT)
endif (USE_INTERNAL_LUA)

CHECK_3RD_PARTY("LibXML2/libxml2-2.7.6/include"
	"ftp://xmlsoft.org/libxml2/libxml2-sources-2.7.6.tar.gz" LIBXML2
	FNDNAME LibXml2)

if ( USE_PHYSICSFS )
CHECK_3RD_PARTY("PhysFS/physfs-2.0.0"
	"http://icculus.org/physfs/downloads/physfs-2.0.0.tar.gz" PHYSFS
	LIBVAR PHYSFS_LIBRARY)
endif ( USE_PHYSICSFS )

CHECK_3RD_PARTY("FreeType/freetype-2.3.11/include"
	"http://sourceforge.net/projects/freetype/files/freetype2/2.3.11/freetype-2.3.11.tar.gz/download" FREETYPE NOADDLIB
	INCLUDEVAR FREETYPE_INCLUDE_DIRS
	FNDNAME Freetype)

CHECK_3RD_PARTY("FTGL/ftgl-2.1.3~rc5/src"
	"http://sourceforge.net/projects/ftgl/files/FTGL%20Source/2.1.3~rc5/ftgl-2.1.3-rc5.tar.gz/download" FTGL)

# Reset the option after download
set(THIRDPARTY_DOWNLOAD FALSE CACHE BOOL "Download/Build missing dependencies?" FORCE)

# Look for Doxygen
if (COMPILE_DOXYGEN)
	find_package(Doxygen)
	if (DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
		add_custom_target(docs "${DOXYGEN_EXECUTABLE}"
			WORKING_DIRECTORY ${Epiar_SRC_DIR})
	else (DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
		message(ERROR "Doxygen not found, cannot compile documentation.")
	endif (DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND)
endif (COMPILE_DOXYGEN)

# vim:ft=cmake
