Import('*')

env = env.Clone()

env.Prepend(CPPPATH = [
    'include',
    'internals',
    'libnurbs/internals',
    'libnurbs/interface',
    'libnurbs/nurbtess',
])

env.Prepend(CPPDEFINES = [
    'LIBRARYBUILD',
    'RESOLVE_3D_TEXTURE_SUPPORT',
])

sources = [
    'libutil/error.c',
    'libutil/glue.c',
    'libutil/mipmap.c',
    'libutil/project.c',
    'libutil/quad.c',
    'libutil/registry.c',
    'libtess/dict.c',
    'libtess/geom.c',
    'libtess/memalloc.c',
    'libtess/mesh.c',
    'libtess/normal.c',
    'libtess/priorityq.c',
    'libtess/render.c',
    'libtess/sweep.c',
    'libtess/tess.c',
    'libtess/tessmono.c',
    'libnurbs/interface/bezierEval.cc',
    'libnurbs/interface/bezierPatch.cc',
    'libnurbs/interface/bezierPatchMesh.cc',
    'libnurbs/interface/glcurveval.cc',
    'libnurbs/interface/glinterface.cc',
    'libnurbs/interface/glrenderer.cc',
    'libnurbs/interface/glsurfeval.cc',
    'libnurbs/interface/incurveeval.cc',
    'libnurbs/interface/insurfeval.cc',
    'libnurbs/internals/arc.cc',
    'libnurbs/internals/arcsorter.cc',
    'libnurbs/internals/arctess.cc',
    'libnurbs/internals/backend.cc',
    'libnurbs/internals/basiccrveval.cc',
    'libnurbs/internals/basicsurfeval.cc',
    'libnurbs/internals/bin.cc',
    'libnurbs/internals/bufpool.cc',
    'libnurbs/internals/cachingeval.cc',
    'libnurbs/internals/ccw.cc',
    'libnurbs/internals/coveandtiler.cc',
    'libnurbs/internals/curve.cc',
    'libnurbs/internals/curvelist.cc',
    'libnurbs/internals/curvesub.cc',
    'libnurbs/internals/dataTransform.cc',
    'libnurbs/internals/displaylist.cc',
    'libnurbs/internals/flist.cc',
    'libnurbs/internals/flistsorter.cc',
    'libnurbs/internals/hull.cc',
    'libnurbs/internals/intersect.cc',
    'libnurbs/internals/knotvector.cc',
    'libnurbs/internals/mapdesc.cc',
    'libnurbs/internals/mapdescv.cc',
    'libnurbs/internals/maplist.cc',
    'libnurbs/internals/mesher.cc',
    'libnurbs/internals/monoTriangulationBackend.cc',
    'libnurbs/internals/monotonizer.cc',
    'libnurbs/internals/mycode.cc',
    'libnurbs/internals/nurbsinterfac.cc',
    'libnurbs/internals/nurbstess.cc',
    'libnurbs/internals/patch.cc',
    'libnurbs/internals/patchlist.cc',
    'libnurbs/internals/quilt.cc',
    'libnurbs/internals/reader.cc',
    'libnurbs/internals/renderhints.cc',
    'libnurbs/internals/slicer.cc',
    'libnurbs/internals/sorter.cc',
    'libnurbs/internals/splitarcs.cc',
    'libnurbs/internals/subdivider.cc',
    'libnurbs/internals/tobezier.cc',
    'libnurbs/internals/trimline.cc',
    'libnurbs/internals/trimregion.cc',
    'libnurbs/internals/trimvertpool.cc',
    'libnurbs/internals/uarray.cc',
    'libnurbs/internals/varray.cc',
    'libnurbs/nurbtess/directedLine.cc',
    'libnurbs/nurbtess/gridWrap.cc',
    'libnurbs/nurbtess/monoChain.cc',
    'libnurbs/nurbtess/monoPolyPart.cc',
    'libnurbs/nurbtess/monoTriangulation.cc',
    'libnurbs/nurbtess/partitionX.cc',
    'libnurbs/nurbtess/partitionY.cc',
    'libnurbs/nurbtess/polyDBG.cc',
    'libnurbs/nurbtess/polyUtil.cc',
    'libnurbs/nurbtess/primitiveStream.cc',
    'libnurbs/nurbtess/quicksort.cc',
    'libnurbs/nurbtess/rectBlock.cc',
    'libnurbs/nurbtess/sampleComp.cc',
    'libnurbs/nurbtess/sampleCompBot.cc',
    'libnurbs/nurbtess/sampleCompRight.cc',
    'libnurbs/nurbtess/sampleCompTop.cc',
    'libnurbs/nurbtess/sampleMonoPoly.cc',
    'libnurbs/nurbtess/sampledLine.cc',
    'libnurbs/nurbtess/searchTree.cc',
]

if env['platform'] == 'windows':
    # -D_OPENGL32_ -Iinclude -DBUILD_GL32
    env.PrependUnique(LIBS = [
        'gdi32', 
        'user32', 
        'opengl32', 
    ])
    target = 'glu32'
    sources += ['glu.def']
else:
    env.PrependUnique(LIBS = [
        'GL',
    ])
    target = 'glu'

if env['platform'] == 'haiku':
    glu = env.StaticLibrary(
        target = target,
        source = sources
    )
else:
    glu = env.SharedLibrary(
        target = target,
        source = sources
    )
    env.Alias('glu', env.InstallSharedLibrary(glu, version=(1, 3, 0)))


if env['platform'] == 'windows':
    glu = env.FindIxes(glu, 'LIBPREFIX', 'LIBSUFFIX')
else:
    glu = env.FindIxes(glu, 'SHLIBPREFIX', 'SHLIBSUFFIX')

Export('glu')