1de3a71befb6f66a3734e93492be1eb2fb14a005
[platform/upstream/binutils.git] / packaging / binutils.spec
1 Name:           binutils
2 BuildRequires:  bison
3 BuildRequires:  flex
4 BuildRequires:  gcc-c++
5 # for the testsuite
6 BuildRequires:  glibc-devel-static
7 # for some gold tests
8 BuildRequires:  bc
9 BuildRequires:  makeinfo
10 BuildRequires:  zlib-devel-static
11 Requires(pre):  update-alternatives
12 Version:        2.23.1
13 Release:        0
14 #
15 # RUN_TESTS
16 %define run_tests %(test ! -f %_sourcedir/RUN_TESTS ; echo $?)
17 # check the vanilla binutils, with no patches applied
18 # TEST_VANILLA
19 %define test_vanilla %(test ! -f %_sourcedir/TEST_VANILLA ; echo $?)
20 #
21 # handle test suite failures
22 #
23 %ifarch alpha %arm hppa mips sh4 %sparc
24 %define make_check_handling     true
25 %else
26 # XXX check again
27 # XXX disabled because gold is seriously broken for now
28 %define make_check_handling     true
29 %endif
30 # let make check fail anyway if RUN_TESTS was requested
31 %if %{run_tests}
32 %define make_check_handling     false
33 %endif
34 # handle all binary object formats supported by SuSE (and a few more)
35 %ifarch %ix86 %arm ia64 ppc ppc64 s390 s390x x86_64
36 %define build_multitarget 1
37 %else
38 %define build_multitarget 0
39 %endif
40 %define target_list alpha armv5l armv7l armv8l hppa hppa64 i686 ia64 m68k mips powerpc powerpc64 s390 s390x sh4 sparc sparc64 x86_64
41 #
42 #
43 #
44 Url:            http://www.gnu.org/software/binutils/
45 %define binutils_version %(echo %version | sed 's/\\.[0-9]\\{8\\}$//')
46 Summary:        GNU Binutils
47 License:        GFDL-1.3 and GPL-3.0+
48 Group:          Development/Tools/Building
49 Source:         binutils-%{binutils_version}.tar.bz2
50 Source1:        pre_checkin.sh
51 Source3:        baselibs.conf
52 Source1001:     binutils.manifest
53
54 %description
55 C compiler utilities: ar, as, gprof, ld, nm, objcopy, objdump, ranlib,
56 size, strings, and strip. These utilities are needed whenever you want
57 to compile a program or kernel.
58
59
60 %package gold
61 Summary:        The gold linker
62 License:        GPL-3.0+
63 Group:          Development/Tools/Building
64 Requires:       binutils = %{version}-%{release}
65 %if 0%{!?cross:1}
66 %define gold_archs %ix86 %arm x86_64 ppc ppc64 %sparc
67 %endif
68
69 %description gold
70 gold is an ELF linker.  It is intended to have complete support for ELF
71 and to run as fast as possible on modern systems.  For normal use it is
72 a drop-in replacement for the older GNU linker.
73
74
75 %package devel
76 Summary:        GNU binutils (BFD development files)
77 License:        GPL-3.0+
78 Group:          Development/Libraries/C and C++
79 Requires:       binutils = %{version}-%{release}
80 Requires:       zlib-devel
81 Provides:       binutils:/usr/include/bfd.h
82
83 %description devel
84 This package includes header files and static libraries necessary to
85 build programs which use the GNU BFD library, which is part of
86 binutils.
87
88
89 %ifarch %arm
90 %define HOST %{_target_cpu}-tizen-linux-gnueabi
91 %else
92 %define HOST %(echo %{_target_cpu} | sed -e "s/parisc/hppa/" -e "s/i.86/i586/" -e "s/ppc/powerpc/" -e "s/sparc64v.*/sparc64/" -e "s/sparcv.*/sparc/")-tizen-linux
93 %endif 
94 %define DIST %(echo '%distribution' | sed 's/ (.*)//')
95
96 %prep
97 echo "make check will return with %{make_check_handling} in case of testsuite failures."
98 %setup -q -n binutils-%{binutils_version}
99 cp %{SOURCE1001} .
100
101 sed -i -e '/BFD_VERSION_DATE/s/$/-%(echo %release | sed 's/\.[0-9]*$//')/' bfd/version.h
102 %build
103 RPM_OPT_FLAGS="$RPM_OPT_FLAGS -Wno-error"
104 RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS |sed -e 's/atom/i686/g'`
105 %if 0%{!?cross:1}
106 # Building native binutils
107 echo "Building native binutils." 
108 %if %build_multitarget
109 EXTRA_TARGETS="%(printf ,%%s-tizen-linux %target_list)"
110 EXTRA_TARGETS="$EXTRA_TARGETS,powerpc-macos,powerpc-macos10,spu-elf,x86_64-pep"
111 %else
112 EXTRA_TARGETS=
113 %ifarch sparc
114 EXTRA_TARGETS="$EXTRA_TARGETS,sparc64-tizen-linux"
115 %endif
116 %ifarch ppc
117 EXTRA_TARGETS="$EXTRA_TARGETS,powerpc64-tizen-linux"
118 %endif
119 %ifarch s390
120 EXTRA_TARGETS="$EXTRA_TARGETS,s390x-tizen-linux"
121 %endif
122 %ifarch s390x
123 EXTRA_TARGETS="$EXTRA_TARGETS,s390-tizen-linux"
124 %endif
125 %ifarch %ix86
126 EXTRA_TARGETS="$EXTRA_TARGETS,x86_64-tizen-linux"
127 %endif
128 %ifarch ppc ppc64
129 EXTRA_TARGETS="$EXTRA_TARGETS,spu-elf"
130 %endif
131 %ifarch %arm
132 EXTRA_TARGETS="$EXTRA_TARGETS,arm-tizen-linux-gnueabi"
133 %endif
134 %endif
135 %define common_flags CFLAGS="${RPM_OPT_FLAGS}" CXXFLAGS="${RPM_OPT_FLAGS}" \\\
136         --prefix=%{_prefix} --libdir=%{_libdir} \\\
137         --infodir=%{_infodir} --mandir=%{_mandir} \\\
138         --with-bugurl=http://bugs.opensuse.org/ \\\
139         --with-pkgversion="GNU Binutils; %{DIST}" \\\
140         --disable-nls \\\
141         --with-separate-debug-dir=%{_prefix}/lib/debug \\\
142         --with-pic --build=%{HOST} 
143 mkdir build-dir
144 cd build-dir
145 ../configure %common_flags \
146         ${EXTRA_TARGETS:+--enable-targets="${EXTRA_TARGETS#,}"} \
147         --enable-plugins \
148 %ifarch %gold_archs
149         --enable-gold \
150 %endif
151         --enable-shared
152 make %{?_smp_mflags} all-bfd TARGET-bfd=headers
153 # force reconfiguring (???)
154 rm bfd/Makefile
155 make %{?_smp_mflags}
156
157 %else
158 # building cross-TARGET-binutils
159 echo "Building cross binutils." 
160 mkdir build-dir
161 cd build-dir
162 EXTRA_TARGETS=
163 %if "%{TARGET}" == "sparc"
164 EXTRA_TARGETS="$EXTRA_TARGETS,sparc64-tizen-linux"
165 %endif
166 %if "%{TARGET}" == "powerpc"
167 EXTRA_TARGETS="$EXTRA_TARGETS,powerpc64-tizen-linux"
168 %endif
169 %if "%{TARGET}" == "s390"
170 EXTRA_TARGETS="$EXTRA_TARGETS,s390x-tizen-linux"
171 %endif
172 %if "%{TARGET}" == "s390x"
173 EXTRA_TARGETS="$EXTRA_TARGETS,s390-tizen-linux"
174 %endif
175 %if "%{TARGET}" == "i586"
176 EXTRA_TARGETS="$EXTRA_TARGETS,x86_64-tizen-linux"
177 %endif
178 %if "%{TARGET}" == "hppa"
179 EXTRA_TARGETS="$EXTRA_TARGETS,hppa64-tizen-linux"
180 %endif
181 %if "%{TARGET}" == "arm"
182 EXTRA_TARGETS="$EXTRA_TARGETS,arm-tizen-linux-gnueabi"
183 %endif
184 %if "%{TARGET}" == "avr" || "%{TARGET}" == "spu"
185 TARGET_OS=%{TARGET}
186 %else
187 %if "%{TARGET}" == "arm"
188 TARGET_OS=%{TARGET}-tizen-linux-gnueabi
189 %else
190 TARGET_OS=%{TARGET}-tizen-linux
191 %endif
192 %endif
193 ../configure CFLAGS="${RPM_OPT_FLAGS}" \
194   --prefix=%{_prefix} \
195   --with-bugurl=http://bugs.opensuse.org/ \
196   --with-pkgversion="GNU Binutils; %{DIST}" \
197   --disable-nls \
198   --build=%{HOST} --target=$TARGET_OS \
199 %if "%{TARGET}" == "spu"
200   --with-sysroot=/usr/spu \
201 %else
202   --with-sysroot=%{_prefix}/$TARGET_OS/sys-root \
203 %endif
204   ${EXTRA_TARGETS:+--enable-targets="${EXTRA_TARGETS#,}"}
205 make %{?_smp_mflags} all-bfd TARGET-bfd=headers
206 # force reconfiguring
207 rm bfd/Makefile
208 make %{?_smp_mflags}
209 %if "%{TARGET}" == "avr"
210 # build an extra nesC version because nesC requires $'s in identifiers
211 cp -a gas gas-nesc
212 echo '#include "tc-%{TARGET}-nesc.h"' > gas-nesc/targ-cpu.h
213 make -C gas-nesc clean
214 make -C gas-nesc %{?_smp_mflags}
215 %endif
216 %endif
217
218 %check
219 unset LD_AS_NEEDED
220 cd build-dir
221 %if 0%{?cross:1}
222 make -k check CFLAGS="-O2 -g" CXXFLAGS="-O2 -g" || %{make_check_handling}
223 %else
224 make -k check CFLAGS="$RPM_OPT_FLAGS -Wno-unused -Wno-unprototyped-calls" || :
225 %endif
226
227 %install
228 cd build-dir
229 %if 0%{!?cross:1}
230 # installing native binutils
231 %ifarch %gold_archs
232 make DESTDIR=$RPM_BUILD_ROOT install-gold
233 ln -sf ld.gold $RPM_BUILD_ROOT%{_bindir}/gold
234 %endif
235 make DESTDIR=$RPM_BUILD_ROOT install-info install
236 make -C gas/doc DESTDIR=$RPM_BUILD_ROOT install-info-am install-am
237 make DESTDIR=$RPM_BUILD_ROOT install-bfd install-opcodes
238
239 if [ ! -f "%buildroot/%_bindir/ld.bfd" ]; then
240   mv "%buildroot/%_bindir"/{ld,ld.bfd};
241 else
242   rm -f "%buildroot/%_bindir/ld";
243 fi
244 mkdir -p "%buildroot/%_sysconfdir/alternatives";
245 ln -s "%_bindir/ld" "%buildroot/%_sysconfdir/alternatives/ld";
246 ln -s "%_sysconfdir/alternatives/ld" "%buildroot/%_bindir/ld";
247 rm -rf $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
248 mkdir -p $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
249 ln -sf ../../bin/{ar,as,ld,nm,ranlib,strip} $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
250
251 mv $RPM_BUILD_ROOT%{_prefix}/%{HOST}/lib/ldscripts $RPM_BUILD_ROOT%{_libdir}
252 ln -sf ../../%{_lib}/ldscripts $RPM_BUILD_ROOT%{_prefix}/%{HOST}/lib/ldscripts
253
254 # Install header files
255 make -C libiberty install_to_libdir target_header_dir=/usr/include DESTDIR=$RPM_BUILD_ROOT
256 # We want the PIC libiberty.a
257 install -m 644 libiberty/pic/libiberty.a $RPM_BUILD_ROOT%{_libdir}
258 #
259 chmod a+x $RPM_BUILD_ROOT%{_libdir}/libbfd-*
260 chmod a+x $RPM_BUILD_ROOT%{_libdir}/libopcodes-*
261 # No shared linking outside binutils
262 rm $RPM_BUILD_ROOT%{_libdir}/lib{bfd,opcodes}.so
263 rm $RPM_BUILD_ROOT%{_libdir}/lib{bfd,opcodes}.la
264 # Remove unwanted files to shut up rpm
265 rm $RPM_BUILD_ROOT%{_infodir}/configure* $RPM_BUILD_ROOT%{_infodir}/standards.info*
266 rm $RPM_BUILD_ROOT%{_mandir}/man1/dlltool.1 $RPM_BUILD_ROOT%{_mandir}/man1/windres.1 $RPM_BUILD_ROOT%{_mandir}/man1/windmc.1
267 cd ..
268 #%find_lang binutils
269 #%find_lang bfd binutils.lang
270 #%find_lang gas binutils.lang
271 #%find_lang ld binutils.lang
272 #%find_lang opcodes binutils.lang
273 #%find_lang gprof binutils.lang
274 %ifarch %gold_archs
275 #%find_lang gold binutils-gold.lang
276 %endif
277 mkdir -p $RPM_BUILD_ROOT%{_docdir}/%{name}
278 install -m 644 binutils/NEWS $RPM_BUILD_ROOT%{_docdir}/%{name}/NEWS-binutils
279 install -m 644 gas/NEWS $RPM_BUILD_ROOT%{_docdir}/%{name}/NEWS-gas
280 install -m 644 ld/NEWS $RPM_BUILD_ROOT%{_docdir}/%{name}/NEWS-ld
281 %else
282 # installing cross-TARGET-binutils and TARGET-binutils
283 make DESTDIR=$RPM_BUILD_ROOT install
284 # Replace hard links by symlinks, so that rpmlint doesn't complain
285 T=$(basename %buildroot/usr/%{TARGET}*)
286 for f in %buildroot/usr/$T/bin/* ; do
287    ln -sf /usr/bin/$T-$(basename $f) $f
288 done
289 %if "%{TARGET}" == "avr"
290 install -c gas-nesc/as-new $RPM_BUILD_ROOT%{_prefix}/bin/%{TARGET}-nesc-as
291 ln -sf ../../bin/%{TARGET}-nesc-as $RPM_BUILD_ROOT%{_prefix}/%{TARGET}/bin/nesc-as
292 %endif
293 rm -rf $RPM_BUILD_ROOT%{_mandir}
294 rm -rf $RPM_BUILD_ROOT%{_infodir}
295 rm -rf $RPM_BUILD_ROOT%{_prefix}/lib*
296 rm -rf $RPM_BUILD_ROOT%{_prefix}/include
297 rm -f $RPM_BUILD_ROOT%{_prefix}/bin/*-c++filt
298 > ../binutils.lang
299 %endif
300 cd $RPM_BUILD_DIR/binutils-%version
301
302
303 %if 0%{!?cross:1}
304 %docs_package
305 %post
306 "%_sbindir/update-alternatives" --install \
307     "%_bindir/ld" ld "%_bindir/ld.bfd" 1
308
309 %post gold
310 "%_sbindir/update-alternatives" --install \
311     "%_bindir/ld" ld "%_bindir/ld.gold" 2
312
313
314 %preun
315 if [ "$1" = 0 ]; then
316     "%_sbindir/update-alternatives" --remove ld "%_bindir/ld.bfd";
317 fi;
318
319 %preun gold
320 if [ "$1" = 0 ]; then
321     "%_sbindir/update-alternatives" --remove ld "%_bindir/ld.gold";
322 fi;
323
324 %endif
325
326 %files 
327 %manifest %{name}.manifest
328 %defattr(-,root,root)
329 %if 0%{!?cross:1}
330 %{_docdir}/%{name}
331 %{_prefix}/%{HOST}/bin/*
332 %{_prefix}/%{HOST}/lib/ldscripts
333 %ghost %_sysconfdir/alternatives/ld
334 %{_libdir}/ldscripts
335 %{_bindir}/*
336 %ifarch %gold_archs
337 %exclude %{_bindir}/gold
338 %exclude %{_bindir}/ld.gold
339 %endif
340 %doc %{_infodir}/*.gz
341 %{_libdir}/lib*-%{version}*.so
342 %else
343 %{_prefix}/%{TARGET}*
344 %{_prefix}/bin/*
345 %endif
346
347 %ifarch %gold_archs
348 %files gold 
349 %manifest %{name}.manifest
350 %defattr(-,root,root)
351 %{_bindir}/gold
352 %{_bindir}/ld.gold
353 %endif
354
355 %if 0%{!?cross:1}
356 %files devel
357 %manifest %{name}.manifest
358 %defattr(-,root,root)
359 %{_prefix}/include/*.h
360 %{_libdir}/lib*.*a
361 %endif
362
363 %changelog