##############################################################################
#
# \file   CMakeLists.txt
# \brief  CMake file to configure build system of all targets.
# \author Andreas Schuh
# \date   01/03/11
#
# $Revision: 277 $
# $Id: CMakeLists.txt 277 2012-02-07 20:01:12Z schuha@UPHS.PENNHEALTH.PRV $
#
# <b>Last changed</b>
# $Author: schuha@UPHS.PENNHEALTH.PRV $
# $Date: 2012-02-07 15:01:12 -0500 (Tue, 07 Feb 2012) $
#
# 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
#
##############################################################################

# ============================================================================
# external packages
# ============================================================================

# Use CMake command find_package () to resolve external dependencies.
# An external package may also be found in ${PROJECT_EXTERNAL_DIR}.
# If no CMake find module is available yet, write your own one and store it
# in the 'CMake' folder of the project.

# Nifti
find_package (NiftiCLib REQUIRED)

if (NiftiCLib_FOUND)
  include_directories (${NiftiCLib_INCLUDE_DIRS})
endif ()

# Boost
set (Boost_FIND_REQUIRED       TRUE)
set (Boost_FIND_QUIETLY        TRUE)
set (Boost_USE_MULTITHREADED   TRUE)
set (Boost_USE_STATIC_LIBS     TRUE)
set (Boost_ADDITIONAL_VERSIONS "1.39" "1.39.0")

find_package (
  Boost
  COMPONENTS
    program_options
    unit_test_framework
    test_exec_monitor
)

if (Boost_FOUND)
  include_directories (${Boost_INCLUDE_DIR})
  link_directories    (${Boost_LIBRARY_DIRS})
endif ()

# ATLAS
find_package (ATLAS REQUIRED)

if (ATLAS_FOUND)
  include (${ATLAS_USE_FILE})
endif ()

# LAPACK
find_package (Lapack REQUIRED)

#if (Lapack_FOUND)
  include_directories (${CBLAS_INCLUDES})
#endif ()

# OpenCV
find_package (OpenCV REQUIRED)

if (OpenCV_FOUND)
  include_directories (${OpenCV_CV_INCLUDE_DIR})
endif ()

# MPI
find_package (MPI)

if (MPI_FOUND)
  option (ODVBA_ENABLE_MPI "Whether to enable MPI support" ON)

  if (ODVBA_ENABLE_MPI)
    include_directories (${MPI_INCLUDE_PATH})
  endif ()
else ()
  set (
    ODVBA_ENABLE_MPI OFF
    CACHE
      BOOL
      "MPI not available"
    FORCE
  )
endif ()

# ============================================================================
# common settings
# ============================================================================

# default C/C++ include file
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}
)

include_directories (${PROJECT_CONFIG_H_DIR})

# ============================================================================
# subdirectories
# ============================================================================

add_subdirectory (Exec)    # source code of executable targets
add_subdirectory (Libs)    # source code of library targets
add_subdirectory (Scripts) # source code of scripts
