6f88830ccb4723e8781eb6400d366b86b354bfc8
[occt.git] / adm / templates / 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/templates/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 message (STATUS "Info: CMake default freetype search start...")
63 find_package(Freetype)
64 message (STATUS "Info: CMake default freetype search end")
65
66 # ft2build header
67 if (FREETYPE_INCLUDE_DIR_ft2build AND EXISTS "${FREETYPE_INCLUDE_DIR_ft2build}")
68   if (NOT 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build)
69     set (3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build  "${FREETYPE_INCLUDE_DIR_ft2build}" CACHE FILEPATH "the path of ft2build.h" FORCE)
70   endif()
71 endif()
72
73 if (NOT FREETYPE_INCLUDE_DIR_freetype2 OR NOT EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}")
74   # cmake (version is < 3.0) doesn't find ftheader.h of freetype (version is >= 2.5.1)
75   # do search taking into account freetype structure of 2.5.1 version
76   message (STATUS "Info: CMake default search doesn't found FREETYPE_INCLUDE_DIR_freetype2")
77   find_path (FREETYPE_INCLUDE_DIR_freetype2 NAMES
78                                              freetype/config/ftheader.h
79                                              config/ftheader.h
80                                            HINTS
81                                              ENV FREETYPE_DIR
82                                            PATHS
83                                              /usr/X11R6
84                                              /usr/local/X11R6
85                                              /usr/local/X11
86                                              /usr/freeware
87                                            PATH_SUFFIXES include/freetype2 include freetype2
88                                            NO_DEFAULT_PATH)
89   find_path (FREETYPE_INCLUDE_DIR_freetype2 NAMES freetype/config/ftheader.h config/ftheader.h)
90   
91   if (NOT FREETYPE_INCLUDE_DIR_freetype2 OR NOT EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}")
92     message (STATUS "Info: FREETYPE_INCLUDE_DIR_freetype2 is NOT found by additional search")
93   else()
94     message (STATUS "Info: FREETYPE_INCLUDE_DIR_freetype2 is found by additional search")
95   endif()
96 elseif (FREETYPE_INCLUDE_DIR_freetype2 OR EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}")
97   if (3RDPARTY_FREETYPE_DIR AND EXISTS "${3RDPARTY_FREETYPE_DIR}")
98     get_filename_component (3RDPARTY_FREETYPE_DIR_ABS "${3RDPARTY_FREETYPE_DIR}" ABSOLUTE)
99     get_filename_component (FREETYPE_INCLUDE_DIR_freetype2_ABS "${FREETYPE_INCLUDE_DIR_freetype2}" ABSOLUTE)
100
101     string (REGEX MATCH "${3RDPARTY_FREETYPE_DIR_ABS}" DOES_PATH_CONTAIN "${FREETYPE_INCLUDE_DIR_freetype2_ABS}")
102
103     if (NOT DOES_PATH_CONTAIN) # if cmake found freetype2 at different place from 3RDPARTY_FREETYPE_DIR
104       # search for freetype2 in 3RDPARTY_FREETYPE_DIR and if it will be found - replace freetyp2 path by new one
105       set (TMP_FREETYPE2 "TMP_FREETYPE2-NOTFOUND" CACHE FILEPATH "" FORCE)
106       find_path (TMP_FREETYPE2 NAMES freetype/config/ftheader.h config/ftheader.h
107                                PATHS "${3RDPARTY_FREETYPE_DIR}"
108                                PATH_SUFFIXES include/freetype2 include freetype2
109                                NO_DEFAULT_PATH)
110
111       if (TMP_FREETYPE2 OR NOT EXISTS "${TMP_FREETYPE2}")
112         set (3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2 "${TMP_FREETYPE2}" CACHE FILEPATH "the path of freetype2" FORCE)
113         
114         # hide and remove TMP_FREETYPE2
115         mark_as_advanced (TMP_FREETYPE2)
116         unset (TMP_FREETYPE2)
117       endif()
118     endif()
119   endif()
120 endif()
121
122 # return ENV{FREETYPE_DIR}
123 SET (ENV{FREETYPE_DIR} ${CACHED_FREETYPE_DIR})
124
125 # freetype2 header
126 if (FREETYPE_INCLUDE_DIR_freetype2 AND EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}")
127   if (NOT 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2)
128     set (3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2 "${FREETYPE_INCLUDE_DIR_freetype2}" CACHE FILEPATH "the path of freetype2" FORCE)
129   endif()
130 endif()
131
132 if (NOT 3RDPARTY_FREETYPE_LIBRARY_DIR)
133   set (3RDPARTY_FREETYPE_LIBRARY "" CACHE FILEPATH "freetype library" FORCE)
134 elseif (3RDPARTY_FREETYPE_LIBRARY AND EXISTS "${3RDPARTY_FREETYPE_LIBRARY}")
135   get_filename_component(3RDPARTY_FREETYPE_LIBRARY_DIR_TMP "${3RDPARTY_FREETYPE_LIBRARY}" PATH)
136   if (NOT "${3RDPARTY_FREETYPE_LIBRARY_DIR}" STREQUAL "${3RDPARTY_FREETYPE_LIBRARY_DIR_TMP}")
137     set (3RDPARTY_FREETYPE_LIBRARY "" CACHE FILEPATH "freetype library" FORCE)
138   endif()
139 endif()
140
141 if (WIN32)
142   if (NOT 3RDPARTY_FREETYPE_DLL_DIR)
143     set (3RDPARTY_FREETYPE_DLL "" CACHE FILEPATH "freetype shared library" FORCE)
144   elseif (3RDPARTY_FREETYPE_DLL AND EXISTS "${3RDPARTY_FREETYPE_DLL}")
145     get_filename_component(3RDPARTY_FREETYPE_DLL_DIR_TMP "${3RDPARTY_FREETYPE_DLL}" PATH)
146     if (NOT "${3RDPARTY_FREETYPE_DLL_DIR}" STREQUAL "${3RDPARTY_FREETYPE_DLL_DIR_TMP}")
147       set (3RDPARTY_FREETYPE_DLL "" CACHE FILEPATH "freetype shared library" FORCE)
148     endif()
149   endif()
150 endif()
151
152 # freetype library
153 if (FREETYPE_LIBRARY AND EXISTS "${FREETYPE_LIBRARY}")
154   if (NOT 3RDPARTY_FREETYPE_LIBRARY)
155     set (3RDPARTY_FREETYPE_LIBRARY "${FREETYPE_LIBRARY}" CACHE FILEPATH "freetype library" FORCE)
156   endif()
157   
158   if (3RDPARTY_FREETYPE_LIBRARY AND EXISTS "${3RDPARTY_FREETYPE_LIBRARY}")
159     get_filename_component (3RDPARTY_FREETYPE_LIBRARY_DIR "${3RDPARTY_FREETYPE_LIBRARY}" PATH)
160     set (3RDPARTY_FREETYPE_LIBRARY_DIR "${3RDPARTY_FREETYPE_LIBRARY_DIR}" CACHE FILEPATH "The directory containing freetype library" FORCE)
161   endif()
162
163   if (WIN32)
164     set (CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".dll")
165
166     if (NOT 3RDPARTY_FREETYPE_DLL OR NOT EXISTS "${3RDPARTY_FREETYPE_DLL}")
167       get_filename_component (FREETYPE_LIBRARY_PARENT_DIR "${3RDPARTY_FREETYPE_LIBRARY_DIR}" PATH) # parent of the library directory
168
169       set (3RDPARTY_FREETYPE_DLL "3RDPARTY_FREETYPE_DLL-NOTFOUND" CACHE FILEPATH "freetype shared library" FORCE)
170       find_library (3RDPARTY_FREETYPE_DLL freetype PATHS "${FREETYPE_LIBRARY_PARENT_DIR}/bin" NO_DEFAULT_PATH)
171     endif()
172     
173     if (3RDPARTY_FREETYPE_DLL AND EXISTS "${3RDPARTY_FREETYPE_DLL}")
174       get_filename_component (3RDPARTY_FREETYPE_DLL_DIR "${3RDPARTY_FREETYPE_DLL}" PATH)
175       set (3RDPARTY_FREETYPE_DLL_DIR "${3RDPARTY_FREETYPE_DLL_DIR}" CACHE FILEPATH "The directory containing freetype shared library" FORCE)
176     endif()
177   endif()
178 endif()
179
180
181 if (NOT 3RDPARTY_FREETYPE_LIBRARY_DIR OR NOT EXISTS "${3RDPARTY_FREETYPE_LIBRARY_DIR}")
182   set (3RDPARTY_FREETYPE_LIBRARY_DIR "" CACHE FILEPATH "The directory containing freetype library" FORCE)
183 endif()
184
185 if (WIN32)
186   if (NOT 3RDPARTY_FREETYPE_DLL_DIR OR NOT EXISTS "${3RDPARTY_FREETYPE_DLL_DIR}")
187     set (3RDPARTY_FREETYPE_DLL_DIR "" CACHE FILEPATH "The directory containing shared freetype library" FORCE)
188   endif()
189 endif()
190
191 # include found paths to common variables
192 if (3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build)
193   list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build}")
194 else()
195   list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build)
196 endif()
197
198 if (3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2)
199   list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2}")
200 else()
201   list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2)
202 endif()
203
204 if (3RDPARTY_FREETYPE_LIBRARY)
205   list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_FREETYPE_LIBRARY_DIR}")
206 else()
207   list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FREETYPE_LIBRARY_DIR)
208 endif()
209
210 if (WIN32)
211   if (NOT 3RDPARTY_FREETYPE_DLL OR NOT EXISTS "${3RDPARTY_FREETYPE_DLL}")
212     list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FREETYPE_DLL_DIR)
213   endif()
214 endif()
215
216 if (INSTALL_FREETYPE)
217
218   OCCT_MAKE_OS_WITH_BITNESS()
219   OCCT_MAKE_BUILD_POSTFIX()
220
221   if (WIN32)
222     install (FILES "${3RDPARTY_FREETYPE_DLL}"     DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BUILD_POSTFIX}")
223   else()
224     install (FILES "${3RDPARTY_FREETYPE_LIBRARY}" DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BUILD_POSTFIX}")
225   endif()
226
227   set (USED_3RDPARTY_FREETYPE_DIR "")
228 else()
229   # the library directory for using by the executable
230   if (WIN32)
231     set (USED_3RDPARTY_FREETYPE_DIR ${3RDPARTY_FREETYPE_DLL_DIR})
232   else()
233     set (USED_3RDPARTY_FREETYPE_DIR ${3RDPARTY_FREETYPE_LIBRARY_DIR})
234   endif()
235 endif()
236
237 # unset all redundant variables
238 OCCT_CHECK_AND_UNSET(FREETYPE_INCLUDE_DIR_ft2build)
239 OCCT_CHECK_AND_UNSET(FREETYPE_INCLUDE_DIR_freetype2)
240 OCCT_CHECK_AND_UNSET(FREETYPE_LIBRARY)
241
242 mark_as_advanced (3RDPARTY_FREETYPE_LIBRARY 3RDPARTY_FREETYPE_DLL)