|
| 1 | +# Copyright (C) 1995-2019, Rene Brun and Fons Rademakers. |
| 2 | +# All rights reserved. |
| 3 | +# |
| 4 | +# For the licensing terms see $ROOTSYS/LICENSE. |
| 5 | +# For the list of contributors see $ROOTSYS/README/CREDITS. |
| 6 | + |
| 7 | +# **PLEASE UPDATE ALSO THE FOLLOWING LINE WHEN UPDATING THE VERSION** |
| 8 | +# 7 Feb 2019, https://github.com/frankheckenbach/ftgl/releases/tag/v2.4.0 |
| 9 | +set(ROOT_FTGL_VERSION 2.4.0) |
| 10 | +set(ROOT_FTGL_HASH "aa97da1c3442a8fd3941037655df18016d70b5266381c81d81e8b5335f196ea8") |
| 11 | +if (CMAKE_BUILD_TYPE MATCHES Debug) |
| 12 | + set(ROOT_FTGL_POSTFIX d) |
| 13 | +endif() |
| 14 | +# Cherry-pick https://github.com/frankheckenbach/ftgl/commit/835f2ba7911a6c15a1a314d5e3267fa089b5a319 : |
| 15 | +set(ROOT_FTGL_PATCH_FILE_1 "${CMAKE_CURRENT_SOURCE_DIR}/0001-src-CMakeLists.txt-remove-FTLibrary.h-from-libftgl_l.patch") |
| 16 | +# From https://github.com/frankheckenbach/ftgl/issues/22, see also https://github.com/xmake-io/xmake-repo/pull/9040/changes and https://github.com/root-project/root/commit/a028d13255f0c2d0c84f2e1b99ccb6a112598e0c |
| 17 | +if(Freetype_VERSION VERSION_GREATER_EQUAL 2.13.3) # https://github.com/root-project/root/commit/a028d13255f0c2d0c84f2e1b99ccb6a112598e0c |
| 18 | + set(ROOT_FTGL_PATCH_FILE_2 "${CMAKE_CURRENT_SOURCE_DIR}/0002-fix-type-error.patch") |
| 19 | +else() |
| 20 | + set(ROOT_FTGL_PATCH_FILE_2 "") |
| 21 | +endif() |
| 22 | +set(ROOT_FTGL_PATCH_FILE_3 "${CMAKE_CURRENT_SOURCE_DIR}/prevent_nullptr_access.patch") # https://github.com/root-project/root/issues/22076#issuecomment-4335481094 |
| 23 | +set(ROOT_FTGL_PREFIX ${CMAKE_BINARY_DIR}/builtins/FTGL-prefix) |
| 24 | +set(ROOT_FTGL_LIBRARY ${ROOT_FTGL_PREFIX}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}ftgl${ROOT_FTGL_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX}) |
| 25 | + |
| 26 | +if (NOT DEFINED GIT_EXECUTABLE) |
| 27 | + set(GIT_EXECUTABLE "git") |
| 28 | +endif() |
| 29 | + |
| 30 | +if(NOT EXISTS "${ROOT_FTGL_PREFIX}/src/BUILTIN_FTGL/._patched") |
| 31 | + set(ROOT_FTGL_PATCH_COMMAND PATCH_COMMAND ${GIT_EXECUTABLE} apply --ignore-space-change --ignore-whitespace |
| 32 | + ${ROOT_FTGL_PATCH_FILE_1} |
| 33 | + ${ROOT_FTGL_PATCH_FILE_2} |
| 34 | + ${ROOT_FTGL_PATCH_FILE_3} |
| 35 | + ${CMAKE_CURRENT_SOURCE_DIR}/ftgl-marker.diff) |
| 36 | +endif() |
| 37 | + |
| 38 | +include(ExternalProject) |
| 39 | + |
| 40 | +# Clear cache variables set by find_package(FTGL) |
| 41 | +# to ensure that we use the builtin version |
| 42 | +foreach(var FTGL_LIBRARIES FTGL_LIBRARY FTGL_LIBRARY_DEBUG FTGL_LIBRARY_RELEASE FTGL_FOUND FTGL_VERSION FTGL_INCLUDE_DIR FTGL_LIBRARY FTGL_LIBRARIES) |
| 43 | + unset(${var}) |
| 44 | + unset(${var} CACHE) |
| 45 | +endforeach() |
| 46 | + |
| 47 | +if(WIN32 AND NOT CMAKE_GENERATOR MATCHES Ninja) |
| 48 | + if(winrtdebug) |
| 49 | + set(ROOT_FTGL_BUILD_COMMAND_FLAGS "--config Debug") |
| 50 | + else() |
| 51 | + set(ROOT_FTGL_BUILD_COMMAND_FLAGS "--config $<IF:$<CONFIG:Debug,RelWithDebInfo>,RelWithDebInfo,Release>") |
| 52 | + endif() |
| 53 | +endif() |
| 54 | + |
| 55 | +ExternalProject_Add(BUILTIN_FTGL |
| 56 | + PREFIX ${ROOT_FTGL_PREFIX} |
| 57 | + URL ${lcgpackages}/ftgl-${ROOT_FTGL_VERSION}.tar.gz |
| 58 | + URL_HASH SHA256=${ROOT_FTGL_HASH} |
| 59 | + ${ROOT_FTGL_PATCH_COMMAND} |
| 60 | + |
| 61 | + LOG_DOWNLOAD TRUE |
| 62 | + LOG_CONFIGURE TRUE |
| 63 | + LOG_BUILD TRUE |
| 64 | + LOG_PATCH TRUE |
| 65 | + LOG_INSTALL TRUE |
| 66 | + LOG_OUTPUT_ON_FAILURE TRUE |
| 67 | + |
| 68 | + CMAKE_ARGS -G ${CMAKE_GENERATOR} |
| 69 | + -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> |
| 70 | + -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} |
| 71 | + -DCMAKE_C_COMPILER:STRING=${CMAKE_C_COMPILER} |
| 72 | + -DCMAKE_CXX_COMPILER:STRING=${CMAKE_CXX_COMPILER} |
| 73 | + -DBUILD_SHARED_LIBS:BOOL=FALSE |
| 74 | + -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=TRUE |
| 75 | + -DCMAKE_POLICY_VERSION_MINIMUM=3.5 |
| 76 | + -DFREETYPE_LIBRARY=${FREETYPE_LIBRARIES} # Seems to be needed for Win32 (CMake 3.30 Freetype.cmake) |
| 77 | + -DFREETYPE_INCLUDE_DIRS=${FREETYPE_INCLUDE_DIRS} # Seems to be needed for Win32 (CMake 3.30 Freetype.cmake) |
| 78 | + -DFREETYPE_DIR=${FREETYPE_INCLUDE_DIRS}/../ # Seems to be needed for Win32 (CMake 3.30 Freetype.cmake) |
| 79 | + BUILD_COMMAND ${CMAKE_COMMAND} --build . ${ROOT_FTGL_BUILD_COMMAND_FLAGS} |
| 80 | + INSTALL_COMMAND ${CMAKE_COMMAND} --build . ${ROOT_FTGL_BUILD_COMMAND_FLAGS} --target install |
| 81 | + BUILD_BYPRODUCTS |
| 82 | + ${ROOT_FTGL_LIBRARY} |
| 83 | + TIMEOUT 600 |
| 84 | +) |
| 85 | + |
| 86 | +file(MAKE_DIRECTORY ${ROOT_FTGL_PREFIX}/include) |
| 87 | +add_library(FTGL::FTGL IMPORTED STATIC GLOBAL) |
| 88 | +add_dependencies(FTGL::FTGL BUILTIN_FTGL) |
| 89 | +set_target_properties(FTGL::FTGL PROPERTIES |
| 90 | + IMPORTED_LOCATION ${ROOT_FTGL_LIBRARY} |
| 91 | + INTERFACE_INCLUDE_DIRECTORIES ${ROOT_FTGL_PREFIX}/include) |
| 92 | +target_compile_definitions(FTGL::FTGL INTERFACE FTGL_LIBRARY_STATIC) # needed for Win32 since public flag is not correctly propagated to parent scope (BUILD_SHARED_LIBS works fine for building but when installing, flag info is lost) |
| 93 | +if(builtin_freetype) |
| 94 | + add_dependencies(BUILTIN_FTGL BUILTIN_FREETYPE) |
| 95 | +endif() |
| 96 | +if(builin_zlib) |
| 97 | + add_dependencies(BUILTIN_FTGL BUILTIN_ZLIB) |
| 98 | +endif() |
| 99 | +target_link_libraries(FTGL::FTGL INTERFACE Freetype::Freetype) # private: OpenGL::GL OpenGL::GLU ZLIB::ZLIB |
| 100 | + |
| 101 | +# Set the canonical output of find_package according to |
| 102 | +# https://cmake.org/cmake/help/latest/manual/cmake-developer.7.html#standard-variable-names |
| 103 | +set(FTGL_INCLUDE_DIRS ${ROOT_FTGL_PREFIX}/include PARENT_SCOPE) |
| 104 | +set(FTGL_LIBRARIES ${ROOT_FTGL_LIBRARY} PARENT_SCOPE) |
| 105 | +set(FTGL_FOUND TRUE PARENT_SCOPE) |
| 106 | +set(FTGL_VERSION ${ROOT_FTGL_VERSION} PARENT_SCOPE) |
0 commit comments