# New ports collection makefile for: fftw
# Date created:		Dec 28 1998
# Whom:			Lars Koeller <Lars.Koeller@Uni-Bielefeld.DE>
#
# $FreeBSD$
#    $MCom: ports-experimental/math/fftw3/Makefile,v 1.1 2006/03/28 00:08:57 ahze Exp $

PORTNAME=	fftw3
PORTVERSION=	3.3.1
PORTREVISION?=	0
CATEGORIES=	math
MASTER_SITES=	ftp://ftp.fftw.org/pub/fftw/ \
		ftp://ftp.fftw.org/pub/fftw/old/
PKGNAMESUFFIX=	${FFTW3_PKGNAMESUFFIX}
DISTNAME=	fftw-${PORTVERSION}

MAINTAINER=	bf@FreeBSD.org
COMMENT?=	Fast C routines to compute the Discrete Fourier Transform

#current flavors: default, float, long, and quad
FFTW3_FLAVOR?=	default
FFTW3_SUFX=

GNU_CONFIGURE=	yes
USE_GNOME=	gnomehack pkgconfig
USE_PERL5_BUILD=yes
USE_LDCONFIG=	yes

CONFIGURE_ARGS =	--enable-shared --enable-threads --disable-fortran
CONFIGURE_ENV=	PTHREAD_CFLAGS="${PTHREAD_CFLAGS}" \
		PTHREAD_LIBS="${PTHREAD_LIBS}"

.if ${FFTW3_FLAVOR} == "default"
MAN1=	fftw-wisdom-to-conf.1 fftw-wisdom.1
INFO=	fftw3
.else
#For non-default flavors, only build and install the flavor-dependent components,
#so that these flavors may coexist with the default flavor
MAN1=	fftw${FFTW3_SUFX}-wisdom.1
INSTALL_TARGET=	install-pkgconfigDATA install-libLTLIBRARIES install-exec
.endif

OPTIONS=	G77_WRAPPERS "Alter Fortran wrappers for use with g77" off \
		OPENMP "Build OpenMP multithreaded libraries" off \
		OPTIMIZED_CFLAGS "Enable optimized CFLAGS" on

.include <bsd.port.pre.mk>

.if defined(WITH_OPENMP)
CONFIGURE_ARGS+=	--enable-openmp
PLIST_SUB+=	OPENMP=""
.else
CONFIGURE_ARGS+=	--disable-openmp
PLIST_SUB+=	OPENMP="@comment "
.endif

.if defined(WITH_OPTIMIZED_CFLAGS)
CFLAGS+=	-O3 -ffast-math -fstrict-aliasing
.  if !defined(WITH_DEBUG)
CFLAGS+=	-fomit-frame-pointer
.  endif
.  if ${ARCH} == "i386"
CFLAGS+=	-malign-double
.  endif
WITHOUT_NO_STRICT_ALIASING=	yes
.endif # end WITH_OPTIMIZED_CFLAGS

#Users must add altivec and avx to MACHINE_CPU when desired:
#this is not currently done in bsd.cpu.mk
.if ${FFTW3_FLAVOR} == "default"
.  if !empty(MACHINE_CPU:Mavx)
CONFIGURE_ARGS+=--enable-avx
.  elif !empty(MACHINE_CPU:Msse2)
CONFIGURE_ARGS+=--enable-sse2
.  endif
.elif ${FFTW3_FLAVOR} == "float"
FFTW3_SUFX=	f
FFTW3_PKGNAMESUFFIX=	-float
CONFIGURE_ARGS+=--enable-float
.  if !empty(MACHINE_CPU:Mavx)
CONFIGURE_ARGS+=--enable-avx
.  elif !empty(MACHINE_CPU:Msse)
CONFIGURE_ARGS+=--enable-sse
.  elif !empty(ARCH:Mpowerpc*) && !empty(MACHINE_CPU:Maltivec)
CONFIGURE_ARGS+=--enable-altivec
.  endif
.elif ${FFTW3_FLAVOR} == "long"
.  if ${OSVERSION} < 800000
ONLY_FOR_ARCHS =	i386 sparc64
LIB_DEPENDS+=	ml.0:${PORTSDIR}/math/ldouble
.  endif
FFTW3_SUFX=	l
FFTW3_PKGNAMESUFFIX=	-long
CONFIGURE_ARGS+=--enable-long-double
.elif ${FFTW3_FLAVOR} == "quad"
FFTW3_SUFX=	q
FFTW3_PKGNAMESUFFIX=	-quad
CONFIGURE_ARGS+=--enable-quad-precision
ONLY_FOR_ARCHS =	i386 amd64
USE_GCC=	4.6+
.endif

