]> git.pld-linux.org Git - packages/tcl.git/blob - tcl.spec
- lang() for localized msgs
[packages/tcl.git] / tcl.spec
1 Summary:        Tool Command Language embeddable scripting language, with shared libraries
2 Summary(fr):    Tool Command Language, langage de script avec bibliothèques partagées
3 Summary(pl):    Tool Command Language - jêzyk skryptowy z bibliotekami dynamicznymi
4 Summary(ru):    Tool Command Language - ×ÓÔÒÁÉ×ÁÅÍÙÊ ÑÚÙË ÓËÒÉÐÔÏ×
5 Summary(tr):    Tcl ile kullanýlabilen betik dili
6 Summary(uk):    Tool Command Language - ×ÂÕÄÏ×Õ×ÁÎÁ ÍÏ×Á ÓËÒÉÐÔ¦×
7 Name:           tcl
8 %define major   8.5
9 Version:        %{major}
10 %define rel     a5
11 Release:        0.%{rel}.1
12 License:        BSD
13 Group:          Development/Languages/Tcl
14 Source0:        http://dl.sourceforge.net/tcl/%{name}%{version}%{rel}-src.tar.gz
15 # Source0-md5:  fe9e399c1f186f8c605de8d2e262881e
16 Source1:        %{name}-pl-man-pages.tar.bz2
17 # Source1-md5:  dd3370f2b588763758787831a4bf48fc
18 Patch0:         %{name}-ieee.patch
19 Patch1:         %{name}-readline.patch
20 Patch2:         %{name}-opt.patch
21 Patch3:         %{name}-mannames.patch
22 Patch4:         %{name}-soname_fix.patch
23 Patch5:         %{name}-norpath.patch
24 URL:            http://www.tcl.tk/
25 BuildRequires:  autoconf
26 BuildRequires:  ncurses-devel >= 5.2
27 BuildRequires:  readline-devel >= 4.2
28 BuildRoot:      %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
29
30 %define         _ulibdir        /usr/lib
31
32 %if "%{_libdir}" != "%{_ulibdir}"
33 %define         have_ulibdir    1
34 %endif
35
36 %description
37 Tcl is a simple scripting language that is designed to be embedded in
38 other applications. This package includes tclsh, a simple example of a
39 tcl application. Tcl is very popular for writing small graphical
40 applications because of the Tk widget set which is closely tied to it.
41
42 %description -l de
43 Tcl ist eine einfache Skriptsprache, die zur Ingegration in andere
44 Applikationen vorgesehen ist. Dieses Paket umfaßt tclsh, ein einfaches
45 Beispiel einer tcl-Applikation. Tcl wird gern zum Schreiben kleiner
46 grafischer Anwendungen benutzt, weil das Tk-Widget-Set eng damit
47 verknüpft ist.
48
49 %description -l fr
50 Tcl est un langage simple de script, conçu pour être intégré dans
51 d'autres applications. Ce paquetage contient tclsh, un exemple simple
52 d'application tcl. Tcl est très utilisé pour écrire de petites
53 applications graphiques grâce à l'ensemble de widgets Tk qui lui est
54 très lié.
55
56 %description -l ja
57 Tcl ¤Ï¾¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ËËä¤á¹þ¤à¤¿¤á¤Ë¥Ç¥¶¥¤¥ó¤µ¤ì¤¿´Êñ¤Ê¥¹¥¯¥ê¥×
58 ¥È¸À¸ì¤Ç¤¹¡£Tcl¤Ï¥¦¥£¥¸¥Ã¥É¡¦¥»¥Ã¥È¤Ç¤¢¤ëTk¤È¤È¤â¤ËÍѤ¤¤ë¤è¤¦¤Ë¥Ç¥¶¥¤¥ó
59 ¤·¤Æ¤¤¤Þ¤¹¡£¤³¤Î¥Ñ¥Ã¥±¡¼¥¸¤Ë¤ÏTcl¤Î´Êñ¤ÊÎã¤È¤·¤Æ¡¢tclsh
60 ¤â´Þ¤ó¤Ç¤¤¤Þ¤¹¡£
61
62 %description -l pl
63 Tcl jest prostym jêzykiem skryptowym, przeznaczonym do wspó³pracy z
64 innymi aplikacjami. W pakiecie znajduje siê równie¿ tclsh - prosty
65 przyk³ad programów. Tcl jest bardzo popularnym jêzykiem do pisania
66 ma³ych programów graficznych.
67
68 %description -l ru
69 Tcl - ÜÔÏ ÐÒÏÓÔÏÊ ÉÎÔÅÒÐÒÅÔÉÒÕÅÍÙÊ ÑÚÙË, ÐÒÅÄÎÁÚÎÁÞÅÎÎÙÊ ÄÌÑ
70 ×ÓÔÒÁÉ×ÁÎÉÑ × ÄÒÕÇÉÅ ÐÒÏÇÒÁÍÍÙ. üÔÏÔ ÐÁËÅÔ ×ËÌÀÞÁÅÔ tclsh, ÐÒÏÓÔÏÊ
71 ÐÒÉÍÅÒ ÐÒÏÇÒÁÍÍÙ ÎÁ tcl. Tcl ÏÞÅÎØ ÐÏÐÕÌÑÒÅΠÄÌÑ ÎÁÐÉÓÁÎÉÑ ÎÅÂÏÌØÛÉÈ
72 ÇÒÁÆÉÞÅÓËÉÈ ÐÒÏÇÒÁÍÍ ÉÚ-ÚÁ ÎÁÂÏÒÁ ÜËÒÁÎÎÙÈ ÐÒÉÍÉÔÉ×Ï× Tk, ËÏÔÏÒÙÊ
73 ÏÞÅÎØ ÔÅÓÎÏ Ó ÎÉÍ Ó×ÑÚÁÎ.
74
75 %description -l tr
76 Tcl, baþka uygulamalarýn içine gömülmesi hedeflenerek geliþtirilmiþ
77 basit bir betimleme dilidir. Bu paket basit bir Tcl uygulamasý örneði
78 olan tclsh kabuðunu içerir. Tcl, kendisi ile sýkýca ilintili olan Tk
79 arayüz elemaný kümesinin de desteðiyle küçük grafik uygulamalar yazma
80 konusunda son derece yaygýn kullanýlmaktadýr.
81
82 %description -l uk
83 Tcl - ÃÅ ÐÒÏÓÔÁ ¦ÎÔÅÒÐÒÅÔÏ×ÁÎÁ ÍÏ×Á, ÐÒÉÚÎÁÞÅÎÁ ÄÌÑ ×ÂÕÄÏ×É × ¦ÎÛ¦
84 ÐÒÏÇÒÁÍÉ. ãÅÊ ÐÁËÅԠͦÓÔÉÔØ ÔÁËÏÖ tclsh, ÐÒÏÓÔÉÊ ÐÒÉËÌÁÄ ÐÒÏÇÒÁÍÉ ÎÁ
85 tcl. Tcl ÄÕÖÅ ÐÏÐÕÌÑÒÎÉÊ ÄÌÑ ÎÁÐÉÓÁÎÎÑ ÐÒÏÓÔÉÈ ÇÒÁƦÞÎÉÈ ÐÒÏÇÒÁÍ
86 ÚÁ×ÄÑËÉ ÎÁÂÏÒÕ ÅËÒÁÎÎÉÈ ÐÒÉͦÔÉצנTk, ËÏÔÒÉÊ Ú ÎÉÍ ÄÕÖÅ Ô¦ÓÎÏ
87 Ú×'ÑÚÁÎÉÊ.
88
89 %package devel
90 Summary:        Tool Command Language header files and development documentation
91 Summary(pl):    Pliki nag³ówkowe oraz dokumentacja dla Tcl (Tool Command Language)
92 Group:          Development/Languages/Tcl
93 Requires:       %{name} = %{version}-%{release}
94
95 %description devel
96 Tool Command Language embeddable scripting language header files and
97 develpment documentation.
98
99 %description devel -l pl
100 Pliki nag³ówkowe oraz dokumentacja dla Tcl (Tool Command Language).
101
102 %prep
103 %setup -q -n %{name}%{version}%{rel}
104 %patch0 -p1
105 %patch1 -p1
106 %patch2 -p1
107 %patch3 -p1
108 %patch4 -p1
109 %patch5 -p1
110
111 %build
112 cd unix
113 sed -i -e "s/^CFLAGS_OPTIMIZE.*/CFLAGS_OPTIMIZE=%{rpmcflags} -D__NO_STRING_INLINES -D__NO_MATH_INLINES -D_REENTRANT/" \
114         Makefile.in
115 %{__autoconf}
116 %configure \
117         --enable-langinfo \
118         --enable-shared \
119         --enable-threads \
120         --enable-64bit \
121         --enable-gcc
122 %{__make} \
123         TCL_PACKAGE_PATH="%{_libdir} %{_libdir}/tcl%{major} %{_ulibdir} %{_ulibdir}/tcl%{major}"
124
125 sed -i -e "s#%{_builddir}/%{name}%{version}%{rel}/unix#%{_libdir}#; \
126         s#%{_builddir}/%{name}%{version}%{rel}#%{_includedir}/tcl-private#" tclConfig.sh
127
128 %install
129 rm -rf $RPM_BUILD_ROOT
130 install -d $RPM_BUILD_ROOT{%{_prefix},%{_mandir}/man1}
131
132 %{__make} -C unix install \
133         INSTALL_ROOT=$RPM_BUILD_ROOT \
134         TCL_PACKAGE_PATH="%{_libdir} %{_libdir}/tcl%{major} %{_ulibdir} %{_ulibdir}/tcl%{major}" \
135         MAN_INSTALL_DIR=$RPM_BUILD_ROOT%{_mandir}
136
137 install -d $RPM_BUILD_ROOT%{_includedir}/%{name}-private/{generic,unix}
138 find generic unix -name "*.h" -exec cp -p '{}' $RPM_BUILD_ROOT%{_includedir}/%{name}-private/'{}' ';'
139 for h in $RPM_BUILD_ROOT%{_includedir}/*.h; do
140         rh=$(basename "$h")
141         if [ -f "$RPM_BUILD_ROOT%{_includedir}/%{name}-private/generic/$rh" ]; then
142                 ln -sf "../../$rh" $RPM_BUILD_ROOT%{_includedir}/%{name}-private/generic
143         fi
144 done
145
146 ln -sf libtcl%{major}.so.0.0 $RPM_BUILD_ROOT%{_libdir}/libtcl.so
147 ln -sf libtcl%{major}.so.0.0 $RPM_BUILD_ROOT%{_libdir}/libtcl%{major}.so
148 mv -f $RPM_BUILD_ROOT%{_bindir}/tclsh%{major} $RPM_BUILD_ROOT%{_bindir}/tclsh
149
150 %{?have_ulibdir:mv $RPM_BUILD_ROOT%{_libdir}/tclConfig.sh $RPM_BUILD_ROOT%{_ulibdir}/tclConfig.sh}
151
152 bzip2 -dc %{SOURCE1} | tar xf - -C $RPM_BUILD_ROOT%{_mandir}
153
154 install -d $RPM_BUILD_ROOT%{_libdir}/tcl%{major}
155
156 %clean
157 rm -rf $RPM_BUILD_ROOT
158
159 %post   -p /sbin/ldconfig
160 %postun -p /sbin/ldconfig
161
162 %files
163 %defattr(644,root,root,755)
164 %attr(755,root,root) %{_bindir}/*
165 %attr(755,root,root) %{_libdir}/lib*.so.*.*
166 %{?have_ulibdir:%dir %{_libdir}/tcl%{major}}
167 %{_ulibdir}/tcl[0-9]
168 %dir %{_ulibdir}/tcl%{major}
169 %{_ulibdir}/tcl%{major}/*.tcl
170 %{_ulibdir}/tcl%{major}/encoding
171 %{_ulibdir}/tcl%{major}/http1.0
172 %{_ulibdir}/tcl%{major}/ldAix
173 %dir %{_ulibdir}/tcl%{major}/msgs
174 %lang(af) %{_ulibdir}/tcl%{major}/msgs/af.msg
175 %lang(af_ZA) %{_ulibdir}/tcl%{major}/msgs/af_za.msg
176 %lang(ar) %{_ulibdir}/tcl%{major}/msgs/ar.msg
177 %lang(ar_IN) %{_ulibdir}/tcl%{major}/msgs/ar_in.msg
178 %lang(ar_JO) %{_ulibdir}/tcl%{major}/msgs/ar_jo.msg
179 %lang(ar_LB) %{_ulibdir}/tcl%{major}/msgs/ar_lb.msg
180 %lang(ar_SY) %{_ulibdir}/tcl%{major}/msgs/ar_sy.msg
181 %lang(be) %{_ulibdir}/tcl%{major}/msgs/be.msg
182 %lang(bg) %{_ulibdir}/tcl%{major}/msgs/bg.msg
183 %lang(bn) %{_ulibdir}/tcl%{major}/msgs/bn.msg
184 %lang(bn_IN) %{_ulibdir}/tcl%{major}/msgs/bn_in.msg
185 %lang(ca) %{_ulibdir}/tcl%{major}/msgs/ca.msg
186 %lang(cs) %{_ulibdir}/tcl%{major}/msgs/cs.msg
187 %lang(da) %{_ulibdir}/tcl%{major}/msgs/da.msg
188 %lang(de) %{_ulibdir}/tcl%{major}/msgs/de.msg
189 %lang(de_AT) %{_ulibdir}/tcl%{major}/msgs/de_at.msg
190 %lang(de_BE) %{_ulibdir}/tcl%{major}/msgs/de_be.msg
191 %lang(el) %{_ulibdir}/tcl%{major}/msgs/el.msg
192 %lang(en_AU) %{_ulibdir}/tcl%{major}/msgs/en_au.msg
193 %lang(en_BE) %{_ulibdir}/tcl%{major}/msgs/en_be.msg
194 %lang(en_BW) %{_ulibdir}/tcl%{major}/msgs/en_bw.msg
195 %lang(en_CA) %{_ulibdir}/tcl%{major}/msgs/en_ca.msg
196 %lang(en_GB) %{_ulibdir}/tcl%{major}/msgs/en_gb.msg
197 %lang(en_HK) %{_ulibdir}/tcl%{major}/msgs/en_hk.msg
198 %lang(en_IE) %{_ulibdir}/tcl%{major}/msgs/en_ie.msg
199 %lang(en_IN) %{_ulibdir}/tcl%{major}/msgs/en_in.msg
200 %lang(en_NZ) %{_ulibdir}/tcl%{major}/msgs/en_nz.msg
201 %lang(en_PH) %{_ulibdir}/tcl%{major}/msgs/en_ph.msg
202 %lang(en_SG) %{_ulibdir}/tcl%{major}/msgs/en_sg.msg
203 %lang(en_ZA) %{_ulibdir}/tcl%{major}/msgs/en_za.msg
204 %lang(en_ZW) %{_ulibdir}/tcl%{major}/msgs/en_zw.msg
205 %lang(eo) %{_ulibdir}/tcl%{major}/msgs/eo.msg
206 %lang(es) %{_ulibdir}/tcl%{major}/msgs/es.msg
207 %lang(es_AR) %{_ulibdir}/tcl%{major}/msgs/es_ar.msg
208 %lang(es_BO) %{_ulibdir}/tcl%{major}/msgs/es_bo.msg
209 %lang(es_CL) %{_ulibdir}/tcl%{major}/msgs/es_cl.msg
210 %lang(es_CO) %{_ulibdir}/tcl%{major}/msgs/es_co.msg
211 %lang(es_CR) %{_ulibdir}/tcl%{major}/msgs/es_cr.msg
212 %lang(es_DO) %{_ulibdir}/tcl%{major}/msgs/es_do.msg
213 %lang(es_EC) %{_ulibdir}/tcl%{major}/msgs/es_ec.msg
214 %lang(es_GT) %{_ulibdir}/tcl%{major}/msgs/es_gt.msg
215 %lang(es_HN) %{_ulibdir}/tcl%{major}/msgs/es_hn.msg
216 %lang(es_MX) %{_ulibdir}/tcl%{major}/msgs/es_mx.msg
217 %lang(es_NI) %{_ulibdir}/tcl%{major}/msgs/es_ni.msg
218 %lang(es_PA) %{_ulibdir}/tcl%{major}/msgs/es_pa.msg
219 %lang(es_PE) %{_ulibdir}/tcl%{major}/msgs/es_pe.msg
220 %lang(es_PR) %{_ulibdir}/tcl%{major}/msgs/es_pr.msg
221 %lang(es_PY) %{_ulibdir}/tcl%{major}/msgs/es_py.msg
222 %lang(es_SV) %{_ulibdir}/tcl%{major}/msgs/es_sv.msg
223 %lang(es_UY) %{_ulibdir}/tcl%{major}/msgs/es_uy.msg
224 %lang(es_VE) %{_ulibdir}/tcl%{major}/msgs/es_ve.msg
225 %lang(et) %{_ulibdir}/tcl%{major}/msgs/et.msg
226 %lang(eu) %{_ulibdir}/tcl%{major}/msgs/eu.msg
227 %lang(eu_ES) %{_ulibdir}/tcl%{major}/msgs/eu_es.msg
228 %lang(fa) %{_ulibdir}/tcl%{major}/msgs/fa.msg
229 %lang(fa_IN) %{_ulibdir}/tcl%{major}/msgs/fa_in.msg
230 %lang(fa_IR) %{_ulibdir}/tcl%{major}/msgs/fa_ir.msg
231 %lang(fi) %{_ulibdir}/tcl%{major}/msgs/fi.msg
232 %lang(fo) %{_ulibdir}/tcl%{major}/msgs/fo.msg
233 %lang(fo_FO) %{_ulibdir}/tcl%{major}/msgs/fo_fo.msg
234 %lang(fr) %{_ulibdir}/tcl%{major}/msgs/fr.msg
235 %lang(fr_BE) %{_ulibdir}/tcl%{major}/msgs/fr_be.msg
236 %lang(fr_CA) %{_ulibdir}/tcl%{major}/msgs/fr_ca.msg
237 %lang(fr_CH) %{_ulibdir}/tcl%{major}/msgs/fr_ch.msg
238 %lang(ga) %{_ulibdir}/tcl%{major}/msgs/ga.msg
239 %lang(ga_IE) %{_ulibdir}/tcl%{major}/msgs/ga_ie.msg
240 %lang(gl) %{_ulibdir}/tcl%{major}/msgs/gl.msg
241 %lang(gl_ES) %{_ulibdir}/tcl%{major}/msgs/gl_es.msg
242 %lang(gv) %{_ulibdir}/tcl%{major}/msgs/gv.msg
243 %lang(gv_GB) %{_ulibdir}/tcl%{major}/msgs/gv_gb.msg
244 %lang(he) %{_ulibdir}/tcl%{major}/msgs/he.msg
245 %lang(hi) %{_ulibdir}/tcl%{major}/msgs/hi.msg
246 %lang(hi_IN) %{_ulibdir}/tcl%{major}/msgs/hi_in.msg
247 %lang(hr) %{_ulibdir}/tcl%{major}/msgs/hr.msg
248 %lang(hu) %{_ulibdir}/tcl%{major}/msgs/hu.msg
249 %lang(id) %{_ulibdir}/tcl%{major}/msgs/id.msg
250 %lang(id_ID) %{_ulibdir}/tcl%{major}/msgs/id_id.msg
251 %lang(is) %{_ulibdir}/tcl%{major}/msgs/is.msg
252 %lang(it) %{_ulibdir}/tcl%{major}/msgs/it.msg
253 %lang(it_CH) %{_ulibdir}/tcl%{major}/msgs/it_ch.msg
254 %lang(ja) %{_ulibdir}/tcl%{major}/msgs/ja.msg
255 %lang(kl) %{_ulibdir}/tcl%{major}/msgs/kl.msg
256 %lang(kl_GL) %{_ulibdir}/tcl%{major}/msgs/kl_gl.msg
257 %lang(ko) %{_ulibdir}/tcl%{major}/msgs/ko.msg
258 %lang(ko) %{_ulibdir}/tcl%{major}/msgs/ko_kr.msg
259 %lang(kok) %{_ulibdir}/tcl%{major}/msgs/kok.msg
260 %lang(kok_IN) %{_ulibdir}/tcl%{major}/msgs/kok_in.msg
261 %lang(kw) %{_ulibdir}/tcl%{major}/msgs/kw.msg
262 %lang(kw_GB) %{_ulibdir}/tcl%{major}/msgs/kw_gb.msg
263 %lang(lt) %{_ulibdir}/tcl%{major}/msgs/lt.msg
264 %lang(lv) %{_ulibdir}/tcl%{major}/msgs/lv.msg
265 %lang(mk) %{_ulibdir}/tcl%{major}/msgs/mk.msg
266 %lang(mr) %{_ulibdir}/tcl%{major}/msgs/mr.msg
267 %lang(mr_IN) %{_ulibdir}/tcl%{major}/msgs/mr_in.msg
268 %lang(ms) %{_ulibdir}/tcl%{major}/msgs/ms.msg
269 %lang(ms_MY) %{_ulibdir}/tcl%{major}/msgs/ms_my.msg
270 %lang(mt) %{_ulibdir}/tcl%{major}/msgs/mt.msg
271 %lang(nb) %{_ulibdir}/tcl%{major}/msgs/nb.msg
272 %lang(nl) %{_ulibdir}/tcl%{major}/msgs/nl.msg
273 %lang(nl_BE) %{_ulibdir}/tcl%{major}/msgs/nl_be.msg
274 %lang(nn) %{_ulibdir}/tcl%{major}/msgs/nn.msg
275 %lang(pl) %{_ulibdir}/tcl%{major}/msgs/pl.msg
276 %lang(pt) %{_ulibdir}/tcl%{major}/msgs/pt.msg
277 %lang(pt_BR) %{_ulibdir}/tcl%{major}/msgs/pt_br.msg
278 %lang(ro) %{_ulibdir}/tcl%{major}/msgs/ro.msg
279 %lang(ru) %{_ulibdir}/tcl%{major}/msgs/ru.msg
280 %lang(ru_UA) %{_ulibdir}/tcl%{major}/msgs/ru_ua.msg
281 %lang(sh) %{_ulibdir}/tcl%{major}/msgs/sh.msg
282 %lang(sk) %{_ulibdir}/tcl%{major}/msgs/sk.msg
283 %lang(sl) %{_ulibdir}/tcl%{major}/msgs/sl.msg
284 %lang(sq) %{_ulibdir}/tcl%{major}/msgs/sq.msg
285 %lang(sr) %{_ulibdir}/tcl%{major}/msgs/sr.msg
286 %lang(sv) %{_ulibdir}/tcl%{major}/msgs/sv.msg
287 %lang(sw) %{_ulibdir}/tcl%{major}/msgs/sw.msg
288 %lang(ta) %{_ulibdir}/tcl%{major}/msgs/ta.msg
289 %lang(ta_IN) %{_ulibdir}/tcl%{major}/msgs/ta_in.msg
290 %lang(te) %{_ulibdir}/tcl%{major}/msgs/te.msg
291 %lang(te_IN) %{_ulibdir}/tcl%{major}/msgs/te_in.msg
292 %lang(th) %{_ulibdir}/tcl%{major}/msgs/th.msg
293 %lang(tr) %{_ulibdir}/tcl%{major}/msgs/tr.msg
294 %lang(uk) %{_ulibdir}/tcl%{major}/msgs/uk.msg
295 %lang(vi) %{_ulibdir}/tcl%{major}/msgs/vi.msg
296 %lang(zh) %{_ulibdir}/tcl%{major}/msgs/zh.msg
297 %lang(zh_CN) %{_ulibdir}/tcl%{major}/msgs/zh_cn.msg
298 %lang(zh_HK) %{_ulibdir}/tcl%{major}/msgs/zh_hk.msg
299 %lang(zh_SG) %{_ulibdir}/tcl%{major}/msgs/zh_sg.msg
300 %lang(zh_TW) %{_ulibdir}/tcl%{major}/msgs/zh_tw.msg
301 %{_ulibdir}/tcl%{major}/opt0.4
302 %{_ulibdir}/tcl%{major}/tclAppInit.c
303 %{_ulibdir}/tcl%{major}/tclIndex
304 %{_ulibdir}/tcl%{major}/tzdata
305 %{_mandir}/man1/*
306 %lang(pl) %{_mandir}/pl/man1/*
307
308 %files devel
309 %defattr(644,root,root,755)
310 %attr(755,root,root) %{_ulibdir}/tclConfig.sh
311 %attr(755,root,root) %{_libdir}/lib*.so
312 %{_libdir}/libtclstub%{major}.a
313 %{_includedir}/*
314 %{_mandir}/man[3n]/*
315 %lang(pl) %{_mandir}/pl/mann/*
This page took 0.050269 seconds and 3 git commands to generate.