project (CheMPS2)
set (CheMPS2_VERSION      "1.7.3 (2016-07-14)")
set (CheMPS2_AUTHORS      "Sebastian Wouters")
set (CheMPS2_DESCRIPTION  "A spin-adapted implementation of DMRG for ab initio quantum chemistry")
set (CheMPS2_EMAIL        "sebastianwouters@gmail.com")
set (CheMPS2_URL          "https://github.com/SebWouters/CheMPS2")
set (CheMPS2_LICENSE      "GNU General Public License, version 2")
set (CheMPS2_LIB_SOVERSION 2)

include (GNUInstallDirs)
cmake_minimum_required (VERSION 2.8.11)

option (MKL                  "Compile using the MKL"                   OFF)
option (BUILD_DOXYGEN        "Use Doxygen to create a HTML/PDF manual" OFF)
option (BUILD_SPHINX         "Build the user manual with Sphinx"       OFF)
option (STATIC_ONLY          "Compile only the static library"         OFF)
option (SHARED_ONLY          "Compile only the shared library"         OFF)
option (ENABLE_TESTS         "Compile the tests"                       ON)
option (ENABLE_XHOST         "Enable processor-specific optimizations" ON)
option (ENABLE_GENERIC       "Enable mostly static linking in shared library" OFF)
option (WITH_MPI             "Build the library with MPI"              OFF)

set (CMAKE_VERBOSE_MAKEFILE OFF)

if (STATIC_ONLY AND SHARED_ONLY)
    message (FATAL_ERROR "The options STATIC_ONLY=ON and SHARED_ONLY=ON are conflicting." )
endif (STATIC_ONLY AND SHARED_ONLY)

find_package (OpenMP)
if (OPENMP_FOUND)
    set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif (OPENMP_FOUND)

include (CheckCXXCompilerFlag)

if (ENABLE_XHOST)
    check_cxx_compiler_flag (-xHost HAS_XHOST)
    check_cxx_compiler_flag (-march=native HAS_MARCH_NATIVE)
    if (HAS_XHOST)
        set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -xHost")
    elseif (HAS_MARCH_NATIVE)
        set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native")
    endif ()
endif (ENABLE_XHOST)

set (CMAKE_CXX_FLAGS "-g -O3 ${CMAKE_CXX_FLAGS}")

check_cxx_compiler_flag (-ipo HAS_IPO)
if (HAS_IPO)
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ipo")
endif (HAS_IPO)

check_cxx_compiler_flag (-flto HAS_FLTO)
if (HAS_FLTO)
    set (CMAKE_CXX_FLAGS "-flto ${CMAKE_CXX_FLAGS}")
endif (HAS_FLTO)
 
if (ENABLE_GENERIC)
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++ -static-libgcc")
    check_cxx_compiler_flag (-static-intel HAS_INTEL_COMPILERS)
    if (HAS_INTEL_COMPILERS)
        set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-intel -wd10237")
    endif (HAS_INTEL_COMPILERS)
endif (ENABLE_GENERIC)

set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CheMPS2_SOURCE_DIR}/CMake/")

link_directories ($ENV{LD_LIBRARY_PATH})
if (MKL)
    set ( ENV{BLA_VENDOR} "Intel10_64lp" )
endif (MKL)

if (WITH_MPI)
    add_definitions (-DCHEMPS2_MPI_COMPILATION)
endif (WITH_MPI)

add_definitions(-DCHEMPS2_VERSION="${CheMPS2_VERSION}")

if (LAPACK_LIBRARIES)
    message(STATUS "LAPACK detection suppressed. Using: ${LAPACK_LIBRARIES}")
else (LAPACK_LIBRARIES)
    find_package (LAPACK REQUIRED)
endif (LAPACK_LIBRARIES)

if (HDF5_LIBRARIES AND HDF5_INCLUDE_DIRS)
    message(STATUS "HDF5 detection suppressed. Using: ${HDF5_LIBRARIES} and includes ${HDF5_INCLUDE_DIRS}")
else (HDF5_LIBRARIES AND HDF5_INCLUDE_DIRS)
    find_package (HDF5 REQUIRED)
endif (HDF5_LIBRARIES AND HDF5_INCLUDE_DIRS)

enable_testing ()
add_subdirectory (CheMPS2)
if (ENABLE_TESTS)
    add_subdirectory (tests)
endif (ENABLE_TESTS)
if (BUILD_SPHINX)
    add_subdirectory (sphinx)
endif (BUILD_SPHINX)

if (BUILD_DOXYGEN)
    find_package (Doxygen)
    if (NOT DOXYGEN_FOUND)
        message (FATAL_ERROR "Doxygen is needed to build the documentation. Please install it correctly.")
    endif (NOT DOXYGEN_FOUND)
    configure_file (${CheMPS2_SOURCE_DIR}/CheMPS2/Doxyfile.in ${CheMPS2_BINARY_DIR}/Doxyfile @ONLY IMMEDIATE)
    add_custom_target (doc COMMAND ${DOXYGEN_EXECUTABLE} ${CheMPS2_BINARY_DIR}/Doxyfile SOURCES ${CheMPS2_BINARY_DIR}/Doxyfile)
endif (BUILD_DOXYGEN)