.if ${FFTW3_FLAVOR} == "default"
PLIST_SUB+=	DEF=""
.else
PLIST_SUB+=	DEF="@comment "
.endif

PLIST_SUB+=	FFTW3_SUFX="${FFTW3_SUFX}"

post-patch:
	@${REINPLACE_CMD} -e 's|/etc/fftw|${PREFIX}/etc/fftw|' \
		${WRKSRC}/Makefile.in \
		${WRKSRC}/api/import-system-wisdom.c \
		${WRKSRC}/doc/fftw3* \
		${WRKSRC}/tools/*
	@${REINPLACE_CMD} \
	-e '/libfftw3@PREC_SUFFIX@_threads\.la:/{N; \
	s/$$(LIBS)/$$(PTHREAD_LIBS) &/;}' \
		${WRKSRC}/threads/Makefile.in
.if ${FFTW3_FLAVOR} != "default"
	@${REINPLACE_CMD} -E \
	-e '/(DIST_COMMON|bin_SCRIPTS|BUILT_SOURCES|EXTRA_DIST) =/,\
	/[^\]$$/s/[^[:blank:]]*fftw-wisdom-to-conf[^[:blank:]]*//' \
		${WRKSRC}/tools/Makefile.in
.  if ${FFTW3_FLAVOR} == "long" && ${OSVERSION} < 800000
	@${REINPLACE_CMD} -e 's|-lm |-L${LOCALBASE}/lib -lml &|' \
		${WRKSRC}/configure
.  endif
.endif

post-patch-script:
	@${FIND} ${WRKSRC} -type f \( -name \*.bak -or -name \*.orig \) \
	-exec ${RM} -f {} \;

post-configure:
#After issuing --disable-fortran in order to avoid using a Fortran compiler
#during configuration, edit config.h to provide Fortran wrappers appropriate for
#gfortran, with ac_cv_f77_mangling="lower case, underscore, no extra underscore"
	@${REINPLACE_CMD} -e '/DISABLE_FORTRAN/d' ${WRKSRC}/config.h
	@${ECHO_CMD} "#define F77_FUNC(name,NAME) name ## _" >> ${WRKSRC}/config.h
	@${ECHO_CMD} "#define F77_FUNC_(name,NAME) name ## _" >> ${WRKSRC}/config.h
	@${ECHO_CMD} "#define F77_FUNC_EQUIV 1" >> ${WRKSRC}/config.h
.if defined(WITH_G77_WRAPPERS)
	@${ECHO_CMD} "#define WITH_G77_WRAPPERS 1" >> ${WRKSRC}/config.h
.endif

.if ${FFTW3_FLAVOR} != "default"
post-install:
	@${INSTALL_MAN} ${WRKSRC}/tools/fftw${FFTW3_SUFX}-wisdom.1 ${PREFIX}/man/man1
.endif

regression-test test: smallcheck

.for t in bigcheck check exhaustive-check paranoid-check smallcheck
${t}: build
	@cd ${WRKSRC}/tests; ${SETENV} ${MAKE_ENV} ${MAKE} ${_MAKE_JOBS} \
	${MAKE_ARGS} ${t}

.endfor

.include <bsd.port.post.mk>