git: 6de37c31fdbf - 2026Q4 - math/fftw3: Update to 3.3.11
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 10 Oct 2026 08:27:10 UTC
The branch 2026Q4 has been updated by jhale:
URL: https://cgit.FreeBSD.org/ports/commit/?id=6de37c31fdbffdcb44eeaeb06e0d68434f4f4a2c
commit 6de37c31fdbffdcb44eeaeb06e0d68434f4f4a2c
Author: Jason E. Hale <jhale@FreeBSD.org>
AuthorDate: 2026-10-10 05:54:01 +0000
Commit: Jason E. Hale <jhale@FreeBSD.org>
CommitDate: 2026-10-10 08:23:23 +0000
math/fftw3: Update to 3.3.11
Clean up whitespace and order Makefile. Simplify some logic including
removing -malign-double for i386, which could break programs linked to
the quad library. Nothing uses quad, so it's moot keeping complicated
logic for a Tier-2 platform.
All supported versions of FreeBSD have <bsd.cpu.mk> with altivec support
in MACHINE_CPU. Remove obsolete workaround.
Add a few maintainer helper targets to make updates a bit easier.
These automatically update SHLIB_VER_MIN variable in the Makefile and
regenerate FFTW3LibraryDepends.cmake.in. After just bumping PORTVERSION
and removing any existing PORTREVISION line, simply running:
`make -C ${PORTSDIR}/math/fftw -DMAINTAINER_MODE maintainer-update`
will take care of all of the pre-test tasks.
MFH: 2026Q4
(cherry picked from commit 2c75ab24ce68f5185a6ebcb2eda33ad0575ccaf8)
---
math/fftw3/Makefile | 177 +++++++++++++++----------
math/fftw3/distinfo | 6 +-
math/fftw3/files/FFTW3LibraryDepends.cmake.in | 6 +-
math/fftw3/files/extrapatch-tests_fftw-bench.c | 12 --
math/fftw3/files/patch-configure | 54 --------
5 files changed, 112 insertions(+), 143 deletions(-)
diff --git a/math/fftw3/Makefile b/math/fftw3/Makefile
index 121f7d7c0092..5f6543b2e155 100644
--- a/math/fftw3/Makefile
+++ b/math/fftw3/Makefile
@@ -1,9 +1,7 @@
PORTNAME= fftw3
-DISTVERSION= 3.3.10
-PORTREVISION= 5
+DISTVERSION= 3.3.11
CATEGORIES= math
-MASTER_SITES= http://www.fftw.org/ \
- ftp://ftp.fftw.org/pub/fftw/
+MASTER_SITES= https://www.fftw.org/
PKGNAMESUFFIX= ${FFTW3_PKGNAMESUFFIX}
DISTNAME= fftw-${DISTVERSION}
@@ -14,48 +12,53 @@ WWW= https://www.fftw.org/
LICENSE= GPLv2+
LICENSE_FILE= ${WRKSRC}/COPYING
-#current flavors: default, float, long, and quad
+# Current flavors: default, float, long, and quad
+# These are not FreeBSD Ports 'FLAVORS'; "flavor" is the term that
+# upstream uses to differentiate library precision. The default is the
+# double precision library.
FFTW3_FLAVOR?= default
FFTW3_SUFX=
-GNU_CONFIGURE= yes
-GNU_CONFIGURE_MANPREFIX=${PREFIX}/share
-INSTALL_TARGET= install-strip
-TEST_TARGET= smallcheck #bigcheck check exhaustive-check paranoid-check
-TEST_WRKSRC= ${WRKSRC}/tests
-USES= gmake libtool makeinfo pathfix perl5 pkgconfig
-USE_PERL5= build
+.if !make(maintainer-update*)
+USES= gmake libtool makeinfo perl5
+.else
+USES= cmake
+.endif
USE_LDCONFIG= yes
+USE_PERL5= build
+GNU_CONFIGURE= yes
CONFIGURE_ARGS= --enable-shared --enable-threads --disable-fortran
+.if ${FFTW3_FLAVOR} == "default"
+INSTALL_TARGET= install-strip
+.else
+# For non-default flavors, install only the flavor-dependent components
+# so that these flavors may coexist with the default flavor.
+INSTALL_TARGET= install-cmakeDATA install-pkgconfigDATA install-libLTLIBRARIES install-exec
+.endif
+# The standard 'check' target takes about 3 minutes to complete on 2026
+# amd64 consumer hardware whereas 'smallcheck' completes in about a second.
+# If 'smallcheck' fails, there is something very wrong.
+TEST_TARGET= smallcheck #bigcheck check exhaustive-check paranoid-check
-SHLIB_VER_MAJ= ${DISTVERSION:R:R}
-SHLIB_VER_MIN= 6
-SHLIB_VER_PAT= ${DISTVERSION:E}
-SHLIB_VER= ${SHLIB_VER_MAJ}.${SHLIB_VER_MIN}.${SHLIB_VER_PAT}
-PLIST_SUB= SHLIB_VER=${SHLIB_VER} \
- SHLIB_VER_MAJ=${SHLIB_VER_MAJ}
SUB_FILES= FFTW3LibraryDepends.cmake
SUB_LIST= FFTW3_SUFX=${FFTW3_SUFX} \
SHLIB_VER=${SHLIB_VER} \
SHLIB_VER_MAJ=${SHLIB_VER_MAJ}
+TEST_WRKSRC= ${WRKSRC}/tests
+
.if ${FFTW3_FLAVOR} == "default"
-INFO= fftw3
-.else
-#For non-default flavors, build and install the flavor-dependent components
-#only, so that these flavors may coexist with the default flavor
-INSTALL_TARGET= install-cmakeDATA install-pkgconfigDATA install-libLTLIBRARIES install-exec
+INFO= fftw3
.endif
+PLIST_SUB= SHLIB_VER=${SHLIB_VER} \
+ SHLIB_VER_MAJ=${SHLIB_VER_MAJ}
OPTIONS_DEFINE= G77_WRAPPERS OPENMP OPENMPI OPTIMIZED_CFLAGS SIMD
OPTIONS_DEFAULT= OPTIMIZED_CFLAGS SIMD
-OPTIONS_DEFAULT_aarch64= OPENMP
-OPTIONS_DEFAULT_amd64= OPENMP
-OPTIONS_DEFAULT_i386= OPENMP
-OPTIONS_DEFAULT_powerpc64= OPENMP
-OPTIONS_DEFAULT_powerpc64le= OPENMP
-OPTIONS_DEFAULT_riscv64= OPENMP
+.for arch in aarch64 amd64 i386 powerpc64 powerpc64le riscv64
+OPTIONS_DEFAULT_${arch}=OPENMP
+.endfor
.if ${FFTW3_FLAVOR} == "quad"
OPTIONS_EXCLUDE+= OPENMPI
.endif
@@ -63,11 +66,10 @@ OPTIONS_SUB= yes
G77_WRAPPERS_DESC= Alter Fortran wrappers for use with g77
-OPENMP_DESC= Build OpenMP multithreaded libraries
+OPENMP_DESC= Build OpenMP multi-threaded libraries
OPENMP_USES= compiler:env
OPENMP_USES_OFF= compiler:env
OPENMP_CONFIGURE_ENABLE= openmp
-OPENMP_EXTRA_PATCHES= ${FILESDIR}/extrapatch-tests_fftw-bench.c
OPENMPI_DESC= Build OpenMPI parallel libraries
OPENMPI_USES= mpi:openmpi
@@ -75,81 +77,79 @@ OPENMPI_CONFIGURE_ENABLE= mpi
OPENMPI_CONFIGURE_ENV= MPICC=${MPICC} \
MPIRUN=${MPIRUN}
+OPTIMIZED_CFLAGS_CFLAGS= -O3 -fstrict-aliasing
+.if !defined(WITH_DEBUG)
+OPTIMIZED_CFLAGS_CFLAGS+= -fomit-frame-pointer
+.endif
+OPTIMIZED_CFLAGS_VARS= WITHOUT_NO_STRICT_ALIASING=yes
+
+SHLIB_VER_MAJ= ${DISTVERSION:R:R}
+SHLIB_VER_MIN= 7
+SHLIB_VER_PAT= ${DISTVERSION:E}
+SHLIB_VER= ${SHLIB_VER_MAJ}.${SHLIB_VER_MIN}.${SHLIB_VER_PAT}
+
.include <bsd.port.options.mk>
# Enable cycle counter via the CNTVCT_EL0 register for all variants on arm64.
.if ${ARCH} == "aarch64"
-CONFIGURE_ARGS+=--enable-armv8-cntvct-el0
+CONFIGURE_ARGS+= --enable-armv8-cntvct-el0
.endif
-#Users must add altivec to MACHINE_CPU when desired:
-#this is not currently done in bsd.cpu.mk
.if ${FFTW3_FLAVOR} == "default"
. if ${PORT_OPTIONS:MSIMD}
. if !empty(MACHINE_CPU:Mavx)
-CONFIGURE_ARGS+=--enable-avx
+CONFIGURE_ARGS+= --enable-avx
. endif
. if !empty(MACHINE_CPU:Mavx2)
-CONFIGURE_ARGS+=--enable-avx2 --enable-fma
+CONFIGURE_ARGS+= --enable-avx2 --enable-fma
. endif
. if !empty(MACHINE_CPU:Msse2)
-CONFIGURE_ARGS+=--enable-sse2
+CONFIGURE_ARGS+= --enable-sse2
. endif
. endif
.elif ${FFTW3_FLAVOR} == "float"
-FFTW3_SUFX= f
+FFTW3_SUFX= f
FFTW3_PKGNAMESUFFIX= -float
-CONFIGURE_ARGS+=--enable-float
+CONFIGURE_ARGS+= --enable-float
. if ${PORT_OPTIONS:MSIMD}
. if !empty(MACHINE_CPU:Mavx)
-CONFIGURE_ARGS+=--enable-avx
+CONFIGURE_ARGS+= --enable-avx
. endif
. if !empty(MACHINE_CPU:Mavx2)
-CONFIGURE_ARGS+=--enable-avx2 --enable-fma
+CONFIGURE_ARGS+= --enable-avx2 --enable-fma
. endif
. if !empty(MACHINE_CPU:Msse)
-CONFIGURE_ARGS+=--enable-sse2
+CONFIGURE_ARGS+= --enable-sse2
. endif
-. if !empty(MACHINE_CPU:Maltivec) || !empty(ARCH:Mpowerpc64*)
-CONFIGURE_ARGS+=--enable-altivec
+. if !empty(MACHINE_CPU:Maltivec)
+CONFIGURE_ARGS+= --enable-altivec
+. endif
+. if !empty(MACHINE_CPU:Mvsx)
+CONFIGURE_ARGS+= --enable-vsx
. endif
. if ${ARCH} == "aarch64"
-CONFIGURE_ARGS+=--enable-neon
+CONFIGURE_ARGS+= --enable-neon
. endif
. endif
.elif ${FFTW3_FLAVOR} == "long"
-FFTW3_SUFX= l
+FFTW3_SUFX= l
FFTW3_PKGNAMESUFFIX= -long
-CONFIGURE_ARGS+=--enable-long-double
+CONFIGURE_ARGS+= --enable-long-double
.elif ${FFTW3_FLAVOR} == "quad"
-FFTW3_SUFX= q
+FFTW3_SUFX= q
FFTW3_PKGNAMESUFFIX= -quad
-CONFIGURE_ARGS+=--enable-quad-precision
+CONFIGURE_ARGS+= --enable-quad-precision
ONLY_FOR_ARCHS= i386 amd64
-USE_GCC= yes
+USE_GCC= yes
.endif
+PLIST_SUB+= FFTW3_SUFX="${FFTW3_SUFX}"
.if ${FFTW3_FLAVOR} == "default"
PLIST_SUB+= DEF="" NONDEF="@comment "
.else
PLIST_SUB+= DEF="@comment " NONDEF=""
.endif
-PLIST_SUB+= FFTW3_SUFX="${FFTW3_SUFX}"
-
-.include <bsd.port.pre.mk>
-
-.if ${PORT_OPTIONS:MOPTIMIZED_CFLAGS}
-CFLAGS+= -O3 -fstrict-aliasing
-. if !defined(WITH_DEBUG)
-CFLAGS+= -fomit-frame-pointer
-. endif
-. if ${ARCH} == "i386" && (${COMPILER_TYPE} == "gcc" || !empty(USE_GCC)) && !${PORT_OPTIONS:MOPENMPI}
-CFLAGS+= -malign-double
-. endif
-WITHOUT_NO_STRICT_ALIASING= yes
-.endif # end OPTIMIZED_CFLAGS
-
post-patch:
@${REINPLACE_CMD} -e 's|/etc/fftw|${PREFIX}/etc/fftw|' \
${WRKSRC}/Makefile.in \
@@ -160,15 +160,15 @@ post-patch:
${WRKSRC}/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:]]*//' \
+ -e '/(DIST_COMMON|bin_SCRIPTS|BUILT_SOURCES|EXTRA_DIST) =/, \
+ /[^\]$$/s|[^[:blank:]]*fftw-wisdom-to-conf[^[:blank:]]*||' \
${WRKSRC}/tools/Makefile.in
.endif
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"
+# 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
@@ -184,4 +184,39 @@ post-install:
${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/lib*.so
.endif
-.include <bsd.port.post.mk>
+.if defined(MAINTAINER_MODE) && ${FFTW3_FLAVOR} == "default"
+# FFTW3 uses an unconventional shared lib version naming scheme. This target
+# updates SHLIB_VER_MIN, the only component that is unpredictable and must be
+# determined from the source.
+maintainer-update-SHLIB_VER_MIN: extract
+ @AGE=$$(${SED} -n -e 's|^SHARED_VERSION_INFO="[^:]*:[^:]*:\([0-9]*\)".*|\1|p' ${WRKSRC}/configure.ac); \
+ if [ -z "$${AGE}" ]; then \
+ ${ECHO_CMD} "Error: Could not extract AGE from ${WRKSRC}/configure.ac"; \
+ exit 1; \
+ elif [ "$${AGE}" = "${SHLIB_VER_MIN}" ]; then \
+ ${ECHO_CMD} "SHLIB_VER_MIN is already up to date ($${AGE}). Skipping."; \
+ else \
+ ${ECHO_CMD} "Updating SHLIB_VER_MIN from ${SHLIB_VER_MIN} to $${AGE}..."; \
+ ${SED} -i '' -e "s|^\(SHLIB_VER_MIN=[[:space:]]*\)[0-9]*|\1$${AGE}|" ${.CURDIR}/Makefile; \
+ ${ECHO_CMD} "SHLIB_VER_MIN in ${.CURDIR}/Makefile updated successfully."; \
+ fi
+
+# FFTW3LibraryDepends.cmake is the target import file generated by CMake, but
+# since we use autotools for completeness, we pre-grenerate a template that can
+# be used by all of the FFTW3 flavors.
+maintainer-update-cmake-depends: extract do-configure
+ @${ECHO_CMD} "Generating FFTW3LibraryDepends.cmake.in..."
+ @${MKDIR} ${FILESDIR}
+ @${SED} \
+ -e 's|fftw3|fftw3%%FFTW3_SUFX%%|g' \
+ -e '/IMPORTED_LOCATION/ s|".*"|"%%PREFIX%%/lib/libfftw3%%FFTW3_SUFX%%.so.%%SHLIB_VER_MAJ%%"|' \
+ -e '/IMPORTED_SONAME/ s|".*"|"libfftw3%%FFTW3_SUFX%%.so.%%SHLIB_VER%%"|' \
+ ${CONFIGURE_WRKSRC}/FFTW3LibraryDepends.cmake > ${FILESDIR}/FFTW3LibraryDepends.cmake.in
+ @${ECHO_CMD} "Successfully updated ${FILESDIR}/FFTW3LibraryDepends.cmake.in."
+
+# Consolidation of maintainer-update* targets. To be run with each PORTVERSION
+# update and before testing.
+maintainer-update: makesum maintainer-update-SHLIB_VER_MIN maintainer-update-cmake-depends clean
+.endif
+
+.include <bsd.port.mk>
diff --git a/math/fftw3/distinfo b/math/fftw3/distinfo
index f71ce37d512c..c5700adabfcd 100644
--- a/math/fftw3/distinfo
+++ b/math/fftw3/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1636920998
-SHA256 (fftw-3.3.10.tar.gz) = 56c932549852cddcfafdab3820b0200c7742675be92179e59e6215b340e26467
-SIZE (fftw-3.3.10.tar.gz) = 4144100
+TIMESTAMP = 1787417329
+SHA256 (fftw-3.3.11.tar.gz) = 5630c24cdeb33b131612f7eb4b1a9934234754f9f388ff8617458d0be6f239a1
+SIZE (fftw-3.3.11.tar.gz) = 4310712
diff --git a/math/fftw3/files/FFTW3LibraryDepends.cmake.in b/math/fftw3/files/FFTW3LibraryDepends.cmake.in
index 1d2febfcd35b..f4b2adf4caae 100644
--- a/math/fftw3/files/FFTW3LibraryDepends.cmake.in
+++ b/math/fftw3/files/FFTW3LibraryDepends.cmake.in
@@ -1,13 +1,13 @@
# Generated by CMake
if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8)
- message(FATAL_ERROR "CMake >= 2.8.0 required")
+ message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
if(CMAKE_VERSION VERSION_LESS "2.8.3")
message(FATAL_ERROR "CMake >= 2.8.3 required")
endif()
cmake_policy(PUSH)
-cmake_policy(VERSION 2.8.3...3.25)
+cmake_policy(VERSION 2.8.3...3.29)
#----------------------------------------------------------------
# Generated CMake target import file.
#----------------------------------------------------------------
@@ -56,7 +56,7 @@ set_target_properties(FFTW3::fftw3%%FFTW3_SUFX%% PROPERTIES
# Import target "FFTW3::fftw3%%FFTW3_SUFX%%" for configuration "Release"
set_property(TARGET FFTW3::fftw3%%FFTW3_SUFX%% APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(FFTW3::fftw3%%FFTW3_SUFX%% PROPERTIES
- IMPORTED_LOCATION_RELEASE "%%LOCALBASE%%/lib/libfftw3%%FFTW3_SUFX%%.so.%%SHLIB_VER_MAJ%%"
+ IMPORTED_LOCATION_RELEASE "%%PREFIX%%/lib/libfftw3%%FFTW3_SUFX%%.so.%%SHLIB_VER_MAJ%%"
IMPORTED_SONAME_RELEASE "libfftw3%%FFTW3_SUFX%%.so.%%SHLIB_VER%%"
)
diff --git a/math/fftw3/files/extrapatch-tests_fftw-bench.c b/math/fftw3/files/extrapatch-tests_fftw-bench.c
deleted file mode 100644
index fd6c909683f2..000000000000
--- a/math/fftw3/files/extrapatch-tests_fftw-bench.c
+++ /dev/null
@@ -1,12 +0,0 @@
-Fix regression tests when OPENMP option is enabled.
---- tests/fftw-bench.c.orig 2020-12-10 12:02:44 UTC
-+++ tests/fftw-bench.c
-@@ -125,8 +125,6 @@ void rdwisdom(void)
- if (threads_ok) {
- BENCH_ASSERT(FFTW(init_threads)());
- FFTW(plan_with_nthreads)(nthreads);
-- BENCH_ASSERT(FFTW(planner_nthreads)() == nthreads);
-- FFTW(make_planner_thread_safe)();
- #ifdef _OPENMP
- omp_set_num_threads(nthreads);
- #endif
diff --git a/math/fftw3/files/patch-configure b/math/fftw3/files/patch-configure
deleted file mode 100644
index 72d34f151801..000000000000
--- a/math/fftw3/files/patch-configure
+++ /dev/null
@@ -1,54 +0,0 @@
---- configure.orig 2021-09-14 14:43:44 UTC
-+++ configure
-@@ -14938,7 +14938,7 @@ case "${ax_cv_c_compiler_vendor}" in
- esac
-
- case "${ax_cv_c_compiler_vendor}" in
-- gnu|intel)
-+ gnu|intel|clang)
- # SSE/SSE2
- if test "$have_sse2" = "yes" -a "x$SSE2_CFLAGS" = x; then
- if test "$PRECISION" = d; then flag=msse2; else flag=msse; fi
-@@ -15293,14 +15293,14 @@ else
- if test "x$ax_check_compiler_flags" = xyes; then
- ALTIVEC_CFLAGS="-faltivec"
- else
-- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -maltivec -mabi=altivec" >&5
--$as_echo_n "checking whether C compiler accepts -maltivec -mabi=altivec... " >&6; }
--if ${ax_cv_c_flags__maltivec__mabi_altivec+:} false; then :
-+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -maltivec" >&5
-+$as_echo_n "checking whether C compiler accepts -maltivec... " >&6; }
-+if ${ax_cv_c_flags__maltivec+:} false; then :
- $as_echo_n "(cached) " >&6
- else
-
- ax_save_FLAGS=$CFLAGS
-- CFLAGS="-maltivec -mabi=altivec"
-+ CFLAGS="-maltivec"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h. */
-
-@@ -15313,19 +15313,19 @@ if ac_fn_c_try_compile "$LINENO"; then :
- }
- _ACEOF
- if ac_fn_c_try_compile "$LINENO"; then :
-- ax_cv_c_flags__maltivec__mabi_altivec=yes
-+ ax_cv_c_flags__maltivec=yes
- else
-- ax_cv_c_flags__maltivec__mabi_altivec=no
-+ ax_cv_c_flags__maltivec=no
- fi
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- CFLAGS=$ax_save_FLAGS
- fi
-
--eval ax_check_compiler_flags=$ax_cv_c_flags__maltivec__mabi_altivec
-+eval ax_check_compiler_flags=$ax_cv_c_flags__maltivec
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5
- $as_echo "$ax_check_compiler_flags" >&6; }
- if test "x$ax_check_compiler_flags" = xyes; then
-- ALTIVEC_CFLAGS="-maltivec -mabi=altivec -DFAKE__VEC__"
-+ ALTIVEC_CFLAGS="-maltivec -DFAKE__VEC__"
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fvec" >&5
- $as_echo_n "checking whether C compiler accepts -fvec... " >&6; }