find_package(Eigen3 REQUIRED)
# Add as "system headers" to avoid warnings generated by them with
# compilers that support that notion.
include_directories(SYSTEM ${EIGEN3_INCLUDE_DIR})

if(USE_SPGLIB)
  find_package(Spglib REQUIRED)
  include_directories(SYSTEM ${SPGLIB_INCLUDE_DIR})
endif()

# configure the version header
configure_file("${PROJECT_SOURCE_DIR}/cmake/version.h.in"
  "${CMAKE_CURRENT_BINARY_DIR}/version.h")

set(HEADERS
  angletools.h
  angleiterator.h
  array.h
  atom.h
  atomtyper.h
  atomtyper-inline.h
  avogadrocore.h
  basisset.h
  connectedgroup.h
  bond.h
  color3f.h
  coordinateset.h
  coordinateblockgenerator.h
  crystaltools.h
  cube.h
  dihedraliterator.h
  elements.h
  gaussianset.h
  gaussiansettools.h
  graph.h
  layer.h
  layermanager.h
  matrix.h
  mesh.h
  molecule.h
  mutex.h
  nameatomtyper.h
  residue.h
  ringperceiver.h
  secondarystructure.h
  slaterset.h
  slatersettools.h
  spacegroups.h
  symbolatomtyper.h
  types.h
  unitcell.h
  utilities.h
  variant.h
  variant-inline.h
  variantmap.h
  vector.h
  "${CMAKE_CURRENT_BINARY_DIR}/version.h"
)

set(SOURCES
  angleiterator.cpp
  connectedgroup.cpp
  coordinateblockgenerator.cpp
  crystaltools.cpp
  cube.cpp
  elements.cpp
  dihedraliterator.cpp
  gaussianset.cpp
  gaussiansettools.cpp
  graph.cpp
  layer.cpp
  layermanager.cpp
  mesh.cpp
  mdlvalence_p.h
  molecule.cpp
  mutex.cpp
  nameatomtyper.cpp
  residue.cpp
  ringperceiver.cpp
  secondarystructure.cpp
  slaterset.cpp
  slatersettools.cpp
  spacegroups.cpp
  symbolatomtyper.cpp
  unitcell.cpp
  variantmap.cpp
  version.cpp
)

# We currently build core without shared_mutex for Python wheels.
if(NOT PYTHON_WHEEL_BUILD)
  list(APPEND HEADERS sharedmutex.h)
  list(APPEND SOURCES sharedmutex.cpp)
endif()

if(USE_SPGLIB)
  list(APPEND HEADERS avospglib.h)
  list(APPEND SOURCES avospglib.cpp)
endif()

# The std::shared_mutex class needs pthreads on Linux.
if(UNIX AND NOT APPLE AND NOT PYTHON_WHEEL_BUILD)
  find_package(Threads)
  set(EXTRA_LINK_LIB ${CMAKE_THREAD_LIBS_INIT})
else()
  set(EXTRA_LINK_LIB "")
endif()

avogadro_add_library(AvogadroCore ${HEADERS} ${SOURCES})
target_link_libraries(AvogadroCore
  PRIVATE ${SPGLIB_LIBRARY} ${EXTRA_LINK_LIB})
