From bd804d30a4d5cb19fbb3bd1b0e8ee2483c866f5e Mon Sep 17 00:00:00 2001 From: Roman Proskuryakov Date: Mon, 9 May 2016 19:33:38 +0300 Subject: [PATCH] Rewrites FindFreetype using LibFindMacros --- cmake/FindFreetype.cmake | 131 ++++++++++++++++++++++++--------------- 1 file changed, 81 insertions(+), 50 deletions(-) diff --git a/cmake/FindFreetype.cmake b/cmake/FindFreetype.cmake index fc36d548e..a5f825098 100644 --- a/cmake/FindFreetype.cmake +++ b/cmake/FindFreetype.cmake @@ -8,62 +8,93 @@ #------------------------------------------------------------------- # - Try to find FreeType +# +# This module accepts the following env variable +# FREETYPE_SDK - Can be set to custom install path +# # Once done, this will define # -# FREETYPE_FOUND - system has FreeType -# FREETYPE_INCLUDE_DIRS - the FreeType include directories -# FREETYPE_LIBRARIES - link these to use FreeType - -include(FindPkgMacros) -findpkg_begin(FREETYPE) +# Freetype_FOUND - system has FreeType +# Freetype_INCLUDE_DIRS - the FreeType include directories +# Freetype_LIBRARIES - link these to use FreeType +# Freetype_VERSION - version of FreeType +# +# libfreetype internals: +# +# ====================================== +# new versions (2.5.2) +# +# file structure: +# /include/freetype2/ft2build.h +# /include/freetype2/freetype.h +# used as: +# #include +# #include +# requires: +# -I /include/freetype2/ +# +# ====================================== +# old versions (2.4.8, 2.3.5) +# +# file structure: +# /include/ft2build.h +# /include/freetype2/freetype/freetype.h +# used as: +# #include +# #include +# requires: +# -I /include/ -I /include/freetype2/ +# +# ====================================== -# Get path, convert backslashes as ${ENV_${var}} -getenv_path(FREETYPE_HOME) +include(LibFindMacros) +include(PreprocessorUtils) -# construct search paths -set(FREETYPE_PREFIX_PATH ${FREETYPE_HOME} ${ENV_FREETYPE_HOME}) -create_search_paths(FREETYPE) -# redo search if prefix path changed -clear_if_changed(FREETYPE_PREFIX_PATH - FREETYPE_LIBRARY_FWK - FREETYPE_LIBRARY_REL - FREETYPE_LIBRARY_DBG - FREETYPE_INCLUDE_DIR +set(_REGULAR_INSTALL_PATHS + /usr/X11R6 + /usr/local/X11R6 + /usr/local/X11 + /usr/freeware + ENV GTKMM_BASEPATH + [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path] + [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path] ) -set(FREETYPE_LIBRARY_NAMES freetype2311 freetype239 freetype238 freetype235 freetype219 freetype) -get_debug_names(FREETYPE_LIBRARY_NAMES) - -use_pkgconfig(FREETYPE_PKGC freetype2) - -# prefer static library over framework -set(CMAKE_FIND_FRAMEWORK "LAST") - -message(STATUS "CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}") -findpkg_framework(FREETYPE) -message(STATUS "CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}") - -find_path(FREETYPE_INCLUDE_DIR NAMES freetype/freetype.h HINTS ${FREETYPE_INC_SEARCH_PATH} ${FREETYPE_PKGC_INCLUDE_DIRS} PATH_SUFFIXES freetype2) -find_path(FREETYPE_FT2BUILD_INCLUDE_DIR NAMES ft2build.h HINTS ${FREETYPE_INC_SEARCH_PATH} ${FREETYPE_PKGC_INCLUDE_DIRS}) - -if (SYMBIAN) -set(ORIGINAL_CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH}) -set(CMAKE_PREFIX_PATH ${CMAKE_SYSYEM_OUT_DIR}) -message(STATUS "Lib will be searched in Symbian out dir: ${CMAKE_SYSYEM_OUT_DIR}") -endif (SYMBIAN) -find_library(FREETYPE_LIBRARY_REL NAMES ${FREETYPE_LIBRARY_NAMES} HINTS ${FREETYPE_LIB_SEARCH_PATH} ${FREETYPE_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" release relwithdebinfo minsizerel) -find_library(FREETYPE_LIBRARY_DBG NAMES ${FREETYPE_LIBRARY_NAMES_DBG} HINTS ${FREETYPE_LIB_SEARCH_PATH} ${FREETYPE_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" debug) -if (SYMBIAN) -set(CMAKE_PREFIX_PATH ${ORIGINAL_CMAKE_PREFIX_PATH}) -endif (SYMBIAN) +libfind_pkg_detect(Freetype freetype2 + FIND_PATH ft2build.h + HINTS $ENV{FREETYPE_SDK} + PATHS ${_REGULAR_INSTALL_PATHS} + PATH_SUFFIXES include freetype2 + FIND_LIBRARY freetype freetype2311 freetype239 freetype238 freetype235 freetype219 + HINTS $ENV{FREETYPE_SDK} + PATHS ${_REGULAR_INSTALL_PATHS} + PATH_SUFFIXES lib +) +find_path(Freetype_OLD_INCLUDE_DIR + # in new versions of freetype old_include_dir equals to include_dir + # see explanation above + NAMES freetype/freetype.h freetype.h + PATHS ${Freetype_INCLUDE_DIR} + PATH_SUFFIXES freetype2 + NO_DEFAULT_PATH +) -make_library_set(FREETYPE_LIBRARY) +# get version from freetype.h +find_file(Freetype_HEADER + NAMES freetype.h + PATH_SUFFIXES freetype + PATHS ${Freetype_OLD_INCLUDE_DIR} +) +if (Freetype_HEADER) + get_version_from_n_defines(Freetype_VERSION + ${Freetype_HEADER} + FREETYPE_MAJOR FREETYPE_MINOR FREETYPE_PATCH + ) +endif() -findpkg_finish(FREETYPE) -mark_as_advanced(FREETYPE_FT2BUILD_INCLUDE_DIR) -if (NOT FREETYPE_FT2BUILD_INCLUDE_DIR STREQUAL FREETYPE_INCLUDE_DIR) - set(FREETYPE_INCLUDE_DIRS ${FREETYPE_INCLUDE_DIRS} ${FREETYPE_FT2BUILD_INCLUDE_DIR}) -endif () +set(Freetype_PROCESS_INCLUDES Freetype_INCLUDE_DIR Freetype_OLD_INCLUDE_DIR) +libfind_process(Freetype) -# Reset framework finding -set(CMAKE_FIND_FRAMEWORK "FIRST") +if (Freetype_INCLUDE_DIRS) + list(REMOVE_DUPLICATES Freetype_INCLUDE_DIRS) +endif()