Source: pyfftw
Version: 0.15.0-1.1
Severity: normal
Tags: patch
X-Debbugs-Cc: [email protected]

Hi,

debian/patches/hardening passes LDFLAGS to the feature-detection link
checks in setup.py as a single argument:

  self.linker_flags = [os.environ.get("LDFLAGS")]

With Debian's default LDFLAGS ("-Wl,-z,relro") that happens to work,
because it is a single flag. As soon as LDFLAGS contains more than one
flag, the linker gets them as one bogus option, every check fails, and
the build stops with a misleading error. In Ubuntu:

  ld.bfd: unrecognized option '-Bsymbolic-functions -Wl'
  collect2: error: ld returned 1 exit status
  error: Could not find the FFTW header 'fftw3.h'

The same would happen in Debian with any extra flag in LDFLAGS (for
example DEB_LDFLAGS_MAINT_APPEND or a local hardening setting). When
LDFLAGS is unset it also passes None to the linker call.

The attached updated patch splits the variable with shlex:

  self.linker_flags = shlex.split(os.environ.get("LDFLAGS", ""))

With it, pyfftw builds in Ubuntu and the test suite passes (1720 passed,
86 skipped), with single, double and long double support detected. With
Debian's LDFLAGS the behaviour is unchanged.

Regards,
Sebastien


-- System Information:
Debian Release: forky/sid
  APT prefers resolute-updates
  APT policy: (500, 'resolute-updates'), (500, 'resolute-security'), (500, 
'resolute'), (100, 'resolute-backports')
Architecture: amd64 (x86_64)

Kernel: Linux 7.0.0-38-generic (SMP w/16 CPU threads; PREEMPT)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_WARN, TAINT_OOT_MODULE
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled
From: Michael R. Crusoe <[email protected]>
Subject: respect LDFLAGS
Description: Pass LDFLAGS to the feature-detection link checks
 Split LDFLAGS into separate arguments with shlex. Passing the whole
 string as one argument breaks as soon as LDFLAGS has more than one
 flag (e.g. Ubuntu's "-Wl,-Bsymbolic-functions ... -Wl,-z,relro"): the
 linker rejects it, every check fails and the build stops with
 "Could not find the FFTW header 'fftw3.h'". It also passed None when
 LDFLAGS was unset.
Last-Update: 2026-10-09
Index: pyfftw-0.15.0/setup.py
===================================================================
--- pyfftw-0.15.0.orig/setup.py
+++ pyfftw-0.15.0/setup.py
@@ -47,6 +47,7 @@ from sysconfig import get_platform
 
 from contextlib import redirect_stderr, redirect_stdout
 import os
+import shlex
 import logging
 import platform
 import sys
@@ -172,7 +173,7 @@ class EnvironmentSniffer(object):
         self.objects = []
         self.libraries = []
         self.library_dirs = get_library_dirs()
-        self.linker_flags = []
+        self.linker_flags = shlex.split(os.environ.get("LDFLAGS", ""))
         self.compile_time_env = {}
 
         if self.compiler.compiler_type == 'msvc':

Reply via email to