###############################################################################
# 
#  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_STDOBJECTS")

# The header files that need to be processed by the QT meta-object compiler.
SET(StdObjects_MOC_HDRS
	geometry/box/BoxObject.h
	geometry/box/BoxCreationMode.h
	geometry/cylinder/CylinderObject.h
	geometry/cylinder/CylinderCreationMode.h
	shapes/rectangle/RectangleObject.h
	shapes/rectangle/RectangleCreationMode.h
	shapes/circle/CircleObject.h
	shapes/circle/CircleCreationMode.h
	cameras/CameraObject.h
	cameras/FreeCameraCreationMode.h
	cameras/TargetCameraCreationMode.h	
	helpers/TargetObject.h
)

# The regular source files of this library.
SET(StdObject_SRCS
	geometry/box/BoxObject.cpp
	geometry/cylinder/CylinderObject.cpp
	shapes/rectangle/RectangleObject.cpp
	shapes/circle/CircleObject.cpp
	cameras/CameraObject.cpp
	helpers/TargetObject.cpp	
)

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

# Create plugin library.
ADD_LIBRARY(StdObjects
	PrecompiledHeader.cpp	 
	${StdObject_SRCS}
	${StdObjects_MOC_SRCS}	
)

# Generate precompiled header
IF(OVITO_USE_PRECOMPILED_HEADERS)
	IF(MSVC)
		SET_SOURCE_FILES_PROPERTIES(${StdObjects_SRCS} PROPERTIES COMPILE_FLAGS "/Yucore/Core.h /Fpstdobject.pch")
		SET_SOURCE_FILES_PROPERTIES(PrecompiledHeader.cpp PROPERTIES COMPILE_FLAGS "/Yccore/Core.h /Fpstdobject.pch")
	ENDIF(MSVC)
	IF(CMAKE_COMPILER_IS_GNUCXX)
		ADD_PRECOMPILED_HEADER(StdObjects ${CMAKE_SOURCE_DIR}/src/core/Core.h)  
	ENDIF(CMAKE_COMPILER_IS_GNUCXX)
ENDIF(OVITO_USE_PRECOMPILED_HEADERS)

TARGET_LINK_LIBRARIES(StdObjects Base Core Mesh)

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

# Assign an absolute install path to this dynamic link library.
IF(APPLE)
	SET_TARGET_PROPERTIES(StdObjects 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/StdObjects.manifest.xml" 
			   "${OVITO_PLUGINS_DIRECTORY}/StdObjects.manifest.xml" COPYONLY)

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