/[packages]/cauldron/ruby/current/SPECS/ruby.spec
ViewVC logotype

Annotation of /cauldron/ruby/current/SPECS/ruby.spec

Parent Directory Parent Directory | Revision Log Revision Log


Revision 293395 - (hide annotations) (download)
Thu Sep 13 01:43:53 2012 UTC (11 years, 7 months ago) by fwang
File size: 15221 byte(s)
br ruby when not doing bootstrap build
1 fwang 289958 %define subver 1.9
2 fwang 290007 %define rubyapi 1.9.1
3 fwang 289958 %define rubyver 1.9.3
4     %define patchversion p194
5 fwang 293379 %define rel 9
6 blino 1152
7 fwang 291590 %define libname %mklibname ruby %{subver}
8    
9 fwang 291557 %define ruby_libdir %{_datadir}/%{name}
10     %define ruby_libarchdir %{_libdir}/%{name}
11    
12 fwang 290007 # This is the local lib/arch and should not be used for packaging.
13 fwang 291557 %define ruby_sitelibdir %{_datadir}/ruby/site_ruby
14     %define ruby_sitearchdir %{_libdir}/ruby/site_ruby
15 fwang 290007
16     # This is the general location for libs/archs compatible with all
17     # or most of the Ruby versions available in the Fedora repositories.
18 fwang 291551 %define ruby_vendorlibdir %{_datadir}/ruby/vendor_ruby
19 fwang 291557 %define ruby_vendorarchdir %{_libdir}/ruby/vendor_ruby
20 fwang 290007
21     # The RubyGems library has to stay out of Ruby directory three, since the
22     # RubyGems should be share by all Ruby implementations.
23 fwang 291557 %define rubygems_dir %{_datadir}/ruby/gems
24 fwang 291590 %define rubygems_version 1.8.23
25 fwang 290007
26 fwang 293395 %define bootstrap 0
27 fwang 292558
28 blino 1152 Summary: Object Oriented Script Language
29     Name: ruby
30 fwang 291590 Epoch: 1
31 blino 1152 Version: %{rubyver}.%{patchversion}
32     Release: %mkrel %rel
33     License: Ruby or GPLv2
34     Group: Development/Ruby
35     BuildRequires: autoconf
36     BuildRequires: byacc
37 shlomif 291698 BuildRequires: doxygen
38 blino 1152 BuildRequires: ncurses-devel
39     BuildRequires: readline-devel
40     BuildRequires: tcl-devel tk-devel
41 fwang 276350 BuildRequires: db-devel
42 fwang 176940 BuildRequires: gdbm-devel >= 1.8.3
43 blino 1152 BuildRequires: openssl-devel
44     BuildRequires: zlib-devel
45 fwang 289987 BuildRequires: libffi-devel
46     BuildRequires: yaml-devel
47 fwang 289998 BuildRequires: rpm-mageia-setup >= 1.158
48 blino 1152 Obsoletes: ruby-rexml
49     Provides: ruby-rexml
50     # explicit file provides (since such requires are automatically added by find-requires)
51     Provides: /usr/bin/ruby
52     Provides: ruby(abi) = %subver
53    
54 fwang 289958 Source0: http://ftp.ruby-lang.org/pub/ruby/%{subver}/ruby-%{rubyver}-%{patchversion}.tar.bz2
55 blino 1152 Source3: ruby.macros
56     URL: http://www.ruby-lang.org/
57 fwang 292558 %if !%bootstrap
58     Requires: rubygems >= %{rubygems_version}
59 fwang 293395 BuildRequires: ruby
60 fwang 292558 %endif
61 blino 1152
62 fwang 290007 # == FEDORA PATCHES BEGINS ==
63     # http://redmine.ruby-lang.org/issues/5231
64     Patch0: ruby-1.9.3-disable-versioned-paths.patch
65     # TODO: Should be submitted upstream?
66     Patch1: ruby-1.9.3-arch-specific-dir.patch
67     # http://redmine.ruby-lang.org/issues/5281
68     Patch2: ruby-1.9.3-added-site-and-vendor-arch-flags.patch
69     # http://redmine.ruby-lang.org/issues/5465
70     Patch4: ruby-1.9.3-fix-s390x-build.patch
71     # Fix the uninstaller, so that it doesn't say that gem doesn't exist
72     # when it exists outside of the GEM_HOME (already fixed in the upstream)
73     Patch5: ruby-1.9.3-rubygems-1.8.11-uninstaller.patch
74     # http://redmine.ruby-lang.org/issues/5135 - see comment 29
75     Patch6: ruby-1.9.3-webrick-test-fix.patch
76     # Already fixed upstream:
77     # https://github.com/ruby/ruby/commit/f212df564a4e1025f9fb019ce727022a97bfff53
78     Patch7: ruby-1.9.3-bignum-test-fix.patch
79     # Allows to install RubyGems into custom directory, outside of Ruby's tree.
80     # http://redmine.ruby-lang.org/issues/5617
81     Patch8: ruby-1.9.3-custom-rubygems-location.patch
82     # Add support for installing binary extensions according to FHS.
83     # https://github.com/rubygems/rubygems/issues/210
84     Patch9: rubygems-1.8.11-binary-extensions.patch
85     # == FEDORA PATCHES ENDS ==
86    
87 fwang 291591 %package -n %{libname}
88 fwang 291590 Summary: Libraries necessary to run Ruby
89     Group: Development/Ruby
90    
91 blino 1152 %package doc
92     Summary: Documentation for the powerful language Ruby
93     Group: Development/Ruby
94 fwang 202696 BuildArch: noarch
95 blino 1152
96     %package devel
97     Summary: Development file for the powerful language Ruby
98     Group: Development/Ruby
99 fwang 291590 Requires: %{name} = %{epoch}:%{version}
100     Requires: %{libname} = %{epoch}:%{version}
101 blino 1152
102     %package tk
103     Summary: Tk extension for the powerful language Ruby
104     Group: Development/Ruby
105 fwang 291590 Requires: %{name} = %{epoch}:%{version}
106 blino 1152
107 fwang 291551 %package RubyGems
108     Summary: The Ruby standard for packaging ruby libraries
109     Group: Development/Ruby
110 fwang 291590 Version: %{rubygems_version}
111 fwang 291551 Requires: ruby(abi) = %{subver}
112 fwang 291590 Provides: gem = %{rubygems_version}
113     Provides: rubygems = %{rubygems_version}
114     Provides: ruby(rubygems) = %{rubygems_version}
115 fwang 292586 Conflicts: rpm-mageia-setup-build < 1.159
116 fwang 291561 BuildArch: noarch
117 fwang 291551
118 fwang 292839 %define rake_ver 0.9.2.2
119 fwang 291551 %package rake
120     Summary: Simple ruby build program with capabilities similar to make
121     Group: Development/Ruby
122 shlomif 291767 Version: %{rake_ver}
123 fwang 291551 Requires: ruby(abi) = %{subver}
124 shlomif 291767 Provides: rubygem(rake) = %{rake_ver}
125 fwang 291561 BuildArch: noarch
126 fwang 291551
127 shlomif 291767 %define minitest_ver 2.5.1
128 fwang 291562 %package minitest
129 shlomif 291733 Summary: Minitest provides a complete suite of testing facilities
130 fwang 291562 Group: Development/Ruby
131 shlomif 291767 Version: %{minitest_ver}
132 fwang 291562 License: MIT
133 fwang 291590 Requires: ruby(abi) = %{subver}
134     Requires: ruby(rubygems) >= %{rubygems_version}
135 shlomif 291767 Provides: rubygem(minitest) = %{minitest_ver}
136 fwang 291562 BuildArch: noarch
137    
138 shlomif 291767 %define json_ver 1.5.4
139 fwang 291562 %package json
140     Summary: This is a JSON implementation as a Ruby extension in C
141     Group: Development/Ruby
142 shlomif 291767 Version: %{json_ver}
143 fwang 291562 License: Ruby or GPLv2
144 fwang 291590 Requires: ruby(abi) = %{subver}
145     Requires: ruby(rubygems) >= %{rubygems_version}
146 shlomif 291767 Provides: rubygem(json) = %{json_ver}
147 fwang 291562
148 shlomif 291767 %define rdoc_ver 3.9.4
149 fwang 291562 %package rdoc
150     Summary: A tool to generate HTML and command-line documentation for Ruby projects
151     Group: Development/Ruby
152 shlomif 291767 Version: %{rdoc_ver}
153 fwang 291562 License: GPLv2 and Ruby and MIT
154 fwang 291590 Requires: ruby(abi) = %{subver}
155     Requires: ruby(rubygems) >= %{rubygems_version}
156     Requires: ruby(irb) = %{version}
157 shlomif 291767 Provides: rdoc = %{rdoc_ver}
158     Provides: ri = %{rdoc_ver}
159 fwang 291562 BuildArch: noarch
160    
161 fwang 291590 %package irb
162     Summary: The Interactive Ruby
163     Group: Development/Ruby
164     Provides: irb = %{version}-%{release}
165     Provides: ruby(irb) = %{version}-%{release}
166     BuildArch: noarch
167    
168     %package bigdecimal
169     Summary: BigDecimal provides arbitrary-precision floating point decimal arithmetic
170     Group: Development/Ruby
171     Version: 1.1.0
172     License: GPL+ or Artistic
173     Requires: ruby(abi) = %{subver}
174     Requires: ruby(rubygems) >= %{rubygems_version}
175     Provides: rubygem(bigdecimal) = 1.1.0
176    
177     %package io-console
178     Summary: IO/Console is a simple console utilizing library
179     Group: Development/Ruby
180     Version: 0.3
181     Requires: ruby(abi) = %{subver}
182     Requires: ruby(rubygems) >= %{rubygems_version}
183     Provides: rubygem(io-console) = 0.3
184    
185 blino 1152 %description
186     Ruby is the interpreted scripting language for quick and
187     easy object-oriented programming. It has many features to
188     process text files and to do system management tasks (as in
189     Perl). It is simple, straight-forward, and extensible.
190    
191     %description doc
192     Ruby is the interpreted scripting language for quick and
193     easy object-oriented programming. It has many features to
194     process text files and to do system management tasks (as in
195     Perl). It is simple, straight-forward, and extensible.
196    
197     This package contains the Ruby's documentation
198    
199 fwang 291590 %description -n %{libname}
200     This package includes the libruby, necessary to run Ruby.
201    
202 blino 1152 %description devel
203     Ruby is the interpreted scripting language for quick and
204     easy object-oriented programming. It has many features to
205     process text files and to do system management tasks (as in
206     Perl). It is simple, straight-forward, and extensible.
207    
208     This package contains the Ruby's devel files.
209    
210     %description tk
211     Ruby is the interpreted scripting language for quick and
212     easy object-oriented programming. It has many features to
213     process text files and to do system management tasks (as in
214     Perl). It is simple, straight-forward, and extensible.
215    
216     This package contains the Tk extension for Ruby.
217    
218 fwang 291551 %description RubyGems
219     RubyGems is the Ruby standard for publishing and managing third party
220     libraries.
221    
222 fwang 291552 %description rake
223     Rake is a Make-like program implemented in Ruby. Tasks and dependencies are
224     specified in standard Ruby syntax.
225    
226 fwang 291562 %description rdoc
227     RDoc produces HTML and command-line documentation for Ruby projects. RDoc
228     includes the 'rdoc' and 'ri' tools for generating and displaying online
229     documentation.
230    
231     %description json
232     This is a implementation of the JSON specification according to RFC 4627.
233     You can think of it as a low fat alternative to XML, if you want to store
234     data to disk or transmit it over a network rather than use a verbose
235     markup language.
236    
237     %description minitest
238     minitest/unit is a small and incredibly fast unit testing framework.
239    
240     minitest/spec is a functionally complete spec engine.
241    
242     minitest/benchmark is an awesome way to assert the performance of your
243     algorithms in a repeatable manner.
244    
245     minitest/mock by Steven Baker, is a beautifully tiny mock object
246     framework.
247    
248     minitest/pride shows pride in testing and adds coloring to your test
249     output.
250    
251 fwang 291590 %description irb
252     The irb is acronym for Interactive Ruby. It evaluates ruby expression
253     from the terminal.
254    
255     %description bigdecimal
256     Ruby provides built-in support for arbitrary precision integer arithmetic.
257     For example:
258    
259     42**13 -> 1265437718438866624512
260    
261     BigDecimal provides similar support for very large or very accurate floating
262     point numbers. Decimal arithmetic is also useful for general calculation,
263     because it provides the correct answers people expect–whereas normal binary
264     floating point arithmetic often introduces subtle errors because of the
265     conversion between base 10 and base 2.
266    
267     %description io-console
268     IO/Console provides very simple and portable access to console. It doesn't
269     provide higher layer features, such like curses and readline.
270    
271 blino 1152 %prep
272     %setup -q -n ruby-%{rubyver}-%{patchversion}
273 fwang 290007 %apply_patches
274 blino 1152
275     %build
276 fwang 290038 autoconf
277 blino 1152 CFLAGS=`echo %optflags | sed 's/-fomit-frame-pointer//'`
278 fwang 291557 %configure2_5x --enable-shared --disable-rpath --enable-pthread --disable-versioned-paths \
279     --with-rubylibprefix='%{ruby_libdir}' \
280     --with-archdir='%{ruby_libarchdir}' \
281 fwang 290007 --with-sitedir='%{ruby_sitelibdir}' \
282     --with-sitearchdir='%{ruby_sitearchdir}' \
283     --with-vendordir='%{ruby_vendorlibdir}' \
284     --with-vendorarchdir='%{ruby_vendorarchdir}' \
285 fwang 291559 --with-rubyhdrdir='%{_includedir}' \
286 fwang 293378 %if %bootstrap
287     --disable-rubygems \
288 fwang 293390 %else
289     --with-rubygemsdir='%{rubygems_dir}' \
290 fwang 293378 %endif
291 fwang 293381
292 blino 1152 %make
293    
294     %install
295     %makeinstall_std install-doc
296    
297     install -d %buildroot%{_datadir}/emacs/site-lisp
298     cp -a misc/ruby-mode.el %buildroot%{_datadir}/emacs/site-lisp
299    
300     install -d %buildroot%{_sysconfdir}/emacs/site-start.d
301     cat <<EOF >%buildroot%{_sysconfdir}/emacs/site-start.d/%{name}.el
302     (autoload 'ruby-mode "ruby-mode" "Ruby editing mode." t)
303     (add-to-list 'auto-mode-alist '("\\\\.rb$" . ruby-mode))
304     (add-to-list 'interpreter-mode-alist '("ruby" . ruby-mode))
305     EOF
306    
307     # Install the rpm macros
308     mkdir -p %buildroot%{_sysconfdir}/rpm/macros.d
309     cp %{SOURCE3} %buildroot%{_sysconfdir}/rpm/macros.d
310 fwang 289961
311 blino 1152 %check
312     make test
313    
314 fwang 289961 %files
315 fwang 291551 %{_bindir}/erb
316     %{_bindir}/rake
317     %{_bindir}/rdoc
318     %{_bindir}/ri
319     %{_bindir}/ruby
320     %{_bindir}/testrb
321 fwang 291560 %dir %{ruby_libdir}
322     %{ruby_libdir}/*.rb
323 fwang 291590 %exclude %{ruby_libdir}/irb.rb
324 fwang 291560 %exclude %{ruby_libdir}/multi-tk.rb
325     %exclude %{ruby_libdir}/remote-tk.rb
326     %exclude %{ruby_libdir}/tcltk.rb
327     %exclude %{ruby_libdir}/tk.rb
328     %exclude %{ruby_libdir}/tkafter.rb
329     %exclude %{ruby_libdir}/tkbgerror.rb
330     %exclude %{ruby_libdir}/tkcanvas.rb
331     %exclude %{ruby_libdir}/tkclass.rb
332     %exclude %{ruby_libdir}/tkconsole.rb
333     %exclude %{ruby_libdir}/tkdialog.rb
334     %exclude %{ruby_libdir}/tkentry.rb
335     %exclude %{ruby_libdir}/tkfont.rb
336     %exclude %{ruby_libdir}/tkmacpkg.rb
337     %exclude %{ruby_libdir}/tkmenubar.rb
338     %exclude %{ruby_libdir}/tkmngfocus.rb
339     %exclude %{ruby_libdir}/tkpalette.rb
340     %exclude %{ruby_libdir}/tkscrollbox.rb
341     %exclude %{ruby_libdir}/tktext.rb
342     %exclude %{ruby_libdir}/tkvirtevent.rb
343     %exclude %{ruby_libdir}/tkwinpkg.rb
344     %{ruby_libdir}/cgi
345     %{ruby_libdir}/date
346     %{ruby_libdir}/digest
347     %{ruby_libdir}/dl
348     %{ruby_libdir}/drb
349     %{ruby_libdir}/fiddle
350     %{ruby_libdir}/matrix
351     %{ruby_libdir}/net
352     %{ruby_libdir}/openssl
353     %{ruby_libdir}/optparse
354     %{ruby_libdir}/psych
355     %{ruby_libdir}/racc
356     %{ruby_libdir}/rbconfig
357     %{ruby_libdir}/rexml
358     %{ruby_libdir}/rinda
359     %{ruby_libdir}/ripper
360     %{ruby_libdir}/rss
361     %{ruby_libdir}/shell
362     %{ruby_libdir}/syck
363     %{ruby_libdir}/test
364     %{ruby_libdir}/uri
365     %{ruby_libdir}/webrick
366     %{ruby_libdir}/xmlrpc
367     %{ruby_libdir}/yaml
368     %dir %{ruby_libarchdir}
369 fwang 291562 %{ruby_libarchdir}/bigdecimal.so
370 fwang 291560 %{ruby_libarchdir}/continuation.so
371     %{ruby_libarchdir}/coverage.so
372     %{ruby_libarchdir}/curses.so
373     %{ruby_libarchdir}/date_core.so
374     %{ruby_libarchdir}/dbm.so
375     %dir %{ruby_libarchdir}/digest
376     %{ruby_libarchdir}/digest.so
377     %{ruby_libarchdir}/digest/*.so
378     %dir %{ruby_libarchdir}/dl
379     %{ruby_libarchdir}/dl.so
380     %{ruby_libarchdir}/dl/*.so
381     %dir %{ruby_libarchdir}/enc
382     %{ruby_libarchdir}/enc/*.so
383 fwang 291562 %dir %{ruby_libarchdir}/enc/trans
384     %{ruby_libarchdir}/enc/trans/*.so
385 fwang 291560 %{ruby_libarchdir}/etc.so
386     %{ruby_libarchdir}/fcntl.so
387     %{ruby_libarchdir}/fiber.so
388     %{ruby_libarchdir}/fiddle.so
389     %{ruby_libarchdir}/gdbm.so
390     %{ruby_libarchdir}/iconv.so
391     %dir %{ruby_libarchdir}/io
392     %{ruby_libarchdir}/io/nonblock.so
393     %{ruby_libarchdir}/io/wait.so
394     %dir %{ruby_libarchdir}/mathn
395 fwang 291562 %{ruby_libarchdir}/mathn/*.so
396 fwang 291560 %{ruby_libarchdir}/nkf.so
397     %{ruby_libarchdir}/objspace.so
398     %{ruby_libarchdir}/openssl.so
399     %{ruby_libarchdir}/pathname.so
400     %{ruby_libarchdir}/psych.so
401     %{ruby_libarchdir}/pty.so
402     %dir %{ruby_libarchdir}/racc
403     %{ruby_libarchdir}/racc/*.so
404     %{ruby_libarchdir}/rbconfig.rb
405     %{ruby_libarchdir}/readline.so
406     %{ruby_libarchdir}/ripper.so
407     %{ruby_libarchdir}/sdbm.so
408     %{ruby_libarchdir}/socket.so
409     %{ruby_libarchdir}/stringio.so
410     %{ruby_libarchdir}/strscan.so
411     %{ruby_libarchdir}/syck.so
412     %{ruby_libarchdir}/syslog.so
413     %{ruby_libarchdir}/zlib.so
414 fwang 291551 %{_mandir}/man1/erb.1.*
415     %{_mandir}/man1/ri.1.*
416     %{_mandir}/man1/ruby.1.*
417 blino 1152 %{_datadir}/emacs/site-lisp/*
418     %config(noreplace) %{_sysconfdir}/emacs/site-start.d/*
419     %{_sysconfdir}/rpm/macros.d/%{name}.macros
420 fwang 291560 %{_datadir}/ruby/site_ruby
421     %{_libdir}/ruby/site_ruby
422     %{_datadir}/ruby/vendor_ruby
423     %{_libdir}/ruby/vendor_ruby
424 blino 1152
425     %files doc
426     %{_datadir}/ri
427 shlomif 291698 %{_datadir}/doc/ruby/html/*
428 blino 1152
429 fwang 291590 %files -n %{libname}
430     %{_libdir}/libruby.so.%{subver}
431     %{_libdir}/libruby.so.%{rubyapi}
432    
433 blino 1152 %files devel
434 fwang 290003 %{_includedir}/*
435 blino 1152 %{_libdir}/libruby-static.a
436     %{_libdir}/libruby.so
437 fwang 290003 %{_libdir}/pkgconfig/*.pc
438 blino 1152
439     %files tk
440 fwang 291560 %{ruby_libarchdir}/tcltklib.so
441     %{ruby_libarchdir}/tkutil.so
442     %{ruby_libdir}/multi-tk.rb
443     %{ruby_libdir}/remote-tk.rb
444     %{ruby_libdir}/tcltk.rb
445     %{ruby_libdir}/tk.rb
446     %{ruby_libdir}/tkafter.rb
447     %{ruby_libdir}/tkbgerror.rb
448     %{ruby_libdir}/tkcanvas.rb
449     %{ruby_libdir}/tkclass.rb
450     %{ruby_libdir}/tkconsole.rb
451     %{ruby_libdir}/tkdialog.rb
452     %{ruby_libdir}/tkentry.rb
453     %{ruby_libdir}/tkfont.rb
454     %{ruby_libdir}/tkmacpkg.rb
455     %{ruby_libdir}/tkmenubar.rb
456     %{ruby_libdir}/tkmngfocus.rb
457     %{ruby_libdir}/tkpalette.rb
458     %{ruby_libdir}/tkscrollbox.rb
459     %{ruby_libdir}/tktext.rb
460     %{ruby_libdir}/tkvirtevent.rb
461     %{ruby_libdir}/tkwinpkg.rb
462     %{ruby_libdir}/tk
463     %{ruby_libdir}/tkextlib
464 fwang 291551
465 fwang 293378 %if !%bootstrap
466 fwang 291551 %files RubyGems
467     %{_bindir}/gem
468     %dir %{rubygems_dir}
469     %{rubygems_dir}/rbconfig
470     %{rubygems_dir}/rubygems
471     %{rubygems_dir}/rubygems.rb
472     %{rubygems_dir}/ubygems.rb
473    
474 fwang 291562 %files minitest
475     %{ruby_libdir}/minitest
476 fwang 291563 %{rubygems_dir}/%{rubyapi}/specifications/minitest-*.gemspec
477 fwang 291562
478 fwang 291551 %files rake
479     %{_bindir}/rake
480     %{_mandir}/man1/rake.1.*
481 fwang 291562 %{ruby_libdir}/rake
482 fwang 291563 %{rubygems_dir}/%{rubyapi}/gems/rake-*
483 fwang 291590 %{rubygems_dir}/%{rubyapi}/specifications/rake-*.gemspec
484 fwang 291562
485     %files rdoc
486     %{_bindir}/rdoc
487     %{_bindir}/ri
488     %{ruby_libdir}/rdoc
489 fwang 291563 %{rubygems_dir}/%{rubyapi}/gems/rdoc-*
490     %{rubygems_dir}/%{rubyapi}/specifications/rdoc-*.gemspec
491 fwang 291562 %{_mandir}/man1/ri.1.*
492    
493     %files json
494     %dir %{ruby_libarchdir}/json
495     %dir %{ruby_libarchdir}/json/ext
496     %{ruby_libarchdir}/json/ext/*.so
497     %{ruby_libdir}/json
498 fwang 291563 %{rubygems_dir}/%{rubyapi}/specifications/json-*.gemspec
499 fwang 291590
500     %files bigdecimal
501     %{ruby_libdir}/bigdecimal
502     %{ruby_libarchdir}/bigdecimal.so
503 shlomif 291732 %{rubygems_dir}/%{rubyapi}/specifications/bigdecimal-*.gemspec
504 fwang 291590
505     %files io-console
506     %{ruby_libdir}/io
507     %{ruby_libarchdir}/io/console.so
508 shlomif 291732 %{rubygems_dir}/%{rubyapi}/specifications/io-console-*.gemspec
509 fwang 293378 %endif
510    
511     %files irb
512     %{_bindir}/irb
513     %{ruby_libdir}/irb.rb
514     %{ruby_libdir}/irb
515     %{_mandir}/man1/irb.1*

  ViewVC Help
Powered by ViewVC 1.1.30