0025624: Visualization - selection is incorrect in perspective mode in a specific...
[occt.git] / adm / templates / freetype.cmake
CommitLineData
9f33b387 1# freetype
2
3if (NOT DEFINED INSTALL_FREETYPE)
4 set (INSTALL_FREETYPE OFF CACHE BOOL "Is freetype required to be copied into install directory")
5endif()
6
7if (NOT DEFINED 3RDPARTY_FREETYPE_DIR)
8 set (3RDPARTY_FREETYPE_DIR "" CACHE PATH "The directory containing freetype")
9endif()
10
11# store ENV{FREETYPE_DIR}
12SET (CACHED_FREETYPE_DIR $ENV{FREETYPE_DIR})
13
14# include occt macros. compiler_bitness, os_wiht_bit, compiler and build_postfix
15OCCT_INCLUDE_CMAKE_FILE ("adm/templates/occt_macros")
16
17OCCT_MAKE_COMPILER_SHORT_NAME()
18OCCT_MAKE_COMPILER_BITNESS()
19
20if (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()
32endif()
33
34if (NOT DEFINED 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build)
35 set (3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build "" CACHE FILEPATH "the path of ft2build.h")
36endif()
37
38if (NOT DEFINED 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2)
39 set (3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2 "" CACHE FILEPATH "the path of freetype2")
40endif()
41
42if (NOT DEFINED 3RDPARTY_FREETYPE_LIBRARY OR NOT 3RDPARTY_FREETYPE_LIBRARY_DIR)
43 set (3RDPARTY_FREETYPE_LIBRARY "" CACHE FILEPATH "freetype library")
44endif()
45
46if (NOT DEFINED 3RDPARTY_FREETYPE_LIBRARY_DIR)
47 set (3RDPARTY_FREETYPE_LIBRARY_DIR "" CACHE FILEPATH "The directory containing freetype library")
48endif()
49
50if (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()
54endif()
55
56if (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()
60endif()
61
62message (STATUS "Info: CMake default freetype search start...")
63find_package(Freetype)
64message (STATUS "Info: CMake default freetype search end")
65
66# ft2build header
67if (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()
71endif()
72
73if (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()
96elseif (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()
120endif()
121
122# return ENV{FREETYPE_DIR}
123SET (ENV{FREETYPE_DIR} ${CACHED_FREETYPE_DIR})
124
125# freetype2 header
126if (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()
130endif()
131
132if (NOT 3RDPARTY_FREETYPE_LIBRARY_DIR)
133 set (3RDPARTY_FREETYPE_LIBRARY "" CACHE FILEPATH "freetype library" FORCE)
134elseif (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()
139endif()
140
141if (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()
150endif()
151
152# freetype library
153if (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()
178endif()
179
180
181if (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)
183endif()
184
185if (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()
189endif()
190
191# include found paths to common variables
192if (3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build)
193 list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build}")
194else()
195 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build)
196endif()
197
198if (3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2)
199 list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2}")
200else()
201 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2)
202endif()
203
204if (3RDPARTY_FREETYPE_LIBRARY)
205 list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_FREETYPE_LIBRARY_DIR}")
206else()
207 list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FREETYPE_LIBRARY_DIR)
208endif()
209
210if (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()
214endif()
215
216if (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()
226endif()
227
228# unset all redundant variables
229OCCT_CHECK_AND_UNSET(FREETYPE_INCLUDE_DIR_ft2build)
230OCCT_CHECK_AND_UNSET(FREETYPE_INCLUDE_DIR_freetype2)
231OCCT_CHECK_AND_UNSET(FREETYPE_LIBRARY)
232
233mark_as_advanced (3RDPARTY_FREETYPE_LIBRARY 3RDPARTY_FREETYPE_DLL)