#
#  Copyright (c) 2002-2006 Nick Gnedin 
#  All rights reserved.
#
#  This file may be distributed and/or modified under the terms of the
#  GNU General Public License version 2 as published by the Free Software
#  Foundation and appearing in the file LICENSE.GPL included in the
#  packaging of this file.
#
CMAKE_MINIMUM_REQUIRED(VERSION 2.0)

SET(src ..)
SET(target ifrit)
PROJECT(${target})

SET(addOGL 0 CACHE BOOL "Add OpenGL manually")
SET(addX11 0 CACHE BOOL "Add X11 manualy")
MARK_AS_ADVANCED(addOGL addX11)

IF(NOT CMAKE_BUILD_TYPE)
       SET(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE)
ENDIF(NOT CMAKE_BUILD_TYPE)

#
# ---------------------------------------------------------------------------
#
# Configuration
#
# ---------------------------------------------------------------------------
#
#  Shells
#
OPTION(Shell:CL "Include command-line shell" ON)
OPTION(Shell:QT "Include Qt-based GUI shell" ON)

SET(nsh)
SET(gsh)

IF(Shell:CL)
	SET(nsh ${nsh} cl)
ENDIF(Shell:CL)

IF(Shell:QT)
	SET(gsh ${gsh} qt)
ENDIF(Shell:QT)

IF(NOT nsh AND NOT gsh)
	MESSAGE(FATAL_ERROR "At least one shell must be selected.")
ENDIF(NOT nsh AND NOT gsh)

#
#  Extensions
#
FILE(GLOB dir ${src}/core/extensions/hart) 
IF(EXISTS ${dir})
	OPTION(Extension:HART "Include HART extension" ON)
ENDIF(EXISTS ${dir})

FILE(GLOB dir ${src}/core/extensions/mv) 
IF(EXISTS ${dir})
	OPTION(Extension:MultiView "Include MultiView extension" ON)
ENDIF(EXISTS ${dir})

SET(ext)
IF(Extension:HART)
	SET(ext ${ext} hart)
ENDIF(Extension:HART)

IF(Extension:MultiView)
	SET(ext ${ext} mv)
ENDIF(Extension:MultiView)

#
# ---------------------------------------------------------------------------
#
#  Find dependencies
#
# ---------------------------------------------------------------------------
#
SET(EXECUTABLE_OUTPUT_PATH ..)
MARK_AS_ADVANCED(CMAKE_BACKWARDS_COMPATIBILITY CMAKE_INSTALL_PREFIX LIBRARY_OUTPUT_PATH QT_QMAKE_EXECUTABLE)

# Find curses
INCLUDE(${CMAKE_ROOT}/Modules/FindCurses.cmake)
IF(UNIX AND NOT CURSES_LIBRARY)
	IF(Shell:CL)
		MESSAGE(FATAL_ERROR "Curses library is not found, but is needed for Command-Line Shell. Please disable the Command-Line Shell option or install the curses library.")
	ENDIF(Shell:CL)
ENDIF(UNIX AND NOT CURSES_LIBRARY)

# Find VTK
SET(VTK_DIR $ENV{VTKDIR})
INCLUDE(${CMAKE_ROOT}/Modules/FindVTK.cmake)
IF(NOT VTK_FOUND)
	MESSAGE(FATAL_ERROR "VTK is not found. Please check that VTKDIR variables is set properly.")
ENDIF(NOT VTK_FOUND)
INCLUDE(${VTK_USE_FILE})

IF(VTK_USE_VOLUMEPRO AND VTK_HAVE_VP1000)
	OPTION(CustomVP1000 "Include custom support for VP1000" ON)
ENDIF(VTK_USE_VOLUMEPRO AND VTK_HAVE_VP1000)

# Find OpenGL
IF(addOGL)
	INCLUDE(${CMAKE_ROOT}/Modules/FindOpenGL.cmake)
	IF(NOT OPENGL_FOUND)
		MESSAGE(FATAL_ERROR "OpenGL is not found. Please set advanced variables OPENGL_INCLUDE_DIR and OPENGL_LIBRARIES.")
	ENDIF(NOT OPENGL_FOUND)
	INCLUDE_DIRECTORIES(${OPENGL_INCLUDE_DIR})
