Bug 459796

Summary: Review Request: gcc43 - GCC 4.3 preview
Product: Red Hat Enterprise Linux 5 Reporter: Jakub Jelinek <jakub>
Component: Package ReviewAssignee: Bill Nottingham <notting>
Status: CLOSED CURRENTRELEASE QA Contact:
Severity: medium Docs Contact:
Priority: medium    
Version: 5.0CC: jan.kratochvil, notting, petersen, pm-rhel, riek, rvokal, syeghiay
Target Milestone: rc   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2011-12-13 20:36:56 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 188273, 450676, 454962    

Description Jakub Jelinek 2008-08-22 13:39:43 UTC
Spec URL: file:///home/devel/jakub/gcc43.spec
SRPM URL: file:///home/devel/jakub/gcc43-4.3.1-7.src.rpm
Description: 
The gcc43 package contains preview the GNU Compiler Collection version 4.3.

Related bug #450676

Comment 1 Peter Lemenkov 2008-08-23 11:04:34 UTC
[petro@Sulaco public_html]$ rpm -q gcc
gcc-4.3.0-8.ppc
[petro@Sulaco public_html]$ 

Is this a Merge Review?

Comment 2 Peter Lemenkov 2008-08-23 11:05:27 UTC
Oops! Sorry for noise - I just realized that this is a ticket for RHEL.

Comment 4 Bill Nottingham 2008-09-04 18:06:51 UTC
MUST items:

- Package meets naming and packaging guidelines - OK
- Spec file matches base package name. - OK
- Spec has consistant macro usage. - ***

%{gcc_version} and %{gcc_release} look like they could be replaced wholesale with %{version} and %{release}.

- Meets Packaging Guidelines. - OK
- License - OK (GPLv3+ and GPLv2+ with exceptions)
- License field in spec matches - OK
- License file included in package - OK. 4 of them, in fact
- Spec in American English - OK
- Spec is legible. - More or less
- Sources match upstream md5sum: - ***

Can't see how to reproduce this tarball; it appears to be a source control snapshot. Could instructions on reproducing it be added to the spec a la http://fedoraproject.org/wiki/Packaging/SourceURL#Using_Revision_Control?

- Package needs ExcludeArch - OK
- Spec handles locales/find_lang - ***

No find_lang issues, but:
...
if [ ! -f /usr/lib/locale/de_DE/LC_CTYPE ]; then
  mkdir locale
  localedef -f ISO-8859-1 -i de_DE locale/de_DE
  export LOCPATH=`pwd`/locale:/usr/lib/locale
fi
...

WTF?

- Package is relocatable and has a reason to be. - N/A
- Package has %defattr and permissions on files is good. - OK
- Package has a correct %clean section. - OK
- Package has correct buildroot - ***

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root

Could be improved (the stock one is %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n))

- Package is code or permissible content. - OK
- Doc subpackage needed/used. - N/A
- Packages %doc files don't affect runtime. - OK

- Headers/static libs in -devel subpackage. - OK
- Spec has needed ldconfig in post and postun - OK ***

Where's libstdc++? Is it intended to use the system runtime? You seem to ship the static and nonshared libstdc++ built with gcc43, but want to use the dynamic version of the stock compiler. That seems very odd.

- .pc files in -devel subpackage/requires pkgconfig - N/A
- .so files in -devel subpackage. - OK
- -devel package Requires: %{name} = %{version}-%{release} - ***

Not for libstdc++43-devel; I'm guessing you want this.

- .la files are removed. - OK

- Package is a GUI app and has a .desktop file - N/A

- Package has no duplicate files in %files. - OK
- Package doesn't own any directories other packages own. - ***

Shares directories with system gcc et. al. Seems unavoidable.

- Package owns all the directories it creates. - OK

SHOULD Items:

- Should have sane scriptlets. - OK
- Should have subpackages require base package with fully versioned depend.  - ***

See above re libstdc++43-devel.

- Should have dist tag - Meh, shouldn't be needed.
- Should package latest version - OK, looks recent enough.

MUST items TODO:
- BuildRequires correct
- Package compiles and builds on at least one arch.
- No rpmlint output.
- final provides and requires are sane

