in buildSrc/src/main/java/com/uber/okbuck/core/task/OkBuckTask.java [182:304]
private void generate(
OkBuckExtension okbuckExt,
@Nullable String groovyHome,
@Nullable String kotlinHome,
@Nullable String scalaCompiler,
@Nullable String scalaLibrary) {
// generate empty .buckconfig if it does not exist
try {
getDotBuckConfig().createNewFile();
} catch (IOException e) {
throw new IllegalStateException(e);
}
Map<String, RuleOverridesExtension.OverrideSetting> overrides =
okbuckExt.getRuleOverridesExtension().getOverrides();
// Setup okbuck_targets.bzl
new OkbuckTargets()
.resourceExcludes(
okBuckExtension
.excludeResources
.stream()
.map(s -> "'" + s + "'")
.collect(Collectors.toSet()))
.classpathMacro(CLASSPATH_ABI_MACRO)
.lintJvmArgs(okbuckExt.getLintExtension().jvmArgs)
.enableLint(!okbuckExt.getLintExtension().disabled)
.jetifierConfigurationTarget(
BuckRuleComposer.fileRule(okbuckExt.getJetifierExtension().customConfigFile))
.externalDependencyCache(okbuckExt.getExternalDependenciesExtension().getCache())
.classpathExclusionRegex(okbuckExt.getLintExtension().classpathExclusionRegex)
.useCompilationClasspath(okbuckExt.getLintExtension().useCompilationClasspath)
.render(getOkbuckTargets());
// Setup okbuck_prebuilt.bzl
Multimap<String, String> prebuiltLoadStatements = TreeMultimap.create();
RuleOverridesExtension.OverrideSetting prebuiltSetting =
overrides.get(RuleType.PREBUILT.getBuckName());
RuleOverridesExtension.OverrideSetting aarSetting =
overrides.get(RuleType.ANDROID_PREBUILT_AAR.getBuckName());
RuleOverridesExtension.OverrideSetting jarSetting =
overrides.get(RuleType.PREBUILT_JAR.getBuckName());
prebuiltLoadStatements.put(aarSetting.getImportLocation(), aarSetting.getNewRuleName());
prebuiltLoadStatements.put(jarSetting.getImportLocation(), jarSetting.getNewRuleName());
ExternalDependenciesExtension external = okbuckExt.getExternalDependenciesExtension();
OkbuckPrebuilt okbuckPrebuiltRule =
new OkbuckPrebuilt()
.okbuckPrebuiltRule(prebuiltSetting.getNewRuleName())
.prebuiltAarRule(aarSetting.getNewRuleName())
.prebuiltJarRule(jarSetting.getNewRuleName());
if (external.strictVisibilityEnabled()) {
okbuckPrebuiltRule.strictVisibilityScope(String.format("//%s/...", external.getCache()));
}
buckFileManager.writeToBuckFile(
ImmutableList.of(okbuckPrebuiltRule), getOkbuckPrebuilt(), prebuiltLoadStatements);
// Ensure that a build file is present where bzl files are
buckFileManager.writeToBuckFile("", getOkbuckPrebuiltBuildFile(), false);
// Setup okbuck_android_modules.bzl
Multimap<String, String> unifiedLibsLoadStatements = TreeMultimap.create();
RuleOverridesExtension.OverrideSetting androidResourceSetting =
overrides.get(RuleType.ANDROID_RESOURCE.getBuckName());
RuleOverridesExtension.OverrideSetting androidLibrarySetting =
overrides.get(RuleType.ANDROID_LIBRARY.getBuckName());
RuleOverridesExtension.OverrideSetting manifestSetting =
overrides.get(RuleType.MANIFEST.getBuckName());
// might be null as okbuck doesn't define a custom override for this.
if (androidResourceSetting != null) {
unifiedLibsLoadStatements.put(
androidResourceSetting.getImportLocation(), androidResourceSetting.getNewRuleName());
}
unifiedLibsLoadStatements.put(
androidLibrarySetting.getImportLocation(), androidLibrarySetting.getNewRuleName());
unifiedLibsLoadStatements.put(
manifestSetting.getImportLocation(), manifestSetting.getNewRuleName());
Rule okbuckAndroidModules =
new OkbuckAndroidModules()
.androidLibraryRule(androidLibrarySetting.getNewRuleName())
.manifestRule(manifestSetting.getNewRuleName())
.androidResourceRule(
androidResourceSetting != null
? androidResourceSetting.getNewRuleName()
: "native." + RuleType.ANDROID_RESOURCE.getBuckName());
buckFileManager.writeToBuckFile(
ImmutableList.of(okbuckAndroidModules), getOkbuckAndroidModules(), unifiedLibsLoadStatements);
// generate .buckconfig.okbuck
OkbuckBuckConfigGenerator.generate(
okbuckExt,
groovyHome,
kotlinHome,
scalaCompiler,
scalaLibrary,
ProguardUtil.getProguardJarPath(getProject()),
repositoryMap(
okbuckExt.getExternalDependenciesExtension().shouldDownloadInBuck()
&& okBuckExtension
.getExternalDependenciesExtension()
.getGenerateMavenRepositories()))
.render(getOkbuckBuckConfig());
if (okbuckExt.okBuckBuckConfig) {
// Add entry of OkBuckBuckConfig to DotBuckConfig
String entry =
String.format(
"<file:%s>", FileUtil.getRelativePath(getProject().getRootDir(), getOkbuckBuckConfig()));
@Var String dotBuckContent = FileUtil.readString(getDotBuckConfig());
if (!dotBuckContent.contains(entry)) {
dotBuckContent = entry + "\n\n" + dotBuckContent;
FileUtil.writeString(getDotBuckConfig(), dotBuckContent);
}
}
}