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.assertEqual(sqrt(2), math.sqrt(2)) if __name__ == "__main__": unittest.main()