# Yuri Pirola. Copyright (C) 2010. GPLv3.

#
# Project Properties
#
cmake_minimum_required (VERSION 2.8)
project (reHCstar)

set (APPLICATION_NAME "Haplotyping with Recombinations, Errors, and Missing Genotypes")
set (APPLICATION_CODENAME "${PROJECT_NAME}")
set (APPLICATION_COPYRIGHT_YEARS "2010, 2011")
set (APPLICATION_VENDOR_ID "org.tecnoparco")
set (APPLICATION_VENDOR_NAME "Parco Tecnologico Padano")
set (APPLICATION_VENDOR_URL "www.tecnoparco.org")
set (APPLICATION_ID "${APPLICATION_VENDOR_ID}.${PROJECT_NAME}")

include(CMakeOptions.txt)

#
# Debugging Options
#
set (CMAKE_VERBOSE_MAKEFILE 0) # Use 1 for debugging, 0 for release

#
# Project Output Paths
#
set (MAINFOLDER ${PROJECT_SOURCE_DIR})
set (EXECUTABLE_OUTPUT_PATH "${MAINFOLDER}/bin")
set (LIBRARY_OUTPUT_PATH "${MAINFOLDER}/lib")

set (project_base_LIB ${PROJECT_NAME}-lib)

#
# Project Search Paths
#
list (APPEND CMAKE_PREFIX_PATH "${MAINFOLDER}")
list (APPEND CMAKE_PREFIX_PATH "${MAINFOLDER}/tools")
list (APPEND CMAKE_PREFIX_PATH "${MAINFOLDER}/thirdparty")
set (CMAKE_MODULE_PATH "${MAINFOLDER}/tools/share/cmake")
include_directories("${MAINFOLDER}/include")

#
# Locate Project Prerequisites
#
set (Boost_ADDITIONAL_VERSIONS "1.42" "1.42.0")
find_package (Boost COMPONENTS "filesystem" "system" "date_time" "program_options" "iostreams" REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})

set (CMAKE_CXX_FLAGS "-std=c++0x -Wall ${CMAKE_CXX_FLAGS}")
set (CMAKE_CXX_FLAGS_DEBUG "-O0 ${CMAKE_CXX_FLAGS_DEBUG}")
set (CMAKE_CXX_FLAGS_RELEASE "-march=native -fomit-frame-pointer ${CMAKE_CXX_FLAGS_RELEASE}")

include(ExtractSourceVersionFromGit)
set (APPLICATION_VERSION_STRING "${APPLICATION_SOURCE_VERSION}") # See the version from the 'git' repositories

#
# Configure Files
#
file (GLOB_RECURSE CONFIGINPUTS include/*.h.in.cmake)
foreach (CONFIGINPUT ${CONFIGINPUTS})
    string (REPLACE ".h.in.cmake" ".h" CONFIGOUTPUT "${CONFIGINPUT}")
    configure_file ("${CONFIGINPUT}" "${CONFIGOUTPUT}")
endforeach (CONFIGINPUT ${CONFIGINPUTS})



if (INTEGRATE_SAT_SOLVER)

  message(STATUS "SAT solver integrated.")
  remove_definitions(-DNO_INTERNAL_SAT_SOLVER)
  add_definitions(-DINTERNAL_SAT_SOLVER)
  if (DISABLE_EXTERNAL_SAT_SOLVERS)
    message(STATUS "External SAT solvers *CANNOT* be used.")
    add_definitions(-DONLY_INTERNAL_SAT_SOLVER)
  else()
    message(STATUS "External SAT solvers can still be used.")
    remove_definitions(-DONLY_INTERNAL_SAT_SOLVER)
  endif()

  add_subdirectory(solver)
  include_directories("solver/${sat_INCLUDE}")
  add_definitions(-DSAT_SOLVER=${SAT_SOLVER})
  foreach(DEFINITION ${sat_DEFINITIONS})
    add_definitions(-D${DEFINITION})
  endforeach()
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${sat_FLAGS}")

else()

  message(STATUS "SAT solver *NOT* integrated.")
  set(DISABLE_EXTERNAL_SAT_SOLVERS "OFF")
  add_definitions(-DNO_INTERNAL_SAT_SOLVER)
  remove_definitions(-DINTERNAL_SAT_SOLVER)
  remove_definitions(-DONLY_INTERNAL_SAT_SOLVER)

endif()

#
# Add Build Targets
#
add_subdirectory(src)

#
# Add Install Targets
#
if (EXISTS "${MAINFOLDER}/include/${PROJECT_NAME}" AND IS_DIRECTORY "${MAINFOLDER}/include/${PROJECT_NAME}")
    install(DIRECTORY "${MAINFOLDER}/include/${PROJECT_NAME}" DESTINATION "include")
endif (EXISTS "${MAINFOLDER}/include/${PROJECT_NAME}" AND IS_DIRECTORY "${MAINFOLDER}/include/${PROJECT_NAME}")
