diff options
author | Nirbheek Chauhan <nirbheek@centricular.com> | 2022-12-27 21:27:11 +0300 |
---|---|---|
committer | Nirbheek Chauhan <nirbheek@centricular.com> | 2022-12-28 20:00:11 +0300 |
commit | 5f0ff8348f0cca7333927db21ed3a12036f6762e (patch) | |
tree | 799df653814dda195d9c4aff7a8a7e2884f5fd16 /cargo_wrapper.py | |
parent | a3d405f670982eb9c904abb1d41df7e53072f27d (diff) |
meson: Add an option to build examples
Required renaming threadshare/benchmark to threadshare/ts-benchmark
because 'benchmark' as a target name is reserved for meson's
`benchmark` target.
Disabled by default because cargo decides that it has to rebuild
everything, and is really slow because of that.
Also required adding --features for setting features required by the
examples.
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1028>
Diffstat (limited to 'cargo_wrapper.py')
-rw-r--r-- | cargo_wrapper.py | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/cargo_wrapper.py b/cargo_wrapper.py index a538f8cd..942ed19b 100644 --- a/cargo_wrapper.py +++ b/cargo_wrapper.py @@ -20,7 +20,9 @@ PARSER.add_argument('prefix', type=P) PARSER.add_argument('libdir', type=P) PARSER.add_argument('--version', default=None) PARSER.add_argument('--bin', default=None, type=P) +PARSER.add_argument('--features', nargs="+", default=[]) PARSER.add_argument('--packages', nargs="+", default=[]) +PARSER.add_argument('--examples', nargs="+", default=[]) PARSER.add_argument('--lib-suffixes', nargs="+", default=[]) PARSER.add_argument('--exe-suffix') PARSER.add_argument('--depfile') @@ -80,14 +82,15 @@ if __name__ == "__main__": pkg_config_path.append(str(opts.root_dir / 'meson-uninstalled')) env['PKG_CONFIG_PATH'] = os.pathsep.join(pkg_config_path) + features = opts.features if opts.command == 'build': cargo_cmd = ['cargo'] - if opts.bin: + if opts.bin or opts.examples: cargo_cmd += ['build'] else: cargo_cmd += ['cbuild'] if not opts.disable_doc: - cargo_cmd += ['--features', "doc"] + features += ['doc'] if opts.target == 'release': cargo_cmd.append('--release') elif opts.command == 'test': @@ -97,25 +100,29 @@ if __name__ == "__main__": print("Unknown command:", opts.command, file=logfile) sys.exit(1) - cwd = None + if features: + cargo_cmd += ['--features', ','.join(features)] cargo_cmd += ['--target-dir', cargo_target_dir] - if not opts.bin: - cargo_cmd.extend(['--manifest-path', opts.src_dir / 'Cargo.toml']) - cargo_cmd.extend(['--prefix', opts.prefix, '--libdir', - opts.prefix / opts.libdir]) + cargo_cmd += ['--manifest-path', opts.src_dir / 'Cargo.toml'] + if opts.bin: + cargo_cmd.extend(['--bin', opts.bin.name]) + else: + if not opts.examples: + cargo_cmd.extend(['--prefix', opts.prefix, '--libdir', + opts.prefix / opts.libdir]) for p in opts.packages: cargo_cmd.extend(['-p', p]) - else: - cargo_cmd.extend(['--bin', opts.bin.name]) - cwd = opts.src_dir + for e in opts.examples: + cargo_cmd.extend(['--example', e]) - def run(cargo_cmd, env, cwd=cwd): + def run(cargo_cmd, env): + print(cargo_cmd, env, file=logfile) try: - subprocess.run(cargo_cmd, env=env, check=True, cwd=cwd) + subprocess.run(cargo_cmd, env=env, cwd=opts.src_dir, check=True) except subprocess.SubprocessError: sys.exit(1) - run(cargo_cmd, env, cwd) + run(cargo_cmd, env) if opts.command == 'build': target_dir = cargo_target_dir / '**' / opts.target @@ -142,6 +149,12 @@ if __name__ == "__main__": print(f"Copying {copied_file}", file=logfile) shutil.copy2(f, opts.build_dir) + # Copy examples to builddir + for example in opts.examples: + example_glob = str(target_dir / 'examples' / example) + opts.exe_suffix + exe = glob.glob(example_glob, recursive=True)[0] + shutil.copy2(exe, opts.build_dir) + depfile_content += generate_depfile_for(P(exe)) with open(opts.depfile, 'w') as depfile: depfile.write(depfile_content) |