1#! /bin/sh
2. "${srcdir=.}/init.sh"; path_prepend_ . ../src
3
4# Test checking of GCC internal format strings.
5
6cat <<\EOF > f-gi-2.data
7# Valid: %% doesn't count
8msgid  "abc%%def"
9msgstr "xyz"
10# Valid: %< doesn't count
11msgid  "abc%<def"
12msgstr "xyz"
13# Valid: %> doesn't count
14msgid  "abc%>def"
15msgstr "xyz"
16# Valid: %' doesn't count
17msgid  "abc%'def"
18msgstr "xyz"
19# Invalid: %m consumes err_no
20msgid  "abc%mdef"
21msgstr "xyz"
22# Invalid: %m consumes err_no
23msgid  "abc"
24msgstr "xyz%muvw"
25# Invalid: invalid msgstr
26msgid  "abc%%def"
27msgstr "xyz%"
28# Valid: same arguments
29msgid  "abc%s%Hdef"
30msgstr "xyz%s%H"
31# Valid: same arguments, with different flags
32msgid  "abc%s%Hdef"
33msgstr "xyz%qs%qH"
34# Valid: same arguments, with different widths
35msgid  "abc%.*sdef"
36msgstr "xyz%i%s"
37# Valid: same arguments but in numbered syntax
38msgid  "abc%s%ddef"
39msgstr "xyz%1$s%2$d"
40# Valid: permutation
41msgid  "abc%s%d%cdef"
42msgstr "xyz%3$c%2$d%1$s"
43# Valid: permutation with width
44msgid  "abc%c%.*sdef"
45msgstr "xyz%3$.*2$s%1$c"
46# Invalid: too few arguments
47msgid  "abc%sdef%u"
48msgstr "xyz%s"
49# Invalid: too many arguments
50msgid  "abc%udef"
51msgstr "xyz%uvw%c"
52# Valid: same numbered arguments, with different widths
53msgid  "abc%2$5s%1$4s"
54msgstr "xyz%2$4s%1$5s"
55# Invalid: missing argument
56msgid  "abc%2$sdef%1$u"
57msgstr "xyz%1$u"
58# Invalid: missing argument
59msgid  "abc%1$sdef%2$u"
60msgstr "xyz%2$u"
61# Invalid: added argument
62msgid  "abc%1$udef"
63msgstr "xyz%1$uvw%2$c"
64# Valid: type compatibility
65msgid  "abc%i"
66msgstr "xyz%d"
67# Valid: type compatibility
68msgid  "abc%o"
69msgstr "xyz%u"
70# Valid: type compatibility
71msgid  "abc%u"
72msgstr "xyz%x"
73# Invalid: type incompatibility
74msgid  "abc%c"
75msgstr "xyz%s"
76# Invalid: type incompatibility
77msgid  "abc%c"
78msgstr "xyz%i"
79# Invalid: type incompatibility
80msgid  "abc%c"
81msgstr "xyz%u"
82# Invalid: type incompatibility
83msgid  "abc%c"
84msgstr "xyz%p"
85# Invalid: type incompatibility
86msgid  "abc%c"
87msgstr "xyz%H"
88# Invalid: type incompatibility
89msgid  "abc%c"
90msgstr "xyz%D"
91# Invalid: type incompatibility
92msgid  "abc%c"
93msgstr "xyz%F"
94# Invalid: type incompatibility
95msgid  "abc%c"
96msgstr "xyz%T"
97# Invalid: type incompatibility
98msgid  "abc%c"
99msgstr "xyz%A"
100# Invalid: type incompatibility
101msgid  "abc%c"
102msgstr "xyz%C"
103# Invalid: type incompatibility
104msgid  "abc%c"
105msgstr "xyz%E"
106# Invalid: type incompatibility
107msgid  "abc%c"
108msgstr "xyz%L"
109# Invalid: type incompatibility
110msgid  "abc%c"
111msgstr "xyz%O"
112# Invalid: type incompatibility
113msgid  "abc%c"
114msgstr "xyz%P"
115# Invalid: type incompatibility
116msgid  "abc%c"
117msgstr "xyz%Q"
118# Invalid: type incompatibility
119msgid  "abc%c"
120msgstr "xyz%V"
121# Invalid: type incompatibility
122msgid  "abc%s"
123msgstr "xyz%i"
124# Invalid: type incompatibility
125msgid  "abc%s"
126msgstr "xyz%u"
127# Invalid: type incompatibility
128msgid  "abc%s"
129msgstr "xyz%p"
130# Invalid: type incompatibility
131msgid  "abc%s"
132msgstr "xyz%H"
133# Invalid: type incompatibility
134msgid  "abc%s"
135msgstr "xyz%D"
136# Invalid: type incompatibility
137msgid  "abc%s"
138msgstr "xyz%F"
139# Invalid: type incompatibility
140msgid  "abc%s"
141msgstr "xyz%T"
142# Invalid: type incompatibility
143msgid  "abc%s"
144msgstr "xyz%A"
145# Invalid: type incompatibility
146msgid  "abc%s"
147msgstr "xyz%C"
148# Invalid: type incompatibility
149msgid  "abc%s"
150msgstr "xyz%E"
151# Invalid: type incompatibility
152msgid  "abc%s"
153msgstr "xyz%L"
154# Invalid: type incompatibility
155msgid  "abc%s"
156msgstr "xyz%O"
157# Invalid: type incompatibility
158msgid  "abc%s"
159msgstr "xyz%P"
160# Invalid: type incompatibility
161msgid  "abc%s"
162msgstr "xyz%Q"
163# Invalid: type incompatibility
164msgid  "abc%s"
165msgstr "xyz%V"
166# Invalid: type incompatibility
167msgid  "abc%i"
168msgstr "xyz%u"
169# Invalid: type incompatibility
170msgid  "abc%i"
171msgstr "xyz%p"
172# Invalid: type incompatibility
173msgid  "abc%i"
174msgstr "xyz%H"
175# Invalid: type incompatibility
176msgid  "abc%i"
177msgstr "xyz%D"
178# Invalid: type incompatibility
179msgid  "abc%i"
180msgstr "xyz%F"
181# Invalid: type incompatibility
182msgid  "abc%i"
183msgstr "xyz%T"
184# Invalid: type incompatibility
185msgid  "abc%i"
186msgstr "xyz%A"
187# Invalid: type incompatibility
188msgid  "abc%i"
189msgstr "xyz%C"
190# Invalid: type incompatibility
191msgid  "abc%i"
192msgstr "xyz%E"
193# Invalid: type incompatibility
194msgid  "abc%i"
195msgstr "xyz%L"
196# Invalid: type incompatibility
197msgid  "abc%i"
198msgstr "xyz%O"
199# Invalid: type incompatibility
200msgid  "abc%i"
201msgstr "xyz%P"
202# Invalid: type incompatibility
203msgid  "abc%i"
204msgstr "xyz%Q"
205# Invalid: type incompatibility
206msgid  "abc%i"
207msgstr "xyz%V"
208# Invalid: type incompatibility
209msgid  "abc%u"
210msgstr "xyz%p"
211# Invalid: type incompatibility
212msgid  "abc%u"
213msgstr "xyz%H"
214# Invalid: type incompatibility
215msgid  "abc%u"
216msgstr "xyz%D"
217# Invalid: type incompatibility
218msgid  "abc%u"
219msgstr "xyz%F"
220# Invalid: type incompatibility
221msgid  "abc%u"
222msgstr "xyz%T"
223# Invalid: type incompatibility
224msgid  "abc%u"
225msgstr "xyz%A"
226# Invalid: type incompatibility
227msgid  "abc%u"
228msgstr "xyz%C"
229# Invalid: type incompatibility
230msgid  "abc%u"
231msgstr "xyz%E"
232# Invalid: type incompatibility
233msgid  "abc%u"
234msgstr "xyz%L"
235# Invalid: type incompatibility
236msgid  "abc%u"
237msgstr "xyz%O"
238# Invalid: type incompatibility
239msgid  "abc%u"
240msgstr "xyz%P"
241# Invalid: type incompatibility
242msgid  "abc%u"
243msgstr "xyz%Q"
244# Invalid: type incompatibility
245msgid  "abc%u"
246msgstr "xyz%V"
247# Invalid: type incompatibility
248msgid  "abc%p"
249msgstr "xyz%H"
250# Invalid: type incompatibility
251msgid  "abc%p"
252msgstr "xyz%D"
253# Invalid: type incompatibility
254msgid  "abc%p"
255msgstr "xyz%F"
256# Invalid: type incompatibility
257msgid  "abc%p"
258msgstr "xyz%T"
259# Invalid: type incompatibility
260msgid  "abc%p"
261msgstr "xyz%A"
262# Invalid: type incompatibility
263msgid  "abc%p"
264msgstr "xyz%C"
265# Invalid: type incompatibility
266msgid  "abc%p"
267msgstr "xyz%E"
268# Invalid: type incompatibility
269msgid  "abc%p"
270msgstr "xyz%L"
271# Invalid: type incompatibility
272msgid  "abc%p"
273msgstr "xyz%O"
274# Invalid: type incompatibility
275msgid  "abc%p"
276msgstr "xyz%P"
277# Invalid: type incompatibility
278msgid  "abc%p"
279msgstr "xyz%Q"
280# Invalid: type incompatibility
281msgid  "abc%p"
282msgstr "xyz%V"
283# Invalid: type incompatibility
284msgid  "abc%H"
285msgstr "xyz%D"
286# Invalid: type incompatibility
287msgid  "abc%H"
288msgstr "xyz%F"
289# Invalid: type incompatibility
290msgid  "abc%H"
291msgstr "xyz%T"
292# Invalid: type incompatibility
293msgid  "abc%H"
294msgstr "xyz%A"
295# Invalid: type incompatibility
296msgid  "abc%H"
297msgstr "xyz%C"
298# Invalid: type incompatibility
299msgid  "abc%H"
300msgstr "xyz%E"
301# Invalid: type incompatibility
302msgid  "abc%H"
303msgstr "xyz%L"
304# Invalid: type incompatibility
305msgid  "abc%H"
306msgstr "xyz%O"
307# Invalid: type incompatibility
308msgid  "abc%H"
309msgstr "xyz%P"
310# Invalid: type incompatibility
311msgid  "abc%H"
312msgstr "xyz%Q"
313# Invalid: type incompatibility
314msgid  "abc%H"
315msgstr "xyz%V"
316# Invalid: type incompatibility
317msgid  "abc%D"
318msgstr "xyz%F"
319# Invalid: type incompatibility
320msgid  "abc%D"
321msgstr "xyz%T"
322# Invalid: type incompatibility
323msgid  "abc%D"
324msgstr "xyz%A"
325# Invalid: type incompatibility
326msgid  "abc%D"
327msgstr "xyz%C"
328# Invalid: type incompatibility
329msgid  "abc%D"
330msgstr "xyz%E"
331# Invalid: type incompatibility
332msgid  "abc%D"
333msgstr "xyz%L"
334# Invalid: type incompatibility
335msgid  "abc%D"
336msgstr "xyz%O"
337# Invalid: type incompatibility
338msgid  "abc%D"
339msgstr "xyz%P"
340# Invalid: type incompatibility
341msgid  "abc%D"
342msgstr "xyz%Q"
343# Invalid: type incompatibility
344msgid  "abc%D"
345msgstr "xyz%V"
346# Invalid: type incompatibility
347msgid  "abc%F"
348msgstr "xyz%T"
349# Invalid: type incompatibility
350msgid  "abc%F"
351msgstr "xyz%A"
352# Invalid: type incompatibility
353msgid  "abc%F"
354msgstr "xyz%C"
355# Invalid: type incompatibility
356msgid  "abc%F"
357msgstr "xyz%E"
358# Invalid: type incompatibility
359msgid  "abc%F"
360msgstr "xyz%L"
361# Invalid: type incompatibility
362msgid  "abc%F"
363msgstr "xyz%O"
364# Invalid: type incompatibility
365msgid  "abc%F"
366msgstr "xyz%P"
367# Invalid: type incompatibility
368msgid  "abc%F"
369msgstr "xyz%Q"
370# Invalid: type incompatibility
371msgid  "abc%F"
372msgstr "xyz%V"
373# Invalid: type incompatibility
374msgid  "abc%T"
375msgstr "xyz%A"
376# Invalid: type incompatibility
377msgid  "abc%T"
378msgstr "xyz%C"
379# Invalid: type incompatibility
380msgid  "abc%T"
381msgstr "xyz%E"
382# Invalid: type incompatibility
383msgid  "abc%T"
384msgstr "xyz%L"
385# Invalid: type incompatibility
386msgid  "abc%T"
387msgstr "xyz%O"
388# Invalid: type incompatibility
389msgid  "abc%T"
390msgstr "xyz%P"
391# Invalid: type incompatibility
392msgid  "abc%T"
393msgstr "xyz%Q"
394# Invalid: type incompatibility
395msgid  "abc%T"
396msgstr "xyz%V"
397# Invalid: type incompatibility
398msgid  "abc%A"
399msgstr "xyz%C"
400# Invalid: type incompatibility
401msgid  "abc%A"
402msgstr "xyz%E"
403# Invalid: type incompatibility
404msgid  "abc%A"
405msgstr "xyz%L"
406# Invalid: type incompatibility
407msgid  "abc%A"
408msgstr "xyz%O"
409# Invalid: type incompatibility
410msgid  "abc%A"
411msgstr "xyz%P"
412# Invalid: type incompatibility
413msgid  "abc%A"
414msgstr "xyz%Q"
415# Invalid: type incompatibility
416msgid  "abc%A"
417msgstr "xyz%V"
418# Invalid: type incompatibility
419msgid  "abc%C"
420msgstr "xyz%E"
421# Invalid: type incompatibility
422msgid  "abc%C"
423msgstr "xyz%L"
424# Invalid: type incompatibility
425msgid  "abc%C"
426msgstr "xyz%O"
427# Invalid: type incompatibility
428msgid  "abc%C"
429msgstr "xyz%P"
430# Invalid: type incompatibility
431msgid  "abc%C"
432msgstr "xyz%Q"
433# Invalid: type incompatibility
434msgid  "abc%C"
435msgstr "xyz%V"
436# Invalid: type incompatibility
437msgid  "abc%E"
438msgstr "xyz%L"
439# Invalid: type incompatibility
440msgid  "abc%E"
441msgstr "xyz%O"
442# Invalid: type incompatibility
443msgid  "abc%E"
444msgstr "xyz%P"
445# Invalid: type incompatibility
446msgid  "abc%E"
447msgstr "xyz%Q"
448# Invalid: type incompatibility
449msgid  "abc%E"
450msgstr "xyz%V"
451# Invalid: type incompatibility
452msgid  "abc%L"
453msgstr "xyz%O"
454# Invalid: type incompatibility
455msgid  "abc%L"
456msgstr "xyz%P"
457# Invalid: type incompatibility
458msgid  "abc%L"
459msgstr "xyz%Q"
460# Invalid: type incompatibility
461msgid  "abc%L"
462msgstr "xyz%V"
463# Invalid: type incompatibility
464msgid  "abc%O"
465msgstr "xyz%P"
466# Invalid: type incompatibility
467msgid  "abc%O"
468msgstr "xyz%Q"
469# Invalid: type incompatibility
470msgid  "abc%O"
471msgstr "xyz%V"
472# Invalid: type incompatibility
473msgid  "abc%P"
474msgstr "xyz%Q"
475# Invalid: type incompatibility
476msgid  "abc%P"
477msgstr "xyz%V"
478# Invalid: type incompatibility
479msgid  "abc%Q"
480msgstr "xyz%V"
481# Invalid: type incompatibility due to size
482msgid  "abc%i"
483msgstr "xyz%li"
484# Invalid: type incompatibility due to size
485msgid  "abc%i"
486msgstr "xyz%lli"
487# Invalid: type incompatibility due to size
488msgid  "abc%i"
489msgstr "xyz%wi"
490# Invalid: type incompatibility due to size
491msgid  "abc%li"
492msgstr "xyz%lli"
493# Invalid: type incompatibility due to size
494msgid  "abc%li"
495msgstr "xyz%wi"
496# Invalid: type incompatibility due to size
497msgid  "abc%lli"
498msgstr "xyz%wi"
499# Invalid: type incompatibility for width
500msgid  "abc%.*s"
501msgstr "xyz%u%s"
502EOF
503
504: ${MSGFMT=msgfmt}
505n=0
506while read comment; do
507  read msgid_line
508  read msgstr_line
509  n=`expr $n + 1`
510  cat <<EOF > f-gi-2-$n.po
511#, gcc-internal-format
512${msgid_line}
513${msgstr_line}
514EOF
515  fail=
516  if echo "$comment" | grep 'Valid:' > /dev/null; then
517    if ${MSGFMT} --check-format -o f-gi-2-$n.mo f-gi-2-$n.po; then
518      :
519    else
520      fail=yes
521    fi
522  else
523    ${MSGFMT} --check-format -o f-gi-2-$n.mo f-gi-2-$n.po 2> /dev/null
524    if test $? = 1; then
525      :
526    else
527      fail=yes
528    fi
529  fi
530  if test -n "$fail"; then
531    echo "Format string checking error:" 1>&2
532    cat f-gi-2-$n.po 1>&2
533    Exit 1
534  fi
535  rm -f f-gi-2-$n.po f-gi-2-$n.mo
536done < f-gi-2.data
537
538Exit 0
539