File cross-alpha-binutils.spec of Package binutils

#
# spec file for package cross-alpha-binutils (Version 2.21)
#
# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#



Name:           cross-alpha-binutils
BuildRequires:  bison dejagnu flex gcc-c++
# for some gold tests
BuildRequires:  bc
%if 0%{suse_version} > 1110
BuildRequires:  zlib-devel-static
%else
BuildRequires:  zlib-devel
%endif
Version:        2.21
Release:        1
#
# RUN_TESTS
%define run_tests %(test ! -f %_sourcedir/RUN_TESTS ; echo $?)
# check the vanilla binutils, with no patches applied
# TEST_VANILLA
%define test_vanilla %(test ! -f %_sourcedir/TEST_VANILLA ; echo $?)
#
# handle test suite failures
#
%ifarch alpha armv4l hppa mips sh4 %sparc
%define	make_check_handling	true
%else
# XXX check again
# XXX disabled because gold is seriously broken for now
%define	make_check_handling	true
%endif
# let make check fail anyway if RUN_TESTS was requested
%if %{run_tests}
%define	make_check_handling	false
%endif
# handle all binary object formats supported by SuSE (and a few more)
%ifarch %ix86 ia64 ppc ppc64 s390 s390x x86_64
%define build_multitarget 1
%else
%define build_multitarget 0
%endif
%define target_list alpha arm hppa hppa64 i686 ia64 m68k mips powerpc powerpc64 s390 s390x sh4 sparc sparc64 x86_64
#
#
#
Url:            http://www.gnu.org/software/binutils/
License:        GPLv3+
Group:          Development/Tools/Building
PreReq:         %{install_info_prereq}
AutoReqProv:    on
# bug437293
%ifarch ppc64
Obsoletes:      binutils-64bit
%endif
#
%define binutils_version %(echo %version | sed 's/\\.[0-9]\\{8\\}$//')
Summary:        GNU Binutils
Source:         binutils-%{binutils_version}.tar.bz2
Source1:        pre_checkin.sh
Source2:        README.First-for.SuSE.packagers
Source3:        baselibs.conf
Patch2:         s390-pic.patch
Patch3:         binutils-skip-rpaths.patch
Patch4:         s390-biarch.diff
Patch5:         x86-64-biarch.patch
Patch6:         unit-at-a-time.patch
Patch7:         ld-dtags.diff
Patch8:         ld-relro.diff
Patch9:         testsuite.diff
Patch10:        enable-targets-gold.diff
Patch11:        use-hashtype-both-by-default.diff
Patch12:        s390-pic-dso.diff
Patch14:        binutils-build-as-needed.diff
Patch15:        fixup-testcase-perturb.diff
Patch90:        cross-avr-nesc-as.patch
Patch92:        cross-avr-omit_section_dynsym.patch
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
%if "%{name}" != "binutils"
%define	_prefix	/opt/cross
%else
%define	_prefix	/usr
%endif

%description
C compiler utilities: ar, as, gprof, ld, nm, objcopy, objdump, ranlib,
size, strings, and strip. These utilities are needed whenever you want
to compile a program or kernel.



