more work towards a modern cmake. As a first example reworked FFTW3 binding.

This commit is contained in:
2022-07-01 16:18:24 +02:00
parent 3f2e96303a
commit ae7f1a2168
19 changed files with 241 additions and 145 deletions

View File

@ -1,7 +1,7 @@
# - Find fftw3 library
# Find the native FFTW3 includes and library
# This module defines
# FFTW3_INCLUDE_DIR, where to find fftw3.h, etc.
# FFTW3_INCLUDE, where to find fftw3.h, etc.
# ---
# FFTW3_LIBRARY, library to link against to use FFTW3
# FFTW3_OMP_LIBRARY, library to link against to use FFTW3_omp
@ -31,17 +31,53 @@
# FFTW3Q_OMP_FOUND, if false, do not try to use OpenMP FFTW3q.
# FFTW3Q_THREADS_FOUND, if false, do not try to use threaded FFTW3q.
find_path(FFTW3_INCLUDE_DIR fftw3.h
function(add_imported_library lib_name library headers)
add_library(FFTW3::${lib_name} UNKNOWN IMPORTED)
set_target_properties(FFTW3::${lib_name} PROPERTIES
IMPORTED_LOCATION ${library}
INTERFACE_INCLUDE_DIRECTORIES ${headers}
)
set(${lib_name}_FOUND 1 CACHE INTERNAL "FFTW3 ${lib_name} found" FORCE)
set(${lib_name}_LIBRARY ${library}
CACHE STRING "Path to FFTW3::${lib_name} library" FORCE)
set(FFTW3_INCLUDE ${headers}
CACHE STRING "Path to FFTW3 headers" FORCE)
mark_as_advanced(FORCE ${lib_name}_LIBRARY)
mark_as_advanced(FORCE FFTW3_INCLUDE)
endfunction()
#as35 if (FFTW3_LIBRARY AND FFTW3_INCLUDE)
#as35 add_imported_library(${FFTW3_LIBRARY} ${FFTW3_INCLUDE})
#as35 if (FFTW3_OMP_LIBRARY AND FFTW3_INCLUDE)
#as35 add_imported_library(${FFTW3_OMP_LIBRARY} ${FFTW3_INCLUDE})
#as35 elseif (FFTW3_THREAD_LIBRARY AND FFTW3_INCLUDE)
#as35 add_imported_library(${FFTW3_THRED_LIBRARY} ${FFTW3_INCLUDE})
#as35 elseif (FFTW3L_LIBRARY AND FFTW3_INCLUDE)
#as35 add_imported_library(${FFTW3L_LIBRARY} ${FFTW3_INCLUDE})
#as35 elseif (FFTW3L_OMP_LIBRARY AND FFTW3_INCLUDE)
#as35 add_imported_library(${FFTW3L_OMP_LIBRARY} ${FFTW3_INCLUDE})
#as35 elseif (FFTW3L_THREAD_LIBRARY AND FFTW3_INCLUDE)
#as35 add_imported_library(${FFTW3L_THRED_LIBRARY} ${FFTW3_INCLUDE})
#as35 elseif (FFTW3F_LIBRARY AND FFTW3_INCLUDE)
#as35 add_imported_library(${FFTW3F_LIBRARY} ${FFTW3_INCLUDE})
#as35 elseif (FFTW3F_OMP_LIBRARY AND FFTW3_INCLUDE)
#as35 add_imported_library(${FFTW3F_OMP_LIBRARY} ${FFTW3_INCLUDE})
#as35 elseif (FFTW3F_THREAD_LIBRARY AND FFTW3_INCLUDE)
#as35 add_imported_library(${FFTW3F_THRED_LIBRARY} ${FFTW3_INCLUDE})
#as35 elseif (FFTW3Q_LIBRARY AND FFTW3_INCLUDE)
#as35 add_imported_library(${FFTW3Q_LIBRARY} ${FFTW3_INCLUDE})
#as35 elseif (FFTW3Q_OMP_LIBRARY AND FFTW3_INCLUDE)
#as35 add_imported_library(${FFTW3Q_OMP_LIBRARY} ${FFTW3_INCLUDE})
#as35 elseif (FFTW3Q_THREAD_LIBRARY AND FFTW3_INCLUDE)
#as35 add_imported_library(${FFTW3Q_THRED_LIBRARY} ${FFTW3_INCLUDE})
#as35 endif()
#as35 return()
#as35 endif()
find_path(FFTW3_INCLUDE NAMES fftw3.h
HINTS "/usr/include" "/opt/local/include"
)
# find position of fftw3.h from the end
string(FIND "${FFTW3_INCLUDE_DIR}" "/fftw3.h" pos REVERSE)
# truncate the string
string(SUBSTRING "${FFTW3_INCLUDE_DIR}" 0 ${pos} substr)
set(FFTW3_INCLUDE_DIR ${substr})
unset(substr)
find_library(FFTW3_LIBRARY fftw3)
find_library(FFTW3_OMP_LIBRARY fftw3_omp)
find_library(FFTW3_THREAD_LIBRARY fftw3_threads)
@ -58,94 +94,126 @@ find_library(FFTW3Q_THREAD_LIBRARY fftw3q_threads)
# handle the QUIETLY and REQUIRED arguments and set FFTW3_FOUND to TRUE if
# all listed variables are TRUE
include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
# FFTW3
find_package_handle_standard_args(FFTW3
REQUIRED_VARS FFTW3_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
DEFAULT_MSG FFTW3_LIBRARY FFTW3_INCLUDE
)
if (FFTW3_FOUND)
add_imported_library("FFTW3" "${FFTW3_LIBRARY}" "${FFTW3_INCLUDE}")
endif()
# FFTW3_OMP
find_package_handle_standard_args(FFTW3_OMP
REQUIRED_VARS FFTW3_OMP_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
REQUIRED_VARS FFTW3_OMP_LIBRARY FFTW3_INCLUDE
HANDLE_COMPONENTS
NAME_MISMATCHED
)
if (FFTW3_OMP_FOUND)
add_imported_library("FFTW3_OMP" "${FFTW3_OMP_LIBRARY}" "${FFTW3_INCLUDE}")
endif()
# FFTW3_THREAD
find_package_handle_standard_args(FFTW3_THREAD
REQUIRED_VARS FFTW3_THREAD_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
REQUIRED_VARS FFTW3_THREAD_LIBRARY FFTW3_INCLUDE
HANDLE_COMPONENTS
NAME_MISMATCHED
)
if (FFTW3_THREAD_FOUND)
add_imported_library("FFTW3_THREAD" "${FFTW3_THREAD_LIBRARY}" "${FFTW3_INCLUDE}")
endif()
# FFTW3L
find_package_handle_standard_args(FFTW3L
REQUIRED_VARS FFTW3L_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
REQUIRED_VARS FFTW3L_LIBRARY FFTW3_INCLUDE
HANDLE_COMPONENTS
NAME_MISMATCHED
)
if (FFTW3L_FOUND)
add_imported_library("FFTW3L" "${FFTW3L_LIBRARY}" "${FFTW3_INCLUDE}")
endif()
# FFTW3L_OMP
find_package_handle_standard_args(FFTW3L_OMP
REQUIRED_VARS FFTW3L_OMP_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
REQUIRED_VARS FFTW3L_OMP_LIBRARY FFTW3_INCLUDE
HANDLE_COMPONENTS
NAME_MISMATCHED
)
if (FFTW3L_OMP_FOUND)
add_imported_library("FFTW3L_OMP" "${FFTW3L_OMP_LIBRARY}" "${FFTW3_INCLUDE}")
endif()
# FFTW3L_THREAD
find_package_handle_standard_args(FFTW3L_THREAD
REQUIRED_VARS FFTW3L_THREAD_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
REQUIRED_VARS FFTW3L_THREAD_LIBRARY FFTW3_INCLUDE
HANDLE_COMPONENTS
NAME_MISMATCHED
)
if (FFTW3L_THREAD_FOUND)
add_imported_library("FFTW3L_THREAD" "${FFTW3L_THREAD_LIBRARY}" "${FFTW3_INCLUDE}")
endif()
# FFTW3F
find_package_handle_standard_args(FFTW3F
REQUIRED_VARS FFTW3F_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
REQUIRED_VARS FFTW3F_LIBRARY FFTW3_INCLUDE
HANDLE_COMPONENTS
NAME_MISMATCHED
)
if (FFTW3F_FOUND)
add_imported_library("FFTW3F" "${FFTW3F_LIBRARY}" "${FFTW3_INCLUDE}")
endif()
# FFTW3F_OMP
find_package_handle_standard_args(FFTW3F_OMP
REQUIRED_VARS FFTW3F_OMP_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
REQUIRED_VARS FFTW3F_OMP_LIBRARY FFTW3_INCLUDE
HANDLE_COMPONENTS
NAME_MISMATCHED
)
if (FFTW3F_OMP_FOUND)
add_imported_library("FFTW3F_OMP" "${FFTW3F_OMP_LIBRARY}" "${FFTW3_INCLUDE}")
endif()
# FFTW3F_THREAD
find_package_handle_standard_args(FFTW3F_THREAD
REQUIRED_VARS FFTW3F_THREAD_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
REQUIRED_VARS FFTW3F_THREAD_LIBRARY FFTW3_INCLUDE
HANDLE_COMPONENTS
NAME_MISMATCHED
)
if (FFTW3F_THREAD_FOUND)
add_imported_library("FFTW3F_THREAD" "${FFTW3F_THREAD_LIBRARY}" "${FFTW3_INCLUDE}")
endif()
# FFTW3Q
find_package_handle_standard_args(FFTW3Q
REQUIRED_VARS FFTW3Q_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
REQUIRED_VARS FFTW3Q_LIBRARY FFTW3_INCLUDE
HANDLE_COMPONENTS
NAME_MISMATCHED
)
if (FFTW3Q_FOUND)
add_imported_library("FFTW3Q" "${FFTW3Q_LIBRARY}" "${FFTW3_INCLUDE}")
endif()
# FFTW3Q_OMP
find_package_handle_standard_args(FFTW3Q_OMP
REQUIRED_VARS FFTW3Q_OMP_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
REQUIRED_VARS FFTW3Q_OMP_LIBRARY FFTW3_INCLUDE
HANDLE_COMPONENTS
NAME_MISMATCHED
)
if (FFTW3Q_OMP_FOUND)
add_imported_library("FFTW3Q_OMP" "${FFTW3Q_OMP_LIBRARY}" "${FFTW3_INCLUDE}")
endif()
# FFTW3Q_THREAD
find_package_handle_standard_args(FFTW3Q_THREAD
REQUIRED_VARS FFTW3Q_THREAD_LIBRARY FFTW3_INCLUDE_DIR
VERSION_VAR "3")
if (NOT FFTW3_FOUND)
unset(FFTW3_LIBRARY)
endif()
if (NOT FFTW3_OMP_FOUND)
unset(FFTW3_OMP_LIBRARY)
endif()
if (NOT FFTW3_THREAD_FOUND)
unset(FFTW3_THREAD_LIBRARY)
REQUIRED_VARS FFTW3Q_THREAD_LIBRARY FFTW3_INCLUDE
HANDLE_COMPONENTS
NAME_MISMATCHED
)
if (FFTW3Q_THREAD_FOUND)
add_imported_library("FFTW3Q_THREAD" "${FFTW3Q_THREAD_LIBRARY}" "${FFTW3_INCLUDE}")
endif()
if (NOT FFTW3L_FOUND)
unset(FFTW3L_LIBRARY)
endif()
if (NOT FFTW3L_OMP_FOUND)
unset(FFTW3L_OMP_LIBRARY)
endif()
if (NOT FFTW3L_THREAD_FOUND)
unset(FFTW3L_THREAD_LIBRARY)
endif()
if (NOT FFTW3F_FOUND)
unset(FFTW3F_LIBRARY)
endif()
if (NOT FFTW3F_OMP_FOUND)
unset(FFTW3F_OMP_LIBRARY)
endif()
if (NOT FFTW3F_THREAD_FOUND)
unset(FFTW3F_THREAD_LIBRARY)
endif()
if (NOT FFTW3Q_FOUND)
unset(FFTW3Q_LIBRARY)
endif()
if (NOT FFTW3Q_OMP_FOUND)
unset(FFTW3Q_OMP_LIBRARY)
endif()
if (NOT FFTW3Q_THREAD_FOUND)
unset(FFTW3Q_THREAD_LIBRARY)
endif()
mark_as_advanced(
FFTW3_INCLUDE_DIR
FFTW3_LIBRARY FFTW3_OMP_LIBRARY FFTW3_THREAD_LIBRARY
FFTW3L_LIBRARY FFTW3L_OMP_LIBRARY FFTW3L_THREAD_LIBRARY
FFTW3F_LIBRARY FFTW3F_OMP_LIBRARY FFTW3F_THREAD_LIBRARY
FFTW3Q_LIBRARY FFTW3Q_OMP_LIBRARY FFTW3Q_THREAD_LIBRARY
)
if (FFTW3_FOUND)
message("-- Found FFTW3: ${FFTW3_INCLUDE_DIR}")
message("-- Found FFTW3: ${FFTW3_INCLUDE}")
endif (FFTW3_FOUND)

