LogoopenSUSE Build Service > Projects
Sign Up | Log In

View File libgcj33.spec of Package gcc33 (Project openSUSE:Factory)

#
# spec file for package libgcj33
#
# Copyright (c) 2012 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/
#
# icecream 0


%define building_libjava 1
%define run_tests 1
#
# spec file for package gcc33 (Version 3.3.3)
#
# This file and all modifications and additions to the pristine
# package are under the same license as the package itself.
#
# Please submit bugfixes or comments via http://www.suse.de/feedback/
#

# Run the testsuite if there's a file named RUN_TESTS in the source
%if 0%{!?run_tests:1}
%define run_tests %(test -f %_sourcedir/RUN_TESTS && echo 1 || echo 0)
%endif

# Ada currently fails to build on a few platforms, enable it only
# on those that work
# Note that AdaCore only supports %ix86, x86_64 and ia64
%ifarch %ix86 x86_64 ia64 hppa ppc s390
%define build_ada 0
%else
# alpha ppc64 s390x
%define build_ada 0
%endif

# We don't want to build java on arm
%ifarch mips %arm
%define build_java 0
%define build_libjava 0
%else
%define build_java 0
#%define build_libjava 0%{?building_libjava:1}
%define build_libjava 0
%endif

%define build_fortran 1
%define build_objcp 0

%if 0%{?build_for_base:1}
%define build_ada 0 
%define build_java 0
%define build_libjava 0
%define build_fortran 0
%define build_objcp 0
%define run_tests 0
%endif

Name:           libgcj33
BuildRequires:  bison
BuildRequires:  flex
BuildRequires:  gettext-devel
BuildRequires:  glibc-devel-32bit
BuildRequires:  zlib-devel
ExcludeArch:    %arm
%if %{build_ada}
BuildRequires:  gcc-ada
%endif
%if %{build_libjava}
BuildRequires:  gtk2-devel
BuildRequires:  libart_lgpl-devel
BuildRequires:  update-desktop-files
%endif
%if %{build_fortran}
#BuildRequires: mpfr-devel
%endif
%ifarch ia64
BuildRequires:  libunwind-devel
%endif
%if %{run_tests}
BuildRequires:  dejagnu
BuildRequires:  expect
%endif

# Define version number of libgcc_s
%ifarch hppa
%define libgcc_s 4
%else
%define libgcc_s 1
%endif
%ifarch ppc
# We support building the nof libraries, but don't want this in the
# regular rpms
%define build_nof 0
%else
%define build_nof 0
%endif

%define separate_bi32 0
%define separate_bi64 0
%ifarch ppc
# Beware, this does _not_ separate libgcj, as for that one multilibing
# is inactive for the time being
%define separate_bi64 1
%endif
%ifarch x86_64 s390x
%define separate_bi32 1
%endif

# Define two macros to trigger -32bit or -64bit package variants
%define separate_biarch 0
%if %{separate_bi32}
%define separate_biarch 1
%define separate_biarch_suffix -32bit
%endif
%if %{separate_bi64}
%define separate_biarch 1
%define separate_biarch_suffix -64bit
%endif

%ifarch x86_64 ia64 s390x alpha ppc64
# 64-bit is primary build target
%define build_primary_64bit 1
%else
%define build_primary_64bit 0
%endif

%define biarch_libjava 0

# COMMON-BEGIN
%define biarch_targets x86_64 s390x powerpc64 powerpc

Url:            http://gcc.gnu.org/
Version:        3.3.3
Release:        0
%define gcc_version %(echo %version | sed 's/_.*//')
%define snapshot_date %(echo %version | sed 's/[34]\.[0-4]\.[0-6]//' | sed 's/_/-/')
%define binsuffix -3.3
%define versionspecificlibs 0
# COMMON-END

%if 0%{?!building_libjava:1}
Requires:       binutils
Requires:       cpp33 = %{version}-%{release}
Requires:       glibc-devel
Requires:       libgcc%{libgcc_s} >= %{version}-%{release}
%endif

