ports/159056: [PATCH]math/suitesparse: fix build on sparc64, miscellaneous clean-ups
bf
bf at FreeBSD.org
Wed Jul 20 07:00:22 UTC 2011
>Number: 159056
>Category: ports
>Synopsis: [PATCH]math/suitesparse: fix build on sparc64, miscellaneous clean-ups
>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: Wed Jul 20 07:00:22 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator: bf
>Release:
>Organization:
-
>Environment:
>Description:
- add LICENSE
- fix whitespace and reduce make verbosity, wrap some long lines
- switch from USE_BLAS to WITH_BLAS, and allow the user to set this, following the recent trend in other ports (we should consolidate the macros for
this in a central makefile at some point)
- remove BROKEN
- small grammar fix to RESTRICTED
- follow bsd.lib.mk in using -fPIC by default only on sparc64
- now that we have DT_NEEDED tags in our math/blas libraries, remove the unneeded FORTRANRUNTIME (I'll add tags to math/atlas soon)
- add PTHREAD_CFLAGS and PTHREAD_LIBS, in case these become non-trivial again on some ARCHs
- prefer the canonical PICFLAG to FPIC
- simplify the post-patch target by patching the static and shared sources identically (differentiate between the two by setting PICFLAG to the appropriate value in the MAKE_ENV); because AR and RANLIB additions were necessary, simply use sed(1) rather than re-rolling many of the patches, and fashioning new ones
- simplify the do-build and do-install targets by adding two loops, and removing the separate staging areas and unnecessary sed/ls calls
- canonicalize do-build target, to honor MAKE_ARGS and _MAKE_JOBS
- avoid the mixing of toolchains that broke the build on sparc64 by using ${LD} (set to ${LOCALBASE}/bin/ld by USE_FORTRAN, which implies USE_BINUTILS) instead of "ld", ${AR} instead of ar, and ${RANLIB} instead of ranlib, and respecting ${CC}
- prefer <string> to <string.h> for .cpp
>How-To-Repeat:
>Fix:
Patch attached with submission follows:
Index: Makefile
===================================================================
RCS file: /home/pcvs/ports/math/suitesparse/Makefile,v
retrieving revision 1.37
diff -u -r1.37 Makefile
--- Makefile 17 Jul 2011 05:50:13 -0000 1.37
+++ Makefile 20 Jul 2011 06:39:14 -0000
@@ -7,7 +7,7 @@
PORTNAME= suitesparse
PORTVERSION= 3.6.1
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= math
MASTER_SITES= http://www.cise.ufl.edu/research/sparse/SuiteSparse/
DISTNAME= SuiteSparse-${PORTVERSION}
@@ -15,50 +15,50 @@
MAINTAINER= maho at FreeBSD.org
COMMENT= SuiteSparse is a set of packages for sparse matrices calculation
+LICENSE= GPLv2 LGPL21
+LICENSE_COMB= multi
+
.if defined (WITH_METIS)
LIB_DEPENDS= metis:${PORTSDIR}/math/metis
-.endif
-.if defined (WITH_METIS)
-RESTRICTED= GPL and METIS license contradicts
+RESTRICTED= GPL and METIS licenses are contradictory
.endif
CONFLICTS= umfpack-*
.include <bsd.port.pre.mk>
-USE_BLAS?= reference
-
.if exists(${LOCALBASE}/lib/libgoto2.so)
-USE_BLAS= gotoblas
+WITH_BLAS?= gotoblas
.elif exists(${LOCALBASE}/lib/libatlas_r.so)
-USE_BLAS= atlas
+WITH_BLAS?= atlas
+.else
+WITH_BLAS?= reference
.endif
-.if ${USE_BLAS} == reference
+CFLAGS+= ${PTHREAD_CFLAGS}
+LDFLAGS+= -L${LOCALBASE}/lib
+
+.if ${WITH_BLAS} == reference
LIB_DEPENDS+= blas.2:${PORTSDIR}/math/blas
LIB_DEPENDS+= lapack.4:${PORTSDIR}/math/lapack
BLAS= -lblas
LAPACK= -llapack
-.elif ${USE_BLAS} == gotoblas
+.elif ${WITH_BLAS} == gotoblas
LIB_DEPENDS+= goto2:${PORTSDIR}/math/gotoblas
LIB_DEPENDS+= lapack.4:${PORTSDIR}/math/lapack
-BLAS= -pthread -lgoto2p
-LAPACK= -pthread -lgoto2p
-.elif ${USE_BLAS} == atlas
+BLAS = -lgoto2p ${PTHREAD_LIBS}
+LAPACK = -lgoto2p ${PTHREAD_LIBS}
+.elif ${WITH_BLAS} == atlas
LIB_DEPENDS+= atlas:${PORTSDIR}/math/atlas
-BLAS= -pthread -lptf77blas -lptcblas -latlas_r
-LAPACK= -pthread -lalapack_r
-.endif
-
-.if ${ARCH} == "sparc64" || ${ARCH} == "amd64"
-FPIC= -fPIC
-.else
-FPIC= -fpic
+BLAS= -lptf77blas -lptcblas -latlas_r ${PTHREAD_LIBS}
+LAPACK = -lalapack_r ${PTHREAD_LIBS}
.endif
.if ${ARCH} == "sparc64"
-BROKEN= Does not link on sparc64
+PICFLAG?= -fPIC
+.else
+PICFLAG?= -fpic
.endif
USE_LDCONFIG= yes
@@ -66,82 +66,59 @@
USE_FORTRAN= yes
WRKSRC=${WRKDIR}/SuiteSparse
WRKSRC_SHARED=${WRKSRC}_shared
-CFLAGS_SHARED=${CFLAGS} ${FPIC}
-FFLAGS_SHARED=${CFLAGS} ${FPIC}
SVERSION=1
-FORTRANRUNTIME=-lgfortran -lgfortranbegin
.if defined (WITH_METIS)
METIS=${LOCALBASE}/lib/libmetis.a
METIS_PATH=${LOCALBASE}/include/metis
CHOLMOD_CONFIG =
.else
-CHOLMOD_CONFIG = -DNPARTITION
+CHOLMOD_CONFIG = -DNPARTITION
.endif
post-patch:
- ${CP} -r ${WRKSRC} ${WRKSRC_SHARED}
- @${REINPLACE_CMD} -e 's|%%CC%%|${CC}|g' \
- -e 's|%%CXX%%|${CXX}|g' \
- -e 's|%%F77%%|${F77}|g' \
- -e 's|%%BLAS%%|-L${LOCALBASE}/lib ${BLAS}|g' \
- -e 's|%%FORTRANRUNTIME%%|${FORTRANRUNTIME}|g' \
- -e 's|%%LAPACK%%|-L${LOCALBASE}/lib ${LAPACK}|g' \
- -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \
- -e 's|%%METIS_PATH%%|${METIS_PATH}|g' \
- -e 's|%%METIS%%|${METIS}|g' \
- -e 's|%%CHOLMOD_CONFIG%%|${CHOLMOD_CONFIG}|g' \
- ${WRKSRC}/UFconfig/UFconfig.mk \
- ${WRKSRC_SHARED}/UFconfig/UFconfig.mk\
- ${WRKSRC}/CSparse/Lib/Makefile \
- ${WRKSRC_SHARED}/CSparse/Lib/Makefile \
- ${WRKSRC}/CSparse3/Lib/Makefile \
- ${WRKSRC_SHARED}/CSparse3/Lib/Makefile
-
- @${REINPLACE_CMD} -e 's|%%CFLAGS%%|${CFLAGS}|g' \
- -e 's|%%FFLAGS%%|${FFLAGS}|g' \
- ${WRKSRC}/UFconfig/UFconfig.mk \
- ${WRKSRC}/CSparse/Lib/Makefile \
- ${WRKSRC}/CSparse3/Lib/Makefile
-
- @${REINPLACE_CMD} -e 's|%%CFLAGS%%|${CFLAGS_SHARED}|g' \
- -e 's|%%FFLAGS%%|${FFLAGS_SHARED}|g' \
- ${WRKSRC_SHARED}/UFconfig/UFconfig.mk \
- ${WRKSRC_SHARED}/CSparse/Lib/Makefile \
- ${WRKSRC_SHARED}/CSparse3/Lib/Makefile
+ @${FIND} -X ${WRKSRC} -type f -name 'Makefile' -or -name '*.mk' | ${XARGS} \
+ ${REINPLACE_CMD} -e '\|^AR =|s|ar|${AR}|' \
+ -e '\|^BLAS =|s|=.*|= ${LDFLAGS} ${BLAS}|' \
+ -e '\|^CC =|d' \
+ -e '\|^CFLAGS =|{s|=|+= $${PICFLAG}|;s|-O[1-9]\{0,1\}||g;}' \
+ -e '\|^CHOLMOD_CONFIG =|s|=.*|= ${CHOLMOD_CONFIG}|' \
+ -e '\|^CPLUSPLUS =|s|=.*|= ${CXX}|' \
+ -e '\|^F77 =|d' \
+ -e '\|^F77FLAGS =|s|=.*|= ${FFLAGS} $${PICFLAG}|' \
+ -e '\|^LAPACK =|s|=.*|= ${LDFLAGS} ${LAPACK}|' \
+ -e '\|^METIS =|s|=.*|= ${METIS}|' \
+ -e '\|^METIS_PATH =|s|=.*|= ${METIS_PATH}|' \
+ -e 's|-I\$$(METIS_PATH)/Lib|-I${METIS_PATH}|' \
+ -e '\|^RANLIB =|s|ranlib|${RANLIB}|' \
+ -e '\|^SPQR_CONFIG =|s|=.*|= ${CHOLMOD_CONFIG}|' \
+ -e 's|/usr/local|${LOCALBASE}|g'
+ @${CP} -r ${WRKSRC} ${WRKSRC_SHARED}
+
do-build:
- cd ${WRKSRC} ; ${GMAKE}
- cd ${WRKSRC_SHARED} ; ${GMAKE}
- ${RM} -rf ${WRKDIR}/tmp_static
- ${MKDIR} ${WRKDIR}/tmp_static
- cd ${WRKDIR}/tmp_static
- ${FIND} ${WRKSRC} -name "*\.a" -exec ${MV} {} ${WRKDIR}/tmp_static \;
- ${RM} -rf ${WRKDIR}/tmp_shared
- ${MKDIR} ${WRKDIR}/tmp_shared
- ${FIND} ${WRKSRC_SHARED} -name "*\.a" -exec ${MV} {} ${WRKDIR}/tmp_shared \;
+ @cd ${WRKSRC} ; ${SETENV} ${MAKE_ENV} PICFLAG= \
+ ${GMAKE} ${_MAKE_JOBS} ${MAKE_ARGS}
+ @cd ${WRKSRC_SHARED} ; ${SETENV} ${MAKE_ENV} PICFLAG=${PICFLAG} \
+ ${GMAKE} ${_MAKE_JOBS} ${MAKE_ARGS}
+
post-build:
- cd ${WRKDIR}/tmp_shared ; for i in `ls *.a | ${SED} 's/\.a//' `; do \
- ld -Bshareable -o $${i}.so.${SVERSION} -x -soname $${i}.so.${SVERSION} --whole-archive $${i}.a ;\
- ${LN} -s $${i}.so.${SVERSION} $${i}.so ;\
+ @for i in `find ${WRKSRC_SHARED} -type f -name '*.a'` ; do \
+ j=$${i##*/} ; ${LD} -Bshareable -o $${i%.a}.so.${SVERSION} -x \
+ -soname $${j%.a}.so.${SVERSION} --whole-archive $${i} ; \
done
do-install:
- ${MKDIR} ${PREFIX}/include/suitesparse
- ${LN} -sf ${PREFIX}/include/suitesparse ${PREFIX}/include/ufsparse
- ${INSTALL_DATA} ${WRKSRC}/UFconfig/UFconfig.h ${PREFIX}/include/suitesparse
- ${INSTALL_DATA} ${WRKSRC}/UMFPACK/Include/*.h ${PREFIX}/include/suitesparse
- ${INSTALL_DATA} ${WRKSRC}/AMD/Include/*.h ${PREFIX}/include/suitesparse
- ${INSTALL_DATA} ${WRKSRC}/BTF/Include/*.h ${PREFIX}/include/suitesparse
- ${INSTALL_DATA} ${WRKSRC}/CCOLAMD/Include/*.h ${PREFIX}/include/suitesparse
- ${INSTALL_DATA} ${WRKSRC}/CHOLMOD/Include/*.h ${PREFIX}/include/suitesparse
- ${INSTALL_DATA} ${WRKSRC}/COLAMD/Include/*.h ${PREFIX}/include/suitesparse
- ${INSTALL_DATA} ${WRKSRC}/CXSparse/Include/*.h ${PREFIX}/include/suitesparse
- ${INSTALL_DATA} ${WRKSRC}/KLU/Include/*.h ${PREFIX}/include/suitesparse
- ${INSTALL_DATA} ${WRKSRC}/CAMD/Include/*.h ${PREFIX}/include/suitesparse
- ${INSTALL_DATA} ${WRKSRC}/SPQR/Include/*.h ${PREFIX}/include/suitesparse
- ${INSTALL_DATA} ${WRKSRC}/SPQR/Include/*.hpp ${PREFIX}/include/suitesparse
- ${INSTALL_DATA} ${WRKDIR}/tmp_static/*.a ${PREFIX}/lib
- ${INSTALL_DATA} ${WRKDIR}/tmp_shared/*.so.${SVERSION} ${PREFIX}/lib
- ${INSTALL_DATA} ${WRKDIR}/tmp_shared/*.so ${PREFIX}/lib
+ @${MKDIR} ${PREFIX}/include/suitesparse
+ @${LN} -sf ${PREFIX}/include/suitesparse ${PREFIX}/include/ufsparse
+.for d in AMD BTF CAMD CCOLAMD CHOLMOD COLAMD CXSparse KLU SPQR UMFPACK
+ @${INSTALL_DATA} ${WRKSRC}/${d}/Include/*.h ${PREFIX}/include/suitesparse
+.endfor
+ @${INSTALL_DATA} ${WRKSRC}/UFconfig/*.h ${PREFIX}/include/suitesparse
+ @${INSTALL_DATA} ${WRKSRC}/SPQR/Include/*.hpp ${PREFIX}/include/suitesparse
+ @for i in `find ${WRKSRC_SHARED} -type f -name '*.a'` ; do \
+ ${INSTALL_DATA} ${WRKSRC}/$${i##${WRKSRC_SHARED}/} \
+ $${i%.a}.so.${SVERSION} ${PREFIX}/lib ; \
+ j=$${i##*/} ; ${LN} -sf $${j%.a}.so.${SVERSION} ${PREFIX}/lib/$${j%.a}.so ; \
+ done
.include <bsd.port.post.mk>
Index: files/patch-CHOLMOD+Lib+Makefile
===================================================================
RCS file: files/patch-CHOLMOD+Lib+Makefile
diff -N files/patch-CHOLMOD+Lib+Makefile
--- files/patch-CHOLMOD+Lib+Makefile 5 Jun 2009 22:40:31 -0000 1.4
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,11 +0,0 @@
---- CHOLMOD/Lib/Makefile.dist 2009-05-26 08:53:07.000000000 +0200
-+++ CHOLMOD/Lib/Makefile 2009-05-26 08:53:22.000000000 +0200
-@@ -116,7 +116,7 @@
- $(OBJ): $(INC)
-
- I = -I../../AMD/Include -I../../AMD/Source -I../../COLAMD/Include \
-- -I$(METIS_PATH)/Lib -I../../CCOLAMD/Include -I../../CAMD/Include \
-+ -I$(METIS_PATH) -I../../CCOLAMD/Include -I../../CAMD/Include \
- -I../Include -I../../UFconfig
-
- #-------------------------------------------------------------------------------
Index: files/patch-CSparse+Lib+Makefile
===================================================================
RCS file: files/patch-CSparse+Lib+Makefile
diff -N files/patch-CSparse+Lib+Makefile
--- files/patch-CSparse+Lib+Makefile 27 Feb 2008 05:20:25 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,11 +0,0 @@
---- CSparse/Lib/Makefile~ Wed Feb 27 11:41:43 2008
-+++ CSparse/Lib/Makefile Wed Feb 27 11:50:50 2008
-@@ -1,6 +1,6 @@
- # Modify the "-O" optimization option for best performance (-O3 on Linux):
--CC = cc
--CFLAGS = -O -I../Include
-+CC = %%CC%%
-+CFLAGS = %%CFLAGS%% -I../Include
-
- AR = ar cr
- RANLIB = ranlib
Index: files/patch-CSparse3+Lib+Makefile
===================================================================
RCS file: files/patch-CSparse3+Lib+Makefile
diff -N files/patch-CSparse3+Lib+Makefile
--- files/patch-CSparse3+Lib+Makefile 22 Jun 2011 08:14:02 -0000 1.1
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,11 +0,0 @@
---- CSparse3/Lib/Makefile~ Wed Feb 27 11:41:43 2008
-+++ CSparse3/Lib/Makefile Wed Feb 27 11:50:50 2008
-@@ -1,6 +1,6 @@
- # Modify the "-O" optimization option for best performance (-O3 on Linux):
--CC = cc
--CFLAGS = -O -I../Include
-+CC = %%CC%%
-+CFLAGS = %%CFLAGS%% -I../Include
-
- AR = ar cr
- RANLIB = ranlib
Index: files/patch-SPQR+Source+spqr_factorize.cpp
===================================================================
RCS file: /home/pcvs/ports/math/suitesparse/files/patch-SPQR+Source+spqr_factorize.cpp,v
retrieving revision 1.1
diff -u -r1.1 patch-SPQR+Source+spqr_factorize.cpp
--- files/patch-SPQR+Source+spqr_factorize.cpp 17 Feb 2009 04:48:35 -0000 1.1
+++ files/patch-SPQR+Source+spqr_factorize.cpp 19 Jul 2011 23:41:37 -0000
@@ -4,7 +4,7 @@
// =============================================================================
#include "spqr.hpp"
-+#include <string.h>
++#include <string>
#define FCHUNK 32 // FUTURE: make a parameter; Householder block size
Index: files/patch-UFconfig+UFconfig.mk
===================================================================
RCS file: /home/pcvs/ports/math/suitesparse/files/patch-UFconfig+UFconfig.mk,v
retrieving revision 1.9
diff -u -r1.9 patch-UFconfig+UFconfig.mk
--- files/patch-UFconfig+UFconfig.mk 22 Jun 2011 08:14:02 -0000 1.9
+++ files/patch-UFconfig+UFconfig.mk 19 Jul 2011 23:48:07 -0000
@@ -1,71 +1,5 @@
---- UFconfig/UFconfig.mk.orig 2011-05-11 05:47:15.000000000 +0900
-+++ UFconfig/UFconfig.mk 2011-06-22 16:35:36.000000000 +0900
-@@ -33,11 +33,11 @@
- # C compiler and compiler flags: These will normally not give you optimal
- # performance. You should select the optimization parameters that are best
- # for your system. On Linux, use "CFLAGS = -O3 -fexceptions" for example.
--CC = cc
--CFLAGS = -O3 -fexceptions
-+CC = %%CC%%
-+CFLAGS = %%CFLAGS%%
-
- # C++ compiler (also uses CFLAGS)
--CPLUSPLUS = g++
-+CPLUSPLUS = %%CXX%%
-
- # ranlib, and ar, for generating libraries
- RANLIB = ranlib
-@@ -49,8 +49,8 @@
- MV = mv -f
-
- # Fortran compiler (not normally required)
--F77 = f77
--F77FLAGS = -O
-+F77 = %%F77%%
-+F77FLAGS = %%FFLAGS%%
- F77LIB =
-
- # C and Fortran libraries
-@@ -91,8 +91,8 @@
- # naming the BLAS and LAPACK library (*.a or *.so) files.
-
- # This is probably slow ... it might connect to the Standard Reference BLAS:
--BLAS = -lblas -lgfortran
--LAPACK = -llapack
-+BLAS = %%BLAS%% %%FORTRANRUNTIME%%
-+LAPACK = %%LAPACK%%
-
- # NOTE: this next option for the "Goto BLAS" has nothing to do with a "goto"
- # statement. Rather, the Goto BLAS is written by Dr. Kazushige Goto.
-@@ -132,8 +132,8 @@
- # The path is relative to where it is used, in CHOLMOD/Lib, CHOLMOD/MATLAB, etc.
- # You may wish to use an absolute path. METIS is optional. Compile
- # CHOLMOD with -DNPARTITION if you do not wish to use METIS.
--METIS_PATH = ../../metis-4.0
--METIS = ../../metis-4.0/libmetis.a
-+METIS_PATH = %%METIS_PATH%%
-+METIS = %%METIS%%
-
- # If you use CHOLMOD_CONFIG = -DNPARTITION then you must use the following
- # options:
-@@ -194,7 +194,7 @@
- # -DNSUNPERF for Solaris only. If defined, do not use the Sun
- # Performance Library
-
--CHOLMOD_CONFIG =
-+CHOLMOD_CONFIG = %%CHOLMOD_CONFIG%%
-
- #------------------------------------------------------------------------------
- # SuiteSparseQR configuration:
-@@ -208,7 +208,7 @@
- # -DHAVE_TBB enable the use of Intel's Threading Building Blocks (TBB)
-
- # default, without timing, without TBB:
--SPQR_CONFIG =
-+SPQR_CONFIG = %%CHOLMOD_CONFIG%%
- # with timing and TBB:
- # SPQR_CONFIG = -DTIMING -DHAVE_TBB
- # with timing
+--- UFconfig/UFconfig.mk.orig 2011-07-19 19:43:11.000000000 -0400
++++ UFconfig/UFconfig.mk 2011-07-19 19:44:13.000000000 -0400
@@ -237,18 +237,18 @@
# alternatives:
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list