ENDIF(addOGL)

# Find X11
IF(UNIX AND addX11)
	INCLUDE(${CMAKE_ROOT}/Modules/FindX11.cmake)
	IF(NOT X11_FOUND)
		MESSAGE(FATAL_ERROR "X11 is not found. Please set advanced variables X11_X11_INCLUDE_PATH and X11_LIBRARIES.")
	ENDIF(NOT X11_FOUND)
	INCLUDE_DIRECTORIES(${X11_X11_INCLUDE_PATH})
ENDIF(UNIX AND addX11)

IF(Shell:QT)
	# Find Qt
	SET(QT_REQUIRED 1)
	INCLUDE(${CMAKE_ROOT}/Modules/FindQt.cmake)
	INCLUDE_DIRECTORIES(${QT_INCLUDE_DIR})
	IF(QT4_INSTALLED)
		INCLUDE_DIRECTORIES(${QT_QT_INCLUDE_DIR})
	ENDIF(QT4_INSTALLED)
	ADD_DEFINITIONS(${QT_DEFINITIONS})
ENDIF(Shell:QT)

#
# ---------------------------------------------------------------------------
#
#  Create the project
#
# ---------------------------------------------------------------------------
#
SET(shell 0)
SET(exten 0)
#
#  Core
#
FILE(GLOB sources ${src}/configure/*.cpp ${src}/core/*.cpp ${src}/help/*.cpp)
INCLUDE_DIRECTORIES(${src}/configure ${src}/core ${src}/help ${src}/docs)

#
#  Shells
#
IF(gsh)
	FILE(GLOB tmp ${src}/shells/configure/*.cpp ${src}/shells/generic/*.cpp ${src}/shells/base/*.cpp)
	IF(tmp)
		SET(sources ${sources} ${tmp})
		INCLUDE_DIRECTORIES(${src}/shells/configure ${src}/shells/generic ${src}/shells/base)
	ENDIF(tmp)
ENDIF(gsh)

FOREACH(s ${nsh} ${gsh})
	FILE(GLOB tmp ${src}/shells/${s}/*.cpp)
	IF(tmp)
		SET(sources ${sources} ${tmp})
		INCLUDE_DIRECTORIES(${src}/shells/${s})
		STRING(TOUPPER ${s} us)
		SET(shell ${shell}+ISHELL_${us})
	ENDIF(tmp)
ENDFOREACH(s)

#
#  Extensions
#
FOREACH(e ${ext})
	FILE(GLOB tmp ${src}/core/extensions/${e}/*.cpp)
	IF(tmp)
		SET(sources ${sources} ${tmp})
		INCLUDE_DIRECTORIES(${src}/core/extensions/${e})
		IF(gsh)
			FILE(GLOB tmp ${src}/shells/generic/extensions/${e}/*.cpp)
			SET(sources ${sources} ${tmp})
			INCLUDE_DIRECTORIES(${src}/shells/generic/extensions/${e})
		ENDIF(gsh)
		STRING(TOUPPER ${e} ue)
		SET(exten ${exten}+IEXTENSION_${ue})
	ENDIF(tmp)
ENDFOREACH(e)

#
#  Special
#
IF(Shell:QT)
	SET(qtdir ${src}/shells/qt)
	SET(qthdr ${qtdir}/iqtwidgettexteditorsubject.h ${qtdir}/iqtwidgethelper.h ${qtdir}/iqtrenderwindowsubject.h ${qtdir}/iqtmenuwindowsubject.h ${qtdir}/iqtmainwindowsubject.h ${qtdir}/iqtframesubject.h)
	SET(tmp)
	QT_WRAP_CPP(dummy tmp ${qthdr})
	SET(sources ${sources} ${tmp})
ENDIF(Shell:QT)

IF(CustomVP1000)
	FILE(GLOB tmp ${src}/special/vp1000/*.cpp)
	IF(tmp)
		SET(sources ${sources} ${tmp})
		INCLUDE_DIRECTORIES(${src}/special/vp1000)
		ADD_DEFINITIONS(-DI_CUSTOM_VP1000)
	ENDIF(tmp)
ENDIF(CustomVP1000)

IF(WIN32 AND NOT CYGWIN)
	FILE(GLOB tmp ${src}/special/win32/*.rc)
	IF(tmp)
		SET(sources ${sources} ${tmp})
	ENDIF(tmp)
ENDIF(WIN32 AND NOT CYGWIN)

#
#  Create target
#
IF(nsh)
	ADD_EXECUTABLE(${target} ${sources})
ELSE(nsh)
	ADD_EXECUTABLE(${target} WIN32 ${sources})
ENDIF(nsh)

ADD_DEFINITIONS(-DI_EXTERNAL_CONFIGURATION -DI_CHECK1)

IF(CMAKE_BUILD_TYPE MATCHES "Debug")
	ADD_DEFINITIONS(-DI_DEBUG -DI_CHECK2)
ENDIF(CMAKE_BUILD_TYPE MATCHES "Debug")

#
#  Edition
#
FILE(GLOB tmp ${src}/configure/edition*.cpp)
IF(tmp) 
	ADD_DEFINITIONS(-DI_EDITION)
ENDIF(tmp) 

FILE(GLOB tmp ${src}/configure/iconfiguresettings.ext) 
CONFIGURE_FILE(${tmp} ${tmp}.h @ONLY)

#
#  Add libraries
#
TARGET_LINK_LIBRARIES(${target} vtkFiltering vtkHybrid vtkRendering) 
#
#  Optional libraries
#
IF(VTK_KITS MATCHES "PARALLEL")
	TARGET_LINK_LIBRARIES(${target} vtkParallel) 
ENDIF(VTK_KITS MATCHES "PARALLEL")
IF(VTK_KITS MATCHES "PATENTED")
	TARGET_LINK_LIBRARIES(${target} vtkPatented) 
ENDIF(VTK_KITS MATCHES "PATENTED")
#
#  VTK 5 libraries
#
IF(VTK_KITS MATCHES "WIDGETS")
	TARGET_LINK_LIBRARIES(${target} vtkWidgets) 
ENDIF(VTK_KITS MATCHES "WIDGETS")
IF(VTK_KITS MATCHES "VOLUMERENDERING")
	TARGET_LINK_LIBRARIES(${target} vtkVolumeRendering) 
ENDIF(VTK_KITS MATCHES "VOLUMERENDERING")

IF(addOGL)
	TARGET_LINK_LIBRARIES(${target} ${OPENGL_LIBRARIES}) 
ENDIF(addOGL)

IF(UNIX AND addX11)
	TARGET_LINK_LIBRARIES(${target} ${X11_LIBRARIES})
ENDIF(UNIX AND addX11)

IF(Shell:QT)
	IF(QT_LIBRARIES)
		TARGET_LINK_LIBRARIES(${target} ${QT_LIBRARIES}) 
	ENDIF(QT_LIBRARIES)
	IF(QT4_INSTALLED)
		TARGET_LINK_LIBRARIES(${target} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QT3SUPPORT_LIBRARY} ${QT_QTOPENGL_LIBRARY}) 
		IF (WIN32)
			FIND_LIBRARY(QT_QTMAIN_LIBRARY qtmain ${QT_LIBRARY_DIR} DOC "This Library is only needed by and included with Qt on MSWindows. It should be NOTFOUND, undefined or IGNORE otherwise.")
			IF(QT_QTMAIN_LIBRARY)
				TARGET_LINK_LIBRARIES(${target} ${QT_QTMAIN_LIBRARY}) 
			ELSE(QT_QTMAIN_LIBRARY)
				MESSAGE(FATAL_ERROR "Qt Main library qtmain.lib is not found.")
			ENDIF(QT_QTMAIN_LIBRARY)
		ENDIF (WIN32)
	ENDIF(QT4_INSTALLED)
ENDIF(Shell:QT)

IF(Shell:CL)
	IF(UNIX)
		TARGET_LINK_LIBRARIES(${target} curses) 
	ENDIF(UNIX)
ENDIF(Shell:CL)

