use of org.gradle.api.Task in project gradle by gradle.
the class DefaultTaskContainer method addTask.
private <T extends Task> void addTask(T task, boolean replaceExisting) {
String name = task.getName();
if (replaceExisting) {
Task existing = findByNameWithoutRules(name);
if (existing != null) {
throw new IllegalStateException("Replacing an existing task that may have already been used by other plugins is not supported. Use a different name for this task ('" + name + "').");
} else {
TaskCreatingProvider<? extends Task> taskProvider = Cast.uncheckedCast(findByNameLaterWithoutRules(name));
if (taskProvider != null) {
removeInternal(taskProvider);
final Action<? super T> onCreate;
if (!taskProvider.getType().isAssignableFrom(task.getClass())) {
throw new IllegalStateException("Replacing an existing task with an incompatible type is not supported. Use a different name for this task ('" + name + "') or use a compatible type (" + ((TaskInternal) task).getTaskIdentity().type.getName() + ")");
} else {
onCreate = Cast.uncheckedCast(taskProvider.getOnCreateActions().mergeFrom(getEventRegister().getAddActions()));
}
add(task, onCreate);
// Exit early as we are reusing the create actions from the provider
return;
} else {
throw new IllegalStateException("Unnecessarily replacing a task that does not exist is not supported. Use create() or register() directly instead. You attempted to replace a task named '" + name + "', but there is no existing task with that name.");
}
}
} else if (hasWithName(name)) {
failOnDuplicateTask(name);
}
addInternal(task);
}
use of org.gradle.api.Task in project gradle by gradle.
the class NativeBasePlugin method addTasksForComponentWithExecutable.
private void addTasksForComponentWithExecutable(final TaskContainer tasks, final DirectoryProperty buildDirectory, SoftwareComponentContainer components) {
components.withType(ConfigurableComponentWithExecutable.class, executable -> {
final Names names = executable.getNames();
final NativeToolChain toolChain = executable.getToolChain();
final NativePlatform targetPlatform = executable.getNativePlatform();
final PlatformToolProvider toolProvider = executable.getPlatformToolProvider();
// Add a link task
TaskProvider<LinkExecutable> link = tasks.register(names.getTaskName("link"), LinkExecutable.class, task -> {
task.source(executable.getObjects());
task.lib(executable.getLinkLibraries());
task.getLinkedFile().set(buildDirectory.file(executable.getBaseName().map(baseName -> toolProvider.getExecutableName("exe/" + names.getDirName() + baseName))));
task.getTargetPlatform().set(targetPlatform);
task.getToolChain().set(toolChain);
task.getDebuggable().set(executable.isDebuggable());
});
executable.getLinkTask().set(link);
executable.getDebuggerExecutableFile().set(link.flatMap(linkExecutable -> linkExecutable.getLinkedFile()));
if (executable.isDebuggable() && executable.isOptimized() && toolProvider.requiresDebugBinaryStripping()) {
Provider<RegularFile> symbolLocation = buildDirectory.file(executable.getBaseName().map(baseName -> toolProvider.getExecutableSymbolFileName("exe/" + names.getDirName() + "stripped/" + baseName)));
Provider<RegularFile> strippedLocation = buildDirectory.file(executable.getBaseName().map(baseName -> toolProvider.getExecutableName("exe/" + names.getDirName() + "stripped/" + baseName)));
TaskProvider<StripSymbols> stripSymbols = stripSymbols(link, names, tasks, toolChain, targetPlatform, strippedLocation);
executable.getExecutableFile().set(stripSymbols.flatMap(task -> task.getOutputFile()));
TaskProvider<ExtractSymbols> extractSymbols = extractSymbols(link, names, tasks, toolChain, targetPlatform, symbolLocation);
executable.getOutputs().from(extractSymbols.flatMap(task -> task.getSymbolFile()));
executable.getExecutableFileProducer().set(stripSymbols);
} else {
executable.getExecutableFile().set(link.flatMap(task -> task.getLinkedFile()));
executable.getExecutableFileProducer().set(link);
}
// Add an install task
// TODO - should probably not add this for all executables?
// TODO - add stripped symbols to the installation
final TaskProvider<InstallExecutable> install = tasks.register(names.getTaskName("install"), InstallExecutable.class, task -> {
task.getTargetPlatform().set(targetPlatform);
task.getToolChain().set(toolChain);
task.getInstallDirectory().set(buildDirectory.dir("install/" + names.getDirName()));
task.getExecutableFile().set(executable.getExecutableFile());
task.lib(executable.getRuntimeLibraries());
});
executable.getInstallTask().set(install);
executable.getInstallDirectory().set(install.flatMap(task -> task.getInstallDirectory()));
executable.getOutputs().from(executable.getInstallDirectory());
executable.getDebuggerExecutableFile().set(install.flatMap(task -> task.getInstalledExecutable()));
});
}
use of org.gradle.api.Task in project gradle by gradle.
the class NativeBasePlugin method addTasksForComponentWithStaticLibrary.
private void addTasksForComponentWithStaticLibrary(final TaskContainer tasks, final DirectoryProperty buildDirectory, SoftwareComponentContainer components) {
components.withType(ConfigurableComponentWithStaticLibrary.class, library -> {
final Names names = library.getNames();
// Add a create task
final TaskProvider<CreateStaticLibrary> createTask = tasks.register(names.getTaskName("create"), CreateStaticLibrary.class, task -> {
task.source(library.getObjects());
final PlatformToolProvider toolProvider = library.getPlatformToolProvider();
Provider<RegularFile> linktimeFile = buildDirectory.file(library.getBaseName().map(baseName -> toolProvider.getStaticLibraryName("lib/" + names.getDirName() + baseName)));
task.getOutputFile().set(linktimeFile);
task.getTargetPlatform().set(library.getNativePlatform());
task.getToolChain().set(library.getToolChain());
});
// Wire the task into the library model
library.getLinkFile().set(createTask.flatMap(task -> task.getBinaryFile()));
library.getLinkFileProducer().set(createTask);
library.getCreateTask().set(createTask);
library.getOutputs().from(library.getLinkFile());
});
}
use of org.gradle.api.Task in project gradle by gradle.
the class NativeBasePlugin method addTasksForComponentWithSharedLibrary.
private void addTasksForComponentWithSharedLibrary(final TaskContainer tasks, final DirectoryProperty buildDirectory, SoftwareComponentContainer components) {
components.withType(ConfigurableComponentWithSharedLibrary.class, library -> {
final Names names = library.getNames();
final NativePlatform targetPlatform = library.getNativePlatform();
final NativeToolChain toolChain = library.getToolChain();
final PlatformToolProvider toolProvider = library.getPlatformToolProvider();
// Add a link task
final TaskProvider<LinkSharedLibrary> link = tasks.register(names.getTaskName("link"), LinkSharedLibrary.class, task -> {
task.source(library.getObjects());
task.lib(library.getLinkLibraries());
task.getLinkedFile().set(buildDirectory.file(library.getBaseName().map(baseName -> toolProvider.getSharedLibraryName("lib/" + names.getDirName() + baseName))));
// when Swift depends on C++ libraries built by Gradle.
if (!targetPlatform.getOperatingSystem().isMacOsX()) {
Provider<String> installName = task.getLinkedFile().getLocationOnly().map(linkedFile -> linkedFile.getAsFile().getName());
task.getInstallName().set(installName);
}
task.getTargetPlatform().set(targetPlatform);
task.getToolChain().set(toolChain);
task.getDebuggable().set(library.isDebuggable());
});
Provider<RegularFile> linkFile = link.flatMap(task -> task.getLinkedFile());
Provider<RegularFile> runtimeFile = link.flatMap(task -> task.getLinkedFile());
Provider<? extends Task> linkFileTask = link;
if (toolProvider.producesImportLibrary()) {
link.configure(linkSharedLibrary -> {
linkSharedLibrary.getImportLibrary().set(buildDirectory.file(library.getBaseName().map(baseName -> toolProvider.getImportLibraryName("lib/" + names.getDirName() + baseName))));
});
linkFile = link.flatMap(task -> task.getImportLibrary());
}
if (library.isDebuggable() && library.isOptimized() && toolProvider.requiresDebugBinaryStripping()) {
Provider<RegularFile> symbolLocation = buildDirectory.file(library.getBaseName().map(baseName -> toolProvider.getLibrarySymbolFileName("lib/" + names.getDirName() + "stripped/" + baseName)));
Provider<RegularFile> strippedLocation = buildDirectory.file(library.getBaseName().map(baseName -> toolProvider.getSharedLibraryName("lib/" + names.getDirName() + "stripped/" + baseName)));
TaskProvider<StripSymbols> stripSymbols = stripSymbols(link, names, tasks, toolChain, targetPlatform, strippedLocation);
linkFile = runtimeFile = stripSymbols.flatMap(task -> task.getOutputFile());
TaskProvider<ExtractSymbols> extractSymbols = extractSymbols(link, names, tasks, toolChain, targetPlatform, symbolLocation);
library.getOutputs().from(extractSymbols.flatMap(task -> task.getSymbolFile()));
linkFileTask = stripSymbols;
}
library.getLinkTask().set(link);
library.getLinkFile().set(linkFile);
library.getLinkFileProducer().set(linkFileTask);
library.getRuntimeFile().set(runtimeFile);
library.getOutputs().from(library.getLinkFile());
library.getOutputs().from(library.getRuntimeFile());
});
}
use of org.gradle.api.Task in project gradle by gradle.
the class AbstractProperty method getProducerTask.
@Nullable
private Task getProducerTask() {
if (producer == null) {
return null;
}
Task task = producer.getTaskThatOwnsThisObject();
if (task == null) {
TreeFormatter formatter = new TreeFormatter();
formatter.node(getDisplayName().getCapitalizedDisplayName());
formatter.append(" is declared as an output property of ");
format(producer, formatter);
formatter.append(" but does not have a task associated with it.");
throw new IllegalStateException(formatter.toString());
}
return task;
}
Aggregations