0025114: CMake-based build tools for OCCT 7.0
[occt.git] / adm / cmake / freetype.cmake
1 # freetype
2
3 if (NOT DEFINED INSTALL_FREETYPE)
4   set (INSTALL_FREETYPE OFF CACHE BOOL "Is freetype required to be copied into install directory")
5 endif()
6
7 if (NOT DEFINED 3RDPARTY_FREETYPE_DIR)
8   set (3RDPARTY_FREETYPE_DIR "" CACHE PATH "The directory containing freetype")
9 endif()
10
11 # store ENV{FREETYPE_DIR}
12 SET (CACHED_FREETYPE_DIR $ENV{FREETYPE_DIR})
13
14 # include occt macros. compiler_bitness, os_wiht_bit, compiler and build_postfix
15 OCCT_INCLUDE_CMAKE_FILE ("adm/cmake/occt_macros")
16
17 OCCT_MAKE_COMPILER_SHORT_NAME()
18 OCCT_MAKE_COMPILER_BITNESS()
19
20 if (NOT ENV{FREETYPE_DIR})
21   # search for freetype in user defined directory
22   if (NOT 3RDPARTY_FREETYPE_DIR AND 3RDPARTY_DIR)
23     FIND_PRODUCT_DIR("${3RDPARTY_DIR}" FREETYPE FREETYPE_DIR_NAME)
24     if (FREETYPE_DIR_NAME)
25       set (3RDPARTY_FREETYPE_DIR "${3RDPARTY_DIR}/${FREETYPE_DIR_NAME}" CACHE PATH "The directory containing freetype" FORCE)
26     endif()
27   endif()
28
29   if (3RDPARTY_FREETYPE_DIR AND EXISTS "${3RDPARTY_FREETYPE_DIR}")
30     set (ENV{FREETYPE_DIR} "${3RDPARTY_FREETYPE_DIR}")
31   endif()
32 endif()
33
34 if (NOT DEFINED 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build)
35   set (3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build  "" CACHE FILEPATH "the path of ft2build.h")
36 endif()
37
38 if (NOT DEFINED 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2)
39   set (3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2 "" CACHE FILEPATH "the path of freetype2")
40 endif()
41
42 if (NOT DEFINED 3RDPARTY_FREETYPE_LIBRARY OR NOT 3RDPARTY_FREETYPE_LIBRARY_DIR)
43   set (3RDPARTY_FREETYPE_LIBRARY               "" CACHE FILEPATH "freetype library")
44 endif()
45
46 if (NOT DEFINED 3RDPARTY_FREETYPE_LIBRARY_DIR)
47   set (3RDPARTY_FREETYPE_LIBRARY_DIR           "" CACHE FILEPATH "The directory containing freetype library")
48 endif()
49
50 if (WIN32)
51   if (NOT DEFINED 3RDPARTY_FREETYPE_DLL OR NOT 3RDPARTY_FREETYPE_DLL_DIR)
52     set (3RDPARTY_FREETYPE_DLL                   "" CACHE FILEPATH "freetype shared library")
53   endif()
54 endif()
55
56 if (WIN32)
57   if (NOT DEFINED 3RDPARTY_FREETYPE_DLL_DIR)
58     set (3RDPARTY_FREETYPE_DLL_DIR               "" CACHE FILEPATH "The directory containing freetype shared library")
59   endif()
60 endif()
61
62 find_package(Freetype)
63
64 # ft2build header
65 if (FREETYPE_INCLUDE_DIR_ft2build AND EXISTS "${FREETYPE_INCLUDE_DIR_ft2build}")
66   if (NOT 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build)
67     set (3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build  "${FREETYPE_INCLUDE_DIR_ft2build}" CACHE FILEPATH "the path of ft2build.h" FORCE)
68   endif()
69 endif()
70
71 if (NOT FREETYPE_INCLUDE_DIR_freetype2 OR NOT EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}")
72   # cmake (version is < 3.0) doesn't find ftheader.h of freetype (version is >= 2.5.1)
73   # do search taking into account freetype structure of 2.5.1 version
74   find_path (FREETYPE_INCLUDE_DIR_freetype2 NAMES
75                                              freetype/config/ftheader.h
76                                              config/ftheader.h
77                                            HINTS
78                                              ENV FREETYPE_DIR
79                                            PATHS
80                                              /usr/X11R6
81                                              /usr/local/X11R6
82                                              /usr/local/X11
83                                              /usr/freeware
84                                            PATH_SUFFIXES include/freetype2 include freetype2
85                                            NO_DEFAULT_PATH)
86   find_path (FREETYPE_INCLUDE_DIR_freetype2 NAMES freetype/config/ftheader.h config/ftheader.h)
87 elseif (FREETYPE_INCLUDE_DIR_freetype2 OR EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}")
88   if (3RDPARTY_FREETYPE_DIR AND EXISTS "${3RDPARTY_FREETYPE_DIR}")
89     get_filename_component (3RDPARTY_FREETYPE_DIR_ABS "${3RDPARTY_FREETYPE_DIR}" ABSOLUTE)
90     get_filename_component (FREETYPE_INCLUDE_DIR_freetype2_ABS "${FREETYPE_INCLUDE_DIR_freetype2}" ABSOLUTE)
91
92     string (REGEX MATCH "${3RDPARTY_FREETYPE_DIR_ABS}" DOES_PATH_CONTAIN "${FREETYPE_INCLUDE_DIR_freetype2_ABS}")
93
94     if (NOT DOES_PATH_CONTAIN) # if cmake found freetype2 at different place from 3RDPARTY_FREETYPE_DIR
95       # search for freetype2 in 3RDPARTY_FREETYPE_DIR and if it will be found - replace freetyp2 path by new one
96       set (TMP_FREETYPE2 "TMP_FREETYPE2-NOTFOUND" CACHE FILEPATH "" FORCE)
97       find_path (TMP_FREETYPE2 NAMES freetype/config/ftheader.h config/ftheader.h
98                                PATHS "${3RDPARTY_FREETYPE_DIR}"
99                                PATH_SUFFIXES include/freetype2 include freetype2
100                                NO_DEFAULT_PATH)
101
102       if (TMP_FREETYPE2 OR NOT EXISTS "${TMP_FREETYPE2}")
103         set (3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2 "${TMP_FREETYPE2}" CACHE FILEPATH "the path of freetype2" FORCE)
104
105         # hide and remove TMP_FREETYPE2
106         mark_as_advanced (TMP_FREETYPE2)
107         unset (TMP_FREETYPE2)
108       endif()
109     endif()
110   endif()
111 endif()
112
113 # return ENV{FREETYPE_DIR}
114 SET (ENV{FREETYPE_DIR} ${CACHED_FREETYPE_DIR})
115
116 # freetype2 header
117 if (FREETYPE_INCLUDE_DIR_freetype2 AND EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}")
118   if (NOT 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2)
119     set (3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2 "${FREETYPE_INCLUDE_DIR_freetype2}" CACHE FILEPATH "the path of freetype2" FORCE)
120   endif()
121 endif()
122
123 if (NOT 3RDPARTY_FREETYPE_LIBRARY_DIR)
124   set (3RDPARTY_FREETYPE_LIBRARY "" CACHE FILEPATH "freetype library" FORCE)
125 elseif (3RDPARTY_FREETYPE_LIBRARY AND EXISTS "${3RDPARTY_FREETYPE_LIBRARY}")
126   get_filename_component(3RDPARTY_FREETYPE_LIBRARY_DIR_TMP "${3RDPARTY_FREETYPE_LIBRARY}" PATH)
127   if (NOT "${3RDPARTY_FREETYPE_LIBRARY_DIR}" STREQUAL "${3RDPARTY_FREETYPE_LIBRARY_DIR_TMP}")
128     set (3RDPARTY_FREETYPE_LIBRARY "" CACHE FILEPATH "freetype library" FORCE)
129   endif()
130 endif()
131
132 if (WIN32)
133   if (NOT 3RDPARTY_FREETYPE_DLL_DIR)
134     set (3RDPARTY_FREETYPE_DLL "" CACHE FILEPATH "freetype shared library" FORCE)
135   elseif (3RDPARTY_FREETYPE_DLL AND EXISTS "${3RDPARTY_FREETYPE_DLL}")
136     get_filename_component(3RDPARTY_FREETYPE_DLL_DIR_TMP "${3RDPARTY_FREETYPE_DLL}" PATH)
137     if (NOT "${3RDPARTY_FREETYPE_DLL_DIR}" STREQUAL "${3RDPARTY_FREETYPE_DLL_DIR_TMP}")
138       set (3RDPARTY_FREETYPE_DLL "" CACHE FILEPATH "freetype shared library" FORCE)
139     endif()
140   endif()
141 endif()
142
143 # freetype library
144 if (FREETYPE_LIBRARY AND EXISTS "${FREETYPE_LIBRARY}")
145   if (NOT 3RDPARTY_FREETYPE_LIBRARY)
146     set (3RDPARTY_FREETYPE_LIBRARY "${FREETYPE_LIBRARY}" CACHE FILEPATH "freetype library" FORCE)
147   endif()
148
149   if (3RDPARTY_FREETYPE_LIBRARY AND EXISTS "${3RDPARTY_FREETYPE_LIBRARY}")
150     get_filename_component (3RDPARTY_FREETYPE_LIBRARY_DIR "${3RDPARTY_FREETYPE_LIBRARY}" PATH)
151     set (3RDPARTY_FREETYPE_LIBRARY_DIR "${3RDPARTY_FREETYPE_LIBRARY_DIR}" CACHE FILEPATH "The directory containing freetype library" FORCE)
152   endif()
153
154   if (WIN32)
155     set (CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".dll")
156
157     if (NOT 3RDPARTY_FREETYPE_DLL OR NOT EXISTS "${3RDPARTY_FREETYPE_DLL}")
158       get_filename_component (FREETYPE_LIBRARY_PARENT_DIR "${3RDPARTY_FREETYPE_LIBRARY_DIR}" PATH) # parent of the library directory
159
160       set (3RDPARTY_FREETYPE_DLL "3RDPARTY_FREETYPE_DLL-NOTFOUND" CACHE FILEPATH "freetype shared library" FORCE)
161       find_library (3RDPARTY_FREETYPE_DLL freetype PATHS "${FREETYPE_LIBRARY_PARENT_DIR}/bin" NO_DEFAULT_PATH)
162     endif()
163
164     if (3RDPARTY_FREETYPE_DLL AND EXISTS "${3RDPARTY_FREETYPE_DLL}")
165       get_filename_component (3RDPARTY_FREETYPE_DLL_DIR "${3RDPARTY_FREETYPE_DLL}" PATH)
166       set (3RDPARTY_FREETYPE_DLL_DIR "${3RDPARTY_FREETYPE_DLL_DIR}" CACHE FILEPATH "The directory containing freetype shared library" FORCE)
167     endif()
168   endif()
169 endif()
170
171
172 if (NOT 3RDPARTY_FREETYPE_LIBRARY_DIR OR NOT EXISTS "${3RDPARTY_FREETYPE_LIBRARY_DIR}")
173   set (3RDPARTY_FREETYPE_LIBRARY_DIR "" CACHE FILEPATH "The directory containing freetype library" FORCE)
174 endif()
175
176 if (WIN32)
177   if (NOT 3RDPARTY_FREETYPE_DLL_DIR OR NOT EXISTS "${3RDPARTY_FREETYPE_DLL_DIR}")
178     set (3RDPARTY_FREETYPE_DLL_DIR "" CACHE FILEPATH "The directory containing shared freetype library" FORCE)
179   endif()
180 endif()
181
182 # include found paths to common variables
183 if (3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build)
184   list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build}")
185 else()
186   list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build)
187 endif()
188
189 if (3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2)
190   list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2}")
191 else()
192   list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2)
193 endif()
194
195 if (3RDPARTY_FREETYPE_LIBRARY)
196   list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_FREETYPE_LIBRARY_DIR}")
197 else()
198   list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FREETYPE_LIBRARY_DIR)
199 endif()
200
201 if (WIN32)
202   if (NOT 3RDPARTY_FREETYPE_DLL OR NOT EXISTS "${3RDPARTY_FREETYPE_DLL}")
203     list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FREETYPE_DLL_DIR)
204   endif()
205 endif()
206
207 if (INSTALL_FREETYPE)
208
209   OCCT_MAKE_OS_WITH_BITNESS()
210   OCCT_MAKE_BUILD_POSTFIX()
211
212   if (WIN32)
213     install (FILES "${3RDPARTY_FREETYPE_DLL}"     DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BUILD_POSTFIX}")
214   else()
215     get_filename_component(ABS_PATH ${3RDPARTY_FREETYPE_LIBRARY} REALPATH)
216     get_filename_component(FREETYPELIB ${3RDPARTY_FREETYPE_LIBRARY} NAME)
217     install (FILES "${ABS_PATH}" DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BUILD_POSTFIX}" RENAME ${FREETYPELIB}.6)
218   endif()
219
220   set (USED_3RDPARTY_FREETYPE_DIR "")
221 else()
222   # the library directory for using by the executable
223   if (WIN32)
224     set (USED_3RDPARTY_FREETYPE_DIR ${3RDPARTY_FREETYPE_DLL_DIR})
225   else()
226     set (USED_3RDPARTY_FREETYPE_DIR ${3RDPARTY_FREETYPE_LIBRARY_DIR})
227   endif()
228 endif()
229
230 # unset all redundant variables
231 OCCT_CHECK_AND_UNSET(FREETYPE_INCLUDE_DIR_ft2build)
232 OCCT_CHECK_AND_UNSET(FREETYPE_INCLUDE_DIR_freetype2)
233 OCCT_CHECK_AND_UNSET(FREETYPE_LIBRARY)
234
235 mark_as_advanced (3RDPARTY_FREETYPE_LIBRARY 3RDPARTY_FREETYPE_DLL)