fix library search paths and switch from the legacy ftime() to

gettimeofday() in order to solve problems with the construction of
shared libraries [1] ; configure only once; build only those
(dynamically-linked) executables that will be installed; set
USE_LDCONFIG; remove an unnecessary patch; don't mix toolchains; make
flags more uniform and remove obsolete flags; add test targets

PR:		159189 [1]
Submitted by:	stephen (different version) [1]
This commit is contained in:
Brendan Fabeny 2012-07-10 21:28:22 +00:00
parent 2a5dee6af8
commit 36b5a2c50e
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=300738
5 changed files with 131 additions and 60 deletions

View file

@ -7,9 +7,10 @@
PORTNAME= taucs PORTNAME= taucs
PORTVERSION= 2.2 PORTVERSION= 2.2
PORTREVISION= 8 PORTREVISION= 9
CATEGORIES= math CATEGORIES= math
MASTER_SITES= http://www.tau.ac.il/~stoledo/taucs/${PORTVERSION}/ MASTER_SITES= http://www.tau.ac.il/~stoledo/taucs/${PORTVERSION}/ \
LOCAL/bf
DISTNAME= ${PORTNAME} DISTNAME= ${PORTNAME}
EXTRACT_SUFX= .tgz EXTRACT_SUFX= .tgz
@ -20,11 +21,19 @@ LIB_DEPENDS= metis.1:${PORTSDIR}/math/metis4
HAS_CONFIGURE= yes HAS_CONFIGURE= yes
USE_FORTRAN= yes USE_FORTRAN= yes
USE_LDCONFIG= yes
WRKSRC= ${WRKDIR}/${PORTNAME} WRKSRC= ${WRKDIR}/${PORTNAME}
.include <bsd.port.pre.mk> .include <bsd.port.pre.mk>
LDFLAGS+= -L${LOCALBASE}/lib
LIBMETIS?= -lmetis
MAKE_ENV+= LIBBLAS="${BLAS}" LIBLAPACK="${LAPACK}" LIBMETIS="${LIBMETIS}"
BINS?= direct iter taucs_run
TESTS ?= complex stack timer linsolve memory
.if exists(${LOCALBASE}/lib/libatlas.so) .if exists(${LOCALBASE}/lib/libatlas.so)
WITH_BLAS?= atlas WITH_BLAS?= atlas
.else .else
@ -32,12 +41,12 @@ WITH_BLAS?= reference
.endif .endif
.if ${WITH_BLAS} == atlas .if ${WITH_BLAS} == atlas
LIB_DEPENDS+= atlas.2:${PORTSDIR}/math/atlas LIB_DEPENDS+= atlas:${PORTSDIR}/math/atlas
BLAS= -lf77blas BLAS= -lf77blas
LAPACK= -lalapack -lcblas LAPACK= -lalapack -lcblas
.elif ${WITH_BLAS} == reference .elif ${WITH_BLAS} == reference
LIB_DEPENDS+= lapack.4:${PORTSDIR}/math/lapack LIB_DEPENDS+= lapack:${PORTSDIR}/math/lapack
LIB_DEPENDS+= blas.2:${PORTSDIR}/math/blas LIB_DEPENDS+= blas:${PORTSDIR}/math/blas
BLAS= -lblas BLAS= -lblas
LAPACK= -llapack LAPACK= -llapack
.endif .endif
@ -54,35 +63,42 @@ do-extract:
${EXTRACT_AFTER_ARGS} ${EXTRACT_AFTER_ARGS}
post-patch: post-patch:
@${CP} -r ${WRKSRC} ${WRKSRC}_SHARED @${REINPLACE_CMD} -e 's/succedd/succeed/' \
${WRKSRC}/progs/taucs_blas_underscore_test.c
@${REINPLACE_CMD} -e 's/SUCCEDD/SUCCEED/' \
${WRKSRC}/progs/test_linsolve.c
do-configure: do-configure:
@cd ${WRKSRC}; ./configure @cd ${WRKSRC}; ${SETENV} ${MAKE_ENV} ${SH} ./configure
@cd ${WRKSRC}_SHARED; ./configure
post-configure: post-configure:
@cd ${WRKSRC}; ${PATCH} <${FILESDIR}/extra-patch-build-FreeBSD-makefile @${CP} -r ${WRKSRC} ${WRKSRC}_SHARED
@cd ${WRKSRC}_SHARED; ${PATCH} <${FILESDIR}/extra-patch-build-FreeBSD-makefile
@${REINPLACE_CMD} \
-e 's+%%LOCALBASE%%+${LOCALBASE}+g;' -e 's+%%FC%%+${FC}+g;' \
-e 's+%%BLAS%%+${BLAS}+g;' -e 's+%%LAPACK%%+${LAPACK}+g;' \
-e 's+%%CC%%+${CC}+g;' -e 's+%%CFLAGS%%+${CFLAGS}+g;' \
-e 's+%%FFLAGS%%+${FFLAGS}+g;' \
${WRKSRC}/config/FreeBSD.mk
@${REINPLACE_CMD} \
-e 's+%%LOCALBASE%%+${LOCALBASE}+g;' -e 's+%%FC%%+${FC}+g;' \
-e 's+%%BLAS%%+${BLAS}+g;' -e 's+%%LAPACK%%+${LAPACK}+g;' \
-e 's+%%CC%%+${CC}+g;' -e 's+%%CFLAGS%%+${CFLAGS} ${PICFLAG}+g;' \
-e 's+%%FFLAGS%%+${FFLAGS} ${PICFLAG}+g;' \
${WRKSRC}_SHARED/config/FreeBSD.mk
do-build: archives: configure
@cd ${WRKSRC}; ${SETENV} ${MAKE_ENV} ${MAKE} ${_MAKE_JOBS} ${MAKE_ARGS} @${PRINTF} "\n\n%s\n\n\n" "Building libtaucs archives:"
@cd ${WRKSRC}_SHARED; ${SETENV} ${MAKE_ENV} ${MAKE} ${_MAKE_JOBS} \ @cd ${WRKSRC} ; ${SETENV} ${MAKE_ENV} \
${MAKE_ARGS} ${MAKE} ${_MAKE_JOBS} ${MAKE_ARGS} lib/FreeBSD/libtaucs.a
@cd ${WRKSRC}_SHARED ; ${SETENV} ${MAKE_ENV} \
PICFLAG="${PICFLAG}" \
${MAKE} ${_MAKE_JOBS} ${MAKE_ARGS} lib/FreeBSD/libtaucs.a
lib: archives
@${PRINTF} "\n\n%s\n\n\n" "Building shared library:"
cd ${WRKSRC}_SHARED/lib/FreeBSD ; ${FC} ${FFLAGS} ${PICFLAG} ${LDFLAGS} \ cd ${WRKSRC}_SHARED/lib/FreeBSD ; ${FC} ${FFLAGS} ${PICFLAG} ${LDFLAGS} \
-shared -o libtaucs.so.1 -Wl,-x -Wl,-soname,libtaucs.so.1 -Wl,--whole-archive \ -shared -o libtaucs.so.1 -Wl,-x -Wl,-soname,libtaucs.so.1 -Wl,--whole-archive \
libtaucs.a -Wl,--no-whole-archive libtaucs.a -Wl,--no-whole-archive
@${LN} -sf libtaucs.so.1 ${WRKSRC}_SHARED/lib/FreeBSD/libtaucs.so
bins: lib
@${PRINTF} "\n\n%s\n\n\n" "Building (dynamically-linked) executables:"
#for the second pass through WRKSRC_SHARED, use a nonexistent MAKEOBJDIR to
#prevent make from entering the obj subdirectories and breaking the build (see,
#for example, the description of .OBJDIR in make(1)):
@cd ${WRKSRC}_SHARED ; ${SETENV} ${MAKE_ENV} \
MAKEOBJDIR="${NONEXISTENT}" \
${MAKE} ${_MAKE_JOBS} ${MAKE_ARGS} ${BINS:S|^|bin/FreeBSD/|}
do-build: bins
do-install: do-install:
@${INSTALL_DATA} ${WRKSRC}/lib/FreeBSD/libtaucs.a ${PREFIX}/lib @${INSTALL_DATA} ${WRKSRC}/lib/FreeBSD/libtaucs.a ${PREFIX}/lib
@ -90,11 +106,30 @@ do-install:
@${LN} -sf libtaucs.so.1 ${PREFIX}/lib/libtaucs.so @${LN} -sf libtaucs.so.1 ${PREFIX}/lib/libtaucs.so
@${INSTALL_DATA} ${WRKSRC}/build/FreeBSD/*.h ${PREFIX}/include @${INSTALL_DATA} ${WRKSRC}/build/FreeBSD/*.h ${PREFIX}/include
@${INSTALL_DATA} ${WRKSRC}/src/*.h ${PREFIX}/include @${INSTALL_DATA} ${WRKSRC}/src/*.h ${PREFIX}/include
@${INSTALL_PROGRAM} ${WRKSRC}/bin/FreeBSD/direct ${PREFIX}/bin @cd ${WRKSRC}_SHARED/bin/FreeBSD; ${INSTALL_PROGRAM} ${BINS} ${PREFIX}/bin
@${INSTALL_PROGRAM} ${WRKSRC}/bin/FreeBSD/iter ${PREFIX}/bin .if ${PORT_OPTIONS:MDOCS}
.if !defined(NOPORTDOCS)
@${MKDIR} ${DOCSDIR} @${MKDIR} ${DOCSDIR}
@${INSTALL_DATA} ${WRKSRC}/doc/*.pdf ${DOCSDIR} @${INSTALL_DATA} ${WRKSRC}/doc/*.pdf ${DOCSDIR}
.endif .endif
check test: build
.for t in ${TESTS}
@${PRINTF} "\n%s\n" "Building test_${t}"
@cd ${WRKSRC}_SHARED ; ${FC} ${FFLAGS} -Llib/FreeBSD -L./ \
${LDFLAGS} -o bin/FreeBSD/test_${t} \
`${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_ARGS} -V STDDEFS` \
`${SETENV} ${MAKE_ENV} ${MAKE} ${MAKE_ARGS} -V STDINCS` \
progs/test_${t}.c -ltaucs ${LAPACK} ${BLAS} ${LIBMETIS}
@${PRINTF} "\n%s\n\n\n" "Running test_${t}:"
-@cd ${WRKSRC}_SHARED ; \
${SETENV} LD_LIBRARY_PATH="lib/FreeBSD:/lib:/usr/lib:${LOCALBASE}/lib" \
bin/FreeBSD/test_${t}
.endfor
#be conservative, and expose a regression test target for amd64 builds only, because
#some of the tests run amok during i386 tinderbox builds on amd64 hosts
.if ${ARCH} == "amd64"
regression-test: check
.endif
.include <bsd.port.post.mk> .include <bsd.port.post.mk>

View file

@ -1,11 +0,0 @@
--- build/FreeBSD/makefile.orig Mon May 3 20:08:53 2004
+++ build/FreeBSD/makefile Mon May 3 20:09:20 2004
@@ -42,7 +42,7 @@
- $(DIROBJ)taucs_c99_complex_test$(EXEEXT) build/FreeBSD/taucs_config_tests.h
- $(CILKC) -c $(CILKFLAGS) $(STDDEFS) $(STDINCS) \
$(DIRPROGS)taucs_cilk_test.c \
- $(CILKOUTFLG)$(DIROBJ)taucs_cilk_test$(OBJEXT)
+ $(CILKOUTFLG)$(DIROBJ)taucs_cilk_test$(OBJEXT) || rm $(DIROBJ)taucs_cilk_test$(OBJEXT)
- $(LD) $(LDFLAGS) \
$(LOUTFLG)$(DIROBJ)taucs_cilk_test$(EXEEXT) \
$(DIROBJ)taucs_cilk_test$(OBJEXT) $(LIBS)

View file

@ -1,42 +1,38 @@
--- config/FreeBSD.mk.orig Fri Aug 29 00:13:38 2003 --- config/FreeBSD.mk.orig 2003-08-28 11:13:38.000000000 -0400
+++ config/FreeBSD.mk Tue Jan 9 14:18:49 2007 +++ config/FreeBSD.mk 2012-07-10 07:43:24.000000000 -0400
@@ -8,16 +8,16 @@ @@ -9,30 +9,24 @@
PATHSEP=/
DEFFLG=-D DEFFLG=-D
-FC ?= f77 FC ?= f77
-FFLAGS += -Os -fno-second-underscore -FFLAGS += -Os -fno-second-underscore
+FC = %%FC%% +FFLAGS += $(PICFLAG)
+FFLAGS += -fno-second-underscore %%FFLAGS%%
FOUTFLG =-o FOUTFLG =-o
-#CC = cc #CC = cc
-CFLAGS += -Os -D_POSIX_C_SOURCE=199506L -fPIC -CFLAGS += -Os -D_POSIX_C_SOURCE=199506L -fPIC
+CC = %%CC%% +CFLAGS += $(PICFLAG)
+CFLAGS += -D_POSIX_C_SOURCE=199506L %%CFLAGS%%
COUTFLG = -o COUTFLG = -o
-LD = $(CC) -LD = $(CC)
-LDFLAGS = $(CFLAGS) -static -LDFLAGS = $(CFLAGS) -static
+LD = %%FC%% +LD = $(FC)
+LDFLAGS = -L%%LOCALBASE%%/lib -L./ +LDFLAGS := -L$(DIRLIB) -L./ $(LDFLAGS)
LOUTFLG = $(COUTFLG) LOUTFLG = $(COUTFLG)
AR = ar cr -AR = ar cr
@@ -26,12 +26,12 @@ +AR += cr
RANLIB = ranlib #AOUTFLG =
-RANLIB = ranlib
RM = rm -rf RM = rm -rf
-LIBBLAS = -L/usr/local/lib -lf77blas -lcblas -latlas -lg2c -LIBBLAS = -L/usr/local/lib -lf77blas -lcblas -latlas -lg2c
-LIBLAPACK = -L/usr/local/lib -llapack -LIBLAPACK = -L/usr/local/lib -llapack
+LIBBLAS = %%BLAS%%
+LIBLAPACK = %%LAPACK%%
-LIBMETIS = -L/usr/local/lib -lmetis -LIBMETIS = -L/usr/local/lib -lmetis
+LIBMETIS = -lmetis
-LIBF77 = -lg2c -LIBF77 = -lg2c
+LIBF77 =
#compat is required for ftime() #compat is required for ftime()
LIBC = -lm -lcompat -LIBC = -lm -lcompat
#########################################################

View file

@ -0,0 +1,50 @@
--- src/taucs_timer.c.orig 2003-09-01 06:28:54.000000000 -0400
+++ src/taucs_timer.c 2012-07-10 07:24:08.000000000 -0400
@@ -245,36 +245,35 @@
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/types.h>
-#include <sys/timeb.h>
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;
}

View file

@ -1,5 +1,6 @@
bin/direct bin/direct
bin/iter bin/iter
bin/taucs_run
lib/libtaucs.a lib/libtaucs.a
lib/libtaucs.so lib/libtaucs.so
lib/libtaucs.so.1 lib/libtaucs.so.1