# COMMON-BEGIN
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
Source:         gcc-%{gcc_version}%{snapshot_date}.tar.bz2
Source1:        change_spec
Source2:        gcc33-rpmlintrc
Source3:        baselibs.conf
Patch0:         gcc-3.3.3-hammer.patch.bz2
Patch1:         gcc-noalias-warn.diff
Patch2:         copy-frame-related.diff
Patch3:         head-tail.patch
Patch4:         bug-reporting.patch
Patch5:         libgc.patch
Patch6:         ia64intrin.patch
Patch7:         ffi.patch
Patch8:         string-allocator.patch
Patch9:         ia64-unwind.patch
Patch11:        compact-dwarf2.patch
Patch16:        c99-double-inline.diff
Patch17:        c99numbers.diff
Patch19:        pathlength.patch
Patch21:        gcse-volatile.patch
Patch22:        swig-alias.patch
Patch32:        aliasing.diff
Patch33:        aliasing12.diff
Patch34:        aliasing3.diff
Patch37:        cse-mem-expr.patch
Patch42:        emit-note.patch
Patch47:        regparam.patch.gz
Patch48:        unwind-ia64.patch
Patch49:        ia64-reorg.patch
Patch50:        fix-var-tracking.diff
Patch51:        istream-perf.diff
Patch52:        lsb2-symbols.diff
# Ada patches
Patch53:        gcc32-ada-link.patch
Patch54:        gcc32-ada-addr2line.patch
# c++ patches
# PPC specific
Patch61:        gcc-3.3-ppc64.patch
# Do not merge this patch into the Alan M patch, it will just get lost later.
# If you think it is useless, try building "fam" and watch libtool break.
Patch63:        ppc-nostartfileprefix.patch
Patch64:        ppc-nof.patch
Patch65:        altivec.patch
Patch66:        altivec-to-head.diff.gz
Patch67:        suse44478.diff
Patch68:        suse50394.diff
Patch69:        nov74176.diff
Patch70:        unwind-ia64-2.patch
Patch71:        nov65883.diff
Patch72:        ia64-trap-int-div.diff
Patch73:        nov102315.diff
Patch74:        nov132124.diff
Patch75:        nov148558.diff
Patch76:        nov141311.diff
Patch77:        pr14348.patch
Patch78:        nov216246-1.diff
Patch79:        nov161594.diff
Patch80:        nov166448.diff
Patch81:        nov191825.diff
Patch82:        nov194478.diff
Patch83:        nov201157.diff
Patch84:        libstdc++-config.diff
Patch85:        gcc44-fixes.patch
Patch86:        bison-errors.patch
Patch87:        testsuite-hooks.patch
Patch88:        gcc-unwind-glibc216.patch

Summary:        Java Runtime Library for gcc
License:        GPL-2.0-with-classpath-exception
Group:          System/Libraries
Provides:       libgcj = %{version}-%{release}
Obsoletes:      libgcj

%description 
This library is needed if you want to use the GNU Java compiler, gcj.
Source code for this package is in gcc.


%package -n libgcj33-devel
Summary:        Include Files and Libraries mandatory for Development.
License:        GPL-2.0-with-classpath-exception
Group:          Development/Libraries/Java
Requires:       glibc-devel
Requires:       gtk2-devel
Requires:       libart_lgpl-devel
Requires:       libgcj >= %{version}-%{release}
Requires:       libstdc++33-devel = %{version}-%{release}
Requires:       zlib-devel
%ifarch ia64
Requires:       libunwind-devel
%endif

%description -n libgcj33-devel
This package contains all necessary include files and libraries needed
to develop applications that require these.


%package -n gcc33-gij
Summary:        Java Bytecode Interpreter for gcc
License:        GPL-2.0-with-classpath-exception
Group:          Development/Libraries/Java
Requires:       libgcj >= %{version}-%{release}

%description -n gcc33-gij
This package contains the java bytecode interpreter gij and related tools.


# PACKAGE-BEGIN
# PACKAGE-BEGIN
%package -n libffi33
Summary:        Foreign Function Interface library
License:        BSD-3-Clause
Group:          Development/Languages/C and C++
Provides:       g-wrap:/usr/lib/libffi.so.4

%description -n libffi33
A foreign function interface is the popular name for the interface that allows code written in one language to call code written in another language.
# PACKAGE-END
# PACKAGE-BEGIN
# PACKAGE-BEGIN
%package -n libffi33-32bit
Summary:        Foreign Function Interface library
License:        BSD-3-Clause
Group:          Development/Languages/C and C++
Provides:       g-wrap:/usr/lib/libffi.so.4

%description -n libffi33-32bit
A foreign function interface is the popular name for the interface that allows code written in one language to call code written in another language.
# PACKAGE-END
# PACKAGE-BEGIN
# PACKAGE-BEGIN
%package -n libffi33-64bit
Summary:        Foreign Function Interface library
License:        BSD-3-Clause
Group:          Development/Languages/C and C++
Provides:       g-wrap:/usr/lib/libffi.so.4

%description -n libffi33-64bit
A foreign function interface is the popular name for the interface that allows code written in one language to call code written in another language.
# PACKAGE-END

# PACKAGE-BEGIN
# PACKAGE-BEGIN
%package -n libffi33-devel
Summary:        Foreign Function Interface library development files
License:        GPL-2.0-with-classpath-exception
Group:          Development/Languages/C and C++
Requires:       libffi33 >= %{version}-%{release}

%description -n libffi33-devel
A foreign function interface is the popular name for the interface that allows code written in one language to call code written in another language.
# PACKAGE-END
# PACKAGE-BEGIN
# PACKAGE-BEGIN
%package -n libffi33-devel-32bit
Summary:        Foreign Function Interface library development files
License:        GPL-2.0-with-classpath-exception
Group:          Development/Languages/C and C++
Requires:       libffi33-32bit >= %{version}-%{release}

%description -n libffi33-devel-32bit
A foreign function interface is the popular name for the interface that allows code written in one language to call code written in another language.
# PACKAGE-END
# PACKAGE-BEGIN
# PACKAGE-BEGIN
%package -n libffi33-devel-64bit
Summary:        Foreign Function Interface library development files
License:        GPL-2.0-with-classpath-exception
Group:          Development/Languages/C and C++
Requires:       libffi33-64bit >= %{version}-%{release}

%description -n libffi33-devel-64bit
A foreign function interface is the popular name for the interface that allows code written in one language to call code written in another language.
# PACKAGE-END