45
cmake/FindNEXUS.cmake Normal file
View File

@ -0,0 +1,45 @@
# - Find NeXus library
# Find the native NEXUS includes and library
# This module defines
# NEXUS_INCLUDE_DIR, where to find NeXus.h, etc.
# NEXUS_LIBRARY, library to link against to use NEXUS
# NEXUS_FOUND, if false, do not try to use NEXUS.
find_path(NEXUS_INCLUDE_DIR napi.h
HINTS "/usr/local/include" "/opt/nexus/include" "/usr/local/include/nexus"
)
# find position of napi.h from the end
string(FIND "${NEXUS_INCLUDE_DIR}" "/napi.h" pos REVERSE)
# truncate the string
string(SUBSTRING "${NEXUS_INCLUDE_DIR}" 0 ${pos} substr)
set(NEXUS_INCLUDE_DIR ${substr})
unset(substr)
find_library(NEXUS_LIBRARY NeXus
HINTS "/usr/lib" "/usr/lib64" "/usr/local/lib" "/usr/local/lib64" "/opt/nexus/lib")
# get version string
if (NEXUS_INCLUDE_DIR AND EXISTS ${NEXUS_INCLUDE_DIR}/napi.h)
file(STRINGS "${NEXUS_INCLUDE_DIR}/napi.h" NEXUS_version_str
REGEX "^#define[\t ]+NEXUS_VERSION[\t ].*")
string(REGEX REPLACE "^#define[\t ]+NEXUS_VERSION[\t ]+\"([^\"]*).*"
"\\1" NEXUS_VERSION_STRING "${NEXUS_version_str}")
unset(NEXUS_version_str)
endif()
# handle the QUIETLY and REQUIRED arguments and set NEXUS_FOUND to TRUE if
# all listed variables are TRUE
include(${CMAKE_ROOT}/Modules/FindPackageHandleStandardArgs.cmake)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(NEXUS
REQUIRED_VARS NEXUS_LIBRARY NEXUS_INCLUDE_DIR
VERSION_VAR NEXUS_VERSION_STRING)
if (NOT NEXUS_FOUND)
unset(NEXUS_LIBRARY)
endif()
mark_as_advanced(NEXUS_INCLUDE_DIR NEXUS_LIBRARY)