FindFreetype: Add imported target, docs, and test

This commit is contained in:
Ben Morgan 2017-08-31 16:34:41 +01:00
parent b7b9bae54a
commit 457c202196
5 changed files with 123 additions and 12 deletions

View File

@ -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()

View File

@ -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()

View File

@ -0,0 +1,10 @@
add_test(NAME FindFreetype.Test COMMAND
${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION>
--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 $<CONFIGURATION>
)

View File

@ -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)

View File

@ -0,0 +1,34 @@
#include <ft2build.h>
#include <stdlib.h>
#include FT_FREETYPE_H
#include <string.h>
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;
}