ports/159189: math/taucs: problems with shared library
Stephen Montgomery-Smith
stephen at FreeBSD.org
Mon Jul 25 19:10:10 UTC 2011
>Number: 159189
>Category: ports
>Synopsis: math/taucs: problems with shared library
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon Jul 25 19:10:10 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator: Stephen Montgomery-Smith
>Release: FreeBSD 8.2-STABLE amd64
>Organization:
>Environment:
System: FreeBSD wilberforce 8.2-STABLE FreeBSD 8.2-STABLE #0: Sat May 28 09:40:58 CDT 2011 stephen at laptop5.gateway.2wire.net:/usr/obj/usr/src/sys/GENERIC amd64
>Description:
math/taucs uses ftime, which is part of libcompat, and on FreeBSD 8.2 is available only as a static library. This can cause problems.
>How-To-Repeat:
Update ports so that cad/gmsh is at version 2.5.0. (I only committed this a few minutes ago.)
cd /usr/ports/cad/gmsh
make -DWITH_TAUCS
>Fix:
Use gettimeofday instead of ftime.
diff -urN /usr/ports/math/taucs/Makefile taucs/Makefile
--- /usr/ports/math/taucs/Makefile 2011-07-25 00:38:22.000000000 +0000
+++ taucs/Makefile 2011-07-25 17:54:53.000000000 +0000
@@ -7,7 +7,7 @@
PORTNAME= taucs
PORTVERSION= 2.2
-PORTREVISION= 6
+PORTREVISION= 7
CATEGORIES= math
MASTER_SITES= http://www.tau.ac.il/~stoledo/taucs/${PORTVERSION}/
DISTNAME= ${PORTNAME}
diff -urN /usr/ports/math/taucs/files/patch-config+FreeBSD.mk taucs/files/patch-config+FreeBSD.mk
--- /usr/ports/math/taucs/files/patch-config+FreeBSD.mk 2007-01-09 05:52:07.000000000 +0000
+++ taucs/files/patch-config+FreeBSD.mk 2011-07-25 18:19:59.000000000 +0000
@@ -1,5 +1,5 @@
---- config/FreeBSD.mk.orig Fri Aug 29 00:13:38 2003
-+++ config/FreeBSD.mk Tue Jan 9 14:18:49 2007
+--- config/FreeBSD.mk.orig 2003-08-28 15:13:38.000000000 +0000
++++ config/FreeBSD.mk 2011-07-25 18:19:03.000000000 +0000
@@ -8,16 +8,16 @@
PATHSEP=/
DEFFLG=-D
@@ -23,7 +23,7 @@
LOUTFLG = $(COUTFLG)
AR = ar cr
-@@ -26,12 +26,12 @@
+@@ -26,13 +26,13 @@
RANLIB = ranlib
RM = rm -rf
@@ -36,7 +36,10 @@
+LIBMETIS = -lmetis
-LIBF77 = -lg2c
+-#compat is required for ftime()
+-LIBC = -lm -lcompat
+LIBF77 =
- #compat is required for ftime()
- LIBC = -lm -lcompat
++
++LIBC = -lm
+ #########################################################
diff -urN /usr/ports/math/taucs/files/patch-src-taucs_timer.c taucs/files/patch-src-taucs_timer.c
--- /usr/ports/math/taucs/files/patch-src-taucs_timer.c 1970-01-01 00:00:00.000000000 +0000
+++ taucs/files/patch-src-taucs_timer.c 2011-07-25 18:12:30.000000000 +0000
@@ -0,0 +1,160 @@
+--- src/taucs_timer.c.orig 2003-09-01 10:28:54.000000000 +0000
++++ src/taucs_timer.c 2011-07-25 18:12:00.000000000 +0000
+@@ -168,9 +168,9 @@
+ static int first_time = 1;
+
+ if (first_time) {
+- struct timeb T;
++ struct timeval T;
+ static time_t start_time, time_diff;
+- static time_t start_mill, mill_diff;
++ static time_t start_micro, micro_diff;
+ int rc;
+ double dt;
+ /*uint32 hi0, lo0, hi1, lo1;*/
+@@ -178,19 +178,19 @@
+
+ first_time = 0;
+
+- rc = ftime( &T );
++ rc = gettimeofday( &T,NULL );
+ rdtsc(&hi0,&lo0);
+- start_time = T.time;
+- start_mill = T.millitm;
++ start_time = T.tv_sec;
++ start_micro = T.tv_usec;
+
+ sleep(1);
+
+- rc = ftime( &T );
++ rc = gettimeofday( &T,NULL );
+ rdtsc(&hi1,&lo1);
+- time_diff = T.time - start_time;
+- mill_diff = T.millitm - start_mill;
++ time_diff = T.tv_sec - start_time;
++ micro_diff = T.tv_usec - start_micro;
+
+- dt = (1e9) * ((double) time_diff) + (1e6) * ((double) mill_diff);
++ dt = (1e9) * ((double) time_diff) + (1e3) * ((double) micro_diff);
+
+ hir = (hi1 - hi0);
+ lor = (lo1 - lo0);
+@@ -249,32 +249,32 @@
+
+ double taucs_wtime()
+ {
+- struct timeb T;
++ struct timeval T;
+ /*static int first_time = 1;*/
+ /* static time_t start_time, time_diff;
+- static time_t start_mill, mill_diff;
++ static time_t start_micro, micro_diff;
+ */
+
+ static time_t time_diff;
+- static time_t mill_diff;
++ static time_t micro_diff;
+ /*int rc;*/
+ double dt;
+
+- (void) ftime( &T );
++ (void) gettimeofday( &T,NULL );
+ /*
+ if (first_time) {
+ first_time = 0;
+- start_time = T.time;
+- start_mill = T.millitm;
++ start_time = T.tv_sec;
++ start_micro = T.tv_usec;
+ }
+
+- time_diff = T.time - start_time;
+- mill_diff = T.millitm - start_mill;
++ time_diff = T.tv_sec - start_time;
++ micro_diff = T.tv_usec - start_micro;
+ */
+- time_diff = T.time;
+- mill_diff = T.millitm;
++ time_diff = T.tv_sec;
++ micro_diff = T.tv_usec;
+
+- dt = ((double) time_diff) + (1e-3) * ((double) mill_diff);
++ dt = ((double) time_diff) + (1e-6) * ((double) micro_diff);
+
+ return dt;
+ }
+@@ -316,17 +316,17 @@
+ struct timeb T;
+ static int first_time = 1;
+ static time_t start_time, time_diff;
+- static time_t start_mill, mill_diff;
++ static time_t start_micro, micro_diff;
+ /*int rc;*/
+ double dt,cpu_t;
+ static double last_cpu_t;
+
+- (void) ftime( &T );
++ (void) gettimeofday( &T,NULL );
+
+ if (first_time) {
+ first_time = 0;
+- start_time = T.time;
+- start_mill = T.millitm;
++ start_time = T.tv_sec;
++ start_micro = T.tv_usec;
+ getrusage(RUSAGE_SELF,&a);
+
+ last_cpu_t = (a.ru_utime).tv_sec+(a.ru_stime).tv_sec+
+@@ -337,13 +337,13 @@
+ }
+ else
+ {
+- time_diff = T.time - start_time;
+- mill_diff = T.millitm - start_mill;
++ time_diff = T.tv_sec - start_time;
++ micro_diff = T.tv_usec - start_micro;
+
+- dt = ((double) time_diff) + ((double) mill_diff)/1000.;
++ dt = ((double) time_diff) + ((double) micro_diff)/1000000.;
+
+- start_time = T.time;
+- start_mill = T.millitm;
++ start_time = T.tv_sec;
++ start_micro = T.tv_usec;
+
+ getrusage(RUSAGE_SELF,&a);
+
+@@ -363,17 +363,17 @@
+ struct timeb T;
+ static int first_time = 1;
+ static time_t start_time, time_diff;
+- static time_t start_mill, mill_diff;
++ static time_t start_micro, micro_diff;
+ /*int rc;*/
+ double dt,cpu_t;
+ static double start_cpu_t;
+
+- (void) ftime( &T );
++ (void) gettimeofday( &T,NULL );
+
+ if (first_time) {
+ first_time = 0;
+- start_time = T.time;
+- start_mill = T.millitm;
++ start_time = T.tv_sec;
++ start_micro = T.tv_usec;
+ getrusage(RUSAGE_SELF,&a);
+
+ start_cpu_t = (a.ru_utime).tv_sec+(a.ru_stime).tv_sec+
+@@ -385,9 +385,9 @@
+ else
+ {
+ time_diff = T.time - start_time;
+- mill_diff = T.millitm - start_mill;
++ micro_diff = T.tv_usec - start_micro;
+
+- dt = ((double) time_diff) + ((double) mill_diff)/1000.;
++ dt = ((double) time_diff) + ((double) micro_diff)/1000000.;
+
+ getrusage(RUSAGE_SELF,&a);
+
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list