#
-# TODO:
-# - http://gcc.gnu.org/PR11203 (inline-asm)
-# - http://gcc.gnu.org/PR17640 (empty loop not removed after optimization)
-# - http://gcc.gnu.org/PR20128 (ice with mudflap + profile generate)
-#
# Conditional build:
%bcond_without ada # build without ADA support
+%bcond_without cxx # build without C++ support
%bcond_without fortran # build without Fortran support
%bcond_without java # build without Java support
%bcond_without objc # build without Objective-C support
%bcond_without objcxx # build without Objective-C++ support
%bcond_with multilib # build with multilib support (it needs glibc[32&64]-devel)
-%bcond_without profiling # build without profiling
+%bcond_with profiling # build with profiling
%bcond_without bootstrap # omit 3-stage bootstrap
%bcond_with tests # torture gcc
-# debuginfo not needed for devel snaps.
-%define _enable_debug_packages 0
+%if %{with multilib}
+# the latest chrpath(64) can't handle 32-bit binaries :/
+%define _noautochrpath .*/lib/.*\\.so.*
+%endif
+
+%if %{without cxx}
+%undefine with_java
+%undefine with_objcxx
+%endif
%if %{without objc}
%undefine with_objcxx
Summary(pt_BR): Coleção dos compiladores GNU: o compilador C e arquivos compartilhados
Name: gcc
Version: 4.1.0
-%define _snap 20050701T1908UTC
+%define _snap 20051104r106487
Release: 0.%{_snap}.1
Epoch: 5
License: GPL v2+
#Source0: ftp://gcc.gnu.org/pub/gcc/releases/gcc-%{version}/%{name}-%{version}.tar.bz2
#Source0: ftp://gcc.gnu.org/pub/gcc/snapshots/4.1-%{_snap}/gcc-4.1-%{_snap}.tar.bz2
Source0: gcc-4.1-%{_snap}.tar.bz2
-# Source0-md5: 40fb5ac23af0b2b92550b22561ead27d
+# Source0-md5: 80313bcff75d44013b4f21ee18414515
Source1: %{name}-optimize-la.pl
Patch0: %{name}-info.patch
Patch1: %{name}-nolocalefiles.patch
Patch3: %{name}-ada-link-new-libgnat.patch
Patch4: %{name}-ada-link.patch
Patch5: %{name}-alpha-ada_fix.patch
-Patch6: %{name}-ada-fwrapv.patch
+# -fvisibility fixes...
+Patch6: %{name}-pr19664_gnu_internal.patch
+Patch7: %{name}-pr19664_libstdc++.patch
+
# PRs
Patch10: %{name}-pr7776.patch
-Patch11: %{name}-pr20218.patch
-Patch12: %{name}-pr20297.patch
-Patch13: %{name}-push-pop-visibility.patch
-Patch14: %{name}-pr21704.patch
-Patch15: %{name}-pr22051.patch
-Patch16: %{name}-pr22071.patch
-Patch17: %{name}-pr17640.patch
+Patch11: %{name}-pr20297.patch
+
+Patch13: %{name}-pr22533.patch
+Patch14: %{name}-x87-mmx-switch.patch
+Patch15: %{name}-x87-mmx-eh.patch
+Patch16: %{name}-pr23948.patch
+Patch17: %{name}-pr19505.patch
+Patch18: %{name}-pr24419.patch
URL: http://gcc.gnu.org/
BuildRequires: autoconf
%{?with_tests:BuildRequires: autogen}
BuildRequires: automake
BuildRequires: binutils >= 2:2.15.94.0.1
BuildRequires: bison
-%{?with_java:BuildRequires: cairo-devel}
+%{?with_java:BuildRequires: cairo-devel >= 0.5.0}
%{?with_tests:BuildRequires: dejagnu}
BuildRequires: fileutils >= 4.0.41
BuildRequires: flex
%prep
#setup -q -n gcc-%{version}
-%setup -q -n gcc-4.1-%{_snap}
+%setup -q -n gcc
%patch0 -p1
%patch1 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
+
+# -fvisbility fixes...
%patch6 -p1
+%patch7 -p1
# PRs
%patch10 -p1
-%patch11 -p0
-%patch12 -p1
-%patch13 -p0
-%patch14 -p1
-%patch15 -p1
+%patch11 -p1
+
+%patch13 -p1
+#patch14 -p1 NEEDS UPDATE
+#patch15 -p1 NEEDS UPDATE
%patch16 -p1
%patch17 -p1
+%patch18 -p1
# because we distribute modified version of gcc...
perl -pi -e 's/(version.*)";/$1 (PLD Linux)";/' gcc/version.c
mv ChangeLog ChangeLog.general
%build
-%if 1
cd gcc
%{__autoconf}
cd ..
--enable-shared \
--enable-threads=posix \
--enable-__cxa_atexit \
- --enable-languages="c,c++%{?with_fortran:,f95}%{?with_objc:,objc}%{?with_objcxx:,obj-c++}%{?with_ada:,ada}%{?with_java:,java}" \
+ --enable-languages="c%{?with_cxx:,c++}%{?with_fortran:,f95}%{?with_objc:,objc}%{?with_objcxx:,obj-c++}%{?with_ada:,ada}%{?with_java:,java}" \
--enable-c99 \
--enable-long-long \
--%{?with_multilib:en}%{!?with_multilib:dis}able-multilib \
%{_target_platform}
cd ..
-%endif
%{__make} -C obj-%{_target_platform} \
%{?with_bootstrap:%{?with_profiling:profiled}bootstrap} \
mandir=%{_mandir} \
infodir=%{_infodir}
-%{?with_tests:%{__make} -k -C obj-%{_target_platform} check}
+%{?with_tests:%{__make} -k -C obj-%{_target_platform} check 2>&1 ||:}
%install
rm -rf $RPM_BUILD_ROOT
ln -sf gcc $RPM_BUILD_ROOT%{_bindir}/cc
echo ".so gcc.1" > $RPM_BUILD_ROOT%{_mandir}/man1/cc.1
+libssp=$(cd $RPM_BUILD_ROOT%{_libdir}; echo libssp.so.*.*.*)
+mv $RPM_BUILD_ROOT{%{_libdir}/$libssp,%{_slibdir}}
+ln -sf %{_slibdir}/$libssp $RPM_BUILD_ROOT%{_libdir}/libssp.so
+%if %{with multilib}
+libssp=$($RPM_BUILD_ROOT%{_libdir32}; echo libssp.so.*.*.*`)
+mv $RPM_BUILD_ROOT{%{_libdir32}/$libssp,%{_slibdir32}}
+ln -sf %{_slibdir32}/$libssp $RPM_BUILD_ROOT%{_libdir32}/libssp.so
+%endif
+
%if %{with fortran}
ln -sf gfortran $RPM_BUILD_ROOT%{_bindir}/g95
echo ".so gfortran.1" > $RPM_BUILD_ROOT%{_mandir}/man1/g95.1
# avoid -L poisoning in *.la - there should be only -L%{_libdir}/gcc/*/%{version}
# normalize libdir, to avoid propagation of unnecessary RPATHs by libtool
-for f in libmudflap.la libmudflapth.la libstdc++.la libsupc++.la \
+for f in libmudflap.la libmudflapth.la libssp.la \
+ %{?with_cxx:libstdc++.la libsupc++.la} \
%{?with_fortran:libgfortran.la libgfortranbegin.la} \
%{?with_java:libgcj.la libffi.la} \
%{?with_objc:libobjc.la};
# by fixincludes, we don't want former
gccdir=$(echo $RPM_BUILD_ROOT%{_libdir}/gcc/*/*/)
mkdir $gccdir/tmp
+
# we have to save these however
-%{?with_java:mv -f $gccdir/include/{gcj,libffi/ffitarget.h,jawt.h,jawt_md.h,jni.h,jvmpi.h} $gccdir/tmp}
-%{?with_objc:mv -f $gccdir/include/objc $gccdir/tmp}
-mv -f $gccdir/include/syslimits.h $gccdir/tmp
-rm -rf $gccdir/include
-mv -f $gccdir/tmp $gccdir/include
-cp -f $gccdir/install-tools/include/*.h $gccdir/include
+%{?with_java:mv $gccdir/include/{gcj,libffi/ffitarget.h,jawt.h,jawt_md.h,jni.h,jni_md.h,jvmpi.h} $gccdir/tmp}
+%{?with_objc:mv $gccdir/include/objc $gccdir/tmp}
+mv $gccdir/include/syslimits.h $gccdir/tmp
+rm -rf $gccdir/include
+mv $gccdir/tmp $gccdir/include
+cp $gccdir/install-tools/include/*.h $gccdir/include
# but we don't want anything more from install-tools
-rm -rf $gccdir/install-tools
+rm -rf $gccdir/install-tools
%if %{with multilib}
-ln -sf %{_slibdir32}/libgcc_s.so.1 $gccdir/32/libgcc_s.so
+ln -sf %{_slibdir32}/libgcc_s.so.1 $gccdir/32/libgcc_s.so
%endif
-ln -sf %{_slibdir}/libgcc_s.so.1 $gccdir/libgcc_s.so
+ln -sf %{_slibdir}/libgcc_s.so.1 $gccdir/libgcc_s.so
%find_lang gcc
-%find_lang libstdc\+\+
+%{?with_cxx:%find_lang libstdc\+\+}
# cvs snap doesn't contain (release does) below files,
# so let's create dummy entries to satisfy %%files.
%attr(755,root,root) %{_bindir}/cc
%attr(755,root,root) %{_bindir}/cpp
+%{_includedir}/ssp
+
%{_mandir}/man1/cc.1*
%{_mandir}/man1/cpp.1*
%{_mandir}/man1/gcc.1*
%attr(755,root,root) /lib/cpp
%attr(755,root,root) %{_slibdir}/lib*.so
+%{_libdir}/libssp.la
+%attr(755,root,root) %{_libdir}/libssp.a
+%attr(755,root,root) %{_libdir}/libssp.so
+%{_libdir}/libssp_nonshared.a
+%{_libdir}/libssp_nonshared.la
%if %{with multilib}
%dir %{_libdir}/gcc/*/*/32
%{_libdir}/gcc/*/*/32/libgcov.a
%{_libdir}/gcc/*/*/32/libgcc.a
%{_libdir}/gcc/*/*/32/libgcc_eh.a
%{_libdir}/gcc/*/*/32/libgcc_s.so
+%{_libdir32}/libssp.la
+%attr(755,root,root) %{_libdir32}/libssp.a
+%attr(755,root,root) %{_libdir32}/libssp.so
+%{_libdir32}/libssp_nonshared.a
+%{_libdir32}/libssp_nonshared.la
%endif
%{_libdir}/gcc/*/*/libgcov.a
%{_libdir}/gcc/*/*/libgcc.a
%{_libdir}/gcc/*/*/adalib/libgnat.a
%endif
+%if %{with cxx}
%files c++
%defattr(644,root,root,755)
%doc gcc/cp/{ChangeLog,NEWS}
%{_libdir32}/libstdc++.a
%endif
%{_libdir}/libstdc++.a
+%endif
%if %{with fortran}
%files fortran