File libgcj33.spec of Package gcc33

%define building_libjava 1
%define run_tests 1
#
# spec file for package gcc33 (Version 3.3.3)
#
# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
# 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/
#

# icecream 0


# 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: glibc-devel-32bit flex bison gettext-devel zlib-devel
ExcludeArch:   %arm ppc64le
%if %{build_ada}
BuildRequires: gcc-ada
%endif
%if %{build_libjava}
BuildRequires: gtk2-devel libart_lgpl-devel update-desktop-files
%endif
%if %{build_fortran}
#BuildRequires: mpfr-devel
%endif
%ifarch ia64
BuildRequires: libunwind-devel
%endif
%if %{run_tests}
BuildRequires: dejagnu 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

%define biarch_targets x86_64 s390x powerpc64 powerpc

URL:          http://gcc.gnu.org/
Version: 3.3.3
Release:      1
%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

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

Autoreqprov:  on
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
Autoreqprov:  on

%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
Autoreqprov:  on
Requires:     libstdc++33-devel = %{version}-%{release}
Requires:     libgcj >= %{version}-%{release}
Requires:     gtk2-devel
Requires:     libart_lgpl-devel
Requires:     glibc-devel
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
Group:        Development/Libraries/Java
Requires:     libgcj >= %{version}-%{release}
Autoreqprov:  on

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


%package -n libffi33
Summary:      Foreign Function Interface library
License:      BSD-3-Clause
Group:        Development/Languages/C and C++
Autoreqprov:  on
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 -n libffi33-32bit
Summary:      Foreign Function Interface library
License:      BSD-3-Clause
Group:        Development/Languages/C and C++
Autoreqprov:  on
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 -n libffi33-64bit
Summary:      Foreign Function Interface library
License:      BSD-3-Clause
Group:        Development/Languages/C and C++
Autoreqprov:  on
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 -n libffi33-devel
Summary:      Foreign Function Interface library development files
Group:        Development/Languages/C and C++
Autoreqprov:  on
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 -n libffi33-devel-32bit
Summary:      Foreign Function Interface library development files
Group:        Development/Languages/C and C++
Autoreqprov:  on
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 -n libffi33-devel-64bit
Summary:      Foreign Function Interface library development files
Group:        Development/Languages/C and C++
Autoreqprov:  on
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 -n gcc33-testresults
Summary:      Testsuite results
Group:        Development/Languages/C and C++

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



# 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}


# 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



%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}

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=/

# Do not use RPM_OPT_FLAGS, the ancient compiler cannot cope with
# most of it anyway thus use compiler defaults, -O2 -g
../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}


# Only run profiled bootstrap on archs where it works
make bootstrap-lean $PARALLEL
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
# ???  The libstdc++5 locale conflicts with the libstdc++6 locale.
# prefer the libstdc++6 one by simply removing ours
rm -f $RPM_BUILD_ROOT%{_prefix}/share/locale/*/LC_MESSAGES/libstdc++.mo

# Do not package gcc-info as that conflicts with later gcc
%if %{suse_version} >= 1010
rm -f $RPM_BUILD_ROOT%{_infodir}/*.info*
%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 -n gcc
* Wed Oct 29 2003 - aj@suse.de
- New package.

openSUSE Build Service is sponsored by