SHELL=/bin/bash
V4L_SGMLS = \
v4l/biblio.xml \
v4l/common.xml \
v4l/compat.xml \
v4l/controls.xml \
v4l/dev-capture.xml \
v4l/dev-codec.xml \
v4l/dev-effect.xml \
v4l/dev-osd.xml \
v4l/dev-output.xml \
v4l/dev-overlay.xml \
v4l/dev-radio.xml \
v4l/dev-raw-vbi.xml \
v4l/dev-rds.xml \
v4l/dev-sliced-vbi.xml \
v4l/dev-teletext.xml \
v4l/driver.xml \
v4l/libv4l.xml \
v4l/remote_controllers.xml \
v4l/fdl-appendix.xml \
v4l/func-close.xml \
v4l/func-ioctl.xml \
v4l/func-mmap.xml \
v4l/func-munmap.xml \
v4l/func-open.xml \
v4l/func-poll.xml \
v4l/func-read.xml \
v4l/func-select.xml \
v4l/func-write.xml \
v4l/io.xml \
v4l/pixfmt-grey.xml \
v4l/pixfmt-nv12.xml \
v4l/pixfmt-nv16.xml \
v4l/pixfmt-packed-rgb.xml \
v4l/pixfmt-packed-yuv.xml \
v4l/pixfmt-sbggr16.xml \
v4l/pixfmt-sbggr8.xml \
v4l/pixfmt-sgbrg8.xml \
v4l/pixfmt-sgrbg8.xml \
v4l/pixfmt-uyvy.xml \
v4l/pixfmt-vyuy.xml \
v4l/pixfmt-y16.xml \
v4l/pixfmt-y41p.xml \
v4l/pixfmt-yuv410.xml \
v4l/pixfmt-yuv411p.xml \
v4l/pixfmt-yuv420.xml \
v4l/pixfmt-yuv422p.xml \
v4l/pixfmt-yuyv.xml \
v4l/pixfmt-yvyu.xml \
v4l/pixfmt.xml \
v4l/vidioc-cropcap.xml \
v4l/vidioc-dbg-g-register.xml \
v4l/vidioc-encoder-cmd.xml \
v4l/vidioc-enum-fmt.xml \
v4l/vidioc-enum-frameintervals.xml \
v4l/vidioc-enum-framesizes.xml \
v4l/vidioc-enumaudio.xml \
v4l/vidioc-enumaudioout.xml \
v4l/vidioc-enuminput.xml \
v4l/vidioc-enumoutput.xml \
v4l/vidioc-enumstd.xml \
v4l/vidioc-g-audio.xml \
v4l/vidioc-g-audioout.xml \
v4l/vidioc-dbg-g-chip-ident.xml \
v4l/vidioc-g-crop.xml \
v4l/vidioc-g-ctrl.xml \
v4l/vidioc-g-enc-index.xml \
v4l/vidioc-g-ext-ctrls.xml \
v4l/vidioc-g-fbuf.xml \
v4l/vidioc-g-fmt.xml \
v4l/vidioc-g-frequency.xml \
v4l/vidioc-g-input.xml \
v4l/vidioc-g-jpegcomp.xml \
v4l/vidioc-g-modulator.xml \
v4l/vidioc-g-output.xml \
v4l/vidioc-g-parm.xml \
v4l/vidioc-g-priority.xml \
v4l/vidioc-g-sliced-vbi-cap.xml \
v4l/vidioc-g-std.xml \
v4l/vidioc-g-tuner.xml \
v4l/vidioc-log-status.xml \
v4l/vidioc-overlay.xml \
v4l/vidioc-qbuf.xml \
v4l/vidioc-querybuf.xml \
v4l/vidioc-querycap.xml \
v4l/vidioc-queryctrl.xml \
v4l/vidioc-querystd.xml \
v4l/vidioc-reqbufs.xml \
v4l/vidioc-s-hw-freq-seek.xml \
v4l/vidioc-streamon.xml \
v4l/capture.c.xml \
v4l/keytable.c.xml \
v4l/v4l2grab.c.xml \
v4l/videodev2.h.xml \
v4l/v4l2.xml
V4L_PDFPICS = \
v4l/crop.pdf \
v4l/fieldseq_bt.pdf \
v4l/fieldseq_tb.pdf \
v4l/vbi_525.pdf \
v4l/vbi_625.pdf \
v4l/vbi_hsync.pdf
V4L_GIFPICS = \
v4l/crop.gif \
v4l/fieldseq_bt.gif \
v4l/fieldseq_tb.gif \
v4l/vbi_525.gif \
v4l/vbi_625.gif \
v4l/vbi_hsync.gif
DVB_SGMLS = \
dvb/intro.xml \
dvb/frontend.xml \
dvb/isdbt.xml \
dvb/demux.xml \
dvb/video.xml \
dvb/audio.xml \
dvb/ca.xml \
dvb/net.xml \
dvb/kdapi.xml \
dvb/examples.xml \
dvb/dvbapi.xml
DVB_PDFPICS = \
dvb/dvbstb.pdf
DVB_GIFPICS = \
dvb/dvbstb.png
SGMLS = $(V4L_SGMLS) $(DVB_SGMLS) media.xml media-entities.tmpl media-indices.tmpl
PDFPICS = $(V4L_PDFPICS) $(DVB_PDFPICS)
GIFPICS = $(V4L_GIFPICS) $(DVB_GIFPICS)
# Some Jade warnings for authors.
WARN =
#WARN = -w all -w duplicate -w net
# Stylesheet customization.
# docbook/db2 syntax
CUSTOM_HTML = --dsl custom.dsl\#html
CUSTOM_PRINT = --dsl custom.dsl\#print
# xmlto syntax
CUSTOM_HTML_XMLTO = -m custom.xsl
CUSTOM_PRINT_XMLTO = -m custom.xsl
all: capture html-single
prep: Makefile checks $(SGMLS) $(GIFPICS)
html: html-build.stamp
html-single: html-single-build.stamp
pdf: pdf-build.stamp
man: man-build.stamp
man_install: man-build.stamp
install -d /usr/local/man/man2
install -b man/* /usr/local/man/man2
coffeebreak: all html pdf
FUNCS = \
close \
ioctl \
mmap \
munmap \
open \
poll \
read \
select \
write \
IOCTLS = \
VIDIOC_CROPCAP \
VIDIOC_DBG_G_CHIP_IDENT \
VIDIOC_DBG_G_REGISTER \
VIDIOC_DBG_S_REGISTER \
VIDIOC_DQBUF \
VIDIOC_ENCODER_CMD \
VIDIOC_ENUMAUDIO \
VIDIOC_ENUMAUDOUT \
VIDIOC_ENUMINPUT \
VIDIOC_ENUMOUTPUT \
VIDIOC_ENUMSTD \
VIDIOC_ENUM_FMT \
VIDIOC_ENUM_FRAMEINTERVALS \
VIDIOC_ENUM_FRAMESIZES \
VIDIOC_G_AUDIO \
VIDIOC_G_AUDOUT \
VIDIOC_G_CROP \
VIDIOC_G_CTRL \
VIDIOC_G_ENC_INDEX \
VIDIOC_G_EXT_CTRLS \
VIDIOC_G_FBUF \
VIDIOC_G_FMT \
VIDIOC_G_FREQUENCY \
VIDIOC_G_INPUT \
VIDIOC_G_JPEGCOMP \
VIDIOC_G_MPEGCOMP \
VIDIOC_G_MODULATOR \
VIDIOC_G_OUTPUT \
VIDIOC_G_PARM \
VIDIOC_G_PRIORITY \
VIDIOC_G_SLICED_VBI_CAP \
VIDIOC_G_STD \
VIDIOC_G_TUNER \
VIDIOC_LOG_STATUS \
VIDIOC_OVERLAY \
VIDIOC_QBUF \
VIDIOC_QUERYBUF \
VIDIOC_QUERYCAP \
VIDIOC_QUERYCTRL \
VIDIOC_QUERYMENU \
VIDIOC_QUERYSTD \
VIDIOC_REQBUFS \
VIDIOC_STREAMOFF \
VIDIOC_STREAMON \
VIDIOC_S_AUDIO \
VIDIOC_S_AUDOUT \
VIDIOC_S_CROP \
VIDIOC_S_CTRL \
VIDIOC_S_EXT_CTRLS \
VIDIOC_S_FBUF \
VIDIOC_S_FMT \
VIDIOC_S_FREQUENCY \
VIDIOC_S_HW_FREQ_SEEK \
VIDIOC_S_INPUT \
VIDIOC_S_JPEGCOMP \
VIDIOC_S_MPEGCOMP \
VIDIOC_S_MODULATOR \
VIDIOC_S_OUTPUT \
VIDIOC_S_PARM \
VIDIOC_S_PRIORITY \
VIDIOC_S_STD \
VIDIOC_S_TUNER \
VIDIOC_TRY_ENCODER_CMD \
VIDIOC_TRY_EXT_CTRLS \
VIDIOC_TRY_FMT \
TYPES = \
v4l2_std_id \
ENUMS = \
v4l2_buf_type \
v4l2_colorspace \
v4l2_ctrl_type \
v4l2_exposure_auto_type \
v4l2_field \
v4l2_frmivaltypes \
v4l2_frmsizetypes \
v4l2_memory \
v4l2_mpeg_audio_ac3_bitrate \
v4l2_mpeg_audio_crc \
v4l2_mpeg_audio_emphasis \
v4l2_mpeg_audio_encoding \
v4l2_mpeg_audio_l1_bitrate \
v4l2_mpeg_audio_l2_bitrate \
v4l2_mpeg_audio_l3_bitrate \
v4l2_mpeg_audio_mode \
v4l2_mpeg_audio_mode_extension \
v4l2_mpeg_audio_sampling_freq \
v4l2_mpeg_cx2341x_video_chroma_spatial_filter_type \
v4l2_mpeg_cx2341x_video_luma_spatial_filter_type \
v4l2_mpeg_cx2341x_video_median_filter_type \
v4l2_mpeg_cx2341x_video_spatial_filter_mode \
v4l2_mpeg_cx2341x_video_temporal_filter_mode \
v4l2_mpeg_stream_type \
v4l2_mpeg_stream_vbi_fmt \
v4l2_mpeg_video_aspect \
v4l2_mpeg_video_bitrate_mode \
v4l2_mpeg_video_encoding \
v4l2_power_line_frequency \
v4l2_priority \
v4l2_tuner_type \
v4l2_preemphasis \
STRUCTS = \
v4l2_audio \
v4l2_audioout \
v4l2_buffer \
v4l2_capability \
v4l2_captureparm \
v4l2_clip \
v4l2_control \
v4l2_crop \
v4l2_cropcap \
v4l2_dbg_chip_ident \
v4l2_dbg_match \
v4l2_dbg_register \
v4l2_enc_idx \
v4l2_enc_idx_entry \
v4l2_encoder_cmd \
v4l2_ext_control \
v4l2_ext_controls \
v4l2_fmtdesc \
v4l2_format \
v4l2_fract \
v4l2_framebuffer \
v4l2_frequency \
v4l2_frmival_stepwise \
v4l2_frmivalenum \
v4l2_frmsize_discrete \
v4l2_frmsize_stepwise \
v4l2_frmsizeenum \
v4l2_hw_freq_seek \
v4l2_input \
v4l2_jpegcompression \
v4l2_modulator \
v4l2_mpeg_vbi_fmt_ivtv \
v4l2_output \
v4l2_outputparm \
v4l2_pix_format \
v4l2_queryctrl \
v4l2_querymenu \
v4l2_rect \
v4l2_requestbuffers \
v4l2_sliced_vbi_cap \
v4l2_sliced_vbi_data \
v4l2_sliced_vbi_format \
v4l2_standard \
v4l2_streamparm \
v4l2_timecode \
v4l2_tuner \
v4l2_vbi_format \
v4l2_window \
ERRORS = \
EACCES \
EAGAIN \
EBADF \
EBUSY \
EFAULT \
EIO \
EINTR \
EINVAL \
ENFILE \
ENOMEM \
ENOSPC \
ENOTTY \
ENXIO \
EMFILE \
EPERM \
ERANGE \
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\)/\1v4l2_mpeg_cx2341x_video_\2<\/link>/g" \
-e "s/\(\(enum\|struct\) *\)\(v4l2_[a-zA-Z0-9_]*\)/\1\3<\/link>/g" \
-e "s/\(V4L2_PIX_FMT_[A-Z0-9_]\+\) /\1<\/link> /g" \
-e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
-e "s/\(linkend\=\"\)v4l2\-mpeg\-vbi\-ITV0/\1v4l2-mpeg-vbi-itv0-1/g"
.PHONY: links
$(SGMLS): links
$(PDFPICS): links
$(GIFPICS): links
links::
-rm v4l dvb
ln -sf ../linux/Documentation/DocBook/media.tmpl media.xml
ln -sf ../linux/Documentation/DocBook/v4l .
ln -sf ../linux/Documentation/DocBook/dvb .
v4l/libv4l-fmt.xml: ../v4l2-apps/libv4l/libv4lconvert/*.c Makefile
cat ../v4l2-apps/libv4l/libv4lconvert/*.c| \
perl -ne 'if (m/(V4L2_PIX_FMT_[^\s\;\\)\,:]+)/) { printf "$$1,\n"; };' \
|sort|uniq| \
sed -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" > $@
v4l/capture.c.xml: ../v4l2-apps/test/capture-example.c Makefile
echo "" > $@
expand --tabs=8 < $< | \
sed $(ESCAPE) $(DOCUMENTED) | \
sed 's/i\.e\./&ie;/' >> $@
echo "" >> $@
v4l/v4l2grab.c.xml: ../v4l2-apps/test/v4l2grab.c Makefile
echo "" > $@
expand --tabs=8 < $< | \
sed $(ESCAPE) $(DOCUMENTED) | \
sed 's/i\.e\./&ie;/' >> $@
echo "" >> $@
v4l/keytable.c.xml: ../v4l2-apps/util/keytable.c Makefile
echo "" > $@
expand --tabs=8 < $< | \
sed $(ESCAPE) $(DOCUMENTED) | \
sed 's/i\.e\./&ie;/' >> $@
echo "" >> $@
v4l/videodev2.h.xml: ../linux/include/linux/videodev2.h Makefile
echo "" > $@
expand --tabs=8 < $< | \
sed $(ESCAPE) $(DOCUMENTED) | \
sed 's/i\.e\./&ie;/' >> $@
echo "" >> $@
checks: $(SGMLS)
# Warn about FOO-BAR which should be
# &FOO-BAR; or FOO_BAR.
(! grep '>[A-Z]+-[A-Z-]+<' $(V4L_SGMLS))
# Don't end a refpurpose blob with a period.
(! grep '\.' $(V4L_SGMLS))
# Catch typos in error code names.
errs=`grep '[^<]\+' $(V4L_SGMLS) | \
sed 's/.*//;s/<\/errorcode>.*//' | sort -u` ; \
for err in $$errs; do \
if ! echo $(ERRORS) | grep -q $$err ; then \
echo Unknown error code $$err ; exit 1 ; \
fi ; \
done
# Use the respective entities instead.
for abbrev in "e\\.g\\." "i\\.e\\." "i2c" ; do \
grep "[^a-z&]$$abbrev[^a-z.;-]" $(V4L_SGMLS) | \
grep -v -E "(ENTITY|videodev2\.h)" && exit 1 ; \
done ; \
exit 0
# We're generating these entities to avoid typos, to enforce consistent
# naming, an to be warned about missing items (Jade screams bloody murder
# if references are dangling).
media-entities.tmpl: Makefile $(SGMLS)
echo "" >$@
echo -e "\n" >>$@
for ident in $(FUNCS) ; do \
entity=`echo $$ident | tr _ -` ; \
echo "$$ident()\">" \
>>$@ ; \
done
echo -e "\n" >>$@
for ident in $(IOCTLS) ; do \
entity=`echo $$ident | tr _ -` ; \
id=`grep "$$ident" v4l/vidioc-*.xml |sed -r s,"^[^\/]*/",, | sed 's/\.xml.*//'` ; \
echo "$$ident\">" \
>>$@ ; \
done
echo -e "\n" >>$@
for ident in $(TYPES) ; do \
entity=`echo $$ident | tr _ -` ; \
echo "$$ident\">" >>$@ ; \
done
echo -e "\n" >>$@
for ident in $(ENUMS) ; do \
entity=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -` ; \
echo "$$ident\">" >>$@ ; \
done
echo -e "\n" >>$@
for ident in $(STRUCTS) ; do \
entity=`echo $$ident | tr _ -` ; \
echo "$$ident\">" >>$@ ; \
done
echo -e "\n" >>$@
for ident in $(ERRORS) ; do \
echo "$$ident" \
"error code\">" >>$@ ; \
done
echo -e "\n" >>$@
for file in $(SGMLS) ; do \
entity=`echo "$$file" | sed $(FILENAME) -e s/"^([^-]*)"/sub\1/` ; \
if ! echo "$$file" | \
grep -q -E -e '^(func|vidioc|pixfmt)-' ; then \
echo "" >>$@ ; \
fi ; \
done
echo -e "\n" >>$@
for file in $(SGMLS) ; do \
if echo "$$file" | \
grep -q -E -e '(func|vidioc|pixfmt)-' ; then \
entity=`echo "$$file" |sed $(FILENAME)` ; \
echo "" >>$@ ; \
fi ; \
done
mv $@ ../linux/Documentation/DocBook
ln -sf ../linux/Documentation/DocBook/$@ $@
# Jade can auto-generate a list-of-tables, which includes all structs,
# but we only want data types, all types, and sorted please.
media-indices.tmpl: Makefile $(SGMLS)
echo "" >$@
echo -e "\nList of Types" >>$@
for ident in $(TYPES) ; do \
id=`echo $$ident | tr _ -` ; \
echo "$$ident" >>$@ ; \
done
for ident in $(ENUMS) ; do \
id=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -`; \
echo "enum $$ident" >>$@ ; \
done
for ident in $(STRUCTS) ; do \
id=`echo $$ident | tr _ -` ; \
echo "struct $$ident" >>$@ ; \
done
echo "" >>$@
mv $@ ../linux/Documentation/DocBook
ln -sf ../linux/Documentation/DocBook/$@ $@
# HTML version.
html-build.stamp: Makefile checks $(SGMLS) $(GIFPICS)
rm -rf media
if which xmlto >/dev/null ; then \
xmlto xhtml $(WARN) $(CUSTOM_HTML_XMLTO) -o media media.xml ; \
elif which docbook2html >/dev/null ; then \
export DCL="--dcl `find /usr/share/sgml -name xml.dcl |head -1`"; \
docbook2html $(WARN) $$DCL $(CUSTOM_HTML) --output media media.xml ; \
else \
export DCL="--dcl `find /usr/share/sgml -name xml.dcl |head -1`"; \
db2html $(WARN) $$DCL $(CUSTOM_HTML) --output media media.xml ; \
fi
cp $(GIFPICS) media/
cd media ; \
test -e index.html || ln -s book1.htm index.html ; \
test -e capture-example.html || \
ln -s `grep -l getopt_long *.htm` capture-example.html
chmod a+rX -R media
touch html-build.stamp
# For online version. When you have a dial-up connection a single file
# is more convenient than clicking through dozens of pages.
html-single-build.stamp: Makefile checks $(SGMLS) $(GIFPICS)
rm -rf media-single
if which xmlto >/dev/null ; then \
xmlto html-nochunks $(WARN) $(CUSTOM_HTML_XMLTO) -o media-single media.xml ; \
elif which docbook2html >/dev/null ; then \
export DCL="--dcl `find /usr/share/sgml -name xml.dcl |head -1`"; \
docbook2html $$DCL $(WARN) $(CUSTOM_HTML) --nochunks \
--output media-single media.xml ; \
else \
export DCL="--dcl `find /usr/share/sgml -name xml.dcl |head -1`"; \
db2html $$DCL $(WARN) $(CUSTOM_HTML) --nochunks \
--output media-single media.xml ; \
fi
cp $(GIFPICS) media-single/
chmod a+rX -R media-single
touch html-single-build.stamp
# For printing.
pdf-build.stamp: Makefile checks $(SGMLS) $(PDFPICS)
if which db2pdf >/dev/null ; then \
export DCL="--dcl `find /usr/share/sgml -name xml.dcl|head -1`"; \
db2pdf $$DCL $(WARN) $(CUSTOM_PRINT) media.xml ; \
elif which xmlto >/dev/null ; then \
xmlto pdf $(WARN) $(CUSTOM_HTML_XMLTO) -o media media.xml ; \
else \
export DCL="--dcl `find /usr/share/sgml -name xml.dcl |head -1`"; \
docbook2pdf $$DCL $(WARN) $(CUSTOM_PRINT) media.xml ; \
fi
touch pdf-build.stamp
# For man
man-build.stamp: Makefile checks $(SGMLS) $(PDFPICS)
xmlto man $(WARN) $(CUSTOM_HTML_XMLTO) -o man media.xml
# Example.
capture: ../v4l2-apps/test/capture-example.c
gcc $^ -o $@
distclean clean:
rm -f *.stamp
rm -f videodev2.h.xml
rm -f capture.c.xml
rm -f v4l2grab.c.xml
rm -f keytable.c.xml
rm -f media.aux media.log media.out
rm -f capture
rm -f media-indices.tmpl media-entities.tmpl
rm -rf media media-single media.pdf
rm -rf media.xml v4l dvb