|
1 | | -# Attempt to find FFTW |
2 | | -# URL: https://www.fftw.org/ |
3 | | -# DOCS: https://cmake.org/cmake/help/latest/command/find_library.html |
4 | | -# https://cmake.org/cmake/help/latest/module/FindPackageHandleStandardArgs.html |
| 1 | +# FindFFTW.cmake — Enhanced to support apt installs, env hints, and pkg-config |
5 | 2 |
|
6 | | -include(FindPackageHandleStandardArgs) |
| 3 | +# Try pkg-config first (if available) |
| 4 | +find_package(PkgConfig QUIET) |
| 5 | +if(PkgConfig_FOUND) |
| 6 | + pkg_check_modules(PC_FFTW QUIET fftw3) |
| 7 | +endif() |
7 | 8 |
|
| 9 | +# Build include + lib search paths |
| 10 | +set(FFTW_HINTED_INCLUDE |
| 11 | + $ENV{FFTW_INCLUDE_DIR} |
| 12 | + ${PC_FFTW_INCLUDE_DIRS} |
| 13 | + /usr/include |
| 14 | + /usr/local/include |
| 15 | +) |
| 16 | + |
| 17 | +set(FFTW_HINTED_LIBRARY |
| 18 | + $ENV{FFTW_LIBRARY} |
| 19 | + ${PC_FFTW_LIBRARY_DIRS} |
| 20 | + /usr/lib |
| 21 | + /usr/lib64 |
| 22 | + /usr/local/lib |
| 23 | + /usr/lib/x86_64-linux-gnu |
| 24 | +) |
8 | 25 |
|
| 26 | +# Locate fftw3.h and libfftw3.so |
9 | 27 | find_path(FFTW_INCLUDE_DIR |
10 | | - NAMES fftw3.h |
11 | | - PATH_SUFFIXES fftw fftw3 |
| 28 | + NAMES fftw3.h |
| 29 | + HINTS ${FFTW_HINTED_INCLUDE} |
12 | 30 | ) |
13 | 31 |
|
14 | 32 | find_library(FFTW_LIBRARY |
15 | | - NAMES fftw3 |
16 | | - PATH_SUFFIXES fftw fftw3 |
17 | | - NAMES_PER_DIR |
| 33 | + NAMES fftw3 |
| 34 | + HINTS ${FFTW_HINTED_LIBRARY} |
18 | 35 | ) |
19 | 36 |
|
20 | | - |
21 | | -FIND_PACKAGE_HANDLE_STANDARD_ARGS( |
22 | | - FFTW |
23 | | - REQUIRED_VARS |
24 | | - FFTW_LIBRARY |
25 | | - FFTW_INCLUDE_DIR |
| 37 | +# Required FFTW_FOUND logic |
| 38 | +include(FindPackageHandleStandardArgs) |
| 39 | +find_package_handle_standard_args(FFTW |
| 40 | + REQUIRED_VARS FFTW_LIBRARY FFTW_INCLUDE_DIR |
| 41 | + VERSION_VAR PC_FFTW_VERSION |
26 | 42 | ) |
27 | 43 |
|
| 44 | +mark_as_advanced(FFTW_INCLUDE_DIR FFTW_LIBRARY) |
28 | 45 |
|
29 | | -if (FFTW_FOUND AND NOT TARGET FFTW::FFTW) |
30 | | - set(FFTW_LIBRARIES "${FFTW_LIBRARY}") |
31 | | - set(FFTW_INCLUDE_DIRS "${FFTW_INCLUDE_DIR}") |
32 | | - |
33 | | - add_library(FFTW::FFTW UNKNOWN IMPORTED) |
34 | | - |
35 | | - set_target_properties(FFTW::FFTW PROPERTIES |
36 | | - IMPORTED_LOCATION "${FFTW_LIBRARIES}" |
37 | | - INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIRS}" |
38 | | - ) |
| 46 | +# Define an imported target (optional but modern) |
| 47 | +if(FFTW_FOUND AND NOT TARGET FFTW::FFTW) |
| 48 | + add_library(FFTW::FFTW UNKNOWN IMPORTED) |
| 49 | + set_target_properties(FFTW::FFTW PROPERTIES |
| 50 | + IMPORTED_LOCATION "${FFTW_LIBRARY}" |
| 51 | + INTERFACE_INCLUDE_DIRECTORIES "${FFTW_INCLUDE_DIR}" |
| 52 | + ) |
39 | 53 | endif() |
| 54 | + |
0 commit comments