# -*- mode: cmake -*-

set(EXTERNAL_SOURCE_DIR ${PROJECT_SOURCE_DIR}/external)
set(EXTERNAL_BUILD_DIR ${PROJECT_BINARY_DIR}/external/build)

include(ExternalProject)

# Lapack was explicity set
if (DEFINED LAPACK_LIBRARIES)
  message("** LAPACK libraries were explicitly set")
  set(LAPACK_FOUND TRUE)
else()

  # this will find LAPACK *and* BLAS unless BLAS_LIBRARIES explicitly set
  find_package(LAPACK)

  if (BLAS_LIBRARIES)
    message(STATUS "BLAS libraries: ${BLAS_LIBRARIES}")
  endif()

  # to make sure they are really black, not FALSE
  if (NOT BLAS_LIBRARIES)
    set(BLAS_LIBRARIES "")
  endif()

  # to make sure they are really black, not FALSE
  if (NOT LAPACK_LIBRARIES)
    set(LAPACK_LIBRARIES "")
  endif()

endif()

if (LAPACK_FOUND)
  message(STATUS "LAPACK libraries: ${LAPACK_LIBRARIES}")
  message(STATUS "LAPACK linker flags: ${LAPACK_LINKER_FLAGS}")
  string(STRIP "${LAPACK_LIBRARIES}" LAPACK_LIBRARIES)
  set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LAPACK_LINKER_FLAGS}")
  set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${LAPACK_LINKER_FLAGS}")
  set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${LAPACK_LINKER_FLAGS}")
endif()

if (NOT LAPACK_FOUND)

  if(MPQC_EXPERT)

    message("** LAPACK was not found or explicitly set")
    message("** Downloading and building LAPACK is explicitly disabled in EXPERT mode")

  else()

    set(LAPACK_URL http://www.netlib.org/lapack/lapack-3.4.2.tgz)
    set(LAPACK_URL_HASH MD5=61bf1a8a4469d4bdb7604f5897179478)

    if (EXISTS ${EXTERNAL_SOURCE_DIR}/lapack.tar.gz)
      set(LAPACK_URL ${EXTERNAL_SOURCE_DIR}/lapack.tar.gz)
      set(LAPACK_URL_HASH "")
    endif()

    message("** Will build LAPACK from ${LAPACK_URL}")

    ExternalProject_Add(
      lapack
      PREFIX ${EXTERNAL_BUILD_DIR}/lapack
      URL ${LAPACK_URL}
      URL_HASH ${LAPACK_URL_HASH}
      CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BUILD_DIR}/lapack
      -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER}
      -DCMAKE_Fortran_FLAGS=${CMAKE_Fortran_FLAGS}
      )

    add_dependencies(External Lapack)
    set(BLAS_LIBRARIES ${EXTERNAL_BUILD_DIR}/lapack/lib/libblas.a)
    set(LAPACK_LIBRARIES ${EXTERNAL_BUILD_DIR}/lapack/lib/liblapack.a)

  endif()

endif()
