blob: 5fcc458fb4a849e65fb40af6362ecf07acfe9322 [file] [log] [blame]
Brian Silverman4e662aa2022-05-11 23:10:19 -07001// Copyright 2021 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
4// https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
5// <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
6// option. This file may not be copied, modified, or distributed
7// except according to those terms.
8
9use autocxx_engine::Builder;
10
11use autocxx_integration_tests::{BuilderModifier, BuilderModifierFns, TestBuilderContext};
12
13pub(crate) fn make_cpp17_adder() -> Option<BuilderModifier> {
14 make_clang_arg_adder(&["-std=c++17"])
15}
16
Austin Schuh6ea9bfa2023-08-06 19:05:10 -070017struct ClangArgAdder(Vec<String>, Vec<String>);
Brian Silverman4e662aa2022-05-11 23:10:19 -070018
19pub(crate) fn make_clang_arg_adder(args: &[&str]) -> Option<BuilderModifier> {
Austin Schuh6ea9bfa2023-08-06 19:05:10 -070020 make_clang_optional_arg_adder(args, &[])
21}
22
23pub(crate) fn make_clang_optional_arg_adder(
24 args: &[&str],
25 optional_args: &[&str],
26) -> Option<BuilderModifier> {
Brian Silverman4e662aa2022-05-11 23:10:19 -070027 let args: Vec<_> = args.iter().map(|a| a.to_string()).collect();
Austin Schuh6ea9bfa2023-08-06 19:05:10 -070028 let optional_args: Vec<_> = optional_args.iter().map(|a| a.to_string()).collect();
29 Some(Box::new(ClangArgAdder(args, optional_args)))
Brian Silverman4e662aa2022-05-11 23:10:19 -070030}
31
32impl BuilderModifierFns for ClangArgAdder {
33 fn modify_autocxx_builder<'a>(
34 &self,
35 builder: Builder<'a, TestBuilderContext>,
36 ) -> Builder<'a, TestBuilderContext> {
37 let refs: Vec<_> = self.0.iter().map(|s| s.as_str()).collect();
38 builder.extra_clang_args(&refs)
39 }
40
41 fn modify_cc_builder<'a>(&self, mut builder: &'a mut cc::Build) -> &'a mut cc::Build {
42 for f in &self.0 {
43 builder = builder.flag(f);
44 }
Austin Schuh6ea9bfa2023-08-06 19:05:10 -070045 for f in &self.1 {
46 builder = builder.flag_if_supported(f);
47 }
Brian Silverman4e662aa2022-05-11 23:10:19 -070048 builder
49 }
50}
51
52pub(crate) struct SetSuppressSystemHeaders;
53
54impl BuilderModifierFns for SetSuppressSystemHeaders {
55 fn modify_autocxx_builder<'a>(
56 &self,
57 builder: Builder<'a, TestBuilderContext>,
58 ) -> Builder<'a, TestBuilderContext> {
59 builder.suppress_system_headers(true)
60 }
61}
62
63pub(crate) struct EnableAutodiscover;
64
65impl BuilderModifierFns for EnableAutodiscover {
66 fn modify_autocxx_builder<'a>(
67 &self,
68 builder: Builder<'a, TestBuilderContext>,
69 ) -> Builder<'a, TestBuilderContext> {
70 builder.auto_allowlist(true)
71 }
72}