[meson] Only pass required dependencies to everything
Instead of passing dependencies as required we used one giant shared
dependency list containing all dependencies for every library/executable.
While this kinda works, the specified deps are also used for generating
the pkg-config files and this leads to lots of Requires.private and Libs.private
entries which aren't really needed.
This removes the "deps" array and replaces it with a few smaller ones and
makes sure the public libraries only get passed the dependencies actually
needed.
Fixes #2441
diff --git a/meson.build b/meson.build
index 65d3192..797f5f9 100644
--- a/meson.build
+++ b/meson.build
@@ -144,8 +144,6 @@
cairo_ft_dep = dependency('', required: false)
endif
-deps = []
-
conf = configuration_data()
incconfig = include_directories('.')
@@ -157,33 +155,24 @@
cpp_args = cpp.get_supported_arguments(warn_cflags)
-if m_dep.found()
- deps += [m_dep]
-endif
-
if glib_dep.found()
conf.set('HAVE_GLIB', 1)
- deps += [glib_dep]
endif
if gobject_dep.found()
conf.set('HAVE_GOBJECT', 1)
- deps += [gobject_dep]
endif
if cairo_dep.found()
conf.set('HAVE_CAIRO', 1)
- deps += [cairo_dep]
endif
if cairo_ft_dep.found()
conf.set('HAVE_CAIRO_FT', 1)
- deps += [cairo_ft_dep]
endif
if graphite2_dep.found()
conf.set('HAVE_GRAPHITE2', 1)
- deps += [graphite2_dep]
endif
if icu_dep.found()
@@ -200,7 +189,6 @@
if freetype_dep.found()
conf.set('HAVE_FREETYPE', 1)
- deps += [freetype_dep]
check_freetype_funcs = [
['FT_Get_Var_Blend_Coordinates', {'deps': freetype_dep}],
['FT_Set_Var_Blend_Coordinates', {'deps': freetype_dep}],
@@ -219,15 +207,15 @@
if fontconfig_dep.found()
conf.set('HAVE_FONTCONFIG', 1)
- deps += [fontconfig_dep]
endif
+gdi_uniscribe_deps = []
# GDI (uniscribe) (windows)
if host_machine.system() == 'windows' and not get_option('gdi').disabled()
# TODO: make nicer once we have https://github.com/mesonbuild/meson/issues/3940
if cpp.has_header('usp10.h') and cpp.has_header('windows.h')
foreach usplib : ['usp10', 'gdi32', 'rpcrt4']
- deps += [cpp.find_library(usplib, required: true)]
+ gdi_uniscribe_deps += cpp.find_library(usplib, required: true)
endforeach
conf.set('HAVE_UNISCRIBE', 1)
conf.set('HAVE_GDI', 1)
@@ -237,9 +225,10 @@
endif
# DirectWrite (windows)
+directwrite_dep = dependency('', required: false)
if host_machine.system() == 'windows' and not get_option('directwrite').disabled()
if cpp.has_header('dwrite_1.h')
- deps += [cpp.find_library('dwrite', required: true)]
+ directwrite_dep = cpp.find_library('dwrite', required: true)
conf.set('HAVE_DIRECTWRITE', 1)
elif get_option('directwrite').enabled()
error('DirectWrite was enabled explicitly, but required header is missing.')
@@ -247,10 +236,11 @@
endif
# CoreText (macOS) - FIXME: untested
+coretext_deps = []
if host_machine.system() == 'darwin' and not get_option('coretext').disabled()
app_services_dep = dependency('appleframeworks', modules : ['ApplicationServices'], required: false)
if cpp.has_type('CTFontRef', prefix: '#include <ApplicationServices/ApplicationServices.h>', dependencies: app_services_dep)
- deps += [app_services_dep]
+ coretext_deps += [app_services_dep]
conf.set('HAVE_CORETEXT', 1)
# On iOS CoreText and CoreGraphics are stand-alone frameworks
# Check for a different symbol to avoid getting cached result
@@ -259,7 +249,7 @@
coregraphics_dep = dependency('appleframeworks', modules : ['CoreGraphics'], required: false)
corefoundation_dep = dependency('appleframeworks', modules : ['CoreFoundation'], required: false)
if cpp.has_type('CTRunRef', prefix: '#include <CoreText/CoreText.h>', dependencies: [coretext_dep, coregraphics_dep, corefoundation_dep])
- deps += [coretext_dep, coregraphics_dep, corefoundation_dep]
+ coretext_deps += [coretext_dep, coregraphics_dep, corefoundation_dep]
conf.set('HAVE_CORETEXT', 1)
elif get_option('coretext').enabled()
error('CoreText was enabled explicitly, but required headers or frameworks are missing.')
@@ -268,12 +258,12 @@
endif
# threads
+thread_dep = dependency('', required: false)
if host_machine.system() != 'windows'
thread_dep = dependency('threads', required: false)
if thread_dep.found()
conf.set('HAVE_PTHREAD', 1)
- deps += [thread_dep]
else
check_headers += ['sched.h']
check_funcs += ['sched_yield', {'link_with': 'rt'}]
@@ -293,6 +283,7 @@
endif
endforeach
+harfbuzz_extra_deps = []
foreach check : check_funcs
name = check[0]
opts = check.get(1, {})
@@ -323,7 +314,7 @@
endif
if found
- deps += extra_deps
+ harfbuzz_extra_deps += extra_deps
conf.set('HAVE_@0@'.format(name.to_upper()), 1)
endif
endforeach
diff --git a/src/meson.build b/src/meson.build
index 7509c64..c85103d 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -313,24 +313,30 @@
hb_sources = hb_base_sources + hb_base_ragel_generated_sources
hb_headers = hb_base_headers
+harfbuzz_deps = [thread_dep, m_dep] + harfbuzz_extra_deps
+
if conf.get('HAVE_FREETYPE', 0) == 1
hb_sources += hb_ft_sources
hb_headers += hb_ft_headers
+ harfbuzz_deps += [freetype_dep]
endif
if conf.get('HAVE_GDI', 0) == 1
hb_sources += hb_gdi_sources
hb_headers += hb_gdi_headers
+ harfbuzz_deps += gdi_uniscribe_deps
endif
if conf.get('HAVE_GRAPHITE2', 0) == 1
hb_sources += hb_graphite2_sources
hb_headers += hb_graphite2_headers
+ harfbuzz_deps += [graphite2_dep]
endif
if conf.get('HAVE_GLIB', 0) == 1
hb_sources += hb_glib_sources
hb_headers += hb_glib_headers
+ harfbuzz_deps += [glib_dep]
endif
if conf.get('HAVE_UNISCRIBE', 0) == 1
@@ -341,11 +347,13 @@
if conf.get('HAVE_DIRECTWRITE', 0) == 1
hb_sources += hb_directwrite_sources
hb_headers += hb_directwrite_headers
+ harfbuzz_deps += directwrite_dep
endif
if conf.get('HAVE_CORETEXT', 0) == 1
hb_sources += hb_coretext_sources
hb_headers += hb_coretext_headers
+ harfbuzz_deps += coretext_deps
endif
have_icu = conf.get('HAVE_ICU', 0) == 1
@@ -354,7 +362,7 @@
if have_icu and have_icu_builtin
hb_sources += hb_icu_sources
hb_headers += hb_icu_headers
- deps += [icu_dep]
+ harfbuzz_deps += [icu_dep]
endif
if get_option('with_libstdcxx')
@@ -392,7 +400,7 @@
libharfbuzz = library('harfbuzz', hb_sources,
include_directories: incconfig,
- dependencies: deps,
+ dependencies: harfbuzz_deps,
cpp_args: cpp_args + extra_hb_cpp_args,
soversion: hb_so_version,
version: version,
@@ -403,7 +411,7 @@
libharfbuzz_dep = declare_dependency(
link_with: libharfbuzz,
include_directories: incsrc,
- dependencies: deps)
+ dependencies: harfbuzz_deps)
# harfbuzz-subset
harfbuzz_subset_def = custom_target('harfbuzz-subset.def',
@@ -414,7 +422,7 @@
libharfbuzz_subset = library('harfbuzz-subset', hb_subset_sources,
include_directories: incconfig,
- dependencies: deps,
+ dependencies: [m_dep],
link_with: [libharfbuzz],
cpp_args: cpp_args + extra_hb_cpp_args,
soversion: hb_so_version,
@@ -426,7 +434,7 @@
libharfbuzz_subset_dep = declare_dependency(
link_with: libharfbuzz_subset,
include_directories: incsrc,
- dependencies: deps)
+ dependencies: [m_dep])
if get_option('tests').enabled()
# TODO: MSVC gives the following,
@@ -526,7 +534,7 @@
libharfbuzz_icu_dep = declare_dependency(
link_with: libharfbuzz_icu,
include_directories: incsrc,
- dependencies: deps)
+ dependencies: icu_dep)
pkgmod.generate(libharfbuzz_icu,
description: 'HarfBuzz text shaping library ICU integration',
@@ -598,7 +606,7 @@
libharfbuzz_gobject = library('harfbuzz-gobject', [hb_gobject_sources, enum_c, enum_h],
include_directories: incconfig,
- dependencies: deps,
+ dependencies: [glib_dep, gobject_dep],
link_with: [libharfbuzz],
cpp_args: cpp_args + extra_hb_cpp_args,
soversion: hb_so_version,
@@ -639,7 +647,7 @@
link_with: libharfbuzz_gobject,
include_directories: incsrc,
sources: build_gir ? hb_gen_files_gir : hb_gobject_sources,
- dependencies: deps)
+ dependencies: [glib_dep, gobject_dep])
pkgmod.generate(libharfbuzz_gobject,
description: 'HarfBuzz text shaping library GObject integration',
diff --git a/test/api/meson.build b/test/api/meson.build
index ecadfdd..e824a6c 100644
--- a/test/api/meson.build
+++ b/test/api/meson.build
@@ -81,7 +81,7 @@
test(test_name, executable(test_name, source,
include_directories: [incconfig, incsrc],
- dependencies: deps,
+ dependencies: [glib_dep, freetype_dep, thread_dep],
link_with: link_withs,
install: false,
), env: env, suite: ['api'] + (test_name.contains('-subset') ? ['subset'] : []))
diff --git a/test/fuzzing/meson.build b/test/fuzzing/meson.build
index 712b97d..53bea7c 100644
--- a/test/fuzzing/meson.build
+++ b/test/fuzzing/meson.build
@@ -11,7 +11,6 @@
exe = executable(test_name, [file_name, 'main.cc'],
cpp_args: cpp_args,
include_directories: [incconfig, incsrc],
- dependencies: deps,
link_with: [libharfbuzz, libharfbuzz_subset],
install: false,
)
diff --git a/util/meson.build b/util/meson.build
index 59fde47..3c10d5d 100644
--- a/util/meson.build
+++ b/util/meson.build
@@ -23,13 +23,15 @@
'options-subset.cc',
]
+util_deps = [freetype_dep, cairo_dep, cairo_ft_dep, glib_dep]
+
if conf.get('HAVE_GLIB', 0) == 1
if conf.get('HAVE_FREETYPE', 0) == 1 and conf.get('HAVE_CAIRO_FT', 0) == 1
hb_view = executable('hb-view', hb_view_sources,
cpp_args: cpp_args,
include_directories: [incconfig, incsrc],
- dependencies: deps,
+ dependencies: util_deps,
link_with: [libharfbuzz],
install: true,
)
@@ -38,7 +40,7 @@
hb_shape = executable('hb-shape', hb_shape_sources,
cpp_args: cpp_args,
include_directories: [incconfig, incsrc],
- dependencies: deps,
+ dependencies: util_deps,
link_with: [libharfbuzz],
install: true,
)
@@ -46,7 +48,7 @@
hb_subset = executable('hb-subset', hb_subset_cli_sources,
cpp_args: cpp_args,
include_directories: [incconfig, incsrc],
- dependencies: deps,
+ dependencies: util_deps,
link_with: [libharfbuzz, libharfbuzz_subset],
install: true,
)
@@ -54,7 +56,7 @@
hb_ot_shape_closure = executable('hb-ot-shape-closure', hb_ot_shape_closure_sources,
cpp_args: cpp_args,
include_directories: [incconfig, incsrc],
- dependencies: deps,
+ dependencies: util_deps,
link_with: [libharfbuzz],
install: true,
)