use of com.typelead.gradle.eta.api.EtaOptions in project gradle-eta by typelead.
the class EtaAndroidPlugin method addEtaOptionsToDefaultConfig.
private void addEtaOptionsToDefaultConfig() {
EtaOptions options = ExtensionHelper.createExtension(androidExtension, ETA_OPTIONS_DSL_NAME, EtaOptions.class).setExtensions(project.container(LanguageExtension.class));
options.setProjectPath(project.getProjectDir().toPath());
}
use of com.typelead.gradle.eta.api.EtaOptions in project gradle-eta by typelead.
the class EtaInstallDependencies method installDependencies.
@TaskAction
public void installDependencies() {
final EtaOptions etaOptions = getOptions();
etaOptions.validate(etaInfo.get());
final File workingDir = getDestinationDir();
copyFreezeConfigIfChanged(workingDir);
/* Calculate all the modules */
final List<String> modules = getModules();
/* Determine if it's an executable */
String exec = executable.getOrNull();
if (exec != null && exec.length() <= 0) {
exec = null;
}
final String executableSpec = exec;
/* Generate the .cabal & cabal.project files. */
final WriteResult[] writeResults = new WriteResult[2];
final String targetConfigurationName = getTargetConfiguration();
Set<File> packageDBs = ConfigurationUtils.getEtaConfiguration(ConfigurationUtils.getConfiguration(project, targetConfigurationName)).getAllArtifacts(project).stream().map(Provider::get).collect(Collectors.toSet());
packageDBs.addAll(project.files(extraPackageDBs.values()).getFiles());
DependencyUtils.foldEtaDependencies(project, dependencies.get(), (directDeps, projectDeps, gitStringDeps, gitDeps) -> {
/* Include the project dependencies and git dependencies in the Etlas
dependency list. */
directDeps.addAll(projectDeps);
directDeps.addAll(gitStringDeps);
directDeps.addAll(extraPackageDBs.keySet());
writeResults[0] = CabalHelper.generateCabalFile(getPackageName(), getPackageVersion(), executableSpec, getSourceDirs().getFiles().stream().map(File::getAbsolutePath).collect(Collectors.toList()), modules, etaOptions, directDeps, workingDir);
writeResults[1] = CabalHelper.generateCabalProjectFile(gitDeps, packageDBs, workingDir);
});
/* Delete existing *.cabal files to avoid errors when changing the project
name. */
final File oldCabalFile = writeResults[0].getFile();
project.delete(project.fileTree(workingDir, fileTree -> {
fileTree.include("*.cabal");
fileTree.exclude(fileTreeElement -> {
try {
return fileTreeElement.getFile().getCanonicalPath().equals(oldCabalFile.getCanonicalPath());
} catch (IOException e) {
return true;
}
});
}));
/* Fork an etlas process to install the dependencies. */
final EtlasCommand etlas = new EtlasCommand(project);
etlas.getWorkingDirectory().set(workingDir);
boolean isUpToDate = etlas.deps(EtlasCommand.libTarget(getPackageName()), dependencyGraph -> {
/* Inject the dependencies into the respective configurations. */
DependencyHandler dependencies = project.getDependencies();
final EtaConfiguration targetEtaConfiguration = ConfigurationUtils.getEtaConfiguration(project, getTargetConfiguration());
targetEtaConfiguration.resolve(project, dependencies, dependencyGraph);
});
setDidWork(!isUpToDate);
}
use of com.typelead.gradle.eta.api.EtaOptions in project gradle-eta by typelead.
the class EtaAndroidPlugin method createEtaOptions.
private EtaOptions createEtaOptions() {
EtaOptions options = project.getObjects().newInstance(EtaOptions.class).setExtensions(project.container(LanguageExtension.class));
options.setProjectPath(project.getProjectDir().toPath());
return options;
}
use of com.typelead.gradle.eta.api.EtaOptions in project gradle-eta by typelead.
the class EtaAndroidPlugin method configureBaseVariant.
private void configureBaseVariant(BaseVariant variant) {
final EtaOptions etaOptions = createEtaOptions();
final String variantName = variant.getName();
final Provider<String> packageName = project.provider(() -> NamingScheme.getPackageName(project, variantName));
final Provider<String> packageVersion = project.provider(() -> NamingScheme.fixVersion(project.getVersion().toString()));
project.getLogger().debug("Processing variant " + variantName + " for Eta compilation.");
final JavaCompile javaCompileTask = variant.getJavaCompile();
if (javaCompileTask == null) {
project.getLogger().info("EtaAndroidPlugin: javaCompileTask is missing for " + variantName + " so the Eta compilation tasks will be skipped.");
return;
}
final SourceDirectorySet etaSourceDirectorySet = sourceDirectorySetFactory.create("eta", variantName + " Eta source");
for (SourceProvider sourceProvider : variant.getSourceSets()) {
final EtaSourceSet etaSourceSet = ExtensionHelper.getConvention(sourceProvider, EtaSourceSet.class);
if (etaSourceSet != null) {
etaSourceDirectorySet.source(etaSourceSet.getEta());
}
}
final EtaResolveDependencies resolveDependenciesTask = (EtaResolveDependencies) project.getRootProject().getTasks().getByPath(EtaBasePlugin.ETA_RESOLVE_DEPENDENCIES_TASK_NAME);
final FileCollection freezeConfigFile = resolveDependenciesTask.getOutputs().getFiles();
final Provider<String> targetConfiguration = project.provider(() -> variant.getCompileConfiguration().getName());
final Provider<Directory> destinationDir = project.getLayout().getBuildDirectory().dir(NamingScheme.getRelativeOutputDir(variant.getDirName()));
/* Create the install dependencies task. */
final EtaInstallDependencies installDependenciesTask = project.getTasks().create(NamingScheme.getInstallDependenciesTaskName(variantName), EtaInstallDependencies.class);
installDependenciesTask.setPackageName(packageName);
installDependenciesTask.setPackageVersion(packageVersion);
installDependenciesTask.setTargetConfiguration(targetConfiguration);
installDependenciesTask.setFreezeConfigFile(freezeConfigFile);
installDependenciesTask.setFreezeConfigChanged(project.provider(() -> resolveDependenciesTask.getDidWork()));
installDependenciesTask.setDestinationDir(destinationDir);
installDependenciesTask.setOptions(etaOptions);
installDependenciesTask.setSource(etaSourceDirectorySet);
installDependenciesTask.dependsOn(resolveDependenciesTask);
installDependenciesTask.setDescription("Installs dependencies for the " + variantName + " Eta source.");
installDependenciesTask.dependsOnOtherEtaProjects();
/* Because the installDependenciesTask injects dependencies into the
configuration, it must run *before* the preBuild phase since every task
after that will resolve configurations. */
variant.getPreBuild().dependsOn(installDependenciesTask);
/* Create the compile task. */
EtaCompile compileTask = project.getTasks().create(NamingScheme.getCompileTaskName(variantName), EtaCompile.class);
compileTask.setPackageName(packageName);
compileTask.setPackageVersion(packageVersion);
compileTask.setCabalProjectFile(installDependenciesTask.getCabalProjectFileProvider());
compileTask.setCabalFile(installDependenciesTask.getCabalFileProvider());
compileTask.setDestinationDir(destinationDir);
compileTask.setOptions(etaOptions);
compileTask.setSource(etaSourceDirectorySet);
compileTask.dependsOn(installDependenciesTask);
compileTask.setDescription("Compiles the " + variantName + " Eta source.");
/* Register the Eta output jar file with the Android build system. */
Object etaClasspathKey = variant.registerPreJavacGeneratedBytecode(project.files(compileTask.getOutputJarFileProvider()).builtBy(compileTask));
/* Setup the classpath for Eta */
compileTask.setClasspath(project.provider(() -> variant.getCompileClasspath(etaClasspathKey).plus(project.files(AndroidHelper.getAndroidSDKClasspath(androidExtension)))));
/* Register the package databases as artifacts that will be collected
upon dependency resolution of project dependencies. */
addArtifacts(compileTask.getPackageDBProvider(), variant.getRuntimeConfiguration());
}
use of com.typelead.gradle.eta.api.EtaOptions in project gradle-eta by typelead.
the class EtaPlugin method createEtaOptions.
private EtaOptions createEtaOptions() {
EtaOptions options = project.getObjects().newInstance(EtaOptions.class).setExtensions(project.container(LanguageExtension.class));
options.setProjectPath(project.getProjectDir().toPath());
return options;
}
Aggregations