# New ports collection makefile for:	atlas-devel
# Date created:		14 September 2003
# Whom:			Nakata Maho <maho@FreeBSD.org>
#
# $FreeBSD: ports/math/atlas-devel/Makefile,v 1.55 2009/01/07 16:34:13 gerald Exp $
#

# NOTE: This port purposely ignores the CC and CFLAGS settings.
#       Program and compiler flags are finetuned to gcc.

PORTNAME=	atlas
PORTVERSION=	3.7.37
PORTREVISION=	1
CATEGORIES=	math
MASTER_SITES=	${MASTER_SITE_SOURCEFORGE}
MASTER_SITE_SUBDIR=	math-atlas
PKGNAMESUFFIX=	-devel
DISTNAME=	${PORTNAME}${PORTVERSION}

MAINTAINER=	maho@FreeBSD.org
COMMENT=	Development version of math/atlas

IGNORE=		please use math/atlas instead. atlas is newer
MANUAL_PACKAGE_BUILD=	Optimizes for the local machine

USE_BZIP2=	yes
USE_GMAKE=	yes
WRKSRC=		${WRKDIR}/ATLAS
USE_LDCONFIG=	yes

.include <bsd.port.pre.mk>

NOT_FOR_ARCHS=	alpha

USE_FORTRAN=	yes
CCOMPILER=	${CC}
LIB_DEPENDS+=	blas.2:${PORTSDIR}/math/blas
LIB_DEPENDS+=	lapack.4:${PORTSDIR}/math/lapack
LIB_DEPENDS+=	f2c:${PORTSDIR}/lang/f2c

.if ${ARCH} == "sparc64"
PICFLAG?=	-fPIC
.else
PICFLAG?=	-fpic
.endif

# only affects for lapack sub project
.if defined(WITH_OPTIMIZED_FLAGS)
.if defined(CPUTYPE)
FFLAGS+=	-mtune=${CPUTYPE} -pipe -O2 -ffast-math
.else
FFLAGS+=	-pipe -O2 -ffast-math
.endif
.endif
.if defined(WITH_STATICLIB)
PLIST_SUB+=	WITH_STATICLIB=""
.else
PLIST_SUB+=	WITH_STATICLIB="@comment "
.endif

post-extract:
.if !defined(WITH_STATICLIB)
	@${ECHO_MSG} "You can build static libraries with"
	@${ECHO_MSG} "make -DWITH_STATICLIB"
	@${ECHO_MSG}
.endif

pre-configure:
	@${REINPLACE_CMD} -e "s|%%CC%%|${CCOMPILER}|g" \
		-e "s|%%FC%%|${FC}|g"  ${WRKSRC}/CONFIG/src/atlcomp.txt
	@${REINPLACE_CMD} -e "s|%%PTHREAD_LIBS%%|${PTHREAD_LIBS}|g" \
			  -e "s|%%PTHREAD_CFLAGS%%|${PTHREAD_CFLAGS}|g" \
			  -e "s|%%LOCALBASE%%|${LOCALBASE}|g" \
		${WRKSRC}/CONFIG/src/SpewMakeInc.c

do-configure:
#non threaded
#dummy f77lib, it is not used.
	${MKDIR} ${WRKSRC}/NON_THREADED ; cd ${WRKSRC}/NON_THREADED ; \
		../configure -t 0 -Si cputhrchk 0 -Ss f77lib " "
	${MKDIR} ${WRKSRC}/NON_THREADED_PIC ; cd ${WRKSRC}/NON_THREADED_PIC ; \
		../configure -t 0 -Fag al '${PICFLAG} -DPIC' -Si cputhrchk 0 -Ss f77lib " "
#threaded
#dummy f77lib, it is not used.
	cd ${WRKSRC}; ${PATCH} < ${FILESDIR}/thread-patch
	${MKDIR} ${WRKSRC}/THREADED ; cd ${WRKSRC}/THREADED ; \
		../configure -Fag al '${PTHREAD_CFLAGS} ' -Si cputhrchk 0 -Ss f77lib " "
	${MKDIR} ${WRKSRC}/THREADED_PIC ; cd ${WRKSRC}/THREADED_PIC ; \
		../configure -Fag al '${PTHREAD_CFLAGS} ${PICFLAG} -DPIC' -Si cputhrchk 0 -Ss f77lib " "

do-build:
# make lapack
.if ! exists(${WRKDIR}/lapack/Makefile)
	@${ECHO_MSG} "===>  Extracting lapack sub project"
	@${MKDIR} ${WRKDIR}/lapack
	@${CP} -r ${PORTSDIR}/math/lapack/files ${WRKDIR}/lapack
	@${CP} ${PORTSDIR}/math/lapack/Makefile ${WRKDIR}/lapack
	@${CP} ${PORTSDIR}/math/lapack/distinfo ${WRKDIR}/lapack
	@${CP} ${PORTSDIR}/math/lapack/pkg-descr ${WRKDIR}/lapack
	@cd ${WRKDIR}/lapack ; ${MAKE} "FFLAGS=${FFLAGS}" FC="${FC}" build WRKDIRPREFIX=""
.endif
.if defined(WITH_STATICLIB)
	(cd ${WRKSRC}/NON_THREADED ; ${MAKE})
	(cd ${WRKSRC}/THREADED ; ${MAKE})
.endif
	(cd ${WRKSRC}/NON_THREADED_PIC ; ${MAKE})
	(cd ${WRKSRC}/THREADED_PIC ; ${MAKE})
	@${MAKE} test

ATLAS_LIBS1=libalapack libatlas libcblas libf77blas #libtstatlas
ATLAS_LIBS2=libptcblas libptf77blas
LAPACKWRKSRC=`cd ${WRKDIR}/lapack; ${MAKE} -V WRKSRC`