SHOULD Items TODO: 

- Should build in mock.
- Should build on all supported archs
- Should function as described.
- Should have sane scriptlets.
- Should have subpackages require base package with fully versioned depend.
- Should have dist tag
- Should package latest version
- check for outstanding bugs on package. (For core merge reviews)

TODO items are waiting on a mock build to complete.

Random comments:

- why use %define _unpackaged_files_terminate_build 0?
- you mention libgcc, libmudflap, etc. in the spec, but don't
  package them
- Do you want this to share Obsoletes (of gcc3, egcs, gcc4, etc.) with
  the system gcc?

Comment 5 Jakub Jelinek 2008-09-04 19:46:47 UTC
The reason for %{gcc_version} is that once we start supporting some gcc version in RHEL, we need to preserve existing paths for compatibility with libtool etc.  It is true current gcc43 doesn't need it, but gcc44 which will follow will likely need it at some point. %{gcc_release} is included in the gcc --version string as well as parsed internally by gcc for the __GNUC_RH_RELEASE__ macro, but it can be just an integer, so it is kept separate from %{release}.  %{release} should generally be %{gcc_release}, followed optionally by .1, .%{?dist} etc.  Guess I should add a comment about that.

I will document how to recreate the tarball from svn, though is mentioning the exact svn revision in the spec file a must?  That would mean an extra editing of the spec file, or writing a script to do that.

The de_DE locale stuff is very ancient, libstdc++ uses a few tests that fail if de_DE isn't installed, locale data are %lang marked and at some point we didn't install them all.  I guess as most people now have all installed this could be killed.

The libstdc++ issue is bad, but that's the best approach I could come up with.
libstdc++.so.6 has the same SONAME from gcc 3.4, 4.0, 4.1, 4.2, 4.3 and likely 4.4 as well, it is symbol versioned and each version adds a bunch of new symbols.
In RHEL4, gcc4 packages don't include libstdc++ nor libstdc++-devel and use the gcc 3.4.x libstdc++ including its headers even with 4.1.x compiler.  That means customers test fairly different C++ environment.  So for RHEL5 I wanted to use gcc 4.3.x libstdc++ headers, but I don't want to possibly destabilize 4.1.x libstdc++.  So, libstdc++.so is a linker script which links in the 4.1.x libstdc++.so.6 together with a shared library which contains the extra added 4.2.x and 4.3.x symbols.

I use %define _unpackaged_files_terminate_build 0 just because I'm lazy to kill all the unwanted stuff, which changes from release to release.  Is it enough if I change this in rawhide gcc?

libgcc, libmudflap etc. comments in the spec are just leftovers from gcc's spec file, will try to fix them up.
I guess I can comment out all the Obsoletes (did that for rawhide gcc too).