Authors:
--------
    Alan Modra <amodra@bigpond.net.au>
    Andreas Jaeger <aj@suse.de>
    Andreas Schwab <schwab@suse.de>
    Bill Cox <bill@cygnus.com>
    Brendan Kehoe <brendan@cygnus.com>
    D. V. Henkel-Wallace <gumby@cygnus.com>
    DJ Delorie <dj@redhat.com>
    David D "Zoo" Zuhn <zoo@cygnus.com>
    David J. Mackenzie <djm@cygnus.com>
    Denis Chertykov <denisc@overta.ru>
    Diego Novillo <dnovillo@redhat.com>
    Doug Evans <dje@cygnus.com>
    Eric Christopher <echristo@redhat.com>
    Eric Youngdale <eric@aib.com>
    Fred Fish <fnf@cygnus.com>
    Geoff Keating <geoffk@redhat.com>
    H.J.Lu <hjl@gnu.org>
    Hans-Peter Nilsson <hp@axis.com>
    Ian Dall <dall@hfrd.dsto.gov.au>
    Ian Taylor <ian@zembu.com>
    J.T. Conklin <jtc@cygnus.com>
    Jakub Jelinek <jakub@redhat.com>
    Jan Hubicka <jh@suse.cz>
    Jason Eckhardt <jle@redhat.com>
    Jason Merrill <jason@redhat.com>
    Jeff Law <law@redhat.com>
    Jeffrey Osier <jeffrey@cygnus.com>
    Jeffrey Wheat <cassidy@cygnus.com>
    Jim Kingdon <kingdon@cygnus.com>
    Jim Wilson <wilson@redhat.com>
    John Gilmore <gnu@cygnus.com>
    Joern Rennecke <amylaar@redhat.com>
    K. Richard Pixley <rich@cygnus.com>
    Ken Raeburn <raeburn@cygnus.com>
    Kung Hsu <kung@cygnus.com>
    Mark Eichin <eichin@cygnus.com>
    Michael Meissner <meissner@redhat.com>
    Michael Tiemann <tiemann@cygnus.com>
    Mike Werner <mtw@cygnus.com>
    Nick Clifton <nickc@redhat.com>
    Per Bothner <bothner@cygnus.com>
    Peter Schauer <pes@regent.e-technik.tu-muenchen.de>
    Richard Earnshaw <rwe@pegasus.esprit.ec.org>
    Richard Henderson <rth@redhat.com>
    Richard Stallman <rms@gnu.org>
    Rob Savoye <rob@cygnus.com>
    Roland H. Pesch <pesch@wrs.com>
    Sean Eric Fagan <sef@cygnus.com>
    Stan Shebs <shebs@apple.com>
    Stephane Carrez <Stephane.Carrez@worldnet.fr>
    Steve Chamberlain <sac@cygnus.com>
    Stu Grossman <grossman@cygnus.com>
    Torbjorn Granlund <tege@cygnus.com>
    Ulf Carlsson <ulfc@calypso.engr.sgi.com>

The existing GNU linker manual is intended to be accurate
   documentation for features which gold supports.  gold supports
   most of the features of the GNU linker for ELF targets.  Notable
   omissions--features of the GNU linker not currently supported in
   gold--are: * MEMORY regions in linker scripts

* MRI compatible linker scripts

* linker map files (-M, -Map)

* cross-reference reports (--cref)

* linker garbage collection (--gc-sections)

* position independent executables (-pie)

* various other minor options



Authors:
--------
    Ian Lance Taylor  <iant@google.com>
    Cary Coutant  <ccoutant@google.com>
    Craig Silverstein  <csilvers@google.com>
    Andrew Chatham



Authors:
--------
    Alan Modra <amodra@bigpond.net.au>
    Andreas Jaeger <aj@suse.de>
    Andreas Schwab <schwab@suse.de>
    Bill Cox <bill@cygnus.com>
    Brendan Kehoe <brendan@cygnus.com>
    D. V. Henkel-Wallace <gumby@cygnus.com>
    DJ Delorie <dj@redhat.com>
    David D "Zoo" Zuhn <zoo@cygnus.com>
    David J. Mackenzie <djm@cygnus.com>
    Denis Chertykov <denisc@overta.ru>
    Diego Novillo <dnovillo@redhat.com>
    Doug Evans <dje@cygnus.com>
    Eric Christopher <echristo@redhat.com>
    Eric Youngdale <eric@aib.com>
    Fred Fish <fnf@cygnus.com>
    Geoff Keating <geoffk@redhat.com>
    H.J.Lu <hjl@gnu.org>
    Hans-Peter Nilsson <hp@axis.com>
    Ian Dall <dall@hfrd.dsto.gov.au>
    Ian Taylor <ian@zembu.com>
    J.T. Conklin <jtc@cygnus.com>
    Jakub Jelinek <jakub@redhat.com>
    Jan Hubicka <jh@suse.cz>
    Jason Eckhardt <jle@redhat.com>
    Jason Merrill <jason@redhat.com>
    Jeff Law <law@redhat.com>
    Jeffrey Osier <jeffrey@cygnus.com>
    Jeffrey Wheat <cassidy@cygnus.com>
    Jim Kingdon <kingdon@cygnus.com>
    Jim Wilson <wilson@redhat.com>
    John Gilmore <gnu@cygnus.com>
    Joern Rennecke <amylaar@redhat.com>
    K. Richard Pixley <rich@cygnus.com>
    Ken Raeburn <raeburn@cygnus.com>
    Kung Hsu <kung@cygnus.com>
    Mark Eichin <eichin@cygnus.com>
    Michael Meissner <meissner@redhat.com>
    Michael Tiemann <tiemann@cygnus.com>
    Mike Werner <mtw@cygnus.com>
    Nick Clifton <nickc@redhat.com>
    Per Bothner <bothner@cygnus.com>
    Peter Schauer <pes@regent.e-technik.tu-muenchen.de>
    Richard Earnshaw <rwe@pegasus.esprit.ec.org>
    Richard Henderson <rth@redhat.com>
    Richard Stallman <rms@gnu.org>
    Rob Savoye <rob@cygnus.com>
    Roland H. Pesch <pesch@wrs.com>
    Sean Eric Fagan <sef@cygnus.com>
    Stan Shebs <shebs@apple.com>
    Stephane Carrez <Stephane.Carrez@worldnet.fr>
    Steve Chamberlain <sac@cygnus.com>
    Stu Grossman <grossman@cygnus.com>
    Torbjorn Granlund <tege@cygnus.com>
    Ulf Carlsson <ulfc@calypso.engr.sgi.com>