post-build:
.if defined(WITH_STATICLIB)
# make atlas enhanced lapack (static ver)
	(cd ${WRKSRC}; ${MKDIR} tmp1 ; \
		${CP} ${LAPACKWRKSRC}/liblapack.a tmp1 ;\
		cd tmp1 ;\
		ar x liblapack.a ;\
		ar x ../NON_THREADED/lib/liblapack.a ;\
		ar r ../NON_THREADED/lib/libalapack.a *.o ;\
		ranlib ../NON_THREADED/lib/libalapack.a )
#  make atlas enhanced lapack (static and thread safe ver)
	(cd ${WRKSRC}; ${MKDIR} tmp2 ; \
		${CP} ${LAPACKWRKSRC}/liblapack.a tmp2 ;\
		cd tmp2 ;\
		ar x liblapack.a ;\
		ar x ../THREADED/lib/liblapack.a ;\
		ar r ../THREADED/lib/libalapack.a *.o ;\
		ranlib ../THREADED/lib/libalapack.a )
.endif
# make atlas enhanced lapack (shared ver)
	( cd ${WRKSRC}; ${MKDIR} tmp3 ;\
		${CP} ${LAPACKWRKSRC}_shared/liblapack.a tmp3 ;\
		cd tmp3 ;\
		ar x liblapack.a ;\
		ar x ../NON_THREADED_PIC/lib/liblapack.a ;\
		ar r ../NON_THREADED_PIC/lib/libalapack.a *.o ;\
		ranlib ../NON_THREADED_PIC/lib/libalapack.a )
# make atlas enhanced lapack (shared and thread safe ver)
	( cd ${WRKSRC}; ${MKDIR} tmp4 ;\
		${CP} ${LAPACKWRKSRC}_shared/liblapack.a tmp4 ;\
		cd tmp4 ;\
		ar x liblapack.a ;\
		ar x ../THREADED_PIC/lib/liblapack.a ;\
		ar r ../THREADED_PIC/lib/libalapack.a *.o ;\
		ranlib ../THREADED_PIC/lib/libalapack.a )

# make atlas shared library
.for i in ${ATLAS_LIBS1}
	( cd ${WRKSRC}/NON_THREADED_PIC/lib ; \
		ld -Bshareable -o ${i}.so.2 -x -soname ${i}.so.2 ${i}.a )
.endfor

# make atlas shared (thread safe) library
.for i in ${ATLAS_LIBS1}
	( cd ${WRKSRC}/THREADED_PIC/lib ; \
		ld -Bshareable -o ${i}_r.so.2 -x -soname ${i}_r.so.2 ${i}.a )
.endfor
.for i in ${ATLAS_LIBS2}
	( cd ${WRKSRC}/THREADED_PIC/lib ; \
		ld -Bshareable -o ${i}.so.2 -x -soname ${i}.so.2 ${i}.a )
.endfor
do-install:
.for i in ${ATLAS_LIBS1}
.if defined(WITH_STATICLIB)
	@${INSTALL_DATA} ${WRKSRC}/NON_THREADED/lib/${i}.a       ${PREFIX}/lib
.endif
	@${INSTALL_DATA} ${WRKSRC}/NON_THREADED_PIC/lib/${i}.so.2    ${PREFIX}/lib
	@${LN} -sf ${i}.so.2 ${PREFIX}/lib/${i}.so
.endfor
.for i in ${ATLAS_LIBS1}
.if defined(WITH_STATICLIB)
	@${INSTALL_DATA} ${WRKSRC}/THREADED/lib/${i}.a       ${PREFIX}/lib/${i}_r.a
.endif
	@${INSTALL_DATA} ${WRKSRC}/THREADED_PIC/lib/${i}_r.so.2    ${PREFIX}/lib/${i}_r.so.2
	@${LN} -sf ${i}_r.so.2 ${PREFIX}/lib/${i}_r.so
.endfor
.for i in ${ATLAS_LIBS2}
.if defined(WITH_STATICLIB)
	@${INSTALL_DATA} ${WRKSRC}/THREADED/lib/${i}.a       ${PREFIX}/lib
.endif
	@${INSTALL_DATA} ${WRKSRC}/THREADED_PIC/lib/${i}.so.2    ${PREFIX}/lib
	@${LN} -sf ${i}.so.2 ${PREFIX}/lib/${i}.so
.endfor

	@${INSTALL_DATA} ${WRKSRC}/include/cblas.h   ${PREFIX}/include
	@${INSTALL_DATA} ${WRKSRC}/include/clapack.h ${PREFIX}/include
	@${INSTALL_DATA} ${FILESDIR}/blas.h    ${PREFIX}/include
	@${INSTALL_DATA} ${FILESDIR}/lapack.h  ${PREFIX}/include
.if !defined(NOPORTDOCS)
	@${MKDIR} ${DOCSDIR}
	${INSTALL_DATA} ${WRKSRC}/doc/* ${DOCSDIR}
.endif
	${MKDIR} ${EXAMPLESDIR}
	@for i in ${ALLTESTS} ; do \
	cd ${WRKDIR}/ATLAS/NON_THREADED_PIC/bin ; ${INSTALL_PROGRAM} $${i} ${EXAMPLESDIR} ; \
	done
	@for i in ${ALLTESTS_PT} ; do \
	cd ${WRKDIR}/ATLAS/THREADED_PIC/bin ; ${INSTALL_PROGRAM} $${i} ${EXAMPLESDIR} ; \
	done

.include <${FILESDIR}/Makefile.test>
.include <bsd.port.post.mk>
