1### 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 \ 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 21IMGFILES := $(patsubst %.b64,%, $(notdir $(shell ls $(MEDIA_SRC_DIR)/*.b64))) 22OBJIMGFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(IMGFILES)) 23GENFILES := $(addprefix $(MEDIA_OBJ_DIR)/, $(MEDIA_TEMP)) 24 25PHONY += cleanmediadocs 26 27cleanmediadocs: 28 -@rm -f `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 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/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 76TYPES = \ 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 80ENUMS = \ 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 92STRUCTS = \ 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 104ERRORS = \ 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 159ESCAPE = \ 160 -e "s/&/\\&/g" \ 161 -e "s/</\\</g" \ 162 -e "s/>/\\>/g" 163 164FILENAME = \ 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. 174DOCUMENTED = \ 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_]\+\)\(\s\+v4l2_fourcc\)/<link linkend=\"\1\">\1<\/link>\2/g" \ 178 -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \ 179 -e "s/v4l2\-mpeg\-vbi\-ITV0/v4l2-mpeg-vbi-itv0-1/g" 180 181DVB_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 197install_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 `cd $(MEDIA_SRC_DIR) && /bin/pwd`/v4l/*xml $(MEDIA_OBJ_DIR)/) 206 @(ln -sf `cd $(MEDIA_SRC_DIR) && /bin/pwd`/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 <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 <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 <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 <link" \ 384 "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \ 385 done) 386 @( \ 387 echo "</index>") >>$@ 388 389