You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

358 lines
14KB

  1. ## Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
  2. ## Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
  3. ##
  4. ## This program is distributed under the terms and conditions of the GNU
  5. ## General Public License Version 2 as published by the Free Software
  6. ## Foundation or, at your option, any later version.
  7. include ../config/version
  8. #GLEW_SPLIT_SOURCE = yes
  9. SHELL = bash
  10. PYTHON ?= python
  11. ### Use git repository for GL extension specifications
  12. GIT_CLONE ?= git clone --branch glew https://github.com/nigels-com/glfixes.git
  13. ###
  14. ### Conventional desktop OpenGL settings
  15. ###
  16. REGISTRY = registry/gl/specs
  17. EXT = extensions/gl
  18. FILTER = filter_gl_ext.sh
  19. CORE = core/gl
  20. REGISTRY_URL = http://www.opengl.org/registry/
  21. ###
  22. ### Experimental OpenGL ES settings
  23. ###
  24. # REGISTRY = registry/gles
  25. # EXT = extensions/gles
  26. # FILTER = filter_gles_ext.sh
  27. # CORE = core/gles
  28. # REGISTRY_URL = http://www.khronos.org/registry/gles/
  29. BIN = bin
  30. SRC = src
  31. BLACKLIST = blacklist
  32. GL_CORE_SPEC := $(CORE)/GL_VERSION*
  33. GLX_CORE_SPEC := $(CORE)/GLX_VERSION*
  34. EGL_CORE_SPEC := $(CORE)/EGL_VERSION*
  35. ifeq (custom,$(MAKECMDGOALS))
  36. #GL_CORE_SPEC := $(shell grep GL_VERSION custom.txt | perl -pi -e "s=^=$(CORE)/=g;")
  37. GL_EXT_SPEC := $(shell grep "^[ \t]*GL_" custom.txt | grep -v GL_VERSION | perl -pi -e "s=^=$(EXT)/=g;")
  38. WGL_EXT_SPEC := $(shell grep "^[ \t]*WGL_" custom.txt | perl -pi -e "s=^=$(EXT)/=g;")
  39. #GLX_CORE_SPEC := $(shell grep GLX_VERSION custom.txt | perl -pi -e "s=^=$(CORE)/=g;")
  40. GLX_EXT_SPEC := $(shell grep "^[ \t]*GLX_" custom.txt | grep -v GLX_VERSION | perl -pi -e "s=^=$(EXT)/=g;")
  41. EGL_EXT_SPEC := $(shell grep "^[ \t]*EGL_" custom.txt | grep -v EGL_VERSION | perl -pi -e "s=^=$(EXT)/=g;")
  42. else
  43. GL_EXT_SPEC := $(EXT)/GL_*
  44. WGL_EXT_SPEC := $(EXT)/WGL_*
  45. GLX_EXT_SPEC := $(EXT)/GLX_*
  46. EGL_EXT_SPEC := $(EXT)/EGL_*
  47. endif
  48. PARSE_SPEC = parse_spec.pl
  49. SYSTEM = $(strip $(shell uname -s))
  50. TOP = ..
  51. I.DEST = $(TOP)/include/GL
  52. S.DEST = $(TOP)/src
  53. D.DEST = $(TOP)/doc
  54. B.DEST = $(TOP)/build
  55. I.TARGETS = \
  56. $(I.DEST)/glew.h \
  57. $(I.DEST)/wglew.h \
  58. $(I.DEST)/glxew.h \
  59. $(I.DEST)/eglew.h
  60. ifeq (yes,$(GLEW_SPLIT_SOURCE))
  61. S.TARGETS = \
  62. $(S.DEST)/glew_def.c \
  63. $(S.DEST)/glew_init.c \
  64. $(S.DEST)/glew_str.c \
  65. $(S.DEST)/glewinfo.c
  66. else
  67. S.TARGETS = \
  68. $(S.DEST)/glew.c \
  69. $(S.DEST)/glewinfo.c
  70. endif
  71. D.TARGETS = \
  72. $(D.DEST)/index.html \
  73. $(D.DEST)/install.html \
  74. $(D.DEST)/basic.html \
  75. $(D.DEST)/advanced.html \
  76. $(D.DEST)/build.html \
  77. $(D.DEST)/credits.html \
  78. $(D.DEST)/log.html \
  79. $(D.DEST)/glew.html \
  80. $(D.DEST)/wglew.html \
  81. $(D.DEST)/glxew.html
  82. B.TARGETS = \
  83. $(B.DEST)/glew.rc \
  84. $(B.DEST)/glewinfo.rc \
  85. $(B.DEST)/visualinfo.rc
  86. all custom: $(I.TARGETS) $(S.TARGETS) $(D.TARGETS) $(B.TARGETS)
  87. registry: $(REGISTRY)/.dummy
  88. ext: $(EXT)/.dummy
  89. $(REGISTRY)/.dummy:
  90. @echo "--------------------------------------------------------------------"
  91. @echo "Downloading registry"
  92. @echo "--------------------------------------------------------------------"
  93. $(GIT_CLONE) registry
  94. touch $@
  95. $(EXT)/.dummy: $(REGISTRY)/.dummy
  96. @echo "--------------------------------------------------------------------"
  97. @echo "Creating descriptors"
  98. @echo "--------------------------------------------------------------------"
  99. rm -rf $(EXT)
  100. $(BIN)/update_ext.sh $(EXT) $(REGISTRY) $(BLACKLIST)
  101. $(PYTHON) $(BIN)/parse_xml.py registry/xml/egl.xml --core core/gl --extensions extensions/gl
  102. $(BIN)/$(FILTER) $(EXT)
  103. ifeq ($(patsubst Darwin%,Darwin,$(SYSTEM)), Darwin)
  104. find $(CORE) -maxdepth 1 -type f | grep -v VERSION | grep -v "~" | \
  105. xargs -J % cp % $(EXT)
  106. else
  107. find $(CORE) -maxdepth 1 -type f | grep -v VERSION | grep -v "~" | \
  108. xargs cp --target-directory=$(EXT)
  109. endif
  110. touch $@
  111. $(I.DEST)/glew.h: $(EXT)/.dummy
  112. @echo "--------------------------------------------------------------------"
  113. @echo "Creating glew.h"
  114. @echo "--------------------------------------------------------------------"
  115. test -d $(I.DEST) || mkdir -p $(I.DEST)
  116. cp -f $(SRC)/glew_license.h $@
  117. cat $(SRC)/mesa_license.h >> $@
  118. cat $(SRC)/khronos_license.h >> $@
  119. cat $(SRC)/glew_head.h >> $@
  120. $(BIN)/make_header.pl GLAPIENTRY GL $(GL_CORE_SPEC) >> $@
  121. $(BIN)/make_header.pl GLAPIENTRY GL $(GL_EXT_SPEC) >> $@
  122. echo -e "/* ------------------------------------------------------------------------- */\n\n" >> $@
  123. $(BIN)/make_struct_fun.pl GLEW_FUN_EXPORT $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@
  124. $(BIN)/make_struct_var.pl GLEW_VAR_EXPORT $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@
  125. perl -e "s/GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2;/GLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_1;\nGLEW_VAR_EXPORT GLboolean __GLEW_VERSION_1_2;/" -pi $@
  126. cat $(SRC)/glew_tail.h >> $@
  127. perl -e "s/GLEW_VERSION_STRING/$(GLEW_VERSION)/g" -pi $@
  128. perl -e "s/GLEW_VERSION_MAJOR_STRING/$(GLEW_MAJOR)/g" -pi $@
  129. perl -e "s/GLEW_VERSION_MINOR_STRING/$(GLEW_MINOR)/g" -pi $@
  130. perl -e "s/GLEW_VERSION_MICRO_STRING/$(GLEW_MICRO)/g" -pi $@
  131. rm -f $@.bak
  132. $(I.DEST)/wglew.h: $(EXT)/.dummy
  133. @echo "--------------------------------------------------------------------"
  134. @echo "Creating wglew.h"
  135. @echo "--------------------------------------------------------------------"
  136. cp -f $(SRC)/glew_license.h $@
  137. cat $(SRC)/khronos_license.h >> $@
  138. cat $(SRC)/wglew_head.h >> $@
  139. $(BIN)/make_header.pl WINAPI WGL $(WGL_EXT_SPEC) >> $@
  140. cat $(SRC)/wglew_mid.h >> $@
  141. $(BIN)/make_struct_fun.pl WGLEW_FUN_EXPORT $(WGL_EXT_SPEC) >> $@
  142. $(BIN)/make_struct_var.pl WGLEW_VAR_EXPORT $(WGL_EXT_SPEC) >> $@
  143. cat $(SRC)/wglew_tail.h >> $@
  144. $(I.DEST)/glxew.h: $(EXT)/.dummy
  145. @echo "--------------------------------------------------------------------"
  146. @echo "Creating glxew.h"
  147. @echo "--------------------------------------------------------------------"
  148. cp -f $(SRC)/glew_license.h $@
  149. cat $(SRC)/mesa_license.h >> $@
  150. cat $(SRC)/khronos_license.h >> $@
  151. cat $(SRC)/glxew_head.h >> $@
  152. $(BIN)/make_header.pl "" GLX $(GLX_CORE_SPEC) >> $@
  153. $(BIN)/make_header.pl "" GLX $(GLX_EXT_SPEC) >> $@
  154. cat $(SRC)/glxew_mid.h >> $@
  155. $(BIN)/make_struct_fun.pl GLXEW_FUN_EXPORT $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@
  156. $(BIN)/make_struct_var.pl GLXEW_VAR_EXPORT $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@
  157. perl -e "s/GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_2;/GLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_0;\nGLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_1;\nGLXEW_VAR_EXPORT GLboolean __GLXEW_VERSION_1_2;/" -pi $@
  158. cat $(SRC)/glxew_tail.h >> $@
  159. $(I.DEST)/eglew.h: $(EXT)/.dummy
  160. @echo "--------------------------------------------------------------------"
  161. @echo "Creating eglew.h"
  162. @echo "--------------------------------------------------------------------"
  163. cp -f $(SRC)/glew_license.h $@
  164. cat $(SRC)/mesa_license.h >> $@
  165. cat $(SRC)/khronos_license.h >> $@
  166. cat $(SRC)/eglew_head.h >> $@
  167. $(BIN)/make_header.pl "" EGL $(EGL_CORE_SPEC) >> $@
  168. $(BIN)/make_header.pl "" EGL $(EGL_EXT_SPEC) >> $@
  169. cat $(SRC)/eglew_mid.h >> $@
  170. $(BIN)/make_struct_fun.pl EGLEW_FUN_EXPORT $(EGL_CORE_SPEC) $(EGL_EXT_SPEC) >> $@
  171. $(BIN)/make_struct_var.pl EGLEW_VAR_EXPORT $(EGL_CORE_SPEC) $(EGL_EXT_SPEC) >> $@
  172. cat $(SRC)/eglew_tail.h >> $@
  173. $(S.DEST)/glew.c: $(EXT)/.dummy
  174. @echo "--------------------------------------------------------------------"
  175. @echo "Creating glew.c"
  176. @echo "--------------------------------------------------------------------"
  177. cp -f $(SRC)/glew_license.h $@
  178. cat $(SRC)/glew_head.c >> $@
  179. $(BIN)/make_def_fun.pl GL $(GL_CORE_SPEC) >> $@
  180. $(BIN)/make_def_fun.pl GL $(GL_EXT_SPEC) >> $@
  181. echo -e "\nGLboolean __GLEW_VERSION_1_1 = GL_FALSE;" >> $@
  182. $(BIN)/make_def_var.pl GL $(GL_CORE_SPEC) >> $@
  183. $(BIN)/make_def_var.pl GL $(GL_EXT_SPEC) >> $@
  184. echo -e "\nstatic const char * _glewExtensionLookup[] = {" >> $@;
  185. $(BIN)/make_index.pl $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@
  186. echo -e " NULL\n};\n" >> $@;
  187. $(BIN)/make_enable_index.pl $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@
  188. $(BIN)/make_initd.pl GL $(GL_CORE_SPEC) >> $@
  189. $(BIN)/make_initd.pl GL $(GL_EXT_SPEC) >> $@
  190. echo -e "" >> $@;
  191. $(BIN)/make_init.pl GL $(GL_CORE_SPEC) >> $@
  192. $(BIN)/make_init.pl GL $(GL_EXT_SPEC) >> $@
  193. cat $(SRC)/glew_init_gl.c >> $@
  194. $(BIN)/make_list.pl $(GL_CORE_SPEC) | grep -v '\"GL_VERSION' >> $@
  195. $(BIN)/make_list.pl $(GL_EXT_SPEC) >> $@
  196. $(BIN)/make_list2.pl $(GL_EXT_SPEC) >> $@
  197. echo -e "\n return GLEW_OK;\n}\n" >> $@
  198. echo -e "\n#if defined(GLEW_OSMESA)" >> $@
  199. echo -e "\n#elif defined(GLEW_EGL)" >> $@
  200. $(BIN)/make_def_fun.pl EGL $(EGL_CORE_SPEC) >> $@
  201. $(BIN)/make_def_fun.pl EGL $(EGL_EXT_SPEC) >> $@
  202. $(BIN)/make_def_var.pl EGL $(EGL_CORE_SPEC) >> $@
  203. $(BIN)/make_def_var.pl EGL $(EGL_EXT_SPEC) >> $@
  204. $(BIN)/make_init.pl EGL $(EGL_CORE_SPEC) >> $@
  205. $(BIN)/make_init.pl EGL $(EGL_EXT_SPEC) >> $@
  206. cat $(SRC)/glew_init_egl.c >> $@
  207. $(BIN)/make_list.pl $(EGL_CORE_SPEC) >> $@
  208. $(BIN)/make_list.pl $(EGL_EXT_SPEC) >> $@
  209. echo -e "\n return GLEW_OK;\n}" >> $@
  210. echo -e "\n#elif defined(_WIN32)" >> $@
  211. $(BIN)/make_def_fun.pl WGL $(WGL_EXT_SPEC) >> $@
  212. $(BIN)/make_def_var.pl WGL $(WGL_EXT_SPEC) >> $@
  213. $(BIN)/make_init.pl WGL $(WGL_EXT_SPEC) >> $@
  214. cat $(SRC)/glew_init_wgl.c >> $@
  215. $(BIN)/make_list.pl $(WGL_EXT_SPEC) >> $@
  216. echo -e "\n return GLEW_OK;\n}" >> $@;
  217. echo -e "\n#elif !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX))" >> $@
  218. $(BIN)/make_def_fun.pl GLX $(GLX_CORE_SPEC) >> $@
  219. $(BIN)/make_def_fun.pl GLX $(GLX_EXT_SPEC) >> $@
  220. echo -e "\nGLboolean __GLXEW_VERSION_1_0 = GL_FALSE;" >> $@
  221. echo -e "GLboolean __GLXEW_VERSION_1_1 = GL_FALSE;" >> $@
  222. $(BIN)/make_def_var.pl GLX $(GLX_CORE_SPEC) >> $@
  223. $(BIN)/make_def_var.pl GLX $(GLX_EXT_SPEC) >> $@
  224. $(BIN)/make_init.pl GLX $(GLX_CORE_SPEC) >> $@
  225. $(BIN)/make_init.pl GLX $(GLX_EXT_SPEC) >> $@
  226. cat $(SRC)/glew_init_glx.c >> $@
  227. $(BIN)/make_list.pl $(CORE)/GLX_VERSION_1_3 | grep -v '\"GLX_VERSION' >> $@
  228. $(BIN)/make_list.pl $(GLX_EXT_SPEC) >> $@
  229. echo -e "\n return GLEW_OK;\n}" >> $@
  230. echo -e "\n#endif /* !defined(__ANDROID__) && !defined(__native_client__) && !defined(__HAIKU__) && (!defined(__APPLE__) || defined(GLEW_APPLE_GLX)) */\n" >> $@;
  231. cat $(SRC)/glew_init_tail.c >> $@
  232. cat $(SRC)/glew_str_head.c >> $@
  233. $(BIN)/make_str.pl $(GL_CORE_SPEC) $(GL_EXT_SPEC) >> $@
  234. cat $(SRC)/glew_str_wgl.c >> $@
  235. $(BIN)/make_str.pl $(WGL_EXT_SPEC) >> $@
  236. cat $(SRC)/glew_str_glx.c >> $@
  237. $(BIN)/make_str.pl $(GLX_CORE_SPEC) $(GLX_EXT_SPEC) >> $@
  238. cat $(SRC)/glew_str_egl.c >> $@
  239. $(BIN)/make_str.pl $(EGL_CORE_SPEC) $(EGL_EXT_SPEC) >> $@
  240. cat $(SRC)/glew_str_tail.c >> $@
  241. perl -e "s/GLEW_VERSION_STRING/$(GLEW_VERSION)/g" -pi $@
  242. perl -e "s/GLEW_VERSION_MAJOR_STRING/$(GLEW_MAJOR)/g" -pi $@
  243. perl -e "s/GLEW_VERSION_MINOR_STRING/$(GLEW_MINOR)/g" -pi $@
  244. perl -e "s/GLEW_VERSION_MICRO_STRING/$(GLEW_MICRO)/g" -pi $@
  245. perl -e "s/GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader\(\);/{ GLEW_ARB_vertex_shader = !_glewInit_GL_ARB_vertex_shader(); _glewInit_GL_ARB_vertex_program(); }/g" -pi $@
  246. perl -e "s/\(\(glColorSubTable = /((glBlendEquation = (PFNGLBLENDEQUATIONPROC)glewGetProcAddress((const GLubyte*)\"glBlendEquation\")) == NULL) || r;\n r = ((glColorSubTable = /g" -pi $@
  247. rm -f $@.bak
  248. $(S.DEST)/glewinfo.c: $(EXT)/.dummy
  249. @echo "--------------------------------------------------------------------"
  250. @echo "Creating glewinfo.c"
  251. @echo "--------------------------------------------------------------------"
  252. cp -f $(SRC)/glew_license.h $@
  253. cat $(SRC)/glewinfo_head.c >> $@
  254. $(BIN)/make_info.pl $(GL_CORE_SPEC) >> $@
  255. $(BIN)/make_info.pl $(GL_EXT_SPEC) >> $@
  256. echo -e "#if defined(GLEW_EGL)\n" >> $@
  257. $(BIN)/make_info.pl $(EGL_CORE_SPEC) >> $@
  258. $(BIN)/make_info.pl $(EGL_EXT_SPEC) >> $@
  259. echo -e "#elif _WIN32\n" >> $@
  260. $(BIN)/make_info.pl $(WGL_EXT_SPEC) >> $@
  261. echo -e "#else /* _UNIX */\n" >> $@
  262. $(BIN)/make_info.pl $(GLX_CORE_SPEC) >> $@
  263. $(BIN)/make_info.pl $(GLX_EXT_SPEC) >> $@
  264. echo -e "#endif /* _WIN32 */\n" >> $@
  265. cat $(SRC)/glewinfo_gl.c >> $@
  266. $(BIN)/make_info_list.pl $(GL_CORE_SPEC) >> $@
  267. $(BIN)/make_info_list.pl $(GL_EXT_SPEC) >> $@
  268. cat $(SRC)/glewinfo_wgl.c >> $@
  269. $(BIN)/make_info_list.pl $(WGL_EXT_SPEC) >> $@
  270. cat $(SRC)/glewinfo_glx.c >> $@
  271. $(BIN)/make_info_list.pl $(GLX_CORE_SPEC) >> $@
  272. $(BIN)/make_info_list.pl $(GLX_EXT_SPEC) >> $@
  273. cat $(SRC)/glewinfo_egl.c >> $@
  274. $(BIN)/make_info_list.pl $(EGL_CORE_SPEC) >> $@
  275. $(BIN)/make_info_list.pl $(EGL_EXT_SPEC) >> $@
  276. cat $(SRC)/glewinfo_tail.c >> $@
  277. perl -e 's/"glColorSubTable"/"glBlendEquation", glBlendEquation == NULL);\n glewInfoFunc("glColorSubTable"/g' -pi $@
  278. rm -f $@.bak
  279. # Update documentation
  280. $(D.DEST)/%.html: doc/%.html
  281. @echo "--------------------------------------------------------------------"
  282. @echo "Creating $(@F)"
  283. @echo "--------------------------------------------------------------------"
  284. cat $(SRC)/header.html $< $(SRC)/footer.html | \
  285. perl -pe 's#<a href="$(@F)">(.*)</a>#\1#' > $@
  286. $(D.DEST)/glew.html: $(EXT)/.dummy
  287. @echo "--------------------------------------------------------------------"
  288. @echo "Creating glew.html"
  289. @echo "--------------------------------------------------------------------"
  290. cp -f $(SRC)/header.html $@
  291. echo -e "<h2>Supported OpenGL Extensions</h2>\n" >> $@
  292. $(BIN)/make_html.pl $(GL_EXT_SPEC) >> $@
  293. cat $(SRC)/footer.html >> $@
  294. perl -i -pe 's#<a href="$(@F)">(.*)</a>#\1#' $@
  295. $(D.DEST)/wglew.html: $(EXT)/.dummy
  296. @echo "--------------------------------------------------------------------"
  297. @echo "Creating wglew.html"
  298. @echo "--------------------------------------------------------------------"
  299. cp -f $(SRC)/header.html $@
  300. echo -e "<h2>Supported WGL Extensions</h2>\n" >> $@
  301. $(BIN)/make_html.pl $(WGL_EXT_SPEC) >> $@
  302. cat $(SRC)/footer.html >> $@
  303. perl -i -pe 's#<a href="$(@F)">(.*)</a>#\1#' $@
  304. $(D.DEST)/glxew.html: $(EXT)/.dummy
  305. @echo "--------------------------------------------------------------------"
  306. @echo "Creating glxew.html"
  307. @echo "--------------------------------------------------------------------"
  308. cp -f $(SRC)/header.html $@
  309. echo -e "<h2>Supported GLX Extensions</h2>\n" >> $@
  310. $(BIN)/make_html.pl $(GLX_EXT_SPEC) >> $@
  311. cat $(SRC)/footer.html >> $@
  312. perl -i -pe 's#<a href="$(@F)">(.*)</a>#\1#' $@
  313. $(B.DEST)/%.rc: src/%.rc $(EXT)/.dummy
  314. perl -e "s/GLEW_MAJOR/$(GLEW_MAJOR)/g;s/GLEW_MINOR/$(GLEW_MINOR)/g;s/GLEW_MICRO/$(GLEW_MICRO)/g;" -p $< > $@
  315. clean:
  316. rm -rf $(I.TARGETS) $(S.TARGETS) $(D.TARGETS) $(B.TARGETS)
  317. clobber: clean
  318. rm -rf $(EXT)
  319. destroy: clobber
  320. rm -rf registry