# *** General source files
Set(MGXViewer_SRCS
  qglviewer.cpp
  camera.cpp
  manipulatedFrame.cpp
  manipulatedCameraFrame.cpp
  frame.cpp
  saveSnapshot.cpp
  constraint.cpp
  keyFrameInterpolator.cpp
  mouseGrabber.cpp
  quaternion.cpp
  vec.cpp
  )
Set(MGXViewer_HEADERS
  camera.h
  config.h
  constraint.h
  domUtils.h
  frame.h
  keyFrameInterpolator.h
  manipulatedCameraFrame.h
  manipulatedFrame.h
  mouseGrabber.h
  qglviewer.h
  quaternion.h
  vec.h
  )

# *** Sources for vectorial rendering
Option(NO_VECTORIAL_RENDER
  "If true, vectorial rendering is not compiled." FALSE)

If(NO_VECTORIAL_RENDER)
  Set(QGLVRender_SRCS "")
Else(NOT NO_VECTORIAL_RENDER)
  Set(QGLVRender_SRCS 
    VRender/BackFaceCullingOptimizer.cpp
    VRender/BSPSortMethod.cpp
    VRender/EPSExporter.cpp
    VRender/Exporter.cpp
    VRender/FIGExporter.cpp
    VRender/gpc.cpp
    VRender/ParserGL.cpp
    VRender/Primitive.cpp
    VRender/PrimitivePositioning.cpp
    VRender/TopologicalSortMethod.cpp
    VRender/VisibilityOptimizer.cpp
    VRender/Vector2.cpp
    VRender/Vector3.cpp
    VRender/NVector3.cpp
    VRender/VRender.cpp
    )
  Set(QGLVRender_VRender_HEADERS
    VRender/AxisAlignedBox.h
    VRender/Exporter.h
    VRender/gpc.h
    VRender/NVector3.h
    VRender/Optimizer.h
    VRender/ParserGL.h
    VRender/Primitive.h
    VRender/PrimitivePositioning.h
    VRender/SortMethod.h
    VRender/Types.h
    VRender/Vector2.h
    VRender/Vector3.h
    VRender/VRender.h
    )
ENDIF()

# *** Target library
Add_Library(MGXViewer SHARED ${MGXViewer_SRCS} ${QGLVRender_SRCS})
Target_Link_Libraries(MGXViewer
  Qt5::Widgets Qt5::OpenGL Qt5::Xml
  ${OPENGL_LIBRARIES})
If(WIN32)
  Set_Property(TARGET MGXViewer PROPERTY
    DEFINE_SYMBOL CREATE_QGLVIEWER_DLL)
Else()
  Set_Property(TARGET MGXViewer PROPERTY
    PUBLIC_HEADER ${MGXViewer_HEADERS})
EndIf()

# *** Installation
If(WIN32)
  Install(TARGETS MGXViewer
          RUNTIME DESTINATION bin COMPONENT MGXCore
          LIBRARY DESTINATION lib COMPONENT MGXCore)
Else()
  Install(TARGETS MGXViewer
          RUNTIME DESTINATION bin COMPONENT MGXCore
          LIBRARY DESTINATION lib COMPONENT MGXCore
          ARCHIVE DESTINATION lib COMPONENT MGXCore
          PUBLIC_HEADER DESTINATION include/MorphoGraphX/MGXViewer COMPONENT MGXCore)
  If(NOT NO_VECTORIAL_RENDER)
    Install(FILES ${QGLVRender_VRender_HEADERS}
            DESTINATION include/MorphoGraphX/MGXViewer/VRender
	    COMPONENT MGXCore)
  EndIf()
EndIf()
