##############################################################################
#
# \file   CMakeLists.txt
# \brief  CMake file to build sources of project ODVBA.
# \author Andreas Schuh
# \date   01/03/11
#
# $Revision: 143 $
# $Id: CMakeLists.txt 143 2011-02-08 18:17:30Z schuha@UPHS.PENNHEALTH.PRV $
#
# <b>Last changed</b>
# $Author: schuha@UPHS.PENNHEALTH.PRV $
# $Date: 2011-02-08 13:17:30 -0500 (Tue, 08 Feb 2011) $
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# For copyright information see Copyright section of project
# ReadMe.html in the project's root directory.
#
# Contact: sbia-software@uphs.upenn.edu
#
##############################################################################

# ============================================================================
# default source files
# ============================================================================

set (PROJECT_CONFIG_H_TEMPLATE "${CMAKE_CURRENT_SOURCE_DIR}/SbiaProjectConfig.h.in")
set (PROJECT_CONFIG_H_DIR      "${CMAKE_CURRENT_BINARY_DIR}")
set (PROJECT_CONFIG_H_FILE     "${PROJECT_CONFIG_H_DIR}/Sbia${PROJECT_NAME}Config.h")

configure_file (${PROJECT_CONFIG_H_TEMPLATE} ${PROJECT_CONFIG_H_FILE} @ONLY)

set (SBIA_TEMPLATE_HDRS
  ${PROJECT_CONFIG_H_TEMPLATE}
)

set (SBIA_TEMPLATE_SRCS
  ""
)

set (SBIA_TEMPLATE_SOURCES
  ${SBIA_TEMPLATE_HDRS}
  ${SBIA_TEMPLATE_SRCS}
)

set (SBIA_DEFAULT_HDRS
  ${SBIA_PROJECT_CONFIG_H_FILE}
)

set (SBIA_DEFAULT_SRCS
  ""
)

set (SBIA_DEFAULT_SOURCES
  ${SBIA_DEFAULT_HDRS}
  ${SBIA_DEFAULT_SRCS}
)

# ============================================================================
# source files
# ============================================================================

set (SBIA_ODVBA_HDRS
  SbiaOdvbaUtilities.h
  SbiaOdvbaAlgorithm.h
)

set (SBIA_ODVBA_SRCS
  SbiaOdvbaUtilities.cpp
  SbiaOdvbaAlgorithm.cpp
)

set (SBIA_ODVBA_SOURCES
  ${SBIA_ODVBA_HDRS}
  ${SBIA_ODVBA_SRCS}
)

# ============================================================================
# source groups
# ============================================================================

source_group ("Templates" FILES ${SBIA_TEMPLATE_SOURCES})
source_group ("Default"   FILES ${SBIA_DEFAULT_SOURCES})
source_group ("ODVBA"     FILES ${SBIA_ODVBA_SOURCES})
source_group ("Main"      FILES SbiaOdvbaCreateIndex.cpp)
source_group ("Main"      FILES SbiaOdvbaCreateNI.cpp)
source_group ("Main"      FILES SbiaOdvbaMain.cpp)

# ============================================================================
# common configuration
# ============================================================================

include_directories (${PROJECT_CONFIG_H_DIR})

# ============================================================================
# libraries
# ============================================================================

# ============================================================================
# executables
# ============================================================================

# index creation
sbia_add_executable (
  OdvbaCreateIndex
    ${SBIA_TEMPLATE_SOURCES}
    ${SBIA_DEFAULT_SOURCES}
    ${SBIA_ODVBA_SOURCES}
    SbiaOdvbaCreateIndex.cpp
)

target_link_libraries (
  OdvbaCreateIndex
    ${NiftiCLib_LIB}
    ${OpenCV_HIGHGUI_LIBRARY}
    ${OpenCV_CV_LIBRARY}
    ${OpenCV_CXCORE_LIBRARY}
    ${CBLAS_LIB}
    ${ATLAS_LIB}
)

# neighborhood creation
sbia_add_executable (
  OdvbaCreateNI
    ${SBIA_TEMPLATE_SOURCES}
    ${SBIA_DEFAULT_SOURCES}
    ${SBIA_ODVBA_SOURCES}
    SbiaOdvbaCreateNI.cpp
)

target_link_libraries (
  OdvbaCreateNI
    ${NiftiCLib_LIB}
    ${OpenCV_HIGHGUI_LIBRARY}
    ${OpenCV_CV_LIBRARY}
    ${OpenCV_CXCORE_LIBRARY}
    ${CBLAS_LIB}
    ${ATLAS_LIB}
)

# group analysis
sbia_add_executable (
  Odvba
    ${SBIA_TEMPLATE_SOURCES}
    ${SBIA_DEFAULT_SOURCES}
    ${SBIA_ODVBA_SOURCES}
    SbiaOdvbaMain.cpp
)

set_target_properties (
  Odvba
  PROPERTIES
    COMPILE_FLAGS -DSBIA_ODVBA_USE_MPI=0
)

target_link_libraries (
  Odvba
    ${NiftiCLib_LIB}
    ${OpenCV_HIGHGUI_LIBRARY}
    ${OpenCV_CV_LIBRARY}
    ${OpenCV_CXCORE_LIBRARY}
    ${CBLAS_LIB}
    ${ATLAS_LIB}
)

if (ODVBA_ENABLE_MPI)
	sbia_add_executable (
	  OdvbaMPI
	    ${SBIA_TEMPLATE_SOURCES}
	    ${SBIA_DEFAULT_SOURCES}
	    ${SBIA_ODVBA_SOURCES}
	    SbiaOdvbaMain.cpp
	)

	set_target_properties (
	  OdvbaMPI
	  PROPERTIES
	    COMPILE_FLAGS -DSBIA_ODVBA_USE_MPI=1
	)

	target_link_libraries (
	  OdvbaMPI
	    ${NiftiCLib_LIB}
	    ${OpenCV_HIGHGUI_LIBRARY}
	    ${OpenCV_CV_LIBRARY}
	    ${OpenCV_CXCORE_LIBRARY}
	    ${CBLAS_LIB}
	    ${ATLAS_LIB}
	    ${MPI_LIBRARIES}
	)
endif ()
