set(LIBNAME mass)

message(\n${BoldGreen}"Now configuring library ${LIBNAME}"${ColourReset}\n)

########################################################
# Files
set(${LIBNAME}_SRCS
  #
  # Most general features
  src/globals.cpp
  src/Prop.cpp
  src/PropListHolder.cpp
  #
  # The basic chemical features
  src/Isotope.cpp
  src/IsotopicData.cpp
  src/IsotopicDataBaseHandler.cpp
  src/IsotopicDataLibraryHandler.cpp
  src/IsotopicDataUserConfigHandler.cpp
  src/IsotopicDataManualConfigHandler.cpp
  src/IsotopicClusterGenerator.cpp
  src/IsotopicClusterShaper.cpp
  src/PeakCentroid.cpp
  src/Ponderable.cpp
  src/ChemicalGroup.cpp
  src/ChemicalGroupRule.cpp
  src/Modif.cpp
  src/ModifSpec.cpp
  src/Monomer.cpp
  src/MonomerDictionary.cpp
  src/MonomerSpec.cpp
  src/Oligomer.cpp
  src/Polymer.cpp
  src/CleaveMotif.cpp
  src/CleaveRule.cpp
  src/CleaveSpec.cpp
  src/Coordinates.cpp
  src/Formula.cpp
  src/FragRule.cpp
  src/FragSpec.cpp
  src/Ionizable.cpp
  src/IonizeRule.cpp
  src/CrossLink.cpp
  src/CrossLinker.cpp
  src/CrossLinkerSpec.cpp
  src/PolChemDef.cpp
  src/PolChemDefEntity.cpp
  src/PolChemDefSpec.cpp
  src/Sequence.cpp
  #
  # The calculation features
  src/CalcOptions.cpp
  src/MassPeakShaper.cpp
  src/MassPeakShaperConfig.cpp
  #
  # Envemind implementation
  src/Envemind.cpp
  #
  # The Averagine implementation
  src/Averagine.cpp
  #
  # The network functionality
  src/MassDataCborBaseHandler.cpp
  src/MassDataCborMassSpectrumHandler.cpp
  src/MassDataServer.cpp
  src/MassDataServerThread.cpp
  src/MassDataClient.cpp
)

# Because the header files are in their own directory and not along the source
# files, we need to have them listed explicitely for automoc to work properly
# below.
file(GLOB ${LIBNAME}_HEADERS ${CMAKE_CURRENT_LIST_DIR}/includes/lib${LIBNAME}/*.hpp)
message(STATUS "Included the header files from ${CMAKE_SOURCE_DIR}/includes/lib${LIBNAME}/")
message(STATUS "The header files: ${${LIBNAME}_HEADERS}")

# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)

###############################################################
# Configuration of the binary to be built
###############################################################

# Only now can we add the library, because we have defined the sources.

add_library(${LIBNAME} STATIC
  ${${LIBNAME}_HEADERS}
  ${${LIBNAME}_SRCS}
  ${PLATFORM_SPECIFIC_SOURCES}
)

include_directories(${CMAKE_CURRENT_LIST_DIR}/includes)
include_directories(${CMAKE_CURRENT_LIST_DIR}/includes/lib${LIBNAME})
include_directories(${CMAKE_CURRENT_BINARY_DIR})

target_include_directories(${LIBNAME} PUBLIC
  ${CMAKE_CURRENT_LIST_DIR}/includes
  ${CMAKE_CURRENT_LIST_DIR}/includes/lib${LIBNAME}
  ${CMAKE_CURRENT_BINARY_DIR})

#message(STATUS "CMAKE_CURRENT_BINARY_DIR: ${CMAKE_CURRENT_BINARY_DIR}")

set_target_properties(${LIBNAME}
  PROPERTIES OUTPUT_NAME mass
)

add_custom_command(TARGET ${LIBNAME}
  POST_BUILD
  COMMAND ${CMAKE_COMMAND} -E copy
  ${CMAKE_CURRENT_BINARY_DIR}/$<TARGET_FILE_NAME:${LIBNAME}>
  ${CMAKE_CURRENT_LIST_DIR}
)

# Finally actually set the linking dependencies to the executable.
target_link_libraries(${LIBNAME}
  Qt6::Xml
  Qt6::Network
  IsoSpec++::IsoSpec++
)

message("")
message(STATUS "${BoldGreen}Finished configuring of ${LIBNAME}.${ColourReset}")
message("")

