set(LIBSIXTCPP_SOURCES
        Absorber.cpp
        ArrayGeometry.cpp
        BoundingBox.cpp
        Cache.cpp
        CalibrationSource.cpp
        Carrier.cpp
        CodedMask.cpp
        Detector.cpp
        Ebounds.cpp
        FrameProcessor.cpp
        Geometry.cpp
        GTICollection.cpp
        InverseTransformSampler.cpp
        LineInfo.cpp
        NewArf.cpp
        NewAttitude.cpp
        NewEvent.cpp
        NewEventfile.cpp
        NewImpactfile.cpp
        NewPha2PiLib.cpp
        NewPhotonfile.cpp
        NewPSF.cpp
        NewRMF.cpp
        NewSIXT.cpp
        NewSourceCatalog.cpp
        NewVignetting.cpp
        OperationStrategy.cpp
        ObsInfo.cpp
        Parameters.cpp
        paraminput.cpp
        PatternAnalysis.cpp
        Pha2PiCorrection.cpp
        PhotonGeneration.cpp
        PhotonImaging.cpp
        PhotonInteractionStrategy.cpp
        PhotonMetainfo.cpp
        PhotonProjection.cpp
        Pixel.cpp
        Postprocessing.cpp
        ReadoutClock.cpp
        ReadoutStrategy.cpp
        RegionFiltering.cpp
        Sensor.cpp
        #SimAttitude.cpp
        SimulationParameters.cpp
        sixte_random.cpp
        SixteAUXBackground.cpp
        SixteBackground.cpp
        SixteCCFits.cpp
        SixteCrosstalk.cpp
        #SixteEventFile.cpp
        SixteException.cpp
        SixteGrading.cpp
        SixteLinterp.cpp
        SixtePhoton.cpp
        SixteProgressbar.cpp
        SixteTesEventFile.cpp
        SixteVector.cpp
        Telescope_attitude.cpp
        TelescopeModule.cpp
        TemplateFitsFiles.cpp
        XMLData.cpp
        raytracing/shape/Hyperboloid.cpp
        raytracing/shape/Paraboloid.cpp
        raytracing/shape/Spider.cpp
        raytracing/shape/Shape.cpp
        raytracing/shape/Plane.cpp
        raytracing/geometry/Ray.cpp
        raytracing/mirror_module/Wolter.cpp
        raytracing/surface/GaussSurface.cpp
        raytracing/surface/SurfaceModel.cpp
        raytracing/surface/Reflectivity.cpp
        raytracing/surface/SurfaceStrategy.cpp
        raytracing/mirror_module/EmbreeScene.cpp
        raytracing/sensor/Sensor.cpp
        raytracing/surface/Dummy.cpp
        raytracing/mirror_module/LobsterEyeOptic.cpp
        raytracing/surface/Microfacet.cpp
        raytracing/shape/OpticalMesh.cpp
)

set(LIBSIXTCPP_HEADERS
        Absorber.h
        ArrayGeometry.h
        boost_progress.h
        BoundingBox.h
        Cache.h
        CalibrationSource.h
        Carrier.h
        CircularBuffer.h
        CodedMask.h
        Detector.h
        Ebounds.h
        EnergyDeposition.h
        FrameProcessor.h
        FuncBlock.h
        Geometry.h
        GTICollection.h
        healog.h
        InverseTransformSampler.h
        LineInfo.h
        NewArf.h
        NewAttitude.h
        NewEvent.h
        NewEventfile.h
        NewImpactfile.h
        NewPha2PiLib.h
        NewPhotonfile.h
        NewPSF.h
        NewRMF.h
        NewSIXT.h
        NewSourceCatalog.h
        NewVignetting.h
        ObsInfo.h
        OperationStrategy.h
        Parameters.h
        paraminput.h
        ParseMath.h
        PatternAnalysis.h
        Pha2PiCorrection.h
        PhotonGeneration.h
        PhotonImaging.h
        PhotonInteractionStrategy.h
        PhotonMetainfo.h
        PhotonProjection.h
        Pixel.h
        Polygon.h
        Postprocessing.h
        ReadoutClock.h
        ReadoutStrategy.h
        RegionFiltering.h
        Registry.h
        Sensor.h
        Signal.h
        #SimAttitude.h
        SimulationParameters.h
        sixte_random.h
        SixteAUXBackground.h
        SixteBackground.h
        SixteCCFits.h
        SixteCrosstalk.h
        #SixteEventFile.h
        SixteException.h
        SixteGrading.h
        SixteLinterp.h
        SixtePhoton.h
        SixteProgressbar.h
        SixteTesEventFile.h
        SixteVector.h
        StochInterp.h
        Telescope_attitude.h
        TelescopeModule.h
        TemplateFitsFiles.h
        XMLData.h
        raytracing/shape/Plane.h
        raytracing/geometry/Ray.h
        raytracing/mirror_module/MirrorModule.h
        raytracing/mirror_module/Wolter.h
        raytracing/Raytracing.h
        raytracing/shape/Hyperboloid.h
        raytracing/shape/Paraboloid.h
        raytracing/shape/Spider.h
        raytracing/shape/Shape.h
        raytracing/surface/GaussSurface.h
        raytracing/surface/SurfaceModel.h
        raytracing/surface/SurfaceStrategy.h
        raytracing/surface/Reflectivity.h
        raytracing/mirror_module/EmbreeScene.h
        raytracing/sensor/Sensor.h
        raytracing/mesh_reading/stl_reader.h
        raytracing/surface/Dummy.h
        raytracing/surface/Microfacet.h
        raytracing/mirror_module/LobsterEyeOptic.h
        raytracing/shape/OpticalMesh.h
        raytracing/shape/Pore.cpp
        raytracing/shape/Pore.h
)

SET(LIB_NAME libsixtcpp)
add_library(${LIB_NAME} SHARED ${LIBSIXTCPP_SOURCES} ${LIBSIXTCPP_HEADERS})
set_target_properties(${LIB_NAME} PROPERTIES VERSION "1.0.0")
target_include_directories(${LIB_NAME} PUBLIC
        ${CMAKE_CURRENT_SOURCE_DIR}
        ${EXT_INCLUDE_DIRS}
        ${SIMPUT_INCLUDE_DIR})
target_link_directories(${LIB_NAME} PUBLIC
        ${SIMPUT_LIBRARY_DIR})
target_link_libraries(${LIB_NAME} PUBLIC
        compiler_flags
        ${EXT_LIBRARIES}
        ${SIMPUT_LIBRARIES}
        libsixt)

# INSTALL
set(installable_libs ${LIB_NAME})
install(TARGETS ${installable_libs})
install(FILES ${LIBSIXTCPP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

### Apple Adjustments for missing boost headers ###
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
        # target_compile_definitions(${LIB_NAME} PUBLIC unary_function=__unary_function)
        # target_compile_definitions(${LIB_NAME} PUBLIC binary_function=__binary_function)
        target_compile_definitions(${LIB_NAME} PUBLIC sincos=__sincos)
endif ()
