cmake_minimum_required (VERSION 3.0)
project(MinimalFEM)

include(GenerateExportHeader)
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)

generate_export_header(MinimalFEMLib BASE_NAME minimalfem)

set_target_properties(MinimalFEMLib
  PROPERTIES
    OUTPUT_NAME MinimalFEM
    EXPORT_NAME MinimalFEM
)
target_include_directories(MinimalFEMLib
  PUBLIC
    $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
    $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
  PRIVATE
    eigen
)
generate_export_header(MinimalFEMLib
  BASE_NAME MinimalFEM)

# 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
)
install(FILES ${PROJECT_BINARY_DIR}/minimalfem_export.h
        DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

# Configure file
# Install Configure file
