import unittest

import sys

from ctypes import *

from ctypes.util import find_library

from ctypes.test import is_resource_enabled



if sys.platform == "win32":

    lib_gl = find_library("OpenGL32")

    lib_glu = find_library("Glu32")

    lib_gle = None

elif sys.platform == "darwin":

    lib_gl = lib_glu = find_library("OpenGL")

    lib_gle = None

else:

    lib_gl = find_library("GL")

    lib_glu = find_library("GLU")

    lib_gle = find_library("gle")



## print, for debugging

if is_resource_enabled("printing"):

    if lib_gl or lib_glu or lib_gle:

        print "OpenGL libraries:"

        for item in (("GL", lib_gl),

                     ("GLU", lib_glu),

                     ("gle", lib_gle)):

            print "\t", item





# On some systems, loading the OpenGL libraries needs the RTLD_GLOBAL mode.

class Test_OpenGL_libs(unittest.TestCase):

    def setUp(self):

        self.gl = self.glu = self.gle = None

        if lib_gl:

            self.gl = CDLL(lib_gl, mode=RTLD_GLOBAL)

        if lib_glu:

            self.glu = CDLL(lib_glu, RTLD_GLOBAL)

        if lib_gle:

            try:

                self.gle = CDLL(lib_gle)

            except OSError:

                pass



    if lib_gl:

        def test_gl(self):

            if self.gl:

                self.gl.glClearIndex



    if lib_glu:

        def test_glu(self):

            if self.glu:

                self.glu.gluBeginCurve



    if lib_gle:

        def test_gle(self):

            if self.gle:

                self.gle.gleGetJoinStyle



##if os.name == "posix" and sys.platform != "darwin":



##    # On platforms where the default shared library suffix is '.so',

##    # at least some libraries can be loaded as attributes of the cdll

##    # object, since ctypes now tries loading the lib again

##    # with '.so' appended of the first try fails.

##    #

##    # Won't work for libc, unfortunately.  OTOH, it isn't

##    # needed for libc since this is already mapped into the current

##    # process (?)

##    #

##    # On MAC OSX, it won't work either, because dlopen() needs a full path,

##    # and the default suffix is either none or '.dylib'.



##    class LoadLibs(unittest.TestCase):

##        def test_libm(self):

##            import math

##            libm = cdll.libm

##            sqrt = libm.sqrt

##            sqrt.argtypes = (c_double,)

##            sqrt.restype = c_double

##            self.failUnlessEqual(sqrt(2), math.sqrt(2))



if __name__ == "__main__":

    unittest.main()