%package -n gcc33-testresults
Summary:        Testsuite results
License:        GPL-2.0-with-classpath-exception
Group:          Development/Languages/C and C++

%description -n gcc33-testresults
Results from running the gcc and target library testsuites.


# COMMON-BEGIN

# Define the canonical target and host architecture
#   %gcc_target_arch  is supposed to be the full target triple
#   %TARGET_ARCH      is the canonicalized CPU part
#   %CONFIGURE_TARGET is the target triple used for --target=
%if 0%{?gcc_target_arch:1}
%define CONFIGURE_TARGET %{gcc_target_arch}
%define TARGET_ARCH %(echo %{gcc_target_arch} | cut -d - -f 1 | sed -e "s/i.86/i586/;s/ppc/powerpc/")
%if 0%{?gcc_icecream:1} && %{TARGET_ARCH} == "powerpc"
%define CONFIGURE_TARGET powerpc64-linux
%endif
%else
%define TARGET_ARCH %(echo %{_target_cpu} | sed -e "s/i.86/i586/;s/ppc/powerpc/")
%endif
%define HOST_ARCH %(echo %{_host_cpu} | sed -e "s/i.86/i586/;s/ppc/powerpc/")

%define biarch %(case " %{biarch_targets} " in (*" %{TARGET_ARCH} "*) echo 1;; (*) echo 0;; esac)

%ifarch ppc
%define GCCDIST powerpc64-suse-linux
%else
%define GCCDIST %{HOST_ARCH}-suse-linux
%endif

%define libsubdir %{_libdir}/gcc-lib/%{GCCDIST}/3.3.3-hammer
%define gxxinclude %{_prefix}/include/c++/%{gcc_version}

# COMMON-END

# Versionspecific directories
%define versmainlibdir %{libsubdir}
%define versmainlibdirbi32 %{libsubdir}/32
%define versmainlibdirbi64 %{libsubdir}/64
%ifarch ppc
%define versnoflibdir %{libsubdir}/nof
%define versmainlibdirbi32 %{libsubdir}
%define versmainlibdirbi64 %{libsubdir}/64
%endif
%ifarch ppc64
%define versnoflibdir %{libsubdir}/32/nof
%endif

# If we use versionspecific libs, they end in libsubdir
%if %{versionspecificlibs}
%define mainlibdir %{libsubdir}
%define mainlibdirbi32 %{libsubdir}/32
%define mainlibdirbi64 %{libsubdir}/64
%ifarch ppc
%define noflibdir %{libsubdir}/nof
%define mainlibdirbi32 %{libsubdir}
%define mainlibdirbi64 %{libsubdir}/64
%endif
%ifarch ppc64
%define noflibdir %{libsubdir}/32/nof
%endif
%else
%define mainlibdir %{_libdir}
%define mainlibdirbi32 %{_prefix}/lib
%define mainlibdirbi64 %{_prefix}/lib64
%define noflibdir %{_prefix}/lib/nof
%endif

# Now define a few macros that make it easy to package libs and
# related files just to the right package, without caring for the
# exact path the files are in.
#   %mainlib  package X from all dirs that belong to the main package
#   %biarchlib   package X from all dirs that belong to the -32/64bit package
# by default, nof libs go where the 32bit libs go.
%if %{build_nof}
%define mainlib() %{mainlibdir}/%1\
%{noflibdir}/%1\
%{nil}
%else
%define mainlib() %{mainlibdir}/%1\
%{nil}
%endif
%define biarchlib() %{nil}
%if %{biarch}
%if %{build_primary_64bit}
%if !%{separate_bi32}
%if %{build_nof}
%define mainlib() %{mainlibdir}/%1\
%{mainlibdirbi32}/%1\
%{noflibdir}/%1\
%{nil}
%else
%define mainlib() %{mainlibdir}/%1\
%{mainlibdirbi32}/%1\
%{nil}
%endif
%else
%if %{build_nof}
%define biarchlib() %{mainlibdirbi32}/%1\
%{noflibdir}/%1\
%{nil}
%define mainlib() %{mainlibdir}/%1\
%{nil}
%else
%define biarchlib() %{mainlibdirbi32}/%1\
%{nil}
%endif
%endif
%else
%if !%{separate_bi64}
%if %{build_nof}
%define mainlib() %{mainlibdir}/%1\
%{mainlibdirbi64}/%1\
%{noflibdir}/%1\
%{nil}
%else
%define mainlib() %{mainlibdir}/%1\
%{mainlibdirbi64}/%1\
%{nil}
%endif
%else
%define biarchlib() %{mainlibdirbi64}/%1\
%{nil}
%endif
%endif
%endif

