# ---------------------------------------------------------------
# Programmer(s): David J. Gardner and Slaven Peles @ LLNL
# ---------------------------------------------------------------
# SUNDIALS Copyright Start
# Copyright (c) 2002-2020, Lawrence Livermore National Security
# and Southern Methodist University.
# All rights reserved.
#
# See the top-level LICENSE and NOTICE files for details.
#
# SPDX-License-Identifier: BSD-3-Clause
# SUNDIALS Copyright End
# ---------------------------------------------------------------
# examples level CMakeLists.txt for SUNDIALS
# ---------------------------------------------------------------

# The examples will be linked with the library corresponding to the build type.
# Whenever building shared libraries, use them to link the examples.
if(SUNDIALS_BUILD_SHARED_LIBS)
  set(LINK_LIBRARY_TYPE "shared")
else()
  set(LINK_LIBRARY_TYPE "static")
endif()

# Set variables used in generating CMake and Makefiles for examples
if(SUNDIALS_EXAMPLES_INSTALL)

  set(SHELL "sh")
  set(prefix "${CMAKE_INSTALL_PREFIX}")
  set(exec_prefix "${CMAKE_INSTALL_PREFIX}")
  set(includedir "${prefix}/include")
  set(libdir "${exec_prefix}/${CMAKE_INSTALL_LIBDIR}")
  set(CPP "${CMAKE_C_COMPILER}")
  set(CPPFLAGS "${CMAKE_C_FLAGS_RELEASE}")
  set(CC "${CMAKE_C_COMPILER}")
  set(CFLAGS "${CMAKE_C_FLAGS_RELEASE}")
  set(LDFLAGS "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
  list2string(EXTRA_LINK_LIBS LIBS)

  if(CXX_FOUND)
    set(CXX "${CMAKE_CXX_COMPILER}")
    set(CXX_LNKR "${CMAKE_CXX_COMPILER}")
    set(CXXFLAGS "${CMAKE_CXX_FLAGS_RELEASE}")
    set(CXX_LDFLAGS "${CMAKE_CXX_FLAGS_RELEASE}")
    list2string(EXTRA_LINK_LIBS CXX_LIBS)
  endif(CXX_FOUND)

  if(F77_FOUND)
    set(F77 "${CMAKE_Fortran_COMPILER}")
    set(F77_LNKR "${CMAKE_Fortran_COMPILER}")
    set(FFLAGS "${CMAKE_Fortran_FLAGS_RELEASE}")
    set(F77_LDFLAGS "${CMAKE_Fortran_FLAGS_RELEASE}")
    list2string(EXTRA_LINK_LIBS F77_LIBS)
  endif(F77_FOUND)

  if(F90_FOUND)
    set(F90 "${CMAKE_Fortran_COMPILER}")
    set(F90_LNKR "${CMAKE_Fortran_COMPILER}")
    set(F90FLAGS "${CMAKE_Fortran_FLAGS_RELEASE}")
    set(F90_LDFLAGS "${CMAKE_Fortran_FLAGS_RELEASE}")
    list2string(EXTRA_LINK_LIBS F90_LIBS)
  endif(F90_FOUND)

  if(SUPERLUMT_FOUND)
    list2string(SUPERLUMT_LIBRARIES SUPERLUMT_LIBS)
    set(SUPERLUMT_LIBS "${SUPERLUMT_LINKER_FLAGS} ${SUPERLUMT_LIBS}")
  endif(SUPERLUMT_FOUND)

  if(KLU_FOUND)
    list2string(KLU_LIBRARIES KLU_LIBS)
    set(KLU_LIBS "${KLU_LINKER_FLAGS} ${KLU_LIBS}")
  endif(KLU_FOUND)

  if(LAPACK_FOUND)
    list2string(LAPACK_LIBRARIES LAPACK_LIBS)
  endif(LAPACK_FOUND)

  if(MPI_C_FOUND)
    if(MPI_C_COMPILER)
      set(MPICC "${MPI_C_COMPILER}")
      set(MPI_INC_DIR ".")
      set(MPI_LIB_DIR ".")
      set(MPI_LIBS "")
      set(MPI_FLAGS "")
    else()
      set(MPICC "${CMAKE_C_COMPILER}")
      set(MPI_INC_DIR "${MPI_INCLUDE_PATH}")
      set(MPI_LIB_DIR ".")
      list2string(MPI_LIBRARIES MPI_LIBS)
    endif()
    set(HYPRE_INC_DIR "${HYPRE_INCLUDE_DIR}")
    set(HYPRE_LIB_DIR "${HYPRE_LIBRARY_DIR}")
    set(HYPRE_LIBS "${HYPRE_LIBRARIES}")
  endif()

  if(MPI_CXX_FOUND)
    if(MPI_CXX_COMPILER)
      set(MPICXX "${MPI_CXX_COMPILER}")
    else()
      set(MPICXX "${CMAKE_CXX_COMPILER}")
      list2string(MPI_LIBRARIES MPI_LIBS)
    endif()
  endif()

  if(MPI_Fortran_FOUND)
    if(MPI_Fortran_COMPILER)
      set(MPIF77 "${MPI_Fortran_COMPILER}")
      set(MPIF77_LNKR "${MPI_Fortran_COMPILER}")

      set(MPIF90 "${MPI_Fortran_COMPILER}")
      set(MPIF90_LNKR "${MPI_Fortran_COMPILER}")
    else()
      set(MPIF77 "${CMAKE_Fortran_COMPILER}")
      set(MPIF77_LNKR "${CMAKE_Fortran_COMPILER}")
      set(MPI_INC_DIR "${MPI_INCLUDE_PATH}")
      set(MPI_LIB_DIR ".")
      list2string(MPI_LIBRARIES MPI_LIBS)

      set(MPIF90 "${CMAKE_Fortran_COMPILER}")
      set(MPIF90_LNKR "${CMAKE_Fortran_COMPILER}")
      list2string(MPI_LIBRARIES MPI_LIBS)
    endif()
  endif()

endif(SUNDIALS_EXAMPLES_INSTALL)


#----------------------------------------
# Add specific examples
#----------------------------------------

# Add ARKode examples
if(BUILD_ARKODE)
  add_subdirectory(arkode)
endif(BUILD_ARKODE)

# Add CVODE examples
if(BUILD_CVODE)
  add_subdirectory(cvode)
endif(BUILD_CVODE)

# Add CVODES Examples
if(BUILD_CVODES)
  add_subdirectory(cvodes)
endif(BUILD_CVODES)

# Add IDA examples
if(BUILD_IDA)
  add_subdirectory(ida)
endif(BUILD_IDA)

# Add IDAS examples
if(BUILD_IDAS)
  add_subdirectory(idas)
endif(BUILD_IDAS)

# Add KINSOL examples
if(BUILD_KINSOL)
  add_subdirectory(kinsol)
endif(BUILD_KINSOL)

# Add CPODES examples
if(BUILD_CPODES)
  add_subdirectory(cpodes)
endif(BUILD_CPODES)

# Add the nvector examples
add_subdirectory(nvector)

# Add the sunmatrix examples
add_subdirectory(sunmatrix)

# Add the sunlinearsolver examples
add_subdirectory(sunlinsol)

# Add the sunnonlinearsolver examples
add_subdirectory(sunnonlinsol)
