PageRenderTime 44ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/Makefile

http://github.com/dmsh/ocaml-xlib
Makefile | 416 lines | 281 code | 89 blank | 46 comment | 11 complexity | 37a284adea85e9e2fc9b64abae4402c4 MD5 | raw file
  1. # This file is a build script for the OCaml-Xlib bindings.
  2. # Copyright (C) 2008, 2009 Florent Monnier <fmonnier@linux-nantes.org>
  3. #
  4. # This Makefile is free software: you can redistribute it and/or
  5. # modify it under the terms of the GNU Lesser General Public License
  6. # as published by the Free Software Foundation, either version 3
  7. # of the License, or (at your option) any later version.
  8. #
  9. # This Makefile is distributed in the hope that it will be useful,
  10. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. # GNU Lesser General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU Lesser General Public
  15. # License along with this Makefile. If not, see:
  16. # <http://www.gnu.org/licenses/>
  17. PREFIX := "$(shell ocamlc -where)/Xlib"
  18. SHARE_DOC_DIR := /usr/local/share/doc
  19. OCAMLOPT := ocamlopt.opt -g
  20. OCAMLC := ocamlc.opt -g
  21. OCAMLMKLIB := ocamlmklib
  22. all: cma opt
  23. cma: Xlib.cma keysym.cma keysym_match.cma
  24. opt: Xlib.cmxa keysym.cmxa keysym_match.cmxa
  25. x: cma opt
  26. GLX glx: GLX.cma GLX.cmxa
  27. GLX_P2T glx_p2t: GLX_P2T.cma GLX_P2T.cmxa
  28. Xt xt: Xt.cma Xt.cmxa
  29. alls everything: all opt xt glx glx_p2t
  30. .PHONY: all alls opt everything clean cleaner cleandoc clean-doc
  31. .PHONY: Xt xt GLX glx GLX_P2T glx_p2t
  32. .PHONY: dist snapshot
  33. .PHONY: install install_x install_glx install_glx_p2t install_xt install_all
  34. # {{{ mlcpp
  35. # Makes use of a minimal preprocessor for OCaml source files.
  36. # It is similar to cpp, but this replacement for cpp is because
  37. # cpp versions in different environments may have different
  38. # behaviour with unexpected reactions which will break OCaml code.
  39. MLPP=./mlcpp.exe
  40. $(MLPP): mlcpp.ml
  41. $(OCAMLOPT) str.cmxa $< -o $@
  42. clean-mlcpp: $(MLPP)
  43. rm -f $(MLPP)
  44. # }}}
  45. # Xlib
  46. wrap_xlib.o: wrap_xlib.c
  47. $(OCAMLC) -c $<
  48. dll_xlib_stubs.so lib_xlib_stubs.a: wrap_xlib.o
  49. $(OCAMLMKLIB) -o _xlib_stubs $< \
  50. -L/usr/X11R6/lib -lX11 \
  51. -L`$(OCAMLC) -where` -lbigarray
  52. Xlib.cmi: Xlib.ml $(MLPP)
  53. $(OCAMLC) -c -pp '$(MLPP) -C -D MLI=1' -intf $<
  54. Xlib.mli: Xlib.ml $(MLPP)
  55. $(MLPP) -C -D MLI=1 $< > $@
  56. Xlib.cmo: Xlib.ml Xlib.cmi $(MLPP)
  57. $(OCAMLC) -c -pp '$(MLPP) -C -D ML=1' $<
  58. Xlib.cma: Xlib.cmo dll_xlib_stubs.so
  59. $(OCAMLC) -a -o $@ $< -dllib -l_xlib_stubs \
  60. -ccopt -L/usr/X11R6/lib -cclib -lX11
  61. Xlib.cmx: Xlib.ml Xlib.cmi $(MLPP)
  62. $(OCAMLOPT) -c -pp '$(MLPP) -C -D ML=1' $<
  63. Xlib.cmxa Xlib.a: Xlib.cmx dll_xlib_stubs.so
  64. $(OCAMLOPT) -a -o $@ $< -cclib -l_xlib_stubs \
  65. -ccopt -L. -ccopt -L/usr/X11R6/lib -cclib -lX11 \
  66. -cclib -lbigarray
  67. Xlib.a: Xlib.cmxa
  68. XLIB_INSTALL_SOLIB := dll_xlib_stubs.so
  69. XLIB_INSTALL_FILES := lib_xlib_stubs.a \
  70. Xlib.cmi Xlib.a Xlib.cma Xlib.cmx Xlib.cmxa \
  71. Xlib.mli
  72. # KeySyms
  73. %.cmi: %.mli
  74. $(OCAMLC) $<
  75. keysym.mli: keysym.ml
  76. $(OCAMLC) -i $< > $@
  77. keysym.ml: keysym.h.ml keysymdef.h.ml $(MLPP)
  78. @echo "(* DO NOT EDIT THIS FILE *)" > $@
  79. $(MLPP) $< >> $@
  80. keysym.cma: keysym.ml keysym.cmi
  81. $(OCAMLC) -a -o $@ $<
  82. keysym.cmxa: keysym.ml
  83. $(OCAMLOPT) -a -o $@ $<
  84. keysym_match.mli: keysym_match.ml
  85. # -w u : disable warnings for unused (redundant) match cases
  86. $(OCAMLC) -i -w u $< > $@
  87. keysym_match.ml: keysym_match.h.ml keysymdef_match.h.ml $(MLPP)
  88. @echo "(* DO NOT EDIT THIS FILE *)" > $@
  89. $(MLPP) $< >> $@
  90. keysym_match.cma: keysym_match.ml keysym_match.cmi
  91. # -w u : disable warnings for unused (redundant) match cases
  92. $(OCAMLC) -a -w u -o $@ $<
  93. keysym_match.cmxa: keysym_match.ml
  94. # -w u : disable warnings for unused (redundant) match cases
  95. $(OCAMLOPT) -a -w -u -o $@ $<
  96. KEYSYM_INSTALL_FILES := keysym.cma keysym_match.cma \
  97. keysym.cmxa keysym_match.cmxa \
  98. keysym.cmi keysym_match.cmi \
  99. keysym.a keysym_match.a
  100. # GLX
  101. wrap_glx.o: wrap_glx.c wrap_glx.h wrap_xlib.h
  102. $(OCAMLC) -c $<
  103. # glx symbols seems to reside in libGL
  104. dll_glx_stubs.so lib_glx_stubs.a: wrap_glx.o
  105. $(OCAMLMKLIB) -o _glx_stubs $< \
  106. -L/usr/X11R6/lib -lGL
  107. GLX.cmi: GLX.mli Xlib.cmi
  108. $(OCAMLC) -c $<
  109. GLX.mli: GLX.ml Xlib.cmi
  110. $(OCAMLC) -i $< > $@
  111. #GLX.cmi: GLX.ml $(MLPP)
  112. # $(OCAMLC) -c -pp '$(MLPP) -C -D MLI=1' -intf $<
  113. #GLX.mli: GLX.ml $(MLPP)
  114. # $(MLPP) -C -D MLI=1 $< > $@
  115. GLX.cmo: GLX.ml GLX.cmi
  116. $(OCAMLC) -c $<
  117. GLX.cma: GLX.cmo dll_glx_stubs.so
  118. $(OCAMLC) -a -o $@ $< -dllib -l_glx_stubs \
  119. -ccopt -L/usr/X11R6/lib -cclib -lGL
  120. GLX.cmx: GLX.ml GLX.cmi
  121. $(OCAMLOPT) -c $<
  122. GLX.cmxa: GLX.cmx dll_glx_stubs.so
  123. $(OCAMLOPT) -a -o $@ $< -cclib -l_glx_stubs \
  124. -ccopt -L/usr/X11R6/lib -cclib -lGL
  125. GLX_INSTALL_SOLIB := dll_glx_stubs.so
  126. GLX_INSTALL_FILES := lib_glx_stubs.a \
  127. GLX.cmi GLX.a GLX.cma GLX.cmx GLX.cmxa
  128. clean_glx:
  129. rm -f \
  130. $(GLX_INSTALL_SOLIB) \
  131. $(GLX_INSTALL_FILES)
  132. # GLX_P2T
  133. wrap_glx_p2t.o: wrap_glx_p2t.c wrap_xlib.h wrap_glx.h
  134. $(OCAMLC) -c $<
  135. dll_glx_p2t_stubs.so lib_glx_p2t_stubs.a: wrap_glx_p2t.o
  136. $(OCAMLMKLIB) -o _glx_p2t_stubs $< \
  137. -L/usr/X11R6/lib -lGL
  138. GLX_P2T.mli: GLX_P2T.ml GLX.cmi
  139. $(OCAMLC) -i $< > $@
  140. GLX_P2T.cmi: GLX_P2T.mli GLX.cmi Xlib.cmi
  141. $(OCAMLC) -c $<
  142. GLX_P2T.cmo: GLX_P2T.ml GLX_P2T.cmi
  143. $(OCAMLC) -c $<
  144. GLX_P2T.cma: GLX_P2T.cmo dll_glx_p2t_stubs.so Xlib.cmi
  145. $(OCAMLC) -a -o $@ $< -dllib -l_glx_p2t_stubs \
  146. -ccopt -L/usr/X11R6/lib -cclib -lGL
  147. GLX_P2T.cmx: GLX_P2T.ml GLX_P2T.cmi
  148. $(OCAMLOPT) -c $<
  149. GLX_P2T.cmxa: GLX_P2T.cmx dll_glx_p2t_stubs.so
  150. $(OCAMLOPT) -a -o $@ $< -cclib -l_glx_p2t_stubs \
  151. -ccopt -L/usr/X11R6/lib -cclib -lGL
  152. GLX_P2T_INSTALL_SOLIB := dll_glx_p2t_stubs.so
  153. GLX_P2T_INSTALL_FILES := lib_glx_p2t_stubs.a \
  154. GLX_P2T.cma GLX_P2T.cmi \
  155. GLX_P2T.cmxa GLX_P2T.a GLX_P2T.cmx
  156. clean_glx_p2t:
  157. rm -f \
  158. $(GLX_P2T_INSTALL_SOLIB) \
  159. $(GLX_P2T_INSTALL_FILES)
  160. # Intrinsic
  161. wrap_xt.o: wrap_xt.c
  162. $(OCAMLC) -c $<
  163. dll_xt_stubs.so lib_xt_stubs.a: wrap_xt.o
  164. $(OCAMLMKLIB) -o _xt_stubs $< \
  165. -L/usr/X11R6/lib -lX11 -lXt -lXaw
  166. Xt.mli: Xt.ml Xlib.cmi
  167. $(OCAMLC) -i $< > $@
  168. Xt.cmi: Xt.mli
  169. $(OCAMLC) -c $<
  170. Xt.cmo: Xt.ml Xt.cmi
  171. $(OCAMLC) -c $<
  172. Xt.cma: Xt.cmo dll_xt_stubs.so
  173. $(OCAMLC) -a -o $@ $< -dllib -l_xt_stubs \
  174. -ccopt -L/usr/X11R6/lib -cclib -lX11 -cclib -lXt -cclib -lXaw
  175. Xt.cmx: Xt.ml Xt.cmi
  176. $(OCAMLOPT) -c $<
  177. Xt.cmxa: Xt.cmx dll_xt_stubs.so
  178. $(OCAMLOPT) -a -o $@ $< -cclib -l_xt_stubs \
  179. -ccopt -L/usr/X11R6/lib -cclib -lX11 -cclib -lXt -cclib -lXaw
  180. XT_INSTALL_SOLIB := dll_xt_stubs.so
  181. XT_INSTALL_FILES := lib_xt_stubs.a \
  182. Xt.cmi Xt.a Xt.cma Xt.cmx Xt.cmxa
  183. # Clean
  184. clean:
  185. rm -f *.[oa] *.so *.cm[ixoa] *.cmxa
  186. rm -f *.opt *.byte
  187. rm -f keysym.ml keysym_match.ml
  188. rm -f Xlib.mli \
  189. GLX.mli \
  190. Xt.mli \
  191. keysym.mli \
  192. keysym_match.mli
  193. rm -f test_img.ppm
  194. cleaner: clean cleandoc clean-mlcpp
  195. rm -f *~
  196. # DOC
  197. doc: Xlib.cmi GLX.cmi GLX_P2T.cmi Xlib.mli GLX.ml GLX_P2T.ml keysym.mli keysym_match.mli Xt.mli _style.css
  198. if [ ! -d doc ]; then mkdir doc ; fi
  199. # remove "-css-style _style.css" if it hurts you too much :)
  200. ocamldoc -html -colorize-code -css-style _style.css -d doc \
  201. Xlib.mli keysym.mli keysym_match.mli Xt.mli \
  202. GLX.ml GLX_P2T.ml
  203. cp _style.css doc/
  204. install-doc: doc
  205. mv -f doc $(SHARE_DOC_DIR)/OCaml-Xlib
  206. cleandoc clean-doc:
  207. if [ -d doc ]; then rm -f doc/*; rmdir doc; fi
  208. # Installs
  209. install: install_x
  210. install_all: install_x install_glx install_glx_p2t install_xt
  211. install_alls: install_all
  212. # Install X
  213. install_x: cma opt \
  214. $(XLIB_INSTALL_SOLIB) \
  215. $(XLIB_INSTALL_FILES) \
  216. $(KEYSYM_INSTALL_FILES)
  217. if [ ! -d $(PREFIX) ]; then install -d $(PREFIX) ; fi
  218. install -m 0755 \
  219. $(XLIB_INSTALL_SOLIB) \
  220. $(PREFIX)/
  221. install -m 0644 \
  222. $(XLIB_INSTALL_FILES) \
  223. $(KEYSYM_INSTALL_FILES) \
  224. $(PREFIX)/
  225. install -m 0644 META $(PREFIX)/
  226. # Install GLX
  227. install_glx: glx \
  228. $(GLX_INSTALL_SOLIB) \
  229. $(GLX_INSTALL_FILES)
  230. if [ ! -d $(PREFIX) ]; then install -d $(PREFIX) ; fi
  231. install -m 0755 \
  232. $(GLX_INSTALL_SOLIB) \
  233. $(PREFIX)/
  234. install -m 0644 \
  235. $(GLX_INSTALL_FILES) \
  236. $(PREFIX)/
  237. # Install GLX_P2T
  238. install_glx_p2t: glx_p2t \
  239. $(GLX_P2T_INSTALL_SOLIB) \
  240. $(GLX_P2T_INSTALL_FILES)
  241. if [ ! -d $(PREFIX) ]; then install -d $(PREFIX) ; fi
  242. install -m 0755 \
  243. $(GLX_P2T_INSTALL_SOLIB) \
  244. $(PREFIX)/
  245. install -m 0644 \
  246. $(GLX_P2T_INSTALL_FILES) \
  247. $(PREFIX)/
  248. # Install XT
  249. install_xt: xt \
  250. $(XT_INSTALL_SOLIB) \
  251. $(XT_INSTALL_FILES)
  252. if [ ! -d $(PREFIX) ]; then install -d $(PREFIX) ; fi
  253. install -m 0755 \
  254. $(XT_INSTALL_SOLIB) \
  255. $(PREFIX)/
  256. install -m 0644 \
  257. $(XT_INSTALL_FILES) \
  258. $(PREFIX)/
  259. uninstall:
  260. rm $(PREFIX)/*
  261. rmdir $(PREFIX)/
  262. # Dist
  263. #VERSION := 0.01-alpha
  264. VERSION := $(shell date +"%Y%m%d")
  265. DIST_DIR := "OCamlXlib-$(VERSION)"
  266. DIST_FILES := \
  267. Xlib.ml \
  268. keysym.h.ml \
  269. keysymdef.h.ml \
  270. keysym_match.h.ml \
  271. keysymdef_match.h.ml \
  272. keysym.README.txt \
  273. GLX.ml \
  274. GLX_P2T.ml \
  275. Xt.ml \
  276. Makefile \
  277. mlcpp.ml \
  278. _style.css \
  279. wrap_xlib.c \
  280. wrap_xlib.h \
  281. wrap_glx.c \
  282. wrap_glx.h \
  283. wrap_glx_p2t.c \
  284. wrap_xt.c \
  285. README.txt \
  286. META
  287. EXMPL_FILES := \
  288. wikipedia_example.ml \
  289. wikipedia_example.sh \
  290. double_buffer.ml \
  291. double_buffer.sh \
  292. glxdemo.ml \
  293. glxdemo.sh \
  294. intrinsic.ml \
  295. intrinsic.sh \
  296. xcolor.ml \
  297. xcolor.sh \
  298. xppm.ml \
  299. xppm.sh \
  300. error.ml \
  301. error.sh \
  302. pixmap_to_gl.ml \
  303. pixmap_to_gl.sh \
  304. simple_text.ml \
  305. simple_text.sh \
  306. texture_from_pixmap.c \
  307. texture_from_pixmap.ml \
  308. texture_from_pixmap.sh \
  309. install_glmlite_in_tmp.sh \
  310. test-utf16.ml
  311. COPYING.txt:
  312. wget -O $@ http://www.gnu.org/licenses/lgpl.txt
  313. snapshot:
  314. $(MAKE) dist -e VERSION=`date +"%Y%m%d"`
  315. pack dist: COPYING.txt $(DIST_FILES) $(EXMPL_FILES)
  316. if [ -d $(DIST_DIR)/ ]; then rm -rf $(DIST_DIR)/*; else mkdir $(DIST_DIR)/; fi
  317. for file in `echo $(DIST_FILES)`; do cp $$file $(DIST_DIR)/ ; done
  318. for file in `echo $(EXMPL_FILES)`; do cp $$file $(DIST_DIR)/ ; done
  319. sed -i -e "s/@VERSION@/$(VERSION)/" $(DIST_DIR)/META
  320. cp ./keysym.h ./keysymdef.h $(DIST_DIR)/
  321. mv COPYING.txt $(DIST_DIR)/
  322. tar cf $(DIST_DIR).tar $(DIST_DIR)/
  323. gzip -9 $(DIST_DIR).tar
  324. test -f $(DIST_DIR).tgz || rm -f $(DIST_DIR).tgz
  325. mv $(DIST_DIR).tar.gz $(DIST_DIR).tgz
  326. ls -lh $(DIST_DIR).tgz
  327. # vim: fdm=marker