1PORTNAME=	fftw3
2DISTVERSION=	3.3.10
3PORTREVISION?=	0
4CATEGORIES=	math
5MASTER_SITES=	http://www.fftw.org/ \
6		ftp://ftp.fftw.org/pub/fftw/
7PKGNAMESUFFIX=	${FFTW3_PKGNAMESUFFIX}
8DISTNAME=	fftw-${DISTVERSION}
9
10MAINTAINER=	ports@MidnightBSD.org
11COMMENT?=	Fast C routines to compute the Discrete Fourier Transform
12
13LICENSE=	gpl2
14
15#current flavors: default, float, long, and quad
16FFTW3_FLAVOR?=	default
17FFTW3_SUFX=
18
19GNU_CONFIGURE=	yes
20INSTALL_TARGET=	install-strip
21TEST_TARGET=	smallcheck #bigcheck check exhaustive-check paranoid-check
22TEST_WRKSRC=	${WRKSRC}/tests
23USES=		gmake libtool makeinfo pathfix perl5 pkgconfig
24USE_PERL5=	build
25USE_LDCONFIG=	yes
26
27CONFIGURE_ARGS=	--enable-shared --enable-threads --disable-fortran
28MPIDIR?=	${LOCALBASE}/mpi/openmpi
29
30.if ${FFTW3_FLAVOR} == "default"
31INFO=	fftw3
32.else
33#For non-default flavors, build and install the flavor-dependent components
34#only, so that these flavors may coexist with the default flavor
35INSTALL_TARGET=	install-cmakeDATA install-pkgconfigDATA install-libLTLIBRARIES install-exec
36.endif
37
38OPTIONS_DEFINE=		G77_WRAPPERS OPENMP OPENMPI OPTIMIZED_CFLAGS SIMD
39OPTIONS_DEFAULT=	OPTIMIZED_CFLAGS SIMD
40.if ${FFTW3_FLAVOR} == "quad"
41OPTIONS_EXCLUDE+=	OPENMPI
42.endif
43OPTIONS_SUB=		yes
44
45G77_WRAPPERS_DESC=		Alter Fortran wrappers for use with g77
46
47OPENMP_DESC=			Build OpenMP multithreaded libraries
48OPENMP_USES=			compiler:openmp
49OPENMP_USES_OFF=		compiler:env
50OPENMP_CONFIGURE_ENABLE=	openmp
51OPENMP_EXTRA_PATCHES=		${FILESDIR}/extrapatch-tests_fftw-bench.c
52
53OPENMPI_DESC=			Build OpenMPI parallel libraries
54OPENMPI_LIB_DEPENDS=		libmpi.so:net/openmpi
55OPENMPI_CONFIGURE_ENABLE=	mpi
56OPENMPI_CONFIGURE_ENV=		MPICC=${MPIDIR}/bin/mpicc \
57				MPIRUN=${MPIDIR}/bin/mpirun
58
59.include <bsd.mport.options.mk>
60
61#Users must add altivec to MACHINE_CPU when desired:
62#this is not currently done in bsd.cpu.mk
63.if ${FFTW3_FLAVOR} == "default"
64.  if ${PORT_OPTIONS:MSIMD}
65.    if !empty(MACHINE_CPU:Mavx)
66CONFIGURE_ARGS+=--enable-avx
67.    endif
68.    if !empty(MACHINE_CPU:Mavx2)
69CONFIGURE_ARGS+=--enable-avx2 --enable-fma
70.    endif
71.    if !empty(MACHINE_CPU:Msse2)
72CONFIGURE_ARGS+=--enable-sse2
73.    endif
74.  endif
75.elif ${FFTW3_FLAVOR} == "float"
76FFTW3_SUFX=	f
77FFTW3_PKGNAMESUFFIX=	-float
78CONFIGURE_ARGS+=--enable-float
79.  if ${PORT_OPTIONS:MSIMD}
80.    if !empty(MACHINE_CPU:Mavx)
81CONFIGURE_ARGS+=--enable-avx
82.    endif
83.    if !empty(MACHINE_CPU:Mavx2)
84CONFIGURE_ARGS+=--enable-avx2 --enable-fma
85.    endif
86.    if !empty(MACHINE_CPU:Msse)
87CONFIGURE_ARGS+=--enable-sse2
88.    endif
89.    if !empty(ARCH:Mpowerpc*) && !empty(MACHINE_CPU:Maltivec)
90CONFIGURE_ARGS+=--enable-altivec
91.    endif
92.  endif
93.elif ${FFTW3_FLAVOR} == "long"
94FFTW3_SUFX=	l
95FFTW3_PKGNAMESUFFIX=	-long
96CONFIGURE_ARGS+=--enable-long-double
97.elif ${FFTW3_FLAVOR} == "quad"
98FFTW3_SUFX=	q
99FFTW3_PKGNAMESUFFIX=	-quad
100CONFIGURE_ARGS+=--enable-quad-precision
101ONLY_FOR_ARCHS=		i386 amd64
102USE_GCC=	yes
103.endif
104
105.if ${FFTW3_FLAVOR} == "default"
106PLIST_SUB+=	DEF="" NONDEF="@comment "
107.else
108PLIST_SUB+=	DEF="@comment " NONDEF=""
109.endif
110
111PLIST_SUB+=	FFTW3_SUFX="${FFTW3_SUFX}"
112
113.include <bsd.port.pre.mk>
114
115.if ${PORT_OPTIONS:MOPTIMIZED_CFLAGS}
116CFLAGS+=	-O3 -fstrict-aliasing
117.  if !defined(WITH_DEBUG)
118CFLAGS+=	-fomit-frame-pointer
119.  endif
120.  if ${ARCH} == "i386" && (${COMPILER_TYPE} == "gcc" || !empty(USE_GCC)) && !${PORT_OPTIONS:MOPENMPI}
121CFLAGS+=	-malign-double
122.  endif
123WITHOUT_NO_STRICT_ALIASING=	yes
124.endif # end OPTIMIZED_CFLAGS
125
126post-patch:
127	@${REINPLACE_CMD} -e 's|/etc/fftw|${PREFIX}/etc/fftw|' \
128		${WRKSRC}/Makefile.in \
129		${WRKSRC}/api/import-system-wisdom.c \
130		${WRKSRC}/doc/fftw3* \
131		${WRKSRC}/tools/*
132.if ${FFTW3_FLAVOR} != "default"
133	@${REINPLACE_CMD} -E \
134	-e '/(DIST_COMMON|bin_SCRIPTS|BUILT_SOURCES|EXTRA_DIST) =/,\
135	/[^\]$$/s/[^[:blank:]]*fftw-wisdom-to-conf[^[:blank:]]*//' \
136		${WRKSRC}/tools/Makefile.in
137.endif
138
139post-configure:
140#After issuing --disable-fortran in order to avoid using a Fortran compiler
141#during configuration, edit config.h to provide Fortran wrappers appropriate for
142#gfortran, with ac_cv_f77_mangling="lower case, underscore, no extra underscore"
143	@${REINPLACE_CMD} -e '/DISABLE_FORTRAN/d' ${WRKSRC}/config.h
144	@${ECHO_CMD} "#define F77_FUNC(name,NAME) name ## _" >> ${WRKSRC}/config.h
145	@${ECHO_CMD} "#define F77_FUNC_(name,NAME) name ## _" >> ${WRKSRC}/config.h
146	@${ECHO_CMD} "#define F77_FUNC_EQUIV 1" >> ${WRKSRC}/config.h
147
148post-configure-G77_WRAPPERS-on:
149	@${ECHO_CMD} "#define WITH_G77_WRAPPERS 1" >> ${WRKSRC}/config.h
150
151.if ${FFTW3_FLAVOR} != "default"
152post-install:
153	${INSTALL_MAN} ${WRKSRC}/tools/fftw${FFTW3_SUFX}-wisdom.1 ${PREFIX}/share/man/man1
154	${STRIP_CMD} ${PREFIX}/lib/lib*.so
155.endif
156
157.include <bsd.port.post.mk>
158