Comment 6 Bill Nottingham 2008-09-04 20:43:08 UTC
(In reply to comment #5)
> I will document how to recreate the tarball from svn, though is mentioning the
> exact svn revision in the spec file a must?  That would mean an extra editing
> of the spec file, or writing a script to do that.

It would be nice, makes it easier to discover what's actually being shipped.

> The libstdc++ issue is bad, but that's the best approach I could come up with.
> libstdc++.so.6 has the same SONAME from gcc 3.4, 4.0, 4.1, 4.2, 4.3 and likely
> 4.4 as well, it is symbol versioned and each version adds a bunch of new
> symbols.
> In RHEL4, gcc4 packages don't include libstdc++ nor libstdc++-devel and use the
> gcc 3.4.x libstdc++ including its headers even with 4.1.x compiler.  That means
> customers test fairly different C++ environment.  So for RHEL5 I wanted to use
> gcc 4.3.x libstdc++ headers, but I don't want to possibly destabilize 4.1.x
> libstdc++.  So, libstdc++.so is a linker script which links in the 4.1.x
> libstdc++.so.6 together with a shared library which contains the extra added
> 4.2.x and 4.3.x symbols.

Yuk. But if it works...

> I use %define _unpackaged_files_terminate_build 0 just because I'm lazy to kill
> all the unwanted stuff, which changes from release to release.  Is it enough if
> I change this in rawhide gcc?

Sure.

As to the other stuff:

MUST items:
- BuildRequires correct - it built
- Package compiles and builds on at least one arch. - on three so far
- No rpmlint output. - ***

gcc43-4.3.1-7.i386.rpm.rpmlint
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/libgcc_s.so
gcc43.i386: W: symlink-should-be-relative /usr/lib/gcc/i386-redhat-linux6E/4.3.1/libgcc_s.so /lib/libgcc_s.so.1
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/iso646.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/libgomp.a
gcc43.i386: W: file-not-utf8 /usr/share/doc/gcc43-4.3.1/ChangeLog-2000.bz2
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/emmintrin.h
gcc43.i386: W: file-not-utf8 /usr/share/doc/gcc43-4.3.1/ChangeLog-2006.bz2
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/mm3dnow.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/smmintrin.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/pmmintrin.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/libgomp.so
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/mmintrin-common.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/stdarg.h
gcc43.i386: W: file-not-utf8 /usr/share/doc/gcc43-4.3.1/ChangeLog-2007.bz2
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/cpuid.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/nmmintrin.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/xmmintrin.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/ammintrin.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/stddef.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/stdbool.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/omp.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/mm_malloc.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/syslimits.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/float.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/mmintrin.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/bmmintrin.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/libgcc.a
gcc43.i386: W: file-not-utf8 /usr/share/doc/gcc43-4.3.1/ChangeLog-2003.bz2
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/tmmintrin.h
gcc43.i386: W: file-not-utf8 /usr/share/doc/gcc43-4.3.1/ChangeLog-2004.bz2
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/libgcc_eh.a
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/varargs.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/libgcov.a
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/unwind.h
gcc43.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/include/limits.h
gcc43.i386: E: devel-dependency glibc-devel
gcc43.i386: W: obsolete-not-provided gcc3
gcc43.i386: W: obsolete-not-provided egcs
gcc43.i386: W: obsolete-not-provided gcc-chill
gcc43.i386: W: obsolete-not-provided gcc34
gcc43.i386: W: obsolete-not-provided gcc35
gcc43.i386: W: obsolete-not-provided gcc4

Generally ignorable. What's the '6E', though?


gcc43-c++-4.3.1-7.i386.rpm.rpmlint
gcc43-c++.i386: W: file-not-utf8 /usr/share/doc/gcc43-c++-4.3.1/ChangeLog-2006.bz2
gcc43-c++.i386: W: file-not-utf8 /usr/share/doc/gcc43-c++-4.3.1/ChangeLog-2000.bz2
gcc43-c++.i386: W: file-not-utf8 /usr/share/doc/gcc43-c++-4.3.1/ChangeLog-1999.bz2
gcc43-c++.i386: W: file-not-utf8 /usr/share/doc/gcc43-c++-4.3.1/ChangeLog-1998.bz2
gcc43-c++.i386: E: devel-dependency libstdc++43-devel
gcc43-c++.i386: W: obsolete-not-provided gcc3-c++
gcc43-c++.i386: W: obsolete-not-provided gcc34-c++
gcc43-c++.i386: W: obsolete-not-provided gcc35-c++
gcc43-c++.i386: W: obsolete-not-provided gcc4-c++

All OK.


gcc43-gfortran-4.3.1-7.i386.rpm.rpmlint
gcc43-gfortran.i386: W: file-not-utf8 /usr/share/doc/gcc43-gfortran-4.3.1/ChangeLog-2004.bz2
gcc43-gfortran.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/libgfortranbegin.a
gcc43-gfortran.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/finclude/omp_lib.h
gcc43-gfortran.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/libgfortran.so
gcc43-gfortran.i386: W: devel-file-in-non-devel-package /usr/lib/gcc/i386-redhat-linux6E/4.3.1/libgfortran.a
gcc43-gfortran.i386: W: file-not-utf8 /usr/share/doc/gcc43-gfortran-4.3.1/ChangeLog-2006.bz2
gcc43-gfortran.i386: W: file-not-utf8 /usr/share/doc/gcc43-gfortran-4.3.1/ChangeLog-2005.bz2
gcc43-gfortran.i386: W: file-not-utf8 /usr/share/doc/gcc43-gfortran-4.3.1/ChangeLog-2007.bz2
gcc43-gfortran.i386: W: obsolete-not-provided gcc3-g77
gcc43-gfortran.i386: W: obsolete-not-provided gcc-g77
gcc43-gfortran.i386: W: obsolete-not-provided gcc4-gfortran

All OK.

libgfortran43-4.3.1-7.i386.rpm.rpmlint
libgfortran43.i386: W: no-documentation
libgfortran43.i386: W: obsolete-not-provided libf2c
1 packages and 0 specfiles checked; 0 errors, 2 warnings.

You may want to provide that, I don't know how compatible it is.

libstdc++43-devel-4.3.1-7.i386.rpm.rpmlint
libstdc++43-devel.i386: W: file-not-utf8 /usr/share/doc/libstdc++43-devel-4.3.1/ChangeLog-2003.bz2
libstdc++43-devel.i386: W: file-not-utf8 /usr/share/doc/libstdc++43-devel-4.3.1/ChangeLog-2002.bz2
libstdc++43-devel.i386: W: no-dependency-on libstdc++43/libstdc++43-libs/liblibstdc++43
libstdc++43-devel.i386: W: obsolete-not-provided libstdc++3-devel
libstdc++43-devel.i386: W: obsolete-not-provided libstdc++34-devel

OK. The 'no-dependency-on' looks like a tools error.

- final provides and requires are sane

libstdc++43-devel probably wants to require gcc43-c++.

SHOULD Items TODO: 

- Should build in mock. - OK
- Should build on all supported archs - ia64, x86_64, i386 work. ppc & s390 are being slow today.
- Should function as described.  - Haven't tested.
- Should have dist tag - N/A
- Should package latest version - Looks reasonable.

Comment 7 Jakub Jelinek 2008-09-07 13:04:02 UTC
Updated .spec file + src.rpm + *.x86_64.rpm + *.s390x.rpm in ~jakub/rpms/gcc43/RHEL-5/binaries/

libf2c is totally incompatible with libgfortran43, the Obsoletes line has been commented out anyway, as libgfortran package also obsoletes it.  We have compat-libf2c in RHEL5.  6E (RHEL6) is just trying to follow the latest RHEL4 gcc4 dir layout, when both the next RHEL gcc and older RHEL's tech preview used the same
triplet, we had big upgrade issues when e.g. something had to be turned into symlink etc.

libstdc++-devel doesn't require gcc-c++ either, the requires is the other way (gcc-c++ on libstdc++-devel and gcc43-c++ on libstdc++43-devel).  I think it is unnecessary to create cycles in this case.

Comment 8 Bill Nottingham 2008-09-08 19:47:43 UTC
Looks ugly, but reasonable. Approved.

Comment 11 Ryan Lerch 2008-11-26 01:19:20 UTC
I need to write this release note for the gcc43 tech preview.

What are the top features that this tech preview adds that are notable for this note?


cheers,
ryanlerch

Comment 13 Jan Kratochvil 2009-05-12 18:05:47 UTC
Just a fixup if someone would be reading it later:

(In reply to comment #5)
>             So, libstdc++.so is a linker script which links in the 4.1.x
> libstdc++.so.6 together with a shared library which contains the extra added
                                 ^^^^^^=static
> 4.2.x and 4.3.x symbols.

gcc44-c++-4.4.0-3.el5.x86_64.rpm
/usr/lib/gcc/x86_64-redhat-linux6E/4.4.0/libstdc++.so contains:
INPUT ( -lstdc++_nonshared /usr/lib64/libstdc++.so.6 )

libstdc++43-devel-4.3.2-7.el5.x86_64.rpm:
/usr/lib/gcc/x86_64-redhat-linux6E/4.3.2/libstdc++_nonshared.a
file: .../libstdc++_nonshared.a: current ar archive

Comment 14 Bill Nottingham 2011-12-13 20:36:56 UTC
This shipped.