docstr: Check for availability of fftw libraries before building the wrapper.
  
  Do it here to make sure we use the exact same compiler for checking includes/linking as for building the libraries.
docstr_tok: ["Check","for","availability","of","fftw","libraries","before","building","the","wrapper",".","Do","it","here","to","make","sure","we","use","the","exact","same","compiler","for","checking","includes\/linking","as","for","building","the","libraries","."]
code: def build_extensions(self):
      """Check for availability of fftw libraries before building the wrapper.
  
      Do it here to make sure we use the exact same compiler for checking includes/linking as for building the libraries.
      """
      sniffer = make_sniffer(self.compiler)
  
      # read out information and modify compiler
  
      # define macros, that is which part of wrapper is built
      self._pyfftw_define_macros = [
          (f"PYFFTW_{k}", int(v))
          for k, v in sniffer.compile_time_env.items()
      ]
  
      # call `extend()` to keep argument set neither by sniffer nor by
      # user. On windows there are includes set automatically, we
      # must not lose them.
  
      # prepend automatically generated info to whatever the user specified
      include_dirs = sniffer.include_dirs or []
      if self.include_dirs is not None:
          include_dirs += self.include_dirs
      self.compiler.include_dirs.extend(include_dirs)
  
      libraries = sniffer.libraries or None
      if self.libraries is not None:
          if libraries is None:
              libraries = self.libraries
          else:
              libraries += self.libraries
      self.compiler.libraries.extend(libraries)
  
      library_dirs = sniffer.library_dirs
      if self.library_dirs is not None:
          library_dirs += self.library_dirs
      self.compiler.library_dirs.extend(library_dirs)
  
      objects = sniffer.objects
      if self.link_objects is not None:
          objects += self.objects
      self.compiler.set_link_objects(objects)
  
      # delegate actual work to standard implementation
      return super().build_extensions()
  
imports: from setuptools import setup, Command
  from setuptools.command.build_ext import build_ext
  from sysconfig import get_platform
  from contextlib import redirect_stderr, redirect_stdout
  import os
  import logging
  import platform
  import sys
  import versioneer
label_desc: Use image node_id 2 for calling the custom_build_ext obj's underlying member method code with example usage: obj.build_extensions() and returns: super