%if %{build_nof}
%define versmainlib() %{versmainlibdir}/%1\
%{versnoflibdir}/%1\
%{nil}
%else
%define versmainlib() %{versmainlibdir}/%1\
%{nil}
%endif
%define versbiarchlib() %{nil}
%if %{biarch}
%if %{build_primary_64bit}
%if !%{separate_bi32}
%if %{build_nof}
%define versmainlib() %{versmainlibdir}/%1\
%{versmainlibdirbi32}/%1\
%{versnoflibdir}/%1\
%{nil}
%else
%define versmainlib() %{versmainlibdir}/%1\
%{versmainlibdirbi32}/%1\
%{nil}
%endif
%else
%if %{build_nof}
%define versbiarchlib() %{versmainlibdirbi32}/%1\
%{versnoflibdir}/%1\
%{nil}
%define versmainlib() %{versmainlibdir}/%1\
%{nil}
%else
%define versbiarchlib() %{versmainlibdirbi32}/%1\
%{nil}
%endif
%endif
%else
%if !%{separate_bi64}
%if %{build_nof}
%define versmainlib() %{versmainlibdir}/%1\
%{versmainlibdirbi64}/%1\
%{versnoflibdir}/%1\
%{nil}
%else
%define versmainlib() %{versmainlibdir}/%1\
%{versmainlibdirbi64}/%1\
%{nil}
%endif
%else
%define versbiarchlib() %{versmainlibdirbi64}/%1\
%{nil}
%endif
%endif
%endif

# COMMON-BEGIN

%prep
%setup -q -n gcc-%{gcc_version}%{snapshot_date}
%patch0 
%patch1
%patch2
%patch3
%patch4
%patch5
%patch6
%patch7
%patch8
%patch9 -p1
%patch11
%patch16
%patch17
%patch19
%patch21
%patch22
%patch32
%patch33
%patch34
%patch37
%patch42
%patch47
%patch48
%patch49
%patch50
%patch51
%patch52
%patch53
%patch54
#%ifarch ppc ppc64
%patch61 -p1
#%patch63 -p1
#%endif
%patch64 -p1
%patch65 -p1
%patch66
%patch67
%patch68
%patch69
%patch70
%patch71 -p1
%patch72
%patch73
%ifarch s390 s390x
%patch74 -p1
%endif
%patch75
%patch76 -p1
%patch77 -p1
%patch78 -p1
%patch79
%patch80
%patch81 -p1
%patch82 -p1
%patch83 -p1
%patch84
%patch85
%patch86
%patch87
%patch88 -p1

%build
# Avoid conflict with commercial libjawt.so
sed -i -e 's/libjawt/libgcjawt/g' libjava/Makefile.{am,in}

# Avoid rebuilding of generated files
contrib/gcc_update --touch

