#[=======================================================================[.rst: FindFX ------------ Find the FX library and header directories Imported Targets ^^^^^^^^^^^^^^^^ This module defines the following :prop_tgt:`IMPORTED` target: ``FX::FX`` The FX library, if found Result Variables ^^^^^^^^^^^^^^^^ This module will set the following variables in your project: ``FX_FOUND`` true if the FX C headers and libraries were found ``FX_INCLUDE_DIR`` directories containing the FX C headers. ``FX_LIBRARY`` the C library to link against Hints ^^^^^ The user may set the environment variable ``FX_PREFIX`` to the root directory of a FX library installation. #]=======================================================================] set (FX_SEARCH_PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr/local/share /usr /sw # Fink /opt/local # DarwinPorts /opt/csw # Blastwave /opt ${FX_PREFIX} $ENV{FX_PREFIX}) if (FX_STATIC) set(_lib_suffix "-s") endif () set(supported_components Core Ds Term Cmd Io Serial Compress) set(components ${FX_FIND_COMPONENTS}) string(REPLACE ";" ", " supported_components_string_list "${supported_components}") if (NOT components) set(components ${supported_components}) endif () set(required_vars) foreach (component ${components}) if (NOT "${component}" IN_LIST supported_components) message(FATAL_ERROR "'${component}' is not a valid FX module.\nSupported modules: ${supported_components_string_list}") endif () string(TOLOWER ${component} header_name) set(lib_name ${header_name}${_lib_suffix}) if (NOT FX_${component}_INCLUDE_DIR) find_path(FX_${component}_INCLUDE_DIR NAMES fx/${header_name}.h ${FX_FIND_ARGS} PATH_SUFFIXES include PATHS ${FX_SEARCH_PATHS}) endif () if (NOT FX_${component}_LIBRARY) find_library(FX_${component}_LIBRARY NAMES fx-${lib_name} ${FX_FIND_ARGS} PATH_SUFFIXES lib PATHS ${FX_SEARCH_PATHS}) else () # on Windows, ensure paths are in canonical format (forward slahes): file(TO_CMAKE_PATH "${FX_${component}_LIBRARY}" FX_${component}_LIBRARY) endif() list(APPEND required_vars FX_${component}_INCLUDE_DIR FX_${component}_LIBRARY) endforeach (component) unset(FX_FIND_ARGS) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(FX REQUIRED_VARS ${required_vars}) if (FX_FOUND) set(created_targets) foreach (component ${components}) string(TOLOWER ${component} header_name) set(lib_name ${header_name}${_lib_suffix}) if(NOT TARGET FX::${component}) add_library(FX::${component} UNKNOWN IMPORTED) set_target_properties(FX::${component} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${FX_${component}_INCLUDE_DIR}") target_compile_definitions(FX::${component} INTERFACE _CRT_SECURE_NO_WARNINGS=1) if (FX_STATIC) target_compile_definitions(FX::${component} INTERFACE FX_STATIC=1) endif () set_target_properties(FX::${component} PROPERTIES IMPORTED_LINK_INTERFACE_LANGUAGES "C" IMPORTED_LOCATION "${FX_${component}_LIBRARY}") set(created_targets ${created_targets} ${component}) endif () endforeach (component) foreach (component ${created_targets}) if ("${component}" STREQUAL "Ds") if (NOT TARGET FX::Core) message(FATAL_ERROR "FX: Module 'Ds' depends on 'Core', which was not specified in find_package()") endif () target_link_libraries(FX::Ds INTERFACE FX::Core) endif () if ("${component}" STREQUAL "Term") if (NOT TARGET FX::Core) message(FATAL_ERROR "FX: Module 'Term' depends on 'Core', which was not specified in find_package()") endif () if (NOT TARGET FX::Ds) message(FATAL_ERROR "FX: Module 'Term' depends on 'Ds', which was not specified in find_package()") endif () target_link_libraries(FX::Term INTERFACE FX::Core FX::Ds) endif () if ("${component}" STREQUAL "Serial") if (NOT TARGET FX::Core) message(FATAL_ERROR "FX: Module 'Serial' depends on 'Core', which was not specified in find_package()") endif () if (NOT TARGET FX::Ds) message(FATAL_ERROR "FX: Module 'Serial' depends on 'Ds', which was not specified in find_package()") endif () target_link_libraries(FX::Serial INTERFACE FX::Core FX::Ds) endif () if ("${component}" STREQUAL "Cmd") if (NOT TARGET FX::Core) message(FATAL_ERROR "FX: Module 'Cmd' depends on 'Core', which was not specified in find_package()") endif () if (NOT TARGET FX::Ds) message(FATAL_ERROR "FX: Module 'Cmd' depends on 'Ds', which was not specified in find_package()") endif () if (NOT TARGET FX::Term) message(FATAL_ERROR "FX: Module 'Cmd' depends on 'Term', which was not specified in find_package()") endif () target_link_libraries(FX::Cmd INTERFACE FX::Core FX::Ds FX::Term) endif () if ("${component}" STREQUAL "Io") if (NOT TARGET FX::Core) message(FATAL_ERROR "FX: Module 'Io' depends on 'Core', which was not specified in find_package()") endif () if (NOT TARGET FX::Ds) message(FATAL_ERROR "FX: Module 'Io' depends on 'Ds', which was not specified in find_package()") endif () target_link_libraries(FX::Io INTERFACE FX::Core FX::Ds) endif () if ("${component}" STREQUAL "Compress") if (NOT TARGET FX::Core) message(FATAL_ERROR "FX: Module 'Compress' depends on 'Core', which was not specified in find_package()") endif () target_link_libraries(FX::Compress INTERFACE FX::Core FX::Ds) endif () endforeach (component) endif()