cmake_minimum_required (VERSION 3.0)
project(MinimalFEM)

include(GNUInstallDirs)
set(EXECUTABLE_OUTPUT_PATH         ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_INSTALL_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")

# Set cxx11 for std::to_string()
if (NOT DEFINED CMAKE_CXX_STANDARD)
  set(CMAKE_CXX_STANDARD 11)
endif()

if (UNIX AND NOT APPLE)
  # Ignore deprecated warning in Eigen re std::binder
  add_compile_options(-Wno-deprecated-declarations -Wno-ignored-attributes)
endif()

# Library
set(sources
  MinimalFEM/MinimalFEM.cxx
  MinimalFEM/VTPWriter.cxx
  MinimalFEM/XMLWriter.cxx
)
set(public_headers
  MinimalFEM/MinimalFEM.h
)
add_library(MinimalFEMLib ${sources})
add_library(MinimalFEM::MinimalFEM ALIAS MinimalFEMLib)
set_target_properties(MinimalFEMLib
  PROPERTIES
    OUTPUT_NAME MinimalFEM
    EXPORT_NAME MinimalFEM
)
target_include_directories(MinimalFEMLib
  PUBLIC
    $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
  PRIVATE
    eigen
)

# Main
add_executable (MinimalFEMMain main.cpp)
set_target_properties(MinimalFEMMain
  PROPERTIES
    OUTPUT_NAME MinimalFEM
)
target_include_directories(MinimalFEMMain
  PRIVATE
    ${PROJECT_SOURCE_DIR}
)
target_link_libraries(MinimalFEMMain
  PUBLIC
    MinimalFEMLib
)

# Install targets
install(
  TARGETS
    MinimalFEMLib
    MinimalFEMMain
  EXPORT ${PROJECT_NAME}
  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

# Export Targets
export(
  TARGETS
    MinimalFEMLib
  NAMESPACE
    MinimalFEM
  FILE ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_CMAKEDIR}/${PROJECT_NAME}-targets.cmake
)

# Install Export Targets
install(
  EXPORT ${PROJECT_NAME}
  NAMESPACE MinimalFEM
  DESTINATION ${CMAKE_INSTALL_CMAKEDIR}
  FILE ${PROJECT_NAME}-targets.cmake
)

# Configure file
# Install Configure file
