Skip to main content
summaryrefslogtreecommitdiffstats
path: root/qt
diff options
context:
space:
mode:
authorDoug Schaefer2016-04-24 01:32:25 +0000
committerDoug Schaefer2016-04-24 02:35:33 +0000
commit7043af66fb1eb4ee06fb025905e37f961818e1e6 (patch)
tree7e1dbfeb0ae7d5d93dff498d636652613e220c1f /qt
parent903eb7ed3acfd7ce1013103c5e03a3c441dd0820 (diff)
downloadorg.eclipse.cdt-7043af66fb1eb4ee06fb025905e37f961818e1e6.tar.gz
org.eclipse.cdt-7043af66fb1eb4ee06fb025905e37f961818e1e6.tar.xz
org.eclipse.cdt-7043af66fb1eb4ee06fb025905e37f961818e1e6.zip
Major change to new build arch to give configs more power.
Creates a single central CBuilder builder which find the C Build Config and delegates the builds to it. That give configs full control over the builds. Qt and CMake build configs are adapted to this new structure. More features are added to the default super class for configs. Change-Id: I5ecfc7a4e9b909da6749189a059cdcd4a208fddd
Diffstat (limited to 'qt')
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtNature.java14
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java147
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationProvider.java42
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuilder.java207
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/project/QtProjectGenerator.java18
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtBuildConfiguration.java7
-rw-r--r--qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/wizards/HelloWorldWizard.java7
7 files changed, 155 insertions, 287 deletions
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtNature.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtNature.java
index e98c3ce8188..03ae8ee323a 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtNature.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtNature.java
@@ -13,18 +13,17 @@ package org.eclipse.cdt.internal.qt.core;
import java.util.Arrays;
import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.build.CBuilder;
import org.eclipse.cdt.core.dom.ILinkage;
import org.eclipse.cdt.core.index.IIndex;
import org.eclipse.cdt.core.index.IIndexLinkage;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.internal.core.index.CIndex;
import org.eclipse.cdt.internal.core.index.IIndexFragment;
-import org.eclipse.cdt.internal.qt.core.build.QtBuilder;
import org.eclipse.core.resources.ICommand;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IProjectNature;
-import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
@@ -59,13 +58,16 @@ public class QtNature implements IProjectNature {
}
}
+ public static void setupBuilder(IProjectDescription projDesc) {
+ ICommand command = projDesc.newCommand();
+ CBuilder.setupBuilder(command);
+ projDesc.setBuildSpec(new ICommand[] { command });
+ }
+
@Override
public void configure() throws CoreException {
IProjectDescription projDesc = project.getDescription();
- ICommand command = projDesc.newCommand();
- command.setBuilderName(QtBuilder.ID);
- command.setBuilding(IncrementalProjectBuilder.AUTO_BUILD, false);
- projDesc.setBuildSpec(new ICommand[] { command });
+ setupBuilder(projDesc);
project.setDescription(projDesc, new NullProgressMonitor());
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java
index 93722eb532e..2c53c5a1134 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java
@@ -19,12 +19,18 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.eclipse.cdt.core.ConsoleOutputStream;
+import org.eclipse.cdt.core.ErrorParserManager;
+import org.eclipse.cdt.core.IConsoleParser;
import org.eclipse.cdt.core.build.CBuildConfiguration;
import org.eclipse.cdt.core.build.ICBuildConfiguration;
import org.eclipse.cdt.core.build.IToolChain;
import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
+import org.eclipse.cdt.core.model.ICModelMarker;
+import org.eclipse.cdt.core.parser.ExtendedScannerInfo;
+import org.eclipse.cdt.core.parser.IExtendedScannerInfo;
import org.eclipse.cdt.core.parser.IScannerInfo;
-import org.eclipse.cdt.core.parser.IScannerInfoChangeListener;
+import org.eclipse.cdt.core.resources.IConsole;
import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.cdt.qt.core.IQtBuildConfiguration;
import org.eclipse.cdt.qt.core.IQtInstall;
@@ -34,7 +40,10 @@ import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
import org.osgi.service.prefs.BackingStoreException;
import org.osgi.service.prefs.Preferences;
@@ -47,8 +56,8 @@ public class QtBuildConfiguration extends CBuildConfiguration implements ICBuild
private final String launchMode;
private Map<String, String> properties;
- public QtBuildConfiguration(IBuildConfiguration config) {
- super(config);
+ public QtBuildConfiguration(IBuildConfiguration config, String name) {
+ super(config, name);
Preferences settings = getSettings();
String installName = settings.get(QTINSTALL_NAME, ""); //$NON-NLS-1$
@@ -62,9 +71,10 @@ public class QtBuildConfiguration extends CBuildConfiguration implements ICBuild
launchMode = settings.get(LAUNCH_MODE, ""); //$NON-NLS-1$
}
- QtBuildConfiguration(IBuildConfiguration config, IToolChain toolChain, IQtInstall qtInstall, String launchMode)
+ QtBuildConfiguration(IBuildConfiguration config, String name, IToolChain toolChain, IQtInstall qtInstall,
+ String launchMode)
throws CoreException {
- super(config, toolChain);
+ super(config, name, toolChain);
this.qtInstall = qtInstall;
this.launchMode = launchMode;
@@ -122,7 +132,7 @@ public class QtBuildConfiguration extends CBuildConfiguration implements ICBuild
}
@Override
- public Path getProgramPath() {
+ public Path getProgramPath() throws CoreException {
String projectName = getProject().getName();
switch (Platform.getOS()) {
case Platform.OS_MACOSX:
@@ -158,8 +168,10 @@ public class QtBuildConfiguration extends CBuildConfiguration implements ICBuild
cmd.add(getProjectFile().toString());
try {
- ProcessBuilder procBuilder = new ProcessBuilder(cmd).directory(getProjectFile().getParent().toFile());
- Process proc = procBuilder.start();
+ ProcessBuilder processBuilder = new ProcessBuilder(cmd)
+ .directory(getProjectFile().getParent().toFile());
+ setBuildEnvironment(processBuilder.environment());
+ Process proc = processBuilder.start();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()))) {
properties = new HashMap<>();
for (String line = reader.readLine(); line != null; line = reader.readLine()) {
@@ -226,21 +238,128 @@ public class QtBuildConfiguration extends CBuildConfiguration implements ICBuild
for (int i = 0; i < includePaths.length; ++i) {
Path path = Paths.get(includePaths[i]);
if (!path.isAbsolute()) {
- includePaths[i] = getBuildDirectory().resolve(path).toString();
+ try {
+ includePaths[i] = getBuildDirectory().resolve(path).toString();
+ } catch (CoreException e) {
+ Activator.log(e);
+ }
}
}
- Path dir = Paths.get(project.getLocationURI());
- return getToolChain().getScannerInfo(getBuildConfiguration(), command, args, Arrays.asList(includePaths),
- resource, dir);
+ IExtendedScannerInfo baseScannerInfo = new ExtendedScannerInfo(null, includePaths);
+ try {
+ return getToolChain().getScannerInfo(getBuildConfiguration(), command,
+ args.toArray(new String[args.size()]), baseScannerInfo, resource,
+ getBuildContainer().getLocationURI());
+ } catch (CoreException e) {
+ Activator.log(e);
+ return null;
+ }
}
@Override
- public void subscribe(IResource resource, IScannerInfoChangeListener listener) {
+ public IProject[] build(int kind, Map<String, String> args, IConsole console, IProgressMonitor monitor)
+ throws CoreException {
+ IProject project = getProject();
+ try {
+ project.deleteMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, false, IResource.DEPTH_INFINITE);
+
+ ConsoleOutputStream errStream = console.getErrorStream();
+ ConsoleOutputStream outStream = console.getOutputStream();
+
+ Path makeCommand = getMakeCommand();
+ if (makeCommand == null) {
+ errStream.write("'make' not found.\n");
+ return null;
+ }
+
+ try (ErrorParserManager epm = new ErrorParserManager(project, getBuildDirectoryURI(), this,
+ getToolChain().getErrorParserIds())) {
+ Path buildDir = getBuildDirectory();
+ if (!buildDir.resolve("Makefile").toFile().exists()) { //$NON-NLS-1$
+ // Need to run qmake
+ List<String> command = new ArrayList<>();
+ command.add(getQmakeCommand().toString());
+
+ String config = getQmakeConfig();
+ if (config != null) {
+ command.add(config);
+ }
+
+ IFile projectFile = project.getFile(project.getName() + ".pro"); //$NON-NLS-1$
+ command.add(projectFile.getLocation().toOSString());
+
+ ProcessBuilder processBuilder = new ProcessBuilder(command)
+ .directory(getBuildDirectory().toFile());
+ setBuildEnvironment(processBuilder.environment());
+ Process process = processBuilder.start();
+
+ StringBuffer msg = new StringBuffer();
+ for (String arg : command) {
+ msg.append(arg).append(' ');
+ }
+ msg.append('\n');
+ outStream.write(msg.toString());
+
+ // TODO qmake error parser
+ watchProcess(process, new IConsoleParser[0], console);
+ }
+
+ // run make
+ ProcessBuilder processBuilder = new ProcessBuilder(makeCommand.toString()).directory(buildDir.toFile());
+ setBuildEnvironment(processBuilder.environment());
+ Process process = processBuilder.start();
+ outStream.write(makeCommand.toString() + '\n');
+ watchProcess(process, new IConsoleParser[] { epm }, console);
+ }
+
+ getProject().refreshLocal(IResource.DEPTH_INFINITE, monitor);
+ return new IProject[] { project };
+ } catch (IOException e) {
+ throw new CoreException(new Status(IStatus.ERROR, Activator.ID, "Building " + project.getName(), e)); //$NON-NLS-1$
+ }
}
@Override
- public void unsubscribe(IResource resource, IScannerInfoChangeListener listener) {
+ public void clean(IConsole console, IProgressMonitor monitor) throws CoreException {
+ IProject project = getProject();
+ try {
+ project.deleteMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, false, IResource.DEPTH_INFINITE);
+
+ ConsoleOutputStream errStream = console.getErrorStream();
+ ConsoleOutputStream outStream = console.getOutputStream();
+
+ Path makeCommand = getMakeCommand();
+ if (makeCommand == null) {
+ errStream.write("'make' not found.\n");
+ return;
+ }
+
+ Path buildDir = getBuildDirectory();
+
+ try (ErrorParserManager epm = new ErrorParserManager(project, getBuildDirectoryURI(), this,
+ getToolChain().getErrorParserIds())) {
+ // run make
+ ProcessBuilder processBuilder = new ProcessBuilder(makeCommand.toString(), "clean") //$NON-NLS-1$
+ .directory(buildDir.toFile());
+ setBuildEnvironment(processBuilder.environment());
+ Process process = processBuilder.start();
+ outStream.write(makeCommand.toString() + "clean\n"); //$NON-NLS-1$
+ watchProcess(process, new IConsoleParser[] { epm }, console);
+ }
+
+ project.refreshLocal(IResource.DEPTH_INFINITE, monitor);
+ } catch (IOException e) {
+ throw new CoreException(new Status(IStatus.ERROR, Activator.ID, "Cleaning " + project.getName(), e)); //$NON-NLS-1$
+ }
+ }
+
+ public Path getMakeCommand() {
+ Path makeCommand = findCommand("make"); //$NON-NLS-1$
+ if (makeCommand == null) {
+ makeCommand = findCommand("mingw32-make"); //$NON-NLS-1$
+ }
+ return makeCommand;
}
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationProvider.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationProvider.java
index f0bbed84e37..f97e3efcb6e 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationProvider.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationProvider.java
@@ -26,7 +26,6 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Platform;
-import org.eclipse.launchbar.core.target.ILaunchTarget;
public class QtBuildConfigurationProvider implements ICBuildConfigurationProvider {
@@ -42,18 +41,14 @@ public class QtBuildConfigurationProvider implements ICBuildConfigurationProvide
}
@Override
- public ICBuildConfiguration getCBuildConfiguration(IBuildConfiguration config) {
+ public ICBuildConfiguration getCBuildConfiguration(IBuildConfiguration config, String name) {
try {
// Double check to make sure this config is ours
- if (!config.getName().startsWith(getId() + '/')) {
- return null;
- }
-
if (!config.getProject().hasNature(QtNature.ID)) {
return null;
}
- return new QtBuildConfiguration(config);
+ return new QtBuildConfiguration(config, name);
} catch (CoreException e) {
Activator.log(e);
}
@@ -120,7 +115,7 @@ public class QtBuildConfigurationProvider implements ICBuildConfigurationProvide
String configName = "qt." + qtInstall.getSpec() + "." + launchMode; //$NON-NLS-1$ //$NON-NLS-2$
IBuildConfiguration config = configManager.createBuildConfiguration(this, project, configName,
monitor);
- QtBuildConfiguration qtConfig = new QtBuildConfiguration(config, toolChain, qtInstall,
+ QtBuildConfiguration qtConfig = new QtBuildConfiguration(config, configName, toolChain, qtInstall,
launchMode);
configManager.addBuildConfiguration(config, qtConfig);
return qtConfig;
@@ -130,35 +125,4 @@ public class QtBuildConfigurationProvider implements ICBuildConfigurationProvide
return null;
}
- public QtBuildConfiguration createConfiguration(IProject project, ILaunchTarget target, String launchMode,
- IProgressMonitor monitor) throws CoreException {
- // Find the toolchains
- Map<String, String> properties = new HashMap<>();
- String os = target.getAttribute(ILaunchTarget.ATTR_OS, null);
- if (os != null) {
- properties.put(IToolChain.ATTR_OS, os);
- }
- String arch = target.getAttribute(ILaunchTarget.ATTR_ARCH, null);
- if (arch != null) {
- properties.put(IToolChain.ATTR_ARCH, arch);
- }
-
- for (IToolChain toolChain : toolChainManager.getToolChainsMatching(properties)) {
- for (IQtInstall qtInstall : qtInstallManager.getInstalls()) {
- if (qtInstallManager.supports(qtInstall, toolChain)) {
- // TODO what if multiple matches
- String configName = "qt." + qtInstall.getSpec() + "." + launchMode; //$NON-NLS-1$ //$NON-NLS-2$
- IBuildConfiguration config = configManager.createBuildConfiguration(this, project, configName,
- monitor);
- QtBuildConfiguration qtConfig = new QtBuildConfiguration(config, toolChain, qtInstall,
- launchMode);
- configManager.addBuildConfiguration(config, qtConfig);
- return qtConfig;
- }
- }
- }
-
- return null;
- }
-
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuilder.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuilder.java
deleted file mode 100644
index b5a21c515f1..00000000000
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuilder.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015, 2016 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *******************************************************************************/
-package org.eclipse.cdt.internal.qt.core.build;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.ConsoleOutputStream;
-import org.eclipse.cdt.core.ErrorParserManager;
-import org.eclipse.cdt.core.build.BuildCommandRunner;
-import org.eclipse.cdt.core.build.ICBuildConfiguration;
-import org.eclipse.cdt.core.model.ICModelMarker;
-import org.eclipse.cdt.core.resources.ACBuilder;
-import org.eclipse.cdt.core.resources.IConsole;
-import org.eclipse.cdt.internal.qt.core.Activator;
-import org.eclipse.cdt.internal.qt.core.Messages;
-import org.eclipse.cdt.qt.core.IQtBuildConfiguration;
-import org.eclipse.core.resources.IBuildConfiguration;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-
-public class QtBuilder extends ACBuilder {
-
- public static final String ID = Activator.ID + ".qtBuilder"; //$NON-NLS-1$
-
- @Override
- protected IProject[] build(int kind, Map<String, String> args, IProgressMonitor monitor) throws CoreException {
- IProject project = getProject();
- try {
- project.deleteMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, false, IResource.DEPTH_INFINITE);
-
- IConsole console = CCorePlugin.getDefault().getConsole();
- console.start(project);
- ConsoleOutputStream errStream = console.getErrorStream();
- ConsoleOutputStream outStream = console.getOutputStream();
-
- ICBuildConfiguration cconfig = getBuildConfig().getAdapter(ICBuildConfiguration.class);
- IQtBuildConfiguration qtConfig = cconfig.getAdapter(QtBuildConfiguration.class);
- if (qtConfig == null) {
- // Qt hasn't been configured yet print a message and bale
- errStream.write(Messages.QtBuilder_0);
- return null;
- }
-
- Path makeCommand = getMakeCommand(getBuildConfig());
- if (makeCommand == null) {
- errStream.write("'make' not found.\n");
- return null;
- }
-
- try (ErrorParserManager epm = new ErrorParserManager(project, qtConfig.getBuildDirectory().toUri(), this,
- qtConfig.getToolChain().getErrorParserIds())) {
- BuildCommandRunner runner = new BuildCommandRunner(project, console, epm);
-
- Path buildDir = qtConfig.getBuildDirectory();
- if (!buildDir.resolve("Makefile").toFile().exists()) { //$NON-NLS-1$
- // Need to run qmake
- List<String> command = new ArrayList<>();
- command.add(qtConfig.getQmakeCommand().toString());
-
- String config = qtConfig.getQmakeConfig();
- if (config != null) {
- command.add(config);
- }
-
- IFile projectFile = qtConfig.getBuildConfiguration().getProject()
- .getFile(project.getName() + ".pro"); //$NON-NLS-1$
- command.add(projectFile.getLocation().toOSString());
-
- ProcessBuilder processBuilder = new ProcessBuilder(command)
- .directory(qtConfig.getBuildDirectory().toFile());
- CCorePlugin.getDefault().getBuildEnvironmentManager().setEnvironment(processBuilder.environment(),
- getBuildConfig(), true);
- Process process = processBuilder.start();
-
- StringBuilder msg = new StringBuilder();
- for (String arg : command) {
- msg.append(arg).append(' ');
- }
- msg.append('\n');
- outStream.write(msg.toString());
-
- runner.monitor(process);
- }
-
- // run make
- ProcessBuilder procBuilder = new ProcessBuilder(makeCommand.toString()).directory(buildDir.toFile());
- CCorePlugin.getDefault().getBuildEnvironmentManager().setEnvironment(procBuilder.environment(),
- getBuildConfig(), true);
- Process process = procBuilder.start();
- outStream.write(makeCommand.toString() + '\n');
- runner.monitor(process);
- }
-
- project.refreshLocal(IResource.DEPTH_INFINITE, monitor);
-
- // clear the scanner info cache
- // TODO be more surgical about what to clear based on what was
- // built.
- // qtConfig.clearScannerInfoCache();
-
- outStream.write("Complete.\n");
- return new IProject[] { project };
- } catch (IOException e) {
- throw new CoreException(new Status(IStatus.ERROR, Activator.ID, "Building " + project.getName(), e)); //$NON-NLS-1$
- }
- }
-
- @Override
- protected void clean(IProgressMonitor monitor) throws CoreException {
- IProject project = getProject();
- try {
- project.deleteMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, false, IResource.DEPTH_INFINITE);
-
- IConsole console = CCorePlugin.getDefault().getConsole();
- console.start(getProject());
- ConsoleOutputStream errStream = console.getErrorStream();
- ConsoleOutputStream outStream = console.getOutputStream();
-
- ICBuildConfiguration cconfig = getBuildConfig().getAdapter(ICBuildConfiguration.class);
- IQtBuildConfiguration qtConfig = cconfig.getAdapter(QtBuildConfiguration.class);
- if (qtConfig == null) {
- // Qt hasn't been configured yet print a message and bale
- errStream.write(Messages.QtBuilder_0);
- return;
- }
-
- Path makeCommand = getMakeCommand(getBuildConfig());
- if (makeCommand == null) {
- errStream.write("'make' not found.\n");
- return;
- }
-
- Path buildDir = qtConfig.getBuildDirectory();
-
- try (ErrorParserManager epm = new ErrorParserManager(project, qtConfig.getBuildDirectory().toUri(), this,
- qtConfig.getToolChain().getErrorParserIds())) {
- BuildCommandRunner runner = new BuildCommandRunner(project, console, epm);
- // run make
- ProcessBuilder procBuilder = new ProcessBuilder(makeCommand.toString(), "clean") //$NON-NLS-1$
- .directory(buildDir.toFile());
- CCorePlugin.getDefault().getBuildEnvironmentManager().setEnvironment(procBuilder.environment(),
- getBuildConfig(), true);
- Process process = procBuilder.start();
- outStream.write(makeCommand.toString() + "clean\n"); //$NON-NLS-1$
- runner.monitor(process);
- }
-
- project.refreshLocal(IResource.DEPTH_INFINITE, monitor);
-
- // clear the scanner info cache
- // TODO be more surgical about what to clear based on what was
- // built.
- // qtConfig.clearScannerInfoCache();
-
- outStream.write("Complete.\n");
- // TODO Auto-generated method stub
- super.clean(monitor);
- } catch (IOException e) {
- throw new CoreException(new Status(IStatus.ERROR, Activator.ID, "Cleaning " + project.getName(), e)); //$NON-NLS-1$
- }
- }
-
- public Path getMakeCommand(IBuildConfiguration config) {
- Path makeCommand = findCommand(getBuildConfig(), "make"); //$NON-NLS-1$
- if (makeCommand == null) {
- makeCommand = findCommand(getBuildConfig(), "mingw32-make"); //$NON-NLS-1$
- }
- return makeCommand;
- }
-
- public Path findCommand(IBuildConfiguration config, String command) {
- if (Platform.getOS().equals(Platform.OS_WIN32)) {
- command += ".exe"; //$NON-NLS-1$
- }
- Map<String, String> env = new HashMap<>(System.getenv());
- CCorePlugin.getDefault().getBuildEnvironmentManager().setEnvironment(env, config, true);
- String[] path = env.get("PATH").split(File.pathSeparator); //$NON-NLS-1$
- for (String dir : path) {
- Path commandPath = Paths.get(dir, command);
- if (Files.exists(commandPath)) {
- return commandPath;
- }
- }
- return null;
- }
-
-}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/project/QtProjectGenerator.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/project/QtProjectGenerator.java
index 2cbd95f69bb..ac870cc917a 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/project/QtProjectGenerator.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/project/QtProjectGenerator.java
@@ -17,35 +17,31 @@ import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.IPathEntry;
import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.cdt.internal.qt.core.QtNature;
-import org.eclipse.cdt.internal.qt.core.build.QtBuilder;
-import org.eclipse.core.resources.ICommand;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.IncrementalProjectBuilder;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.tools.templates.freemarker.FMProjectGenerator;
import org.eclipse.tools.templates.freemarker.SourceRoot;
+import org.osgi.framework.Bundle;
public class QtProjectGenerator extends FMProjectGenerator {
@Override
protected void initProjectDescription(IProjectDescription description) {
- // Natures
description
.setNatureIds(new String[] { CProjectNature.C_NATURE_ID, CCProjectNature.CC_NATURE_ID, QtNature.ID });
-
- // Builders
- ICommand command = description.newCommand();
- command.setBuilderName(QtBuilder.ID);
- command.setBuilding(IncrementalProjectBuilder.AUTO_BUILD, false);
- description.setBuildSpec(new ICommand[] { command });
+ QtNature.setupBuilder(description);
}
@Override
+ public Bundle getSourceBundle() {
+ return Activator.getDefault().getBundle();
+ }
+
+ @Override
public void generate(Map<String, Object> model, IProgressMonitor monitor) throws CoreException {
- setBundle(Activator.getDefault().getBundle());
super.generate(model, monitor);
// Create the sourcefolders
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtBuildConfiguration.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtBuildConfiguration.java
index 08abf17b83f..1e8dcf10e73 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtBuildConfiguration.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtBuildConfiguration.java
@@ -10,16 +10,17 @@ package org.eclipse.cdt.qt.core;
import java.nio.file.Path;
import org.eclipse.cdt.core.build.ICBuildConfiguration;
+import org.eclipse.core.runtime.CoreException;
public interface IQtBuildConfiguration extends ICBuildConfiguration {
- Path getBuildDirectory();
-
+ Path getBuildDirectory() throws CoreException;
+
Path getQmakeCommand();
String getQmakeConfig();
- Path getProgramPath();
+ Path getProgramPath() throws CoreException;
String getLaunchMode();
diff --git a/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/wizards/HelloWorldWizard.java b/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/wizards/HelloWorldWizard.java
index 2a0297d9351..8b3f2a23dec 100644
--- a/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/wizards/HelloWorldWizard.java
+++ b/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/wizards/HelloWorldWizard.java
@@ -17,9 +17,7 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;
@@ -80,9 +78,4 @@ public class HelloWorldWizard extends BasicNewResourceWizard {
return true;
}
- @Override
- public void init(IWorkbench theWorkbench, IStructuredSelection currentSelection) {
- super.init(theWorkbench, currentSelection);
- }
-
}

Back to the top