[media] DocBook/media: add CEC documentation
[linux-2.6/btrfs-unstable.git] / Documentation / DocBook / media / Makefile
blobfdc138624800038d71c65e1819b580c6b6b7fd17
1 ###
2 # Media build rules - Auto-generates media contents/indexes and *.h xml's
5 SHELL=/bin/bash
7 MEDIA_OBJ_DIR=$(objtree)/Documentation/DocBook/
8 MEDIA_SRC_DIR=$(srctree)/Documentation/DocBook/media
10 MEDIA_TEMP = media-entities.tmpl \
11 media-indices.tmpl \
12 videodev2.h.xml \
13 v4l2.xml \
14 audio.h.xml \
15 ca.h.xml \
16 dmx.h.xml \
17 frontend.h.xml \
18 net.h.xml \
19 video.h.xml \
21 IMGFILES := $(patsubst %.b64,%, $(notdir $(shell ls $(MEDIA_SRC_DIR)/*.b64)))
22 OBJIMGFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(IMGFILES))
23 GENFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(MEDIA_TEMP))
25 PHONY += cleanmediadocs
27 cleanmediadocs:
28 -@rm -f `find $(MEDIA_OBJ_DIR) -type l` $(GENFILES) $(OBJIMGFILES) 2>/dev/null
30 $(obj)/media_api.xml: $(GENFILES) FORCE
32 #$(MEDIA_OBJ_DIR)/media_api.html: $(MEDIA_OBJ_DIR)/media_api.xml
33 #$(MEDIA_OBJ_DIR)/media_api.pdf: $(MEDIA_OBJ_DIR)/media_api.xml
34 #$(MEDIA_OBJ_DIR)/media_api.ps: $(MEDIA_OBJ_DIR)/media_api.xml
36 V4L_SGMLS = \
37 $(shell ls $(MEDIA_SRC_DIR)/v4l/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)') \
38 capture.c.xml \
39 keytable.c.xml \
40 v4l2grab.c.xml
42 DVB_SGMLS = \
43 $(shell ls $(MEDIA_SRC_DIR)/dvb/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)')
45 MEDIA_SGMLS = $(addprefix ./,$(V4L_SGMLS)) $(addprefix ./,$(DVB_SGMLS)) $(addprefix ./,$(MEDIA_TEMP))
47 FUNCS = \
48 close \
49 ioctl \
50 mmap \
51 munmap \
52 open \
53 poll \
54 read \
55 select \
56 write \
58 IOCTLS = \
59 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/videodev2.h) \
60 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/audio.h) \
61 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/ca.h) \
62 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/dmx.h) \
63 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/frontend.h) \
64 $(shell perl -ne 'print "$$1 " if /\#define\s+([A-Z][^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/net.h) \
65 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/dvb/video.h) \
66 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/media.h) \
67 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/cec.h) \
68 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/uapi/linux/v4l2-subdev.h) \
70 DEFINES = \
71 $(shell perl -ne 'print "$$1 " if /\#define\s+(DTV_[^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/frontend.h) \
73 TYPES = \
74 $(shell perl -ne 'print "$$1 " if /^typedef\s+.*\s+(\S+)\;/' $(srctree)/include/uapi/linux/videodev2.h) \
75 $(shell perl -ne 'print "$$1 " if /^typedef\s+.*\s+(\S+)\;/' $(srctree)/include/uapi/linux/dvb/frontend.h)
77 ENUMS = \
78 $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' \
79 $(srctree)/include/uapi/linux/videodev2.h \
80 $(srctree)/include/uapi/linux/dvb/audio.h \
81 $(srctree)/include/uapi/linux/dvb/ca.h \
82 $(srctree)/include/uapi/linux/dvb/dmx.h \
83 $(srctree)/include/uapi/linux/dvb/frontend.h \
84 $(srctree)/include/uapi/linux/dvb/net.h \
85 $(srctree)/include/uapi/linux/dvb/video.h \
86 $(srctree)/include/uapi/linux/media.h \
87 $(srctree)/include/uapi/linux/v4l2-mediabus.h \
88 $(srctree)/include/uapi/linux/v4l2-subdev.h)
90 ENUM_DEFS = \
91 $(shell perl -e 'open IN,"cat @ARGV| cpp -fpreprocessed |"; while (<IN>) { if ($$enum) {print "$$1\n" if (/\s*([A-Z]\S+)\b/); } $$enum = 0 if ($$enum && /^\}/); $$enum = 1 if(/^\s*enum\s/); }; close IN;' \
92 $(srctree)/include/uapi/linux/dvb/dmx.h \
93 $(srctree)/include/uapi/linux/dvb/frontend.h)
95 STRUCTS = \
96 $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/videodev2.h) \
97 $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s\{]+)\s*/)' $(srctree)/include/uapi/linux/dvb/audio.h) \
98 $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/ca.h) \
99 $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/dmx.h) \
100 $(shell perl -ne 'print "$$1 " if (!/dtv\_cmds\_h/ && /^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/frontend.h) \
101 $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/ && !/_old/)' $(srctree)/include/uapi/linux/dvb/net.h) \
102 $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/video.h) \
103 $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/media.h) \
104 $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/cec.h) \
105 $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-subdev.h) \
106 $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-mediabus.h)
108 ERRORS = \
109 E2BIG \
110 EACCES \
111 EAGAIN \
112 EBADF \
113 EBADFD \
114 EBADR \
115 EBADRQC \
116 EBUSY \
117 ECHILD \
118 ECONNRESET \
119 EDEADLK \
120 EDOM \
121 EEXIST \
122 EFAULT \
123 EFBIG \
124 EILSEQ \
125 EINIT \
126 EINPROGRESS \
127 EINTR \
128 EINVAL \
129 EIO \
130 EMFILE \
131 ENFILE \
132 ENOBUFS \
133 ENODATA \
134 ENODEV \
135 ENOENT \
136 ENOIOCTLCMD \
137 ENOMEM \
138 ENOSPC \
139 ENOSR \
140 ENOSYS \
141 ENOTSUP \
142 ENOTSUPP \
143 ENOTTY \
144 ENXIO \
145 EOPNOTSUPP \
146 EOVERFLOW \
147 EPERM \
148 EPIPE \
149 EPROTO \
150 ERANGE \
151 EREMOTE \
152 EREMOTEIO \
153 ERESTART \
154 ERESTARTSYS \
155 ESHUTDOWN \
156 ESPIPE \
157 ETIME \
158 ETIMEDOUT \
159 EUSERS \
160 EWOULDBLOCK \
161 EXDEV \
163 ESCAPE = \
164 -e "s/&/\\&amp;/g" \
165 -e "s/</\\&lt;/g" \
166 -e "s/>/\\&gt;/g"
168 FILENAME = \
169 -e s,"^[^\/]*/",, \
170 -e s/"\\.xml"// \
171 -e s/"\\.tmpl"// \
172 -e s/\\\./-/g \
173 -e s/"^func-"// \
174 -e s/"^pixfmt-"// \
175 -e s/"^vidioc-"//
177 # Generate references to these structs in videodev2.h.xml.
178 DOCUMENTED = \
179 -e "s/\(enum *\)v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1<link linkend=\"\2\">v4l2_mpeg_cx2341x_video_\2<\/link>/g" \
180 -e "s/\(\(enum\|struct\) *\)\(v4l2_[a-zA-Z0-9_]*\)/\1<link linkend=\"\3\">\3<\/link>/g" \
181 -e "s/\(V4L2_PIX_FMT_[A-Z0-9_]\+\)\(\s\+v4l2_fourcc\)/<link linkend=\"\1\">\1<\/link>\2/g" \
182 -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
183 -e "s/v4l2\-mpeg\-vbi\-ITV0/v4l2-mpeg-vbi-itv0-1/g"
185 DVB_DOCUMENTED = \
186 -e "s,\(struct\s\+\)\([a-z0-9_]\+\)\(\s\+{\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
187 -e "s,\(}\s\+\)\([a-z0-9_]\+_t\+\),\1\<link linkend=\"\2\">\2\<\/link\>,g" \
188 -e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+[0-9]\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
189 -e "s,<link\s\+linkend=\".*\">\(DTV_IOCTL_MAX_MSGS\|dtv_cmds_h\|__.*_old\)<\/link>,\1,g" \
190 -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
191 -e "s,\(audio-mixer\|audio-karaoke\|audio-status\|ca-slot-info\|ca-descr-info\|ca-caps\|ca-msg\|ca-descr\|ca-pid\|dmx-filter\|dmx-caps\|video-system\|video-highlight\|video-spu\|video-spu-palette\|video-navi-pack\)-t,\1,g" \
192 -e "s,DTV-ISDBT-LAYER[A-C],DTV-ISDBT-LAYER,g" \
193 -e "s,\(define\s\+\)\([A-Z0-9_]\+\)\(\s\+_IO\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
194 -e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
195 -e "s,<link\s\+linkend=\".*\">\(__.*_OLD\)<\/link>,\1,g" \
196 -e "s/\(linkend\=\"\)FE_SET_PROPERTY/\1FE_GET_PROPERTY/g" \
197 -e "s,<link\s\+linkend=\".*\">\(DTV_ISDBS_TS_ID_LEGACY\|DTV_MAX_COMMAND\|DTV_IOCTL_MAX_MSGS\)<\/link>,\1,g" \
200 # Media targets and dependencies
203 install_media_images = \
204 $(Q)if [ "x$(findstring media_api.xml,$(DOCBOOKS))" != "x" ]; then \
205 mkdir -p $(MEDIA_OBJ_DIR)/media_api; \
206 cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/*.svg $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api; \
209 $(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64
210 $(Q)base64 -d $< >$@
212 $(MEDIA_OBJ_DIR)/v4l2.xml: $(OBJIMGFILES)
213 @$($(quiet)gen_xml)
214 @(ln -sf `cd $(MEDIA_SRC_DIR) && /bin/pwd`/v4l/*xml $(MEDIA_OBJ_DIR)/)
215 @(ln -sf `cd $(MEDIA_SRC_DIR) && /bin/pwd`/dvb/*xml $(MEDIA_OBJ_DIR)/)
217 $(MEDIA_OBJ_DIR)/videodev2.h.xml: $(srctree)/include/uapi/linux/videodev2.h $(MEDIA_OBJ_DIR)/v4l2.xml
218 @$($(quiet)gen_xml)
219 @( \
220 echo "<programlisting>") > $@
221 @( \
222 expand --tabs=8 < $< | \
223 sed $(ESCAPE) $(DOCUMENTED) | \
224 sed 's/i\.e\./&ie;/') >> $@
225 @( \
226 echo "</programlisting>") >> $@
228 $(MEDIA_OBJ_DIR)/audio.h.xml: $(srctree)/include/uapi/linux/dvb/audio.h $(MEDIA_OBJ_DIR)/v4l2.xml
229 @$($(quiet)gen_xml)
230 @( \
231 echo "<programlisting>") > $@
232 @( \
233 expand --tabs=8 < $< | \
234 sed $(ESCAPE) $(DVB_DOCUMENTED) | \
235 sed 's/i\.e\./&ie;/') >> $@
236 @( \
237 echo "</programlisting>") >> $@
239 $(MEDIA_OBJ_DIR)/ca.h.xml: $(srctree)/include/uapi/linux/dvb/ca.h $(MEDIA_OBJ_DIR)/v4l2.xml
240 @$($(quiet)gen_xml)
241 @( \
242 echo "<programlisting>") > $@
243 @( \
244 expand --tabs=8 < $< | \
245 sed $(ESCAPE) $(DVB_DOCUMENTED) | \
246 sed 's/i\.e\./&ie;/') >> $@
247 @( \
248 echo "</programlisting>") >> $@
250 $(MEDIA_OBJ_DIR)/dmx.h.xml: $(srctree)/include/uapi/linux/dvb/dmx.h $(MEDIA_OBJ_DIR)/v4l2.xml
251 @$($(quiet)gen_xml)
252 @( \
253 echo "<programlisting>") > $@
254 @( \
255 for ident in $(ENUM_DEFS) ; do \
256 entity=`echo $$ident | tr _ -` ; \
257 r="$$r s/([^\w\-])$$ident([^\w\-])/\1\&$$entity\;\2/g;";\
258 done; \
259 expand --tabs=8 < $< | \
260 sed $(ESCAPE) $(DVB_DOCUMENTED) | \
261 sed 's/i\.e\./&ie;/' | \
262 perl -ne "$$r print $$_;") >> $@
263 @( \
264 echo "</programlisting>") >> $@
266 $(MEDIA_OBJ_DIR)/frontend.h.xml: $(srctree)/include/uapi/linux/dvb/frontend.h $(MEDIA_OBJ_DIR)/v4l2.xml
267 @$($(quiet)gen_xml)
268 @( \
269 echo "<programlisting>") > $@
270 @( \
271 for ident in $(ENUM_DEFS) ; do \
272 entity=`echo $$ident | tr _ -` ; \
273 r="$$r s/([^\w\-])$$ident([^\w\-])/\1\&$$entity\;\2/g;";\
274 done; \
275 expand --tabs=8 < $< | \
276 sed $(ESCAPE) $(DVB_DOCUMENTED) | \
277 sed 's/i\.e\./&ie;/' | \
278 perl -ne "$$r print $$_;") >> $@
279 @( \
280 echo "</programlisting>") >> $@
282 $(MEDIA_OBJ_DIR)/net.h.xml: $(srctree)/include/uapi/linux/dvb/net.h $(MEDIA_OBJ_DIR)/v4l2.xml
283 @$($(quiet)gen_xml)
284 @( \
285 echo "<programlisting>") > $@
286 @( \
287 expand --tabs=8 < $< | \
288 sed $(ESCAPE) $(DVB_DOCUMENTED) | \
289 sed 's/i\.e\./&ie;/') >> $@
290 @( \
291 echo "</programlisting>") >> $@
293 $(MEDIA_OBJ_DIR)/video.h.xml: $(srctree)/include/uapi/linux/dvb/video.h $(MEDIA_OBJ_DIR)/v4l2.xml
294 @$($(quiet)gen_xml)
295 @( \
296 echo "<programlisting>") > $@
297 @( \
298 expand --tabs=8 < $< | \
299 sed $(ESCAPE) $(DVB_DOCUMENTED) | \
300 sed 's/i\.e\./&ie;/') >> $@
301 @( \
302 echo "</programlisting>") >> $@
304 $(MEDIA_OBJ_DIR)/media-entities.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml
305 @$($(quiet)gen_xml)
306 @( \
307 echo "<!-- Generated file! Do not edit. -->") >$@
308 @( \
309 echo -e "\n<!-- Functions -->") >>$@
310 @( \
311 for ident in $(FUNCS) ; do \
312 entity=`echo $$ident | tr _ -` ; \
313 echo "<!ENTITY func-$$entity \"<link" \
314 "linkend='func-$$entity'><function>$$ident()</function></link>\">" \
315 >>$@ ; \
316 done)
317 @( \
318 echo -e "\n<!-- Ioctls -->") >>$@
319 @( \
320 for ident in `echo $(IOCTLS) | sed -e "s,VIDIOC_RESERVED,,"`; do\
321 entity=`echo $$ident | tr _ -` ; \
322 id=`grep -e "<refname>$$ident" -e "<section id=\"$$ident\"" $$(find $(MEDIA_SRC_DIR) -name *.xml -type f)| sed -r s,"^.*/(.*).xml.*","\1",` ; \
323 if [ "$$id" != "" ]; then echo "<!ENTITY $$entity \"<link" \
324 "linkend='$$id'><constant>$$ident</constant></link>\">" \
325 >>$@ ; else \
326 echo "Warning: undocumented ioctl: $$ident. Please document it at the media DocBook!" >&2; \
327 fi; \
328 done)
329 @( \
330 echo -e "\n<!-- Defines -->") >>$@
331 @( \
332 for ident in $(DEFINES) ; do \
333 entity=`echo $$ident | tr _ -` ; \
334 echo "<!ENTITY $$entity \"<link" \
335 "linkend='$$entity'><constant>$$ident</constant></link>\">" \
336 >>$@ ; \
337 done)
338 @( \
339 echo -e "\n<!-- Types -->") >>$@
340 @( \
341 for ident in $(TYPES) ; do \
342 entity=`echo $$ident | tr _ -` ; \
343 echo "<!ENTITY $$entity \"<link" \
344 "linkend='$$entity'>$$ident</link>\">" >>$@ ; \
345 done)
346 @( \
347 echo -e "\n<!-- Enums -->") >>$@
348 @( \
349 for ident in $(ENUMS) ; do \
350 entity=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -` ; \
351 echo "<!ENTITY $$entity \"enum&nbsp;<link" \
352 "linkend='$$entity'>$$ident</link>\">" >>$@ ; \
353 done)
354 @( \
355 echo -e "\n<!-- Enum definitions -->") >>$@
356 @( \
357 for ident in $(ENUM_DEFS) ; do \
358 entity=`echo $$ident | tr _ -` ; \
359 echo "<!ENTITY $$entity \"<link" \
360 "linkend='$$entity'><constant>$$ident</constant></link>\">" \
361 >>$@ ; \
362 done)
363 @( \
364 echo -e "\n<!-- Structures -->") >>$@
365 @( \
366 for ident in $(STRUCTS) ; do \
367 entity=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
368 echo "<!ENTITY $$entity \"struct&nbsp;<link" \
369 "linkend='$$entity'>$$ident</link>\">" >>$@ ; \
370 done)
371 @( \
372 echo -e "\n<!-- Error Codes -->") >>$@
373 @( \
374 for ident in $(ERRORS) ; do \
375 echo "<!ENTITY $$ident \"<errorcode>$$ident</errorcode>" \
376 "error code\">" >>$@ ; \
377 done)
378 @( \
379 echo -e "\n<!-- Subsections -->") >>$@
380 @( \
381 for file in $(MEDIA_SGMLS) ; do \
382 entity=`echo "$$file" | sed $(FILENAME) -e s/"^([^-]*)"/sub\1/` ; \
383 if ! echo "$$file" | \
384 grep -q -E -e '^(func|vidioc|pixfmt)-' ; then \
385 echo "<!ENTITY sub-$$entity SYSTEM \"$$file\">" >>$@ ; \
386 fi ; \
387 done)
388 @( \
389 echo -e "\n<!-- Function Reference -->") >>$@
390 @( \
391 for file in $(MEDIA_SGMLS) ; do \
392 if echo "$$file" | \
393 grep -q -E -e '(func|vidioc|pixfmt)-' ; then \
394 entity=`echo "$$file" |sed $(FILENAME)` ; \
395 echo "<!ENTITY $$entity SYSTEM \"$$file\">" >>$@ ; \
396 fi ; \
397 done)
399 # Jade can auto-generate a list-of-tables, which includes all structs,
400 # but we only want data types, all types, and sorted please.
401 $(MEDIA_OBJ_DIR)/media-indices.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml
402 @$($(quiet)gen_xml)
403 @( \
404 echo "<!-- Generated file! Do not edit. -->") >$@
405 @( \
406 echo -e "\n<index><title>List of Types</title>") >>$@
407 @( \
408 for ident in $(TYPES) ; do \
409 id=`echo $$ident | tr _ -` ; \
410 echo "<indexentry><primaryie><link" \
411 "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
412 done)
413 @( \
414 for ident in $(ENUMS) ; do \
415 id=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -`; \
416 echo "<indexentry><primaryie>enum&nbsp;<link" \
417 "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
418 done)
419 @( \
420 for ident in $(STRUCTS) ; do \
421 id=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
422 echo "<indexentry><primaryie>struct&nbsp;<link" \
423 "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
424 done)
425 @( \
426 echo "</index>") >>$@