Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[linux-3.10.git] / Documentation / DocBook / media / Makefile
1 ###
2 # Media build rules - Auto-generates media contents/indexes and *.h xml's
3 #
4
5 SHELL=/bin/bash
6
7 MEDIA_OBJ_DIR=$(objtree)/Documentation/DocBook/
8 MEDIA_SRC_DIR=$(srctree)/Documentation/DocBook/media
9
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 \
20
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))
24
25 PHONY += cleanmediadocs
26
27 cleanmediadocs:
28         -@rm `find $(MEDIA_OBJ_DIR) -type l` $(GENFILES) $(OBJIMGFILES) 2>/dev/null
29
30 $(obj)/media_api.xml: $(GENFILES) FORCE
31
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
35
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
41
42 DVB_SGMLS = \
43         $(shell ls $(MEDIA_SRC_DIR)/dvb/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)')
44
45 MEDIA_SGMLS =  $(addprefix ./,$(V4L_SGMLS)) $(addprefix ./,$(DVB_SGMLS)) $(addprefix ./,$(MEDIA_TEMP))
46
47 FUNCS = \
48         close \
49         ioctl \
50         mmap \
51         munmap \
52         open \
53         poll \
54         read \
55         select \
56         write \
57
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/uapi/linux/v4l2-subdev.h) \
68         VIDIOC_SUBDEV_G_FRAME_INTERVAL \
69         VIDIOC_SUBDEV_S_FRAME_INTERVAL \
70         VIDIOC_SUBDEV_ENUM_MBUS_CODE \
71         VIDIOC_SUBDEV_ENUM_FRAME_SIZE \
72         VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL \
73         VIDIOC_SUBDEV_G_SELECTION \
74         VIDIOC_SUBDEV_S_SELECTION \
75
76 TYPES = \
77         $(shell perl -ne 'print "$$1 " if /^typedef\s+[^\s]+\s+([^\s]+)\;/' $(srctree)/include/uapi/linux/videodev2.h) \
78         $(shell perl -ne 'print "$$1 " if /^}\s+([a-z0-9_]+_t)/' $(srctree)/include/uapi/linux/dvb/frontend.h)
79
80 ENUMS = \
81         $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/videodev2.h) \
82         $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/audio.h) \
83         $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/ca.h) \
84         $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/dmx.h) \
85         $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/frontend.h) \
86         $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/net.h) \
87         $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/video.h) \
88         $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/media.h) \
89         $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-mediabus.h) \
90         $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-subdev.h)
91
92 STRUCTS = \
93         $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/videodev2.h) \
94         $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s\{]+)\s*/)' $(srctree)/include/uapi/linux/dvb/audio.h) \
95         $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/ca.h) \
96         $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/dmx.h) \
97         $(shell perl -ne 'print "$$1 " if (!/dtv\_cmds\_h/ && /^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/frontend.h) \
98         $(shell perl -ne 'print "$$1 " if (/^struct\s+([A-Z][^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/net.h) \
99         $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/video.h) \
100         $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/media.h) \
101         $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-subdev.h) \
102         $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-mediabus.h)
103
104 ERRORS = \
105         E2BIG \
106         EACCES \
107         EAGAIN \
108         EBADF \
109         EBADFD \
110         EBADR \
111         EBADRQC \
112         EBUSY \
113         ECHILD \
114         ECONNRESET \
115         EDEADLK \
116         EDOM \
117         EEXIST \
118         EFAULT \
119         EFBIG \
120         EILSEQ \
121         EINIT \
122         EINPROGRESS \
123         EINTR \
124         EINVAL \
125         EIO \
126         EMFILE \
127         ENFILE \
128         ENOBUFS \
129         ENODATA \
130         ENODEV \
131         ENOENT \
132         ENOIOCTLCMD \
133         ENOMEM \
134         ENOSPC \
135         ENOSR \
136         ENOSYS \
137         ENOTSUP \
138         ENOTSUPP \
139         ENOTTY \
140         ENXIO \
141         EOPNOTSUPP \
142         EOVERFLOW \
143         EPERM \
144         EPIPE \
145         EPROTO \
146         ERANGE \
147         EREMOTE \
148         EREMOTEIO \
149         ERESTART \
150         ERESTARTSYS \
151         ESHUTDOWN \
152         ESPIPE \
153         ETIME \
154         ETIMEDOUT \
155         EUSERS \
156         EWOULDBLOCK \
157         EXDEV \
158
159 ESCAPE = \
160         -e "s/&/\\&/g" \
161         -e "s/</\\&lt;/g" \
162         -e "s/>/\\&gt;/g"
163
164 FILENAME = \
165         -e s,"^[^\/]*/",, \
166         -e s/"\\.xml"// \
167         -e s/"\\.tmpl"// \
168         -e s/\\\./-/g \
169         -e s/"^func-"// \
170         -e s/"^pixfmt-"// \
171         -e s/"^vidioc-"//
172
173 # Generate references to these structs in videodev2.h.xml.
174 DOCUMENTED = \
175         -e "s/\(enum *\)v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1<link linkend=\"\2\">v4l2_mpeg_cx2341x_video_\2<\/link>/g" \
176         -e "s/\(\(enum\|struct\) *\)\(v4l2_[a-zA-Z0-9_]*\)/\1<link linkend=\"\3\">\3<\/link>/g" \
177         -e "s/\(V4L2_PIX_FMT_[A-Z0-9_]\+\) /<link linkend=\"\1\">\1<\/link> /g" \
178         -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
179         -e "s/v4l2\-mpeg\-vbi\-ITV0/v4l2-mpeg-vbi-itv0-1/g"
180
181 DVB_DOCUMENTED = \
182         -e "s/\(linkend\=\"\)FE_SET_PROPERTY/\1FE_GET_PROPERTY/g" \
183         -e "s,\(struct\s\+\)\([a-z0-9_]\+\)\(\s\+{\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
184         -e "s,\(}\s\+\)\([a-z0-9_]\+_t\+\),\1\<link linkend=\"\2\">\2\<\/link\>,g" \
185         -e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+[0-9]\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
186         -e "s,<link\s\+linkend=\".*\">\(DTV_IOCTL_MAX_MSGS\|dtv_cmds_h\|__.*_old\)<\/link>,\1,g" \
187         -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
188         -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" \
189         -e "s,DTV-ISDBT-LAYER[A-C],DTV-ISDBT-LAYER,g" \
190         -e "s,\(define\s\+\)\([A-Z0-9_]\+\)\(\s\+_IO\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
191         -e "s,<link\s\+linkend=\".*\">\(__.*_OLD\)<\/link>,\1,g" \
192
193 #
194 # Media targets and dependencies
195 #
196
197 install_media_images = \
198         $(Q)cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api
199
200 $(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64
201         $(Q)base64 -d $< >$@
202
203 $(MEDIA_OBJ_DIR)/v4l2.xml: $(OBJIMGFILES)
204         @$($(quiet)gen_xml)
205         @(ln -sf $(MEDIA_SRC_DIR)/v4l/*xml $(MEDIA_OBJ_DIR)/)
206         @(ln -sf $(MEDIA_SRC_DIR)/dvb/*xml $(MEDIA_OBJ_DIR)/)
207
208 $(MEDIA_OBJ_DIR)/videodev2.h.xml: $(srctree)/include/uapi/linux/videodev2.h $(MEDIA_OBJ_DIR)/v4l2.xml
209         @$($(quiet)gen_xml)
210         @(                                      \
211         echo "<programlisting>") > $@
212         @(                                      \
213         expand --tabs=8 < $< |                  \
214           sed $(ESCAPE) $(DOCUMENTED) |         \
215           sed 's/i\.e\./&ie;/') >> $@
216         @(                                      \
217         echo "</programlisting>") >> $@
218
219 $(MEDIA_OBJ_DIR)/audio.h.xml: $(srctree)/include/uapi/linux/dvb/audio.h $(MEDIA_OBJ_DIR)/v4l2.xml
220         @$($(quiet)gen_xml)
221         @(                                      \
222         echo "<programlisting>") > $@
223         @(                                      \
224         expand --tabs=8 < $< |                  \
225           sed $(ESCAPE) $(DVB_DOCUMENTED) |     \
226           sed 's/i\.e\./&ie;/') >> $@
227         @(                                      \
228         echo "</programlisting>") >> $@
229
230 $(MEDIA_OBJ_DIR)/ca.h.xml: $(srctree)/include/uapi/linux/dvb/ca.h $(MEDIA_OBJ_DIR)/v4l2.xml
231         @$($(quiet)gen_xml)
232         @(                                      \
233         echo "<programlisting>") > $@
234         @(                                      \
235         expand --tabs=8 < $< |                  \
236           sed $(ESCAPE) $(DVB_DOCUMENTED) |     \
237           sed 's/i\.e\./&ie;/') >> $@
238         @(                                      \
239         echo "</programlisting>") >> $@
240
241 $(MEDIA_OBJ_DIR)/dmx.h.xml: $(srctree)/include/uapi/linux/dvb/dmx.h $(MEDIA_OBJ_DIR)/v4l2.xml
242         @$($(quiet)gen_xml)
243         @(                                      \
244         echo "<programlisting>") > $@
245         @(                                      \
246         expand --tabs=8 < $< |                  \
247           sed $(ESCAPE) $(DVB_DOCUMENTED) |     \
248           sed 's/i\.e\./&ie;/') >> $@
249         @(                                      \
250         echo "</programlisting>") >> $@
251
252 $(MEDIA_OBJ_DIR)/frontend.h.xml: $(srctree)/include/uapi/linux/dvb/frontend.h $(MEDIA_OBJ_DIR)/v4l2.xml
253         @$($(quiet)gen_xml)
254         @(                                      \
255         echo "<programlisting>") > $@
256         @(                                      \
257         expand --tabs=8 < $< |                  \
258           sed $(ESCAPE) $(DVB_DOCUMENTED) |     \
259           sed 's/i\.e\./&ie;/') >> $@
260         @(                                      \
261         echo "</programlisting>") >> $@
262
263 $(MEDIA_OBJ_DIR)/net.h.xml: $(srctree)/include/uapi/linux/dvb/net.h $(MEDIA_OBJ_DIR)/v4l2.xml
264         @$($(quiet)gen_xml)
265         @(                                      \
266         echo "<programlisting>") > $@
267         @(                                      \
268         expand --tabs=8 < $< |                  \
269           sed $(ESCAPE) $(DVB_DOCUMENTED) |     \
270           sed 's/i\.e\./&ie;/') >> $@
271         @(                                      \
272         echo "</programlisting>") >> $@
273
274 $(MEDIA_OBJ_DIR)/video.h.xml: $(srctree)/include/uapi/linux/dvb/video.h $(MEDIA_OBJ_DIR)/v4l2.xml
275         @$($(quiet)gen_xml)
276         @(                                      \
277         echo "<programlisting>") > $@
278         @(                                      \
279         expand --tabs=8 < $< |                  \
280           sed $(ESCAPE) $(DVB_DOCUMENTED) |     \
281           sed 's/i\.e\./&ie;/') >> $@
282         @(                                      \
283         echo "</programlisting>") >> $@
284
285 $(MEDIA_OBJ_DIR)/media-entities.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml
286         @$($(quiet)gen_xml)
287         @(                                                              \
288         echo "<!-- Generated file! Do not edit. -->") >$@
289         @(                                                              \
290         echo -e "\n<!-- Functions -->") >>$@
291         @(                                                              \
292         for ident in $(FUNCS) ; do                                      \
293           entity=`echo $$ident | tr _ -` ;                              \
294           echo "<!ENTITY func-$$entity \"<link"                         \
295             "linkend='func-$$entity'><function>$$ident()</function></link>\">" \
296           >>$@ ;                                                        \
297         done)
298         @(                                                              \
299         echo -e "\n<!-- Ioctls -->") >>$@
300         @(                                                              \
301         for ident in $(IOCTLS) ; do                                     \
302           entity=`echo $$ident | tr _ -` ;                              \
303           id=`grep "<refname>$$ident" $(MEDIA_OBJ_DIR)/vidioc-*.xml $(MEDIA_OBJ_DIR)/media-ioc-*.xml | sed -r s,"^.*/(.*).xml.*","\1",` ; \
304           echo "<!ENTITY $$entity \"<link"                              \
305             "linkend='$$id'><constant>$$ident</constant></link>\">"     \
306           >>$@ ;                                                        \
307         done)
308         @(                                                              \
309         echo -e "\n<!-- Types -->") >>$@
310         @(                                                              \
311         for ident in $(TYPES) ; do                                      \
312           entity=`echo $$ident | tr _ -` ;                              \
313           echo "<!ENTITY $$entity \"<link"                              \
314             "linkend='$$entity'>$$ident</link>\">" >>$@ ;               \
315         done)
316         @(                                                              \
317         echo -e "\n<!-- Enums -->") >>$@
318         @(                                                              \
319         for ident in $(ENUMS) ; do                                      \
320           entity=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -` ; \
321           echo "<!ENTITY $$entity \"enum&nbsp;<link"                    \
322             "linkend='$$entity'>$$ident</link>\">" >>$@ ;               \
323         done)
324         @(                                                              \
325         echo -e "\n<!-- Structures -->") >>$@
326         @(                                                              \
327         for ident in $(STRUCTS) ; do                                    \
328           entity=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
329           echo "<!ENTITY $$entity \"struct&nbsp;<link"                  \
330             "linkend='$$entity'>$$ident</link>\">" >>$@ ;               \
331         done)
332         @(                                                              \
333         echo -e "\n<!-- Error Codes -->") >>$@
334         @(                                                              \
335         for ident in $(ERRORS) ; do                                     \
336           echo "<!ENTITY $$ident \"<errorcode>$$ident</errorcode>"      \
337             "error code\">" >>$@ ;                                      \
338         done)
339         @(                                                              \
340         echo -e "\n<!-- Subsections -->") >>$@
341         @(                                                              \
342         for file in $(MEDIA_SGMLS) ; do                                 \
343           entity=`echo "$$file" | sed $(FILENAME) -e s/"^([^-]*)"/sub\1/` ; \
344           if ! echo "$$file" |                                          \
345             grep -q -E -e '^(func|vidioc|pixfmt)-' ; then               \
346             echo "<!ENTITY sub-$$entity SYSTEM \"$$file\">" >>$@ ;      \
347           fi ;                                                          \
348         done)
349         @(                                                              \
350         echo -e "\n<!-- Function Reference -->") >>$@
351         @(                                                              \
352         for file in $(MEDIA_SGMLS) ; do                                 \
353           if echo "$$file" |                                            \
354             grep -q -E -e '(func|vidioc|pixfmt)-' ; then                \
355             entity=`echo "$$file" |sed $(FILENAME)` ;                   \
356             echo "<!ENTITY $$entity SYSTEM \"$$file\">" >>$@ ;  \
357           fi ;                                                          \
358         done)
359
360 # Jade can auto-generate a list-of-tables, which includes all structs,
361 # but we only want data types, all types, and sorted please.
362 $(MEDIA_OBJ_DIR)/media-indices.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml
363         @$($(quiet)gen_xml)
364         @(                                                              \
365         echo "<!-- Generated file! Do not edit. -->") >$@
366         @(                                                              \
367         echo -e "\n<index><title>List of Types</title>") >>$@
368         @(                                                              \
369         for ident in $(TYPES) ; do                                      \
370           id=`echo $$ident | tr _ -` ;                                  \
371           echo "<indexentry><primaryie><link"                           \
372             "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
373         done)
374         @(                                                              \
375         for ident in $(ENUMS) ; do                                      \
376           id=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -`; \
377           echo "<indexentry><primaryie>enum&nbsp;<link"                 \
378             "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
379         done)
380         @(                                                              \
381         for ident in $(STRUCTS) ; do                                    \
382           id=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
383           echo "<indexentry><primaryie>struct&nbsp;<link"               \
384             "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
385         done)
386         @(                                                              \
387         echo "</index>") >>$@
388