%if "%{name}" != "binutils"
%define TARGET %(echo %{name} | sed -e "s/cross-\\(.*\\)-binutils/\\1/;s/-/_/g;s/parisc/hppa/;s/i.86/i586/;s/ppc/powerpc/")
%endif
%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/")-suse-linux
%define DIST %(echo '%distribution' | sed 's/ (.*)//')

%prep
echo "make check will return with %{make_check_handling} in case of testsuite failures."
%setup -q -n binutils-%{binutils_version}
%if !%{test_vanilla}
%patch2
%patch3
%patch4
%patch5
%patch6
%patch7 -p1
%patch8
%patch9
%patch10
%patch11
%patch12
%patch14
%patch15
%if "%{TARGET}" == "avr"
cp gas/config/tc-avr.h gas/config/tc-avr-nesc.h
%patch90
%patch92
%endif
#
# test_vanilla
%endif
sed -i -e '/BFD_VERSION_DATE/s/$/-%(echo %release | sed 's/\.[0-9]*$//')/' bfd/version.h

%build
RPM_OPT_FLAGS="$RPM_OPT_FLAGS -Wno-error"
%if "%{name}" == "binutils"
# Building native binutils
echo "Building native binutils." 
%if %build_multitarget
EXTRA_TARGETS="%(printf ,%%s-suse-linux %target_list)"
EXTRA_TARGETS="$EXTRA_TARGETS,powerpc-macos,powerpc-macos10,spu-elf"
%else
EXTRA_TARGETS=
%ifarch sparc
EXTRA_TARGETS="$EXTRA_TARGETS,sparc64-suse-linux"
%endif
%ifarch ppc
EXTRA_TARGETS="$EXTRA_TARGETS,powerpc64-suse-linux"
%endif
%ifarch s390
EXTRA_TARGETS="$EXTRA_TARGETS,s390x-suse-linux"
%endif
%ifarch s390x
EXTRA_TARGETS="$EXTRA_TARGETS,s390-suse-linux"
%endif
%ifarch %ix86
EXTRA_TARGETS="$EXTRA_TARGETS,x86_64-suse-linux"
%endif
%ifarch ppc ppc64
EXTRA_TARGETS="$EXTRA_TARGETS,spu-elf"
%endif
%endif
%define common_flags CFLAGS="${RPM_OPT_FLAGS}" CXXFLAGS="${RPM_OPT_FLAGS}" \\\
	--prefix=%{_prefix} --libdir=%{_libdir} \\\
	--infodir=%{_infodir} --mandir=%{_mandir} \\\
	--with-bugurl=http://bugs.opensuse.org/ \\\
	--with-pkgversion="GNU Binutils; %{DIST}" \\\
	--with-separate-debug-dir=%{_prefix}/lib/debug \\\
	--with-pic --build=%{HOST} 
