From 91d124c0153db998f9c2952043dcefb9df887574 Mon Sep 17 00:00:00 2001 From: Josiah Gaskin Date: Mon, 15 Aug 2011 18:33:44 -0700 Subject: [PATCH] Change generated dependency file names This changes the name of the generated dependency files to R.java.d and .ap_.d respectively. Change-Id: I17e18770fc0d0a5d31c7b37b40ac1949f45ef13a --- Command.cpp | 29 +++++++++++++++++++++++------ Package.cpp | 9 +++++++-- Resource.cpp | 4 +++- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/Command.cpp b/Command.cpp index 3bc5fa1..7297b1e 100644 --- a/Command.cpp +++ b/Command.cpp @@ -1391,7 +1391,9 @@ int doPackage(Bundle* bundle) assets = new AaptAssets(); // Set up the resource gathering in assets if we're going to generate - // dependency files + // dependency files. Every time we encounter a resource while slurping + // the tree, we'll add it to these stores so we have full resource paths + // to write to a dependency file. if (bundle->getGenDependencies()) { sp resPathStore = new FilePathStore; assets->setFullResPaths(resPathStore); @@ -1422,15 +1424,20 @@ int doPackage(Bundle* bundle) goto bail; } + // If we've been asked to generate a dependency file, do that here if (bundle->getGenDependencies()) { + // If this is the packaging step, generate the dependency file next to + // the output apk (e.g. bin/resources.ap_.d) if (outputAPKFile) { dependencyFile = String8(outputAPKFile); - // Strip the extension and add new one - dependencyFile = dependencyFile.getBasePath(); + // Add the .d extension to the dependency file. dependencyFile.append(".d"); } else { + // Else if this is the R.java dependency generation step, + // generate the dependency file in the R.java package subdirectory + // e.g. gen/com/foo/app/R.java.d dependencyFile = String8(bundle->getRClassDir()); - dependencyFile.appendPath("R.d"); + dependencyFile.appendPath("R.java.d"); } // Make sure we have a clean dependency file to start with fp = fopen(dependencyFile, "w"); @@ -1440,13 +1447,18 @@ int doPackage(Bundle* bundle) // Write out R.java constants if (assets->getPackage() == assets->getSymbolsPrivatePackage()) { if (bundle->getCustomPackage() == NULL) { + // Write the R.java file into the appropriate class directory + // e.g. gen/com/foo/app/R.java err = writeResourceSymbols(bundle, assets, assets->getPackage(), true); - // Copy R.java for libraries + // If we have library files, we're going to write our R.java file into + // the appropriate class directory for those libraries as well. + // e.g. gen/com/foo/app/lib/R.java if (bundle->getExtraPackages() != NULL) { // Split on colon String8 libs(bundle->getExtraPackages()); char* packageString = strtok(libs.lockBuffer(libs.length()), ":"); while (packageString != NULL) { + // Write the R.java file out with the correct package name err = writeResourceSymbols(bundle, assets, String8(packageString), true); packageString = strtok(NULL, ":"); } @@ -1485,6 +1497,10 @@ int doPackage(Bundle* bundle) } } + // If we've been asked to generate a dependency file, we need to finish up here. + // the writeResourceSymbols and writeAPK functions have already written the target + // half of the dependency file, now we need to write the prerequisites. (files that + // the R.java file or .ap_ file depend on) if (bundle->getGenDependencies()) { // Now that writeResourceSymbols or writeAPK has taken care of writing // the targets to our dependency file, we'll write the prereqs @@ -1492,7 +1508,8 @@ int doPackage(Bundle* bundle) fprintf(fp, " : "); bool includeRaw = (outputAPKFile != NULL); err = writeDependencyPreReqs(bundle, assets, fp, includeRaw); - // Also manually add the AndroidManifeset since it's a non-asset + // Also manually add the AndroidManifeset since it's not under res/ or assets/ + // and therefore was not added to our pathstores during slurping fprintf(fp, "%s \\\n", bundle->getAndroidManifestFile()); fclose(fp); } diff --git a/Package.cpp b/Package.cpp index 62af30e..46ba3c1 100644 --- a/Package.cpp +++ b/Package.cpp @@ -177,12 +177,17 @@ status_t writeAPK(Bundle* bundle, const sp& assets, } } + // If we've been asked to generate a dependency file for the .ap_ package, + // do so here if (bundle->getGenDependencies()) { - // Add this file to the dependency file - String8 dependencyFile = outputFile.getBasePath(); + // The dependency file gets output to the same directory + // as the specified output file with an additional .d extension. + // e.g. bin/resources.ap_.d + String8 dependencyFile = outputFile; dependencyFile.append(".d"); FILE* fp = fopen(dependencyFile.string(), "a"); + // Add this file to the dependency file fprintf(fp, "%s \\\n", outputFile.string()); fclose(fp); } diff --git a/Resource.cpp b/Resource.cpp index 5152d3b..f64728d 100644 --- a/Resource.cpp +++ b/Resource.cpp @@ -1890,10 +1890,12 @@ status_t writeResourceSymbols(Bundle* bundle, const sp& assets, } fclose(fp); + // If we were asked to generate a dependency file, we'll go ahead and add this R.java + // as a target in the dependency file right next to it. if (bundle->getGenDependencies()) { // Add this R.java to the dependency file String8 dependencyFile(bundle->getRClassDir()); - dependencyFile.appendPath("R.d"); + dependencyFile.appendPath("R.java.d"); fp = fopen(dependencyFile.string(), "a"); fprintf(fp,"%s \\\n", dest.string()); -- 2.45.2