2 # Media build rules - Auto-generates media contents/indexes and *.h xml's
7 MEDIA_OBJ_DIR
=$(objtree
)/Documentation
/DocBook
/
8 MEDIA_SRC_DIR
=$(srctree
)/Documentation
/DocBook
/media
10 MEDIA_TEMP
= media-entities.tmpl \
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
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
37 $(shell ls
$(MEDIA_SRC_DIR
)/v4l
/*.xml|perl
-ne
'print "$$1 " if (m,.*/(.*)\n,)') \
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
))
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
) \
70 $(shell perl
-ne
'print "$$1 " if /\#define\s+(DTV_[^\s]+)\s+/' $(srctree
)/include/uapi
/linux
/dvb
/frontend.h
) \
73 $(shell perl
-ne
'print "$$1 " if /^typedef\s+.*\s+(\S+)\;/' $(srctree
)/include/uapi
/linux
/videodev2.h
) \
74 $(shell perl
-ne
'print "$$1 " if /^typedef\s+.*\s+(\S+)\;/' $(srctree
)/include/uapi
/linux
/dvb
/frontend.h
)
77 $(shell perl
-ne
'print "$$1 " if /^enum\s+([^\s]+)\s+/' \
78 $(srctree
)/include/uapi
/linux
/videodev2.h \
79 $(srctree
)/include/uapi
/linux
/dvb
/audio.h \
80 $(srctree
)/include/uapi
/linux
/dvb
/ca.h \
81 $(srctree
)/include/uapi
/linux
/dvb
/dmx.h \
82 $(srctree
)/include/uapi
/linux
/dvb
/frontend.h \
83 $(srctree
)/include/uapi
/linux
/dvb
/net.h \
84 $(srctree
)/include/uapi
/linux
/dvb
/video.h \
85 $(srctree
)/include/uapi
/linux
/media.h \
86 $(srctree
)/include/uapi
/linux
/v4l2-mediabus.h \
87 $(srctree
)/include/uapi
/linux
/v4l2-subdev.h
)
90 $(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;' \
91 $(srctree
)/include/uapi
/linux
/dvb
/dmx.h \
92 $(srctree
)/include/uapi
/linux
/dvb
/frontend.h
)
95 $(shell perl
-ne
'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree
)/include/uapi
/linux
/videodev2.h
) \
96 $(shell perl
-ne
'print "$$1 " if (/^struct\s+([^\s\{]+)\s*/)' $(srctree
)/include/uapi
/linux
/dvb
/audio.h
) \
97 $(shell perl
-ne
'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree
)/include/uapi
/linux
/dvb
/ca.h
) \
98 $(shell perl
-ne
'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree
)/include/uapi
/linux
/dvb
/dmx.h
) \
99 $(shell perl
-ne
'print "$$1 " if (!/dtv\_cmds\_h/ && /^struct\s+([^\s]+)\s+/)' $(srctree
)/include/uapi
/linux
/dvb
/frontend.h
) \
100 $(shell perl
-ne
'print "$$1 " if (/^struct\s+([^\s]+)\s+/ && !/_old/)' $(srctree
)/include/uapi
/linux
/dvb
/net.h
) \
101 $(shell perl
-ne
'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree
)/include/uapi
/linux
/dvb
/video.h
) \
102 $(shell perl
-ne
'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree
)/include/uapi
/linux
/media.h
) \
103 $(shell perl
-ne
'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree
)/include/uapi
/linux
/v4l2-subdev.h
) \
104 $(shell perl
-ne
'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree
)/include/uapi
/linux
/v4l2-mediabus.h
)
175 # Generate references to these structs in videodev2.h.xml.
177 -e
"s/\(enum *\)v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1<link linkend=\"\2\">v4l2_mpeg_cx2341x_video_\2<\/link>/g" \
178 -e
"s/\(\(enum\|struct\) *\)\(v4l2_[a-zA-Z0-9_]*\)/\1<link linkend=\"\3\">\3<\/link>/g" \
179 -e
"s/\(V4L2_PIX_FMT_[A-Z0-9_]\+\)\(\s\+v4l2_fourcc\)/<link linkend=\"\1\">\1<\/link>\2/g" \
180 -e
":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
181 -e
"s/v4l2\-mpeg\-vbi\-ITV0/v4l2-mpeg-vbi-itv0-1/g"
184 -e
"s,\(struct\s\+\)\([a-z0-9_]\+\)\(\s\+{\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
185 -e
"s,\(}\s\+\)\([a-z0-9_]\+_t\+\),\1\<link linkend=\"\2\">\2\<\/link\>,g" \
186 -e
"s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+[0-9]\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
187 -e
"s,<link\s\+linkend=\".*\">\(DTV_IOCTL_MAX_MSGS\|dtv_cmds_h\|__.*_old\)<\/link>,\1,g" \
188 -e
":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
189 -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" \
190 -e
"s,DTV-ISDBT-LAYER[A-C],DTV-ISDBT-LAYER,g" \
191 -e
"s,\(define\s\+\)\([A-Z0-9_]\+\)\(\s\+_IO\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
192 -e
"s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
193 -e
"s,<link\s\+linkend=\".*\">\(__.*_OLD\)<\/link>,\1,g" \
194 -e
"s/\(linkend\=\"\)FE_SET_PROPERTY/\1FE_GET_PROPERTY/g" \
195 -e
"s,<link\s\+linkend=\".*\">\(DTV_ISDBS_TS_ID_LEGACY\|DTV_MAX_COMMAND\|DTV_IOCTL_MAX_MSGS\)<\/link>,\1,g" \
198 # Media targets and dependencies
201 install_media_images
= \
202 $(Q
)-mkdir
$(MEDIA_OBJ_DIR
)/media_api
; \
203 cp
$(OBJIMGFILES
) $(MEDIA_SRC_DIR
)/*.svg
$(MEDIA_SRC_DIR
)/v4l
/*.svg
$(MEDIA_OBJ_DIR
)/media_api
205 $(MEDIA_OBJ_DIR
)/%: $(MEDIA_SRC_DIR
)/%.b64
208 $(MEDIA_OBJ_DIR
)/v4l2.xml
: $(OBJIMGFILES
)
210 @
(ln
-sf
`cd $(MEDIA_SRC_DIR) && /bin/pwd`/v4l
/*xml
$(MEDIA_OBJ_DIR
)/)
211 @
(ln
-sf
`cd $(MEDIA_SRC_DIR) && /bin/pwd`/dvb
/*xml
$(MEDIA_OBJ_DIR
)/)
213 $(MEDIA_OBJ_DIR
)/videodev2.h.xml
: $(srctree
)/include/uapi
/linux
/videodev2.h
$(MEDIA_OBJ_DIR
)/v4l2.xml
216 echo
"<programlisting>") > $@
218 expand
--tabs
=8 < $< | \
219 sed
$(ESCAPE
) $(DOCUMENTED
) | \
220 sed
's/i\.e\./&ie;/') >> $@
222 echo
"</programlisting>") >> $@
224 $(MEDIA_OBJ_DIR
)/audio.h.xml
: $(srctree
)/include/uapi
/linux
/dvb
/audio.h
$(MEDIA_OBJ_DIR
)/v4l2.xml
227 echo
"<programlisting>") > $@
229 expand
--tabs
=8 < $< | \
230 sed
$(ESCAPE
) $(DVB_DOCUMENTED
) | \
231 sed
's/i\.e\./&ie;/') >> $@
233 echo
"</programlisting>") >> $@
235 $(MEDIA_OBJ_DIR
)/ca.h.xml
: $(srctree
)/include/uapi
/linux
/dvb
/ca.h
$(MEDIA_OBJ_DIR
)/v4l2.xml
238 echo
"<programlisting>") > $@
240 expand
--tabs
=8 < $< | \
241 sed
$(ESCAPE
) $(DVB_DOCUMENTED
) | \
242 sed
's/i\.e\./&ie;/') >> $@
244 echo
"</programlisting>") >> $@
246 $(MEDIA_OBJ_DIR
)/dmx.h.xml
: $(srctree
)/include/uapi
/linux
/dvb
/dmx.h
$(MEDIA_OBJ_DIR
)/v4l2.xml
249 echo
"<programlisting>") > $@
251 for ident in
$(ENUM_DEFS
) ; do \
252 entity
=`echo $$ident | tr _ -` ; \
253 r
="$$r s/([^\w\-])$$ident([^\w\-])/\1\&$$entity\;\2/g;";\
255 expand
--tabs
=8 < $< | \
256 sed
$(ESCAPE
) $(DVB_DOCUMENTED
) | \
257 sed
's/i\.e\./&ie;/' | \
258 perl
-ne
"$$r print $$_;") >> $@
260 echo
"</programlisting>") >> $@
262 $(MEDIA_OBJ_DIR
)/frontend.h.xml
: $(srctree
)/include/uapi
/linux
/dvb
/frontend.h
$(MEDIA_OBJ_DIR
)/v4l2.xml
265 echo
"<programlisting>") > $@
267 for ident in
$(ENUM_DEFS
) ; do \
268 entity
=`echo $$ident | tr _ -` ; \
269 r
="$$r s/([^\w\-])$$ident([^\w\-])/\1\&$$entity\;\2/g;";\
271 expand
--tabs
=8 < $< | \
272 sed
$(ESCAPE
) $(DVB_DOCUMENTED
) | \
273 sed
's/i\.e\./&ie;/' | \
274 perl
-ne
"$$r print $$_;") >> $@
276 echo
"</programlisting>") >> $@
278 $(MEDIA_OBJ_DIR
)/net.h.xml
: $(srctree
)/include/uapi
/linux
/dvb
/net.h
$(MEDIA_OBJ_DIR
)/v4l2.xml
281 echo
"<programlisting>") > $@
283 expand
--tabs
=8 < $< | \
284 sed
$(ESCAPE
) $(DVB_DOCUMENTED
) | \
285 sed
's/i\.e\./&ie;/') >> $@
287 echo
"</programlisting>") >> $@
289 $(MEDIA_OBJ_DIR
)/video.h.xml
: $(srctree
)/include/uapi
/linux
/dvb
/video.h
$(MEDIA_OBJ_DIR
)/v4l2.xml
292 echo
"<programlisting>") > $@
294 expand
--tabs
=8 < $< | \
295 sed
$(ESCAPE
) $(DVB_DOCUMENTED
) | \
296 sed
's/i\.e\./&ie;/') >> $@
298 echo
"</programlisting>") >> $@
300 $(MEDIA_OBJ_DIR
)/media-entities.tmpl
: $(MEDIA_OBJ_DIR
)/v4l2.xml
303 echo
"<!-- Generated file! Do not edit. -->") >$@
305 echo
-e
"\n<!-- Functions -->") >>$@
307 for ident in
$(FUNCS
) ; do \
308 entity
=`echo $$ident | tr _ -` ; \
309 echo
"<!ENTITY func-$$entity \"<link" \
310 "linkend='func-$$entity'><function>$$ident()</function></link>\">" \
314 echo
-e
"\n<!-- Ioctls -->") >>$@
316 for ident in
`echo $(IOCTLS) | sed -e "s,VIDIOC_RESERVED,,"`; do\
317 entity
=`echo $$ident | tr _ -` ; \
318 id
=`grep -e "<refname>$$ident" -e "<section id=\"$$ident\"" $$(find $(MEDIA_SRC_DIR) -name *.xml -type f)| sed -r s,"^.*/(.*).xml.*","\1",` ; \
319 if
[ "$$id" != "" ]; then echo
"<!ENTITY $$entity \"<link" \
320 "linkend='$$id'><constant>$$ident</constant></link>\">" \
322 echo
"Warning: undocumented ioctl: $$ident. Please document it at the media DocBook!" >&2; \
326 echo
-e
"\n<!-- Defines -->") >>$@
328 for ident in
$(DEFINES
) ; do \
329 entity
=`echo $$ident | tr _ -` ; \
330 echo
"<!ENTITY $$entity \"<link" \
331 "linkend='$$entity'><constant>$$ident</constant></link>\">" \
335 echo
-e
"\n<!-- Types -->") >>$@
337 for ident in
$(TYPES
) ; do \
338 entity
=`echo $$ident | tr _ -` ; \
339 echo
"<!ENTITY $$entity \"<link" \
340 "linkend='$$entity'>$$ident</link>\">" >>$@
; \
343 echo
-e
"\n<!-- Enums -->") >>$@
345 for ident in
$(ENUMS
) ; do \
346 entity
=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -` ; \
347 echo
"<!ENTITY $$entity \"enum <link" \
348 "linkend='$$entity'>$$ident</link>\">" >>$@
; \
351 echo
-e
"\n<!-- Enum definitions -->") >>$@
353 for ident in
$(ENUM_DEFS
) ; do \
354 entity
=`echo $$ident | tr _ -` ; \
355 echo
"<!ENTITY $$entity \"<link" \
356 "linkend='$$entity'><constant>$$ident</constant></link>\">" \
360 echo
-e
"\n<!-- Structures -->") >>$@
362 for ident in
$(STRUCTS
) ; do \
363 entity
=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
364 echo
"<!ENTITY $$entity \"struct <link" \
365 "linkend='$$entity'>$$ident</link>\">" >>$@
; \
368 echo
-e
"\n<!-- Error Codes -->") >>$@
370 for ident in
$(ERRORS
) ; do \
371 echo
"<!ENTITY $$ident \"<errorcode>$$ident</errorcode>" \
372 "error code\">" >>$@
; \
375 echo
-e
"\n<!-- Subsections -->") >>$@
377 for file in
$(MEDIA_SGMLS
) ; do \
378 entity
=`echo "$$file" | sed $(FILENAME) -e s/"^([^-]*)"/sub\1/` ; \
379 if
! echo
"$$file" | \
380 grep
-q
-E
-e
'^(func|vidioc|pixfmt)-' ; then \
381 echo
"<!ENTITY sub-$$entity SYSTEM \"$$file\">" >>$@
; \
385 echo
-e
"\n<!-- Function Reference -->") >>$@
387 for file in
$(MEDIA_SGMLS
) ; do \
389 grep
-q
-E
-e
'(func|vidioc|pixfmt)-' ; then \
390 entity
=`echo "$$file" |sed $(FILENAME)` ; \
391 echo
"<!ENTITY $$entity SYSTEM \"$$file\">" >>$@
; \
395 # Jade can auto-generate a list-of-tables, which includes all structs,
396 # but we only want data types, all types, and sorted please.
397 $(MEDIA_OBJ_DIR
)/media-indices.tmpl
: $(MEDIA_OBJ_DIR
)/v4l2.xml
400 echo
"<!-- Generated file! Do not edit. -->") >$@
402 echo
-e
"\n<index><title>List of Types</title>") >>$@
404 for ident in
$(TYPES
) ; do \
405 id
=`echo $$ident | tr _ -` ; \
406 echo
"<indexentry><primaryie><link" \
407 "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@
; \
410 for ident in
$(ENUMS
) ; do \
411 id
=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -`; \
412 echo
"<indexentry><primaryie>enum <link" \
413 "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@
; \
416 for ident in
$(STRUCTS
) ; do \
417 id
=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
418 echo
"<indexentry><primaryie>struct <link" \
419 "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@
; \
422 echo
"</index>") >>$@