# New ports collection makefile for: sage # Date created: 24 January 2012 # Whom: Stephen Montgomery-Smith <stephen@FreeBSD.org> # # $FreeBSD$ # PORTNAME= sage PORTVERSION= 5.0 CATEGORIES= math MASTER_SITES= http://boxen.math.washington.edu/home/sagemath/sage-mirror/src/ \ http://mirrors.xmission.com/sage/src/ \ http://www-ftp.lip6.fr/pub/math/sagemath/src/ \ http://www.sagemath.org/src-old/ EXTRACT_SUFX= .tar MAINTAINER= stephen@FreeBSD.org COMMENT= Open source Mathematics software BUILD_DEPENDS= bash:${PORTSDIR}/shells/bash \ latex:${PORTSDIR}/print/teTeX-base LIB_DEPENDS= atlas:${PORTSDIR}/math/atlas \ lapack:${PORTSDIR}/math/lapack \ jpeg:${PORTSDIR}/graphics/jpeg RUN_DEPENDS= bash:${PORTSDIR}/shells/bash # 387 option: this only makes a difference for the amd64 architecture. Causes # the internal floating point calculations to be performed with extended # precision. # Optional packages: see http://www.sagemath.org/packages/optional/ OPTIONS= \ 387 "Use 387 instead of SSE FPU" Off \ 4TI2 4ti2 Off \ TOPCOM TOPCOM Off \ BIOPYTHON biopython Off \ CBC cbc Off \ CUNNINGHAM_TABLES cunningham_tables Off \ DB_CREMONA_ELLCURVE db_cremona_ellcurve Off \ DB_GAP db_gap Off \ DB_JONES_NUMFIELD db_jones_numfield Off \ DB_KOHEL db_kohel Off \ DB_ODLYZKO_ZETA db_odlyzko_zeta Off \ DB_SLOANE_OEIS db_sloane_oeis Off \ DB_STEIN_WATKINS_MINI db_stein_watkins_mini Off \ DB_SYMBOLIC_DATA db_symbolic_data Off \ DOT2TEX dot2tex Off \ EXTRA_DOCS extra_docs Off \ GAP_PACKAGES gap_packages Off \ GDBM gdbm Off \ GINV ginv Off \ GIT git Off \ GMPY gmpy Off \ GNUPLOTPY gnuplotpy Off \ GUPPY guppy Off \ JAVA3D java3d Off \ JSMATH_IMAGE_FONTS jsmath_image_fonts Off \ KASH3 kash3 Off \ KNOBOO knoboo Off \ LIE lie Off \ LRCALC lrcalc Off \ LRS lrs Off \ MPC mpc Off \ MPI4PY mpi4py Off \ NAUTY nauty Off \ NZMATH nzmath Off \ P_GROUP_COHOMOLOGY p_group_cohomology Off \ PYCRYPTOPLUS pycryptoplus Off \ PYOPENSSL pyopenssl Off \ PYX pyx Off \ QHULL qhull Off \ SAGE_MODE sage-mode Off \ TRAC trac Off PLIST_FILES= bin/sage USE_FORTRAN= yes USE_TK= yes USE_GMAKE= yes USE_ICONV= yes MAKE_JOBS_SAFE= yes LDFLAGS:= -Wl,-rpath=${WRKSRC}/local/lib ${LDFLAGS} FFLAGS+= -Wl,-rpath=${WRKSRC}/local/lib ${FPM_FLAG} CFLAGS+= -Wl,-rpath=${WRKSRC}/local/lib ${FPM_FLAG} CXXFLAGS+= -Wl,-rpath=${WRKSRC}/local/lib ${FPM_FLAG} # Note that the above addition to LDFLAGS, as a side effect, provides a # work-around for the make(1) idiosyncracy mentioned in PR 164361 (which # otherwise breaks the build of the maxima sub-package). USE_AUTOTOOLS= autoconf run-autotools: @${DO_NADA} do-configure: @${DO_NADA} .include <bsd.port.pre.mk> .if defined(WITH_4TI2) || defined(WITH_TOPCOM) || defined(WITH_BIOPYTHON) || \ defined(WITH_CBC) || defined(WITH_CUNNINGHAM_TABLES) || \ defined(WITH_DB_CREMONA_ELLCURVE) || defined(WITH_DB_GAP) || \ defined(WITH_DB_JONES_NUMFIELD) || defined(WITH_DB_KOHEL) || \ defined(WITH_DB_ODLYZKO_ZETA) || defined(WITH_DB_SLOANE_OEIS) || \ defined(WITH_DB_STEIN_WATKINS_MINI) || defined(WITH_DB_SYMBOLIC_DATA) || \ defined(WITH_DOT2TEX) || defined(WITH_EXTRA_DOCS) || \ defined(WITH_GAP_PACKAGES) || defined(WITH_GDBM) || defined(WITH_GINV) || \ defined(WITH_GIT) || defined(WITH_GMPY) || defined(WITH_GNUPLOTPY) || \ defined(WITH_GUPPY) || defined(WITH_JAVA3D) || \ defined(WITH_JSMATH_IMAGE_FONTS) || defined(WITH_KASH3) || \ defined(WITH_KNOBOO) || defined(WITH_LIE) || defined(WITH_LRCALC) || \ defined(WITH_LRS) || defined(WITH_MPC) || defined(WITH_MPI4PY) || \ defined(WITH_NAUTY) || defined(WITH_NZMATH) || \ defined(WITH_P_GROUP_COHOMOLOGY) || defined(WITH_PYCRYPTOPLUS) || \ defined(WITH_PYOPENSSL) || defined(WITH_PYX) || defined(WITH_QHULL) || \ defined(WITH_SAGE_MODE) || defined(WITH_TRAC) WITH_OPTIONAL_PKGS= yes .endif .ifdef WITH_OPTIONAL_PKGS USE_PERL5_BUILD= yes .endif # Optimization flags will be defined by the source CFLAGS:= ${CFLAGS:C/^-O.*$//} FFLAGS:= ${CFLAGS:C/^-O.*$//} MAKE_ENV+= SAGE_PORT=yes \ SAGE_FORTRAN=${LOCALBASE}/bin/${FC} \ SAGE_FORTRAN_LIB=${LOCALBASE}/lib/gcc${GCC_DEFAULT_V}/libgfortran.so \ SAGE_ATLAS_LIB=${LOCALBASE}/lib \ DOT_SAGE=${WRKSRC}/tmp/.sage LATEST_LINK= sage-math # Conflicts with graphics/sage. # The following is needed for the lapack subpackage. MAKE_ARGS+= ARCH="${AR}" .if ${OSVERSION} < 701106 BROKEN= POSIX semaphores are required, and the support only works in FreeBSD 7-STABLE and later .endif .if defined(WITH_387) && ${ARCH} == amd64 FPM_FLAG= -mfpmath=387 .else FPM_FLAG= .endif .if !defined(DISABLE_MAKE_JOBS) MAKE_ENV+= MAKE="make -j${MAKE_JOBS_NUMBER}" .endif post-patch: # Create the wrappers for the compiler invokations. @${MKDIR} ${WRKSRC}/local/bin @${LN} -s -f ${LOCALBASE}/bin/gmake ${WRKSRC}/local/bin/make @${LN} -s -f ${LOCALBASE}/bin/bash ${WRKSRC}/local/bin/sh @${SED} -e 's#%%CC%%#${LOCALBASE}/bin/${CC}#' \ -e 's#%%LDFLAGS%%#${LDFLAGS} ${FPM_FLAG}#' \ ${FILESDIR}/gcc.in > ${WRKSRC}/local/bin/cc @${CHMOD} +x ${WRKSRC}/local/bin/cc @${LN} -s -f cc ${WRKSRC}/local/bin/gcc @${SED} -e 's#%%CC%%#${LOCALBASE}/bin/${CXX}#' \ -e 's#%%LDFLAGS%%#${LDFLAGS} ${FPM_FLAG}#' \ ${FILESDIR}/gcc.in > ${WRKSRC}/local/bin/c++ @${CHMOD} +x ${WRKSRC}/local/bin/c++ @${LN} -s -f c++ ${WRKSRC}/local/bin/g++ @${SED} -e 's#%%CC%%#${LOCALBASE}/bin/${FC}#' \ -e 's#%%LDFLAGS%%#${LDFLAGS} ${FPM_FLAG}#' \ ${FILESDIR}/gcc.in > ${WRKSRC}/local/bin/gfortran @${CHMOD} +x ${WRKSRC}/local/bin/gfortran # Apply the patches to the appropriate xz'ed tarballs contained in # ${WRKSRC}/spkg/standard. The names of the patches are # spkg-${NAME_OF_TARBALL}_-_${NAME_OF_PATCH}. @${MKDIR} ${WRKSRC}/tmp @${RM} -rf ${WRKSRC}/tmp/* @for p in ${FILESDIR}/spkg-patch-*; do \ q=$${p#*/spkg-patch-}; t=$${q%_-_*}; \ if ! [ -e ${WRKSRC}/spkg/standard/$$t.spkg ]; then \ ${ECHO_MSG} "$$t not found."; \ exit 1; \ fi; \ tarballs="$$tarballs $$t"; \ done ;\ tarballs=`${PRINTF} "%s\n" $$tarballs | ${SORT} -u`; \ \ cd ${WRKSRC}/tmp || exit 1; \ for t in $$tarballs; do \ f=${WRKSRC}/spkg/standard/$$t.spkg; \ if [ -e $$f-orig ]; then \ ${MV} $$f-orig $$f; \ fi; \ ${TAR} -xf $$f; \ ${ECHO_MSG} "Patching $$t:"; \ for p in ${FILESDIR}/spkg-patch-$${t}_-_*; do \ ${ECHO_MSG} " applying $${p#*_-_}" ; \ ${PATCH} < $$p 2>/dev/null || exit 1; \ done; \ ${MV} $$f $$f-orig; \ ${TAR} -cyf $$f $$t; \ ${RM} -rf $$t; \ done # Here we check dependencies of the optional packages on ports, and on other # optional packages. If you find any dependencies not listed here, please # contact the maintainer. .ifdef WITH_4TI2 OPT_PKG_LIST:= ${OPT_PKG_LIST}|4ti2- .endif .ifdef WITH_TOPCOM OPT_PKG_LIST:= ${OPT_PKG_LIST}|topcom- .endif .ifdef WITH_BIOPYTHON OPT_PKG_LIST:= ${OPT_PKG_LIST}|biopython- .endif .ifdef WITH_CBC OPT_PKG_LIST:= ${OPT_PKG_LIST}|cbc- .endif .ifdef WITH_CUNNINGHAM_TABLES OPT_PKG_LIST:= ${OPT_PKG_LIST}|cunningham_tables- .endif .ifdef WITH_DB_CREMONA_ELLCURVE OPT_PKG_LIST:= ${OPT_PKG_LIST}|database_cremona_ellcurve- .endif .ifdef WITH_DB_GAP OPT_PKG_LIST:= ${OPT_PKG_LIST}|database_gap- .endif .ifdef WITH_DB_JONES_NUMFIELD OPT_PKG_LIST:= ${OPT_PKG_LIST}|database_jones_numfield- .endif .ifdef WITH_DB_KOHEL OPT_PKG_LIST:= ${OPT_PKG_LIST}|database_kohel- .endif .ifdef WITH_DB_ODLYZKO_ZETA OPT_PKG_LIST:= ${OPT_PKG_LIST}|database_odlyzko_zeta- .endif .ifdef WITH_DB_SLOANE_OEIS OPT_PKG_LIST:= ${OPT_PKG_LIST}|database_sloane_oeis- .endif .ifdef WITH_DB_STEIN_WATKINS_MINI OPT_PKG_LIST:= ${OPT_PKG_LIST}|database_stein_watkins_mini .endif .ifdef WITH_DB_SYMBOLIC_DATA OPT_PKG_LIST:= ${OPT_PKG_LIST}|database_symbolic_data- .endif .ifdef WITH_DOT2TEX OPT_PKG_LIST:= ${OPT_PKG_LIST}|dot2tex- .endif .ifdef WITH_EXTRA_DOCS OPT_PKG_LIST:= ${OPT_PKG_LIST}|extra_docs- .endif .ifdef WITH_GAP_PACKAGES OPT_PKG_LIST:= ${OPT_PKG_LIST}|gap_packages- .endif .ifdef WITH_GDBM OPT_PKG_LIST:= ${OPT_PKG_LIST}|gdbm- .endif .ifdef WITH_GINV OPT_PKG_LIST:= ${OPT_PKG_LIST}|ginv- .endif .ifdef WITH_GIT OPT_PKG_LIST:= ${OPT_PKG_LIST}|git- .endif .ifdef WITH_GMPY OPT_PKG_LIST:= ${OPT_PKG_LIST}|gmpy- .endif .ifdef WITH_GNUPLOTPY OPT_PKG_LIST:= ${OPT_PKG_LIST}|gnuplotpy- RUN_DEPENDS+= gnuplot:${PORTSDIR}/math/gnuplot .endif .ifdef WITH_GUPPY OPT_PKG_LIST:= ${OPT_PKG_LIST}|guppy- .endif .ifdef WITH_JAVA3D OPT_PKG_LIST:= ${OPT_PKG_LIST}|java3d- USE_JAVA= yes .endif .ifdef WITH_JSMATH_IMAGE_FONTS OPT_PKG_LIST:= ${OPT_PKG_LIST}|jsmath_image_fonts- .endif .ifdef WITH_KASH3 OPT_PKG_LIST:= ${OPT_PKG_LIST}|kash3- .endif .ifdef WITH_KNOBOO OPT_PKG_LIST:= ${OPT_PKG_LIST}|knoboo- .endif .ifdef WITH_LIE OPT_PKG_LIST:= ${OPT_PKG_LIST}|lie- .endif .ifdef WITH_LRCALC OPT_PKG_LIST:= ${OPT_PKG_LIST}|lrcalc- .endif .ifdef WITH_LRS OPT_PKG_LIST:= ${OPT_PKG_LIST}|lrs- .endif .ifdef WITH_MPC OPT_PKG_LIST:= ${OPT_PKG_LIST}|mpc- .endif .ifdef WITH_MPI4PY OPT_PKG_LIST:= ${OPT_PKG_LIST}|mpi4py- LIB_DEPENDS+= mpi:${PORTSDIR}/net/openmpi MAKE_ENV+= PATH=$${PATH}:${LOCALBASE}/`${MAKE} -C ${PORTSDIR}/net/openmpi -V MPIDIR`/bin .endif .ifdef WITH_NAUTY OPT_PKG_LIST:= ${OPT_PKG_LIST}|nauty- .endif .ifdef WITH_NZMATH OPT_PKG_LIST:= ${OPT_PKG_LIST}|nzmath- .endif .ifdef WITH_P_GROUP_COHOMOLOGY .if !defined(WITH_DB_GAP) IGNORE= DB_GAP must be set if P_GROUP_COHOMOLOGY is set .endif OPT_PKG_LIST:= ${OPT_PKG_LIST}|p_group_cohomology- .endif .ifdef WITH_PYCRYPTOPLUS OPT_PKG_LIST:= ${OPT_PKG_LIST}|pycryptoplus- .endif .ifdef WITH_PYOPENSSL OPT_PKG_LIST:= ${OPT_PKG_LIST}|pyopenssl- .endif .ifdef WITH_PYX OPT_PKG_LIST:= ${OPT_PKG_LIST}|pyx- .endif .ifdef WITH_QHULL OPT_PKG_LIST:= ${OPT_PKG_LIST}|qhull- .endif .ifdef WITH_SAGE_MODE OPT_PKG_LIST:= ${OPT_PKG_LIST}|sage_mode- .endif .ifdef WITH_TRAC OPT_PKG_LIST:= ${OPT_PKG_LIST}|trac- .endif OPT_PKG_LIST:= ${OPT_PKG_LIST:C/\|//} # Remove the leading '|' post-build: .ifdef WITH_OPTIONAL_PKGS ${SETENV} ${MAKE_ENV} ${WRKSRC}/sage -optional | \ ${PERL} -lne 'print if $$p && /^\S+$$/; $$p=1 if /NOT INSTALLED:/' | \ ${GREP} -E '^(${OPT_PKG_LIST})' | \ ${XARGS} -n1 ${SETENV} ${MAKE_ENV} \ ${WRKSRC}/sage -i # ${MAKE} -C ${.CURDIR} do-build # Not sure if this is necessary. .endif ${RM} -rf ${WRKSRC}/tmp/.sage ${CHMOD} -R a+rX ${WRKSRC} check regression-test test: build @${ECHO_MSG} This test can also be performed after installation by typing \"sage -testall\". @${ECHO_MSG} cd ${WRKSRC} && ${SETENV} DOT_SAGE=${WRKSRC}/tmp/.sage ./sage -testall ${RM} -f ${WRKSRC}/python.core INSTALL_SAGE_DIR= ${PREFIX}/${PORTNAME}-${PORTVERSION} do-install: cd ${WRKDIR} && ${FIND} -s ${WRKSRC} | \ ${GREP} -v '^${WRKSRC}/spkg/standard/' | \ ${GREP} -v '^${WRKSRC}/spkg/optional/' | \ ${GREP} -v '^${WRKSRC}/spkg/logs/' | \ ${GREP} -v '^${WRKSRC}/spkg/build/' | \ ${GREP} -v '^${WRKSRC}/tmp' | \ ${GREP} -v -E '^${WRKSRC}/[^\/]+\.log$$' | \ ${GREP} -v '^${WRKSRC}/Makefile' | \ ${SED} -e 's#${WRKDIR}/##' | \ ${CPIO} -pmud -R ${BINOWN}:${BINGRP} ${PREFIX} ${ECHO_CMD} | ${SETENV} DOT_SAGE=${INSTALL_SAGE_DIR}/tmp/.sage ${INSTALL_SAGE_DIR}/sage ${RM} -rf ${INSTALL_SAGE_DIR}/tmp/.sage ${SED} -e "s+#SAGE_ROOT.*+SAGE_ROOT=${INSTALL_SAGE_DIR}+" ${WRKSRC}/sage > ${PREFIX}/bin/sage ${CHOWN} ${BINOWN}:${BINGRP} ${PREFIX}/bin/sage ${CHMOD} ${BINMODE} ${PREFIX}/bin/sage post-install: @${FIND} -s ${INSTALL_SAGE_DIR} -not -type d | \ ${SED} -e 's#${PREFIX}/##' >> ${TMPPLIST} @${FIND} -s ${INSTALL_SAGE_DIR} -type d -empty | \ ${SED} -e 's#${PREFIX}/#@exec ${MKDIR} %D/#' >> ${TMPPLIST} @${FIND} -s ${INSTALL_SAGE_DIR} -type d -depth | \ ${SED} -e 's#${PREFIX}/#@dirrm #' >> ${TMPPLIST} .include <bsd.port.post.mk>