tests: Add symbol check tests

These use the symbol-check.py script from mesa, and should help to
ensure that glvnd doesn't start exposing/hiding new symbols. It's also
useful to double check that meson and autotools are doing the same
thing.
This commit is contained in:
Dylan Baker 2019-11-05 16:05:53 -08:00
parent ad2c870ad8
commit 3a7aed009c
21 changed files with 5389 additions and 4 deletions

View file

@ -1,6 +1,9 @@
SUBDIRS = src tests include
ACLOCAL_AMFLAGS = -I m4
EXTRA_DIST = autogen.sh README.md
EXTRA_DIST = \
autogen.sh \
README.md \
bin/symbols-check.py
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = libglvnd.pc

158
bin/symbols-check.py Normal file
View file

@ -0,0 +1,158 @@
#!/usr/bin/env python
# encoding=utf-8
# Copyright © 2018-2019 Intel Corporation
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and/or associated documentation files (the
# "Materials"), to deal in the Materials without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Materials, and to
# permit persons to whom the Materials are furnished to do so, subject to
# the following conditions:
# The above copyright notice and this permission notice shall be included
# unaltered in all copies or substantial portions of the Materials.
# Any additions, deletions, or changes to the original source files
# must be clearly indicated in accompanying documentation.
# THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
import argparse
import os
import platform
import subprocess
# This list contains symbols that _might_ be exported for some platforms
PLATFORM_SYMBOLS = [
'__bss_end__',
'__bss_start__',
'__bss_start',
'__end__',
'_bss_end__',
'_edata',
'_end',
'_fini',
'_init',
]
def get_symbols(nm, lib):
'''
List all the (non platform-specific) symbols exported by the library
'''
symbols = []
platform_name = platform.system()
output = subprocess.check_output([nm, '-gP', lib],
stderr=open(os.devnull, 'w')).decode("ascii")
for line in output.splitlines():
fields = line.split()
if len(fields) == 2 or fields[1] == 'U':
continue
symbol_name = fields[0]
if platform_name == 'Linux':
if symbol_name in PLATFORM_SYMBOLS:
continue
elif platform_name == 'Darwin':
assert symbol_name[0] == '_'
symbol_name = symbol_name[1:]
symbols.append(symbol_name)
return symbols
def main():
parser = argparse.ArgumentParser()
parser.add_argument('--symbols-file',
action='store',
required=True,
help='path to file containing symbols')
parser.add_argument('--lib',
action='store',
required=True,
help='path to library')
parser.add_argument('--nm',
action='store',
type=lambda s: s.split()[0], # autotools may pass "nm -B", but we just want nm
required=True,
help='path to binary (or name in $PATH)')
args = parser.parse_args()
try:
lib_symbols = get_symbols(args.nm, args.lib)
except:
# We can't run this test, but we haven't technically failed it either
# Return the GNU "skip" error code
exit(77)
mandatory_symbols = []
optional_symbols = []
with open(args.symbols_file) as symbols_file:
qualifier_optional = '(optional)'
for line in symbols_file.readlines():
# Strip comments
line = line.split('#')[0]
line = line.strip()
if not line:
continue
# Line format:
# [qualifier] symbol
qualifier = None
symbol = None
fields = line.split()
if len(fields) == 1:
symbol = fields[0]
elif len(fields) == 2:
qualifier = fields[0]
symbol = fields[1]
else:
print(args.symbols_file + ': invalid format: ' + line)
exit(1)
# The only supported qualifier is 'optional', which means the
# symbol doesn't have to be exported by the library
if qualifier and not qualifier == qualifier_optional:
print(args.symbols_file + ': invalid qualifier: ' + qualifier)
exit(1)
if qualifier == qualifier_optional:
optional_symbols.append(symbol)
else:
mandatory_symbols.append(symbol)
unknown_symbols = []
for symbol in lib_symbols:
if symbol in mandatory_symbols:
continue
if symbol in optional_symbols:
continue
if symbol[:2] == '_Z':
# Ignore random C++ symbols
#TODO: figure out if there's any way to avoid exporting them in the first place
continue
unknown_symbols.append(symbol)
missing_symbols = [
sym for sym in mandatory_symbols if sym not in lib_symbols
]
for symbol in unknown_symbols:
print(args.lib + ': unknown symbol exported: ' + symbol)
for symbol in missing_symbols:
print(args.lib + ': missing symbol: ' + symbol)
if unknown_symbols or missing_symbols:
exit(1)
exit(0)
if __name__ == '__main__':
main()

View file

@ -28,6 +28,7 @@ AC_PROG_MAKE_SET
AC_PROG_LIBTOOL
AC_PROG_MKDIR_P
PKG_PROG_PKG_CONFIG
AC_PROG_NM
# The tarball from "make dist" already contains all of the generated files. If
# we're building from that, then we won't need Python.

View file

@ -110,5 +110,16 @@ g_egldispatchstubs.h : $(GENERATE_DEPS)
$(AM_V_GEN)$(PYTHON) $(GENERATE_DISPATCH_SCRIPT) header $(GENERATE_LIST_FILES) > $@
endif
AM_TESTS_ENVIRONMENT = \
TOP_SRCDIR='$(top_srcdir)' \
TOP_BUILDDIR='$(top_builddir)' \
NM='$(NM)' \
PYTHON='$(PYTHON)'
TESTS = egl-symbol-check.sh
EXTRA_DIST = \
egl-symbol-check.sh \
egl.symbols
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = egl.pc

9
src/EGL/egl-symbol-check.sh Executable file
View file

@ -0,0 +1,9 @@
#!/bin/sh
test "${PYTHON}" = ":" && exit 77
test "x${NM}" = "x" && exit 77
exec "${PYTHON}" "${TOP_SRCDIR}/bin/symbols-check.py" \
--nm "${NM}" \
--lib "${TOP_BUILDDIR}/src/EGL/.libs/libEGL.so" \
--symbols-file "${TOP_SRCDIR}/src/EGL/egl.symbols"

44
src/EGL/egl.symbols Normal file
View file

@ -0,0 +1,44 @@
eglBindAPI
eglBindTexImage
eglChooseConfig
eglClientWaitSync
eglCopyBuffers
eglCreateContext
eglCreateImage
eglCreatePbufferFromClientBuffer
eglCreatePbufferSurface
eglCreatePixmapSurface
eglCreatePlatformPixmapSurface
eglCreatePlatformWindowSurface
eglCreateSync
eglCreateWindowSurface
eglDestroyContext
eglDestroyImage
eglDestroySurface
eglDestroySync
eglGetConfigAttrib
eglGetConfigs
eglGetCurrentContext
eglGetCurrentDisplay
eglGetCurrentSurface
eglGetDisplay
eglGetError
eglGetPlatformDisplay
eglGetProcAddress
eglGetSyncAttrib
eglInitialize
eglMakeCurrent
eglQueryAPI
eglQueryContext
eglQueryString
eglQuerySurface
eglReleaseTexImage
eglReleaseThread
eglSurfaceAttrib
eglSwapBuffers
eglSwapInterval
eglTerminate
eglWaitClient
eglWaitGL
eglWaitNative
eglWaitSync

View file

@ -54,6 +54,13 @@ g_libglglxwrapper.c : $(glapi_gen_libglglxstubs_deps)
$(AM_V_GEN)$(PYTHON) $(PYTHON_FLAGS) $(glapi_gen_libglglxstubs_script) $(glapi_gen_glx_xml) > $@
endif
AM_TESTS_ENVIRONMENT = \
TOP_SRCDIR='$(top_srcdir)' \
TOP_BUILDDIR='$(top_builddir)' \
NM='$(NM)' \
PYTHON='$(PYTHON)'
TESTS = gl-symbol-check.sh
libGL_la_CFLAGS = \
-I$(top_srcdir)/include
@ -73,3 +80,7 @@ libGL_la_LIBADD += @LIB_DL@
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = gl.pc
EXTRA_DIST = \
gl-symbol-check.sh \
gl.symbols

9
src/GL/gl-symbol-check.sh Executable file
View file

@ -0,0 +1,9 @@
#!/bin/sh
test "${PYTHON}" = ":" && exit 77
test "x${NM}" = "x" && exit 77
exec "${PYTHON}" "${TOP_SRCDIR}/bin/symbols-check.py" \
--nm "${NM}" \
--lib "${TOP_BUILDDIR}/src/GL/.libs/libGL.so" \
--symbols-file "${TOP_SRCDIR}/src/GL/gl.symbols"

3470
src/GL/gl.symbols Normal file

File diff suppressed because it is too large Load diff

View file

@ -27,7 +27,7 @@
lib_LTLIBRARIES = libGLESv1_CM.la
libGLESv1_CM_la_SOURCES =
libGLESv1_CM_la_SOURCES =
libGLESv1_CM_la_LDFLAGS = -shared \
$(LINKER_FLAG_NO_UNDEFINED) \
-version-info 3:0:2
@ -40,3 +40,14 @@ libGLESv1_CM_la_LIBADD = \
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = glesv1_cm.pc
AM_TESTS_ENVIRONMENT = \
TOP_SRCDIR='$(top_srcdir)' \
TOP_BUILDDIR='$(top_builddir)' \
NM='$(NM)' \
PYTHON='$(PYTHON)'
TESTS = glesv1-symbol-check.sh
EXTRA_DIST = \
glesv1-symbol-check.sh \
glesv1.symbols

View file

@ -0,0 +1,9 @@
#!/bin/sh
test "${PYTHON}" = ":" && exit 77
test "x${NM}" = "x" && exit 77
exec "${PYTHON}" "${TOP_SRCDIR}/bin/symbols-check.py" \
--nm "${NM}" \
--lib "${TOP_BUILDDIR}/src/GLESv1/.libs/libGLESv1_CM.so" \
--symbols-file "${TOP_SRCDIR}/src/GLESv1/glesv1.symbols"

145
src/GLESv1/glesv1.symbols Normal file
View file

@ -0,0 +1,145 @@
glActiveTexture
glAlphaFunc
glAlphaFuncx
glBindBuffer
glBindTexture
glBlendFunc
glBufferData
glBufferSubData
glClear
glClearColor
glClearColorx
glClearDepthf
glClearDepthx
glClearStencil
glClientActiveTexture
glClipPlanef
glClipPlanex
glColor4f
glColor4ub
glColor4x
glColorMask
glColorPointer
glCompressedTexImage2D
glCompressedTexSubImage2D
glCopyTexImage2D
glCopyTexSubImage2D
glCullFace
glDeleteBuffers
glDeleteTextures
glDepthFunc
glDepthMask
glDepthRangef
glDepthRangex
glDisable
glDisableClientState
glDrawArrays
glDrawElements
glEnable
glEnableClientState
glFinish
glFlush
glFogf
glFogfv
glFogx
glFogxv
glFrontFace
glFrustumf
glFrustumx
glGenBuffers
glGenTextures
glGetBooleanv
glGetBufferParameteriv
glGetClipPlanef
glGetClipPlanex
glGetError
glGetFixedv
glGetFloatv
glGetIntegerv
glGetLightfv
glGetLightxv
glGetMaterialfv
glGetMaterialxv
glGetPointerv
glGetString
glGetTexEnvfv
glGetTexEnviv
glGetTexEnvxv
glGetTexParameterfv
glGetTexParameteriv
glGetTexParameterxv
glHint
glIsBuffer
glIsEnabled
glIsTexture
glLightf
glLightfv
glLightModelf
glLightModelfv
glLightModelx
glLightModelxv
glLightx
glLightxv
glLineWidth
glLineWidthx
glLoadIdentity
glLoadMatrixf
glLoadMatrixx
glLogicOp
glMaterialf
glMaterialfv
glMaterialx
glMaterialxv
glMatrixMode
glMultiTexCoord4f
glMultiTexCoord4x
glMultMatrixf
glMultMatrixx
glNormal3f
glNormal3x
glNormalPointer
glOrthof
glOrthox
glPixelStorei
glPointParameterf
glPointParameterfv
glPointParameterx
glPointParameterxv
glPointSize
glPointSizePointerOES
glPointSizex
glPolygonOffset
glPolygonOffsetx
glPopMatrix
glPushMatrix
glReadPixels
glRotatef
glRotatex
glSampleCoverage
glSampleCoveragex
glScalef
glScalex
glScissor
glShadeModel
glStencilFunc
glStencilMask
glStencilOp
glTexCoordPointer
glTexEnvf
glTexEnvfv
glTexEnvi
glTexEnviv
glTexEnvx
glTexEnvxv
glTexImage2D
glTexParameterf
glTexParameterfv
glTexParameteri
glTexParameteriv
glTexParameterx
glTexParameterxv
glTexSubImage2D
glTranslatef
glTranslatex
glVertexPointer
glViewport

View file

@ -27,7 +27,7 @@
lib_LTLIBRARIES = libGLESv2.la
libGLESv2_la_SOURCES =
libGLESv2_la_SOURCES =
libGLESv2_la_LDFLAGS = -shared \
$(LINKER_FLAG_NO_UNDEFINED) \
-version-info 3:0:1
@ -40,3 +40,14 @@ libGLESv2_la_LIBADD = \
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = glesv2.pc
AM_TESTS_ENVIRONMENT = \
TOP_SRCDIR='$(top_srcdir)' \
TOP_BUILDDIR='$(top_builddir)' \
NM='$(NM)' \
PYTHON='$(PYTHON)'
TESTS = glesv2-symbol-check.sh
EXTRA_DIST = \
glesv2-symbol-check.sh \
glesv2.symbols

View file

@ -0,0 +1,9 @@
#!/bin/sh
test "${PYTHON}" = ":" && exit 77
test "x${NM}" = "x" && exit 77
exec "${PYTHON}" "${TOP_SRCDIR}/bin/symbols-check.py" \
--nm "${NM}" \
--lib "${TOP_BUILDDIR}/src/GLESv2/.libs/libGLESv2.so" \
--symbols-file "${TOP_SRCDIR}/src/GLESv2/glesv2.symbols"

358
src/GLESv2/glesv2.symbols Normal file
View file

@ -0,0 +1,358 @@
glActiveShaderProgram
glActiveTexture
glAttachShader
glBeginQuery
glBeginTransformFeedback
glBindAttribLocation
glBindBuffer
glBindBufferBase
glBindBufferRange
glBindFramebuffer
glBindImageTexture
glBindProgramPipeline
glBindRenderbuffer
glBindSampler
glBindTexture
glBindTransformFeedback
glBindVertexArray
glBindVertexBuffer
glBlendBarrier
glBlendColor
glBlendEquation
glBlendEquationi
glBlendEquationSeparate
glBlendEquationSeparatei
glBlendFunc
glBlendFunci
glBlendFuncSeparate
glBlendFuncSeparatei
glBlitFramebuffer
glBufferData
glBufferSubData
glCheckFramebufferStatus
glClear
glClearBufferfi
glClearBufferfv
glClearBufferiv
glClearBufferuiv
glClearColor
glClearDepthf
glClearStencil
glClientWaitSync
glColorMask
glColorMaski
glCompileShader
glCompressedTexImage2D
glCompressedTexImage3D
glCompressedTexSubImage2D
glCompressedTexSubImage3D
glCopyBufferSubData
glCopyImageSubData
glCopyTexImage2D
glCopyTexSubImage2D
glCopyTexSubImage3D
glCreateProgram
glCreateShader
glCreateShaderProgramv
glCullFace
glDebugMessageCallback
glDebugMessageControl
glDebugMessageInsert
glDeleteBuffers
glDeleteFramebuffers
glDeleteProgram
glDeleteProgramPipelines
glDeleteQueries
glDeleteRenderbuffers
glDeleteSamplers
glDeleteShader
glDeleteSync
glDeleteTextures
glDeleteTransformFeedbacks
glDeleteVertexArrays
glDepthFunc
glDepthMask
glDepthRangef
glDetachShader
glDisable
glDisablei
glDisableVertexAttribArray
glDispatchCompute
glDispatchComputeIndirect
glDrawArrays
glDrawArraysIndirect
glDrawArraysInstanced
glDrawBuffers
glDrawElements
glDrawElementsBaseVertex
glDrawElementsIndirect
glDrawElementsInstanced
glDrawElementsInstancedBaseVertex
glDrawRangeElements
glDrawRangeElementsBaseVertex
glEnable
glEnablei
glEnableVertexAttribArray
glEndQuery
glEndTransformFeedback
glFenceSync
glFinish
glFlush
glFlushMappedBufferRange
glFramebufferParameteri
glFramebufferRenderbuffer
glFramebufferTexture
glFramebufferTexture2D
glFramebufferTextureLayer
glFrontFace
glGenBuffers
glGenerateMipmap
glGenFramebuffers
glGenProgramPipelines
glGenQueries
glGenRenderbuffers
glGenSamplers
glGenTextures
glGenTransformFeedbacks
glGenVertexArrays
glGetActiveAttrib
glGetActiveUniform
glGetActiveUniformBlockiv
glGetActiveUniformBlockName
glGetActiveUniformsiv
glGetAttachedShaders
glGetAttribLocation
glGetBooleani_v
glGetBooleanv
glGetBufferParameteri64v
glGetBufferParameteriv
glGetBufferPointerv
glGetDebugMessageLog
glGetError
glGetFloatv
glGetFragDataLocation
glGetFramebufferAttachmentParameteriv
glGetFramebufferParameteriv
glGetGraphicsResetStatus
glGetInteger64i_v
glGetInteger64v
glGetIntegeri_v
glGetIntegerv
glGetInternalformativ
glGetMultisamplefv
glGetnUniformfv
glGetnUniformiv
glGetnUniformuiv
glGetObjectLabel
glGetObjectPtrLabel
glGetPointerv
glGetProgramBinary
glGetProgramInfoLog
glGetProgramInterfaceiv
glGetProgramiv
glGetProgramPipelineInfoLog
glGetProgramPipelineiv
glGetProgramResourceIndex
glGetProgramResourceiv
glGetProgramResourceLocation
glGetProgramResourceName
glGetQueryiv
glGetQueryObjectuiv
glGetRenderbufferParameteriv
glGetSamplerParameterfv
glGetSamplerParameterIiv
glGetSamplerParameterIuiv
glGetSamplerParameteriv
glGetShaderInfoLog
glGetShaderiv
glGetShaderPrecisionFormat
glGetShaderSource
glGetString
glGetStringi
glGetSynciv
glGetTexLevelParameterfv
glGetTexLevelParameteriv
glGetTexParameterfv
glGetTexParameterIiv
glGetTexParameterIuiv
glGetTexParameteriv
glGetTransformFeedbackVarying
glGetUniformBlockIndex
glGetUniformfv
glGetUniformIndices
glGetUniformiv
glGetUniformLocation
glGetUniformuiv
glGetVertexAttribfv
glGetVertexAttribIiv
glGetVertexAttribIuiv
glGetVertexAttribiv
glGetVertexAttribPointerv
glHint
glInvalidateFramebuffer
glInvalidateSubFramebuffer
glIsBuffer
glIsEnabled
glIsEnabledi
glIsFramebuffer
glIsProgram
glIsProgramPipeline
glIsQuery
glIsRenderbuffer
glIsSampler
glIsShader
glIsSync
glIsTexture
glIsTransformFeedback
glIsVertexArray
glLineWidth
glLinkProgram
glMapBufferRange
glMemoryBarrier
glMemoryBarrierByRegion
glMinSampleShading
glObjectLabel
glObjectPtrLabel
glPatchParameteri
glPauseTransformFeedback
glPixelStorei
glPolygonOffset
glPopDebugGroup
glPrimitiveBoundingBox
glProgramBinary
glProgramParameteri
glProgramUniform1f
glProgramUniform1fv
glProgramUniform1i
glProgramUniform1iv
glProgramUniform1ui
glProgramUniform1uiv
glProgramUniform2f
glProgramUniform2fv
glProgramUniform2i
glProgramUniform2iv
glProgramUniform2ui
glProgramUniform2uiv
glProgramUniform3f
glProgramUniform3fv
glProgramUniform3i
glProgramUniform3iv
glProgramUniform3ui
glProgramUniform3uiv
glProgramUniform4f
glProgramUniform4fv
glProgramUniform4i
glProgramUniform4iv
glProgramUniform4ui
glProgramUniform4uiv
glProgramUniformMatrix2fv
glProgramUniformMatrix2x3fv
glProgramUniformMatrix2x4fv
glProgramUniformMatrix3fv
glProgramUniformMatrix3x2fv
glProgramUniformMatrix3x4fv
glProgramUniformMatrix4fv
glProgramUniformMatrix4x2fv
glProgramUniformMatrix4x3fv
glPushDebugGroup
glReadBuffer
glReadnPixels
glReadPixels
glReleaseShaderCompiler
glRenderbufferStorage
glRenderbufferStorageMultisample
glResumeTransformFeedback
glSampleCoverage
glSampleMaski
glSamplerParameterf
glSamplerParameterfv
glSamplerParameteri
glSamplerParameterIiv
glSamplerParameterIuiv
glSamplerParameteriv
glScissor
glShaderBinary
glShaderSource
glStencilFunc
glStencilFuncSeparate
glStencilMask
glStencilMaskSeparate
glStencilOp
glStencilOpSeparate
glTexBuffer
glTexBufferRange
glTexImage2D
glTexImage3D
glTexParameterf
glTexParameterfv
glTexParameteri
glTexParameterIiv
glTexParameterIuiv
glTexParameteriv
glTexStorage2D
glTexStorage2DMultisample
glTexStorage3D
glTexStorage3DMultisample
glTexSubImage2D
glTexSubImage3D
glTransformFeedbackVaryings
glUniform1f
glUniform1fv
glUniform1i
glUniform1iv
glUniform1ui
glUniform1uiv
glUniform2f
glUniform2fv
glUniform2i
glUniform2iv
glUniform2ui
glUniform2uiv
glUniform3f
glUniform3fv
glUniform3i
glUniform3iv
glUniform3ui
glUniform3uiv
glUniform4f
glUniform4fv
glUniform4i
glUniform4iv
glUniform4ui
glUniform4uiv
glUniformBlockBinding
glUniformMatrix2fv
glUniformMatrix2x3fv
glUniformMatrix2x4fv
glUniformMatrix3fv
glUniformMatrix3x2fv
glUniformMatrix3x4fv
glUniformMatrix4fv
glUniformMatrix4x2fv
glUniformMatrix4x3fv
glUnmapBuffer
glUseProgram
glUseProgramStages
glValidateProgram
glValidateProgramPipeline
glVertexAttrib1f
glVertexAttrib1fv
glVertexAttrib2f
glVertexAttrib2fv
glVertexAttrib3f
glVertexAttrib3fv
glVertexAttrib4f
glVertexAttrib4fv
glVertexAttribBinding
glVertexAttribDivisor
glVertexAttribFormat
glVertexAttribI4i
glVertexAttribI4iv
glVertexAttribI4ui
glVertexAttribI4uiv
glVertexAttribIFormat
glVertexAttribIPointer
glVertexAttribPointer
glVertexBindingDivisor
glViewport
glWaitSync

View file

@ -83,3 +83,14 @@ libGLX_la_SOURCES = \
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = glx.pc
AM_TESTS_ENVIRONMENT = \
TOP_SRCDIR='$(top_srcdir)' \
TOP_BUILDDIR='$(top_builddir)' \
NM='$(NM)' \
PYTHON='$(PYTHON)'
TESTS = glx-symbol-check.sh
EXTRA_DIST += \
glx-symbol-check.sh \
glx.symbols

9
src/GLX/glx-symbol-check.sh Executable file
View file

@ -0,0 +1,9 @@
#!/bin/sh
test "${PYTHON}" = ":" && exit 77
test "x${NM}" = "x" && exit 77
exec "${PYTHON}" "${TOP_SRCDIR}/bin/symbols-check.py" \
--nm "${NM}" \
--lib "${TOP_BUILDDIR}/src/GLX/.libs/libGLX.so" \
--symbols-file "${TOP_SRCDIR}/src/GLX/glx.symbols"

42
src/GLX/glx.symbols Normal file
View file

@ -0,0 +1,42 @@
glXChooseFBConfig
glXChooseVisual
glXCopyContext
glXCreateContext
glXCreateGLXPixmap
glXCreateNewContext
glXCreatePbuffer
glXCreatePixmap
glXCreateWindow
glXDestroyContext
glXDestroyGLXPixmap
glXDestroyPbuffer
glXDestroyPixmap
glXDestroyWindow
glXGetClientString
glXGetConfig
glXGetCurrentContext
glXGetCurrentDisplay
glXGetCurrentDrawable
glXGetCurrentReadDrawable
glXGetFBConfigAttrib
glXGetFBConfigs
glXGetProcAddress
glXGetProcAddressARB
glXGetSelectedEvent
glXGetVisualFromFBConfig
__GLXGL_CORE_FUNCTIONS
__glXGLLoadGLXFunction
glXIsDirect
glXMakeContextCurrent
glXMakeCurrent
glXQueryContext
glXQueryDrawable
glXQueryExtension
glXQueryExtensionsString
glXQueryServerString
glXQueryVersion
glXSelectEvent
glXSwapBuffers
glXUseXFont
glXWaitGL
glXWaitX

View file

@ -36,7 +36,7 @@ libopengl_main_la_CFLAGS = \
lib_LTLIBRARIES = libOpenGL.la
libOpenGL_la_SOURCES =
libOpenGL_la_SOURCES =
libOpenGL_la_LDFLAGS = -shared \
$(LINKER_FLAG_NO_UNDEFINED) \
-version-info 0
@ -49,3 +49,14 @@ libOpenGL_la_LIBADD = \
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = opengl.pc
AM_TESTS_ENVIRONMENT = \
TOP_SRCDIR='$(top_srcdir)' \
TOP_BUILDDIR='$(top_builddir)' \
NM='$(NM)' \
PYTHON='$(PYTHON)'
TESTS = ogl-symbol-check.sh
EXTRA_DIST = \
ogl-symbol-check.sh \
ogl.symbols

9
src/OpenGL/ogl-symbol-check.sh Executable file
View file

@ -0,0 +1,9 @@
#!/bin/sh
test "${PYTHON}" = ":" && exit 77
test "x${NM}" = "x" && exit 77
exec "${PYTHON}" "${TOP_SRCDIR}/bin/symbols-check.py" \
--nm "${NM}" \
--lib "${TOP_BUILDDIR}/src/OpenGL/.libs/libOpenGL.so" \
--symbols-file "${TOP_SRCDIR}/src/OpenGL/ogl.symbols"

1044
src/OpenGL/ogl.symbols Normal file

File diff suppressed because it is too large Load diff