# Freetype GL - A C OpenGL Freetype engine
#
# Distributed under the OSI-approved BSD 2-Clause License. See accompanying
# file `LICENSE` for more details.
cmake_minimum_required(VERSION 2.8.12)
project(freetype-gl LANGUAGES C CXX)
set(CMAKE_MODULE_PATH
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/Modules"
"${CMAKE_MODULE_PATH}"
)
message(STATUS "Building for ${CMAKE_SYSTEM_NAME} target system")
message(STATUS "Building with ${CMAKE_C_COMPILER_ID} compiler")
set(freetype-gl_WITH_GLEW_DEFAULT ON)
if((${CMAKE_SYSTEM_NAME} MATCHES "Darwin") OR
(${CMAKE_SYSTEM_NAME} MATCHES "Android"))
set(freetype-gl_WITH_GLEW_DEFAULT OFF)
endif()
option(freetype-gl_WITH_GLEW
"Use the GLEW library to fetch OpenGL function pointers"
${freetype-gl_WITH_GLEW_DEFAULT})
option(freetype-gl_USE_VAO "Use a VAO to render a vertex_buffer instance (required for forward compatible OpenGL 3.0 contexts)" OFF)
option(freetype-gl_BUILD_DEMOS "Build the freetype-gl example programs" ON)
option(freetype-gl_BUILD_APIDOC "Build the freetype-gl API documentation" ON)
option(freetype-gl_BUILD_HARFBUZZ "Build the freetype-gl harfbuzz support (experimental)" OFF)
option(freetype-gl_BUILD_MAKEFONT "Build the makefont tool" ON)
option(freetype-gl_BUILD_TESTS "Build the tests" ON)
include(RequireIncludeFile)
include(RequireFunctionExists)
include(CheckLibraryExists)
include(CheckSymbolExists)
require_include_file(stdbool.h HAVE_STDBOOL_H)
require_include_file(stdint.h HAVE_STDINT_H)
require_include_file(math.h HAVE_MATH_H)
check_library_exists(m cos "" HAVE_MATH_LIBRARY)
if(HAVE_MATH_LIBRARY)
list(APPEND CMAKE_REQUIRED_LIBRARIES m)
set(MATH_LIBRARY m)
endif()
require_function_exists(cos HAVE_COS)
require_function_exists(fabs HAVE_FABS)
require_function_exists(floor HAVE_FLOOR)
require_function_exists(fmod HAVE_FMOD)
require_function_exists(pow HAVE_POW)
require_function_exists(roundf HAVE_ROUNDF)
require_function_exists(round HAVE_ROUND)
require_function_exists(sin HAVE_SIN)
require_function_exists(sqrt HAVE_SQRT)
require_function_exists(tan HAVE_TAN)
check_symbol_exists(M_PI math.h HAVE_M_PI)
if(NOT HAVE_M_PI)
list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_USE_MATH_DEFINES)
unset(HAVE_M_PI CACHE)
check_symbol_exists(M_PI math.h HAVE_M_PI)
if(NOT HAVE_M_PI)
message(FATAL_ERROR "`M_PI` not defined in `math.h`.")
else()
add_definitions(-D_USE_MATH_DEFINES)
endif()
endif()
if(NOT MINGW AND (WIN32 OR WIN64))
set(GLEW_ROOT_DIR
${CMAKE_CURRENT_SOURCE_DIR}/windows/glew)
set(ENV{FREETYPE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/windows/freetype)
endif()
find_package(OpenGL REQUIRED)
find_package(Freetype REQUIRED)
if(freetype-gl_WITH_GLEW)
find_package(GLEW REQUIRED)
endif()
include_directories(
${OPENGL_INCLUDE_DIRS}
${FREETYPE_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}
${GLEW_INCLUDE_PATH}
)
if(MSVC)
# _CRT_NONSTDC_NO_DEPRECATE -> remove warning C4996
add_definitions(-D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE)
endif(MSVC)
if(freetype-gl_USE_VAO)
add_definitions(-DFREETYPE_GL_USE_VAO)
endif(freetype-gl_USE_VAO)
set(FREETYPE_GL_HDR
distance-field.h
edtaa3func.h
font-manager.h
freetype-gl.h
markup.h
opengl.h
platform.h
text-buffer.h
texture-atlas.h
texture-font.h
utf8-utils.h
vec234.h
vector.h
vertex-attribute.h
vertex-buffer.h
)
set(FREETYPE_GL_SRC
distance-field.c
edtaa3func.c
font-manager.c
platform.c
text-buffer.c
texture-atlas.c
texture-font.c
utf8-utils.c
vector.c
vertex-attribute.c
vertex-buffer.c
)
add_library(freetype-gl STATIC
${FREETYPE_GL_SRC}
${FREETYPE_GL_HDR}
)
if(freetype-gl_BUILD_MAKEFONT)
add_executable(makefont makefont.c)
target_link_libraries(makefont
freetype-gl
${OPENGL_LIBRARY}
${FREETYPE_LIBRARIES}
${MATH_LIBRARY}
${GLEW_LIBRARY}
)
if(MSVC AND NOT (MSVC_VERSION LESS 1900))
# prevent error LNK2019: unresolved external symbol _sprintf referenced in function __bdf_parse_properties
# see http://stackoverflow.com/a/32418900/469659
target_link_libraries(makefont "legacy_stdio_definitions.lib")
endif()
endif()
install(TARGETS freetype-gl
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
install(FILES ${FREETYPE_GL_HDR}
DESTINATION include/freetype-gl
PERMISSIONS OWNER_READ GROUP_READ WORLD_READ)
if(freetype-gl_BUILD_APIDOC)
add_subdirectory(doc)
endif()
if(freetype-gl_BUILD_HARFBUZZ)
add_subdirectory(harfbuzz)
endif()
if(freetype-gl_BUILD_DEMOS)
add_subdirectory(demos)
endif()
if(freetype-gl_BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
endif(freetype-gl_BUILD_TESTS)