Add -lm dependency for gettextlib to fix LTO build
[platform/upstream/gettext.git] / gettext-tools / tests / format-gcc-internal-1
1 #! /bin/sh
2 . "${srcdir=.}/init.sh"; path_prepend_ . ../src
3
4 # Test recognition of GCC internal format strings.
5
6 cat <<\EOF > f-gi-1.data
7 # Valid: no argument
8 "abc%%"
9 # Valid: no argument
10 "abc%<"
11 # Valid: no argument
12 "abc%>"
13 # Valid: no argument
14 "abc%'"
15 # Valid: no argument
16 "abc%m"
17 # Valid: one character argument
18 "abc%c"
19 # Valid: one string argument
20 "abc%s"
21 # Valid: one integer argument
22 "abc%i"
23 # Valid: one integer argument
24 "abc%d"
25 # Valid: one integer argument
26 "abc%o"
27 # Valid: one integer argument
28 "abc%u"
29 # Valid: one integer argument
30 "abc%x"
31 # Valid: one integer and one string argument
32 "abc%.*s"
33 # Valid: one pointer argument
34 "abc%p"
35 # Valid: one pointer argument
36 "abc%H"
37 # Valid: one pointer argument
38 "%J"
39 # Valid: %J not at start
40 "abc%J"
41 # Valid: %J with flags
42 "%qJ"
43 # Valid: %K with flags
44 "%qK"
45 # Valid: one pointer argument
46 "abc%D"
47 # Valid: one pointer argument
48 "abc%F"
49 # Valid: one pointer argument
50 "abc%T"
51 # Valid: one pointer argument
52 "abc%A"
53 # Valid: one pointer argument
54 "abc%C"
55 # Valid: one pointer argument
56 "abc%E"
57 # Valid: one pointer argument
58 "abc%L"
59 # Valid: one pointer argument
60 "abc%O"
61 # Valid: one pointer argument
62 "abc%P"
63 # Valid: one pointer argument
64 "abc%Q"
65 # Valid: one pointer argument
66 "abc%V"
67 # Valid: one argument with flags
68 "abc%qdef"
69 # Valid: one argument with flags
70 "abc%+#Ag"
71 # Valid: one argument with size specifier
72 "abc%li"
73 # Valid: one argument with size specifier
74 "abc%lli"
75 # Invalid: one argument with invalid size specifier
76 "abc%llli"
77 # Valid: one argument with size specifier
78 "abc%wi"
79 # Invalid: unterminated
80 "abc%"
81 # Invalid: unknown format specifier
82 "abc%y"
83 # Invalid: precision with non-string
84 "abc%.*c"
85 # Invalid: twice precision
86 "abc%.*.*s"
87 # Valid: three arguments
88 "abc%d%u%u"
89 # Valid: a numbered argument
90 "abc%1$d"
91 # Invalid: zero
92 "abc%0$d"
93 # Valid: two-digit numbered arguments
94 "abc%11$def%10$dgh%9$dij%8$dkl%7$dmn%6$dop%5$dqr%4$dst%3$duv%2$dwx%1$dyz"
95 # Invalid: unterminated number
96 "abc%1"
97 # Invalid: flags before number
98 "abc%+1$d"
99 # Valid: three arguments, two with same number
100 "abc%1$x,%2$c,%1$u"
101 # Invalid: argument with conflicting types
102 "abc%1$x,%2$c,%1$s"
103 # Valid: no conflict
104 "abc%1$x,%2$c,%1$u"
105 # Invalid: mixing of numbered and unnumbered arguments
106 "abc%d%2$x"
107 # Valid: numbered argument with constant precision
108 "abc%1$.9s"
109 # Invalid: mixing of numbered and unnumbered arguments
110 "abc%1$.*s"
111 # Valid: missing non-final argument
112 "abc%2$x%3$s"
113 # Valid: permutation
114 "abc%2$ddef%1$d"
115 # Valid: multiple uses of same argument
116 "abc%2$xdef%1$sghi%2$x"
117 # Valid: one argument with precision
118 "abc%2$#.*1$s"
119 # Invalid: non-string argument with precision
120 "abc%2$#.*1$d"
121 # Invalid: one argument with width
122 "abc%2$#*1$s"
123 # Invalid: one argument with width and precision
124 "abc%3$*2$.*1$s"
125 # Invalid: zero
126 "abc%1$#.*0$s"
127 EOF
128
129 : ${XGETTEXT=xgettext}
130 n=0
131 while read comment; do
132   read string
133   n=`expr $n + 1`
134   cat <<EOF > f-gi-1-$n.in
135 gettext(${string});
136 EOF
137   ${XGETTEXT} -L GCC-source -o f-gi-1-$n.po f-gi-1-$n.in || exit 1
138   test -f f-gi-1-$n.po || exit 1
139   fail=
140   if echo "$comment" | grep 'Valid:' > /dev/null; then
141     if grep gcc-internal-format f-gi-1-$n.po > /dev/null; then
142       :
143     else
144       fail=yes
145     fi
146   else
147     if grep gcc-internal-format f-gi-1-$n.po > /dev/null; then
148       fail=yes
149     else
150       :
151     fi
152   fi
153   if test -n "$fail"; then
154     echo "Format string recognition error:" 1>&2
155     cat f-gi-1-$n.in 1>&2
156     echo "Got:" 1>&2
157     cat f-gi-1-$n.po 1>&2
158     exit 1
159   fi
160   rm -f f-gi-1-$n.in f-gi-1-$n.po
161 done < f-gi-1.data
162
163 exit 0