
# FIXME: For OS X, need flag for Framework or dylib
IF(DYNAMIC_OPENSCENEGRAPH)
    ADD_DEFINITIONS(-DOSG_LIBRARY)
ELSE()
    ADD_DEFINITIONS(-DOSG_LIBRARY_STATIC)
ENDIF()

SET(LIB_NAME osg)

#
# Enable workaround for OpenGL driver crash with occlusion query
#
OPTION(OSG_FORCE_QUERY_RESULT_AVAILABLE_BEFORE_RETRIEVAL "Set to ON to build OcclussionQueryNode with a workaround for multi-threaded OpenGL driver occlussion query crash. " OFF)
IF(OSG_FORCE_QUERY_RESULT_AVAILABLE_BEFORE_RETRIEVAL)
    ADD_DEFINITIONS(-DFORCE_QUERY_RESULT_AVAILABLE_BEFORE_RETRIEVAL)
ENDIF()


SET(HEADER_PATH ${OpenSceneGraph_SOURCE_DIR}/include/${LIB_NAME})
SET(TARGET_H
    ${HEADER_PATH}/io_utils
    ${HEADER_PATH}/os_utils
    ${HEADER_PATH}/AlphaFunc
    ${HEADER_PATH}/AnimationPath
    ${HEADER_PATH}/ApplicationUsage
    ${HEADER_PATH}/ArgumentParser
    ${HEADER_PATH}/Array
    ${HEADER_PATH}/AttributeDispatchers
    ${HEADER_PATH}/AudioStream
    ${HEADER_PATH}/AutoTransform
    ${HEADER_PATH}/Billboard
    ${HEADER_PATH}/BindImageTexture
    ${HEADER_PATH}/BlendColor
    ${HEADER_PATH}/BlendEquation
    ${HEADER_PATH}/BlendEquationi
    ${HEADER_PATH}/BlendFunc
    ${HEADER_PATH}/BlendFunci
    ${HEADER_PATH}/BoundingBox
    ${HEADER_PATH}/BoundingSphere
    ${HEADER_PATH}/BoundsChecking
    ${HEADER_PATH}/buffered_value
    ${HEADER_PATH}/BufferIndexBinding
    ${HEADER_PATH}/BufferObject
    ${HEADER_PATH}/BufferTemplate
    ${HEADER_PATH}/Callback
    ${HEADER_PATH}/Camera
    ${HEADER_PATH}/CameraView
    ${HEADER_PATH}/Capability
    ${HEADER_PATH}/ClampColor
    ${HEADER_PATH}/ClearNode
    ${HEADER_PATH}/ClipControl
    ${HEADER_PATH}/ClipNode
    ${HEADER_PATH}/ClipPlane
    ${HEADER_PATH}/ClusterCullingCallback
    ${HEADER_PATH}/CollectOccludersVisitor
    ${HEADER_PATH}/ColorMask
    ${HEADER_PATH}/ColorMaski
    ${HEADER_PATH}/ColorMatrix
    ${HEADER_PATH}/ComputeBoundsVisitor
    ${HEADER_PATH}/DispatchCompute
    ${HEADER_PATH}/ContextData
    ${HEADER_PATH}/ConvexPlanarOccluder
    ${HEADER_PATH}/ConvexPlanarPolygon
    ${HEADER_PATH}/CoordinateSystemNode
    ${HEADER_PATH}/CopyOp
    ${HEADER_PATH}/CullFace
    ${HEADER_PATH}/CullingSet
    ${HEADER_PATH}/CullSettings
    ${HEADER_PATH}/CullStack
    ${HEADER_PATH}/DeleteHandler
    ${HEADER_PATH}/Depth
    ${HEADER_PATH}/DepthRangeIndexed
    ${HEADER_PATH}/DisplaySettings
    ${HEADER_PATH}/Drawable
    ${HEADER_PATH}/DrawPixels
    ${HEADER_PATH}/Endian
    ${HEADER_PATH}/Export
    ${HEADER_PATH}/fast_back_stack
    ${HEADER_PATH}/Fog
    ${HEADER_PATH}/FragmentProgram
    ${HEADER_PATH}/FrameBufferObject
    ${HEADER_PATH}/FrameStamp
    ${HEADER_PATH}/FrontFace
    ${HEADER_PATH}/Geode
    ${HEADER_PATH}/Geometry
    ${HEADER_PATH}/GL2Extensions
    ${HEADER_PATH}/GLDefines
    ${HEADER_PATH}/GLExtensions
    ${HEADER_PATH}/GLObjects
    ${HEADER_PATH}/GLU
    ${HEADER_PATH}/GraphicsCostEstimator
    ${HEADER_PATH}/GraphicsContext
    ${HEADER_PATH}/GraphicsThread
    ${HEADER_PATH}/Group
    ${HEADER_PATH}/Hint
    ${HEADER_PATH}/Identifier
    ${HEADER_PATH}/Image
    ${HEADER_PATH}/ImageSequence
    ${HEADER_PATH}/ImageStream
    ${HEADER_PATH}/ImageUtils
    ${HEADER_PATH}/KdTree
    ${HEADER_PATH}/Light
    ${HEADER_PATH}/LightModel
    ${HEADER_PATH}/LightSource
    ${HEADER_PATH}/LineSegment
    ${HEADER_PATH}/LineStipple
    ${HEADER_PATH}/LineWidth
    ${HEADER_PATH}/LOD
    ${HEADER_PATH}/LogicOp
    ${HEADER_PATH}/Material
    ${HEADER_PATH}/Math
    ${HEADER_PATH}/Matrix
    ${HEADER_PATH}/Matrixd
    ${HEADER_PATH}/Matrixf
    ${HEADER_PATH}/MatrixTransform
    ${HEADER_PATH}/MixinVector
    ${HEADER_PATH}/Multisample
    ${HEADER_PATH}/Node
    ${HEADER_PATH}/NodeCallback
    ${HEADER_PATH}/NodeTrackerCallback
    ${HEADER_PATH}/NodeVisitor
    ${HEADER_PATH}/Notify
    ${HEADER_PATH}/Object
    ${HEADER_PATH}/observer_ptr
    ${HEADER_PATH}/Observer
    ${HEADER_PATH}/ObserverNodePath
    ${HEADER_PATH}/OccluderNode
    ${HEADER_PATH}/OcclusionQueryNode
    ${HEADER_PATH}/OperationThread
    ${HEADER_PATH}/PatchParameter
    ${HEADER_PATH}/PagedLOD
    ${HEADER_PATH}/Plane
    ${HEADER_PATH}/Point
    ${HEADER_PATH}/PointSprite
    ${HEADER_PATH}/PolygonMode
    ${HEADER_PATH}/PolygonOffset
    ${HEADER_PATH}/PolygonStipple
    ${HEADER_PATH}/Polytope
    ${HEADER_PATH}/PositionAttitudeTransform
    ${HEADER_PATH}/PrimitiveSet
    ${HEADER_PATH}/PrimitiveSetIndirect
    ${HEADER_PATH}/PrimitiveRestartIndex
    ${HEADER_PATH}/Program
    ${HEADER_PATH}/Projection
    ${HEADER_PATH}/ProxyNode
    ${HEADER_PATH}/Quat
    ${HEADER_PATH}/Referenced
    ${HEADER_PATH}/ref_ptr
    ${HEADER_PATH}/RenderInfo
    ${HEADER_PATH}/SampleMaski
    ${HEADER_PATH}/Sampler
    ${HEADER_PATH}/Scissor
    ${HEADER_PATH}/ScissorIndexed
    ${HEADER_PATH}/ScriptEngine
    ${HEADER_PATH}/Sequence
    ${HEADER_PATH}/ShadeModel
    ${HEADER_PATH}/Shader
    ${HEADER_PATH}/ShaderAttribute
    ${HEADER_PATH}/ShaderComposer
    ${HEADER_PATH}/ShadowVolumeOccluder
    ${HEADER_PATH}/Shape
    ${HEADER_PATH}/ShapeDrawable
    ${HEADER_PATH}/State
    ${HEADER_PATH}/StateAttribute
    ${HEADER_PATH}/StateAttributeCallback
    ${HEADER_PATH}/StateSet
    ${HEADER_PATH}/Stats
    ${HEADER_PATH}/Stencil
    ${HEADER_PATH}/StencilTwoSided
    ${HEADER_PATH}/Switch
    ${HEADER_PATH}/TemplatePrimitiveFunctor
    ${HEADER_PATH}/TemplatePrimitiveIndexFunctor
    ${HEADER_PATH}/TexEnv
    ${HEADER_PATH}/TexEnvCombine
    ${HEADER_PATH}/TexEnvFilter
    ${HEADER_PATH}/TexGen
    ${HEADER_PATH}/TexGenNode
    ${HEADER_PATH}/TexMat
    ${HEADER_PATH}/Texture
    ${HEADER_PATH}/Texture1D
    ${HEADER_PATH}/Texture2D
    ${HEADER_PATH}/Texture2DMultisample
    ${HEADER_PATH}/Texture2DArray
    ${HEADER_PATH}/Texture3D
    ${HEADER_PATH}/TextureBuffer
    ${HEADER_PATH}/TextureCubeMap
    ${HEADER_PATH}/TextureRectangle
    ${HEADER_PATH}/Timer
    ${HEADER_PATH}/TransferFunction
    ${HEADER_PATH}/Transform
    ${HEADER_PATH}/TriangleFunctor
    ${HEADER_PATH}/TriangleIndexFunctor
    ${HEADER_PATH}/TriangleLinePointIndexFunctor
    ${HEADER_PATH}/Types
    ${HEADER_PATH}/Uniform
    ${HEADER_PATH}/UserDataContainer
    ${HEADER_PATH}/ValueObject
    ${HEADER_PATH}/ValueMap
    ${HEADER_PATH}/ValueStack
    ${HEADER_PATH}/Vec2
    ${HEADER_PATH}/Vec2b
    ${HEADER_PATH}/Vec2d
    ${HEADER_PATH}/Vec2f
    ${HEADER_PATH}/Vec2i
    ${HEADER_PATH}/Vec2s
    ${HEADER_PATH}/Vec2ub
    ${HEADER_PATH}/Vec2ui
    ${HEADER_PATH}/Vec2us
    ${HEADER_PATH}/Vec3
    ${HEADER_PATH}/Vec3b
    ${HEADER_PATH}/Vec3d
    ${HEADER_PATH}/Vec3f
    ${HEADER_PATH}/Vec3i
    ${HEADER_PATH}/Vec3s
    ${HEADER_PATH}/Vec3ub
    ${HEADER_PATH}/Vec3ui
    ${HEADER_PATH}/Vec3us
    ${HEADER_PATH}/Vec4
    ${HEADER_PATH}/Vec4b
    ${HEADER_PATH}/Vec4d
    ${HEADER_PATH}/Vec4f
    ${HEADER_PATH}/Vec4i
    ${HEADER_PATH}/Vec4s
    ${HEADER_PATH}/Vec4ub
    ${HEADER_PATH}/Vec4ui
    ${HEADER_PATH}/Vec4us
    ${HEADER_PATH}/VertexAttribDivisor
    ${HEADER_PATH}/VertexArrayState
    ${HEADER_PATH}/VertexProgram
    ${HEADER_PATH}/View
    ${HEADER_PATH}/Viewport
    ${HEADER_PATH}/ViewportIndexed
    ${OPENSCENEGRAPH_VERSION_HEADER}
    ${OPENSCENEGRAPH_CONFIG_HEADER}
    ${OPENSCENEGRAPH_OPENGL_HEADER}
)

