set(QG_DIRS
  ${CMAKE_CURRENT_BINARY_DIR}
  ${CMAKE_CURRENT_SOURCE_DIR}
)

if(BRLCAD_ENABLE_QT)
  find_package_qt(REQUIRED)

  if(BRLCAD_ENABLE_OPENGL AND OPENGL_TARGETS)
    if(Qt6Widgets_FOUND)
      set(QT_OPENGL_LIBS "Qt6::OpenGL;Qt6::OpenGLWidgets")
    else()
      set(QT_OPENGL_LIBS "Qt5::OpenGL")
    endif(Qt6Widgets_FOUND)
  endif()

endif(BRLCAD_ENABLE_QT)

# We build the resources in at this level, but list them out
# in the subdirectories
add_subdirectory(images)

# NOTE: We can't use the CMake global values for automoc et. al.
# because most of BRL-CAD's targets are not Qt targets.  We don't
# want to run the automatic moc logic for all of them.

set(
  qtcad_srcs
  bindings.cpp
  QgAccordion.cpp
  QgAppExecDialog.cpp
  QgAttributesModel.cpp
  QgColorRGB.cpp
  QgConsole.cpp
  QgConsoleListener.cpp
  QgDockWidget.cpp
  QgFlowLayout.cpp
  QgGeomImport.cpp
  QgKeyVal.cpp
  QgMeasureFilter.cpp
  QgModel.cpp
  QgPolyFilter.cpp
  QgQuadView.cpp
  QgSW.cpp
  QgSelectFilter.cpp
  QgSketchFilter.cpp
  QgToolPalette.cpp
  QgTreeSelectionModel.cpp
  QgTreeView.cpp
  QgUtil.cpp
  QgView.cpp
  QgViewCtrl.cpp
)
if(BRLCAD_ENABLE_OPENGL AND OPENGL_TARGETS)
  set(qtcad_srcs ${qtcad_srcs} QgGL.cpp)
endif()

# We need to run Qt's Meta-Object Compiler on some of the
# libqtcad headers - prepare that list here.  We will also
# need to clean up some of the files generated by this
# process in distclean, so we use the "core" name of the
# header files to allow for easy generation of both header
# and file-cleanup lists.
set(QTCAD_HDR_DIR ${BRLCAD_SOURCE_DIR}/include/qtcad)
set(
  qth_names
  QgAccordion
  QgAppExecDialog
  QgAttributesModel
  QgColorRGB
  QgConsole
  QgConsoleListener
  QgDockWidget
  QgGeomImport
  QgKeyVal
  QgMeasureFilter
  QgModel
  QgPolyFilter
  QgQuadView
  QgSW
  QgSelectFilter
  QgSketchFilter
  QgToolPalette
  QgTreeSelectionModel
  QgTreeView
  QgView
  QgViewCtrl
)
if(BRLCAD_ENABLE_OPENGL AND OPENGL_TARGETS)
  set(qth_names ${qth_names} QgGL)
endif()

foreach(qh ${qth_names})
  set(qtcad_moc_hdrs ${qtcad_moc_hdrs} ${QTCAD_HDR_DIR}/${qh}.h)
endforeach(qh ${qth_names})

# Note - libqtcad_deps is defined by ${BRLCAD_SOURCE_DIR}/src/source_dirs.cmake
if(BRLCAD_ENABLE_QT)
  if(NOT BRLCAD_ENABLE_BRLCAD_LIBRARY)
    set(USE_OBJECT_LIBS OFF)
  endif()
  set(QTCAD_SRCS ${qtcad_srcs})
  set(QTCAD_PUBLIC_LIBS ${libqtcad_deps})

  if(Qt6Widgets_FOUND)
    qt6_wrap_cpp(qtcad_moc_srcs ${qtcad_moc_hdrs})
    qt6_add_resources(qtcad_qrc qtcad_resources.qrc)
    set(QTCAD_PUBLIC_LIBS ${QTCAD_PUBLIC_LIBS} Qt6::Core Qt6::Widgets ${QT_OPENGL_LIBS} ${OPENGL_TARGETS})
  else()
    qt5_wrap_cpp(qtcad_moc_srcs ${qtcad_moc_hdrs})
    qt5_add_resources(qtcad_qrc qtcad_resources.qrc)
    set(QTCAD_PUBLIC_LIBS ${QTCAD_PUBLIC_LIBS} Qt5::Core Qt5::Widgets ${QT_OPENGL_LIBS} ${OPENGL_TARGETS})
  endif(Qt6Widgets_FOUND)
  set(QTCAD_SRCS ${QTCAD_SRCS} ${qtcad_moc_srcs} ${qtcad_qrc})

  # We need to set the unity skip on one of the moc sources
  foreach(moc_src ${qtcad_moc_srcs})
    if ("${moc_src}" MATCHES ".*moc_QgConsoleListener.cpp$")
      set_source_files_properties(${moc_src} PROPERTIES SKIP_UNITY_BUILD_INCLUSION ON)
    endif()
  endforeach()

  brlcad_addlib(libqtcad "${QTCAD_SRCS}" "" "${QG_DIRS}" SHARED
    PUBLIC_LIBS ${QTCAD_PUBLIC_LIBS}
  )
  set_target_properties(libqtcad PROPERTIES VERSION 20.0.1 SOVERSION 20)
  if(OPENGL_TARGETS)
    set_property(TARGET libqtcad APPEND PROPERTY COMPILE_DEFINITIONS "QT_SYSTEM_OPENGL")
    if(TARGET libqtcad-obj)
      set_property(TARGET libqtcad-obj APPEND PROPERTY COMPILE_DEFINITIONS "QT_SYSTEM_OPENGL")
    endif(TARGET libqtcad-obj)
    if(TARGET libqtcad-brlcad-obj)
      set_property(TARGET libqtcad-brlcad-obj APPEND PROPERTY COMPILE_DEFINITIONS "QT_SYSTEM_OPENGL")
    endif(TARGET libqtcad-brlcad-obj)
  endif(OPENGL_TARGETS)

  distclean(qtcad_resources.qrc.depends)
  # Generate the cpp_parameters cleanup commands for the headers
  foreach(qh ${qth_names})
    distclean(${CMAKE_CURRENT_BINARY_DIR}/__/__/include/qtcad/moc_${qh}.cpp_parameters)
  endforeach(qh ${qth_names})
endif(BRLCAD_ENABLE_QT)

add_subdirectory(tests)

set(
  qtcad_ignore_srcs
  CMakeLists.txt
  ${qtcad_srcs}
  ${qtcad_moc_hdrs}
  bindings.h
  qtcad_resources.qrc
  QgGL.cpp
)

cmakefiles(${qtcad_ignore_srcs})

# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
