project('a', 'c') good = declare_dependency(link_with: static_library('good', 'g.c')) bad = declare_dependency(link_args: 'nonexistent.a') not_found = dependency('invalid', required: false) source_set = import('sourceset') sources = source_set.source_set() sources.add(when: 'YES', if_false: ['nope.c']) sources.add(when: 'YES1', if_true: files('a.c')) subdir('subdir') sources.add(when: 'NO', if_true: 'nope.c', if_false: ['f.c']) sources.add(when: 'NO', if_true: bad, if_false: ['f.c']) sources.add(when: 'YES2', if_true: good) # dependencies as conditions sources.add(when: not_found, if_true: 'nope.c') # test add_all sources2 = source_set.source_set() sources2.add(when: 'YES1', if_true: 'nope.c') sources.add_all(when: 'NO', if_true: sources2) # test duplicate items sources.add(when: 'YES1', if_true: files('a.c')) conf1 = { 'YES': true, 'YES1': true, 'YES2': false, 'NO': false, } result1 = sources.apply(conf1) conf2 = { 'YES': true, 'YES1': false, 'YES2': true, 'NO': false, } result2 = sources.apply(conf2) # Each target will recompile the objects executable('first', sources: result1.sources(), dependencies: result1.dependencies()) executable('second', sources: result2.sources(), dependencies: result2.dependencies()) # All target will use the same object files if meson.is_unity() message('Skipping extraction test because this is a Unity build.') else all_objs = static_library('all_objs', sources.all_sources()) executable('first_via_lib', objects: all_objs.extract_objects(result1.sources()), dependencies: result1.dependencies()) executable('second_via_lib', objects: all_objs.extract_objects(result2.sources()), dependencies: result2.dependencies()) endif