blob: 8cb27f346d0df65b80a820dd246efdbd0dea33d4 [file] [log] [blame]
Mauro Carvalho Chehab42661292011-05-31 16:27:44 -03001###
2# Media build rules - Auto-generates media contents/indexes and *.h xml's
3#
4
5SHELL=/bin/bash
6
7MEDIA_OBJ_DIR=$(objtree)/Documentation/DocBook/
8MEDIA_SRC_DIR=$(srctree)/Documentation/DocBook/media
9
10MEDIA_TEMP = media-entities.tmpl \
11 media-indices.tmpl \
12 videodev2.h.xml \
13 v4l2.xml \
Mauro Carvalho Chehabd9d73412011-06-08 10:23:34 -030014 audio.h.xml \
15 ca.h.xml \
16 dmx.h.xml \
17 frontend.h.xml \
18 net.h.xml \
Mauro Carvalho Chehabd9d73412011-06-08 10:23:34 -030019 video.h.xml \
Mauro Carvalho Chehab42661292011-05-31 16:27:44 -030020
Mauro Carvalho Chehabbd7319d2011-06-15 23:13:19 -030021IMGFILES := $(patsubst %.b64,%, $(notdir $(shell ls $(MEDIA_SRC_DIR)/*.b64)))
22OBJIMGFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(IMGFILES))
Mauro Carvalho Chehab42661292011-05-31 16:27:44 -030023GENFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(MEDIA_TEMP))
24
Mauro Carvalho Chehaba012fb22011-06-09 16:34:29 -030025PHONY += cleanmediadocs
Mauro Carvalho Chehab42661292011-05-31 16:27:44 -030026
27cleanmediadocs:
Mauro Carvalho Chehabbd7319d2011-06-15 23:13:19 -030028 -@rm `find $(MEDIA_OBJ_DIR) -type l` $(GENFILES) $(OBJIMGFILES) 2>/dev/null
Mauro Carvalho Chehab42661292011-05-31 16:27:44 -030029
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
36V4L_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
42DVB_SGMLS = \
43 $(shell ls $(MEDIA_SRC_DIR)/dvb/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)')
44
45MEDIA_SGMLS = $(addprefix ./,$(V4L_SGMLS)) $(addprefix ./,$(DVB_SGMLS)) $(addprefix ./,$(MEDIA_TEMP))
46
47FUNCS = \
48 close \
49 ioctl \
50 mmap \
51 munmap \
52 open \
53 poll \
54 read \
55 select \
56 write \
57
58IOCTLS = \
59 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/videodev2.h) \
Mauro Carvalho Chehabd9d73412011-06-08 10:23:34 -030060 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/audio.h) \
61 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/ca.h) \
62 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/dmx.h) \
Mauro Carvalho Chehab98a2b602011-06-07 14:51:56 -030063 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/frontend.h) \
Mauro Carvalho Chehabd9d73412011-06-08 10:23:34 -030064 $(shell perl -ne 'print "$$1 " if /\#define\s+([A-Z][^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/net.h) \
Mauro Carvalho Chehabd9d73412011-06-08 10:23:34 -030065 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/video.h) \
Mauro Carvalho Chehab42661292011-05-31 16:27:44 -030066 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/media.h) \
67 $(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/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
74TYPES = \
Mauro Carvalho Chehab98a2b602011-06-07 14:51:56 -030075 $(shell perl -ne 'print "$$1 " if /^typedef\s+[^\s]+\s+([^\s]+)\;/' $(srctree)/include/linux/videodev2.h) \
76 $(shell perl -ne 'print "$$1 " if /^}\s+([a-z0-9_]+_t)/' $(srctree)/include/linux/dvb/frontend.h)
Mauro Carvalho Chehab42661292011-05-31 16:27:44 -030077
78ENUMS = \
79 $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/videodev2.h) \
Mauro Carvalho Chehabd9d73412011-06-08 10:23:34 -030080 $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/audio.h) \
81 $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/ca.h) \
82 $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/dmx.h) \
Mauro Carvalho Chehab98a2b602011-06-07 14:51:56 -030083 $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/frontend.h) \
Mauro Carvalho Chehabd9d73412011-06-08 10:23:34 -030084 $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/net.h) \
Mauro Carvalho Chehabd9d73412011-06-08 10:23:34 -030085 $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/video.h) \
Mauro Carvalho Chehab42661292011-05-31 16:27:44 -030086 $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/media.h) \
87 $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/v4l2-mediabus.h) \
88 $(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/v4l2-subdev.h)
89
90STRUCTS = \
91 $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/videodev2.h) \
Mauro Carvalho Chehabd9d73412011-06-08 10:23:34 -030092 $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s\{]+)\s*/)' $(srctree)/include/linux/dvb/audio.h) \
93 $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/linux/dvb/ca.h) \
94 $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/linux/dvb/dmx.h) \
Mauro Carvalho Chehab3272c3e2011-06-07 21:40:22 -030095 $(shell perl -ne 'print "$$1 " if (!/dtv\_cmds\_h/ && /^struct\s+([^\s]+)\s+/)' $(srctree)/include/linux/dvb/frontend.h) \
Mauro Carvalho Chehabd9d73412011-06-08 10:23:34 -030096 $(shell perl -ne 'print "$$1 " if (/^struct\s+([A-Z][^\s]+)\s+/)' $(srctree)/include/linux/dvb/net.h) \
Mauro Carvalho Chehabd9d73412011-06-08 10:23:34 -030097 $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/linux/dvb/video.h) \
Mauro Carvalho Chehab42661292011-05-31 16:27:44 -030098 $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/media.h) \
99 $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/v4l2-subdev.h) \
100 $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/linux/v4l2-mediabus.h)
101
102ERRORS = \
103 EACCES \
104 EAGAIN \
105 EBADF \
106 EBUSY \
107 EFAULT \
108 EIO \
109 EINTR \
110 EINVAL \
111 ENFILE \
112 ENOMEM \
113 ENOSPC \
114 ENOTTY \
115 ENXIO \
116 EMFILE \
117 EPERM \
118 ERANGE \
119 EPIPE \
120
121ESCAPE = \
122 -e "s/&/\\&/g" \
123 -e "s/</\\&lt;/g" \
124 -e "s/>/\\&gt;/g"
125
126FILENAME = \
127 -e s,"^[^\/]*/",, \
128 -e s/"\\.xml"// \
129 -e s/"\\.tmpl"// \
130 -e s/\\\./-/g \
131 -e s/"^func-"// \
132 -e s/"^pixfmt-"// \
133 -e s/"^vidioc-"//
134
135# Generate references to these structs in videodev2.h.xml.
136DOCUMENTED = \
137 -e "s/\(enum *\)v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1<link linkend=\"\2\">v4l2_mpeg_cx2341x_video_\2<\/link>/g" \
138 -e "s/\(\(enum\|struct\) *\)\(v4l2_[a-zA-Z0-9_]*\)/\1<link linkend=\"\3\">\3<\/link>/g" \
139 -e "s/\(V4L2_PIX_FMT_[A-Z0-9_]\+\) /<link linkend=\"\1\">\1<\/link> /g" \
140 -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
141 -e "s/v4l2\-mpeg\-vbi\-ITV0/v4l2-mpeg-vbi-itv0-1/g"
142
143DVB_DOCUMENTED = \
Mauro Carvalho Chehab98a2b602011-06-07 14:51:56 -0300144 -e "s/\(linkend\=\"\)FE_SET_PROPERTY/\1FE_GET_PROPERTY/g" \
145 -e "s,\(struct\s\+\)\([a-z0-9_]\+\)\(\s\+{\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
146 -e "s,\(}\s\+\)\([a-z0-9_]\+_t\+\),\1\<link linkend=\"\2\">\2\<\/link\>,g" \
Mauro Carvalho Chehab95e61e02011-06-07 16:58:00 -0300147 -e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+[0-9]\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
Mauro Carvalho Chehabca5b2332011-06-08 15:08:57 -0300148 -e "s,<link\s\+linkend=\".*\">\(DTV_IOCTL_MAX_MSGS\|dtv_cmds_h\|__.*_old\)<\/link>,\1,g" \
Mauro Carvalho Chehabd5dc2de2011-06-07 16:17:00 -0300149 -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
Mauro Carvalho Chehabdc05e572011-06-08 15:39:05 -0300150 -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" \
Mauro Carvalho Chehab95e61e02011-06-07 16:58:00 -0300151 -e "s,DTV-ISDBT-LAYER[A-C],DTV-ISDBT-LAYER,g" \
Mauro Carvalho Chehab6cb77a82011-06-07 17:58:59 -0300152 -e "s,\(define\s\+\)\([A-Z0-9_]\+\)\(\s\+_IO\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
Mauro Carvalho Chehabca5b2332011-06-08 15:08:57 -0300153 -e "s,<link\s\+linkend=\".*\">\(__.*_OLD\)<\/link>,\1,g" \
Mauro Carvalho Chehab42661292011-05-31 16:27:44 -0300154
155#
156# Media targets and dependencies
157#
158
Mauro Carvalho Chehabbd7319d2011-06-15 23:13:19 -0300159install_media_images = \
160 $(Q)cp $(OBJIMGFILES) $(MEDIA_OBJ_DIR)/media_api
161
162$(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64
163 $(Q)base64 -d $< >$@
164
165$(MEDIA_OBJ_DIR)/v4l2.xml: $(OBJIMGFILES)
Mauro Carvalho Chehab42661292011-05-31 16:27:44 -0300166 @$($(quiet)gen_xml)
Mauro Carvalho Chehab42661292011-05-31 16:27:44 -0300167 @(ln -sf $(MEDIA_SRC_DIR)/v4l/*xml $(MEDIA_OBJ_DIR)/)
168 @(ln -sf $(MEDIA_SRC_DIR)/dvb/*xml $(MEDIA_OBJ_DIR)/)
169
170$(MEDIA_OBJ_DIR)/videodev2.h.xml: $(srctree)/include/linux/videodev2.h $(MEDIA_OBJ_DIR)/v4l2.xml
171 @$($(quiet)gen_xml)
172 @( \
173 echo "<programlisting>") > $@
174 @( \
175 expand --tabs=8 < $< | \
176 sed $(ESCAPE) $(DOCUMENTED) | \
177 sed 's/i\.e\./&ie;/') >> $@
178 @( \
179 echo "</programlisting>") >> $@
180
Mauro Carvalho Chehabd9d73412011-06-08 10:23:34 -0300181$(MEDIA_OBJ_DIR)/audio.h.xml: $(srctree)/include/linux/dvb/audio.h $(MEDIA_OBJ_DIR)/v4l2.xml
182 @$($(quiet)gen_xml)
183 @( \
184 echo "<programlisting>") > $@
185 @( \
186 expand --tabs=8 < $< | \
187 sed $(ESCAPE) $(DVB_DOCUMENTED) | \
188 sed 's/i\.e\./&ie;/') >> $@
189 @( \
190 echo "</programlisting>") >> $@
191
192$(MEDIA_OBJ_DIR)/ca.h.xml: $(srctree)/include/linux/dvb/ca.h $(MEDIA_OBJ_DIR)/v4l2.xml
193 @$($(quiet)gen_xml)
194 @( \
195 echo "<programlisting>") > $@
196 @( \
197 expand --tabs=8 < $< | \
198 sed $(ESCAPE) $(DVB_DOCUMENTED) | \
199 sed 's/i\.e\./&ie;/') >> $@
200 @( \
201 echo "</programlisting>") >> $@
202
203$(MEDIA_OBJ_DIR)/dmx.h.xml: $(srctree)/include/linux/dvb/dmx.h $(MEDIA_OBJ_DIR)/v4l2.xml
204 @$($(quiet)gen_xml)
205 @( \
206 echo "<programlisting>") > $@
207 @( \
208 expand --tabs=8 < $< | \
209 sed $(ESCAPE) $(DVB_DOCUMENTED) | \
210 sed 's/i\.e\./&ie;/') >> $@
211 @( \
212 echo "</programlisting>") >> $@
213
Mauro Carvalho Chehab42661292011-05-31 16:27:44 -0300214$(MEDIA_OBJ_DIR)/frontend.h.xml: $(srctree)/include/linux/dvb/frontend.h $(MEDIA_OBJ_DIR)/v4l2.xml
215 @$($(quiet)gen_xml)
216 @( \
217 echo "<programlisting>") > $@
218 @( \
219 expand --tabs=8 < $< | \
220 sed $(ESCAPE) $(DVB_DOCUMENTED) | \
221 sed 's/i\.e\./&ie;/') >> $@
222 @( \
223 echo "</programlisting>") >> $@
224
Mauro Carvalho Chehabd9d73412011-06-08 10:23:34 -0300225$(MEDIA_OBJ_DIR)/net.h.xml: $(srctree)/include/linux/dvb/net.h $(MEDIA_OBJ_DIR)/v4l2.xml
226 @$($(quiet)gen_xml)
227 @( \
228 echo "<programlisting>") > $@
229 @( \
230 expand --tabs=8 < $< | \
231 sed $(ESCAPE) $(DVB_DOCUMENTED) | \
232 sed 's/i\.e\./&ie;/') >> $@
233 @( \
234 echo "</programlisting>") >> $@
235
Mauro Carvalho Chehabd9d73412011-06-08 10:23:34 -0300236$(MEDIA_OBJ_DIR)/video.h.xml: $(srctree)/include/linux/dvb/video.h $(MEDIA_OBJ_DIR)/v4l2.xml
237 @$($(quiet)gen_xml)
238 @( \
239 echo "<programlisting>") > $@
240 @( \
241 expand --tabs=8 < $< | \
242 sed $(ESCAPE) $(DVB_DOCUMENTED) | \
243 sed 's/i\.e\./&ie;/') >> $@
244 @( \
245 echo "</programlisting>") >> $@
246
Mauro Carvalho Chehab42661292011-05-31 16:27:44 -0300247$(MEDIA_OBJ_DIR)/media-entities.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml
248 @$($(quiet)gen_xml)
249 @( \
250 echo "<!-- Generated file! Do not edit. -->") >$@
251 @( \
252 echo -e "\n<!-- Functions -->") >>$@
253 @( \
254 for ident in $(FUNCS) ; do \
255 entity=`echo $$ident | tr _ -` ; \
256 echo "<!ENTITY func-$$entity \"<link" \
257 "linkend='func-$$entity'><function>$$ident()</function></link>\">" \
258 >>$@ ; \
259 done)
260 @( \
261 echo -e "\n<!-- Ioctls -->") >>$@
262 @( \
263 for ident in $(IOCTLS) ; do \
264 entity=`echo $$ident | tr _ -` ; \
265 id=`grep "<refname>$$ident" $(MEDIA_OBJ_DIR)/vidioc-*.xml | sed -r s,"^.*/(.*).xml.*","\1",` ; \
266 echo "<!ENTITY $$entity \"<link" \
267 "linkend='$$id'><constant>$$ident</constant></link>\">" \
268 >>$@ ; \
269 done)
270 @( \
271 echo -e "\n<!-- Types -->") >>$@
272 @( \
273 for ident in $(TYPES) ; do \
274 entity=`echo $$ident | tr _ -` ; \
275 echo "<!ENTITY $$entity \"<link" \
276 "linkend='$$entity'>$$ident</link>\">" >>$@ ; \
277 done)
278 @( \
279 echo -e "\n<!-- Enums -->") >>$@
280 @( \
281 for ident in $(ENUMS) ; do \
282 entity=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -` ; \
283 echo "<!ENTITY $$entity \"enum&nbsp;<link" \
284 "linkend='$$entity'>$$ident</link>\">" >>$@ ; \
285 done)
286 @( \
287 echo -e "\n<!-- Structures -->") >>$@
288 @( \
289 for ident in $(STRUCTS) ; do \
290 entity=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
291 echo "<!ENTITY $$entity \"struct&nbsp;<link" \
292 "linkend='$$entity'>$$ident</link>\">" >>$@ ; \
293 done)
294 @( \
295 echo -e "\n<!-- Error Codes -->") >>$@
296 @( \
297 for ident in $(ERRORS) ; do \
298 echo "<!ENTITY $$ident \"<errorcode>$$ident</errorcode>" \
299 "error code\">" >>$@ ; \
300 done)
301 @( \
302 echo -e "\n<!-- Subsections -->") >>$@
303 @( \
304 for file in $(MEDIA_SGMLS) ; do \
305 entity=`echo "$$file" | sed $(FILENAME) -e s/"^([^-]*)"/sub\1/` ; \
306 if ! echo "$$file" | \
307 grep -q -E -e '^(func|vidioc|pixfmt)-' ; then \
308 echo "<!ENTITY sub-$$entity SYSTEM \"$$file\">" >>$@ ; \
309 fi ; \
310 done)
311 @( \
312 echo -e "\n<!-- Function Reference -->") >>$@
313 @( \
314 for file in $(MEDIA_SGMLS) ; do \
315 if echo "$$file" | \
316 grep -q -E -e '(func|vidioc|pixfmt)-' ; then \
317 entity=`echo "$$file" |sed $(FILENAME)` ; \
318 echo "<!ENTITY $$entity SYSTEM \"$$file\">" >>$@ ; \
319 fi ; \
320 done)
321
322# Jade can auto-generate a list-of-tables, which includes all structs,
323# but we only want data types, all types, and sorted please.
324$(MEDIA_OBJ_DIR)/media-indices.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml
325 @$($(quiet)gen_xml)
326 @( \
327 echo "<!-- Generated file! Do not edit. -->") >$@
328 @( \
329 echo -e "\n<index><title>List of Types</title>") >>$@
330 @( \
331 for ident in $(TYPES) ; do \
332 id=`echo $$ident | tr _ -` ; \
333 echo "<indexentry><primaryie><link" \
334 "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
335 done)
336 @( \
337 for ident in $(ENUMS) ; do \
338 id=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -`; \
339 echo "<indexentry><primaryie>enum&nbsp;<link" \
340 "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
341 done)
342 @( \
343 for ident in $(STRUCTS) ; do \
344 id=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
345 echo "<indexentry><primaryie>struct&nbsp;<link" \
346 "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
347 done)
348 @( \
349 echo "</index>") >>$@
350