Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Jul 2011 06:52:16 GMT
From:      bf <bf@FreeBSD.org>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   ports/159056: [PATCH]math/suitesparse: fix build on sparc64, miscellaneous clean-ups
Message-ID:  <201107200652.p6K6qG3A016969@red.freebsd.org>
Resent-Message-ID: <201107200700.p6K70Mi7017967@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>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@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:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201107200652.p6K6qG3A016969>