###############################################################################
# 
#  Copyright (2008) Alexander Stukowski
#
#  This file is part of OVITO (Open Visualization Tool).
#
#  OVITO is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#
#  OVITO is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################

# Enable precompiled headers when using the GCC compiler.
IF(OVITO_USE_PRECOMPILED_HEADERS AND CMAKE_COMPILER_IS_GNUCXX)
	INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
ENDIF(OVITO_USE_PRECOMPILED_HEADERS AND CMAKE_COMPILER_IS_GNUCXX)

# This is needed to export the symbols in this shared library.
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DMAKING_MODULE_SCRIPTING")

# The header files that need to be processed by the QT meta-object compiler.
SET(Scripting_MOC_HDRS
	engine/ScriptEngine.h
	engine/StartupScriptExecutor.h
	plugins/ScriptPlugin.h
)

# The regular source files of this library.
SET(Scripting_SRCS
	engine/ScriptEngine.cpp		
	engine/StartupScriptExecutor.cpp		
	plugins/ScriptPlugin.cpp
	plugins/ScriptPluginClassDescriptor.cpp
	interface/PythonInterface.cpp
	interface/LinAlg.cpp			
	interface/TriMesh.cpp			
	interface/Viewport.cpp			
	interface/Plugins.cpp
	interface/Reference.cpp		
	interface/Data.cpp
	interface/Scene.cpp	
	interface/Animation.cpp
	interface/Rendering.cpp
	interface/Actions.cpp
)

# Use the QT meta-object compiler to generate additional code.
QT4_WRAP_CPP(Scripting_MOC_SRCS ${Scripting_MOC_HDRS})

# Create plugin library.
ADD_LIBRARY(Scripting
	PrecompiledHeader.cpp
	${Scripting_SRCS}
	${Scripting_MOC_SRCS}	
)

# Generate precompiled header
IF(OVITO_USE_PRECOMPILED_HEADERS)
	IF(MSVC)
		SET_SOURCE_FILES_PROPERTIES(${Scripting_SRCS} PROPERTIES COMPILE_FLAGS "/Yuscripting/Scripting.h /Fpscripting.pch")
		SET_SOURCE_FILES_PROPERTIES(PrecompiledHeader.cpp PROPERTIES COMPILE_FLAGS "/Ycscripting/Scripting.h /Fpscripting.pch")
	ENDIF(MSVC)
	IF(CMAKE_COMPILER_IS_GNUCXX)
		ADD_PRECOMPILED_HEADER(Scripting ${CMAKE_SOURCE_DIR}/src/core/Core.h)
	ENDIF(CMAKE_COMPILER_IS_GNUCXX)
ENDIF(OVITO_USE_PRECOMPILED_HEADERS)

# Link required libraries
TARGET_LINK_LIBRARIES(Scripting Base Core)

# Link the target against the Qt libraries. 
TARGET_LINK_LIBRARIES(Scripting ${QT_LIBRARIES})

# Add Python libraries for scripting
TARGET_LINK_LIBRARIES(Scripting ${Boost_PYTHON_LIBRARY} ${PYTHON_UTIL_LIBRARY} ${PYTHON_LIBRARIES})

# Assign an absolute install path to this dynamic link library.
IF(APPLE)
	SET_TARGET_PROPERTIES(Scripting PROPERTIES INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/${OVITO_RELATIVE_PLUGINS_DIRECTORY}")
ENDIF(APPLE)

# Copy Plugin manifest to destination directory.
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/resources/Scripting.manifest.xml"
               "${OVITO_PLUGINS_DIRECTORY}/Scripting.manifest.xml")

# Create sub directories for the script files
FILE(MAKE_DIRECTORY "${OVITO_SHARE_DIRECTORY}/scripts")

# Copy the shell script to the output directory that can be used to launch the non-GUI script interpreter.
CONFIGURE_FILE("resources/ovitos" "${OVITO_BINARY_DIRECTORY}/ovitos" COPYONLY)
INSTALL(PROGRAMS "resources/ovitos" DESTINATION "${OVITO_RELATIVE_BINARY_DIRECTORY}")

# This plugin will be part of the installation package.
IF(NOT OVITO_MONOLITHIC_BUILD)
	INSTALL(TARGETS Scripting DESTINATION "${OVITO_RELATIVE_PLUGINS_DIRECTORY}")
ENDIF(NOT OVITO_MONOLITHIC_BUILD)
INSTALL(FILES "${OVITO_PLUGINS_DIRECTORY}/Scripting.manifest.xml" DESTINATION "${OVITO_RELATIVE_PLUGINS_DIRECTORY}")
