Date: Thu, 16 Sep 2004 15:55:35 -0500 (CDT) From: "Paul Seniura" <pdseniura@techie.com> To: <FreeBSD-gnats-submit@FreeBSD.org> Cc: Yoshiaki UCHIKAWA <yoshiaki@kt.rim.or.jp> Subject: ports/71803: [PATCH] math/pari-devel is now able to compile with gcc342 on 5.3 and 6.0-Current Message-ID: <20040916205535.B20345C29@techpc04.okladot.state.ok.us> Resent-Message-ID: <200409162100.i8GL0ndr062213@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 71803 >Category: ports >Synopsis: [PATCH] math/pari-devel is now able to compile with system-gcc342 on 5.3 and 6.0-Current >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Sep 16 21:00:48 GMT 2004 >Closed-Date: >Last-Modified: >Originator: "Paul Seniura" <pdseniura@techie.com> >Release: FreeBSD 6.0-CURRENT i386 >Organization: State of Okla. D.O.T. >Environment: System: FreeBSD techpc04.okladot.state.ok.us 6.0-CURRENT FreeBSD 6.0-CURRENT #2: Thu Sep 16 10:00:07 CDT 2004 root@techpc04.okladot.state.ok.us:/usr/obj/src/sys/IBM300SY_4BSD_Os i386 >Description: I found the discussion of this problem here: <http://pari.math.u-bordeaux.fr/archives/pari-dev-0404/msg00015.html> The original project's ./Configure script is improperly using "well-known constants" (for want of a better term ;) ) to test and detect math library functions. For example, logN(1.0) == 0.0 (for any base N>0 IIRC). The new optimizing versions of gcc know this, without needing to compile and call the logN() function itself. This causes the ./Configure script to falsely assume the log2() library exists as a built-in function (or otherwise provided outside this application). The same goes for the exp2() function. A snip from my portupgrade log for this app: [...] Checking some common types... ...I did not find ulong. Looking in C lib for some symbols... ...Found exp2. ...Found log2. ...Found strftime. [...] cc -c -O3 -DGCC_INLINE -Wall -fomit-frame-pointer -O -pipe -Os -pipe -march=pentium2 -march=pentium2 -DBOTH_GNUPLOT_AND_X11 -I. -I../src/headers -o mpinl.o ../src/kernel/none/level1.c rm -f libpari-2.2.so.7.0.0 cc -o libpari-2.2.so.7.0.0 -shared -O3 -DGCC_INLINE -Wall -fomit-frame-pointer -O -pipe -Os -pipe -march=pentium2 -march=pentium2 -DBOTH_GNUPLOT_AND_X11 -Wl,-shared,-soname=libpari-2.2.so.7 kernel.o mp.o alglin1.o alglin2.o arith1.o arith2.o base1.o base2.o base3.o base4.o base5.o bibli1.o bibli2.o buch1.o buch2.o buch3.o buch4.o galconj.o gen1.o gen2.o gen3.o ifactor1.o perm.o polarit1.o polarit2.o polarit3.o rootpol.o subcyclo.o subgroup.o trans1.o trans2.o trans3.o aprcl.o elliptic.o galois.o groupid.o kummer.o mpqs.o nffactor.o part.o stark.o subfield.o thue.o anal.o compat.o errmsg.o es.o init.o members.o sumiter.o mpinl.o -lc -lm if test "libpari-2.2.so.7" != "libpari-2.2.so"; then rm -f libpari-2.2.so.7; rm -f libpari-2.2.so; ln -s libpari-2.2.so.7.0.0 libpari-2.2.so.7; ln -s libpari-2.2.so.7.0.0 libpari-2.2.so; fi rm -f gp-dyn cc -o gp-dyn -O3 -DGCC_INLINE -Wall -fomit-frame-pointer -O -pipe -Os -pipe -march=pentium2 -march=pentium2 -Wl,-export-dynamic gp.o gp_init.o gp_rl.o highlvl.o whatnow.o plotport.o plotgnuplot.o plotX.o -Wl,-rpath,/src/ports/math/pari-devel/work/pari-2.2.7.alpha/Ofreebsd-i386:/usr/local/lib:/usr/X11R6/lib:/usr/lib -L/src/ports/math/pari-devel/work/pari-2.2.7.alpha/Ofreebsd-i386 -L/usr/local/lib -lreadline -L/usr/lib -lncurses -L/usr/local/lib -lpari-2.2 -L/usr/X11R6/lib -lX11 -lm /src/ports/math/pari-devel/work/pari-2.2.7.alpha/Ofreebsd-i386/libpari-2.2.so: undefined reference to `exp2' /src/ports/math/pari-devel/work/pari-2.2.7.alpha/Ofreebsd-i386/libpari-2.2.so: undefined reference to `log2' gmake[1]: *** [gp-dyn] Error 1 gmake[1]: Leaving directory `/src/ports/math/pari-devel/work/pari-2.2.7.alpha/Ofreebsd-i386' gmake: *** [gp] Error 2 *** Error code 2 Stop in /src/ports/math/pari-devel. ** Command failed [exit code 1]: /usr/bin/script -qa /tmp/portupgrade16264.3 make ** Fix the problem and try again. ---> Build of math/pari-devel ended at: Thu, 16 Sep 2004 13:19:09 -0500 (consumed 00:09:28) ---> Reinstallation of math/pari-devel ended at: Thu, 16 Sep 2004 13:19:09 -0500 (consumed 00:09:28) [...] This clearly shows the newer gcc versions do not provide the math functions exp2() and log2(), at least with the system gcc342 as installed in 5.3 and 6-Current. >How-To-Repeat: Try building math/pari-devel on 5.3 or 6-Current. >Fix: >From the original discussion link above, we need to fix the "has_*.c" modules to do a _real_ test for the library in question. It seems, for now, we need to do this only for has_log2.c and has_exp2.c under the expanded src tarball subdir "config/" . Someone really needs to update the project files in CVS, as other *ix platforms with the newer gccs will come across these malformed tests. We can work around it now by creating two new files under the port skeleton's files/ subdir with this patch: ===cut-here=== diff -urN files_orig/patch-has_exp2.c files/patch-has_exp2.c --- files_orig/patch-has_exp2.c Wed Dec 31 18:00:00 1969 +++ files/patch-has_exp2.c Thu Sep 16 14:30:23 2004 @@ -0,0 +1,6 @@ +--- config/has_exp2.c_orig Thu Sep 16 08:46:59 1999 ++++ config/has_exp2.c Thu Sep 16 14:27:18 2004 +@@ -1,2 +1,2 @@ + #include <math.h> +-main(){double x=exp2(1.0);} ++main(){double x=exp2(0.666);} diff -urN files_orig/patch-has_log2.c files/patch-has_log2.c --- files_orig/patch-has_log2.c Wed Dec 31 18:00:00 1969 +++ files/patch-has_log2.c Thu Sep 16 14:30:50 2004 @@ -0,0 +1,6 @@ +--- config/has_log2.c_orig Wed Jan 8 18:16:55 2003 ++++ config/has_log2.c Thu Sep 16 14:27:07 2004 +@@ -1,2 +1,2 @@ + #include <math.h> +-main(){double x=log2(1.0);} ++main(){double x=log2(0.666);} ===cut-here=== As you can see, I have named the new patches as files/patch-has_exp2.c and files/patch-has_log2.c I hope these names are agreeable with style etc. We are patching the modules used by ./Configure to use a number that is not easily computed or optimized. As the discussion link mentions in a later thread therein, the compiler will not hard-code such an answer to a function. BTW I chose 0.666 as per the original poster in that discussion. ;) At least the project can properly detect the lack of these functions, as shown in my new portupgrade log: [...] Checking some common types... ...I did not find ulong. Looking in C lib for some symbols... ...I did not find exp2. ...I did not find log2. ...Found strftime. [...] ...and everything seems to build as it should. Whether or not the app _works_ is a completely different matter, as I am still getting other things caught-up while the ports-freeze is in effect. That is a long-winded explanation to say I haven't tested it yet. ;) If the app does work properly with these patches, can someone send up-stream the patches to fix their CVS copies of these modules, please? -- thx, Paul Seniura System Specialist State of Okla. D.O.T. >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040916205535.B20345C29>