14e8b16d1db5a08135cc08735e0b979cf72fe973
[WebKit.git] / Source / cmake / FindFreetype2.cmake
1 # Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies).
2 #
3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions
5 # are met:
6 # 1. Redistributions of source code must retain the above copyright
7 #    notice, this list of conditions and the following disclaimer.
8 # 2. Redistributions in binary form must reproduce the above copyright
9 #    notice, this list of conditions and the following disclaimer in the
10 #    documentation and/or other materials provided with the distribution.
11 #
12 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
13 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
15 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
16 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
17 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
18 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
19 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
20 # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23
24 find_package(PkgConfig)
25 pkg_check_modules(PC_FREETYPE2 REQUIRED freetype2)
26
27 find_path(FREETYPE2_HEADER_DIR
28     NAMES freetype.h
29     HINTS ${PC_FREETYPE2_INCLUDE_DIRS}
30           ${PC_FREETYPE2_INCLUDEDIR}
31     PATH_SUFFIXES freetype
32 )
33
34 find_path(FREETYPE2_ROOT_INCLUDE_DIR
35     NAMES freetype/freetype.h
36     HINTS ${PC_FREETYPE2_INCLUDE_DIRS}
37           ${PC_FREETYPE2_INCLUDEDIR}
38 )
39
40 find_library(FREETYPE2_LIBRARIES
41     NAMES freetype
42     HINTS ${PC_FREETYPE2_LIBDIR}
43           ${PC_FREETYPE2_LIBRARY_DIRS}
44 )
45
46 set(FREETYPE2_INCLUDE_DIRS ${FREETYPE2_HEADER_DIR})
47
48 # Since Freetype 2.5.1 there is no freetype/freetype.h, so this variable can be null
49 if (FREETYPE2_ROOT_INCLUDE_DIR)
50     list(APPEND FREETYPE2_INCLUDE_DIRS ${FREETYPE2_ROOT_INCLUDE_DIR})
51 endif ()
52
53 # Inspired in the original FindFreetype.cmake
54 if (FREETYPE2_HEADER_DIR AND EXISTS "${FREETYPE2_HEADER_DIR}/freetype.h")
55     file(STRINGS "${FREETYPE2_HEADER_DIR}/freetype.h" freetype_version_str
56          REGEX "^#[\t ]*define[\t ]+FREETYPE_(MAJOR|MINOR|PATCH)[\t ]+[0-9]+$")
57
58     unset(FREETYPE2_VERSION_STRING)
59     foreach (VPART MAJOR MINOR PATCH)
60         foreach (VLINE ${freetype_version_str})
61             if (VLINE MATCHES "^#[\t ]*define[\t ]+FREETYPE_${VPART}")
62                 string(REGEX REPLACE "^#[\t ]*define[\t ]+FREETYPE_${VPART}[\t ]+([0-9]+)$" "\\1"
63                        FREETYPE2_VERSION_PART "${VLINE}")
64                 if (FREETYPE2_VERSION_STRING)
65                     set(FREETYPE2_VERSION_STRING "${FREETYPE2_VERSION_STRING}.${FREETYPE2_VERSION_PART}")
66                 else ()
67                     set(FREETYPE2_VERSION_STRING "${FREETYPE2_VERSION_PART}")
68                 endif ()
69                 unset(FREETYPE2_VERSION_PART)
70             endif ()
71         endforeach ()
72     endforeach ()
73 endif ()
74
75 set(VERSION_OK TRUE)
76 if (FREETYPE2_VERSION_STRING)
77     if (PC_FREETYPE2_FIND_VERSION_EXACT)
78         if (NOT("${Freetype2_FIND_VERSION}" VERSION_EQUAL "${FREETYPE2_VERSION_STRING}"))
79             set(VERSION_OK FALSE)
80         endif ()
81     else ()
82         if ("${FREETYPE2_VERSION_STRING}" VERSION_LESS "${Freetype2_FIND_VERSION}")
83             set(VERSION_OK FALSE)
84         endif ()
85     endif ()
86 endif ()
87
88 FIND_PACKAGE_HANDLE_STANDARD_ARGS(Freetype2 DEFAULT_MSG FREETYPE2_INCLUDE_DIRS FREETYPE2_LIBRARIES VERSION_OK)
89
90 mark_as_advanced(
91     FREETYPE2_HEADER_DIR
92     FREETYPE2_LIBRARIES
93     FREETYPE2_ROOT_INCLUDE_DIR
94 )