# ============================================================================
# Require minimal version of cmake
# ============================================================================
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0 FATAL_ERROR)

# ============================================================================
# Set project name and languages
# ============================================================================
PROJECT(dynaweb CXX)

# ============================================================================
# Set compilation flags - C++11 detection
# ============================================================================
IF(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
    SET(CMAKE_BUILD_TYPE Distribution)
ENDIF(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)

include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
	SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall -std=c++11")	      
	SET(CMAKE_C_FLAGS_DEBUG "-g -Wall -std=c++11")
	SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -std=c++11")
	SET(CMAKE_C_FLAGS_RELEASE "-O3 -Wall -std=c++11")
	SET(CMAKE_CXX_FLAGS_DISTRIBUTION "-O3 -w -std=c++11")
	SET(CMAKE_C_FLAGS_DISTRIBUTION "-O3 -w -std=c++11")
	SET(CMAKE_CXX_FLAGS_PROFILING "-g -pg -std=c++11") 
	SET(CMAKE_C_FLAGS_PROFILING "-g -pg -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
	SET(CMAKE_CXX_FLAGS_DEBUG "-g -Wall -std=c++0x")	      
	SET(CMAKE_C_FLAGS_DEBUG "-g -Wall -std=c++0x")
	SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -std=c++0x")
	SET(CMAKE_C_FLAGS_RELEASE "-O3 -Wall -std=c++0x")
	SET(CMAKE_CXX_FLAGS_DISTRIBUTION "-O3 -w -std=c++0x")
	SET(CMAKE_C_FLAGS_DISTRIBUTION "-O3 -w -std=c++0x")
	SET(CMAKE_CXX_FLAGS_PROFILING "-g -pg -std=c++0x") 
	SET(CMAKE_C_FLAGS_PROFILING "-g -pg -std=c++0x")
else()
	message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please upgrade your C++ compilercor use a different one.")
endif()

# ============================================================================
# Tell cmake about some variables / to use with "cmake -DDEFINE_XXX=ON/OFF"
# ============================================================================
OPTION(DEFINE_RELAX "Set the relaxed version of the NTI rules" OFF)
IF(DEFINE_RELAX)
    ADD_DEFINITIONS(-DRELAX)
ENDIF(DEFINE_RELAX)

# ============================================================================
# Tell cmake about subdirectories to look into
# ============================================================================
ADD_SUBDIRECTORY(src)

# ============================================================================
# Tell cmake where to put binary files.
# By GNU standards "executable programs that users can run" should go in
# bin dir a.k.a ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}
# ============================================================================
# Set main binary dir
SET(MAIN_BIN_DIR ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})

# ============================================================================
# Add testing capabilities
# ============================================================================
ENABLE_TESTING()
ADD_SUBDIRECTORY(unittest)
ADD_SUBDIRECTORY(regressiontest)

# ============================================================================
# Adds the 'dist' target (that will use cpack)
# ============================================================================
add_custom_target(dist COMMAND ${CMAKE_BUILD_TOOL} package_source)

# ============================================================================
# GSL requirements
# ============================================================================
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
FIND_PACKAGE(GSL REQUIRED)
INCLUDE_DIRECTORIES(${GSL_INCLUDE_DIRS} ${GSLCBLAS_INCLUDE_DIRS})
SET(LIBS ${LIBS} ${GSL_LIBRARIES} ${GSLCBLAS_LIBRARIES})

# ============================================================================
# Configure cpack
# ============================================================================
SET(CPACK_PACKAGE_NAME "dynaweb")
SET(CPACK_PACKAGE_VENDOR "Dynaweb Development Team")
SET(CPACK_PACKAGE_VERSION_MAJOR "0")
SET(CPACK_PACKAGE_VERSION_MINOR "0")
SET(CPACK_PACKAGE_VERSION_PATCH "0")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "TI&NTI Dynamics")
SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/COPYING")
SET(CPACK_RESOURCE_FILE_AUTHORS "${CMAKE_SOURCE_DIR}/AUTHORS")
SET(CPACK_RESOURCE_FILE_INSTALL "${CMAKE_SOURCE_DIR}/INSTALL")
SET(CPACK_SOURCE_GENERATOR "TGZ")
SET(CPACK_SOURCE_IGNORE_FILES
 "docs/"
 "tests/"
 "build"
 ${CPACK_SOURCE_IGNORE_FILES}
)
SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
include(CPack)
