set(HEADERS uLibVtkInterface.h
            uLibVtkViewer.h
            vtkHandlerWidget.h
            vtkQViewport.h
            vtkViewport.h
            vtkObjectsContext.h
            vtkMultiSelectionProp.h
            )

set(SOURCES uLibVtkInterface.cxx
            uLibVtkViewer.cpp
            vtkHandlerWidget.cpp
            vtkQViewport.cpp
            vtkViewport.cpp
            vtkObjectsContext.cpp
            vtkMultiSelectionProp.cpp
            )

## Pull in Math VTK wrappers (sets MATH_SOURCES / MATH_HEADERS)
add_subdirectory(Math)
list(APPEND SOURCES ${MATH_SOURCES})
list(APPEND HEADERS ${MATH_HEADERS})

## Pull in HEP/Detectors VTK wrappers (sets HEP_DETECTORS_SOURCES / HEADERS)
add_subdirectory(HEP/Detectors)
list(APPEND SOURCES ${HEP_DETECTORS_SOURCES})
list(APPEND HEADERS ${HEP_DETECTORS_HEADERS})

## Pull in HEP/MuonTomography VTK wrappers (sets HEP_MUONTOMOGRAPHY_SOURCES / HEADERS)
add_subdirectory(HEP/MuonTomography)
list(APPEND SOURCES ${HEP_MUONTOMOGRAPHY_SOURCES})
list(APPEND HEADERS ${HEP_MUONTOMOGRAPHY_HEADERS})

## Pull in HEP/Geant VTK wrappers (sets HEP_GEANT_SOURCES / HEADERS)
add_subdirectory(HEP/Geant)
list(APPEND SOURCES ${HEP_GEANT_SOURCES})
list(APPEND HEADERS ${HEP_GEANT_HEADERS})

set(LIBRARIES Eigen3::Eigen
              ${ROOT_LIBRARIES}
              ${VTK_LIBRARIES}
              VTK::ImagingHybrid
              VTK::ImagingSources
              ${PACKAGE_LIBPREFIX}Math
              ${PACKAGE_LIBPREFIX}Detectors
              ${PACKAGE_LIBPREFIX}Geant)

if(USE_CUDA)
  find_package(CUDAToolkit REQUIRED)
  list(APPEND LIBRARIES CUDA::cudart)
endif()

set(libname ${PACKAGE_LIBPREFIX}Vtk)
set(ULIB_SHARED_LIBRARIES ${ULIB_SHARED_LIBRARIES} ${libname} PARENT_SCOPE)
set(ULIB_SELECTED_MODULES ${ULIB_SELECTED_MODULES} Vtk PARENT_SCOPE)

add_library(${libname} SHARED ${SOURCES})
set_target_properties(${libname} PROPERTIES
                                             SOVERSION ${PROJECT_SOVERSION}
                       AUTOMOC ON
                       AUTOUIC ON
                       AUTORCC ON)
target_link_libraries(${libname} PUBLIC ${LIBRARIES} Qt6::Widgets)

install(TARGETS ${libname}
        EXPORT "uLibTargets"
        RUNTIME DESTINATION ${INSTALL_BIN_DIR} COMPONENT bin
        LIBRARY DESTINATION ${INSTALL_LIB_DIR} COMPONENT lib)

install(FILES ${HEADERS} DESTINATION ${INSTALL_INC_DIR}/Vtk)
install(FILES ${MATH_HEADERS} DESTINATION ${INSTALL_INC_DIR}/Vtk/Math)
install(FILES ${HEP_DETECTORS_HEADERS} DESTINATION ${INSTALL_INC_DIR}/Vtk/HEP/Detectors)
install(FILES ${HEP_MUONTOMOGRAPHY_HEADERS} DESTINATION ${INSTALL_INC_DIR}/Vtk/HEP/MuonTomography)
install(FILES ${HEP_GEANT_HEADERS} DESTINATION ${INSTALL_INC_DIR}/Vtk/HEP/Geant)

if(BUILD_TESTING)
  include(uLibTargetMacros)
  add_subdirectory(testing)
endif()
