2011-05-31 23:27:44 +04:00
###
# Media build rules - Auto-generates media contents/indexes and *.h xml's
#
SHELL = /bin/bash
MEDIA_OBJ_DIR = $( objtree) /Documentation/DocBook/
MEDIA_SRC_DIR = $( srctree) /Documentation/DocBook/media
MEDIA_TEMP = media-entities.tmpl \
media-indices.tmpl \
videodev2.h.xml \
v4l2.xml \
2011-06-08 17:23:34 +04:00
audio.h.xml \
ca.h.xml \
dmx.h.xml \
frontend.h.xml \
net.h.xml \
video.h.xml \
2011-05-31 23:27:44 +04:00
2011-06-16 06:13:19 +04:00
IMGFILES := $( patsubst %.b64,%, $( notdir $( shell ls $( MEDIA_SRC_DIR) /*.b64) ) )
OBJIMGFILES := $( addprefix $( MEDIA_OBJ_DIR) /, $( IMGFILES) )
2011-05-31 23:27:44 +04:00
GENFILES := $( addprefix $( MEDIA_OBJ_DIR) /, $( MEDIA_TEMP) )
2011-06-09 23:34:29 +04:00
PHONY += cleanmediadocs
2011-05-31 23:27:44 +04:00
cleanmediadocs :
2011-06-16 06:13:19 +04:00
-@rm ` find $( MEDIA_OBJ_DIR) -type l` $( GENFILES) $( OBJIMGFILES) 2>/dev/null
2011-05-31 23:27:44 +04:00
$(obj)/media_api.xml : $( GENFILES ) FORCE
#$(MEDIA_OBJ_DIR)/media_api.html: $(MEDIA_OBJ_DIR)/media_api.xml
#$(MEDIA_OBJ_DIR)/media_api.pdf: $(MEDIA_OBJ_DIR)/media_api.xml
#$(MEDIA_OBJ_DIR)/media_api.ps: $(MEDIA_OBJ_DIR)/media_api.xml
V4L_SGMLS = \
$( shell ls $( MEDIA_SRC_DIR) /v4l/*.xml| perl -ne 'print "$$1 " if (m,.*/(.*)\n,)' ) \
capture.c.xml \
keytable.c.xml \
v4l2grab.c.xml
DVB_SGMLS = \
$( shell ls $( MEDIA_SRC_DIR) /dvb/*.xml| perl -ne 'print "$$1 " if (m,.*/(.*)\n,)' )
MEDIA_SGMLS = $( addprefix ./,$( V4L_SGMLS) ) $( addprefix ./,$( DVB_SGMLS) ) $( addprefix ./,$( MEDIA_TEMP) )
FUNCS = \
close \
ioctl \
mmap \
munmap \
open \
poll \
read \
select \
write \
IOCTLS = \
2012-10-17 17:05:09 +04:00
$( shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $( srctree) /include/uapi/linux/videodev2.h) \
$( shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $( srctree) /include/uapi/linux/dvb/audio.h) \
$( shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $( srctree) /include/uapi/linux/dvb/ca.h) \
$( shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $( srctree) /include/uapi/linux/dvb/dmx.h) \
$( shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $( srctree) /include/uapi/linux/dvb/frontend.h) \
$( shell perl -ne 'print "$$1 " if /\#define\s+([A-Z][^\s]+)\s+_IO/' $( srctree) /include/uapi/linux/dvb/net.h) \
$( shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $( srctree) /include/uapi/linux/dvb/video.h) \
$( shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $( srctree) /include/uapi/linux/media.h) \
$( shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $( srctree) /include/uapi/linux/v4l2-subdev.h) \
2011-05-31 23:27:44 +04:00
VIDIOC_SUBDEV_G_FRAME_INTERVAL \
VIDIOC_SUBDEV_S_FRAME_INTERVAL \
VIDIOC_SUBDEV_ENUM_MBUS_CODE \
VIDIOC_SUBDEV_ENUM_FRAME_SIZE \
VIDIOC_SUBDEV_ENUM_FRAME_INTERVAL \
2011-12-13 01:17:25 +04:00
VIDIOC_SUBDEV_G_SELECTION \
VIDIOC_SUBDEV_S_SELECTION \
2011-05-31 23:27:44 +04:00
TYPES = \
2012-10-17 17:05:09 +04:00
$( shell perl -ne 'print "$$1 " if /^typedef\s+[^\s]+\s+([^\s]+)\;/' $( srctree) /include/uapi/linux/videodev2.h) \
$( shell perl -ne 'print "$$1 " if /^}\s+([a-z0-9_]+_t)/' $( srctree) /include/uapi/linux/dvb/frontend.h)
2011-05-31 23:27:44 +04:00
ENUMS = \
2012-10-17 17:05:09 +04:00
$( shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $( srctree) /include/uapi/linux/videodev2.h) \
$( shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $( srctree) /include/uapi/linux/dvb/audio.h) \
$( shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $( srctree) /include/uapi/linux/dvb/ca.h) \
$( shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $( srctree) /include/uapi/linux/dvb/dmx.h) \
$( shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $( srctree) /include/uapi/linux/dvb/frontend.h) \
$( shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $( srctree) /include/uapi/linux/dvb/net.h) \
$( shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $( srctree) /include/uapi/linux/dvb/video.h) \
$( shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $( srctree) /include/uapi/linux/media.h) \
$( shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $( srctree) /include/uapi/linux/v4l2-mediabus.h) \
$( shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $( srctree) /include/uapi/linux/v4l2-subdev.h)
2011-05-31 23:27:44 +04:00
STRUCTS = \
2012-10-17 17:05:09 +04:00
$( shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $( srctree) /include/uapi/linux/videodev2.h) \
$( shell perl -ne 'print "$$1 " if (/^struct\s+([^\s\{]+)\s*/)' $( srctree) /include/uapi/linux/dvb/audio.h) \
$( shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $( srctree) /include/uapi/linux/dvb/ca.h) \
$( shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $( srctree) /include/uapi/linux/dvb/dmx.h) \
$( shell perl -ne 'print "$$1 " if (!/dtv\_cmds\_h/ && /^struct\s+([^\s]+)\s+/)' $( srctree) /include/uapi/linux/dvb/frontend.h) \
$( shell perl -ne 'print "$$1 " if (/^struct\s+([A-Z][^\s]+)\s+/)' $( srctree) /include/uapi/linux/dvb/net.h) \
$( shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $( srctree) /include/uapi/linux/dvb/video.h) \
$( shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $( srctree) /include/uapi/linux/media.h) \
$( shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $( srctree) /include/uapi/linux/v4l2-subdev.h) \
$( shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $( srctree) /include/uapi/linux/v4l2-mediabus.h)
2011-05-31 23:27:44 +04:00
ERRORS = \
2011-07-05 17:07:37 +04:00
E2BIG \
2011-05-31 23:27:44 +04:00
EACCES \
EAGAIN \
EBADF \
2011-07-05 17:07:37 +04:00
EBADFD \
EBADR \
EBADRQC \
2011-05-31 23:27:44 +04:00
EBUSY \
2011-07-05 17:07:37 +04:00
ECHILD \
ECONNRESET \
EDEADLK \
EDOM \
EEXIST \
2011-05-31 23:27:44 +04:00
EFAULT \
2011-07-05 17:07:37 +04:00
EFBIG \
EILSEQ \
EINIT \
EINPROGRESS \
2011-05-31 23:27:44 +04:00
EINTR \
EINVAL \
2011-07-05 17:07:37 +04:00
EIO \
EMFILE \
2011-05-31 23:27:44 +04:00
ENFILE \
2011-07-05 17:07:37 +04:00
ENOBUFS \
ENODATA \
ENODEV \
ENOENT \
ENOIOCTLCMD \
2011-05-31 23:27:44 +04:00
ENOMEM \
ENOSPC \
2011-07-05 17:07:37 +04:00
ENOSR \
ENOSYS \
ENOTSUP \
ENOTSUPP \
2011-05-31 23:27:44 +04:00
ENOTTY \
ENXIO \
2011-07-05 17:07:37 +04:00
EOPNOTSUPP \
EOVERFLOW \
2011-05-31 23:27:44 +04:00
EPERM \
EPIPE \
2011-07-05 17:07:37 +04:00
EPROTO \
ERANGE \
EREMOTE \
EREMOTEIO \
ERESTART \
ERESTARTSYS \
ESHUTDOWN \
ESPIPE \
ETIME \
ETIMEDOUT \
EUSERS \
EWOULDBLOCK \
EXDEV \
2011-05-31 23:27:44 +04:00
ESCAPE = \
-e "s/&/\\&/g" \
-e "s/</\\</g" \
-e "s/>/\\>/g"
FILENAME = \
-e s,"^[^\/]*/" ,, \
-e s/"\\.xml" // \
-e s/"\\.tmpl" // \
-e s/\\ \. /-/g \
-e s/"^func-" // \
-e s/"^pixfmt-" // \
-e s/"^vidioc-" //
# Generate references to these structs in videodev2.h.xml.
DOCUMENTED = \
-e "s/\(enum *\)v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1<link linkend=\"\2\">v4l2_mpeg_cx2341x_video_\2<\/link>/g" \
-e "s/\(\(enum\|struct\) *\)\(v4l2_[a-zA-Z0-9_]*\)/\1<link linkend=\"\3\">\3<\/link>/g" \
-e "s/\(V4L2_PIX_FMT_[A-Z0-9_]\+\) /<link linkend=\"\1\">\1<\/link> /g" \
-e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
-e "s/v4l2\-mpeg\-vbi\-ITV0/v4l2-mpeg-vbi-itv0-1/g"
DVB_DOCUMENTED = \
2011-06-07 21:51:56 +04:00
-e "s/\(linkend\=\"\)FE_SET_PROPERTY/\1FE_GET_PROPERTY/g" \
-e "s,\(struct\s\+\)\([a-z0-9_]\+\)\(\s\+{\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
-e "s,\(}\s\+\)\([a-z0-9_]\+_t\+\),\1\<link linkend=\"\2\">\2\<\/link\>,g" \
2011-06-07 23:58:00 +04:00
-e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+[0-9]\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
2011-06-08 22:08:57 +04:00
-e "s,<link\s\+linkend=\".*\">\(DTV_IOCTL_MAX_MSGS\|dtv_cmds_h\|__.*_old\)<\/link>,\1,g" \
2011-06-07 23:17:00 +04:00
-e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
2011-06-08 22:39:05 +04:00
-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" \
2011-06-07 23:58:00 +04:00
-e "s,DTV-ISDBT-LAYER[A-C],DTV-ISDBT-LAYER,g" \
2011-06-08 00:58:59 +04:00
-e "s,\(define\s\+\)\([A-Z0-9_]\+\)\(\s\+_IO\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
2011-06-08 22:08:57 +04:00
-e "s,<link\s\+linkend=\".*\">\(__.*_OLD\)<\/link>,\1,g" \
2011-05-31 23:27:44 +04:00
#
# Media targets and dependencies
#
2011-06-16 06:13:19 +04:00
install_media_images = \
2014-05-22 22:54:23 +04:00
$( Q) -cp $( OBJIMGFILES) $( MEDIA_SRC_DIR) /v4l/*.svg $( MEDIA_OBJ_DIR) /media_api
2011-06-16 06:13:19 +04:00
$(MEDIA_OBJ_DIR)/% : $( MEDIA_SRC_DIR ) /%.b 64
$( Q) base64 -d $< >$@
$(MEDIA_OBJ_DIR)/v4l2.xml : $( OBJIMGFILES )
2011-05-31 23:27:44 +04:00
@$( $( quiet) gen_xml)
2014-06-18 19:15:17 +04:00
@( ln -sf ` cd $( MEDIA_SRC_DIR) && /bin/pwd` /v4l/*xml $( MEDIA_OBJ_DIR) /)
@( ln -sf ` cd $( MEDIA_SRC_DIR) && /bin/pwd` /dvb/*xml $( MEDIA_OBJ_DIR) /)
2011-05-31 23:27:44 +04:00
2012-10-17 17:05:09 +04:00
$(MEDIA_OBJ_DIR)/videodev2.h.xml : $( srctree ) /include /uapi /linux /videodev 2.h $( MEDIA_OBJ_DIR ) /v 4l 2.xml
2011-05-31 23:27:44 +04:00
@$( $( quiet) gen_xml)
@( \
echo "<programlisting>" ) > $@
@( \
expand --tabs= 8 < $< | \
sed $( ESCAPE) $( DOCUMENTED) | \
sed 's/i\.e\./&ie;/' ) >> $@
@( \
echo "</programlisting>" ) >> $@
2012-10-17 17:05:09 +04:00
$(MEDIA_OBJ_DIR)/audio.h.xml : $( srctree ) /include /uapi /linux /dvb /audio .h $( MEDIA_OBJ_DIR ) /v 4l 2.xml
2011-06-08 17:23:34 +04:00
@$( $( quiet) gen_xml)
@( \
echo "<programlisting>" ) > $@
@( \
expand --tabs= 8 < $< | \
sed $( ESCAPE) $( DVB_DOCUMENTED) | \
sed 's/i\.e\./&ie;/' ) >> $@
@( \
echo "</programlisting>" ) >> $@
2012-10-17 17:05:09 +04:00
$(MEDIA_OBJ_DIR)/ca.h.xml : $( srctree ) /include /uapi /linux /dvb /ca .h $( MEDIA_OBJ_DIR ) /v 4l 2.xml
2011-06-08 17:23:34 +04:00
@$( $( quiet) gen_xml)
@( \
echo "<programlisting>" ) > $@
@( \
expand --tabs= 8 < $< | \
sed $( ESCAPE) $( DVB_DOCUMENTED) | \
sed 's/i\.e\./&ie;/' ) >> $@
@( \
echo "</programlisting>" ) >> $@
2012-10-17 17:05:09 +04:00
$(MEDIA_OBJ_DIR)/dmx.h.xml : $( srctree ) /include /uapi /linux /dvb /dmx .h $( MEDIA_OBJ_DIR ) /v 4l 2.xml
2011-06-08 17:23:34 +04:00
@$( $( quiet) gen_xml)
@( \
echo "<programlisting>" ) > $@
@( \
expand --tabs= 8 < $< | \
sed $( ESCAPE) $( DVB_DOCUMENTED) | \
sed 's/i\.e\./&ie;/' ) >> $@
@( \
echo "</programlisting>" ) >> $@
2012-10-17 17:05:09 +04:00
$(MEDIA_OBJ_DIR)/frontend.h.xml : $( srctree ) /include /uapi /linux /dvb /frontend .h $( MEDIA_OBJ_DIR ) /v 4l 2.xml
2011-05-31 23:27:44 +04:00
@$( $( quiet) gen_xml)
@( \
echo "<programlisting>" ) > $@
@( \
expand --tabs= 8 < $< | \
sed $( ESCAPE) $( DVB_DOCUMENTED) | \
sed 's/i\.e\./&ie;/' ) >> $@
@( \
echo "</programlisting>" ) >> $@
2012-10-17 17:05:09 +04:00
$(MEDIA_OBJ_DIR)/net.h.xml : $( srctree ) /include /uapi /linux /dvb /net .h $( MEDIA_OBJ_DIR ) /v 4l 2.xml
2011-06-08 17:23:34 +04:00
@$( $( quiet) gen_xml)
@( \
echo "<programlisting>" ) > $@
@( \
expand --tabs= 8 < $< | \
sed $( ESCAPE) $( DVB_DOCUMENTED) | \
sed 's/i\.e\./&ie;/' ) >> $@
@( \
echo "</programlisting>" ) >> $@
2012-10-17 17:05:09 +04:00
$(MEDIA_OBJ_DIR)/video.h.xml : $( srctree ) /include /uapi /linux /dvb /video .h $( MEDIA_OBJ_DIR ) /v 4l 2.xml
2011-06-08 17:23:34 +04:00
@$( $( quiet) gen_xml)
@( \
echo "<programlisting>" ) > $@
@( \
expand --tabs= 8 < $< | \
sed $( ESCAPE) $( DVB_DOCUMENTED) | \
sed 's/i\.e\./&ie;/' ) >> $@
@( \
echo "</programlisting>" ) >> $@
2011-05-31 23:27:44 +04:00
$(MEDIA_OBJ_DIR)/media-entities.tmpl : $( MEDIA_OBJ_DIR ) /v 4l 2.xml
@$( $( quiet) gen_xml)
@( \
echo "<!-- Generated file! Do not edit. -->" ) >$@
@( \
echo -e "\n<!-- Functions -->" ) >>$@
@( \
for ident in $( FUNCS) ; do \
entity = ` echo $$ ident | tr _ -` ; \
echo " <!ENTITY func- $$ entity \"<link " \
" linkend='func- $$ entity'><function> $$ ident()</function></link>\"> " \
>>$@ ; \
done )
@( \
echo -e "\n<!-- Ioctls -->" ) >>$@
@( \
for ident in $( IOCTLS) ; do \
entity = ` echo $$ ident | tr _ -` ; \
2012-08-14 13:10:01 +04:00
id = ` grep " <refname> $$ ident " $( MEDIA_OBJ_DIR) /vidioc-*.xml $( MEDIA_OBJ_DIR) /media-ioc-*.xml | sed -r s,"^.*/(.*).xml.*" ,"\1" ,` ; \
2011-05-31 23:27:44 +04:00
echo " <!ENTITY $$ entity \"<link " \
" linkend=' $$ id'><constant> $$ ident</constant></link>\"> " \
>>$@ ; \
done )
@( \
echo -e "\n<!-- Types -->" ) >>$@
@( \
for ident in $( TYPES) ; do \
entity = ` echo $$ ident | tr _ -` ; \
echo " <!ENTITY $$ entity \"<link " \
" linkend=' $$ entity'> $$ ident</link>\"> " >>$@ ; \
done )
@( \
echo -e "\n<!-- Enums -->" ) >>$@
@( \
for ident in $( ENUMS) ; do \
entity = ` echo $$ ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -` ; \
echo " <!ENTITY $$ entity \"enum <link " \
" linkend=' $$ entity'> $$ ident</link>\"> " >>$@ ; \
done )
@( \
echo -e "\n<!-- Structures -->" ) >>$@
@( \
for ident in $( STRUCTS) ; do \
entity = ` echo $$ ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
echo " <!ENTITY $$ entity \"struct <link " \
" linkend=' $$ entity'> $$ ident</link>\"> " >>$@ ; \
done )
@( \
echo -e "\n<!-- Error Codes -->" ) >>$@
@( \
for ident in $( ERRORS) ; do \
echo " <!ENTITY $$ ident \"<errorcode> $$ ident</errorcode> " \
"error code\">" >>$@ ; \
done )
@( \
echo -e "\n<!-- Subsections -->" ) >>$@
@( \
for file in $( MEDIA_SGMLS) ; do \
entity = ` echo " $$ file " | sed $( FILENAME) -e s/"^([^-]*)" /sub\1 /` ; \
if ! echo " $$ file " | \
grep -q -E -e '^(func|vidioc|pixfmt)-' ; then \
echo " <!ENTITY sub- $$ entity SYSTEM \" $$ file\"> " >>$@ ; \
fi ; \
done )
@( \
echo -e "\n<!-- Function Reference -->" ) >>$@
@( \
for file in $( MEDIA_SGMLS) ; do \
if echo " $$ file " | \
grep -q -E -e '(func|vidioc|pixfmt)-' ; then \
entity = ` echo " $$ file " | sed $( FILENAME) ` ; \
echo " <!ENTITY $$ entity SYSTEM \" $$ file\"> " >>$@ ; \
fi ; \
done )
# Jade can auto-generate a list-of-tables, which includes all structs,
# but we only want data types, all types, and sorted please.
$(MEDIA_OBJ_DIR)/media-indices.tmpl : $( MEDIA_OBJ_DIR ) /v 4l 2.xml
@$( $( quiet) gen_xml)
@( \
echo "<!-- Generated file! Do not edit. -->" ) >$@
@( \
echo -e "\n<index><title>List of Types</title>" ) >>$@
@( \
for ident in $( TYPES) ; do \
id = ` echo $$ ident | tr _ -` ; \
echo "<indexentry><primaryie><link" \
" linkend=' $$ id'> $$ ident</link></primaryie></indexentry> " >>$@ ; \
done )
@( \
for ident in $( ENUMS) ; do \
id = ` echo $$ ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -` ; \
echo "<indexentry><primaryie>enum <link" \
" linkend=' $$ id'> $$ ident</link></primaryie></indexentry> " >>$@ ; \
done )
@( \
for ident in $( STRUCTS) ; do \
id = ` echo $$ ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
echo "<indexentry><primaryie>struct <link" \
" linkend=' $$ id'> $$ ident</link></primaryie></indexentry> " >>$@ ; \
done )
@( \
echo "</index>" ) >>$@