EMAN2 works with both fftw2 and fftw3. A user makes the choice at compile time. A standard interface is defined to do fft:
class EMfft { public: static int real_to_complex_1d(float *real_data, float *complex_data, int n); static int complex_to_real_1d(float *complex_data, float *real_data, int n); static int real_to_complex_nd(float *real_data, float *complex_data, int nx, int ny, int nz); static int complex_to_real_nd(float *complex_data, float *real_data, int nx, int ny, int nz); };