I can't seem to find the equivalent of bugzilla for Mandrake so I'm
reporting this here with the hopes it will make it back to appropriate
parties.
I'm a developer in the process of packaging Perl 5.6.0 for another
distribution. I'm all for optimization as long as the code still passes its
tests. With this in mind I tried Mandrake's 7.2 IMHO aggressive i586
optimization flags for my build of Perl 5.6.0. After a lot of debugging I
found out that the -ffast-math flag causes Perl to fail at least 7 subtests
of the op/cmp.t test of the Perl regression tests.
I tested perl-5.600-17mdk on a Mandrake 7.2 and it fails the same tests.
FYI from GCC man page:
-ffast-math "This option allows GCC to violate some ANSI or IEEE
rules/specifications in the interest of optimizing code for speed."
This led me to wonder what else is slightly undetectably broken as a result
of -ffast-math. Having seen this, I certainly wouldn't want it on for every
package as it is it seems to be in Mandrake.
I have forced gcc not to use fast-math in my RPM by appending a
-fno-fast-math to the optimization flags as below. I suggest you should do
the same and unless you can assess the damage -ffast-math is causing to
other programs (I certainly can't) I would suggest removing it from your
global options.
%build
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
sh Configure -des -Doptimize="$RPM_OPT_FLAGS -fno-fast-math" \
Name : perl Relocations: (not relocateable)
Version : 5.600 Vendor: MandrakeSoft
Release : 17mdk Build Date: Sat Sep 30 12:25:56
2000Install date: Sat Nov 25 19:41:42 2000 Build Host: debris.mandrakesoft.com
Group : Development/Perl Source RPM: perl-5.600-17mdk.src.rpmSize
: 13907113 License: GPL
Packager : Pixel <[EMAIL PROTECTED]>
Summary : The Perl programming language.
Default i586 optimization flags from MDK7.2 rpmrc:
i586 -O3 -fomit-frame-pointer -pipe -mcpu=pentiumpro -march=i586 -ffast-math
Test process:
cd /usr/src/RPM/BUILD/perl-5.6.0/t
perl op/cmp.t
With -ffast-math this will fail:
not ok 7 (s <=> NaN) gives: '-1'
not ok 21 (N/A <=> NaN) gives: '-1'
not ok 33 (a <=> NaN) gives: '-1'
not ok 43 (NaN <=> NaN) gives: '-1'
not ok 45 (NaN <=> -1) gives: '-1'
not ok 47 (NaN <=> ) gives: '-1'
not ok 49 (NaN <=> 0) gives: '-1'
not ok 51 (NaN <=> 1) gives: '-1'
Regards,
Rob
--
---------------------"Happiness is understanding."----------------------
Robert Hardy C.E.O. Webcon Inc.
[EMAIL PROTECTED] PGP Key available by finger (613) 276-6206