Makefile 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. ###
  2. # Media build rules - Auto-generates media contents/indexes and *.h xml's
  3. #
  4. SHELL=/bin/bash
  5. MEDIA_OBJ_DIR=$(objtree)/Documentation/DocBook/
  6. MEDIA_SRC_DIR=$(srctree)/Documentation/DocBook/media
  7. MEDIA_TEMP = media-entities.tmpl \
  8. media-indices.tmpl \
  9. videodev2.h.xml \
  10. v4l2.xml \
  11. frontend.h.xml
  12. IMGFILES := $(addprefix $(MEDIA_OBJ_DIR)/media/, $(notdir $(shell ls $(MEDIA_SRC_DIR)/*/*.gif $(MEDIA_SRC_DIR)/*/*.png)))
  13. GENFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(MEDIA_TEMP))
  14. PHONY += cleanmediadocs mediaindexdocs
  15. cleanmediadocs:
  16. -@rm `find $(MEDIA_OBJ_DIR) -type l` $(GENFILES) $(IMGFILES)
  17. $(obj)/media_api.xml: $(GENFILES) FORCE
  18. #$(MEDIA_OBJ_DIR)/media_api.html: $(MEDIA_OBJ_DIR)/media_api.xml
  19. #$(MEDIA_OBJ_DIR)/media_api.pdf: $(MEDIA_OBJ_DIR)/media_api.xml
  20. #$(MEDIA_OBJ_DIR)/media_api.ps: $(MEDIA_OBJ_DIR)/media_api.xml
  21. V4L_SGMLS = \
  22. $(shell ls $(MEDIA_SRC_DIR)/v4l/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)') \
  23. capture.c.xml \
  24. keytable.c.xml \
  25. v4l2grab.c.xml
  26. DVB_SGMLS = \
  27. $(shell ls $(MEDIA_SRC_DIR)/dvb/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)')
  28. MEDIA_SGMLS = $(addprefix ./,$(V4L_SGMLS)) $(addprefix ./,$(DVB_SGMLS)) $(addprefix ./,$(MEDIA_TEMP))
  29. FUNCS = \
  30. close \
  31. ioctl \
  32. mmap \
  33. munmap \
  34. open \
  35. poll \
  36. read \
  37. select \
  38. write \
  39. IOCTLS = \
  40. $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/videodev2.h) \
  41. $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/media.h) \
  42. $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/v4l2-subdev.h) \
  43. VIDIOC_SUBDEV_G_FRAME_INTERVAL \
  44. VIDIOC_SUBDEV_S_FRAME_INTERVAL \
  45. VIDIOC_SUBDEV_ENUM_MBUS_CODE \
  46. VIDIOC_SUBDEV_ENUM_FRAME_SIZE \
  47. VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL \
  48. TYPES = \
  49. $(shell perl -ne 'print "$$1 " if /^typedef\s+[^\s]+\s+([^\s]+)\;/' $(srctree)/include/linux/videodev2.h)
  50. ENUMS = \
  51. $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/videodev2.h) \
  52. $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/media.h) \
  53. $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/v4l2-mediabus.h) \
  54. $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/v4l2-subdev.h)
  55. STRUCTS = \
  56. $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/videodev2.h) \
  57. $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/media.h) \
  58. $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/v4l2-subdev.h) \
  59. $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/v4l2-mediabus.h)
  60. ERRORS = \
  61. EACCES \
  62. EAGAIN \
  63. EBADF \
  64. EBUSY \
  65. EFAULT \
  66. EIO \
  67. EINTR \
  68. EINVAL \
  69. ENFILE \
  70. ENOMEM \
  71. ENOSPC \
  72. ENOTTY \
  73. ENXIO \
  74. EMFILE \
  75. EPERM \
  76. ERANGE \
  77. EPIPE \
  78. ESCAPE = \
  79. -e "s/&/\\&/g" \
  80. -e "s/</\\&lt;/g" \
  81. -e "s/>/\\&gt;/g"
  82. FILENAME = \
  83. -e s,"^[^\/]*/",, \
  84. -e s/"\\.xml"// \
  85. -e s/"\\.tmpl"// \
  86. -e s/\\\./-/g \
  87. -e s/"^func-"// \
  88. -e s/"^pixfmt-"// \
  89. -e s/"^vidioc-"//
  90. # Generate references to these structs in videodev2.h.xml.
  91. DOCUMENTED = \
  92. -e "s/\(enum *\)v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1<link linkend=\"\2\">v4l2_mpeg_cx2341x_video_\2<\/link>/g" \
  93. -e "s/\(\(enum\|struct\) *\)\(v4l2_[a-zA-Z0-9_]*\)/\1<link linkend=\"\3\">\3<\/link>/g" \
  94. -e "s/\(V4L2_PIX_FMT_[A-Z0-9_]\+\) /<link linkend=\"\1\">\1<\/link> /g" \
  95. -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
  96. -e "s/v4l2\-mpeg\-vbi\-ITV0/v4l2-mpeg-vbi-itv0-1/g"
  97. DVB_DOCUMENTED = \
  98. -e "s,\(define \)\([A-Z0-9_]\+\)\(\s\+_IO\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
  99. -e "s/\(linkend\=\"\)FE_SET_PROPERTY/\1FE_GET_PROPERTY/g"
  100. #
  101. # Media targets and dependencies
  102. #
  103. $(MEDIA_OBJ_DIR)/v4l2.xml:
  104. @$($(quiet)gen_xml)
  105. @(mkdir -p $(MEDIA_OBJ_DIR)/media)
  106. @(cp $(MEDIA_SRC_DIR)/dvb/*.png $(MEDIA_SRC_DIR)/v4l/*.gif $(MEDIA_OBJ_DIR)/media/)
  107. @(ln -sf $(MEDIA_SRC_DIR)/v4l/*xml $(MEDIA_OBJ_DIR)/)
  108. @(ln -sf $(MEDIA_SRC_DIR)/dvb/*xml $(MEDIA_OBJ_DIR)/)
  109. $(MEDIA_OBJ_DIR)/videodev2.h.xml: $(srctree)/include/linux/videodev2.h $(MEDIA_OBJ_DIR)/v4l2.xml
  110. @$($(quiet)gen_xml)
  111. @( \
  112. echo "<programlisting>") > $@
  113. @( \
  114. expand --tabs=8 < $< | \
  115. sed $(ESCAPE) $(DOCUMENTED) | \
  116. sed 's/i\.e\./&ie;/') >> $@
  117. @( \
  118. echo "</programlisting>") >> $@
  119. $(MEDIA_OBJ_DIR)/frontend.h.xml: $(srctree)/include/linux/dvb/frontend.h $(MEDIA_OBJ_DIR)/v4l2.xml
  120. @$($(quiet)gen_xml)
  121. @( \
  122. echo "<programlisting>") > $@
  123. @( \
  124. expand --tabs=8 < $< | \
  125. sed $(ESCAPE) $(DVB_DOCUMENTED) | \
  126. sed 's/i\.e\./&ie;/') >> $@
  127. @( \
  128. echo "</programlisting>") >> $@
  129. $(MEDIA_OBJ_DIR)/media-entities.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml
  130. @$($(quiet)gen_xml)
  131. @( \
  132. echo "<!-- Generated file! Do not edit. -->") >$@
  133. @( \
  134. echo -e "\n<!-- Functions -->") >>$@
  135. @( \
  136. for ident in $(FUNCS) ; do \
  137. entity=`echo $$ident | tr _ -` ; \
  138. echo "<!ENTITY func-$$entity \"<link" \
  139. "linkend='func-$$entity'><function>$$ident()</function></link>\">" \
  140. >>$@ ; \
  141. done)
  142. @( \
  143. echo -e "\n<!-- Ioctls -->") >>$@
  144. @( \
  145. for ident in $(IOCTLS) ; do \
  146. entity=`echo $$ident | tr _ -` ; \
  147. id=`grep "<refname>$$ident" $(MEDIA_OBJ_DIR)/vidioc-*.xml | sed -r s,"^.*/(.*).xml.*","\1",` ; \
  148. echo "<!ENTITY $$entity \"<link" \
  149. "linkend='$$id'><constant>$$ident</constant></link>\">" \
  150. >>$@ ; \
  151. done)
  152. @( \
  153. echo -e "\n<!-- Types -->") >>$@
  154. @( \
  155. for ident in $(TYPES) ; do \
  156. entity=`echo $$ident | tr _ -` ; \
  157. echo "<!ENTITY $$entity \"<link" \
  158. "linkend='$$entity'>$$ident</link>\">" >>$@ ; \
  159. done)
  160. @( \
  161. echo -e "\n<!-- Enums -->") >>$@
  162. @( \
  163. for ident in $(ENUMS) ; do \
  164. entity=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -` ; \
  165. echo "<!ENTITY $$entity \"enum&nbsp;<link" \
  166. "linkend='$$entity'>$$ident</link>\">" >>$@ ; \
  167. done)
  168. @( \
  169. echo -e "\n<!-- Structures -->") >>$@
  170. @( \
  171. for ident in $(STRUCTS) ; do \
  172. entity=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
  173. echo "<!ENTITY $$entity \"struct&nbsp;<link" \
  174. "linkend='$$entity'>$$ident</link>\">" >>$@ ; \
  175. done)
  176. @( \
  177. echo -e "\n<!-- Error Codes -->") >>$@
  178. @( \
  179. for ident in $(ERRORS) ; do \
  180. echo "<!ENTITY $$ident \"<errorcode>$$ident</errorcode>" \
  181. "error code\">" >>$@ ; \
  182. done)
  183. @( \
  184. echo -e "\n<!-- Subsections -->") >>$@
  185. @( \
  186. for file in $(MEDIA_SGMLS) ; do \
  187. entity=`echo "$$file" | sed $(FILENAME) -e s/"^([^-]*)"/sub\1/` ; \
  188. if ! echo "$$file" | \
  189. grep -q -E -e '^(func|vidioc|pixfmt)-' ; then \
  190. echo "<!ENTITY sub-$$entity SYSTEM \"$$file\">" >>$@ ; \
  191. fi ; \
  192. done)
  193. @( \
  194. echo -e "\n<!-- Function Reference -->") >>$@
  195. @( \
  196. for file in $(MEDIA_SGMLS) ; do \
  197. if echo "$$file" | \
  198. grep -q -E -e '(func|vidioc|pixfmt)-' ; then \
  199. entity=`echo "$$file" |sed $(FILENAME)` ; \
  200. echo "<!ENTITY $$entity SYSTEM \"$$file\">" >>$@ ; \
  201. fi ; \
  202. done)
  203. # Jade can auto-generate a list-of-tables, which includes all structs,
  204. # but we only want data types, all types, and sorted please.
  205. $(MEDIA_OBJ_DIR)/media-indices.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml
  206. @$($(quiet)gen_xml)
  207. @( \
  208. echo "<!-- Generated file! Do not edit. -->") >$@
  209. @( \
  210. echo -e "\n<index><title>List of Types</title>") >>$@
  211. @( \
  212. for ident in $(TYPES) ; do \
  213. id=`echo $$ident | tr _ -` ; \
  214. echo "<indexentry><primaryie><link" \
  215. "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
  216. done)
  217. @( \
  218. for ident in $(ENUMS) ; do \
  219. id=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -`; \
  220. echo "<indexentry><primaryie>enum&nbsp;<link" \
  221. "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
  222. done)
  223. @( \
  224. for ident in $(STRUCTS) ; do \
  225. id=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
  226. echo "<indexentry><primaryie>struct&nbsp;<link" \
  227. "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
  228. done)
  229. @( \
  230. echo "</index>") >>$@