| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| use sdk_metadata::CcSourceLibrary; |
| |
| use crate::app::Result; |
| use crate::file_provider::FileProvider; |
| use crate::immutable::merge_immutable_element; |
| use crate::tarball::{InputTarball, OutputTarball, TarballContent}; |
| |
| impl FileProvider for CcSourceLibrary { |
| fn get_common_files(&self) -> Vec<String> { |
| let mut result = self.sources.clone(); |
| result.extend(self.headers.clone()); |
| result |
| } |
| } |
| |
| pub fn merge_cc_source_library<F: TarballContent>( |
| meta_path: &str, base: &impl InputTarball<F>, complement: &impl InputTarball<F>, |
| output: &mut impl OutputTarball<F>, |
| ) -> Result<()> { |
| merge_immutable_element::<CcSourceLibrary, _, _, _, _>(meta_path, base, complement, output) |
| } |
| |
| #[cfg(test)] |
| mod tests { |
| use super::*; |
| |
| test_merge_immutable_success! { |
| name = test_merge, |
| merge = merge_cc_source_library, |
| meta = "pkg/foobar/meta.json", |
| data = r#" |
| { |
| "name": "foobar", |
| "type": "cc_source_library", |
| "root": "pkg/foobar", |
| "deps": [ |
| "raboof" |
| ], |
| "sources": [ |
| "pkg/foobar/one.cc", |
| "pkg/foobar/two.cc" |
| ], |
| "headers": [ |
| "pkg/foobar/include/foobar.h" |
| ], |
| "include_dir": "pkg/foobar/include", |
| "banjo_deps": [], |
| "fidl_deps": [ |
| "foo.bar" |
| ] |
| } |
| "#, |
| files = [ |
| "pkg/foobar/one.cc", |
| "pkg/foobar/two.cc", |
| "pkg/foobar/include/foobar.h", |
| ], |
| } |
| |
| test_merge_immutable_failure! { |
| name = test_merge_failed, |
| merge = merge_cc_source_library, |
| meta = "pkg/foobar/meta.json", |
| base_data = r#" |
| { |
| "name": "foobar", |
| "type": "cc_source_library", |
| "root": "pkg/foobar", |
| "deps": [ |
| "raboof" |
| ], |
| "sources": [ |
| "pkg/foobar/one.cc", |
| "pkg/foobar/two.cc" |
| ], |
| "headers": [ |
| "pkg/foobar/include/foobar.h" |
| ], |
| "include_dir": "pkg/foobar/include", |
| "banjo_deps": [], |
| "fidl_deps": [ |
| "foo.bar" |
| ] |
| } |
| "#, |
| base_files = [ |
| "pkg/foobar/one.cc", |
| "pkg/foobar/two.cc", |
| "pkg/foobar/include/foobar.h", |
| ], |
| // This data has one more dependency. |
| complement_data = r#" |
| { |
| "name": "foobar", |
| "type": "cc_source_library", |
| "root": "pkg/foobar", |
| "deps": [ |
| "raboof", |
| "whoops" |
| ], |
| "sources": [ |
| "pkg/foobar/one.cc", |
| "pkg/foobar/two.cc" |
| ], |
| "headers": [ |
| "pkg/foobar/include/foobar.h" |
| ], |
| "include_dir": "pkg/foobar/include", |
| "banjo_deps": [], |
| "fidl_deps": [ |
| "foo.bar" |
| ] |
| } |
| "#, |
| complement_files = [ |
| "pkg/foobar/one.cc", |
| "pkg/foobar/two.cc", |
| "pkg/foobar/include/foobar.h", |
| ], |
| } |
| } |