1PORTNAME?= lapack 2PORTVERSION= 3.12.0 3.if !(defined(BLAS_SLAVEPORT) || defined(CBLAS_SLAVEPORT) || defined(XLAPACK_SLAVEPORT) || defined(LAPACKE_SLAVEPORT)) 4PORTREVISION= 2 5.else 6PORTREVISION?= 0 # Never remove this line, keep PORTREVISION?=0 in case. 7.endif 8CATEGORIES= math 9MASTER_SITES= https://github.com/Reference-LAPACK/lapack/archive/refs/tags/:src \ 10 http://www.netlib.org/lapack/:man \ 11 FREEBSD_LOCAL/thierry/lapack-${PORTVERSION}/:man 12DISTFILES= v${PORTVERSION}${EXTRACT_SUFX}:src 13.if make(makesum) || !(defined(BLAS_SLAVEPORT) || defined(XLAPACK_SLAVEPORT)) 14DISTFILES+= manpages.tgz:man 15.endif 16DIST_SUBDIR= lapack-${PORTVERSION} 17 18MAINTAINER?= ports@MidnightBSD.org 19COMMENT?= Linear Algebra PACKage 20WWW?= https://www.netlib.org/lapack/ 21 22LICENSE?= bsd3 23 24USES= cmake:testing cpe fortran 25WRKSRC= ${WRKDIR}/lapack-${PORTVERSION} 26# The actual math/scilab needs deprecated functions - to be removed later 27CMAKE_ON= BUILD_SHARED_LIBS BUILD_DEPRECATED 28USE_LDCONFIG= yes 29CPE_VENDOR= lapack_project 30CPE_PRODUCT= lapack 31 32SVERSION= ${PORTVERSION:R:R} 33PLIST_SUB= SVERSION="${SVERSION}" VER=${PORTVERSION} 34 35.include <bsd.mport.options.mk> 36 37.if defined(BLAS_SLAVEPORT) 38BUILD_WRKSRC= ${CONFIGURE_WRKSRC}/BLAS/SRC 39INSTALL_WRKSRC= ${BUILD_WRKSRC} 40BLASLIB= libblas.a 41LIBS= blas 42PLIST_SUB+= BLAS="" CBLAS="@comment " LAPACK="@comment " XLAPACK="@comment " LAPACKE="@comment " 43.elif defined(CBLAS_SLAVEPORT) 44BUILD_DEPENDS+= lapack>0:math/lapack 45LIB_DEPENDS+= libblas.so:math/blas 46CMAKE_ON+= CBLAS 47BUILD_WRKSRC= ${CONFIGURE_WRKSRC}/CBLAS 48INSTALL_WRKSRC= ${BUILD_WRKSRC} 49CBLASLIB= libcblas.a 50LIBS= cblas 51PLIST_SUB+= BLAS="@comment " CBLAS="" LAPACK="@comment " XLAPACK="@comment " LAPACKE="@comment " 52.elif defined(LAPACKE_SLAVEPORT) 53USES+= blaslapack 54CMAKE_ON+= USE_OPTIMIZED_LAPACK LAPACKE 55CMAKE_ARGS+= -DBLAS_LIBRARIES="${LOCALBASE}/lib/libblas.so" \ 56 -DLAPACK_LIBRARIES="${LOCALBASE}/lib/liblapack.so" 57BUILD_WRKSRC= ${CONFIGURE_WRKSRC}/LAPACKE 58INSTALL_WRKSRC= ${BUILD_WRKSRC} 59LAPACKELIB= liblapacke.a 60PLIST_SUB+= BLAS="@comment " CBLAS="@comment " LAPACK="@comment " XLAPACK="@comment " LAPACKE="" 61.elif defined(XLAPACK_SLAVEPORT) 62LIB_DEPENDS+= libblas.so:math/blas \ 63 liblapack.so:math/lapack \ 64 libxblas.so:math/xblas 65FFLAGS+= -fallow-argument-mismatch 66CMAKE_ON+= USE_XBLAS BUILD_TESTING 67CMAKE_ARGS+= -DBLAS_LIBRARIES="${LOCALBASE}/lib/libblas.so" 68PLIST_SUB+= BLAS="@comment " CBLAS="@comment " LAPACK="@comment " XLAPACK="" LAPACKE="@comment " 69.else 70# Upstream recommand to use an optimized BLAS, but it would cause conflicts 71# among the dependencies: for an optimized lapack switch to OpenBLAS. 72# BUILD_TESTING to get tmglib. 73LIB_DEPENDS+= libblas.so:math/blas 74. if defined(MAINTAINER_MODE) 75USES+= python:build,test 76BINARY_ALIAS+= python3=${PYTHON_CMD} 77. endif 78CMAKE_ON+= USE_OPTIMIZED_BLAS BUILD_TESTING 79CMAKE_ARGS+= -DBLAS_LIBRARIES="${LOCALBASE}/lib/libblas.so" 80LIBS= lapack 81PLIST_SUB+= BLAS="@comment " CBLAS="@comment " LAPACK="" XLAPACK="@comment " LAPACKE="@comment " 82.endif 83 84.include <bsd.port.pre.mk> 85 86post-patch: 87 ${SED} -Ee '\ 88 s@^(FORTRAN|LOADER)([[:blank:]]*=)(.*)@\1\2 $${FC}@; \ 89 s@^(OPTS[[:blank:]]*=)(.*)@\1 $${FFLAGS} $${EXTRAFLAGS}@; \ 90 s@^NOOPT[[:blank:]]*=.*@& $${EXTRAFLAGS}@; \ 91 s@^(LOADOPTS[[:blank:]]*=)(.*)@\1 $${LDFLAGS} $${EXTRAFLAGS}@; \ 92 s@^(CC[[:blank:]]*=)(.*)@@; \ 93 s@^(FC[[:blank:]]*=)(.*)@@; \ 94 s@^(CFLAGS[[:blank:]]*)(=)(.*)@\1 += $${EXTRAFLAGS}@; \ 95 s@^(FFLAGS[[:blank:]]*=)(.*)@@; \ 96 s@^(LDFLAGS[[:blank:]]*=)(.*)@@; \ 97 \@(BLAS|LAPACKE|RAN)LIB[[:blank:]]*=@d;' \ 98 ${WRKSRC}/make.inc.example > ${WRKSRC}/make.inc 99 100pre-configure: 101 ${REINPLACE_CMD} -e 's@\./lapack_testing\.py@${S} &@' \ 102 ${WRKSRC}/Makefile 103 ${FIND} ${WRKSRC} -name Makefile | ${XARGS} \ 104 ${SED} -i ".bak" -e 's|^ifdef|.ifdef|;s|^endif|.endif|' 105 106post-build: 107.if defined(BLAS_SLAVEPORT) 108 ${SED} -e 's|%%LIB%%|blas|g;s|cd SRC|cd BLAS/SRC|;s|SRC/lib|BLAS/SRC/lib|' \ 109 ${FILESDIR}/static.mk >> ${BUILD_WRKSRC}/CMakeFiles/blas.dir/build.make 110 (cd ${CONFIGURE_WRKSRC} && ${MAKE} -f BLAS/SRC/CMakeFiles/blas.dir/build.make build-static) 111.elif defined(CBLAS_SLAVEPORT) 112 ${SED} -e 's|%%LIB%%|cblas|g;s|cd SRC|cd CBLAS/src|;s|SRC/lib|CBLAS/src/lib|' \ 113 ${FILESDIR}/static.mk >> ${BUILD_WRKSRC}/src/CMakeFiles/cblas.dir/build.make 114 (cd ${CONFIGURE_WRKSRC} && ${MAKE} -f CBLAS/src/CMakeFiles/cblas.dir/build.make build-static) 115.elif defined(LAPACKE_SLAVEPORT) 116 ${SED} -e 's|%%LIB%%|lapacke|g;s|cd SRC|cd LAPACKE|' ${FILESDIR}/static.mk \ 117 >> ${BUILD_WRKSRC}/CMakeFiles/lapacke.dir/build.make 118 (cd ${CONFIGURE_WRKSRC} && ${MAKE} -f LAPACKE/CMakeFiles/lapacke.dir/build.make build-static) 119.else # xlapack + Lapack + tmglib 120 ${SED} -e 's|%%LIB%%|lapack|g' ${FILESDIR}/static.mk \ 121 >> ${BUILD_WRKSRC}/SRC/CMakeFiles/lapack.dir/build.make 122 (cd ${CONFIGURE_WRKSRC} && ${MAKE} -f SRC/CMakeFiles/lapack.dir/build.make build-static) 123 ${SED} -e 's|%%LIB%%|tmglib|g;s|cd SRC|cd TESTING/MATGEN|;s|SRC/lib|TESTING/MATGEN/lib|' \ 124 ${FILESDIR}/static.mk >> ${BUILD_WRKSRC}/TESTING/MATGEN/CMakeFiles/tmglib.dir/build.make 125 (cd ${BUILD_WRKSRC} && ${MAKE} -f TESTING/MATGEN/CMakeFiles/tmglib.dir/build.make build-static) 126.endif 127 128pre-install: 129.if !(defined(BLAS_SLAVEPORT) || defined(CBLAS_SLAVEPORT) || defined(XLAPACK_SLAVEPORT) || defined(LAPACKE_SLAVEPORT)) 130 cd ${WRKDIR} && ${FIND} man/man3 -type f | ${GREP} -v '/\._' | \ 131 tee ${WRKDIR}/manpages | ${SED} 's|^|share/|; s|$$|.gz|' >> ${TMPPLIST} 132 cd ${WRKDIR} && \ 133 ${XARGS} -J @ ${INSTALL_MAN} @ ${PREFIX}/share/man/man3 < ${WRKDIR}/manpages 134.endif 135 136post-install: 137.if defined(BLAS_SLAVEPORT) 138 ${INSTALL_DATA} ${CONFIGURE_WRKSRC}/BLAS/SRC/${BLASLIB} ${PREFIX}/lib 139 ${INSTALL_DATA} ${CONFIGURE_WRKSRC}/BLAS/blas.pc ${PREFIX}/libdata/pkgconfig 140.elif defined(CBLAS_SLAVEPORT) 141 # Avoid conflict with OpenBLAS 142 ${MKDIR} ${PREFIX}/include/cblas 143 ${MV} ${PREFIX}/include/*.h ${PREFIX}/include/cblas/ 144 ${INSTALL_DATA} ${BUILD_WRKSRC}/src/${CBLASLIB} ${PREFIX}/lib 145.elif defined(LAPACKE_SLAVEPORT) 146 # Avoid conflict with OpenBLAS 147 ${MKDIR} ${PREFIX}/include/lapacke 148 ${MV} ${PREFIX}/include/*.h ${PREFIX}/include/lapacke/ 149 ${INSTALL_DATA} ${CONFIGURE_WRKSRC}/LAPACKE/${LAPACKELIB} ${PREFIX}/lib 150.elif defined(XLAPACK_SLAVEPORT) 151 ${INSTALL_DATA} ${BUILD_WRKSRC}/SRC/liblapack.a ${PREFIX}/lib/libxlapack.a 152 ${INSTALL_DATA} ${BUILD_WRKSRC}/TESTING/MATGEN/libtmglib.a \ 153 ${PREFIX}/lib/libxtmglib.a 154 ${MV} ${PREFIX}/lib/liblapack.so \ 155 ${PREFIX}/lib/libxlapack.so.${PORTVERSION} 156 ${LN} -sf libxlapack.so.${PORTVERSION} ${PREFIX}/lib/libxlapack.so 157 ${LN} -sf libxlapack.so.${PORTVERSION} \ 158 ${PREFIX}/lib/libxlapack.so.${SVERSION} 159 ${MV} ${PREFIX}/lib/libtmglib.so \ 160 ${PREFIX}/lib/libxtmglib.so.${PORTVERSION} 161 ${LN} -sf libxtmglib.so.${PORTVERSION} ${PREFIX}/lib/libxtmglib.so 162 ${LN} -sf libxtmglib.so.${PORTVERSION} \ 163 ${PREFIX}/lib/libxtmglib.so.${SVERSION} 164 ${SED} -e 's|lapack|xlapack|g;s|LAPACK|XLAPACK|' \ 165 ${PREFIX}/libdata/pkgconfig/lapack.pc \ 166 > ${PREFIX}/libdata/pkgconfig/xlapack.pc 167 ${RM} ${PREFIX}/libdata/pkgconfig/lapack.pc 168.else # Lapack 169 ${INSTALL_DATA} ${BUILD_WRKSRC}/SRC/liblapack.a ${PREFIX}/lib 170 ${INSTALL_DATA} ${BUILD_WRKSRC}/TESTING/MATGEN/libtmglib.a ${PREFIX}/lib 171.endif 172 173.include <bsd.port.post.mk> 174