#ADD_LIBRARY(${LIB_NAME}
#    ${OPENSCENEGRAPH_USER_DEFINED_DYNAMIC_OR_STATIC}
#    ${LIB_PUBLIC_HEADERS}
SET(TARGET_SRC
    os_utils.cpp
    AlphaFunc.cpp
    AnimationPath.cpp
    ApplicationUsage.cpp
    ArgumentParser.cpp
    Array.cpp
    AttributeDispatchers.cpp
    AudioStream.cpp
    AutoTransform.cpp
    Billboard.cpp
    BindImageTexture.cpp
    BlendColor.cpp
    BlendEquation.cpp
    BlendEquationi.cpp
    BlendFunc.cpp
    BlendFunci.cpp
    BufferIndexBinding.cpp
    BufferObject.cpp
    Callback.cpp
    Capability.cpp
    Camera.cpp
    CameraView.cpp
    ClampColor.cpp
    ClearNode.cpp
    ClipControl.cpp
    ClipNode.cpp
    ClipPlane.cpp
    ClusterCullingCallback.cpp
    CollectOccludersVisitor.cpp
    ColorMask.cpp
    ColorMaski.cpp
    ColorMatrix.cpp
    ComputeBoundsVisitor.cpp
    DispatchCompute.cpp
    ContextData.cpp
    ConvexPlanarOccluder.cpp
    ConvexPlanarPolygon.cpp
    CoordinateSystemNode.cpp
    CopyOp.cpp
    CullFace.cpp
    CullingSet.cpp
    CullSettings.cpp
    CullStack.cpp
    DeleteHandler.cpp
    Depth.cpp
    DepthRangeIndexed.cpp
    DisplaySettings.cpp
    Drawable.cpp
    DrawPixels.cpp
    dxtctool.cpp
    dxtctool.h
    Fog.cpp
    FragmentProgram.cpp
    FrameBufferObject.cpp
    FrameStamp.cpp
    FrontFace.cpp
    Geode.cpp
    Geometry.cpp
    GLExtensions.cpp
    GLObjects.cpp
    GLStaticLibrary.h
    GLStaticLibrary.cpp
    GraphicsCostEstimator.cpp
    GraphicsContext.cpp
    GraphicsThread.cpp
    Group.cpp
    Hint.cpp
    Identifier.cpp
    Image.cpp
    ImageSequence.cpp
    ImageStream.cpp
    ImageUtils.cpp
    KdTree.cpp
    Light.cpp
    LightModel.cpp
    LightSource.cpp
    LineSegment.cpp
    LineStipple.cpp
    LineWidth.cpp
    LOD.cpp
    LogicOp.cpp
    Material.cpp
    Math.cpp
    Matrixd.cpp
    MatrixDecomposition.cpp
    Matrixf.cpp
    # We don't build this one
    #    Matrix_implementation.cpp
    MatrixTransform.cpp
    Multisample.cpp
    Node.cpp
    NodeTrackerCallback.cpp
    NodeVisitor.cpp
    Notify.cpp
    Object.cpp
    Observer.cpp
    ObserverNodePath.cpp
    OccluderNode.cpp
    OcclusionQueryNode.cpp
    OperationThread.cpp
    PatchParameter.cpp
    PagedLOD.cpp
    Point.cpp
    PointSprite.cpp
    PolygonMode.cpp
    PolygonOffset.cpp
    PolygonStipple.cpp
    Polytope.cpp
    PositionAttitudeTransform.cpp
    PrimitiveSet.cpp
    PrimitiveSetIndirect.cpp
    PrimitiveRestartIndex.cpp
    Program.cpp
    Projection.cpp
    ProxyNode.cpp
    Quat.cpp
    Referenced.cpp
    SampleMaski.cpp
    Sampler.cpp
    Scissor.cpp
    ScissorIndexed.cpp
    ScriptEngine.cpp
    Sequence.cpp
    ShadeModel.cpp
    Shader.cpp
    ShaderAttribute.cpp
    ShaderComposer.cpp
    ShadowVolumeOccluder.cpp
    Shape.cpp
    ShapeDrawable.cpp
    StateAttribute.cpp
    State.cpp
    StateSet.cpp
    Stats.cpp
    Stencil.cpp
    StencilTwoSided.cpp
    Switch.cpp
    TexEnvCombine.cpp
    TexEnv.cpp
    TexEnvFilter.cpp
    TexGen.cpp
    TexGenNode.cpp
    TexMat.cpp
    Texture1D.cpp
    Texture2DArray.cpp
    Texture2D.cpp
    Texture2DMultisample.cpp
    Texture3D.cpp
    Texture.cpp
    TextureBuffer.cpp
    TextureCubeMap.cpp
    TextureRectangle.cpp
    Timer.cpp
    TransferFunction.cpp
    Transform.cpp
    Uniform.cpp
    UserDataContainer.cpp
    ValueMap.cpp
    ValueStack.cpp
    Version.cpp
    VertexAttribDivisor.cpp
    VertexArrayState.cpp
    VertexProgram.cpp
    View.cpp
    Viewport.cpp
    ViewportIndexed.cpp

    glu/libutil/error.cpp
    glu/libutil/mipmap.cpp

    glu/libtess/normal.cpp
    glu/libtess/memalloc.cpp
    glu/libtess/dict-list.h
    glu/libtess/alg-outline
    glu/libtess/priorityq.cpp
    glu/libtess/normal.h
    glu/libtess/dict.h
    glu/libtess/render.cpp
    glu/libtess/tessmono.h
    glu/libtess/mesh.cpp
    glu/libtess/render.h
    glu/libtess/tessmono.cpp
    glu/libtess/priorityq.h
    glu/libtess/sweep.h
    glu/libtess/priorityq-sort.h
    glu/libtess/sweep.cpp
    glu/libtess/tess.h
    glu/libtess/geom.h
    glu/libtess/memalloc.h
    glu/libtess/dict.cpp
    glu/libtess/priorityq-heap.h
    glu/libtess/geom.cpp
    glu/libtess/tess.cpp
    glu/libtess/mesh.h


    ${OPENSCENEGRAPH_VERSIONINFO_RC}
)


SET(TARGET_LIBRARIES OpenThreads)

SET(TARGET_EXTERNAL_LIBRARIES
    ${CMAKE_THREAD_LIBS_INIT}
    ${MATH_LIBRARY}
    ${RT_LIBRARY}
    ${DL_LIBRARY}
)

#LINK_INTERNAL(${LIB_NAME}
#    OpenThreads
#)
#LINK_EXTERNAL(${LIB_NAME} ${CMAKE_THREAD_LIBS_INIT}    ${MATH_LIBRARY} ${RT_LIBRARY} ${DL_LIBRARY})
#LINK_CORELIB_DEFAULT(${LIB_NAME} ${CMAKE_THREAD_LIBS_INIT} ${MATH_LIBRARY} ${RT_LIBRARY} )

#INCLUDE(ModuleInstall OPTIONAL)

SETUP_LIBRARY(${LIB_NAME})
