PageRenderTime 52ms CodeModel.GetById 31ms app.highlight 18ms RepoModel.GetById 0ms app.codeStats 0ms

/Documentation/DocBook/media/Makefile

https://github.com/eatenbyagrue/linux
Makefile | 386 lines | 339 code | 35 blank | 12 comment | 47 complexity | b9a9803ff1d4eb8dd44aaf48964fbd6c MD5 | raw file
  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 `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/linux/videodev2.h) \
 60	$(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) \
 63	$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/frontend.h) \
 64	$(shell perl -ne 'print "$$1 " if /\#define\s+([A-Z][^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/net.h) \
 65	$(shell perl -ne 'print "$$1 " if /\#define\s+([^\s]+)\s+_IO/' $(srctree)/include/linux/dvb/video.h) \
 66	$(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 = \
 75	$(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)
 77
 78ENUMS = \
 79	$(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/videodev2.h) \
 80	$(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) \
 83	$(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/frontend.h) \
 84	$(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/net.h) \
 85	$(shell perl -ne 'print "$$1 " if /^enum\s+([^\s]+)\s+/' $(srctree)/include/linux/dvb/video.h) \
 86	$(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) \
 92	$(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) \
 95	$(shell perl -ne 'print "$$1 " if (!/dtv\_cmds\_h/ && /^struct\s+([^\s]+)\s+/)' $(srctree)/include/linux/dvb/frontend.h) \
 96	$(shell perl -ne 'print "$$1 " if (/^struct\s+([A-Z][^\s]+)\s+/)' $(srctree)/include/linux/dvb/net.h) \
 97	$(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/linux/dvb/video.h) \
 98	$(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	E2BIG \
104	EACCES \
105	EAGAIN \
106	EBADF \
107	EBADFD \
108	EBADR \
109	EBADRQC \
110	EBUSY \
111	ECHILD \
112	ECONNRESET \
113	EDEADLK \
114	EDOM \
115	EEXIST \
116	EFAULT \
117	EFBIG \
118	EILSEQ \
119	EINIT \
120	EINPROGRESS \
121	EINTR \
122	EINVAL \
123	EIO \
124	EMFILE \
125	ENFILE \
126	ENOBUFS \
127	ENODATA \
128	ENODEV \
129	ENOENT \
130	ENOIOCTLCMD \
131	ENOMEM \
132	ENOSPC \
133	ENOSR \
134	ENOSYS \
135	ENOTSUP \
136	ENOTSUPP \
137	ENOTTY \
138	ENXIO \
139	EOPNOTSUPP \
140	EOVERFLOW \
141	EPERM \
142	EPIPE \
143	EPROTO \
144	ERANGE \
145	EREMOTE \
146	EREMOTEIO \
147	ERESTART \
148	ERESTARTSYS \
149	ESHUTDOWN \
150	ESPIPE \
151	ETIME \
152	ETIMEDOUT \
153	EUSERS \
154	EWOULDBLOCK \
155	EXDEV \
156
157ESCAPE = \
158	-e "s/&/\\&/g" \
159	-e "s/</\\&lt;/g" \
160	-e "s/>/\\&gt;/g"
161
162FILENAME = \
163	-e s,"^[^\/]*/",, \
164	-e s/"\\.xml"// \
165	-e s/"\\.tmpl"// \
166	-e s/\\\./-/g \
167	-e s/"^func-"// \
168	-e s/"^pixfmt-"// \
169	-e s/"^vidioc-"//
170
171# Generate references to these structs in videodev2.h.xml.
172DOCUMENTED = \
173	-e "s/\(enum *\)v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1<link linkend=\"\2\">v4l2_mpeg_cx2341x_video_\2<\/link>/g" \
174	-e "s/\(\(enum\|struct\) *\)\(v4l2_[a-zA-Z0-9_]*\)/\1<link linkend=\"\3\">\3<\/link>/g" \
175	-e "s/\(V4L2_PIX_FMT_[A-Z0-9_]\+\) /<link linkend=\"\1\">\1<\/link> /g" \
176	-e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
177	-e "s/v4l2\-mpeg\-vbi\-ITV0/v4l2-mpeg-vbi-itv0-1/g"
178
179DVB_DOCUMENTED = \
180	-e "s/\(linkend\=\"\)FE_SET_PROPERTY/\1FE_GET_PROPERTY/g" \
181	-e "s,\(struct\s\+\)\([a-z0-9_]\+\)\(\s\+{\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
182	-e "s,\(}\s\+\)\([a-z0-9_]\+_t\+\),\1\<link linkend=\"\2\">\2\<\/link\>,g" \
183	-e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+[0-9]\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
184	-e "s,<link\s\+linkend=\".*\">\(DTV_IOCTL_MAX_MSGS\|dtv_cmds_h\|__.*_old\)<\/link>,\1,g" \
185	-e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
186	-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" \
187	-e "s,DTV-ISDBT-LAYER[A-C],DTV-ISDBT-LAYER,g" \
188	-e "s,\(define\s\+\)\([A-Z0-9_]\+\)\(\s\+_IO\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
189	-e "s,<link\s\+linkend=\".*\">\(__.*_OLD\)<\/link>,\1,g" \
190
191#
192# Media targets and dependencies
193#
194
195install_media_images = \
196	$(Q)cp $(OBJIMGFILES) $(MEDIA_OBJ_DIR)/media_api
197
198$(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64
199	$(Q)base64 -d $< >$@
200
201$(MEDIA_OBJ_DIR)/v4l2.xml: $(OBJIMGFILES)
202	@$($(quiet)gen_xml)
203	@(ln -sf $(MEDIA_SRC_DIR)/v4l/*xml $(MEDIA_OBJ_DIR)/)
204	@(ln -sf $(MEDIA_SRC_DIR)/dvb/*xml $(MEDIA_OBJ_DIR)/)
205
206$(MEDIA_OBJ_DIR)/videodev2.h.xml: $(srctree)/include/linux/videodev2.h $(MEDIA_OBJ_DIR)/v4l2.xml
207	@$($(quiet)gen_xml)
208	@(					\
209	echo "<programlisting>") > $@
210	@(					\
211	expand --tabs=8 < $< |			\
212	  sed $(ESCAPE) $(DOCUMENTED) |		\
213	  sed 's/i\.e\./&ie;/') >> $@
214	@(					\
215	echo "</programlisting>") >> $@
216
217$(MEDIA_OBJ_DIR)/audio.h.xml: $(srctree)/include/linux/dvb/audio.h $(MEDIA_OBJ_DIR)/v4l2.xml
218	@$($(quiet)gen_xml)
219	@(					\
220	echo "<programlisting>") > $@
221	@(					\
222	expand --tabs=8 < $< |			\
223	  sed $(ESCAPE) $(DVB_DOCUMENTED) |	\
224	  sed 's/i\.e\./&ie;/') >> $@
225	@(					\
226	echo "</programlisting>") >> $@
227
228$(MEDIA_OBJ_DIR)/ca.h.xml: $(srctree)/include/linux/dvb/ca.h $(MEDIA_OBJ_DIR)/v4l2.xml
229	@$($(quiet)gen_xml)
230	@(					\
231	echo "<programlisting>") > $@
232	@(					\
233	expand --tabs=8 < $< |			\
234	  sed $(ESCAPE) $(DVB_DOCUMENTED) |	\
235	  sed 's/i\.e\./&ie;/') >> $@
236	@(					\
237	echo "</programlisting>") >> $@
238
239$(MEDIA_OBJ_DIR)/dmx.h.xml: $(srctree)/include/linux/dvb/dmx.h $(MEDIA_OBJ_DIR)/v4l2.xml
240	@$($(quiet)gen_xml)
241	@(					\
242	echo "<programlisting>") > $@
243	@(					\
244	expand --tabs=8 < $< |			\
245	  sed $(ESCAPE) $(DVB_DOCUMENTED) |	\
246	  sed 's/i\.e\./&ie;/') >> $@
247	@(					\
248	echo "</programlisting>") >> $@
249
250$(MEDIA_OBJ_DIR)/frontend.h.xml: $(srctree)/include/linux/dvb/frontend.h $(MEDIA_OBJ_DIR)/v4l2.xml
251	@$($(quiet)gen_xml)
252	@(					\
253	echo "<programlisting>") > $@
254	@(					\
255	expand --tabs=8 < $< |			\
256	  sed $(ESCAPE) $(DVB_DOCUMENTED) |	\
257	  sed 's/i\.e\./&ie;/') >> $@
258	@(					\
259	echo "</programlisting>") >> $@
260
261$(MEDIA_OBJ_DIR)/net.h.xml: $(srctree)/include/linux/dvb/net.h $(MEDIA_OBJ_DIR)/v4l2.xml
262	@$($(quiet)gen_xml)
263	@(					\
264	echo "<programlisting>") > $@
265	@(					\
266	expand --tabs=8 < $< |			\
267	  sed $(ESCAPE) $(DVB_DOCUMENTED) |	\
268	  sed 's/i\.e\./&ie;/') >> $@
269	@(					\
270	echo "</programlisting>") >> $@
271
272$(MEDIA_OBJ_DIR)/video.h.xml: $(srctree)/include/linux/dvb/video.h $(MEDIA_OBJ_DIR)/v4l2.xml
273	@$($(quiet)gen_xml)
274	@(					\
275	echo "<programlisting>") > $@
276	@(					\
277	expand --tabs=8 < $< |			\
278	  sed $(ESCAPE) $(DVB_DOCUMENTED) |	\
279	  sed 's/i\.e\./&ie;/') >> $@
280	@(					\
281	echo "</programlisting>") >> $@
282
283$(MEDIA_OBJ_DIR)/media-entities.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml
284	@$($(quiet)gen_xml)
285	@(								\
286	echo "<!-- Generated file! Do not edit. -->") >$@
287	@(								\
288	echo -e "\n<!-- Functions -->") >>$@
289	@(								\
290	for ident in $(FUNCS) ; do					\
291	  entity=`echo $$ident | tr _ -` ;				\
292	  echo "<!ENTITY func-$$entity \"<link"				\
293	    "linkend='func-$$entity'><function>$$ident()</function></link>\">" \
294	  >>$@ ;							\
295	done)
296	@(								\
297	echo -e "\n<!-- Ioctls -->") >>$@
298	@(								\
299	for ident in $(IOCTLS) ; do					\
300	  entity=`echo $$ident | tr _ -` ;				\
301	  id=`grep "<refname>$$ident" $(MEDIA_OBJ_DIR)/vidioc-*.xml | sed -r s,"^.*/(.*).xml.*","\1",` ; \
302	  echo "<!ENTITY $$entity \"<link"				\
303	    "linkend='$$id'><constant>$$ident</constant></link>\">"	\
304	  >>$@ ;							\
305	done)
306	@(								\
307	echo -e "\n<!-- Types -->") >>$@
308	@(								\
309	for ident in $(TYPES) ; do					\
310	  entity=`echo $$ident | tr _ -` ;				\
311	  echo "<!ENTITY $$entity \"<link"				\
312	    "linkend='$$entity'>$$ident</link>\">" >>$@ ;		\
313	done)
314	@(								\
315	echo -e "\n<!-- Enums -->") >>$@
316	@(								\
317	for ident in $(ENUMS) ; do					\
318	  entity=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -` ; \
319	  echo "<!ENTITY $$entity \"enum&nbsp;<link"			\
320	    "linkend='$$entity'>$$ident</link>\">" >>$@ ;		\
321	done)
322	@(								\
323	echo -e "\n<!-- Structures -->") >>$@
324	@(								\
325	for ident in $(STRUCTS) ; do					\
326	  entity=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
327	  echo "<!ENTITY $$entity \"struct&nbsp;<link"			\
328	    "linkend='$$entity'>$$ident</link>\">" >>$@ ;		\
329	done)
330	@(								\
331	echo -e "\n<!-- Error Codes -->") >>$@
332	@(								\
333	for ident in $(ERRORS) ; do					\
334	  echo "<!ENTITY $$ident \"<errorcode>$$ident</errorcode>"	\
335	    "error code\">" >>$@ ;					\
336	done)
337	@(								\
338	echo -e "\n<!-- Subsections -->") >>$@
339	@(								\
340	for file in $(MEDIA_SGMLS) ; do					\
341	  entity=`echo "$$file" | sed $(FILENAME) -e s/"^([^-]*)"/sub\1/` ; \
342	  if ! echo "$$file" |						\
343	    grep -q -E -e '^(func|vidioc|pixfmt)-' ; then		\
344	    echo "<!ENTITY sub-$$entity SYSTEM \"$$file\">" >>$@ ;	\
345	  fi ;								\
346	done)
347	@(								\
348	echo -e "\n<!-- Function Reference -->") >>$@
349	@(								\
350	for file in $(MEDIA_SGMLS) ; do					\
351	  if echo "$$file" |						\
352	    grep -q -E -e '(func|vidioc|pixfmt)-' ; then		\
353	    entity=`echo "$$file" |sed $(FILENAME)` ;			\
354	    echo "<!ENTITY $$entity SYSTEM \"$$file\">" >>$@ ;	\
355	  fi ;								\
356	done)
357
358# Jade can auto-generate a list-of-tables, which includes all structs,
359# but we only want data types, all types, and sorted please.
360$(MEDIA_OBJ_DIR)/media-indices.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml
361	@$($(quiet)gen_xml)
362	@(								\
363	echo "<!-- Generated file! Do not edit. -->") >$@
364	@(								\
365	echo -e "\n<index><title>List of Types</title>") >>$@
366	@(								\
367	for ident in $(TYPES) ; do					\
368	  id=`echo $$ident | tr _ -` ;					\
369	  echo "<indexentry><primaryie><link"				\
370	    "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
371	done)
372	@(								\
373	for ident in $(ENUMS) ; do					\
374	  id=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -`; \
375	  echo "<indexentry><primaryie>enum&nbsp;<link"			\
376	    "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
377	done)
378	@(								\
379	for ident in $(STRUCTS) ; do					\
380	  id=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
381	  echo "<indexentry><primaryie>struct&nbsp;<link"		\
382	    "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
383	done)
384	@(								\
385	echo "</index>") >>$@
386