Generate a dependency file for C++ output
Bug: 23600457
Test: unittests, added another
Change-Id: Ic1834badc396d444057a58f3868bcf343dcc933d
diff --git a/aidl.cpp b/aidl.cpp
index 9ba25d1..7459f8f 100644
--- a/aidl.cpp
+++ b/aidl.cpp
@@ -596,7 +596,11 @@
return err;
}
- // TODO(wiley) b/23600457 generate a dependency file if requested with -b
+ string dep_file_name = options.DependencyFilePath();
+ if (!dep_file_name.empty()) {
+ generate_dep_file(dep_file_name, options.InputFileName(),
+ options.OutputCppFilePath(), imports, io_delegate);
+ }
return (cpp::GenerateCpp(options, *types, *interface, io_delegate)) ? 0 : 1;
}
diff --git a/options.h b/options.h
index 7d503f4..c5a1f9c 100644
--- a/options.h
+++ b/options.h
@@ -80,7 +80,7 @@
std::string OutputCppFilePath() const { return output_file_name_; }
std::vector<std::string> ImportPaths() const { return import_paths_; }
- std::string DependencyFilepath() const { return dep_file_name_; }
+ std::string DependencyFilePath() const { return dep_file_name_; }
private:
CppOptions() = default;
diff --git a/tests/end_to_end_tests.cpp b/tests/end_to_end_tests.cpp
index c03247c..7ea5bc8 100644
--- a/tests/end_to_end_tests.cpp
+++ b/tests/end_to_end_tests.cpp
@@ -88,7 +88,7 @@
// Check that we parse correctly.
EXPECT_EQ(android::aidl::compile_aidl_to_java(options, io_delegate_), 0);
CheckFileContents(kJavaOutputPath, kExpectedJavaOutput);
- CheckFileContents(options.dep_file_name_, kExpectedJavaDepsOutput);
+ CheckFileContents(options.DependencyFilePath(), kExpectedJavaDepsOutput);
}
TEST_F(EndToEndTest, IPingResponderCpp) {
@@ -96,16 +96,17 @@
const string input_path =
CanonicalNameToPath(kCanonicalName, ".aidl").value();
- const string output_file = "path/to/output_file.cpp";
- const size_t argc = 5;
+ const string output_file = kCppOutputPath;
+ const size_t argc = 6;
const char* cmdline[argc + 1] = {
- "aidl-cpp", "-I.", input_path.c_str(), kGenHeaderDir,
+ "aidl-cpp", "-ddeps.P", "-I.", input_path.c_str(), kGenHeaderDir,
output_file.c_str(), nullptr
};
auto options = CppOptions::Parse(argc, cmdline);
// Set up input paths.
io_delegate_.SetFileContents(input_path, kInterfaceDefinition);
+ AddStubAidls(kImportedParcelables, kImportedInterfaces);
// Check that we parse and generate code correctly.
EXPECT_EQ(android::aidl::compile_aidl_to_cpp(*options, io_delegate_), 0);
@@ -113,6 +114,7 @@
CheckFileContents(kGenInterfaceHeaderPath, kExpectedIHeaderOutput);
CheckFileContents(kGenClientHeaderPath, kExpectedBpHeaderOutput);
CheckFileContents(kGenServerHeaderPath, kExpectedBnHeaderOutput);
+ CheckFileContents(options->DependencyFilePath(), kExpectedCppDepsOutput);
}
} // namespace android
diff --git a/tests/test_data.h b/tests/test_data.h
index f72d9d7..83448bd 100644
--- a/tests/test_data.h
+++ b/tests/test_data.h
@@ -39,11 +39,17 @@
extern const char kCanonicalName[];
extern const char kInterfaceDefinition[];
+extern const char kCppOutputPath[];
+extern const char* kImportedParcelables[];
+extern const char* kImportedInterfaces[];
+
extern const char kGenHeaderDir[];
extern const char kGenInterfaceHeaderPath[];
extern const char kGenClientHeaderPath[];
extern const char kGenServerHeaderPath[];
+extern const char kExpectedCppDepsOutput[];
+
extern const char kExpectedCppOutput[];
extern const char kExpectedIHeaderOutput[];
extern const char kExpectedBpHeaderOutput[];
diff --git a/tests/test_data_ping_responder.cpp b/tests/test_data_ping_responder.cpp
index 6c0487c..f15bb97 100644
--- a/tests/test_data_ping_responder.cpp
+++ b/tests/test_data_ping_responder.cpp
@@ -25,16 +25,38 @@
const char kInterfaceDefinition[] = R"(
package android.os;
+import bar.Unused;
+
interface IPingResponder {
int Ping(int token);
}
)";
+const char kCppOutputPath[] = "some/path/to/output.cpp";
+
+const char* kImportedParcelables[] = {
+ "bar.Unused",
+ nullptr,
+};
+
+const char* kImportedInterfaces[] = {
+ nullptr,
+};
+
const char kGenHeaderDir[] = "some/path";
const char kGenInterfaceHeaderPath[] = "some/path/android/os/IPingResponder.h";
const char kGenClientHeaderPath[] = "some/path/android/os/BpPingResponder.h";
const char kGenServerHeaderPath[] = "some/path/android/os/BnPingResponder.h";
+const char kExpectedCppDepsOutput[] =
+R"(some/path/to/output.cpp: \
+ android/os/IPingResponder.aidl \
+ ./bar/Unused.aidl
+
+android/os/IPingResponder.aidl :
+./bar/Unused.aidl :
+)";
+
const char kExpectedCppOutput[] =
R"(#include <android/os/IPingResponder.h>
#include <android/os/BpPingResponder.h>