FindFreetype: use freetype-config.cmake
if available
The official `freetype-config.cmake` provides `Freetype::Freetype` as an `INTERFACE` library to its exported `freetype` target. This ends up causing issues if CMake's Find module is used to define `Freetype::Freetype` before using `freetype-config` because some, but not all, of its defined targets are already available triggering the generated code that detects such situations. Instead, try to use `freetype-config` where possible and provide bridge logic for this module's variable guarantees.
This commit is contained in:
parent
4771544386
commit
d83d925045
@ -65,6 +65,64 @@ directory of a Freetype installation.
|
||||
# I'm going to attempt to cut out the middleman and hope
|
||||
# everything still works.
|
||||
|
||||
set(_Freetype_args)
|
||||
if (Freetype_FIND_QUIETLY)
|
||||
list(APPEND _Freetype_args
|
||||
QUIET)
|
||||
endif ()
|
||||
if (Freetype_FIND_VERSION)
|
||||
list(APPEND _Freetype_args
|
||||
"${Freetype_FIND_VERSION}")
|
||||
if (Freetype_FIND_VERSION_EXACT)
|
||||
list(APPEND _Freetype_args
|
||||
EXACT)
|
||||
endif ()
|
||||
endif ()
|
||||
set(_Freetype_component_req)
|
||||
set(_Freetype_component_opt)
|
||||
foreach (_Freetype_component IN LISTS Freetype_FIND_COMPONENTS)
|
||||
if (Freetype_FIND_REQUIRE_${_Freetype_component})
|
||||
list(APPEND _Freetype_component_req
|
||||
"${_Freetype_component}")
|
||||
else ()
|
||||
list(APPEND _Freetype_component_opt
|
||||
"${_Freetype_component}")
|
||||
endif ()
|
||||
endforeach ()
|
||||
unset(_Freetype_component)
|
||||
if (_Freetype_component_req)
|
||||
list(APPEND _Freetype_args
|
||||
COMPONENTS "${_Freetype_component_req}")
|
||||
endif ()
|
||||
unset(_Freetype_component_req)
|
||||
if (_Freetype_component_opt)
|
||||
list(APPEND _Freetype_args
|
||||
OPTIONAL_COMPONENTS "${_Freetype_component_opt}")
|
||||
endif ()
|
||||
unset(_Freetype_component_opt)
|
||||
find_package(freetype CONFIG ${_Freetype_args})
|
||||
unset(_Freetype_args)
|
||||
if (freetype_FOUND)
|
||||
if (NOT TARGET Freetype::Freetype)
|
||||
add_library(Freetype::Freetype IMPORTED INTERFACE)
|
||||
set_target_properties(Freetype::Freetype PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES freetype)
|
||||
endif ()
|
||||
get_property(FREETYPE_INCLUDE_DIRS TARGET freetype PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
|
||||
get_property(FREETYPE_LIBRARIES TARGET freetype PROPERTY INTERFACE_LINK_LIBRARIES)
|
||||
get_property(_Freetype_location TARGET freetype PROPERTY LOCATION)
|
||||
list(APPEND FREETYPE_LIBRARIES
|
||||
"${_Freetype_location}")
|
||||
unset(_Freetype_location)
|
||||
set(Freetype_FOUND 1)
|
||||
set(FREETYPE_VERSION_STRING "${freetype_VERSION}")
|
||||
foreach (_Freetype_component IN LISTS Freetype_FIND_COMPONENTS)
|
||||
set(Freetype_${_Freetype_component}_FOUND "${freetype_${_Freetype_component}_FOUND}")
|
||||
endforeach ()
|
||||
unset(_Freetype_component)
|
||||
return ()
|
||||
endif ()
|
||||
|
||||
set(FREETYPE_FIND_ARGS
|
||||
HINTS
|
||||
ENV FREETYPE_DIR
|
||||
|
Loading…
Reference in New Issue
Block a user