mkdir build-dir
cd build-dir
../configure %common_flags \
	${EXTRA_TARGETS:+--enable-targets="${EXTRA_TARGETS#,}"} \
	--enable-plugins \
	--enable-shared
make %{?_smp_mflags} all-bfd TARGET-bfd=headers
# force reconfiguring (???)
rm bfd/Makefile
make %{?_smp_mflags}

%check
export SUSE_ASNEEDED=0
cd build-dir
%ifnarch %arm
make -k check CFLAGS="-O2 -g" CXXFLAGS="-O2 -g" || %{make_check_handling}
%endif
#
#
#
%else
# building cross-TARGET-binutils
echo "Building cross binutils." 
mkdir build-dir
cd build-dir
EXTRA_TARGETS=
%if "%{TARGET}" == "sparc"
EXTRA_TARGETS="$EXTRA_TARGETS,sparc64-suse-linux"
%endif
%if "%{TARGET}" == "powerpc"
EXTRA_TARGETS="$EXTRA_TARGETS,powerpc64-suse-linux"
%endif
%if "%{TARGET}" == "s390"
EXTRA_TARGETS="$EXTRA_TARGETS,s390x-suse-linux"
%endif
%if "%{TARGET}" == "s390x"
EXTRA_TARGETS="$EXTRA_TARGETS,s390-suse-linux"
%endif
%if "%{TARGET}" == "i586"
EXTRA_TARGETS="$EXTRA_TARGETS,x86_64-suse-linux"
%endif
%if "%{TARGET}" == "hppa"
EXTRA_TARGETS="$EXTRA_TARGETS,hppa64-suse-linux"
%endif
%if "%{TARGET}" == "avr" || "%{TARGET}" == "spu"
TARGET_OS=%{TARGET}
%else
TARGET_OS=%{TARGET}-linux
%endif
../configure CFLAGS="${RPM_OPT_FLAGS}" \
  --prefix=%{_prefix} \
  --with-bugurl=http://bugs.opensuse.org/ \
  --with-pkgversion="GNU Binutils; %{DIST}" \
  --disable-nls \
  --build=%{HOST} --target=$TARGET_OS \
%if "%{TARGET}" == "spu"
  --with-sysroot=/usr/spu \
%else
  --with-sysroot=%{_prefix}/$TARGET_OS/sys-root \
%endif
  ${EXTRA_TARGETS:+--enable-targets="${EXTRA_TARGETS#,}"}
make %{?_smp_mflags} all-bfd TARGET-bfd=headers
# force reconfiguring
rm bfd/Makefile
make %{?_smp_mflags}
%if "%{TARGET}" == "avr"
# build an extra nesC version because nesC requires $'s in identifiers
cp -a gas gas-nesc
echo '#include "tc-%{TARGET}-nesc.h"' > gas-nesc/targ-cpu.h
make -C gas-nesc clean
make -C gas-nesc %{?_smp_mflags}
%endif

%check
unset SUSE_ASNEEDED
cd build-dir
make -k check CFLAGS="$RPM_OPT_FLAGS -Wno-unused -Wno-unprototyped-calls" || :
%endif

%install
cd build-dir
%if "%name" == "binutils"
# installing native binutils
make DESTDIR=$RPM_BUILD_ROOT install-info install
make -C gas/doc DESTDIR=$RPM_BUILD_ROOT install-info-am install-am
make DESTDIR=$RPM_BUILD_ROOT install-bfd install-opcodes
# we could eventually use alternatives for /usr/bin/ld
if test -f $RPM_BUILD_ROOT%{_bindir}/ld.bfd; then
  rm $RPM_BUILD_ROOT%{_bindir}/ld
  ln -sf ld.bfd $RPM_BUILD_ROOT%{_bindir}/ld;
