0024888: Refactoring of OCCT CMake meta-project
[occt.git] / adm / templates / freetype.cmake
diff --git a/adm/templates/freetype.cmake b/adm/templates/freetype.cmake
new file mode 100644 (file)
index 0000000..b787096
--- /dev/null
@@ -0,0 +1,233 @@
+# freetype
+
+if (NOT DEFINED INSTALL_FREETYPE)
+  set (INSTALL_FREETYPE OFF CACHE BOOL "Is freetype required to be copied into install directory")
+endif()
+
+if (NOT DEFINED 3RDPARTY_FREETYPE_DIR)
+  set (3RDPARTY_FREETYPE_DIR "" CACHE PATH "The directory containing freetype")
+endif()
+
+# store ENV{FREETYPE_DIR}
+SET (CACHED_FREETYPE_DIR $ENV{FREETYPE_DIR})
+
+# include occt macros. compiler_bitness, os_wiht_bit, compiler and build_postfix
+OCCT_INCLUDE_CMAKE_FILE ("adm/templates/occt_macros")
+
+OCCT_MAKE_COMPILER_SHORT_NAME()
+OCCT_MAKE_COMPILER_BITNESS()
+
+if (NOT ENV{FREETYPE_DIR})
+  # search for freetype in user defined directory
+  if (NOT 3RDPARTY_FREETYPE_DIR AND 3RDPARTY_DIR)
+    FIND_PRODUCT_DIR("${3RDPARTY_DIR}" FREETYPE FREETYPE_DIR_NAME)
+    if (FREETYPE_DIR_NAME)
+      set (3RDPARTY_FREETYPE_DIR "${3RDPARTY_DIR}/${FREETYPE_DIR_NAME}" CACHE PATH "The directory containing freetype" FORCE)
+    endif()
+  endif()
+
+  if (3RDPARTY_FREETYPE_DIR AND EXISTS "${3RDPARTY_FREETYPE_DIR}")
+    set (ENV{FREETYPE_DIR} "${3RDPARTY_FREETYPE_DIR}")
+  endif()
+endif()
+
+if (NOT DEFINED 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build)
+  set (3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build  "" CACHE FILEPATH "the path of ft2build.h")
+endif()
+
+if (NOT DEFINED 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2)
+  set (3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2 "" CACHE FILEPATH "the path of freetype2")
+endif()
+
+if (NOT DEFINED 3RDPARTY_FREETYPE_LIBRARY OR NOT 3RDPARTY_FREETYPE_LIBRARY_DIR)
+  set (3RDPARTY_FREETYPE_LIBRARY               "" CACHE FILEPATH "freetype library")
+endif()
+
+if (NOT DEFINED 3RDPARTY_FREETYPE_LIBRARY_DIR)
+  set (3RDPARTY_FREETYPE_LIBRARY_DIR           "" CACHE FILEPATH "The directory containing freetype library")
+endif()
+
+if (WIN32)
+  if (NOT DEFINED 3RDPARTY_FREETYPE_DLL OR NOT 3RDPARTY_FREETYPE_DLL_DIR)
+    set (3RDPARTY_FREETYPE_DLL                   "" CACHE FILEPATH "freetype shared library")
+  endif()
+endif()
+
+if (WIN32)
+  if (NOT DEFINED 3RDPARTY_FREETYPE_DLL_DIR)
+    set (3RDPARTY_FREETYPE_DLL_DIR               "" CACHE FILEPATH "The directory containing freetype shared library")
+  endif()
+endif()
+
+message (STATUS "Info: CMake default freetype search start...")
+find_package(Freetype)
+message (STATUS "Info: CMake default freetype search end")
+
+# ft2build header
+if (FREETYPE_INCLUDE_DIR_ft2build AND EXISTS "${FREETYPE_INCLUDE_DIR_ft2build}")
+  if (NOT 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build)
+    set (3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build  "${FREETYPE_INCLUDE_DIR_ft2build}" CACHE FILEPATH "the path of ft2build.h" FORCE)
+  endif()
+endif()
+
+if (NOT FREETYPE_INCLUDE_DIR_freetype2 OR NOT EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}")
+  # cmake (version is < 3.0) doesn't find ftheader.h of freetype (version is >= 2.5.1)
+  # do search taking into account freetype structure of 2.5.1 version
+  message (STATUS "Info: CMake default search doesn't found FREETYPE_INCLUDE_DIR_freetype2")
+  find_path (FREETYPE_INCLUDE_DIR_freetype2 NAMES
+                                             freetype/config/ftheader.h
+                                             config/ftheader.h
+                                           HINTS
+                                             ENV FREETYPE_DIR
+                                           PATHS
+                                             /usr/X11R6
+                                             /usr/local/X11R6
+                                             /usr/local/X11
+                                             /usr/freeware
+                                           PATH_SUFFIXES include/freetype2 include freetype2
+                                           NO_DEFAULT_PATH)
+  find_path (FREETYPE_INCLUDE_DIR_freetype2 NAMES freetype/config/ftheader.h config/ftheader.h)
+  
+  if (NOT FREETYPE_INCLUDE_DIR_freetype2 OR NOT EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}")
+    message (STATUS "Info: FREETYPE_INCLUDE_DIR_freetype2 is NOT found by additional search")
+  else()
+    message (STATUS "Info: FREETYPE_INCLUDE_DIR_freetype2 is found by additional search")
+  endif()
+elseif (FREETYPE_INCLUDE_DIR_freetype2 OR EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}")
+  if (3RDPARTY_FREETYPE_DIR AND EXISTS "${3RDPARTY_FREETYPE_DIR}")
+    get_filename_component (3RDPARTY_FREETYPE_DIR_ABS "${3RDPARTY_FREETYPE_DIR}" ABSOLUTE)
+    get_filename_component (FREETYPE_INCLUDE_DIR_freetype2_ABS "${FREETYPE_INCLUDE_DIR_freetype2}" ABSOLUTE)
+
+    string (REGEX MATCH "${3RDPARTY_FREETYPE_DIR_ABS}" DOES_PATH_CONTAIN "${FREETYPE_INCLUDE_DIR_freetype2_ABS}")
+
+    if (NOT DOES_PATH_CONTAIN) # if cmake found freetype2 at different place from 3RDPARTY_FREETYPE_DIR
+      # search for freetype2 in 3RDPARTY_FREETYPE_DIR and if it will be found - replace freetyp2 path by new one
+      set (TMP_FREETYPE2 "TMP_FREETYPE2-NOTFOUND" CACHE FILEPATH "" FORCE)
+      find_path (TMP_FREETYPE2 NAMES freetype/config/ftheader.h config/ftheader.h
+                               PATHS "${3RDPARTY_FREETYPE_DIR}"
+                               PATH_SUFFIXES include/freetype2 include freetype2
+                               NO_DEFAULT_PATH)
+
+      if (TMP_FREETYPE2 OR NOT EXISTS "${TMP_FREETYPE2}")
+        set (3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2 "${TMP_FREETYPE2}" CACHE FILEPATH "the path of freetype2" FORCE)
+        
+        # hide and remove TMP_FREETYPE2
+        mark_as_advanced (TMP_FREETYPE2)
+        unset (TMP_FREETYPE2)
+      endif()
+    endif()
+  endif()
+endif()
+
+# return ENV{FREETYPE_DIR}
+SET (ENV{FREETYPE_DIR} ${CACHED_FREETYPE_DIR})
+
+# freetype2 header
+if (FREETYPE_INCLUDE_DIR_freetype2 AND EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}")
+  if (NOT 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2)
+    set (3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2 "${FREETYPE_INCLUDE_DIR_freetype2}" CACHE FILEPATH "the path of freetype2" FORCE)
+  endif()
+endif()
+
+if (NOT 3RDPARTY_FREETYPE_LIBRARY_DIR)
+  set (3RDPARTY_FREETYPE_LIBRARY "" CACHE FILEPATH "freetype library" FORCE)
+elseif (3RDPARTY_FREETYPE_LIBRARY AND EXISTS "${3RDPARTY_FREETYPE_LIBRARY}")
+  get_filename_component(3RDPARTY_FREETYPE_LIBRARY_DIR_TMP "${3RDPARTY_FREETYPE_LIBRARY}" PATH)
+  if (NOT "${3RDPARTY_FREETYPE_LIBRARY_DIR}" STREQUAL "${3RDPARTY_FREETYPE_LIBRARY_DIR_TMP}")
+    set (3RDPARTY_FREETYPE_LIBRARY "" CACHE FILEPATH "freetype library" FORCE)
+  endif()
+endif()
+
+if (WIN32)
+  if (NOT 3RDPARTY_FREETYPE_DLL_DIR)
+    set (3RDPARTY_FREETYPE_DLL "" CACHE FILEPATH "freetype shared library" FORCE)
+  elseif (3RDPARTY_FREETYPE_DLL AND EXISTS "${3RDPARTY_FREETYPE_DLL}")
+    get_filename_component(3RDPARTY_FREETYPE_DLL_DIR_TMP "${3RDPARTY_FREETYPE_DLL}" PATH)
+    if (NOT "${3RDPARTY_FREETYPE_DLL_DIR}" STREQUAL "${3RDPARTY_FREETYPE_DLL_DIR_TMP}")
+      set (3RDPARTY_FREETYPE_DLL "" CACHE FILEPATH "freetype shared library" FORCE)
+    endif()
+  endif()
+endif()
+
+# freetype library
+if (FREETYPE_LIBRARY AND EXISTS "${FREETYPE_LIBRARY}")
+  if (NOT 3RDPARTY_FREETYPE_LIBRARY)
+    set (3RDPARTY_FREETYPE_LIBRARY "${FREETYPE_LIBRARY}" CACHE FILEPATH "freetype library" FORCE)
+  endif()
+  
+  if (3RDPARTY_FREETYPE_LIBRARY AND EXISTS "${3RDPARTY_FREETYPE_LIBRARY}")
+    get_filename_component (3RDPARTY_FREETYPE_LIBRARY_DIR "${3RDPARTY_FREETYPE_LIBRARY}" PATH)
+    set (3RDPARTY_FREETYPE_LIBRARY_DIR "${3RDPARTY_FREETYPE_LIBRARY_DIR}" CACHE FILEPATH "The directory containing freetype library" FORCE)
+  endif()
+
+  if (WIN32)
+    set (CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".dll")
+
+    if (NOT 3RDPARTY_FREETYPE_DLL OR NOT EXISTS "${3RDPARTY_FREETYPE_DLL}")
+      get_filename_component (FREETYPE_LIBRARY_PARENT_DIR "${3RDPARTY_FREETYPE_LIBRARY_DIR}" PATH) # parent of the library directory
+
+      set (3RDPARTY_FREETYPE_DLL "3RDPARTY_FREETYPE_DLL-NOTFOUND" CACHE FILEPATH "freetype shared library" FORCE)
+      find_library (3RDPARTY_FREETYPE_DLL freetype PATHS "${FREETYPE_LIBRARY_PARENT_DIR}/bin" NO_DEFAULT_PATH)
+    endif()
+    
+    if (3RDPARTY_FREETYPE_DLL AND EXISTS "${3RDPARTY_FREETYPE_DLL}")
+      get_filename_component (3RDPARTY_FREETYPE_DLL_DIR "${3RDPARTY_FREETYPE_DLL}" PATH)
+      set (3RDPARTY_FREETYPE_DLL_DIR "${3RDPARTY_FREETYPE_DLL_DIR}" CACHE FILEPATH "The directory containing freetype shared library" FORCE)
+    endif()
+  endif()
+endif()
+
+
+if (NOT 3RDPARTY_FREETYPE_LIBRARY_DIR OR NOT EXISTS "${3RDPARTY_FREETYPE_LIBRARY_DIR}")
+  set (3RDPARTY_FREETYPE_LIBRARY_DIR "" CACHE FILEPATH "The directory containing freetype library" FORCE)
+endif()
+
+if (WIN32)
+  if (NOT 3RDPARTY_FREETYPE_DLL_DIR OR NOT EXISTS "${3RDPARTY_FREETYPE_DLL_DIR}")
+    set (3RDPARTY_FREETYPE_DLL_DIR "" CACHE FILEPATH "The directory containing shared freetype library" FORCE)
+  endif()
+endif()
+
+# include found paths to common variables
+if (3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build)
+  list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build}")
+else()
+  list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FREETYPE_INCLUDE_DIR_ft2build)
+endif()
+
+if (3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2)
+  list (APPEND 3RDPARTY_INCLUDE_DIRS "${3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2}")
+else()
+  list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FREETYPE_INCLUDE_DIR_freetype2)
+endif()
+
+if (3RDPARTY_FREETYPE_LIBRARY)
+  list (APPEND 3RDPARTY_LIBRARY_DIRS "${3RDPARTY_FREETYPE_LIBRARY_DIR}")
+else()
+  list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FREETYPE_LIBRARY_DIR)
+endif()
+
+if (WIN32)
+  if (NOT 3RDPARTY_FREETYPE_DLL OR NOT EXISTS "${3RDPARTY_FREETYPE_DLL}")
+    list (APPEND 3RDPARTY_NOT_INCLUDED 3RDPARTY_FREETYPE_DLL_DIR)
+  endif()
+endif()
+
+if (INSTALL_FREETYPE)
+
+  OCCT_MAKE_OS_WITH_BITNESS()
+  OCCT_MAKE_BUILD_POSTFIX()
+
+  if (WIN32)
+    install (FILES "${3RDPARTY_FREETYPE_DLL}"     DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/bin${BUILD_POSTFIX}")
+  else()
+    install (FILES "${3RDPARTY_FREETYPE_LIBRARY}" DESTINATION "${INSTALL_DIR}/${OS_WITH_BIT}/${COMPILER}/lib${BUILD_POSTFIX}")
+  endif()
+endif()
+
+# unset all redundant variables
+OCCT_CHECK_AND_UNSET(FREETYPE_INCLUDE_DIR_ft2build)
+OCCT_CHECK_AND_UNSET(FREETYPE_INCLUDE_DIR_freetype2)
+OCCT_CHECK_AND_UNSET(FREETYPE_LIBRARY)
+
+mark_as_advanced (3RDPARTY_FREETYPE_LIBRARY 3RDPARTY_FREETYPE_DLL)
\ No newline at end of file