From b8f4326e4f8138d521eaae68dc51f0df56837aa2 Mon Sep 17 00:00:00 2001 From: Michael Tao Date: Sat, 28 Mar 2026 12:08:10 -0400 Subject: [PATCH] refactor: modernize meson build to use dependency() and override_dependency() Switch zipper and quiver consumption from subproject().get_variable() to dependency() with [provide] sections in wrap files. Add meson.override_dependency() calls for balsaCore, balsaGeometry, and balsaVisualization so downstream projects can consume them via dependency(). Fix colormap_shaders.wrap to use variable-based provide instead of dependency_names. Guard quiver_dep in visualization with get_option('quiver') check. Remove dead options (eltopo, pngpp, igl). --- core/meson.build | 1 + geometry/meson.build | 1 + meson.build | 6 ++---- meson_options.txt | 3 --- subprojects/colormap_shaders.wrap | 2 +- subprojects/quiver.wrap | 3 +++ subprojects/zipper.wrap | 3 +++ visualization/meson.build | 8 +++++--- 8 files changed, 16 insertions(+), 11 deletions(-) diff --git a/core/meson.build b/core/meson.build index e29614b..c83f8d0 100644 --- a/core/meson.build +++ b/core/meson.build @@ -40,6 +40,7 @@ endif core_lib = library('balsaCore', core_sources, include_directories: include_dir, dependencies: core_required_deps) core_dep = declare_dependency(link_with: core_lib, dependencies: core_required_deps, include_directories: include_dir) +meson.override_dependency('balsaCore', core_dep) if get_option('testing') subdir('tests') endif diff --git a/geometry/meson.build b/geometry/meson.build index 8662a18..2052d13 100644 --- a/geometry/meson.build +++ b/geometry/meson.build @@ -61,6 +61,7 @@ include_dir = [include_directories('include')] geometry_lib = library('balsaGeometry', geometry_sources, include_directories: include_dir, dependencies: geometry_required_deps) geometry_dep = declare_dependency(link_with: geometry_lib, dependencies: geometry_required_deps, include_directories: include_dir) +meson.override_dependency('balsaGeometry', geometry_dep) if get_option('testing') subdir('tests') diff --git a/meson.build b/meson.build index a63bcc6..b634119 100644 --- a/meson.build +++ b/meson.build @@ -12,8 +12,7 @@ dl_lib = cc.find_library('dl', required: false) spdlog_dep = dependency('spdlog', version: '>=1.9.2', default_options: ['tests=disabled', 'default_library=static']) eigen_dep = dependency('eigen3', version: '>=3.4.0') -zipper_proj = subproject('zipper', default_options: {'testing': false}) -zipper_dep = zipper_proj.get_variable('zipper_dep') +zipper_dep = dependency('zipper', default_options: ['testing=false']) core_required_deps = [spdlog_dep, eigen_dep, zipper_dep] @@ -62,8 +61,7 @@ endif subdir('core') if get_option('quiver') - quiver_proj = subproject('quiver', default_options: ['testing=false', 'tools=false', 'examples=false', 'bundled_spdlog=true']) - quiver_dep = quiver_proj.get_variable('quiver_dep') + quiver_dep = dependency('quiver', default_options: ['testing=false', 'tools=false', 'examples=false']) endif subdir('geometry') diff --git a/meson_options.txt b/meson_options.txt index 9c10215..c71d56d 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -1,15 +1,12 @@ option('testing', type: 'boolean', value: true, description: 'enable unit testing') option('examples', type: 'boolean', value: true, description: 'enable example targets') -option('eltopo', type : 'boolean', value : false, description : 'Should we build the el topo submodule') option('embree', type: 'boolean', value: false, description: 'Use embree') option('openvdb', type : 'boolean', value : false, description : 'Build openvdb stuff') -option('pngpp', type : 'boolean', value : false, description : 'Use PNG++ for screenshots') option('json', type : 'boolean', value : true, description : 'Use json') option('protobuf', type : 'boolean', value : false, description : 'Use protobuf') option('partio', type : 'boolean', value : false, description : 'Use partio') option('imgui', type : 'boolean', value : true, description : 'Use imgui') -option('igl', type : 'boolean', value : false, description : 'Use libigl') option('alembic', type : 'boolean', value : false, description : 'Use alembic') option('perfetto', type : 'boolean', value : false, description : 'Use perfetto') diff --git a/subprojects/colormap_shaders.wrap b/subprojects/colormap_shaders.wrap index ff0e069..ce5cf57 100644 --- a/subprojects/colormap_shaders.wrap +++ b/subprojects/colormap_shaders.wrap @@ -3,4 +3,4 @@ url = https://github.com/mtao/colormap-shaders.git revision = 142a208adf287335d53d368aa5dea6ec708a8aef [provide] -dependency_names = colormap_shaders +colormap_shaders = colormap_shaders_dep diff --git a/subprojects/quiver.wrap b/subprojects/quiver.wrap index 5b6159a..ad39ce7 100644 --- a/subprojects/quiver.wrap +++ b/subprojects/quiver.wrap @@ -1,3 +1,6 @@ [wrap-git] url = https://github.com/mtao/quiver.git revision = main + +[provide] +quiver = quiver_dep diff --git a/subprojects/zipper.wrap b/subprojects/zipper.wrap index 434c1a2..4b6e47d 100644 --- a/subprojects/zipper.wrap +++ b/subprojects/zipper.wrap @@ -3,3 +3,6 @@ url = https://github.com/mtao/zipper.git # dogfooding, so always fetching the current version revision = main #revision = e908334fd800e844fe6acc4150727901b557c6cb + +[provide] +zipper = zipper_dep diff --git a/visualization/meson.build b/visualization/meson.build index b8462f6..cec89f8 100644 --- a/visualization/meson.build +++ b/visualization/meson.build @@ -33,8 +33,7 @@ if get_option('imgui') endif endif -colormap_proj = subproject('colormap_shaders') -colormap_shaders_dep = colormap_proj.get_variable('colormap_shaders_dep') +colormap_shaders_dep = dependency('colormap_shaders') # Public deps: propagated to consumers via declare_dependency(). visualization_public_deps = [vulkan_dep, shaderc_dep, dl_lib, colormap_shaders_dep] @@ -107,7 +106,9 @@ endif visualization_public_deps += core_dep visualization_public_deps += geometry_dep -visualization_public_deps += quiver_dep +if get_option('quiver') + visualization_public_deps += quiver_dep +endif include_dir = [include_directories('include')] visualization_lib = library('balsaVisualization', visualization_sources, @@ -116,6 +117,7 @@ visualization_lib = library('balsaVisualization', visualization_sources, # For consumers: propagate public deps (including imgui shared library). visualization_dep = declare_dependency(link_with: visualization_lib, dependencies: visualization_public_deps, include_directories: include_dir) +meson.override_dependency('balsaVisualization', visualization_dep) if get_option('testing') subdir('tests')