fi
rm -rf $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
mkdir -p $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
ln -sf ../../bin/{ar,as,ld,nm,ranlib,strip} $RPM_BUILD_ROOT%{_prefix}/%{HOST}/bin
mv $RPM_BUILD_ROOT%{_prefix}/%{HOST}/lib/ldscripts $RPM_BUILD_ROOT%{_libdir}
ln -sf ../../%{_lib}/ldscripts $RPM_BUILD_ROOT%{_prefix}/%{HOST}/lib/ldscripts
# Install header files
make -C libiberty install_to_libdir target_header_dir=/usr/include DESTDIR=$RPM_BUILD_ROOT
# We want the PIC libiberty.a
install -m 644 libiberty/pic/libiberty.a $RPM_BUILD_ROOT%{_libdir}
#
chmod a+x $RPM_BUILD_ROOT%{_libdir}/libbfd-*
chmod a+x $RPM_BUILD_ROOT%{_libdir}/libopcodes-*
# No shared linking outside binutils
rm $RPM_BUILD_ROOT%{_libdir}/lib{bfd,opcodes}.so
rm $RPM_BUILD_ROOT%{_libdir}/lib{bfd,opcodes}.la
# Remove unwanted files to shut up rpm
rm $RPM_BUILD_ROOT%{_infodir}/configure* $RPM_BUILD_ROOT%{_infodir}/standards.info*
rm $RPM_BUILD_ROOT%{_mandir}/man1/dlltool.1 $RPM_BUILD_ROOT%{_mandir}/man1/windres.1 $RPM_BUILD_ROOT%{_mandir}/man1/windmc.1
cd ..
%find_lang binutils
%find_lang bfd binutils.lang
%find_lang gas binutils.lang
%find_lang ld binutils.lang
%find_lang opcodes binutils.lang
%find_lang gprof binutils.lang
mkdir -p $RPM_BUILD_ROOT%{_docdir}/%{name}
install -m 644 binutils/NEWS $RPM_BUILD_ROOT%{_docdir}/%{name}/NEWS-binutils
install -m 644 gas/NEWS $RPM_BUILD_ROOT%{_docdir}/%{name}/NEWS-gas
install -m 644 ld/NEWS $RPM_BUILD_ROOT%{_docdir}/%{name}/NEWS-ld
%else
# installing cross-TARGET-binutils
make DESTDIR=$RPM_BUILD_ROOT install
%if "%{TARGET}" == "avr"
install -c gas-nesc/as-new $RPM_BUILD_ROOT%{_prefix}/bin/%{TARGET}-nesc-as
ln -sf ../../bin/%{TARGET}-nesc-as $RPM_BUILD_ROOT%{_prefix}/%{TARGET}/bin/nesc-as
%endif
rm -rf $RPM_BUILD_ROOT%{_mandir}
rm -rf $RPM_BUILD_ROOT%{_infodir}
rm -rf $RPM_BUILD_ROOT%{_prefix}/lib*
rm -rf $RPM_BUILD_ROOT%{_prefix}/include
rm -f $RPM_BUILD_ROOT%{_prefix}/bin/*-c++filt
> ../binutils.lang
%endif

%clean
rm -rf $RPM_BUILD_ROOT
%if "%name" == "binutils"

%post
%install_info --info-dir=%{_infodir} %{_infodir}/as.info.gz
%install_info --info-dir=%{_infodir} %{_infodir}/bfd.info.gz
%install_info --info-dir=%{_infodir} %{_infodir}/binutils.info.gz
%install_info --info-dir=%{_infodir} %{_infodir}/gprof.info.gz
%install_info --info-dir=%{_infodir} %{_infodir}/ld.info.gz

%postun
%install_info_delete --info-dir=%{_infodir} %{_infodir}/as.info.gz
%install_info_delete --info-dir=%{_infodir} %{_infodir}/bfd.info.gz
%install_info_delete --info-dir=%{_infodir} %{_infodir}/binutils.info.gz
%install_info_delete --info-dir=%{_infodir} %{_infodir}/gprof.info.gz
%install_info_delete --info-dir=%{_infodir} %{_infodir}/ld.info.gz
%endif

%files -f binutils.lang
%defattr(-,root,root)
%if "%name" == "binutils"
%{_docdir}/%{name}
%{_prefix}/%{HOST}/bin/*
%{_prefix}/%{HOST}/lib/ldscripts
%{_libdir}/ldscripts
%{_bindir}/*
%doc %{_infodir}/*.gz
%{_libdir}/lib*-%{version}*.so
%doc %{_mandir}/man1/*.1.gz
%else
%{_prefix}
%endif

%changelog