##############################################################################
#
# \file   CMakeLists.txt
# \brief  Project CMake file.
# \author Andreas Schuh
# \date   12/12/10
#
# $Revision: 176 $
# $Id: CMakeLists.txt 176 2011-02-15 22:26:31Z schuha@UPHS.PENNHEALTH.PRV $
#
# <b>Last changed</b>
# $Author: schuha@UPHS.PENNHEALTH.PRV $
# $Date: 2011-02-15 17:26:31 -0500 (Tue, 15 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
#
##############################################################################

# ============================================================================
# CMake version
# ============================================================================

# minimum required CMake version
cmake_minimum_required (VERSION 2.6)

# ============================================================================
# load common modules
# ============================================================================

# CMake module path
set (CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")

include (SbiaMacros)
include (SbiaCommands)
include (SbiaProject)
include (SbiaDefaults)

# ============================================================================
# project attributes
# ============================================================================

# extract version numbers
string (REGEX MATCHALL "[0-9]+" PROJECT_VERSION_PARTS "${PROJECT_VERSION}")

list (GET PROJECT_VERSION_PARTS 0 PROJECT_VERSION_MAJOR)
list (GET PROJECT_VERSION_PARTS 1 PROJECT_VERSION_MINOR)
list (GET PROJECT_VERSION_PARTS 2 PROJECT_VERSION_PATCH)

# get revision number of working copy
sbia_get_svn_revision (${PROJECT_SOURCE_DIR} PROJECT_REVISION)

if (PROJECT_REVISION)
  set (PROJECT_REVISION_VALID 1) # use 1 and not TRUE or anything else here
else ()
  set (PROJECT_REVISION_VALID 0) # use 0 and not FALSE or anything else here
endif ()

# update PROJECT_VERSION (also to ensure consistency)
set (PROJECT_VERSION   "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
set (PROJECT_SOVERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}")

# output project information
message (STATUS "Project ${PROJECT_NAME}")
if (PROJECT_REVISION_VALID)
  message (STATUS "  Revision:  ${PROJECT_REVISION}")
endif ()
message (STATUS "  Version:   ${PROJECT_VERSION}")
message (STATUS "  SoVersion: ${PROJECT_SOVERSION}")

# ============================================================================
# options
# ============================================================================

option (${PROJECT_NAME_UPPER}_BUILD_TEST "Whether to build the tests" ON)
option (${PROJECT_NAME_UPPER}_BUILD_DOC  "Whether to build the documentation (requires Doxygen)" ON)

# ============================================================================
# global settings
# ============================================================================

# directory of local external libraries
set (PROJECT_EXTERNAL_DIR "${PROJECT_SOURCE_DIR}/External")

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

add_subdirectory (Code)

if (${PROJECT_NAME_UPPER}_BUILD_TEST)
#  add_subdirectory (Testing)
endif ()

if (${PROJECT_NAME_UPPER}_BUILD_DOC)
  add_subdirectory (Doc)
endif ()

# ============================================================================
# configure config and version file
# ============================================================================

set (PROJECT_CONFIG_TEMPLATE         "${CMAKE_MODULE_PATH}/SbiaProjectConfig.cmake.in")
set (PROJECT_CONFIG_FILE             "${PROJECT_BINARY_DIR}/Sbia${PROJECT_NAME}Config.cmake")
set (PROJECT_CONFIG_VERSION_TEMPLATE "${CMAKE_MODULE_PATH}/SbiaProjectConfigVersion.cmake.in")
set (PROJECT_CONFIG_VERSION_FILE     "${PROJECT_BINARY_DIR}/Sbia${PROJECT_NAME}ConfigVersion.cmake")

configure_file ("${PROJECT_CONFIG_TEMPLATE}"         "${PROJECT_CONFIG_FILE}"  @ONLY)
configure_file ("${PROJECT_CONFIG_VERSION_TEMPLATE}" "${PROJECT_CONFIG_VERSION_FILE}" @ONLY)
