]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - Documentation/DocBook/media/Makefile
[media] DocBook: Remove comments before parsing enum values
[karo-tx-linux.git] / Documentation / DocBook / media / Makefile
1 ###
2 # Media build rules - Auto-generates media contents/indexes and *.h xml's
3 #
4
5 SHELL=/bin/bash
6
7 MEDIA_OBJ_DIR=$(objtree)/Documentation/DocBook/
8 MEDIA_SRC_DIR=$(srctree)/Documentation/DocBook/media
9
10 MEDIA_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
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))
24
25 PHONY += cleanmediadocs
26
27 cleanmediadocs:
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
36 V4L_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
42 DVB_SGMLS = \
43         $(shell ls $(MEDIA_SRC_DIR)/dvb/*.xml|perl -ne 'print "$$1 " if (m,.*/(.*)\n,)')
44
45 MEDIA_SGMLS =  $(addprefix ./,$(V4L_SGMLS)) $(addprefix ./,$(DVB_SGMLS)) $(addprefix ./,$(MEDIA_TEMP))
46
47 FUNCS = \
48         close \
49         ioctl \
50         mmap \
51         munmap \
52         open \
53         poll \
54         read \
55         select \
56         write \
57
58 IOCTLS = \
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
69 DEFINES = \
70         $(shell perl -ne 'print "$$1 " if /\#define\s+(DTV_[^\s]+)\s+/' $(srctree)/include/uapi/linux/dvb/frontend.h) \
71
72 TYPES = \
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)
75
76 ENUMS = \
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)
88
89 ENUM_DEFS = \
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/audio.h \
92                 $(srctree)/include/uapi/linux/dvb/ca.h \
93                 $(srctree)/include/uapi/linux/dvb/dmx.h \
94                 $(srctree)/include/uapi/linux/dvb/frontend.h \
95                 $(srctree)/include/uapi/linux/dvb/net.h \
96                 $(srctree)/include/uapi/linux/dvb/video.h)
97
98 STRUCTS = \
99         $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/videodev2.h) \
100         $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s\{]+)\s*/)' $(srctree)/include/uapi/linux/dvb/audio.h) \
101         $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/ca.h) \
102         $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/dmx.h) \
103         $(shell perl -ne 'print "$$1 " if (!/dtv\_cmds\_h/ && /^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/frontend.h) \
104         $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/ && !/_old/)' $(srctree)/include/uapi/linux/dvb/net.h) \
105         $(shell perl -ne 'print "$$1 " if (/^struct\s+([^\s]+)\s+/)' $(srctree)/include/uapi/linux/dvb/video.h) \
106         $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/media.h) \
107         $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-subdev.h) \
108         $(shell perl -ne 'print "$$1 " if /^struct\s+([^\s]+)\s+/' $(srctree)/include/uapi/linux/v4l2-mediabus.h)
109
110 ERRORS = \
111         E2BIG \
112         EACCES \
113         EAGAIN \
114         EBADF \
115         EBADFD \
116         EBADR \
117         EBADRQC \
118         EBUSY \
119         ECHILD \
120         ECONNRESET \
121         EDEADLK \
122         EDOM \
123         EEXIST \
124         EFAULT \
125         EFBIG \
126         EILSEQ \
127         EINIT \
128         EINPROGRESS \
129         EINTR \
130         EINVAL \
131         EIO \
132         EMFILE \
133         ENFILE \
134         ENOBUFS \
135         ENODATA \
136         ENODEV \
137         ENOENT \
138         ENOIOCTLCMD \
139         ENOMEM \
140         ENOSPC \
141         ENOSR \
142         ENOSYS \
143         ENOTSUP \
144         ENOTSUPP \
145         ENOTTY \
146         ENXIO \
147         EOPNOTSUPP \
148         EOVERFLOW \
149         EPERM \
150         EPIPE \
151         EPROTO \
152         ERANGE \
153         EREMOTE \
154         EREMOTEIO \
155         ERESTART \
156         ERESTARTSYS \
157         ESHUTDOWN \
158         ESPIPE \
159         ETIME \
160         ETIMEDOUT \
161         EUSERS \
162         EWOULDBLOCK \
163         EXDEV \
164
165 ESCAPE = \
166         -e "s/&/\\&amp;/g" \
167         -e "s/</\\&lt;/g" \
168         -e "s/>/\\&gt;/g"
169
170 FILENAME = \
171         -e s,"^[^\/]*/",, \
172         -e s/"\\.xml"// \
173         -e s/"\\.tmpl"// \
174         -e s/\\\./-/g \
175         -e s/"^func-"// \
176         -e s/"^pixfmt-"// \
177         -e s/"^vidioc-"//
178
179 # Generate references to these structs in videodev2.h.xml.
180 DOCUMENTED = \
181         -e "s/\(enum *\)v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1<link linkend=\"\2\">v4l2_mpeg_cx2341x_video_\2<\/link>/g" \
182         -e "s/\(\(enum\|struct\) *\)\(v4l2_[a-zA-Z0-9_]*\)/\1<link linkend=\"\3\">\3<\/link>/g" \
183         -e "s/\(V4L2_PIX_FMT_[A-Z0-9_]\+\)\(\s\+v4l2_fourcc\)/<link linkend=\"\1\">\1<\/link>\2/g" \
184         -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
185         -e "s/v4l2\-mpeg\-vbi\-ITV0/v4l2-mpeg-vbi-itv0-1/g"
186
187 DVB_DOCUMENTED = \
188         -e "s,\(struct\s\+\)\([a-z0-9_]\+\)\(\s\+{\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
189         -e "s,\(}\s\+\)\([a-z0-9_]\+_t\+\),\1\<link linkend=\"\2\">\2\<\/link\>,g" \
190         -e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+[0-9]\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
191         -e "s,<link\s\+linkend=\".*\">\(DTV_IOCTL_MAX_MSGS\|dtv_cmds_h\|__.*_old\)<\/link>,\1,g" \
192         -e ":a;s/\(linkend=\".*\)_\(.*\">\)/\1-\2/;ta" \
193         -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" \
194         -e "s,DTV-ISDBT-LAYER[A-C],DTV-ISDBT-LAYER,g" \
195         -e "s,\(define\s\+\)\([A-Z0-9_]\+\)\(\s\+_IO\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
196         -e "s,\(define\s\+\)\(DTV_[A-Z0-9_]\+\)\(\s\+\),\1\<link linkend=\"\2\">\2\<\/link\>\3,g" \
197         -e "s,<link\s\+linkend=\".*\">\(__.*_OLD\)<\/link>,\1,g" \
198         -e "s/\(linkend\=\"\)FE_SET_PROPERTY/\1FE_GET_PROPERTY/g" \
199         -e "s,<link\s\+linkend=\".*\">\(DTV_ISDBS_TS_ID_LEGACY\|DTV_MAX_COMMAND\|DTV_IOCTL_MAX_MSGS\)<\/link>,\1,g" \
200
201 #
202 # Media targets and dependencies
203 #
204
205 install_media_images = \
206         $(Q)-cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/*.svg $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api
207
208 $(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64
209         $(Q)base64 -d $< >$@
210
211 $(MEDIA_OBJ_DIR)/v4l2.xml: $(OBJIMGFILES)
212         @$($(quiet)gen_xml)
213         @(ln -sf `cd $(MEDIA_SRC_DIR) && /bin/pwd`/v4l/*xml $(MEDIA_OBJ_DIR)/)
214         @(ln -sf `cd $(MEDIA_SRC_DIR) && /bin/pwd`/dvb/*xml $(MEDIA_OBJ_DIR)/)
215
216 $(MEDIA_OBJ_DIR)/videodev2.h.xml: $(srctree)/include/uapi/linux/videodev2.h $(MEDIA_OBJ_DIR)/v4l2.xml
217         @$($(quiet)gen_xml)
218         @(                                      \
219         echo "<programlisting>") > $@
220         @(                                      \
221         expand --tabs=8 < $< |                  \
222           sed $(ESCAPE) $(DOCUMENTED) |         \
223           sed 's/i\.e\./&ie;/') >> $@
224         @(                                      \
225         echo "</programlisting>") >> $@
226
227 $(MEDIA_OBJ_DIR)/audio.h.xml: $(srctree)/include/uapi/linux/dvb/audio.h $(MEDIA_OBJ_DIR)/v4l2.xml
228         @$($(quiet)gen_xml)
229         @(                                      \
230         echo "<programlisting>") > $@
231         @(                                      \
232         expand --tabs=8 < $< |                  \
233           sed $(ESCAPE) $(DVB_DOCUMENTED) |     \
234           sed 's/i\.e\./&ie;/') >> $@
235         @(                                      \
236         echo "</programlisting>") >> $@
237
238 $(MEDIA_OBJ_DIR)/ca.h.xml: $(srctree)/include/uapi/linux/dvb/ca.h $(MEDIA_OBJ_DIR)/v4l2.xml
239         @$($(quiet)gen_xml)
240         @(                                      \
241         echo "<programlisting>") > $@
242         @(                                      \
243         expand --tabs=8 < $< |                  \
244           sed $(ESCAPE) $(DVB_DOCUMENTED) |     \
245           sed 's/i\.e\./&ie;/') >> $@
246         @(                                      \
247         echo "</programlisting>") >> $@
248
249 $(MEDIA_OBJ_DIR)/dmx.h.xml: $(srctree)/include/uapi/linux/dvb/dmx.h $(MEDIA_OBJ_DIR)/v4l2.xml
250         @$($(quiet)gen_xml)
251         @(                                      \
252         echo "<programlisting>") > $@
253         @(                                      \
254         expand --tabs=8 < $< |                  \
255           sed $(ESCAPE) $(DVB_DOCUMENTED) |     \
256           sed 's/i\.e\./&ie;/') >> $@
257         @(                                      \
258         echo "</programlisting>") >> $@
259
260 $(MEDIA_OBJ_DIR)/frontend.h.xml: $(srctree)/include/uapi/linux/dvb/frontend.h $(MEDIA_OBJ_DIR)/v4l2.xml
261         @$($(quiet)gen_xml)
262         @(                                      \
263         echo "<programlisting>") > $@
264         @(                                      \
265         for ident in $(ENUM_DEFS) ; do          \
266           entity=`echo $$ident | tr _ -` ;      \
267           r="$$r s/([^\w\-])$$ident([^\w\-])/\1\&$$entity\;\2/g;";\
268         done;                                   \
269         expand --tabs=8 < $< |                  \
270           sed $(ESCAPE) $(DVB_DOCUMENTED) |     \
271           sed 's/i\.e\./&ie;/' |                \
272           perl -ne "$$r print $$_;") >> $@
273         @(                                      \
274         echo "</programlisting>") >> $@
275
276 $(MEDIA_OBJ_DIR)/net.h.xml: $(srctree)/include/uapi/linux/dvb/net.h $(MEDIA_OBJ_DIR)/v4l2.xml
277         @$($(quiet)gen_xml)
278         @(                                      \
279         echo "<programlisting>") > $@
280         @(                                      \
281         expand --tabs=8 < $< |                  \
282           sed $(ESCAPE) $(DVB_DOCUMENTED) |     \
283           sed 's/i\.e\./&ie;/') >> $@
284         @(                                      \
285         echo "</programlisting>") >> $@
286
287 $(MEDIA_OBJ_DIR)/video.h.xml: $(srctree)/include/uapi/linux/dvb/video.h $(MEDIA_OBJ_DIR)/v4l2.xml
288         @$($(quiet)gen_xml)
289         @(                                      \
290         echo "<programlisting>") > $@
291         @(                                      \
292         expand --tabs=8 < $< |                  \
293           sed $(ESCAPE) $(DVB_DOCUMENTED) |     \
294           sed 's/i\.e\./&ie;/') >> $@
295         @(                                      \
296         echo "</programlisting>") >> $@
297
298 $(MEDIA_OBJ_DIR)/media-entities.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml
299         @$($(quiet)gen_xml)
300         @(                                                              \
301         echo "<!-- Generated file! Do not edit. -->") >$@
302         @(                                                              \
303         echo -e "\n<!-- Functions -->") >>$@
304         @(                                                              \
305         for ident in $(FUNCS) ; do                                      \
306           entity=`echo $$ident | tr _ -` ;                              \
307           echo "<!ENTITY func-$$entity \"<link"                         \
308             "linkend='func-$$entity'><function>$$ident()</function></link>\">" \
309           >>$@ ;                                                        \
310         done)
311         @(                                                              \
312         echo -e "\n<!-- Ioctls -->") >>$@
313         @(                                                              \
314         for ident in `echo $(IOCTLS) | sed -e "s,VIDIOC_RESERVED,,"`; do\
315           entity=`echo $$ident | tr _ -` ;                              \
316           id=`grep -e "<refname>$$ident" -e "<section id=\"$$ident\"" $$(find $(MEDIA_SRC_DIR) -name *.xml -type f)| sed -r s,"^.*/(.*).xml.*","\1",` ; \
317           if [ "$$id" != "" ]; then echo "<!ENTITY $$entity \"<link"    \
318             "linkend='$$id'><constant>$$ident</constant></link>\">"     \
319           >>$@ ; else                                                   \
320                 echo "Warning: undocumented ioctl: $$ident. Please document it at the media DocBook!" >&2;      \
321           fi;                                                           \
322         done)
323         @(                                                              \
324         echo -e "\n<!-- Defines -->") >>$@
325         @(                                                              \
326         for ident in $(DEFINES) ; do                                    \
327           entity=`echo $$ident | tr _ -` ;                              \
328           echo "<!ENTITY $$entity \"<link"                              \
329             "linkend='$$entity'><constant>$$ident</constant></link>\">" \
330           >>$@ ;                                                        \
331         done)
332         @(                                                              \
333         echo -e "\n<!-- Types -->") >>$@
334         @(                                                              \
335         for ident in $(TYPES) ; do                                      \
336           entity=`echo $$ident | tr _ -` ;                              \
337           echo "<!ENTITY $$entity \"<link"                              \
338             "linkend='$$entity'>$$ident</link>\">" >>$@ ;               \
339         done)
340         @(                                                              \
341         echo -e "\n<!-- Enums -->") >>$@
342         @(                                                              \
343         for ident in $(ENUMS) ; do                                      \
344           entity=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -` ; \
345           echo "<!ENTITY $$entity \"enum&nbsp;<link"                    \
346             "linkend='$$entity'>$$ident</link>\">" >>$@ ;               \
347         done)
348         @(                                                              \
349         echo -e "\n<!-- Enum definitions -->") >>$@
350         @(                                                              \
351         for ident in $(ENUM_DEFS) ; do                                  \
352           entity=`echo $$ident | tr _ -` ;                              \
353           echo "<!ENTITY $$entity \"<link"                              \
354             "linkend='$$entity'><constant>$$ident</constant></link>\">" \
355           >>$@ ;                                                        \
356         done)
357         @(                                                              \
358         echo -e "\n<!-- Structures -->") >>$@
359         @(                                                              \
360         for ident in $(STRUCTS) ; do                                    \
361           entity=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
362           echo "<!ENTITY $$entity \"struct&nbsp;<link"                  \
363             "linkend='$$entity'>$$ident</link>\">" >>$@ ;               \
364         done)
365         @(                                                              \
366         echo -e "\n<!-- Error Codes -->") >>$@
367         @(                                                              \
368         for ident in $(ERRORS) ; do                                     \
369           echo "<!ENTITY $$ident \"<errorcode>$$ident</errorcode>"      \
370             "error code\">" >>$@ ;                                      \
371         done)
372         @(                                                              \
373         echo -e "\n<!-- Subsections -->") >>$@
374         @(                                                              \
375         for file in $(MEDIA_SGMLS) ; do                                 \
376           entity=`echo "$$file" | sed $(FILENAME) -e s/"^([^-]*)"/sub\1/` ; \
377           if ! echo "$$file" |                                          \
378             grep -q -E -e '^(func|vidioc|pixfmt)-' ; then               \
379             echo "<!ENTITY sub-$$entity SYSTEM \"$$file\">" >>$@ ;      \
380           fi ;                                                          \
381         done)
382         @(                                                              \
383         echo -e "\n<!-- Function Reference -->") >>$@
384         @(                                                              \
385         for file in $(MEDIA_SGMLS) ; do                                 \
386           if echo "$$file" |                                            \
387             grep -q -E -e '(func|vidioc|pixfmt)-' ; then                \
388             entity=`echo "$$file" |sed $(FILENAME)` ;                   \
389             echo "<!ENTITY $$entity SYSTEM \"$$file\">" >>$@ ;  \
390           fi ;                                                          \
391         done)
392
393 # Jade can auto-generate a list-of-tables, which includes all structs,
394 # but we only want data types, all types, and sorted please.
395 $(MEDIA_OBJ_DIR)/media-indices.tmpl: $(MEDIA_OBJ_DIR)/v4l2.xml
396         @$($(quiet)gen_xml)
397         @(                                                              \
398         echo "<!-- Generated file! Do not edit. -->") >$@
399         @(                                                              \
400         echo -e "\n<index><title>List of Types</title>") >>$@
401         @(                                                              \
402         for ident in $(TYPES) ; do                                      \
403           id=`echo $$ident | tr _ -` ;                                  \
404           echo "<indexentry><primaryie><link"                           \
405             "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
406         done)
407         @(                                                              \
408         for ident in $(ENUMS) ; do                                      \
409           id=`echo $$ident | sed -e "s/v4l2_mpeg_cx2341x_video_\([a-z]*_spatial_filter_type\)/\1/" | tr _ -`; \
410           echo "<indexentry><primaryie>enum&nbsp;<link"                 \
411             "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
412         done)
413         @(                                                              \
414         for ident in $(STRUCTS) ; do                                    \
415           id=`echo $$ident | tr _ - | sed s/v4l2-mpeg-vbi-ITV0/v4l2-mpeg-vbi-itv0-1/g` ; \
416           echo "<indexentry><primaryie>struct&nbsp;<link"               \
417             "linkend='$$id'>$$ident</link></primaryie></indexentry>" >>$@ ; \
418         done)
419         @(                                                              \
420         echo "</index>") >>$@
421