]> git.pld-linux.org Git - packages/tomcat.git/blame - tomcat.spec
- rel 7 (fixed /var/lib/tomcat vs. /usr/share/tomcat confusion)
[packages/tomcat.git] / tomcat.spec
CommitLineData
3ba87888 1
eca62e60 2# Conditional build:
ac632beb 3%bcond_without javadoc # skip building javadocs
1d6ec01d 4%bcond_without webservices # skip building webservices
1d6ec01d 5
6%define jspapiver 2.1
7%define servletapiver 2.5
8
3ba87888 9%include /usr/lib/rpm/macros.java
868907c0 10Summary: Web server and Servlet/JSP Engine, RI for Servlet %{servletapiver}/JSP %{jspapiver} API
f02af67f 11Summary(pl.UTF-8): Serwer www i silnik Servlet/JSP będący wzorcową implementacją API Servlet %{servletapiver}/JSP %{jspapiver}
14a619da 12Name: tomcat
d4e41cd7 13Version: 6.0.26
d35d9f28 14Release: 7
c1934721 15License: Apache v2.0
16Group: Networking/Daemons/Java
1d6ec01d 17Source0: http://www.apache.org/dist/tomcat/tomcat-6/v%{version}/src/apache-%{name}-%{version}-src.tar.gz
d4e41cd7 18# Source0-md5: 83b46d9346bcbc517dbf6f1cac9ef8b1
14a619da 19Source1: apache-%{name}.init
20Source2: apache-%{name}.sysconfig
1d6ec01d 21Source3: %{name}-build.properties
22Source10: %{name}-context-ROOT.xml
23Source11: %{name}-context-docs.xml
24Source12: %{name}-context-manager.xml
25Source13: %{name}-context-host-manager.xml
26Source14: %{name}-context-examples.xml
27Patch0: %{name}-build.xml.patch
28Patch1: %{name}-extras.xml.patch
aef723ef 29URL: http://tomcat.apache.org/
498e9275 30BuildRequires: ant >= 1.5.3
7ea1b4e7 31BuildRequires: ant-trax
1d6ec01d 32BuildRequires: eclipse-jdt >= 3.2
5d4d27d1 33BuildRequires: java-commons-daemon >= 1.0
1d6ec01d 34BuildRequires: java-commons-dbcp-tomcat5 >= 0:1.1
ffe85d25 35BuildRequires: java-commons-pool-tomcat5
1d6ec01d 36%if %{with webservices}
1d6ec01d 37BuildRequires: java(JSR109)
3ba87888 38BuildRequires: java-geronimo-spec-jaxrpc
1d6ec01d 39%endif
e5a85283 40BuildRequires: java-jdbc-mysql
25b4b7d9 41BuildRequires: jdk
7ea1b4e7 42BuildRequires: jpackage-utils
a18fb636 43BuildRequires: rpm-javaprov
7ea1b4e7 44BuildRequires: rpmbuild(macros) >= 1.300
8129909e
ER
45Requires(post,preun): /sbin/chkconfig
46Requires(postun): /usr/sbin/groupdel
47Requires(postun): /usr/sbin/userdel
48Requires(pre): /bin/id
49Requires(pre): /usr/bin/getgid
50Requires(pre): /usr/sbin/groupadd
51Requires(pre): /usr/sbin/useradd
d5057aa4 52Requires: java(jaxp_parser_impl)
53Requires: java(jndi) >= 1.2.1
2d7d7c63 54Requires: java-%{name}-catalina = %{epoch}:%{version}-%{release}
55Requires: java-%{name}-coyote = %{epoch}:%{version}-%{release}
d0340044 56Requires: java-%{name}-jasper = %{epoch}:%{version}-%{release}
ffe85d25 57Requires: java-commons-dbcp-tomcat5 >= 0:1.1
ffe85d25 58Requires: java-commons-pool-tomcat5
da4f9769 59Requires: java-jdbc-mysql
60Requires: java-servletapi = %{epoch}:%{version}-%{release}
06f3c8c2 61Requires: jpackage-utils
3352e747 62Requires: jre >= 1.2
06f3c8c2 63Requires: jsvc
eca62e60 64Requires: rc-scripts
da4f9769 65Suggests: tomcat-native
fa20abb1 66Provides: group(servlet)
201f6baa 67Provides: group(tomcat)
68Provides: user(tomcat)
26763826 69Obsoletes: apache-tomcat
51bcbcd2 70Obsoletes: jakarta-tomcat
623f0978 71BuildArch: noarch
72BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
73
a97a4eb2 74%define _tomcatdir %{_datadir}/tomcat
623f0978 75%define _logdir %{_var}/log
a0446376 76%define _vardir %{_var}/lib/tomcat
a97a4eb2 77%define _sysconfdir /etc/tomcat
623f0978 78
1d6ec01d 79%define find_jar() %{expand:%%define jarfile {%(jar=$(find-jar %1); echo ${jar:-%%nil})}}%{?jarfile}%{!?jarfile:%{error:find-jar %1 failed}}%{nil}
80
623f0978 81%description
eca62e60
ER
82Tomcat is the servlet container that is used in the official Reference
83Implementation for the Java Servlet and JavaServer Pages technologies.
84The Java Servlet and JavaServer Pages specifications are developed by
85Sun under the Java Community Process.
623f0978 86
eca62e60
ER
87Tomcat is developed in an open and participatory environment and
88released under the Apache Software License. Tomcat is intended to be a
89collaboration of the best-of-breed developers from around the world.
90We invite you to participate in this open development project.
91
f045ab88
JB
92%description -l pl.UTF-8
93Tomcat to kontener serwletowy używany przez oficjalną implementację
94wzorcową technologii Java Servlet i JavaServer Pages. Specyfikacje
51bcbcd2
ER
95Java Servlet i JavaServer Pages są rozwijane przez Suna zgodnie z Java
96Community Process.
623f0978 97
1d6ec01d 98%package webapp-docs
51bcbcd2 99Summary: The Apache Tomcat Servlet/JSP Container documentation
152e6062 100Summary(pl.UTF-8): Dokumentacja do Tomcata - kontenera Servlet/JSP
c1934721 101Group: Documentation
26763826 102Obsoletes: apache-tomcat-doc
51bcbcd2 103Obsoletes: jakarta-tomcat-doc
1d6ec01d 104Obsoletes: tomcat-doc
623f0978 105
1d6ec01d 106%description webapp-docs
e1f70dd8
JB
107The Tomcat Servlet/JSP Container documentation.
108
1d6ec01d 109%description webapp-docs -l pl.UTF-8
152e6062 110Dokumentacja do Tomcata - kontenera Servlet/JSP.
623f0978 111
1d6ec01d 112%package webapp-manager
113Summary: The Apache Tomcat Servlet/JSP application manager
114Summary(pl.UTF-8): Zarządca aplikacji w Tomcacie
115Group: Networking/Daemons/Java/Servlets
8917be8d 116Requires: %{name} = %{epoch}:%{version}-%{release}
1d6ec01d 117
118%description webapp-manager
119The Apache Tomcat Servlet/JSP application manager.
120
121%description webapp-manager -l pl.UTF-8
122Zarządca aplikacji w Tomcacie.
123
124%package webapp-host-manager
125Summary: The Apache Tomcat Servlet/JSP virtual hosts manager
126Summary(pl.UTF-8): Zarządca wirtualnych hostów w Tomcacie
c1934721 127Group: Networking/Daemons/Java/Servlets
8917be8d 128Requires: %{name} = %{epoch}:%{version}-%{release}
1d6ec01d 129Obsoletes: tomcat-admin
804609f8 130
1d6ec01d 131%description webapp-host-manager
132The Apache Tomcat Servlet/JSP virtual hosts manager.
804609f8 133
1d6ec01d 134%description webapp-host-manager -l pl.UTF-8
135Zarządca wirtualnych hostów w Tomcacie.
136
137%package webapp-examples
138Summary: The Apache Tomcat Servlet/JSP example applications
139Summary(pl.UTF-8): Przykładowe aplikacje dla Tomcata
140Group: Networking/Daemons/Java/Servlets
8917be8d 141Requires: %{name} = %{epoch}:%{version}-%{release}
1d6ec01d 142
143%description webapp-examples
144The Apache Tomcat Servlet/JSP example applications.
145
146%description webapp-examples -l pl.UTF-8
147Przykładowe aplikacje dla Tomcata.
148
149%package webservices
150Summary: Web Services support (JSR 109)
151Group: Libraries/Java
da4f9769 152Requires: %{name} = %{epoch}:%{version}-%{release}
1d6ec01d 153Requires: java(JSR109)
3ba87888 154Requires: java-geronimo-spec-jaxrpc
1d6ec01d 155
156%description webservices
157Factories for JSR 109 which may be used to resolve web services
158references.
804609f8 159
df85b7fd 160%package -n java-tomcat-catalina
f02af67f 161Summary: Tomcat's servlet container
162Group: Libraries/Java
163Requires: jpackage-utils
164
df85b7fd 165%description -n java-tomcat-catalina
f02af67f 166Catalina is Tomcat's servlet container. Catalina implements Sun
167Microsystems' specifications for servlet and JavaServer Pages (JSP).
168
df85b7fd 169%package -n java-tomcat-coyote
f02af67f 170Summary: Tomcat HTTP connector
171Group: Libraries/Java
172Requires: jpackage-utils
173
df85b7fd 174%description -n java-tomcat-coyote
f02af67f 175Coyote is Tomcat's HTTP Connector component that supports the HTTP 1.1
176protocol for the web server or application container. Coyote listens
177for incoming connections on a specific TCP port on the server and
178forwards the request to the Tomcat Engine to process the request and
179send back a response to the requesting client.
180
d0340044 181%package -n java-tomcat-jasper
55a9c77b 182Summary: JSP compiler
183Summary(pl.UTF-8): Kompilator JSP
d4ae229e 184Group: Libraries/Java
2ab6ab5f 185Requires: eclipse-jdt >= 3.2
da4f9769 186Requires: jpackage-utils
26763826 187Obsoletes: apache-tomcat-jasper
d0340044 188Obsoletes: tomcat-jasper
d4ae229e 189
d0340044 190%description -n java-tomcat-jasper
55a9c77b 191Jasper is Java ServerPages compiler used by Apache Tomcat servlet
192container.
193
d0340044 194%description -n java-tomcat-jasper -l pl.UTF-8
55a9c77b 195Jasper jest kompilatorem Java ServerPages używanym przez kontener
196servletów Apache Tomcat.
d4ae229e 197
1d6ec01d 198%package -n java-servletapi
199Summary: Java servlet and JSP implementation classes
200Summary(pl.UTF-8): Klasy z implementacją Java Servlet i JSP
201Group: Libraries/Java
d5057aa4 202Provides: java(jsp) = %{jspapiver}
203Provides: java(servlet) = %{servletapiver}
1d6ec01d 204Obsoletes: java-servletapi5
205
206%description -n java-servletapi
207Implementation classes of the Java Servlet and JSP APIs (packages
208javax.servlet, javax.servlet.http, javax.servlet.jsp, and
209javax.servlet.jsp.tagext).
210
211%description -n java-servletapi -l pl.UTF-8
212Implementacje klas API Java Servlet i JSP (pakiety javax.servlet,
213javax.servlet.http, javax.servlet.jsp i java.servlet.jsp.tagext).
214
623f0978 215%prep
14a619da 216%setup -q -n apache-%{name}-%{version}-src
3bd96a5e 217
1d6ec01d 218%patch0 -p0
219%patch1 -p0
e2f6574d 220
1d6ec01d 221# we don't need those scripts
222rm bin/*.bat
223rm bin/{startup,shutdown}.sh
eca62e60 224
1d6ec01d 225cp %{SOURCE3} build.properties
623f0978 226
227%build
eca62e60
ER
228TOPDIR=$(pwd)
229
1d6ec01d 230%ant -Drpm.javadir=%{_javadir} -Drpm.libdir=%{_libdir}
231
232%if %{with javadoc}
233%ant -f dist.xml dist-javadoc
234%endif
235
236%if %{with webservices}
237mkdir -p output/extras/webservices
238
239ln -s %{_javadir}/geronimo-spec-jaxrpc.jar output/extras/webservices/jaxrpc.jar
240ln -s %{_javadir}/jsr109.jar output/extras/webservices/wsdl4j.jar
241
242%ant -f extras.xml webservices
243%endif
3bd96a5e 244
eca62e60 245
623f0978 246%install
247rm -rf $RPM_BUILD_ROOT
1d6ec01d 248cd output/build
249
a97a4eb2
ER
250TOMCATDIR=$RPM_BUILD_ROOT%{_tomcatdir}
251CATALINADIR=$RPM_BUILD_ROOT/var/lib/tomcat
623f0978 252
1d6ec01d 253install -d $TOMCATDIR \
254 $CATALINADIR/temp \
98133f85 255 $RPM_BUILD_ROOT%{_vardir}/webapps \
a0446376 256 $RPM_BUILD_ROOT%{_vardir}/work \
98133f85 257 $RPM_BUILD_ROOT%{_vardir}/conf \
1d6ec01d 258 $RPM_BUILD_ROOT%{_logdir}/tomcat \
125df118 259 $RPM_BUILD_ROOT/etc/sysconfig \
a0446376 260 $RPM_BUILD_ROOT/etc/rc.d/init.d
389e46b9 261
a97a4eb2 262install %{SOURCE1} $RPM_BUILD_ROOT/etc/rc.d/init.d/tomcat
f93b3a59 263install %{SOURCE2} $RPM_BUILD_ROOT/etc/sysconfig/tomcat
623f0978 264
3bd96a5e 265cp -a conf/* $CATALINADIR/conf
1d6ec01d 266install -d $CATALINADIR/conf/Catalina/localhost
3e2cdbf3 267install %{SOURCE10} $CATALINADIR/conf/Catalina/localhost/ROOT.xml
1d6ec01d 268install %{SOURCE11} $CATALINADIR/conf/Catalina/localhost/docs.xml
269install %{SOURCE12} $CATALINADIR/conf/Catalina/localhost/manager.xml
270install %{SOURCE13} $CATALINADIR/conf/Catalina/localhost/host-manager.xml
271install %{SOURCE14} $CATALINADIR/conf/Catalina/localhost/examples.xml
272
273cp -a bin lib webapps $TOMCATDIR
3bd96a5e 274cp -a temp $CATALINADIR
a97a4eb2 275
98133f85 276ln -sf %{_logdir}/tomcat $CATALINADIR/logs
093ffc1c 277ln -sf %{_logdir}/tomcat $TOMCATDIR/logs
4f9f35cf 278ln -sf %{_vardir}/work $TOMCATDIR/work
98133f85 279ln -sf %{_vardir}/conf $TOMCATDIR/conf
280ln -sf %{_vardir}/conf $RPM_BUILD_ROOT%{_sysconfdir}
a97a4eb2
ER
281
282# symlinks instead of copies
1fe35e78 283jars="commons-daemon commons-logging-api"
fddf8ded
ER
284for jar in $jars; do
285 jar=$(find-jar $jar)
286 ln -sf $jar $TOMCATDIR/bin
287done
288
2ab6ab5f 289jars="commons-pool-tomcat5 commons-dbcp-tomcat5 mysql-connector-java org.eclipse.jdt.core"
1fe35e78 290for jar in $jars; do
291 jar=$(find-jar $jar)
292 ln -sf $jar $TOMCATDIR/lib
293done
294
1d6ec01d 295install -d $RPM_BUILD_ROOT%{_javadir}
296mv $TOMCATDIR/lib/jasper*.jar $RPM_BUILD_ROOT%{_javadir}
297mv $TOMCATDIR/lib/jsp-api.jar $RPM_BUILD_ROOT%{_javadir}/jsp-api-%{jspapiver}.jar
298mv $TOMCATDIR/lib/servlet-api.jar $RPM_BUILD_ROOT%{_javadir}/servlet-api-%{servletapiver}.jar
f02af67f 299mv $TOMCATDIR/lib/catalina.jar $RPM_BUILD_ROOT%{_javadir}/tomcat6-catalina.jar
300mv $TOMCATDIR/lib/tomcat-coyote.jar $RPM_BUILD_ROOT%{_javadir}/tomcat6-coyote.jar
3bd96a5e 301
1d6ec01d 302ln -s jsp-api-%{jspapiver}.jar $RPM_BUILD_ROOT%{_javadir}/jsp-api.jar
303ln -s servlet-api-%{servletapiver}.jar $RPM_BUILD_ROOT%{_javadir}/servlet-api.jar
3bd96a5e 304
1d6ec01d 305# XXX add softlinks jasper-compiler.jar and jasper-runtime for compatibility with tomcat 5.5?
1d6ec01d 306ln -sf %{_javadir}/jasper-el.jar $TOMCATDIR/lib
307ln -sf %{_javadir}/jasper.jar $TOMCATDIR/lib
6378940b 308
2b6adad9 309ln -sf %{_javadir}/jsp-api-%{jspapiver}.jar $TOMCATDIR/lib/jsp-api.jar
310ln -sf %{_javadir}/servlet-api-%{servletapiver}.jar $TOMCATDIR/lib/servlet-api.jar
a0446376 311
f02af67f 312ln -sf %{_javadir}/tomcat6-catalina.jar $TOMCATDIR/lib/catalina.jar
313ln -sf %{_javadir}/tomcat6-coyote.jar $TOMCATDIR/lib/tomcat-coyote.jar
314
1d6ec01d 315%if %{with webservices}
316install ../extras/catalina-ws.jar $TOMCATDIR/lib/catalina-ws.jar
317
318ln -s %{_javadir}/geronimo-spec-jaxrpc.jar $TOMCATDIR/lib/jaxrpc.jar
319ln -s %{_javadir}/jsr109.jar $TOMCATDIR/lib/jsr109.jar
320%endif
d4ae229e 321
623f0978 322%clean
323rm -rf $RPM_BUILD_ROOT
324
2b56d949 325%pre
bc75997d 326%groupadd -g 234 -r -f tomcat
fa20abb1 327%groupadd -g 237 -r -f servlet
328%useradd -u 234 -r -d /var/lib/tomcat -s /bin/false -c "Tomcat User" -g tomcat -G servlet tomcat
2b56d949 329
330%post
331/sbin/chkconfig --add tomcat
6c0937ca 332%service tomcat restart
2b56d949 333
334%preun
335if [ "$1" = "0" ]; then
6c0937ca 336 %service tomcat stop
2b56d949 337 /sbin/chkconfig --del tomcat
338fi
339
340%postun
341if [ "$1" = "0" ]; then
201f6baa 342 %userremove tomcat
343 %groupremove tomcat
fa20abb1 344 %groupremove servlet
2b56d949 345fi
346
623f0978 347%files
348%defattr(644,root,root,755)
1d6ec01d 349%doc KEYS RELEASE-NOTES RELEASE-PLAN-6.0.txt RUNNING.txt
a97a4eb2 350%attr(754,root,root) /etc/rc.d/init.d/tomcat
ab574f59 351%config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/tomcat
98133f85 352%{_sysconfdir}
a0446376 353%dir %{_tomcatdir}
98133f85 354%dir %{_tomcatdir}/conf
a0446376 355%dir %{_tomcatdir}/bin
a97a4eb2 356%{_tomcatdir}/bin/catalina-tasks.xml
389e46b9 357%attr(755,root,root) %{_tomcatdir}/bin/*.sh
389e46b9 358%{_tomcatdir}/bin/*.jar
1d6ec01d 359%dir %{_tomcatdir}/lib
360%{_tomcatdir}/lib/annotations-api.jar
d97bb7aa 361%{_tomcatdir}/lib/catalina-ant.jar
362%{_tomcatdir}/lib/catalina-ha.jar
1d6ec01d 363%{_tomcatdir}/lib/catalina.jar
d97bb7aa 364%{_tomcatdir}/lib/catalina-tribes.jar
1d6ec01d 365%{_tomcatdir}/lib/commons-dbcp-tomcat5.jar
3a73cb68 366%{_tomcatdir}/lib/commons-pool-tomcat5.jar
1d6ec01d 367%{_tomcatdir}/lib/el-api.jar
34a6b0e4 368%{_tomcatdir}/lib/jasper-el.jar
369%{_tomcatdir}/lib/jasper.jar
2ab9f95e 370%{_tomcatdir}/lib/jsp-api.jar
d97bb7aa 371%{_tomcatdir}/lib/mysql-connector-java.jar
34a6b0e4 372%{_tomcatdir}/lib/org.eclipse.jdt.core.jar
2ab9f95e 373%{_tomcatdir}/lib/servlet-api.jar
1d6ec01d 374%{_tomcatdir}/lib/tomcat-coyote.jar
d97bb7aa 375%{_tomcatdir}/lib/tomcat-i18n-es.jar
376%{_tomcatdir}/lib/tomcat-i18n-fr.jar
1d6ec01d 377%{_tomcatdir}/lib/tomcat-i18n-ja.jar
3bf2e196
ER
378
379%dir %{_tomcatdir}/webapps
380
381%config(noreplace) %attr(664,root,tomcat) %verify(not md5 mtime size) %{_vardir}/conf/Catalina/localhost/ROOT.xml
382%{_tomcatdir}/webapps/ROOT
383
50aa3a1c 384%{_tomcatdir}/logs
a0446376 385%{_tomcatdir}/work
efc565cf 386%dir %attr(770,root,tomcat) %{_vardir}
1d6ec01d 387# these directory has to be writeable because /admin need to modify config
388# files and create temporary files
efc565cf 389%dir %attr(770,root,tomcat) %{_vardir}/conf
390%dir %attr(770,root,tomcat) %{_vardir}/conf/Catalina
49a8ad15 391%dir %{_vardir}/conf/Catalina/localhost
3bf2e196 392# tomcat config has to be writeable because of tomcat-users.xml file and Catalina dir
8ffc4ec0 393%config(noreplace) %attr(660,root,tomcat) %verify(not md5 mtime size) %{_vardir}/conf/catalina.policy
394%config(noreplace) %attr(660,root,tomcat) %verify(not md5 mtime size) %{_vardir}/conf/*.properties*
395%config(noreplace) %attr(660,root,tomcat) %verify(not md5 mtime size) %{_vardir}/conf/*.xml
efc565cf 396%dir %attr(770,root,tomcat) %{_vardir}/work
397%dir %attr(770,root,tomcat) %{_vardir}/webapps
398%dir %attr(770,root,tomcat) %{_vardir}/temp
399%dir %attr(770,root,tomcat) %{_logdir}/tomcat
9e1e98ce 400%{_vardir}/logs
623f0978 401
1d6ec01d 402%files webapp-docs
ff740076 403%defattr(644,root,root,755)
1d6ec01d 404%config(noreplace) %attr(664,root,tomcat) %verify(not md5 mtime size) %{_vardir}/conf/Catalina/localhost/docs.xml
405%{_tomcatdir}/webapps/docs
d4ae229e 406
1d6ec01d 407%files webapp-manager
804609f8 408%defattr(644,root,root,755)
1d6ec01d 409%config(noreplace) %attr(664,root,tomcat) %verify(not md5 mtime size) %{_vardir}/conf/Catalina/localhost/manager.xml
410%{_tomcatdir}/webapps/manager
411
412%files webapp-host-manager
413%defattr(644,root,root,755)
414%config(noreplace) %attr(664,root,tomcat) %verify(not md5 mtime size) %{_vardir}/conf/Catalina/localhost/host-manager.xml
415%{_tomcatdir}/webapps/host-manager
416
417%files webapp-examples
418%defattr(644,root,root,755)
419%config(noreplace) %attr(664,root,tomcat) %verify(not md5 mtime size) %{_vardir}/conf/Catalina/localhost/examples.xml
420%{_tomcatdir}/webapps/examples
421
422%if %{with webservices}
423%files webservices
424%defattr(644,root,root,755)
d97bb7aa 425%{_tomcatdir}/lib/catalina-ws.jar
1d6ec01d 426%{_tomcatdir}/lib/jsr109.jar
427%{_tomcatdir}/lib/jaxrpc.jar
1d6ec01d 428%endif
804609f8 429
d0340044 430%files -n java-tomcat-jasper
7e500426 431%defattr(644,root,root,755)
1d6ec01d 432%{_javadir}/jasper-el.jar
433%{_javadir}/jasper.jar
434
df85b7fd 435%files -n java-tomcat-catalina
f02af67f 436%defattr(644,root,root,755)
437%{_javadir}/tomcat6-catalina.jar
438
df85b7fd 439%files -n java-tomcat-coyote
f02af67f 440%defattr(644,root,root,755)
441%{_javadir}/tomcat6-coyote.jar
442
1d6ec01d 443%files -n java-servletapi
444%defattr(644,root,root,755)
445%{_javadir}/jsp-api*.jar
446%{_javadir}/servlet-api*.jar
This page took 0.10822 seconds and 4 git commands to generate.