From 457c2021963bb8030934659addce05c66b500512 Mon Sep 17 00:00:00 2001 From: Ben Morgan Date: Thu, 31 Aug 2017 16:34:41 +0100 Subject: FindFreetype: Add imported target, docs, and test --- Modules/FindFreetype.cmake | 71 ++++++++++++++++++++++++++++------ Tests/CMakeLists.txt | 4 ++ Tests/FindFreetype/CMakeLists.txt | 10 +++++ Tests/FindFreetype/Test/CMakeLists.txt | 16 ++++++++ Tests/FindFreetype/Test/main.c | 34 ++++++++++++++++ 5 files changed, 123 insertions(+), 12 deletions(-) create mode 100644 Tests/FindFreetype/CMakeLists.txt create mode 100644 Tests/FindFreetype/Test/CMakeLists.txt create mode 100644 Tests/FindFreetype/Test/main.c diff --git a/Modules/FindFreetype.cmake b/Modules/FindFreetype.cmake index 9ea77df..0e6d336 100644 --- a/Modules/FindFreetype.cmake +++ b/Modules/FindFreetype.cmake @@ -5,24 +5,41 @@ # FindFreetype # ------------ # -# Locate FreeType library +# Find the FreeType font renderer includes and library. # -# This module defines +# Imported Targets +# ^^^^^^^^^^^^^^^^ # -# :: +# This module defines the following :prop_tgt:`IMPORTED` target: # -# FREETYPE_LIBRARIES, the library to link against -# FREETYPE_FOUND, if false, do not try to link to FREETYPE -# FREETYPE_INCLUDE_DIRS, where to find headers. -# FREETYPE_VERSION_STRING, the version of freetype found (since CMake 2.8.8) -# This is the concatenation of the paths: -# FREETYPE_INCLUDE_DIR_ft2build -# FREETYPE_INCLUDE_DIR_freetype2 +# ``Freetype::Freetype`` +# The Freetype ``freetype`` library, if found # +# Result Variables +# ^^^^^^^^^^^^^^^^ # +# This module will set the following variables in your project: # -# $FREETYPE_DIR is an environment variable that would correspond to the -# ./configure --prefix=$FREETYPE_DIR used in building FREETYPE. +# ``FREETYPE_FOUND`` +# true if the Freetype headers and libraries were found +# ``FREETYPE_INCLUDE_DIRS`` +# directories containing the Freetype headers. This is the +# concatenation of the variables: +# +# ``FREETYPE_INCLUDE_DIR_ft2build`` +# directory holding the main Freetype API configuration header +# ``FREETYPE_INCLUDE_DIR_freetype2`` +# directory holding Freetype public headers +# ``FREETYPE_LIBRARIES`` +# the library to link against +# ``FREETYPE_VERSION_STRING`` +# the version of freetype found (since CMake 2.8.8) +# +# Hints +# ^^^^^ +# +# The user may set the environment variable ``FREETYPE_DIR`` to the root +# directory of a Freetype installation. # Created by Eric Wing. # Modifications by Alexander Neundorf. @@ -150,3 +167,33 @@ mark_as_advanced( FREETYPE_INCLUDE_DIR_freetype2 FREETYPE_INCLUDE_DIR_ft2build ) + +if(Freetype_FOUND) + if(NOT TARGET Freetype::Freetype) + add_library(Freetype::Freetype UNKNOWN IMPORTED) + set_target_properties(Freetype::Freetype PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${FREETYPE_INCLUDE_DIRS}") + + if(FREETYPE_LIBRARY_RELEASE) + set_property(TARGET Freetype::Freetype APPEND PROPERTY + IMPORTED_CONFIGURATIONS RELEASE) + set_target_properties(Freetype::Freetype PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C" + IMPORTED_LOCATION_RELEASE "${FREETYPE_LIBRARY_RELEASE}") + endif() + + if(FREETYPE_LIBRARY_DEBUG) + set_property(TARGET Freetype::Freetype APPEND PROPERTY + IMPORTED_CONFIGURATIONS DEBUG) + set_target_properties(Freetype::Freetype PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C" + IMPORTED_LOCATION_DEBUG "${FREETYPE_LIBRARY_DEBUG}") + endif() + + if(NOT FREETYPE_LIBRARY_RELEASE AND NOT FREETYPE_LIBRARY_DEBUG) + set_target_properties(Freetype::Freetype PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${FREETYPE_LIBRARY}") + endif() + endif() +endif() diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 1bce09b..640b542 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1435,6 +1435,10 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release add_subdirectory(FindEXPAT) endif() + if(CMake_TEST_FindFreetype) + add_subdirectory(FindFreetype) + endif() + if(CMake_TEST_FindGSL) add_subdirectory(FindGSL) endif() diff --git a/Tests/FindFreetype/CMakeLists.txt b/Tests/FindFreetype/CMakeLists.txt new file mode 100644 index 0000000..490c25b --- /dev/null +++ b/Tests/FindFreetype/CMakeLists.txt @@ -0,0 +1,10 @@ +add_test(NAME FindFreetype.Test COMMAND + ${CMAKE_CTEST_COMMAND} -C $ + --build-and-test + "${CMake_SOURCE_DIR}/Tests/FindFreetype/Test" + "${CMake_BINARY_DIR}/Tests/FindFreetype/Test" + ${build_generator_args} + --build-project TestFindFreetype + --build-options ${build_options} + --test-command ${CMAKE_CTEST_COMMAND} -V -C $ + ) diff --git a/Tests/FindFreetype/Test/CMakeLists.txt b/Tests/FindFreetype/Test/CMakeLists.txt new file mode 100644 index 0000000..bc869a1 --- /dev/null +++ b/Tests/FindFreetype/Test/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.9) +project(TestFindFreetype C) +include(CTest) + +find_package(Freetype REQUIRED) + +add_definitions(-DCMAKE_EXPECTED_FREETYPE_VERSION="${FREETYPE_VERSION_STRING}") + +add_executable(testfreetype_tgt main.c) +target_link_libraries(testfreetype_tgt Freetype::Freetype) +add_test(NAME testfreetype_tgt COMMAND testfreetype_tgt) + +add_executable(testfreetype_var main.c) +target_include_directories(testfreetype_var PRIVATE ${FREETYPE_INCLUDE_DIRS}) +target_link_libraries(testfreetype_var PRIVATE ${FREETYPE_LIBRARIES}) +add_test(NAME testfreetype_var COMMAND testfreetype_var) diff --git a/Tests/FindFreetype/Test/main.c b/Tests/FindFreetype/Test/main.c new file mode 100644 index 0000000..bb838a5 --- /dev/null +++ b/Tests/FindFreetype/Test/main.c @@ -0,0 +1,34 @@ +#include +#include +#include FT_FREETYPE_H +#include + +int main() +{ + FT_Library library; + FT_Error error; + + error = FT_Init_FreeType(&library); + if (error) { + return EXIT_FAILURE; + } + + FT_Int major = 0; + FT_Int minor = 0; + FT_Int patch = 0; + FT_Library_Version(library, &major, &minor, &patch); + + char ft_version_string[16]; + snprintf(ft_version_string, 16, "%i.%i.%i", major, minor, patch); + + if (strcmp(ft_version_string, CMAKE_EXPECTED_FREETYPE_VERSION) != 0) { + return EXIT_FAILURE; + } + + error = FT_Done_FreeType(library); + if (error) { + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} -- cgit v0.12