summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorAnuthaDev <anuthadev@gmail.com>2021-07-20 20:00:10 +0530
committerWerner Lemberg <wl@gnu.org>2021-07-24 08:31:42 +0200
commit1f742f05bf21234236b54f52c3ef8cc8973131b1 (patch)
tree019fd5fb04a3b5abf13d77a7d6fec0e116a345f1 /CMakeLists.txt
parent5bcaf51b611ce579c89c2bb423984ec89fdaadd7 (diff)
downloadfreetype2-1f742f05bf21234236b54f52c3ef8cc8973131b1.tar.gz
* CMakeLists.txt: Make `cmake` handle disabled dependencies correctly.
Include 'CMakeDependentOption'. Replace `FT_WITH_XXX` options with `FT_DISABLE_XXX` and `FT_REQUIRE_XXX` pairs. Update option logic accordingly. Fixes #1066.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt153
1 files changed, 100 insertions, 53 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0935c15aa..cb1b9a0f2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -12,13 +12,17 @@
# fully.
#
#
-# The following will 1. create a build directory and 2. change into it and
+# The following will (1) create a build directory, and (2) change into it and
# call cmake to configure the build with default parameters as a static
-# library. See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
-# for information about Debug, Release, etc. builds.
+# library. See
+#
+# https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
+#
+# for information about debug or release builds, for example
#
# cmake -B build -D CMAKE_BUILD_TYPE=Release
#
+#
# For a dynamic library, use
#
# cmake -B build -D BUILD_SHARED_LIBS=true -D CMAKE_BUILD_TYPE=Release
@@ -39,7 +43,8 @@
#
# cmake -E chdir build cmake -G Xcode -D IOS_PLATFORM=SIMULATOR64 ..
#
-# Finally, build the project with:
+#
+# Finally, build the project with
#
# cmake --build build
#
@@ -56,40 +61,47 @@
#
# Some notes.
#
-# . `cmake' creates configuration files in
+# - `cmake' creates configuration files in
#
# <build-directory>/include/freetype/config
#
# which should be further modified if necessary.
#
-# . You can use `cmake' directly on a freshly cloned FreeType git
+# - You can use `cmake' directly on a freshly cloned FreeType git
# repository.
#
-# . `CMakeLists.txt' is provided as-is since it is normally not used by the
+# - `CMakeLists.txt' is provided as-is since it is normally not used by the
# developer team.
#
-# . Set the `FT_WITH_ZLIB', `FT_WITH_BZIP2', `FT_WITH_PNG',
-# `FT_WITH_HARFBUZZ', and `FT_WITH_BROTLI' CMake variables to `ON' to
-# force using a dependency. Leave a variable undefined (which is the
-# default) to use the dependency only if it is available. Example:
+# - Set the `FT_REQUIRE_ZLIB', `FT_REQUIRE_BZIP2', `FT_REQUIRE_PNG',
+# `FT_REQUIRE_HARFBUZZ', and `FT_REQUIRE_BROTLI' CMake variables to `ON'
+# or `TRUE' to force using a dependency. Leave a variable undefined
+# (which is the default) to use the dependency only if it is available.
+# Example:
#
-# cmake -B build -D FT_WITH_ZLIB=ON \
-# -D FT_WITH_BZIP2=ON \
-# -D FT_WITH_PNG=ON \
-# -D FT_WITH_HARFBUZZ=ON \
-# -D FT_WITH_BROTLI=ON [...]
+# cmake -B build -D FT_REQUIRE_ZLIB=TRUE \
+# -D FT_REQUIRE_BZIP2=TRUE \
+# -D FT_REQUIRE_PNG=TRUE \
+# -D FT_REQUIRE_HARFBUZZ=TRUE \
+# -D FT_REQUIRE_BROTLI=TRUE [...]
#
-# Set `CMAKE_DISABLE_FIND_PACKAGE_XXX=TRUE' to disable a dependency completely
-# (where `XXX' is a CMake package name like `BZip2'). Example for disabling all
+# - Set `FT_DISABLE_XXX=TRUE' to disable a dependency completely (where
+# `XXX' is a CMake package name like `BZip2'). Example for disabling all
# dependencies:
#
-# cmake -B build -D CMAKE_DISABLE_FIND_PACKAGE_ZLIB=TRUE \
-# -D CMAKE_DISABLE_FIND_PACKAGE_BZip2=TRUE \
-# -D CMAKE_DISABLE_FIND_PACKAGE_PNG=TRUE \
-# -D CMAKE_DISABLE_FIND_PACKAGE_HarfBuzz=TRUE \
-# -D CMAKE_DISABLE_FIND_PACKAGE_BrotliDec=TRUE [...]
+# cmake -B build -D FT_DISABLE_ZLIB=TRUE \
+# -D FT_DISABLE_BZIP2=TRUE \
+# -D FT_DISABLE_PNG=TRUE \
+# -D FT_DISABLE_HARFBUZZ=TRUE \
+# -D FT_DISABLE_BROTLI=TRUE [...]
+#
+# - NOTE: If a package is set as DISABLED, it cannot be set as REQUIRED
+# without unsetting the DISABLED value first. For example, if
+# `FT_DISABLE_HARFBUZZ=TRUE' has been set (Cache is present), you need to
+# call `FT_DISABLE_HARFBUZZ=FALSE' before calling
+# `FT_REQUIRE_HARFBUZZ=TRUE'.
#
-# . Installation of FreeType can be controlled with the CMake variables
+# - Installation of FreeType can be controlled with the CMake variables
# `SKIP_INSTALL_HEADERS', `SKIP_INSTALL_LIBRARIES', and `SKIP_INSTALL_ALL'
# (this is compatible with the same CMake variables in zlib's CMake
# support).
@@ -109,6 +121,7 @@ if (NOT CMAKE_VERSION VERSION_LESS 3.3)
endif ()
include(CheckIncludeFile)
+include(CMakeDependentOption)
# CMAKE_TOOLCHAIN_FILE must be set before `project' is called, which
# configures the base build environment and references the toolchain file
@@ -171,13 +184,37 @@ string(REGEX REPLACE
math(EXPR LIBRARY_SOVERSION "${LIBTOOL_CURRENT} - ${LIBTOOL_AGE}")
set(LIBRARY_VERSION "${LIBRARY_SOVERSION}.${LIBTOOL_AGE}.${LIBTOOL_REVISION}")
-# External dependency library detection is automatic. See the notes at the top
-# of this file, for how to force or disable dependencies completely.
-option(FT_WITH_ZLIB "Use system zlib instead of internal library." OFF)
-option(FT_WITH_BZIP2 "Support bzip2 compressed fonts." OFF)
-option(FT_WITH_PNG "Support PNG compressed OpenType embedded bitmaps." OFF)
-option(FT_WITH_HARFBUZZ "Improve auto-hinting of OpenType fonts." OFF)
-option(FT_WITH_BROTLI "Support compressed WOFF2 fonts." OFF)
+# External dependency library detection is automatic. See the notes at the
+# top of this file, for how to force or disable dependencies completely.
+option(FT_DISABLE_ZLIB
+ "Disable use of system zlib and use internal zlib library instead." OFF)
+cmake_dependent_option(FT_REQUIRE_ZLIB
+ "Require system zlib instead of internal zlib library." OFF
+ "NOT FT_DISABLE_ZLIB" OFF)
+
+option(FT_DISABLE_BZIP2
+ "Disable support of bzip2 compressed fonts." OFF)
+cmake_dependent_option(FT_REQUIRE_BZIP2
+ "Require support of bzip2 compressed fonts." OFF
+ "NOT FT_DISABLE_BZIP2" OFF)
+
+option(FT_DISABLE_PNG
+ "Disable support of PNG compressed OpenType embedded bitmaps." OFF)
+cmake_dependent_option(FT_REQUIRE_PNG
+ "Require support of PNG compressed OpenType embedded bitmaps." OFF
+ "NOT FT_DISABLE_PNG" OFF)
+
+option(FT_DISABLE_HARFBUZZ
+ "Disable HarfBuzz (used for improving auto-hinting of OpenType fonts)." OFF)
+cmake_dependent_option(FT_REQUIRE_HARFBUZZ
+ "Require HarfBuzz for improving auto-hinting of OpenType fonts." OFF
+ "NOT FT_DISABLE_HARFBUZZ" OFF)
+
+option(FT_DISABLE_BROTLI
+ "Disable support of compressed WOFF2 fonts." OFF)
+cmake_dependent_option(FT_REQUIRE_BROTLI
+ "Require support of compressed WOFF2 fonts." OFF
+ "NOT FT_DISABLE_BROTLI" OFF)
# Disallow in-source builds
@@ -208,35 +245,45 @@ endif ()
# Find dependencies
-set(HARFBUZZ_MIN_VERSION "2.0.0")
-if (FT_WITH_HARFBUZZ)
- find_package(HarfBuzz ${HARFBUZZ_MIN_VERSION} REQUIRED)
-else ()
- find_package(HarfBuzz ${HARFBUZZ_MIN_VERSION})
+if (NOT FT_DISABLE_HARFBUZZ)
+ set(HARFBUZZ_MIN_VERSION "2.0.0")
+ if (FT_REQUIRE_HARFBUZZ)
+ find_package(HarfBuzz ${HARFBUZZ_MIN_VERSION} REQUIRED)
+ else ()
+ find_package(HarfBuzz ${HARFBUZZ_MIN_VERSION})
+ endif ()
endif ()
-if (FT_WITH_PNG)
- find_package(PNG REQUIRED)
-else ()
- find_package(PNG)
+if (NOT FT_DISABLE_PNG)
+ if (FT_REQUIRE_PNG)
+ find_package(PNG REQUIRED)
+ else ()
+ find_package(PNG)
+ endif ()
endif ()
-if (FT_WITH_ZLIB)
- find_package(ZLIB REQUIRED)
-else ()
- find_package(ZLIB)
+if (NOT FT_DISABLE_ZLIB)
+ if (FT_REQUIRE_ZLIB)
+ find_package(ZLIB REQUIRED)
+ else ()
+ find_package(ZLIB)
+ endif ()
endif ()
-if (FT_WITH_BZIP2)
- find_package(BZip2 REQUIRED)
-else ()
- find_package(BZip2)
+if (NOT FT_DISABLE_BZIP2)
+ if (FT_REQUIRE_BZIP2)
+ find_package(BZip2 REQUIRED)
+ else ()
+ find_package(BZip2)
+ endif ()
endif ()
-if (FT_WITH_BROTLI)
- find_package(BrotliDec REQUIRED)
-else ()
- find_package(BrotliDec)
+if (NOT FT_DISABLE_BROTLI)
+ if (FT_REQUIRE_BROTLI)
+ find_package(BrotliDec REQUIRED)
+ else ()
+ find_package(BrotliDec)
+ endif ()
endif ()
# Create the configuration file
@@ -426,7 +473,7 @@ target_include_directories(
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/include
-
+
# Make <ftconfig.h> available for builds/unix/ftsystem.c.
${CMAKE_CURRENT_BINARY_DIR}/include/freetype/config
)