]> git.pld-linux.org Git - packages/fpc.git/blob - fpc.spec
- better build options, stop using linker override
[packages/fpc.git] / fpc.spec
1 #
2 # Conditional build:
3 %bcond_with     gdb     # GDB support in FPC IDE
4 %bcond_without  doc     # documentation
5
6 Summary:        Free Pascal - 32-bit Pascal compiler
7 Summary(pl.UTF-8):      Free Pascal - 32-bitowy kompilator języka Pascal
8 Summary(ru.UTF-8):      Свободный компилятор Pascal
9 Summary(uk.UTF-8):      Вільний компілятор Pascal
10 Name:           fpc
11 Version:        3.2.2
12 Release:        1
13 License:        GPL v2+
14 Group:          Development/Languages
15 Source0:        ftp://ftp.freepascal.org/pub/fpc/dist/%{version}/source/%{name}build-%{version}.tar.gz
16 # Source0-md5:  3681ae4a208be4f64ec65e832a9a702d
17 Source1:        ftp://ftp.freepascal.org/pub/fpc/dist/%{version}/i386-linux/%{name}-%{version}.i386-linux.tar
18 # Source1-md5:  18354e51309a34b0efe7702633568a1e
19 Source2:        ftp://ftp.freepascal.org/pub/fpc/dist/%{version}/x86_64-linux/%{name}-%{version}.x86_64-linux.tar
20 # Source2-md5:  0186779de0c9caee073fc1394afbee56
21 Patch0:         %{name}-skip-dev-dot.patch
22 Patch1:         %{name}-link.patch
23 Patch4:         fpcdocs-r1260.patch
24 Patch5:         fpc-man.patch
25 URL:            http://www.freepascal.org/
26 BuildRequires:  babeltrace-devel
27 BuildRequires:  binutils-devel >= 3:2.17.50
28 BuildRequires:  expat-devel
29 BuildRequires:  gpm-devel
30 BuildRequires:  guile-devel
31 BuildRequires:  libselinux-devel
32 BuildRequires:  ncurses-devel
33 BuildRequires:  readline-devel
34 BuildRequires:  rpmbuild(macros) >= 1.213
35 BuildRequires:  xz-devel
36 BuildRequires:  zlib-devel
37 %if %{with gdb}
38 BuildRequires:  gdb-lib >= 7.2-7}
39 BuildRequires:  python-devel
40 %endif
41 %if %{with doc}
42 BuildRequires:  tetex-fonts-jknappen
43 BuildRequires:  tetex-format-pdflatex
44 BuildRequires:  tetex-latex-imakeidx
45 BuildRequires:  tetex-makeindex
46 BuildRequires:  tetex-metafont
47 BuildRequires:  texlive-latex-enumitem
48 BuildRequires:  texlive-latex-ucs
49 BuildRequires:  texlive-tex-xkeyval
50 BuildRequires:  texlive-xetex
51 %endif
52 Requires:       binutils
53 Provides:       fpc-bootstrap
54 ExclusiveArch:  %{ix86} %{x8664}
55 # TODO:
56 # %{arm} ftp://ftp.freepascal.org/pub/fpc/dist/3.0.0/arm-linux/fpc-3.0.0.arm-linux-raspberry1wq.tar
57 # ppc64 ftp://ftp.freepascal.org/pub/fpc/dist/3.0.0/powerpc64-linux/fpc-3.0.0.powerpc64-linux.tar
58 BuildRoot:      %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
59
60 %description
61 Free Pascal is a 32-bit Pascal compiler. Free Pascal is designed to
62 be, as much as possible, source compatible with Turbo Pascal 7.0 and
63 Delphi 4 (although this goal is not yet attained), but it also
64 enhances these languages with elements like function overloading. And,
65 unlike these ancestors, it supports multiple platforms.
66
67 %description -l pl.UTF-8
68 Free Pascal to 32-bitowy kompilator języka Pascal. Free Pascal został
69 zaprojektowany by być (na ile to tylko możliwe) kompatybilnym z Turbo
70 Pascalem 7.0 oraz Delphi 4. Free Pascal również rozszerza te języki
71 elementami takimi jak przeciążanie funkcji.
72
73 %description -l ru.UTF-8
74 FPC -- 32-битный компилятор Pascal, совместимый с Turbo Pascal 7.0 и
75 Delphi. Поставляется с RTL (библиотекой времени исполнения), FCL
76 (библиотекой свободных компонент), интерфейсами к gtk, ncurses, zlib,
77 mysql, postgres, ibase.
78
79 %description -l uk.UTF-8
80 FPC -- 32-бітний компілятор Pascal, сумісний із Turbo Pascal 7.0 та
81 Delphi. Постачається із RTL (бібліотекою часу виконання), FCL
82 (бібліотекою вільних компонент), інтерфейсами до gtk, ncurses, zlib,
83 mysql, postgres, ibase.
84
85 %package ide
86 Summary:        Free Pascal IDE (integrated development environment)
87 Summary(pl.UTF-8):      Zintegrowane środowisko programistyczne (IDE) Free Pascala
88 Group:          Development/Tools
89 Requires:       %{name} = %{version}-%{release}
90
91 %description ide
92 Free Pascal IDE (integrated development environment).
93
94 %description ide -l pl.UTF-8
95 Zintegrowane środowisko programistyczne (IDE) Free Pascala.
96
97 %package src
98 Summary:        Free Pascal Compiler source files
99 Summary(pl.UTF-8):      Pliki źródłowe kompilatora Free Pascal
100 Group:          Development
101 Requires:       %{name} = %{version}-%{release}
102 Provides:       fpcsrc
103
104 %description src
105 Free Pascal Compiler source files.
106
107 %description src -l pl.UTF-8
108 Pliki źródłowe kompilatora Free Pascal.
109
110 %package examples
111 Summary:        Free Pascal Compiler exaple programs
112 Summary(pl.UTF-8):      Przykładowe programy do kompilatora Free Pascal
113 Group:          Documentation
114 Requires:       %{name} = %{version}-%{release}
115
116 %description examples
117 Free Pascal Compiler exaple programs.
118
119 %description examples -l pl.UTF-8
120 Przykładowe programy do kompilatora Free Pascal.
121
122 %package doc
123 Summary:        Free Pascal Compiler documentation
124 Summary(pl.UTF-8):      Dokumentacja do kompilatora Free Pascal
125 Group:          Documentation
126 # doesn't require base
127
128 %description doc
129 Documentation for fpc in PDF format.
130
131 %description doc -l pl.UTF-8
132 Dokumentacja do fpc w formacie PDF.
133
134 %prep
135 %setup -q -n %{name}build-%{version}
136 %patch0 -p1
137 %patch1 -p1
138 %patch4 -p0
139 %patch5 -p1
140
141 %ifarch %{ix86}
142 tar xf %{SOURCE1}
143 %define _bver %{version}
144 %define _bname 386
145 %define _barch i386
146 %endif
147 %ifarch %{x8664}
148 tar xf %{SOURCE2}
149 %define _bver %{version}
150 %define _bname x64
151 %define _barch x86_64
152 %endif
153 %ifarch %{arm}
154 %define _bver %{version}
155 %define _bname arm
156 %define _barch arm
157 %endif
158 %ifarch ppc
159 %define _bver ?
160 %define _bname ppc
161 %define _barch powerpc
162 %endif
163 %ifarch ppc64
164 %define _bver %{version}
165 %define _bname ppc64
166 %define _barch powerpc64
167 %endif
168 %ifarch sparc sparcv9
169 %define _bver ?
170 %define _bname sparc
171 %define _barch sparc
172 %endif
173
174 cd %{name}-%{version}.%{_barch}-linux
175 tar xf binary.*-linux.tar
176 cd ..
177
178 mkdir bin
179 cd bin
180 for i in ../%{name}-%{version}.%{_barch}-linux/*.tar.gz ; do
181         tar xzf $i
182 done
183 ln -sf `pwd`/lib/%{name}/%{_bver}/ppc* bin
184 cd ..
185
186 find fpcsrc -name Makefile -o -name fpcmake.ini -o -name fpmkunit.pp | \
187         xargs %{__sed} -i -e 's|/usr/lib/|%{_libdir}/|g'
188
189 # remove precompiled objects from fpc-src
190 %{__rm} fpcsrc/rtl/palmos/m68k/{libcrt.a,*.o}
191
192 # save for fpc-src
193 install -d fpc-src
194 cp -af fpcsrc/* fpc-src
195 rm -r fpc-src/tests
196
197 %if 0%{?debug:1}
198 find fpcsrc -name Makefile | xargs %{__sed} -i -e 's/-Xs//'
199 %endif
200
201 %{__sed} -E -i -e '1s,#!\s*/usr/bin/env\s+bash(\s|$),#!/bin/bash\1,' \
202       fpc-src/packages/fpmkunit/examples/ppu2fpmake.sh \
203       fpc-src/packages/gdbint/gen-gdblib-inc.sh \
204       fpc-src/packages/gtk2/src/gtk2x11/scripts/gdkx11_h2pas.sh \
205       fpc-src/rtl/unix/scripts/check_consts.sh \
206       fpc-src/rtl/unix/scripts/check_errno.sh \
207       fpc-src/rtl/unix/scripts/check_errnostr.sh \
208       fpc-src/rtl/unix/scripts/check_sys.sh
209
210 %build
211 PP=`pwd`/bin/lib/%{name}/%{_bver}/ppc%{_bname}
212 NEWPP=`pwd`/fpcsrc/compiler/ppc%{_bname}
213 NEWFPDOC=`pwd`/fpcsrc/utils/fpdoc/bin/%{_barch}-linux/fpdoc
214 DATA2INC=`pwd`/fpcsrc/utils/bin/%{_barch}-linux/data2inc
215 FPCSRCDIR=`pwd`/fpcsrc
216
217 # DO NOT PUT $RPM_OPT_FLAGS IN OPT, IT DOES NOT WORK - baggins
218 case "%{_build_cpu}" in
219         i386|i486) OPTF="-OG2p1" ;;
220         i586) OPTF="-OG2p2" ;;
221         i686|athlon|pentium3|pentium4|x86_64|amd64|ia32e) OPTF="-Og2p3" ;;
222         *) OPTF="-O2" ;;
223 esac
224
225 %{__make} -C fpcsrc compiler_cycle \
226         OPT="$OPTF -k--build-id -gl -gw %{!?debug:-Xs} -n" \
227         RELEASE="1" \
228         BASEINSTALLDIR=%{_libdir}/%{name}/%{version} \
229         BININSTALLDIR=%{_bindir} \
230         DATA2INC="$DATA2INC" \
231         PP="$PP" \
232         FPC="$PP" \
233         LINKSMART=YES
234
235 %{__make} -C fpcsrc \
236         OPT="$OPTF -k--build-id -gl -gw %{!?debug:-Xs} -n" \
237         RELEASE="1" \
238         BASEINSTALLDIR=%{_libdir}/%{name}/%{version} \
239         BININSTALLDIR=%{_bindir} \
240         %{?with_gdb:GDBLIBDIR=%{_libdir}} \
241         %{!?with_gdb:NOGDB=YES} \
242         DATA2INC="$DATA2INC" \
243         PP="$NEWPP" \
244         FPC="$NEWPP" \
245         FPDOC=$NEWFPDOC \
246         LINKSMART=YES \
247         NODOCS=YES \
248         rtl_clean \
249         packages_clean \
250         utils_clean \
251         installer_clean \
252         rtl_all \
253         packages_all \
254         utils_all \
255         installer_all
256
257 %if %{with doc}
258 export save_size=10000
259 %{__make} -j1 -C fpcdocs \
260         FPDOC=$NEWFPDOC \
261         FPC="$NEWPP" \
262         FPCSRCDIR="$FPCSRCDIR" \
263         pdf
264 %endif
265
266 %install
267 rm -rf $RPM_BUILD_ROOT
268 install -d $RPM_BUILD_ROOT{%{_sysconfdir},%{_mandir},%{_datadir}/fpcsrc,%{_examplesdir}/fpc}
269
270 cp -af fpc-src/* $RPM_BUILD_ROOT%{_datadir}/fpcsrc
271
272 NEWPP=`pwd`/fpcsrc/compiler/ppc%{_bname}
273 FPCMAKE=`pwd`/fpcsrc/utils/fpcm/bin/%{_barch}-linux/fpcmake
274 %{__make} -j1 -C fpcsrc \
275         compiler_distinstall \
276         rtl_distinstall \
277         packages_distinstall \
278         utils_distinstall \
279         PP="$NEWPP" \
280         FPCMAKE="$FPCMAKE" \
281         SMARTLINK=YES \
282         FPCDIR=%{_libdir}/%{name}/%{version} \
283         INSTALL_PREFIX=$RPM_BUILD_ROOT%{_prefix} \
284         INSTALL_BINDIR=$RPM_BUILD_ROOT%{_bindir} \
285         INSTALL_LIBDIR=$RPM_BUILD_ROOT%{_libdir} \
286         INSTALL_DOCDIR=$RPM_BUILD_ROOT%{_docdir} \
287         INSTALL_MANDIR=$RPM_BUILD_ROOT%{_mandir} \
288         INSTALL_BASEDIR=$RPM_BUILD_ROOT%{_libdir}/%{name}/%{version} \
289         INSTALL_EXAMPLEDIR=$RPM_BUILD_ROOT%{_examplesdir}/%{name} \
290         INSTALL_MANDIR=$RPM_BUILD_ROOT%{_mandir} \
291         CODPATH=$RPM_BUILD_ROOT%{_libdir}/%{name}/lexyacc
292
293 %{__make} -j1 -C install/man installman \
294         INSTALL_MANDIR=$RPM_BUILD_ROOT%{_mandir}
295
296 ln -sf ../%{_lib}/%{name}/%{version}/ppc%{_bname} $RPM_BUILD_ROOT%{_bindir}
297
298 sh fpc-src/compiler/utils/samplecfg $RPM_BUILD_ROOT%{_libdir}/%{name}/%{version} $RPM_BUILD_ROOT%{_sysconfdir}
299 %{__sed} -i -e "s,$RPM_BUILD_ROOT,,g" $RPM_BUILD_ROOT%{_sysconfdir}/{*.cfg,fppkg/default}
300
301 %if "%{_lib}" != "lib"
302 %{__mv} $RPM_BUILD_ROOT%{_prefix}/lib/%{name}/lexyacc $RPM_BUILD_ROOT%{_libdir}/%{name}
303 %endif
304
305 # Fix examples, make seems to ignore INSTALL_EXAMPLEDIR
306 %{__mv} $RPM_BUILD_ROOT%{_docdir}/%{name}-%{version}/* $RPM_BUILD_ROOT%{_examplesdir}/fpc/
307
308 %ifnarch %{ix86}
309 %{__rm} $RPM_BUILD_ROOT%{_mandir}/man1/ppc386.1
310 %endif
311 %ifnarch %{arm}
312 %{__rm} $RPM_BUILD_ROOT%{_mandir}/man1/ppcarm.1
313 %endif
314 %ifnarch ppc ppc64
315 %{__rm} $RPM_BUILD_ROOT%{_mandir}/man1/ppcppc.1
316 %endif
317 %ifnarch sparc sparcv9
318 %{__rm} $RPM_BUILD_ROOT%{_mandir}/man1/ppcsparc.1
319 %endif
320 %ifnarch %{x8664}
321 %{__rm} $RPM_BUILD_ROOT%{_mandir}/man1/ppcx64.1
322 %endif
323
324 %clean
325 rm -rf $RPM_BUILD_ROOT
326
327 %files
328 %defattr(644,root,root,755)
329 %attr(755,root,root) %{_bindir}/bin2obj
330 %attr(755,root,root) %{_bindir}/chmcmd
331 %attr(755,root,root) %{_bindir}/chmls
332 %attr(755,root,root) %{_bindir}/cldrparser
333 %attr(755,root,root) %{_bindir}/compileserver
334 %attr(755,root,root) %{_bindir}/data2inc
335 %attr(755,root,root) %{_bindir}/delp
336 %attr(755,root,root) %{_bindir}/fd2pascal
337 %attr(755,root,root) %{_bindir}/fpc*
338 %attr(755,root,root) %{_bindir}/fpdoc
339 %attr(755,root,root) %{_bindir}/fppkg
340 %attr(755,root,root) %{_bindir}/fprcp
341 %attr(755,root,root) %{_bindir}/grab_vcsa
342 %attr(755,root,root) %{_bindir}/h2pas
343 %attr(755,root,root) %{_bindir}/h2paspp
344 %attr(755,root,root) %{_bindir}/instantfpc
345 %attr(755,root,root) %{_bindir}/json2pas
346 %attr(755,root,root) %{_bindir}/makeskel
347 %attr(755,root,root) %{_bindir}/mka64ins
348 %attr(755,root,root) %{_bindir}/mkarmins
349 %attr(755,root,root) %{_bindir}/mkinsadd
350 %attr(755,root,root) %{_bindir}/mkx86ins
351 %attr(755,root,root) %{_bindir}/pas2fpm
352 %attr(755,root,root) %{_bindir}/pas2jni
353 %attr(755,root,root) %{_bindir}/pas2js
354 %attr(755,root,root) %{_bindir}/pas2ut
355 %attr(755,root,root) %{_bindir}/plex
356 %attr(755,root,root) %{_bindir}/postw32
357 %attr(755,root,root) %{_bindir}/ppc%{_bname}
358 %attr(755,root,root) %{_bindir}/ppdep
359 %attr(755,root,root) %{_bindir}/ppudump
360 %attr(755,root,root) %{_bindir}/ppufiles
361 %attr(755,root,root) %{_bindir}/ppumove
362 %attr(755,root,root) %{_bindir}/ptop
363 %attr(755,root,root) %{_bindir}/pyacc
364 %attr(755,root,root) %{_bindir}/rmcvsdir
365 %attr(755,root,root) %{_bindir}/rstconv
366 %attr(755,root,root) %{_bindir}/unihelper
367 %attr(755,root,root) %{_bindir}/unitdiff
368 %attr(755,root,root) %{_bindir}/webidl2pas
369 # TODO: move the below files to data dir
370 # - JSON resources(?)
371 %{_bindir}/makeskel.rsj
372 %{_bindir}/ptop.rsj
373 %{_bindir}/pas2ut.rsj
374 %{_bindir}/rstconv.rsj
375 %{_bindir}/unitdiff.rsj
376 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/fpc.cfg
377 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/fppkg.cfg
378 %dir %{_sysconfdir}/fppkg
379 %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/fppkg/default
380 %dir %{_libdir}/%{name}
381 %dir %{_libdir}/%{name}/%{version}
382 %dir %{_libdir}/%{name}/lexyacc
383 %{_libdir}/%{name}/%{version}/msg
384 %{_libdir}/%{name}/%{version}/units
385 %{_libdir}/%{name}/%{version}/fpmkinst
386 %{_libdir}/%{name}/lexyacc/*
387 %attr(755,root,root) %{_libdir}/%{name}/%{version}/ppc%{_bname}
388 %attr(755,root,root) %{_libdir}/%{name}/%{version}/samplecfg
389 %attr(755,root,root) %{_libdir}/libpas2jslib.so
390 %{_mandir}/man1/bin2obj.1*
391 %{_mandir}/man1/chmcmd.1*
392 %{_mandir}/man1/chmls.1*
393 %{_mandir}/man1/data2inc.1*
394 %{_mandir}/man1/delp.1*
395 %{_mandir}/man1/fd2pascal.1*
396 %{_mandir}/man1/fp.1*
397 %{_mandir}/man1/fpc*.1*
398 %{_mandir}/man1/fpdoc.1*
399 %{_mandir}/man1/fppkg.1*
400 %{_mandir}/man1/fprcp.1*
401 %{_mandir}/man1/grab_vcsa.1*
402 %{_mandir}/man1/h2pas.1*
403 %{_mandir}/man1/h2paspp.1*
404 %{_mandir}/man1/makeskel.1*
405 %{_mandir}/man1/pas2fpm.1*
406 %{_mandir}/man1/pas2jni.1*
407 %{_mandir}/man1/pas2ut.1*
408 %{_mandir}/man1/plex.1*
409 %{_mandir}/man1/postw32.1*
410 %ifarch ppc64
411 %{_mandir}/man1/ppcppc.1*
412 %else
413 %{_mandir}/man1/ppc%{_bname}.1*
414 %endif
415 %{_mandir}/man1/ppdep.1*
416 %{_mandir}/man1/ppudump.1*
417 %{_mandir}/man1/ppufiles.1*
418 %{_mandir}/man1/ppumove.1*
419 %{_mandir}/man1/ptop.1*
420 %{_mandir}/man1/pyacc.1*
421 %{_mandir}/man1/rmcvsdir.1*
422 %{_mandir}/man1/rstconv.1*
423 %{_mandir}/man1/unitdiff.1*
424 %{_mandir}/man5/fpc.cfg.5*
425 %{_mandir}/man5/fpcmake.5*
426 %{_mandir}/man5/ptop.cfg.5*
427
428 %files ide
429 %defattr(644,root,root,755)
430 %attr(755,root,root) %{_bindir}/fp
431 # TODO: move the below files to data dir
432 # - ANSI art file used by fp binary
433 %{_bindir}/fp.ans
434 %{_bindir}/fp.rsj
435 # - IDE command templates
436 %{_bindir}/cvsco.tdf
437 %{_bindir}/cvsdiff.tdf
438 %{_bindir}/cvsup.tdf
439 %{_bindir}/grep.tdf
440 %{_bindir}/tpgrep.tdf
441 # - Pascal code skeletons
442 %{_bindir}/gplprog.pt
443 %{_bindir}/gplunit.pt
444 %{_bindir}/program.pt
445 %{_bindir}/unit.pt
446 %{_libdir}/%{name}/%{version}/ide
447
448 %files src
449 %defattr(644,root,root,755)
450 %{_datadir}/fpcsrc
451
452 %files examples
453 %defattr(644,root,root,755)
454 %{_examplesdir}/fpc
455
456 %if %{with doc}
457 %files doc
458 %defattr(644,root,root,755)
459 %doc fpcdocs/*.pdf
460 %endif
This page took 0.131843 seconds and 3 git commands to generate.