cmake_minimum_required(VERSION 2.6)

#-----------------------------------------------------------------------------
# Required libraries

# ITK
FIND_PACKAGE(ITK REQUIRED)
IF(ITK_FOUND)
	INCLUDE_DIRECTORIES(${ITK_INCLUDE_DIRS})
	INCLUDE(${ITK_USE_FILE})
ELSE()
	MESSAGE(FATAL_ERROR "ITK not found, but needed.")
ENDIF(ITK_FOUND)

# Qt4
FIND_PACKAGE(Qt4 REQUIRED)
IF(QT4_FOUND)
	INCLUDE_DIRECTORIES(${QT_INCLUDE_DIR})
	INCLUDE(${QT_USE_FILE})	
ELSE()
	MESSAGE(FATAL_ERROR "QT4 not found, but needed.")
ENDIF(QT4_FOUND)

# RITK
FIND_PACKAGE(RITK REQUIRED)
IF(RITK_FOUND)
	INCLUDE_DIRECTORIES(${RITK_INCLUDE_DIR})
	INCLUDE(${RITK_USE_FILE})	
ELSE()
	MESSAGE(FATAL_ERROR "RITK not found, but needed.")
ENDIF(RITK_FOUND)

# CUDA
FIND_PACKAGE(CUDA)
IF(CUDA_FOUND)
ELSE()
	MESSAGE(FATAL_ERROR "CUDA not found, but needed.")
ENDIF(CUDA_FOUND)


# The headers and sources for this plugin
#========================================

SET(HDRS
	CUDAMedianImageFilterPluginExport.h
	CUDAMedianImageFilter.h
	RangeCUDAMedianImageFilter.h
	CUDAMedianFilterWidget.h
	CUDAMedianImageFilterPlugin.h
	CUDAMedianImageFilterPluginFactory.h	
)

SET(SRCS
	CUDAMedianImageFilter.txx
	RangeCUDAMedianImageFilter.txx
	CUDAMedianFilterWidget.cxx
	CUDAMedianImageFilterPlugin.cxx
	CUDAMedianImageFilterPluginFactory.cxx
	CUDAMedianImageFilterInstantiations.cxx
)

SET(CUDA_HDRS
	MedianFilterKernel.h
)

SET(CUDA_SRCS
	MedianFilter.cu
)

SET(MOC_HDRS 	
	CUDAMedianFilterWidget.h
	CUDAMedianImageFilterPlugin.h
	CUDAMedianImageFilterPluginFactory.h
)

SET(UIS
	CUDAMedianFilterWidget.ui
)

QT4_WRAP_UI(UI_HDRS ${UIS})	
QT4_WRAP_CPP(MOC_SRCS ${MOC_HDRS})




# Set the library name and include directories
# ============================================
SET(CUDAMEDIANFILTER_PLUGIN_LIBRARY CUDAMedianFilterPlugin CACHE INTERNAL "")
SET(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}")
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
SET(CUDAMEDIANFILTER_PLUGIN_INCLUDE_DIRS	
	${CMAKE_CURRENT_SOURCE_DIR}
	${CMAKE_CURRENT_BINARY_DIR}
	${RITK_INCLUDE_DIRS}
	${CUDA_INCLUDE_DIRS}
	CACHE INTERNAL ""
)


# Project settings
# ================
INCLUDE_DIRECTORIES(${CUDAMEDIANFILTER_PLUGIN_INCLUDE_DIRS})
CUDA_ADD_LIBRARY(
	${CUDAMEDIANFILTER_PLUGIN_LIBRARY} SHARED 
	${SRCS} 
	${HDRS} 
	${CUDA_HDRS} 
	${CUDA_SRCS}
	${MOC_SRCS} 
	${UI_HDRS}
)
TARGET_LINK_LIBRARIES(
	${CUDAMEDIANFILTER_PLUGIN_LIBRARY} 
	debug ${RITK_COMMON_LIBRARY_DEBUG}
	debug ${RITK_CORE_LIBRARY_DEBUG}
	debug ${RITK_CUDA_LIBRARY_DEBUG}
	optimized ${RITK_COMMON_LIBRARY}
	optimized ${RITK_CORE_LIBRARY}
	optimized ${RITK_CUDA_LIBRARY}
	${ITK_LIBRARIES} 
	${QT_LIBRARIES}
	${CUDA_CUDA_LIBRARY} 
	${CUDA_CUDART_LIBRARY} 
)
SET_TARGET_PROPERTIES(
	${CUDAMEDIANFILTER_PLUGIN_LIBRARY} 
	PROPERTIES  DEBUG_POSTFIX "d"
)
ADD_DEFINITIONS(-DQT_PLUGIN)
ADD_DEFINITIONS(-DQT_SHARED)
ADD_DEFINITIONS("/DCUDAMEDIANFILTER_SHAREDLIB_EXPORT")


# Module installation
# ====================
INSTALL(TARGETS ${CUDAMEDIANFILTER_PLUGIN_LIBRARY} CONFIGURATIONS RELEASE
	RUNTIME DESTINATION ${RITK_BINARY_DIR}/release/plugins 
	LIBRARY DESTINATION ${RITK_BINARY_DIR}/release/plugins 
)
INSTALL(TARGETS ${CUDAMEDIANFILTER_PLUGIN_LIBRARY} CONFIGURATIONS DEBUG
	RUNTIME DESTINATION ${RITK_BINARY_DIR}/debug/plugins 
	LIBRARY DESTINATION ${RITK_BINARY_DIR}/debug/plugins 
)