rm -rf obj-%{GCCDIST}
mkdir obj-%{GCCDIST}
cd obj-%{GCCDIST}
RPM_OPT_FLAGS="$RPM_OPT_FLAGS -U_FORTIFY_SOURCE"
RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/-fno-rtti//g' -e 's/-fno-exceptions//g' -e 's/-Wmissing-format-attribute//g' -e 's/-fstack-protector//g' -e 's/-funwind-tables//g' -e 's/-fasynchronous-unwind-tables//g'`
%ifarch %ix86
# -mcpu is superceded by -mtune but -mtune is not supported by
# our bootstrap compiler.  -mcpu gives a warning that stops
# the build process, so remove it for now.
RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/-mcpu=i.86//g'`
RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/-mtune=i.86//g'`
%endif
%ifarch s390 s390x
RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/-fsigned-char//g'`
RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/-O1/-O2/g'`
RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/-march=z9-109//g'`
RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/-mtune=z10//g'`
%endif
%if 0%{?gcc_target_arch:1} && 0%{!?gcc_icecream:1}
# Kill all -march/tune/cpu because that screws building the target libs
RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/-m\(arch\|tune\|cpu\)=[^ ]*//g'`
%endif
# Replace 2 spaces by one finally
RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS|sed -e 's/  / /g'`

languages=c,c++,objc
%if %{build_fortran}
languages=$languages,f77
%endif
%if %{build_objcp}
languages=$languages,obj-c++
%endif
%if %{build_java}
languages=$languages,java
%endif
%if %{build_ada}
languages=$languages,ada
%endif
# override for cross targets until we have build_objc
%if 0%{?gcc_target_arch:1}
languages=c,c++
%endif

J=%{?jobs:%jobs}
if test -z "$J"; then
  J=$(getconf _NPROCESSORS_CONF)
  JL=$(($J * 2))
else
  test 1 -gt "$J" && J=1
  JL=$(($(getconf _NPROCESSORS_CONF)*2))
fi
if test "$J" == "0"; then
  J=1
fi
if test "$JL" == "0"; then
  JL=1
fi
PARALLEL="-j$J -l$JL"

# we don't want some miscompiles in the testsuite, or some fault in
# the compiler to kill the machine.  Hence we limit the amount of memory
# by the physical RAM plus half of swap
#MEM=$(free -m | awk '/^Mem:/ {print $2}')
#SWAP=$(free -m | awk '/^Swap:/ {print $2}')
#ulimit -v $(((MEM + SWAP/2)*1024))

# In general we want to ship release checking enabled compilers
# and run BETA with checking enabled.
#ENABLE_CHECKING=--enable-checking
ENABLE_CHECKING="--disable-checking"

%if "%{name}" != "gcc33"
export PATH=/opt/cross/bin:$PATH
%endif

# Work around tail/head -1 changes
export _POSIX2_VERSION=199209

# configure tries to parse include/features.h to detect
# if glibc supports SSP.  When cross compiling we would need
# to install a cross glibc, which we don't, or make the whole
# thing point to the native glibc, which is in /, hence the
# --with-sysroot=/

CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS" XCFLAGS="$RPM_OPT_FLAGS" \
TCFLAGS="$RPM_OPT_FLAGS" GCJFLAGS="$RPM_OPT_FLAGS" \
../configure \
%if 0%{?gcc_target_arch:1} && 0%{!?gcc_icecream:1}
%else
	--enable-threads=posix \
%endif
	--prefix=%{_prefix} --with-local-prefix=/usr/local \
	--infodir=%{_infodir} --mandir=%{_mandir} \
	--libdir=%{_libdir} --libexecdir=%{_libdir} \
	--enable-languages=$languages $ENABLE_CHECKING \
	--with-gxx-include-dir=/usr/include/c++/%{gcc_version} \
	--enable-ssp --disable-libssp \
%if !%{build_libjava}
        --disable-libgcj \
%else
        --enable-java-awt=gtk --enable-gtk-cairo \
%if !%{biarch_libjava}
        --disable-libjava-multilib \
%endif
%endif
	--with-slibdir=/%{_lib} --with-system-zlib \
	--enable-shared --enable-__cxa_atexit \
	--enable-libstdcxx-allocator=new \
%if 0%{?gcc_target_arch:1}
%if 0%{?gcc_icecream:1}
	--with-as=/opt/cross/%{TARGET_ARCH}-linux/bin/as \
	--with-ld=/opt/cross/%{TARGET_ARCH}-linux/bin/ld \
	--with-sysroot=/ \
%endif
	--disable-nls --disable-shared \
	--target=%{CONFIGURE_TARGET} \
%else
	--program-suffix=%{binsuffix} \
	--enable-version-specific-runtime-libs \
%ifarch ia64
	--with-system-libunwind \
%else
	--without-system-libunwind \
%endif
%endif
%if "%{TARGET_ARCH}" == "powerpc"
	--with-cpu=default32 \
	--enable-secureplt \
	--with-long-double-128 \
	--enable-biarch \
%endif
%if "%{TARGET_ARCH}" == "powerpc64"
	--enable-secureplt \
	--with-long-double-128 \
	--enable-biarch \
%endif
%if "%{TARGET_ARCH}" == "i586"
	--with-cpu=generic \
%endif
%if "%{TARGET_ARCH}" == "x86_64"
	--with-cpu=generic \
%endif
%if "%{TARGET_ARCH}" == "s390"
        --with-tune=z9-109 --with-arch=z900 \
	--with-long-double-128 \
%endif
%if "%{TARGET_ARCH}" == "s390x"
        --with-tune=z9-109 --with-arch=z900 \
	--with-long-double-128 \
%endif
	--host=%{GCCDIST}

# COMMON-END

# Only run profiled bootstrap on archs where it works
#%ifarch %ix86 x86_64 ppc ppc64 ia64
#make profiledbootstrap BOOT_CFLAGS="$RPM_OPT_FLAGS" $PARALLEL
#%else
make bootstrap-lean BOOT_CFLAGS="$RPM_OPT_FLAGS" $PARALLEL
#%endif
#make -C gcc proto
make info
%if %{run_tests}
echo "Run testsuite"
make -k check $PARALLEL || true
(make -C %{GCCDIST}/libstdc++-v3 check-abi || true)
%endif

%install
rm -rf $RPM_BUILD_ROOT
cd obj-%{GCCDIST}
# Work around tail/head -1 changes
export _POSIX2_VERSION=199209
export LIBRARY_PATH=$RPM_BUILD_ROOT%{libsubdir}:$RPM_BUILD_ROOT%{mainlibdirbi32}:$RPM_BUILD_ROOT%{mainlibdirbi64}
%if 0%{?building_libjava:1}
%if %{build_libjava}
make -C %{GCCDIST}/libjava install DESTDIR=$RPM_BUILD_ROOT
make -C %{GCCDIST}/libffi install DESTDIR=$RPM_BUILD_ROOT
make -C gcc java.install-man DESTDIR=$RPM_BUILD_ROOT
%endif
%else
make install DESTDIR=$RPM_BUILD_ROOT
%endif
mkdir -p $RPM_BUILD_ROOT%{_libdir}

%if 0%{?!building_libjava:1}
# Move wrongly installed fortran stuff
mv $RPM_BUILD_ROOT%{libsubdir}/../lib* $RPM_BUILD_ROOT%{libsubdir}/
%if %{biarch}
%if %{build_primary_64bit}
mv $RPM_BUILD_ROOT%{libsubdir}/../32/lib* $RPM_BUILD_ROOT%{libsubdir}/32/
%else
mv $RPM_BUILD_ROOT%{libsubdir}/../64/lib* $RPM_BUILD_ROOT%{libsubdir}/64/
%endif
%endif
%endif

# Move manpages that were not properly versioned
%if 0%{?!building_libjava:1}
mv $RPM_BUILD_ROOT%{_mandir}/man1/gcov.1 $RPM_BUILD_ROOT%{_mandir}/man1/gcov%{binsuffix}.1
mv $RPM_BUILD_ROOT%{_mandir}/man1/cpp.1 $RPM_BUILD_ROOT%{_mandir}/man1/cpp%{binsuffix}.1
%endif
%if %{build_java}
for i in gcjh gij jcf-dump jv-convert jv-scan rmic rmiregistry; do
mv $RPM_BUILD_ROOT%{_mandir}/man1/$i.1 $RPM_BUILD_ROOT%{_mandir}/man1/$i%{binsuffix}.1
done
%endif

# Remove some useless .la files
for lib in libobjc libg2c libfrtbegin \
    libstdc++ libsupc++; do
  rm -f $RPM_BUILD_ROOT%{versmainlibdir}/$lib.la
%if %{biarch}
%if %{build_primary_64bit}
  rm -f $RPM_BUILD_ROOT%{versmainlibdirbi32}/$lib.la
%else
  rm -f $RPM_BUILD_ROOT%{versmainlibdirbi64}/$lib.la
%endif
%endif
done

%if %{biarch}
%if %{build_primary_64bit}
mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib
%else
mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib64
%endif
%endif

# Move shared libs around
%if %{versionspecificlibs}
%else
# libjava possibly breaks, ada is broken
for libname in \
%if %{build_libjava}
  libgcj libgij libgcjawt lib-gnu-java-awt-peer-gtk \
%endif
  ; do
  mv -f $RPM_BUILD_ROOT%{versmainlibdir}/$libname.* $RPM_BUILD_ROOT%{mainlibdir}/
%if %{biarch_libjava}
%if %{build_primary_64bit}
  mv -f $RPM_BUILD_ROOT%{versmainlibdirbi32}/$libname.* $RPM_BUILD_ROOT%{mainlibdirbi32}/
%else
  mv -f $RPM_BUILD_ROOT%{versmainlibdirbi64}/$libname.* $RPM_BUILD_ROOT%{mainlibdirbi64}/
%endif
%endif
done
%endif

%if %{build_ada}
mv $RPM_BUILD_ROOT%{libsubdir}/adalib/lib*-*.so $RPM_BUILD_ROOT%{_libdir}
ln -sf %{_libdir}/$(cd $RPM_BUILD_ROOT%{_libdir} && echo libgnarl-*.so) $RPM_BUILD_ROOT%{libsubdir}/adalib/libgnarl.so
ln -sf %{_libdir}/$(cd $RPM_BUILD_ROOT%{_libdir} && echo libgnat-*.so) $RPM_BUILD_ROOT%{libsubdir}/adalib/libgnat.so
chmod a+x $RPM_BUILD_ROOT%{_libdir}/libgna*-*.so
%endif

#ln -sf gcc%{binsuffix} $RPM_BUILD_ROOT%{_prefix}/bin/cc%{binsuffix}
#ln -sf g++%{binsuffix}  $RPM_BUILD_ROOT%{_prefix}/bin/c++%{binsuffix}
rm -f $RPM_BUILD_ROOT%{_prefix}/bin/c++%{binsuffix}
#mkdir -p $RPM_BUILD_ROOT/lib

%if %{biarch}
%if %{build_primary_64bit}
# move around some libs that end in wrong paths
pushd .
mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib
mkdir -p $RPM_BUILD_ROOT%{_libdir}/32
(cd $RPM_BUILD_ROOT%{_libdir}/32; tar cf - .) | (cd $RPM_BUILD_ROOT%{_prefix}/lib ; tar xf -)
rm -rf $RPM_BUILD_ROOT%{_libdir}/32
%if 0%{?!building_libjava:1}
ln -s %{_prefix}/lib $RPM_BUILD_ROOT%{_libdir}/32
rm -rf $RPM_BUILD_ROOT/%{_lib}/32
ln -s /lib $RPM_BUILD_ROOT/%{_lib}/32
%endif
popd
%else
# 32-bit biarch systems
# move around some libs that end in wrong paths
pushd .
mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib64
mkdir -p $RPM_BUILD_ROOT%{_libdir}/64
(cd $RPM_BUILD_ROOT%{_libdir}/64; tar cf - .) | (cd $RPM_BUILD_ROOT%{_prefix}/lib64 ; tar xf -)
rm -rf $RPM_BUILD_ROOT%{_libdir}/64
%if 0%{?!building_libjava:1}
ln -s %{_prefix}/lib $RPM_BUILD_ROOT%{_libdir}/64
%endif
popd
%endif
%endif

# Remove some crap from the .la files:
for l in `find $RPM_BUILD_ROOT -name '*.la'`; do
  echo "changing $l"
  sed -e '/^dependency_libs/s| -L%{_builddir}/[^ ]*||g' \
      -e '/^dependency_libs/s| -L/usr/%{GCCDIST}/bin||g' \
      -e '/^dependency_libs/s|-lm \(-lm \)*|-lm |' \
      -e '/^dependency_libs/s|-L[^ ]* ||g' \
%if %{biarch}
%if %{build_primary_64bit}
      -e '/^libdir/s|%{_libdir}/32|%{_prefix}/lib|' \
      -e '/^libdir/s|lib64/\.\./||' \
%else
      -e '/^libdir/s|%{_libdir}/64|%{_prefix}/lib64|' \
%endif
%endif
      < $l  > $l.new
  mv $l.new $l
done

%if %{run_tests} 
mkdir ../testresults
cp `find . -name "*.sum"` ../testresults/
cp `find . -name "*.log"  \! -name "config.log" |grep -v 'acats/tests' ` ../testresults/
%endif
# Find C++ and Java headers
if test -d $RPM_BUILD_ROOT%{_prefix}/include/c++; then
find $RPM_BUILD_ROOT%{_prefix}/include/c++ \
  -regex ".*/\(org\|gcj\|gnu\|java\|javax\)" -prune \
  -o \( -type d -printf "%%%%dir " , \
        -printf "%{_prefix}/include/c++/%%P\n" \) > ../c++-headers
fi
# Remove files that we do not need to clean up filelist
rm -f $RPM_BUILD_ROOT%{_prefix}/bin/%{GCCDIST}-*
rm -rf $RPM_BUILD_ROOT%{libsubdir}/install-tools
rm -rf $RPM_BUILD_ROOT%{libsubdir}/install-tools
rm -rf $RPM_BUILD_ROOT%{_libdir}/pkgconfig/libgcj.pc
rm -rf $RPM_BUILD_ROOT%{libsubdir}/include/root
rm -f $RPM_BUILD_ROOT%{libsubdir}/include/curses.h
rm -rf $RPM_BUILD_ROOT%{libsubdir}/include/asm-*
rm -rf $RPM_BUILD_ROOT%{libsubdir}/include/linux
rm -f $RPM_BUILD_ROOT%{libsubdir}/include/ncurses.h
rm -f $RPM_BUILD_ROOT%{libsubdir}/include/stdio.h
rm -f $RPM_BUILD_ROOT%{libsubdir}/include/zutil.h
rm -rf $RPM_BUILD_ROOT%{libsubdir}/include/X11
rm -rf $RPM_BUILD_ROOT%{libsubdir}/include/bits
rm -f $RPM_BUILD_ROOT%{libsubdir}/include/obstack.h
rm -f $RPM_BUILD_ROOT%{libsubdir}/include/spe.h
rm -rf $RPM_BUILD_ROOT%{libsubdir}/include/bits
rm -rf $RPM_BUILD_ROOT%{libsubdir}/include/sys
rm -f  $RPM_BUILD_ROOT%{_infodir}/dir
rm -f $RPM_BUILD_ROOT%{_prefix}/bin/gccbug%{binsuffix}
%if %{build_libjava}
# gcj -static doesn't work properly anyway, unless using --whole-archive
# let's save the space instead.
find $RPM_BUILD_ROOT -name libgcj.a -o -name lib-gnu-java-awt-peer-gtk.a \
                     -o -name libgjsmalsa.a \
                     -o -name libgij.a -o -name libgcjawt.a | xargs rm -f

find $RPM_BUILD_ROOT -name libgcj.spec | xargs \
  sed -i -e 's/lib: /&%%{static:%%eJava programs cannot be linked statically}/'

mv $RPM_BUILD_ROOT%{libsubdir}/include/libffi/ffitarget.h $RPM_BUILD_ROOT%{_prefix}/include/
rm -r $RPM_BUILD_ROOT%{libsubdir}/include/libffi
%endif
%if %{build_java}
%if !%{build_libjava}
rm -f $RPM_BUILD_ROOT%{_mandir}/man1/gcj-dbtool%{binsuffix}.1
rm -f $RPM_BUILD_ROOT%{_mandir}/man1/gij%{binsuffix}.1
%if 0%{?building_libjava:1}
rm -f $RPM_BUILD_ROOT%{_mandir}/man1/rmic%{binsuffix}.1
rm -f $RPM_BUILD_ROOT%{_mandir}/man1/rmiregistry%{binsuffix}.1
rm -f $RPM_BUILD_ROOT%{_mandir}/man1/jcf-dump%{binsuffix}.1
rm -f $RPM_BUILD_ROOT%{_mandir}/man1/jv-convert%{binsuffix}.1
%endif
%endif
# fastjar is separate now
rm -f $RPM_BUILD_ROOT%{_prefix}/bin/fastjar%{binsuffix}
rm -f $RPM_BUILD_ROOT%{_prefix}/bin/grepjar%{binsuffix}
rm -f $RPM_BUILD_ROOT%{_infodir}/fastjar.info*
rm -f $RPM_BUILD_ROOT%{_mandir}/man1/fastjar%{binsuffix}.1
rm -f $RPM_BUILD_ROOT%{_mandir}/man1/grepjar%{binsuffix}.1
%endif
rm -f $RPM_BUILD_ROOT%{_mandir}/man7/fsf-funding.7
rm -f $RPM_BUILD_ROOT%{_mandir}/man7/gfdl.7
rm -f $RPM_BUILD_ROOT%{_mandir}/man7/gpl.7
rm -f $RPM_BUILD_ROOT%{_libdir}/libiberty.a
%if %{build_nof}
rm -f $RPM_BUILD_ROOT%{_prefix}/lib/nof/libiberty.a
%endif
%if %{biarch}
%if %{build_primary_64bit}
rm -f $RPM_BUILD_ROOT%{_prefix}/lib/libiberty.a
%else
rm -f $RPM_BUILD_ROOT%{_prefix}/lib64/libiberty.a
%endif
%endif

# For building libjava only we need to delete other manpages
%if 0%{?building_libjava:1}
rm -f $RPM_BUILD_ROOT%{_prefix}/bin/addr2name.awk%{binsuffix}
rm -f $RPM_BUILD_ROOT%{_mandir}/man1/gcj%{binsuffix}.1
rm -f $RPM_BUILD_ROOT%{_mandir}/man1/gcjh%{binsuffix}.1
rm -f $RPM_BUILD_ROOT%{_mandir}/man1/jv-scan%{binsuffix}.1
%endif

# Delete some files...
%if %{versionspecificlibs}
%if %{build_libjava}
rm $RPM_BUILD_ROOT%{_libdir}/logging.properties
rm $RPM_BUILD_ROOT%{_libdir}/security/classpath.security
rm $RPM_BUILD_ROOT%{_libdir}/security/libgcj.security
%endif
rm $RPM_BUILD_ROOT%{_infodir}/*.info*
rm $RPM_BUILD_ROOT%{_prefix}/share/locale/*/LC_MESSAGES/*.mo
%endif

%if %{build_java}
%if %{build_libjava}
%files 
%defattr(-,root,root)
%dir %{_libdir}/gcj-%{gcc_version}
%{_prefix}/share/java/libgcj-%{gcc_version}.jar
%{_libdir}/gcj-%{gcc_version}/classmap.db
%if !%{versionspecificlibs}
%dir %{_libdir}/security
%{_libdir}/security/classpath.security
%{_libdir}/security/libgcj.security
%endif
# We usually do not multilib libjava
%if %{biarch_libjava}
%mainlib libgcj.so.*
%mainlib libgij.so.*
%mainlib libgcjawt.so.*
%mainlib lib-gnu-java-awt-peer-gtk.so.*
# these libs may get dlopened by their .la/.so name
%mainlib libgcjawt.la
%mainlib libgcjawt.so
%mainlib lib-gnu-java-awt-peer-gtk.la
%mainlib lib-gnu-java-awt-peer-gtk.so
%else
%{mainlibdir}/libgcj.so.*
%{mainlibdir}/libgij.so.*
%{mainlibdir}/libgcjawt.so.*
%{mainlibdir}/lib-gnu-java-awt-peer-gtk.so.*
# these libs may get dlopened by their .la/.so name
%{mainlibdir}/libgcjawt.la
%{mainlibdir}/libgcjawt.so
%{mainlibdir}/lib-gnu-java-awt-peer-gtk.la
%{mainlibdir}/lib-gnu-java-awt-peer-gtk.so
%endif
%if !%{versionspecificlibs}
%{_libdir}/logging.properties
%endif

%files -n libgcj33-devel
%defattr(-,root,root)
%dir %{_prefix}/include/c++
%dir %{gxxinclude}
%{libsubdir}/include/jawt.h
%{libsubdir}/include/jawt_md.h
%{libsubdir}/include/jni.h
%{libsubdir}/include/jni_md.h
%{libsubdir}/include/jvmpi.h
%{gxxinclude}/gnu
%{gxxinclude}/gcj
%{gxxinclude}/java
%{gxxinclude}/javax
%{gxxinclude}/org
%{libsubdir}/include/gcj
%if %{biarch_libjava}
%mainlib libgcj.la
%mainlib libgcj.so
%mainlib libgcj.spec
%mainlib libgij.la
%mainlib libgij.so
%else
%{mainlibdir}/libgcj.la
%{mainlibdir}/libgcj.so
%{mainlibdir}/libgcj.spec
%{mainlibdir}/libgij.la
%{mainlibdir}/libgij.so
%endif

%files -n gcc33-gij
%defattr(-,root,root)
%{_prefix}/bin/rmic%{binsuffix}
%{_prefix}/bin/rmiregistry%{binsuffix}
%{_prefix}/bin/jv-convert%{binsuffix}
%{_prefix}/bin/gcj-dbtool%{binsuffix}
%{_prefix}/bin/gij%{binsuffix}
%doc %{_mandir}/man1/gij%{binsuffix}.1.gz
%doc %{_mandir}/man1/gcj-dbtool%{binsuffix}.1.gz
%doc %{_mandir}/man1/rmic%{binsuffix}.1.gz
%doc %{_mandir}/man1/rmiregistry%{binsuffix}.1.gz
%doc %{_mandir}/man1/jv-convert%{binsuffix}.1.gz

%files -n libffi33
%defattr(-,root,root)
%mainlib libffi.so.*

%if %{separate_biarch}
%files -n libffi33%{separate_biarch_suffix}
%defattr(-,root,root)
%biarchlib libffi.so.*
%endif

%files -n libffi33-devel
%defattr(-,root,root)
%{_prefix}/include/ffi.h
%{_prefix}/include/ffitarget.h
%mainlib libffi.so
%mainlib libffi.a
%mainlib libffi.la

%if %{separate_biarch}
%files -n libffi33-devel%{separate_biarch_suffix}
%defattr(-,root,root)
%biarchlib libffi.so
%biarchlib libffi.a
%biarchlib libffi.la
%endif
%endif
%endif

%if %{run_tests}
%files -n gcc33-testresults
%defattr(-,root,root)
%doc testresults/*.sum
%doc testresults/*.log
%endif

%changelog