#!/bin/sh
set -eu

# Print defined gl.* functions not in GL ES 1.1 or in
# (FIXME, none of these should be part of the ABI)
# GL_EXT_multi_draw_arrays
# GL_OES_EGL_image

# or in extensions that are part of the ES 1.1 extension pack.
# (see http://www.khronos.org/registry/gles/specs/1.1/opengles_spec_1_1_extension_pack.pdf)

case "$(uname)" in
Darwin)
  LIB=${1-es1api/.libs/libGLESv1_CM.dylib}
  ;;
CYGWIN*)
  LIB=${1-es1api/.libs/cygGLESv1_CM-1.dll}
  ;;
*)
  LIB=${1-es1api/.libs/libGLESv1_CM.so.1}
  ;;
esac

if ! [ -f "$LIB" ]
then
  exit 1
fi

FUNCS=$(nm -D --defined-only $LIB | grep -o 'T gl.*' | cut -c 3- | while read func; do
( grep -q "^$func$" || echo $func )  <<EOF
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
glEGLImageTargetRenderbufferStorageOES
glEGLImageTargetTexture2DOES
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
glMultiDrawArraysEXT
glMultiDrawElementsEXT
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
EOF
done)

test ! -n "$FUNCS" || echo $FUNCS
test ! -n "$FUNCS"