From 1ad48fddd08654052da4f8a93609e7f4380d5c42 Mon Sep 17 00:00:00 2001 From: Chun-wei Fan Date: Wed, 3 Apr 2024 11:08:59 +0800 Subject: [PATCH] Meson: Use actual FreeType version when using CMake Sadly, the pkg-config files that FreeType gives us use different versioning schemes from what CMake expects, so we can't just use multiple dependencies even for Meson 0.60.0+ --- meson.build | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/meson.build b/meson.build index fed3dc055..71d00dea5 100644 --- a/meson.build +++ b/meson.build @@ -14,7 +14,9 @@ cairo_min_version = '>= 1.10.0' chafa_min_version = '>= 1.6.0' icu_min_version = '>= 49.0' graphite2_min_version = '>= 1.2.0' -freetype_min_version = '>= 12.0.6' + +freetype_min_version_actual = '>= 2.4.2' +freetype_min_version = '>= 12.0.6' # Corresponds to `freetype_min_version_actual` hb_version_arr = meson.project_version().split('.') hb_version_major = hb_version_arr[0].to_int() @@ -101,12 +103,21 @@ check_funcs = [ m_dep = cpp.find_library('m', required: false) if meson.version().version_compare('>=0.60.0') + # Sadly, FreeType's versioning schemes are different between pkg-config and CMake # pkg-config: freetype2, cmake: Freetype - freetype_dep = dependency('freetype2', 'Freetype', + freetype_dep = dependency('freetype2', version: freetype_min_version, - required: get_option('freetype'), - default_options: ['harfbuzz=disabled'], - allow_fallback: true) + method: 'pkg-config', + required: false, + allow_fallback: false) + if not freetype_dep.found() + freetype_dep = dependency('FreeType', + version: freetype_min_version_actual, + method: 'cmake', + required: get_option('freetype'), + default_options: ['harfbuzz=disabled'], + allow_fallback: true) + endif else # painful hack to handle multiple dependencies but also respect options freetype_opt = get_option('freetype') @@ -119,7 +130,7 @@ else # when disabled, leave it not-found if not freetype_dep.found() and not get_option('freetype').disabled() # Try cmake name - freetype_dep = dependency('Freetype', version: freetype_min_version, method: 'cmake', required: false) + freetype_dep = dependency('Freetype', version: freetype_min_version_actual, method: 'cmake', required: false) # Subproject fallback, `allow_fallback: true` means the fallback will be # tried even if the freetype option is set to `auto`. if not freetype_dep.found()