Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoug Schaefer2015-11-24 14:56:37 -0500
committerDoug Schaefer2015-11-24 22:11:33 -0500
commite3496e12466391b28cb2c1202bd68c0b23a00318 (patch)
treef2c17c34c0d5b6789db1cd8eb4edab4673f1fe54
parentef76cdac14d5f37c3fe3adde5dd3c04d31668857 (diff)
downloadorg.eclipse.cdt-e3496e12466391b28cb2c1202bd68c0b23a00318.tar.gz
org.eclipse.cdt-e3496e12466391b28cb2c1202bd68c0b23a00318.tar.xz
org.eclipse.cdt-e3496e12466391b28cb2c1202bd68c0b23a00318.zip
Bug 481978 - Big overhaul of new build system to work with Qt.
Moved new build system to it's own plug-ins. Cleaned up the root build configuration and toolchain classes and use them for Qt local run builds. Also hooks Qt local run launch delegate to launch target manager and associated delegate interface. Change-Id: I0c0f711ee53005edd399f6d24ba96658d606e1e5
-rw-r--r--build/org.eclipse.cdt.build.core.tests/.classpath7
-rw-r--r--build/org.eclipse.cdt.build.core.tests/.project28
-rw-r--r--build/org.eclipse.cdt.build.core.tests/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--build/org.eclipse.cdt.build.core.tests/META-INF/MANIFEST.MF12
-rw-r--r--build/org.eclipse.cdt.build.core.tests/build.properties4
-rw-r--r--build/org.eclipse.cdt.build.core.tests/pom.xml39
-rw-r--r--build/org.eclipse.cdt.build.core.tests/src/org/eclipse/cdt/build/core/tests/Activator.java29
-rw-r--r--build/org.eclipse.cdt.build.core.tests/src/org/eclipse/cdt/build/core/tests/GCCTests.java22
-rw-r--r--build/org.eclipse.cdt.build.core/.classpath7
-rw-r--r--build/org.eclipse.cdt.build.core/.project28
-rw-r--r--build/org.eclipse.cdt.build.core/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--build/org.eclipse.cdt.build.core/META-INF/MANIFEST.MF15
-rw-r--r--build/org.eclipse.cdt.build.core/about.html24
-rw-r--r--build/org.eclipse.cdt.build.core/build.properties7
-rw-r--r--build/org.eclipse.cdt.build.core/plugin.xml6
-rw-r--r--build/org.eclipse.cdt.build.core/pom.xml17
-rw-r--r--build/org.eclipse.cdt.build.core/schema/toolChainProvider.exsd102
-rw-r--r--build/org.eclipse.cdt.build.core/schema/toolChainType.exsd127
-rw-r--r--build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/CBuildConfiguration.java130
-rw-r--r--build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/CConsoleParser.java (renamed from core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CConsoleParser.java)42
-rw-r--r--build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IConsoleService.java (renamed from core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/IConsoleService.java)7
-rw-r--r--build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IToolChain.java48
-rw-r--r--build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IToolChainManager.java25
-rw-r--r--build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IToolChainProvider.java (renamed from core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/IToolChainFactory.java)14
-rw-r--r--build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IToolChainType.java31
-rw-r--r--build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/Activator.java79
-rw-r--r--build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/CBuildConfigurationCleanup.java73
-rw-r--r--build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/ScannerInfoData.java (renamed from core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/ScannerInfoData.java)14
-rw-r--r--build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/ScannerInfoSaveParticipant.java (renamed from core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/ScannerInfoSaveParticipant.java)2
-rw-r--r--build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/ToolChainManager.java109
-rw-r--r--build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/ToolChainScannerInfo.java (renamed from core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/ToolChainScannerInfo.java)5
-rw-r--r--build/org.eclipse.cdt.build.gcc.core/.classpath7
-rw-r--r--build/org.eclipse.cdt.build.gcc.core/.project28
-rw-r--r--build/org.eclipse.cdt.build.gcc.core/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--build/org.eclipse.cdt.build.gcc.core/META-INF/MANIFEST.MF15
-rw-r--r--build/org.eclipse.cdt.build.gcc.core/about.html24
-rw-r--r--build/org.eclipse.cdt.build.gcc.core/build.properties6
-rw-r--r--build/org.eclipse.cdt.build.gcc.core/plugin.xml18
-rw-r--r--build/org.eclipse.cdt.build.gcc.core/pom.xml17
-rw-r--r--build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/GCCPathToolChainProvider.java (renamed from core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/gcc/GCCToolChainFactory.java)53
-rw-r--r--build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/GCCToolChain.java260
-rw-r--r--build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/GCCToolChainType.java29
-rw-r--r--build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/internal/Activator.java51
-rw-r--r--build/org.eclipse.cdt.build.ui/.classpath7
-rw-r--r--build/org.eclipse.cdt.build.ui/.project28
-rw-r--r--build/org.eclipse.cdt.build.ui/.settings/org.eclipse.jdt.core.prefs7
-rw-r--r--build/org.eclipse.cdt.build.ui/META-INF/MANIFEST.MF17
-rw-r--r--build/org.eclipse.cdt.build.ui/OSGI-INF/consoleservice.xml6
-rw-r--r--build/org.eclipse.cdt.build.ui/about.html24
-rw-r--r--build/org.eclipse.cdt.build.ui/build.properties5
-rw-r--r--build/org.eclipse.cdt.build.ui/pom.xml17
-rw-r--r--build/org.eclipse.cdt.build.ui/src/org/eclipse/cdt/build/ui/internal/Activator.java53
-rw-r--r--build/org.eclipse.cdt.build.ui/src/org/eclipse/cdt/build/ui/internal/CConsoleService.java (renamed from core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/build/CConsoleService.java)24
-rw-r--r--build/org.eclipse.cdt.build.ui/src/org/eclipse/cdt/build/ui/internal/CHyperlink.java (renamed from core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/build/CHyperlink.java)6
-rw-r--r--build/org.eclipse.cdt.build.ui/src/org/eclipse/cdt/build/ui/internal/CPatternMatchListener.java (renamed from core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/build/CPatternMatchListener.java)8
-rw-r--r--build/org.eclipse.cdt.gnu.build-feature/feature.xml7
-rw-r--r--build/org.eclipse.cdt.gnu.build.source-feature/feature.xml7
-rw-r--r--core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/build/GCCTests.java17
-rw-r--r--core/org.eclipse.cdt.core/META-INF/MANIFEST.MF5
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/IncludeSearchPathElement.java58
-rw-r--r--core/org.eclipse.cdt.core/plugin.xml8
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java4
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java159
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CToolChain.java124
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CToolChainManager.java127
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/gcc/GCCToolChain.java201
-rw-r--r--core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF2
-rw-r--r--core/org.eclipse.cdt.ui/OSGI-INF/consoleservice.xml6
-rw-r--r--pom.xml3
-rw-r--r--qt/org.eclipse.cdt.qt.core/META-INF/MANIFEST.MF6
-rw-r--r--qt/org.eclipse.cdt.qt.core/plugin.xml12
-rw-r--r--qt/org.eclipse.cdt.qt.core/schema/qmakeEnvProvider.exsd138
-rw-r--r--qt/org.eclipse.cdt.qt.core/schema/qtInstallTargetMapper.exsd (renamed from core/org.eclipse.cdt.core/schema/ToolChainFactory.exsd)49
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/ASTUtil.java4
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/Activator.java (renamed from qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtPlugin.java)42
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/LocalQtInstallTargetMapper.java43
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtIncludePaths.java6
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtInstall.java14
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtInstallManager.java64
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtKeywords.java2
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtMethodReference.java2
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtNature.java5
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtTemplateGenerator.java6
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfiguration.java180
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationFactory.java171
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuilder.java40
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtScannerInfoProvider.java14
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/codan/QtSyntaxChecker.java6
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/CDTIndex.java4
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeEnvProviderDescriptor.java12
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeEnvProviderManager.java4
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeInfo.java6
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeParser.java6
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeVersion.java4
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QtFactory.java10
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QtIndex.java10
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLocalRunLaunchConfigDelegate.java66
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/AbstractQtPDOMClass.java4
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/PDOMQtLinkageFactory.java4
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/QtPDOMLinkage.java10
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/QtPDOMProperty.java4
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/project/QtProjectGenerator.java40
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtInstall.java2
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtInstallManager.java7
-rw-r--r--qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtInstallTargetMapper.java37
-rw-r--r--qt/org.eclipse.cdt.qt.core/templates/project2/appProject/main.pro4
-rw-r--r--qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/NewQtProjectWizard.java24
-rw-r--r--qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/preferences/QtPreferencePage.java5
-rw-r--r--qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/pro/parser/QtProjectFileModifier.java20
-rw-r--r--qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/resources/QtResourceChangeListener.java19
-rw-r--r--releng/org.eclipse.cdt.platform-feature/feature.xml14
-rw-r--r--releng/org.eclipse.cdt.platform.source-feature/feature.xml14
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF4
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/plugin.xml7
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoProjectGenerator.java12
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoScannerInfoProvider.java4
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfiguration.java107
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuilder.java9
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoGCCToolChain.java64
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunchConfigurationDelegate.java2
120 files changed, 2487 insertions, 1368 deletions
diff --git a/build/org.eclipse.cdt.build.core.tests/.classpath b/build/org.eclipse.cdt.build.core.tests/.classpath
new file mode 100644
index 0000000000..eca7bdba8f
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/build/org.eclipse.cdt.build.core.tests/.project b/build/org.eclipse.cdt.build.core.tests/.project
new file mode 100644
index 0000000000..2a695fe18a
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core.tests/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.cdt.build.core.tests</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/build/org.eclipse.cdt.build.core.tests/.settings/org.eclipse.jdt.core.prefs b/build/org.eclipse.cdt.build.core.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..0c68a61dca
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core.tests/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/build/org.eclipse.cdt.build.core.tests/META-INF/MANIFEST.MF b/build/org.eclipse.cdt.build.core.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..7017a86387
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,12 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Tests
+Bundle-SymbolicName: org.eclipse.cdt.build.core.tests
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.cdt.build.core.tests.Activator
+Bundle-Vendor: Eclipse CDT
+Require-Bundle: org.eclipse.core.runtime,
+ org.junit;bundle-version="4.12.0",
+ org.eclipse.cdt.build.core;bundle-version="1.0.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
diff --git a/build/org.eclipse.cdt.build.core.tests/build.properties b/build/org.eclipse.cdt.build.core.tests/build.properties
new file mode 100644
index 0000000000..34d2e4d2da
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core.tests/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .
diff --git a/build/org.eclipse.cdt.build.core.tests/pom.xml b/build/org.eclipse.cdt.build.core.tests/pom.xml
new file mode 100644
index 0000000000..67dc3a9c38
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core.tests/pom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.cdt</groupId>
+ <artifactId>cdt-parent</artifactId>
+ <version>8.8.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+ <version>1.0.0-SNAPSHOT</version>
+ <artifactId>org.eclipse.cdt.build.core.tests</artifactId>
+ <packaging>eclipse-test-plugin</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.eclipse.tycho</groupId>
+ <artifactId>tycho-surefire-plugin</artifactId>
+ <version>${tycho-version}</version>
+ <configuration>
+ <!-- Need UI harness for quick fix tests -->
+ <useUIHarness>true</useUIHarness>
+ <argLine>${tycho.testArgLine} ${base.ui.test.vmargs}</argLine>
+ <testFailureIgnore>true</testFailureIgnore>
+ <dependencies>
+ <dependency>
+ <artifactId>org.eclipse.platform.feature.group</artifactId>
+ <type>p2-installable-unit</type>
+ </dependency>
+ </dependencies>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/build/org.eclipse.cdt.build.core.tests/src/org/eclipse/cdt/build/core/tests/Activator.java b/build/org.eclipse.cdt.build.core.tests/src/org/eclipse/cdt/build/core/tests/Activator.java
new file mode 100644
index 0000000000..95e3736544
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core.tests/src/org/eclipse/cdt/build/core/tests/Activator.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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.build.core.tests;
+
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+
+public class Activator implements BundleActivator {
+
+ private static BundleContext context;
+
+ static BundleContext getContext() {
+ return context;
+ }
+
+ public void start(BundleContext bundleContext) throws Exception {
+ Activator.context = bundleContext;
+ }
+
+ public void stop(BundleContext bundleContext) throws Exception {
+ Activator.context = null;
+ }
+
+}
diff --git a/build/org.eclipse.cdt.build.core.tests/src/org/eclipse/cdt/build/core/tests/GCCTests.java b/build/org.eclipse.cdt.build.core.tests/src/org/eclipse/cdt/build/core/tests/GCCTests.java
new file mode 100644
index 0000000000..e6be8a33fc
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core.tests/src/org/eclipse/cdt/build/core/tests/GCCTests.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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.build.core.tests;
+
+import java.io.IOException;
+
+import org.junit.Test;
+
+public class GCCTests {
+
+ @Test
+ public void tryGCCDiscovery() throws IOException {
+ long start = System.currentTimeMillis();
+ System.out.println("Time: " + (System.currentTimeMillis() - start));
+ }
+
+}
diff --git a/build/org.eclipse.cdt.build.core/.classpath b/build/org.eclipse.cdt.build.core/.classpath
new file mode 100644
index 0000000000..eca7bdba8f
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/build/org.eclipse.cdt.build.core/.project b/build/org.eclipse.cdt.build.core/.project
new file mode 100644
index 0000000000..0abc37f7a9
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.cdt.build.core</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/build/org.eclipse.cdt.build.core/.settings/org.eclipse.jdt.core.prefs b/build/org.eclipse.cdt.build.core/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..0c68a61dca
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/build/org.eclipse.cdt.build.core/META-INF/MANIFEST.MF b/build/org.eclipse.cdt.build.core/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..0d6b5d9318
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Core
+Bundle-SymbolicName: org.eclipse.cdt.build.core;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.cdt.build.core.internal.Activator
+Bundle-Vendor: Eclipse CDT
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources;bundle-version="3.10.0",
+ org.eclipse.cdt.core;bundle-version="5.12.0",
+ com.google.gson,
+ org.eclipse.launchbar.core;bundle-version="2.0.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.cdt.build.core
diff --git a/build/org.eclipse.cdt.build.core/about.html b/build/org.eclipse.cdt.build.core/about.html
new file mode 100644
index 0000000000..d7c511887d
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/about.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>About</title></head>
+
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 22, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body></html> \ No newline at end of file
diff --git a/build/org.eclipse.cdt.build.core/build.properties b/build/org.eclipse.cdt.build.core/build.properties
new file mode 100644
index 0000000000..e34cf11140
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ about.html,\
+ schema/
diff --git a/build/org.eclipse.cdt.build.core/plugin.xml b/build/org.eclipse.cdt.build.core/plugin.xml
new file mode 100644
index 0000000000..12407c4f92
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/plugin.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension-point id="toolChainType" name="Tool Chain Type" schema="schema/toolChainType.exsd"/>
+ <extension-point id="toolChainProvider" name="Tool Chain Provider" schema="schema/toolChainProvider.exsd"/>
+</plugin>
diff --git a/build/org.eclipse.cdt.build.core/pom.xml b/build/org.eclipse.cdt.build.core/pom.xml
new file mode 100644
index 0000000000..2986e2ee86
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/pom.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.cdt</groupId>
+ <artifactId>cdt-parent</artifactId>
+ <version>8.8.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+ <version>1.0.0-SNAPSHOT</version>
+ <artifactId>org.eclipse.cdt.build.core</artifactId>
+ <packaging>eclipse-plugin</packaging>
+</project> \ No newline at end of file
diff --git a/build/org.eclipse.cdt.build.core/schema/toolChainProvider.exsd b/build/org.eclipse.cdt.build.core/schema/toolChainProvider.exsd
new file mode 100644
index 0000000000..1c376e3d54
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/schema/toolChainProvider.exsd
@@ -0,0 +1,102 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.cdt.build.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appinfo>
+ <meta.schema plugin="org.eclipse.cdt.build.core" id="ToolChainProvider" name="Tool Chain Provider"/>
+ </appinfo>
+ <documentation>
+ A toolchain provider provides automatically discovered toolchains when requested. Providers have enablement to make sure they aren&apos;t called unless there&apos;s a good chance they have toolchains to offer.
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appinfo>
+ <meta.element />
+ </appinfo>
+ </annotation>
+ <complexType>
+ <sequence>
+ <element ref="provider"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="provider">
+ <complexType>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.cdt.build.core.IToolChainProvider"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="since"/>
+ </appinfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="examples"/>
+ </appinfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="apiinfo"/>
+ </appinfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="implementation"/>
+ </appinfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+
+</schema>
diff --git a/build/org.eclipse.cdt.build.core/schema/toolChainType.exsd b/build/org.eclipse.cdt.build.core/schema/toolChainType.exsd
new file mode 100644
index 0000000000..4bd0c4bd10
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/schema/toolChainType.exsd
@@ -0,0 +1,127 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.cdt.build.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<annotation>
+ <appinfo>
+ <meta.schema plugin="org.eclipse.cdt.build.core" id="ToolChainType" name="Tool Chain Type"/>
+ </appinfo>
+ <documentation>
+ Defines toolchain type extensions. Toolchain types provide toolchain objects for a given type of toolchain. They are passed properties that are stored for the toolchain.
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <annotation>
+ <appinfo>
+ <meta.element />
+ </appinfo>
+ </annotation>
+ <complexType>
+ <sequence minOccurs="1" maxOccurs="unbounded">
+ <element ref="toolChainType"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute translatable="true"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="toolChainType">
+ <complexType>
+ <sequence minOccurs="0" maxOccurs="unbounded">
+ <element ref="targetType"/>
+ </sequence>
+ <attribute name="id" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.cdt.build.core.IToolChainType"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="targetType">
+ <complexType>
+ <attribute name="id" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appinfo>
+ <meta.attribute kind="identifier" basedOn="org.eclipse.launchbar.core.launchTargetTypes/launchTargetType/@id"/>
+ </appinfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="since"/>
+ </appinfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="examples"/>
+ </appinfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="apiinfo"/>
+ </appinfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appinfo>
+ <meta.section type="implementation"/>
+ </appinfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+
+</schema>
diff --git a/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/CBuildConfiguration.java b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/CBuildConfiguration.java
new file mode 100644
index 0000000000..e7f2f7a829
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/CBuildConfiguration.java
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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.build.core;
+
+import java.io.IOException;
+import java.util.Collection;
+
+import org.eclipse.cdt.build.core.internal.Activator;
+import org.eclipse.cdt.build.core.internal.ScannerInfoData;
+import org.eclipse.cdt.build.core.internal.ToolChainScannerInfo;
+import org.eclipse.cdt.core.model.ILanguage;
+import org.eclipse.cdt.core.parser.IExtendedScannerInfo;
+import org.eclipse.cdt.core.parser.IScannerInfo;
+import org.eclipse.core.resources.IBuildConfiguration;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.PlatformObject;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+/**
+ * Root class for CDT build configurations. Provides access to the build
+ * settings for subclasses.
+ *
+ * @since 5.12
+ */
+public abstract class CBuildConfiguration extends PlatformObject {
+
+ private static final String TOOLCHAIN_TYPE = "cdt.toolChain.type"; //$NON-NLS-1$
+ private static final String TOOLCHAIN_NAME = "cdt.toolChain.name"; //$NON-NLS-1$
+
+ private final IBuildConfiguration config;
+ private final IToolChain toolChain;
+
+ private ScannerInfoData scannerInfoData;
+
+ protected CBuildConfiguration(IBuildConfiguration config) {
+ this.config = config;
+
+ // Load toolchain from prefs
+ Preferences settings = getSettings();
+ String typeId = settings.get(TOOLCHAIN_TYPE, ""); //$NON-NLS-1$
+ String id = settings.get(TOOLCHAIN_NAME, ""); //$NON-NLS-1$
+ toolChain = !id.isEmpty() ? Activator.getToolChainManager().getToolChain(typeId, id) : null;
+ }
+
+ protected CBuildConfiguration(IBuildConfiguration config, IToolChain toolChain) {
+ this.config = config;
+ this.toolChain = toolChain;
+ Preferences settings = getSettings();
+ settings.put(TOOLCHAIN_TYPE, toolChain.getType().getId());
+ settings.put(TOOLCHAIN_NAME, toolChain.getName());
+ try {
+ settings.flush();
+ } catch (BackingStoreException e) {
+ Activator.log(e);
+ }
+ }
+
+ public IBuildConfiguration getBuildConfiguration() {
+ return config;
+ }
+
+ public String getName() {
+ return config.getName();
+ }
+
+ public IProject getProject() {
+ return config.getProject();
+ }
+
+ public void setActive(IProgressMonitor monitor) throws CoreException {
+ IProject project = config.getProject();
+ if (config.equals(project.getActiveBuildConfig())) {
+ // already set
+ return;
+ }
+
+ IProjectDescription projectDesc = project.getDescription();
+ projectDesc.setActiveBuildConfig(config.getName());
+ project.setDescription(projectDesc, monitor);
+ }
+
+ protected Preferences getSettings() {
+ return InstanceScope.INSTANCE.getNode(Activator.getId()).node("config") //$NON-NLS-1$
+ .node(getProject().getName()).node(config.getName());
+ }
+
+ public IToolChain getToolChain() {
+ return toolChain;
+ }
+
+ public IScannerInfo getScannerInfo(IResource resource) throws IOException {
+ return getScannerInfoData().getScannerInfo(resource);
+ }
+
+ public void putScannerInfo(ILanguage language, IExtendedScannerInfo info) {
+ getScannerInfoData().putScannerInfo(language, info);
+ }
+
+ public void putScannerInfo(IResource resource, ToolChainScannerInfo info) {
+ getScannerInfoData().putScannerInfo(resource, info);
+ }
+
+ private ScannerInfoData getScannerInfoData() {
+ if (scannerInfoData == null) {
+ scannerInfoData = ScannerInfoData.load(this);
+ }
+ return scannerInfoData;
+ }
+
+ public void clearScannerInfo() throws CoreException {
+ scannerInfoData = null;
+ }
+
+ public Collection<CConsoleParser> getConsoleParsers() throws CoreException {
+ IToolChain toolChain = getToolChain();
+ return toolChain != null ? toolChain.getConsoleParsers() : null;
+ }
+
+}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CConsoleParser.java b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/CConsoleParser.java
index 13dba6872e..b0fa53302d 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CConsoleParser.java
+++ b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/CConsoleParser.java
@@ -5,16 +5,17 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
-package org.eclipse.cdt.core.build;
+package org.eclipse.cdt.build.core;
+import java.nio.file.Path;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.model.ICModelMarker;
import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
/**
@@ -99,26 +100,31 @@ public abstract class CConsoleParser {
protected abstract int getLinkLength(Matcher matcher);
- public IMarker generateMarker(IFolder buildDirectory, String text) {
+ public IMarker generateMarker(Path buildDirectory, String text) {
Matcher matcher = errorPattern.matcher(text);
if (matcher.matches()) {
String fileName = getFileName(matcher);
- IFile file = buildDirectory.getFile(fileName);
- if (file.exists()) {
- try {
- IMarker marker = file.createMarker(ICModelMarker.C_MODEL_PROBLEM_MARKER);
- marker.setAttribute(IMarker.MESSAGE, getMessage(matcher));
- marker.setAttribute(IMarker.SEVERITY, getSeverity(matcher));
- marker.setAttribute(IMarker.LINE_NUMBER, getLineNumber(matcher));
- marker.setAttribute(IMarker.CHAR_START, -1);
- marker.setAttribute(IMarker.CHAR_END, -1);
- marker.setAttribute(LINK_OFFSET, getLinkOffset(matcher));
- marker.setAttribute(LINK_LENGTH, getLinkLength(matcher));
- return marker;
- } catch (CoreException e) {
- CCorePlugin.log(e);
- return null;
+ Path filePath = buildDirectory.resolve(fileName);
+
+ IFile[] files = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocationURI(filePath.toUri());
+ if (files.length > 0) {
+ IFile file = files[0];
+ if (file.exists()) {
+ try {
+ IMarker marker = file.createMarker(ICModelMarker.C_MODEL_PROBLEM_MARKER);
+ marker.setAttribute(IMarker.MESSAGE, getMessage(matcher));
+ marker.setAttribute(IMarker.SEVERITY, getSeverity(matcher));
+ marker.setAttribute(IMarker.LINE_NUMBER, getLineNumber(matcher));
+ marker.setAttribute(IMarker.CHAR_START, -1);
+ marker.setAttribute(IMarker.CHAR_END, -1);
+ marker.setAttribute(LINK_OFFSET, getLinkOffset(matcher));
+ marker.setAttribute(LINK_LENGTH, getLinkLength(matcher));
+ return marker;
+ } catch (CoreException e) {
+ CCorePlugin.log(e);
+ return null;
+ }
}
}
}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/IConsoleService.java b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IConsoleService.java
index 54a0913379..e9811bdeed 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/IConsoleService.java
+++ b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IConsoleService.java
@@ -5,11 +5,10 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
-package org.eclipse.cdt.core.build;
+package org.eclipse.cdt.build.core;
import java.io.IOException;
-
-import org.eclipse.core.resources.IFolder;
+import java.nio.file.Path;
/**
* This may be temporary. It's uses the TextConsole's parsing and hyperlink
@@ -31,7 +30,7 @@ public interface IConsoleService {
* @param buildDirectory
* @throws IOException
*/
- void monitor(Process process, CConsoleParser[] consoleParsers, IFolder buildDirectory) throws IOException;
+ void monitor(Process process, CConsoleParser[] consoleParsers, Path buildDirectory) throws IOException;
/**
* Write a message on the console stdout.
diff --git a/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IToolChain.java b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IToolChain.java
new file mode 100644
index 0000000000..fbf0a4ac8e
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IToolChain.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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.build.core;
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.cdt.core.parser.IExtendedScannerInfo;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.launchbar.core.target.ILaunchTarget;
+import org.osgi.service.prefs.Preferences;
+
+/**
+ * Represents a toolchain used to build and deploy systems.
+ */
+public interface IToolChain {
+
+ IToolChainType getType();
+
+ String getName();
+
+ boolean supports(ILaunchTarget target);
+
+ IExtendedScannerInfo getScannerInfo(String command, List<String> args, List<String> includePaths,
+ IResource resource, Path buildDirectory) throws IOException;
+
+ Collection<CConsoleParser> getConsoleParsers();
+
+ void setEnvironment(Map<String, String> env);
+
+ /**
+ * Called by the tool chain manager to save settings for this toolchain into
+ * the user's preferences.
+ *
+ * @param properties
+ * settings for the toolchain to be persisted
+ */
+ void save(Preferences properties);
+
+}
diff --git a/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IToolChainManager.java b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IToolChainManager.java
new file mode 100644
index 0000000000..0b6ca2c75d
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IToolChainManager.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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.build.core;
+
+import java.util.Collection;
+
+import org.eclipse.launchbar.core.target.ILaunchTarget;
+
+/**
+ * The global toolchain manager. Accessed as an OSGi service.
+ */
+public interface IToolChainManager {
+
+ IToolChainType getToolChainType(String id);
+
+ IToolChain getToolChain(String typeId, String name);
+
+ Collection<IToolChain> getToolChainsSupporting(ILaunchTarget target);
+
+}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/IToolChainFactory.java b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IToolChainProvider.java
index ff310c718a..dec4679055 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/IToolChainFactory.java
+++ b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IToolChainProvider.java
@@ -5,18 +5,16 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
-package org.eclipse.cdt.core.build;
+package org.eclipse.cdt.build.core;
-import org.osgi.service.prefs.Preferences;
+import java.util.Collection;
/**
- * @since 5.12
+ * A provider of toolchains. Registered with the toolChainProvider extension
+ * point.
*/
-public interface IToolChainFactory {
+public interface IToolChainProvider {
- CToolChain createToolChain(String id, Preferences settings);
-
- default void discover() {
- }
+ Collection<IToolChain> getToolChains();
}
diff --git a/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IToolChainType.java b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IToolChainType.java
new file mode 100644
index 0000000000..aae69d2037
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/IToolChainType.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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.build.core;
+
+import org.osgi.service.prefs.Preferences;
+
+/**
+ * A type of toolchain.
+ */
+public interface IToolChainType {
+
+ String getId();
+
+ /**
+ * Called by the toolchain to inflate the toolchain from the user preference
+ * store.
+ *
+ * @param name
+ * the name of the toolchain
+ * @param properties
+ * the persisted settings for the toolchain
+ * @return the toolchain initialized with the settings.
+ */
+ IToolChain getToolChain(String name, Preferences properties);
+
+}
diff --git a/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/Activator.java b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/Activator.java
new file mode 100644
index 0000000000..d8625d3a09
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/Activator.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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.build.core.internal;
+
+import org.eclipse.cdt.build.core.IToolChainManager;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+public class Activator extends Plugin {
+
+ private static Activator plugin;
+
+ private static ToolChainManager toolChainManager;
+ private static CBuildConfigurationCleanup configCleanup;
+
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+
+ toolChainManager = new ToolChainManager();
+ context.registerService(IToolChainManager.class, toolChainManager, null);
+
+ configCleanup = new CBuildConfigurationCleanup();
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(configCleanup);
+
+ // Save participant for toolchain data
+ ResourcesPlugin.getWorkspace().addSaveParticipant(getId(), new ScannerInfoSaveParticipant());
+ }
+
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+
+ ResourcesPlugin.getWorkspace().removeResourceChangeListener(configCleanup);
+ configCleanup = null;
+
+ super.stop(context);
+ }
+
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+ public static String getId() {
+ return plugin.getBundle().getSymbolicName();
+ }
+
+ public static ToolChainManager getToolChainManager() {
+ return toolChainManager;
+ }
+
+ public static void log(IStatus status) {
+ plugin.getLog().log(status);
+ }
+
+ public static void log(Exception e) {
+ if (e instanceof CoreException) {
+ plugin.getLog().log(((CoreException) e).getStatus());
+ } else {
+ plugin.getLog().log(new Status(IStatus.ERROR, getId(), e.getLocalizedMessage(), e));
+ }
+ }
+
+ public static <T> T getService(Class<T> service) {
+ BundleContext context = plugin.getBundle().getBundleContext();
+ ServiceReference<T> ref = context.getServiceReference(service);
+ return ref != null ? context.getService(ref) : null;
+ }
+
+}
diff --git a/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/CBuildConfigurationCleanup.java b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/CBuildConfigurationCleanup.java
new file mode 100644
index 0000000000..bd4cd7ae14
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/CBuildConfigurationCleanup.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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.build.core.internal;
+
+import java.io.IOException;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+public class CBuildConfigurationCleanup implements IResourceChangeListener {
+
+ @Override
+ public void resourceChanged(IResourceChangeEvent event) {
+ if (event.getType() == IResourceChangeEvent.PRE_CLOSE || event.getType() == IResourceChangeEvent.PRE_DELETE) {
+ if (event.getResource().getType() == IResource.PROJECT) {
+ IProject project = event.getResource().getProject();
+
+ // Clean up the config settings
+ Preferences parentNode = InstanceScope.INSTANCE.getNode(Activator.getId()).node("config"); //$NON-NLS-1$
+ if (parentNode != null) {
+ Preferences projectNode = parentNode.node(project.getName());
+ if (projectNode != null) {
+ try {
+ projectNode.removeNode();
+ parentNode.flush();
+ } catch (BackingStoreException e) {
+ Activator.log(e);
+ }
+ }
+ }
+
+ // Clean up the scanner info data
+ IPath stateLoc = Activator.getDefault().getStateLocation();
+ IPath scannerInfoPath = stateLoc.append(project.getName());
+ Path directory = scannerInfoPath.toFile().toPath();
+ try {
+ Files.walkFileTree(directory, new SimpleFileVisitor<Path>() {
+ @Override
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+ Files.delete(file);
+ return FileVisitResult.CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
+ Files.delete(dir);
+ return FileVisitResult.CONTINUE;
+ }
+ });
+ } catch (IOException e) {
+ Activator.log(e);
+ }
+ }
+ }
+ }
+
+}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/ScannerInfoData.java b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/ScannerInfoData.java
index 7da5ae3797..a1599081ea 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/ScannerInfoData.java
+++ b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/ScannerInfoData.java
@@ -5,7 +5,7 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
-package org.eclipse.cdt.internal.core.build;
+package org.eclipse.cdt.build.core.internal;
import java.io.File;
import java.io.FileReader;
@@ -19,16 +19,15 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import org.eclipse.cdt.build.core.CBuildConfiguration;
import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.build.CBuildConfiguration;
import org.eclipse.cdt.core.model.ILanguage;
import org.eclipse.cdt.core.model.LanguageManager;
-import org.eclipse.cdt.core.parser.ExtendedScannerInfo;
+import org.eclipse.cdt.core.parser.IExtendedScannerInfo;
import org.eclipse.cdt.core.parser.IScannerInfo;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.content.IContentType;
import com.google.gson.Gson;
@@ -121,7 +120,7 @@ public class ScannerInfoData {
queueSave();
}
- public void putScannerInfo(ILanguage language, ExtendedScannerInfo info) {
+ public void putScannerInfo(ILanguage language, IExtendedScannerInfo info) {
if (perLanguageInfo == null) {
perLanguageInfo = new HashMap<>();
}
@@ -130,9 +129,8 @@ public class ScannerInfoData {
}
public static ScannerInfoData load(CBuildConfiguration config) {
- IPath stateLoc = Platform.getStateLocation(CCorePlugin.getDefault().getBundle());
- IPath scannerInfoPath = stateLoc.append(config.getProject().getName())
- .append(config.getName() + ".scInfo"); //$NON-NLS-1$
+ IPath stateLoc = Activator.getDefault().getStateLocation();
+ IPath scannerInfoPath = stateLoc.append(config.getProject().getName()).append(config.getName() + ".scInfo"); //$NON-NLS-1$
File scannerInfoFile = scannerInfoPath.toFile();
ScannerInfoData info = null;
if (scannerInfoFile.canRead()) {
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/ScannerInfoSaveParticipant.java b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/ScannerInfoSaveParticipant.java
index 9e989bf873..ed6e41ecb3 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/ScannerInfoSaveParticipant.java
+++ b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/ScannerInfoSaveParticipant.java
@@ -5,7 +5,7 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
-package org.eclipse.cdt.internal.core.build;
+package org.eclipse.cdt.build.core.internal;
import java.util.HashSet;
import java.util.Set;
diff --git a/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/ToolChainManager.java b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/ToolChainManager.java
new file mode 100644
index 0000000000..31f97c7985
--- /dev/null
+++ b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/ToolChainManager.java
@@ -0,0 +1,109 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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.build.core.internal;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.cdt.build.core.IToolChain;
+import org.eclipse.cdt.build.core.IToolChainManager;
+import org.eclipse.cdt.build.core.IToolChainProvider;
+import org.eclipse.cdt.build.core.IToolChainType;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.launchbar.core.target.ILaunchTarget;
+
+public class ToolChainManager implements IToolChainManager {
+
+ private Map<String, IConfigurationElement> typeElements;
+ private Map<String, IToolChainType> types;
+ private Map<String, Map<String, IToolChain>> toolChains;
+
+ private void init() {
+ if (typeElements == null) {
+ typeElements = new HashMap<>();
+ types = new HashMap<>();
+
+ // Load the types
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+ IExtensionPoint typesPoint = registry.getExtensionPoint(Activator.getId() + ".toolChainType"); //$NON-NLS-1$
+ for (IConfigurationElement element : typesPoint.getConfigurationElements()) {
+ String id = element.getAttribute("id"); //$NON-NLS-1$
+ typeElements.put(id, element);
+ }
+
+ // Load the discovered toolchains
+ toolChains = new HashMap<>();
+ IExtensionPoint providersPoint = registry.getExtensionPoint(Activator.getId() + ".toolChainProvider"); //$NON-NLS-1$
+ for (IConfigurationElement element : providersPoint.getConfigurationElements()) {
+ // TODO check for enablement
+ try {
+ IToolChainProvider provider = (IToolChainProvider) element.createExecutableExtension("class"); //$NON-NLS-1$
+ for (IToolChain toolChain : provider.getToolChains()) {
+ String typeId = toolChain.getType().getId();
+ Map<String, IToolChain> tcs = toolChains.get(typeId);
+ if (tcs == null) {
+ tcs = new HashMap<>();
+ toolChains.put(typeId, tcs);
+ }
+ tcs.put(toolChain.getName(), toolChain);
+ }
+ } catch (CoreException e) {
+ Activator.log(e);
+ }
+ }
+ }
+ }
+
+ @Override
+ public IToolChainType getToolChainType(String id) {
+ init();
+ IToolChainType type = types.get(id);
+ if (type == null) {
+ IConfigurationElement element = typeElements.get(id);
+ if (element != null) {
+ try {
+ type = (IToolChainType) element.createExecutableExtension("class"); //$NON-NLS-1$
+ types.put(id, type);
+ } catch (CoreException e) {
+ Activator.log(e);
+ }
+ }
+ }
+ return type;
+ }
+
+ @Override
+ public IToolChain getToolChain(String typeId, String name) {
+ init();
+ Map<String, IToolChain> tcs = toolChains.get(typeId);
+ return tcs != null ? tcs.get(name) : null;
+ }
+
+ @Override
+ public Collection<IToolChain> getToolChainsSupporting(ILaunchTarget target) {
+ init();
+
+ List<IToolChain> supportingtcs = new ArrayList<>();
+ for (Map<String, IToolChain> tcs : toolChains.values()) {
+ for (IToolChain tc : tcs.values()) {
+ if (tc.supports(target)) {
+ supportingtcs.add(tc);
+ }
+ }
+ }
+ return supportingtcs;
+ }
+
+}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/ToolChainScannerInfo.java b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/ToolChainScannerInfo.java
index 050991bcf2..1547c00c25 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/ToolChainScannerInfo.java
+++ b/build/org.eclipse.cdt.build.core/src/org/eclipse/cdt/build/core/internal/ToolChainScannerInfo.java
@@ -5,7 +5,7 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
-package org.eclipse.cdt.internal.core.build;
+package org.eclipse.cdt.build.core.internal;
import java.util.Collection;
import java.util.Collections;
@@ -14,6 +14,7 @@ import java.util.Map;
import java.util.Set;
import org.eclipse.cdt.core.parser.ExtendedScannerInfo;
+import org.eclipse.cdt.core.parser.IExtendedScannerInfo;
import org.eclipse.cdt.core.parser.IScannerInfo;
import org.eclipse.core.resources.IResource;
@@ -27,7 +28,7 @@ public class ToolChainScannerInfo {
private transient IScannerInfo scannerInfo;
- public ToolChainScannerInfo(ExtendedScannerInfo scannerInfo) {
+ public ToolChainScannerInfo(IExtendedScannerInfo scannerInfo) {
this.scannerInfo = scannerInfo;
this.definedSymbols = scannerInfo.getDefinedSymbols();
this.includePaths = scannerInfo.getIncludePaths();
diff --git a/build/org.eclipse.cdt.build.gcc.core/.classpath b/build/org.eclipse.cdt.build.gcc.core/.classpath
new file mode 100644
index 0000000000..eca7bdba8f
--- /dev/null
+++ b/build/org.eclipse.cdt.build.gcc.core/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/build/org.eclipse.cdt.build.gcc.core/.project b/build/org.eclipse.cdt.build.gcc.core/.project
new file mode 100644
index 0000000000..46346d9b6c
--- /dev/null
+++ b/build/org.eclipse.cdt.build.gcc.core/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.cdt.build.gcc.core</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/build/org.eclipse.cdt.build.gcc.core/.settings/org.eclipse.jdt.core.prefs b/build/org.eclipse.cdt.build.gcc.core/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..0c68a61dca
--- /dev/null
+++ b/build/org.eclipse.cdt.build.gcc.core/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/build/org.eclipse.cdt.build.gcc.core/META-INF/MANIFEST.MF b/build/org.eclipse.cdt.build.gcc.core/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..8d49393217
--- /dev/null
+++ b/build/org.eclipse.cdt.build.gcc.core/META-INF/MANIFEST.MF
@@ -0,0 +1,15 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: GCC support for CDT Build Core
+Bundle-SymbolicName: org.eclipse.cdt.build.gcc.core;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.cdt.build.gcc.core.internal.Activator
+Bundle-Vendor: Eclipse CDT
+Require-Bundle: org.eclipse.core.runtime,
+ org.eclipse.core.resources;bundle-version="3.10.0",
+ org.eclipse.launchbar.core;bundle-version="2.0.0",
+ org.eclipse.cdt.build.core;bundle-version="1.0.0",
+ org.eclipse.cdt.core;bundle-version="5.12.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Export-Package: org.eclipse.cdt.build.gcc.core
diff --git a/build/org.eclipse.cdt.build.gcc.core/about.html b/build/org.eclipse.cdt.build.gcc.core/about.html
new file mode 100644
index 0000000000..d7c511887d
--- /dev/null
+++ b/build/org.eclipse.cdt.build.gcc.core/about.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>About</title></head>
+
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 22, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body></html> \ No newline at end of file
diff --git a/build/org.eclipse.cdt.build.gcc.core/build.properties b/build/org.eclipse.cdt.build.gcc.core/build.properties
new file mode 100644
index 0000000000..786b1df936
--- /dev/null
+++ b/build/org.eclipse.cdt.build.gcc.core/build.properties
@@ -0,0 +1,6 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml,\
+ about.html
diff --git a/build/org.eclipse.cdt.build.gcc.core/plugin.xml b/build/org.eclipse.cdt.build.gcc.core/plugin.xml
new file mode 100644
index 0000000000..7b98756e95
--- /dev/null
+++ b/build/org.eclipse.cdt.build.gcc.core/plugin.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.cdt.build.core.toolChainType">
+ <toolChainType
+ class="org.eclipse.cdt.build.gcc.core.GCCToolChainType"
+ id="org.eclipse.cdt.build.gcc">
+ </toolChainType>
+ </extension>
+ <extension
+ point="org.eclipse.cdt.build.core.toolChainProvider">
+ <provider
+ class="org.eclipse.cdt.build.gcc.core.GCCPathToolChainProvider">
+ </provider>
+ </extension>
+
+</plugin>
diff --git a/build/org.eclipse.cdt.build.gcc.core/pom.xml b/build/org.eclipse.cdt.build.gcc.core/pom.xml
new file mode 100644
index 0000000000..ab26166ebc
--- /dev/null
+++ b/build/org.eclipse.cdt.build.gcc.core/pom.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.cdt</groupId>
+ <artifactId>cdt-parent</artifactId>
+ <version>8.8.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+ <version>1.0.0-SNAPSHOT</version>
+ <artifactId>org.eclipse.cdt.build.gcc.core</artifactId>
+ <packaging>eclipse-plugin</packaging>
+</project> \ No newline at end of file
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/gcc/GCCToolChainFactory.java b/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/GCCPathToolChainProvider.java
index 0309a44acc..1e8ba8622f 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/gcc/GCCToolChainFactory.java
+++ b/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/GCCPathToolChainProvider.java
@@ -5,13 +5,16 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
-package org.eclipse.cdt.core.build.gcc;
+package org.eclipse.cdt.build.gcc.core;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -19,22 +22,26 @@ import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.eclipse.cdt.core.build.CToolChain;
-import org.eclipse.cdt.core.build.IToolChainFactory;
-import org.osgi.service.prefs.Preferences;
+import org.eclipse.cdt.build.core.IToolChain;
+import org.eclipse.cdt.build.core.IToolChainManager;
+import org.eclipse.cdt.build.core.IToolChainProvider;
+import org.eclipse.cdt.build.core.IToolChainType;
+import org.eclipse.cdt.build.gcc.core.internal.Activator;
/**
- * @since 5.12
+ * Finds gcc and clang on the path.
*/
-public class GCCToolChainFactory implements IToolChainFactory {
+public class GCCPathToolChainProvider implements IToolChainProvider {
private static Pattern gccPattern = Pattern.compile("(.*-)?(gcc|g\\+\\+|clang|clang\\+\\+)(-[0-9].*)?"); //$NON-NLS-1$
- /**
- * Discover gcc installs that exist on the path.
- */
@Override
- public void discover() {
+ public Collection<IToolChain> getToolChains() {
+ IToolChainManager manager = Activator.getService(IToolChainManager.class);
+ IToolChainType type = null;
+
+ List<IToolChain> toolChains = new ArrayList<>();
+
String path = null;
for (Entry<String, String> entry : System.getenv().entrySet()) {
if (entry.getKey().equalsIgnoreCase("PATH")) { //$NON-NLS-1$
@@ -68,12 +75,29 @@ public class GCCToolChainFactory implements IToolChainFactory {
}
for (Entry<String, List<String>> entry : installs.entrySet()) {
- System.out.println(entry.getKey());
+ String version = entry.getKey();
+ String searchStr;
+ if (version.contains("LLVM")) {
+ searchStr = "clang++";
+ } else {
+ searchStr = "g++";
+ }
+
for (String command : entry.getValue()) {
- System.out.println("\t" + command);
+ if (command.contains(searchStr)) {
+ if (type == null) {
+ type = manager.getToolChainType(GCCToolChainType.ID);
+ }
+ Path commandPath = Paths.get(command);
+ toolChains.add(
+ new GCCToolChain(type, commandPath.getParent(), commandPath.getFileName().toString()));
+ break;
+ }
}
}
}
+
+ return toolChains;
}
private static Pattern versionPattern = Pattern.compile(".*(gcc|LLVM) version .*"); //$NON-NLS-1$
@@ -113,9 +137,4 @@ public class GCCToolChainFactory implements IToolChainFactory {
}
}
- @Override
- public CToolChain createToolChain(String id, Preferences settings) {
- return new GCCToolChain(id, settings);
- }
-
}
diff --git a/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/GCCToolChain.java b/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/GCCToolChain.java
new file mode 100644
index 0000000000..8af950559f
--- /dev/null
+++ b/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/GCCToolChain.java
@@ -0,0 +1,260 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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.build.gcc.core;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.file.FileAlreadyExistsException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.cdt.build.core.CConsoleParser;
+import org.eclipse.cdt.build.core.IToolChain;
+import org.eclipse.cdt.build.core.IToolChainType;
+import org.eclipse.cdt.build.gcc.core.internal.Activator;
+import org.eclipse.cdt.core.parser.ExtendedScannerInfo;
+import org.eclipse.cdt.core.parser.IExtendedScannerInfo;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.launchbar.core.target.ILaunchTarget;
+import org.eclipse.launchbar.core.target.ILaunchTargetManager;
+import org.osgi.service.prefs.Preferences;
+
+/**
+ * The GCC toolchain. Placing it in cdt.core for now.
+ *
+ * TODO move to it's own plug-in.
+ *
+ * @since 5.12
+ */
+public class GCCToolChain implements IToolChain {
+
+ private IToolChainType type;
+ private final String name;
+ private String version;
+ private String target;
+
+ public GCCToolChain(IToolChainType type, Path path, String command) {
+ this.type = type;
+ getVersion(path.resolve(command).toString());
+ this.name = command + '-' + version;
+ }
+
+ protected GCCToolChain(IToolChainType type, String name) {
+ this.type = type;
+ this.name = name;
+ }
+
+ @Override
+ public IToolChainType getType() {
+ return type;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ private static Pattern versionPattern = Pattern.compile(".*(gcc|LLVM) version .*"); //$NON-NLS-1$
+ private static Pattern targetPattern = Pattern.compile("Target: (.*)"); //$NON-NLS-1$
+
+ private void getVersion(String command) {
+ try {
+ Process proc = new ProcessBuilder(new String[] { command, "-v" }).redirectErrorStream(true) //$NON-NLS-1$
+ .start();
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()))) {
+ for (String line = reader.readLine(); line != null; line = reader.readLine()) {
+ Matcher versionMatcher = versionPattern.matcher(line);
+ if (versionMatcher.matches()) {
+ version = line.trim();
+ continue;
+ }
+ Matcher targetMatcher = targetPattern.matcher(line);
+ if (targetMatcher.matches()) {
+ target = targetMatcher.group(1);
+ continue;
+ }
+ }
+ }
+ } catch (IOException e) {
+ Activator.log(e);
+ }
+ }
+
+ @Override
+ public void setEnvironment(Map<String, String> env) {
+ // TODO Auto-generated method stub
+ // The base one could just assume the toolchain is already set up in the
+ // user's env
+ }
+
+ protected void addDiscoveryOptions(List<String> command) {
+ command.add("-E"); //$NON-NLS-1$
+ command.add("-P"); //$NON-NLS-1$
+ command.add("-v"); //$NON-NLS-1$
+ command.add("-dD"); //$NON-NLS-1$
+ }
+
+ @Override
+ public IExtendedScannerInfo getScannerInfo(String command, List<String> args, List<String> includePaths,
+ IResource resource, Path buildDirectory) throws IOException {
+ List<String> commandLine = new ArrayList<>();
+ commandLine.add(command);
+
+ for (String includePath : includePaths) {
+ commandLine.add("-I" + includePath); //$NON-NLS-1$
+ }
+
+ addDiscoveryOptions(commandLine);
+ commandLine.addAll(args);
+
+ // Change output to stdout
+ for (int i = 0; i < commandLine.size() - 1; ++i) {
+ if (commandLine.get(i).equals("-o")) { //$NON-NLS-1$
+ commandLine.set(i + 1, "-"); //$NON-NLS-1$
+ break;
+ }
+ }
+
+ // Change source file to a tmp file (needs to be empty)
+ Path tmpFile = null;
+ for (int i = 1; i < commandLine.size(); ++i) {
+ if (!commandLine.get(i).startsWith("-")) { //$NON-NLS-1$
+ // TODO optimize by dealing with multi arg options like -o
+ Path filePath = buildDirectory.resolve(commandLine.get(i));
+ IFile[] files = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocationURI(filePath.toUri());
+ if (files.length > 0) {
+ // replace it with a temp file
+ Path parentPath = filePath.getParent();
+ int n = 0;
+ while (true) {
+ // TODO need to know the language
+ tmpFile = parentPath.resolve(".sc" + n + ".cpp"); //$NON-NLS-1$ //$NON-NLS-2$
+ commandLine.set(i, tmpFile.toString());
+ try {
+ Files.createFile(tmpFile);
+ break;
+ } catch (FileAlreadyExistsException e) {
+ // try again
+ ++n;
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ Files.createDirectories(buildDirectory);
+
+ // Startup the command
+ ProcessBuilder processBuilder = new ProcessBuilder(commandLine).directory(buildDirectory.toFile())
+ .redirectErrorStream(true);
+ setEnvironment(processBuilder.environment());
+ Process process = processBuilder.start();
+
+ // Scan for the scanner info
+ Map<String, String> symbols = new HashMap<>();
+ List<String> includePath = new ArrayList<>();
+ Pattern definePattern = Pattern.compile("#define (.*)\\s(.*)"); //$NON-NLS-1$
+ boolean inIncludePaths = false;
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
+ for (String line = reader.readLine(); line != null; line = reader.readLine()) {
+ if (inIncludePaths) {
+ if (line.equals("End of search list.")) { //$NON-NLS-1$
+ inIncludePaths = false;
+ } else {
+ includePath.add(line.trim());
+ }
+ } else if (line.startsWith("#define ")) { //$NON-NLS-1$
+ Matcher matcher = definePattern.matcher(line);
+ if (matcher.matches()) {
+ symbols.put(matcher.group(1), matcher.group(2));
+ }
+ } else if (line.equals("#include <...> search starts here:")) { //$NON-NLS-1$
+ inIncludePaths = true;
+ }
+ }
+ }
+
+ try {
+ process.waitFor();
+ } catch (InterruptedException e) {
+ Activator.log(e);
+ }
+ Files.delete(tmpFile);
+
+ return new ExtendedScannerInfo(symbols, includePath.toArray(new String[includePath.size()]));
+ }
+
+ @Override
+ public Collection<CConsoleParser> getConsoleParsers() {
+ // ../src/Test.cpp:4:1: error: 'x' was not declared in this scope
+ return Arrays.asList(new CConsoleParser("(.*?):(\\d+):(\\d+:)? (fatal )?error: (.*)") { //$NON-NLS-1$
+ @Override
+ protected int getSeverity(Matcher matcher) {
+ return IMarker.SEVERITY_ERROR;
+ }
+
+ @Override
+ protected String getMessage(Matcher matcher) {
+ return matcher.group(5);
+ }
+
+ @Override
+ protected int getLineNumber(Matcher matcher) {
+ return Integer.parseInt(matcher.group(2));
+ }
+
+ @Override
+ protected String getFileName(Matcher matcher) {
+ return matcher.group(1);
+ }
+
+ @Override
+ protected int getLinkOffset(Matcher matcher) {
+ return 0;
+ }
+
+ @Override
+ protected int getLinkLength(Matcher matcher) {
+ return matcher.group(1).length() + 1 + matcher.group(2).length() + 1 + matcher.group(3).length();
+ }
+ });
+ }
+
+ @Override
+ public boolean supports(ILaunchTarget target) {
+ if (target.getTypeId().equals(ILaunchTargetManager.localLaunchTargetTypeId)) {
+ switch (Platform.getOS()) {
+ case Platform.OS_MACOSX:
+ return this.target.contains("apple-darwin"); //$NON-NLS-1$
+ }
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void save(Preferences properties) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/GCCToolChainType.java b/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/GCCToolChainType.java
new file mode 100644
index 0000000000..f9298f4443
--- /dev/null
+++ b/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/GCCToolChainType.java
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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.build.gcc.core;
+
+import org.eclipse.cdt.build.core.IToolChain;
+import org.eclipse.cdt.build.core.IToolChainType;
+import org.osgi.service.prefs.Preferences;
+
+public class GCCToolChainType implements IToolChainType {
+
+ public static final String ID = "org.eclipse.cdt.build.gcc"; //$NON-NLS-1$
+
+ @Override
+ public String getId() {
+ return ID;
+ }
+
+ @Override
+ public IToolChain getToolChain(String name, Preferences properties) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/internal/Activator.java b/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/internal/Activator.java
new file mode 100644
index 0000000000..c9f26e7d2d
--- /dev/null
+++ b/build/org.eclipse.cdt.build.gcc.core/src/org/eclipse/cdt/build/gcc/core/internal/Activator.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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.build.gcc.core.internal;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Plugin;
+import org.eclipse.core.runtime.Status;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+public class Activator extends Plugin {
+
+ private static Plugin plugin;
+
+ public void start(BundleContext bundleContext) throws Exception {
+ plugin = this;
+ }
+
+ public void stop(BundleContext bundleContext) throws Exception {
+ plugin = null;
+ }
+
+ public static String getId() {
+ return plugin.getBundle().getSymbolicName();
+ }
+
+ public static void log(IStatus status) {
+ plugin.getLog().log(status);
+ }
+
+ public static void log(Exception e) {
+ if (e instanceof CoreException) {
+ plugin.getLog().log(((CoreException) e).getStatus());
+ } else {
+ plugin.getLog().log(new Status(IStatus.ERROR, getId(), e.getLocalizedMessage(), e));
+ }
+ }
+
+ public static <T> T getService(Class<T> service) {
+ BundleContext context = plugin.getBundle().getBundleContext();
+ ServiceReference<T> ref = context.getServiceReference(service);
+ return ref != null ? context.getService(ref) : null;
+ }
+
+}
diff --git a/build/org.eclipse.cdt.build.ui/.classpath b/build/org.eclipse.cdt.build.ui/.classpath
new file mode 100644
index 0000000000..eca7bdba8f
--- /dev/null
+++ b/build/org.eclipse.cdt.build.ui/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/build/org.eclipse.cdt.build.ui/.project b/build/org.eclipse.cdt.build.ui/.project
new file mode 100644
index 0000000000..08ffdebc5c
--- /dev/null
+++ b/build/org.eclipse.cdt.build.ui/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.cdt.build.ui</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/build/org.eclipse.cdt.build.ui/.settings/org.eclipse.jdt.core.prefs b/build/org.eclipse.cdt.build.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000000..0c68a61dca
--- /dev/null
+++ b/build/org.eclipse.cdt.build.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/build/org.eclipse.cdt.build.ui/META-INF/MANIFEST.MF b/build/org.eclipse.cdt.build.ui/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..e64bcb322c
--- /dev/null
+++ b/build/org.eclipse.cdt.build.ui/META-INF/MANIFEST.MF
@@ -0,0 +1,17 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Ui
+Bundle-SymbolicName: org.eclipse.cdt.build.ui
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.eclipse.cdt.build.ui.internal.Activator
+Bundle-Vendor: Eclipse CDT
+Require-Bundle: org.eclipse.cdt.build.core;bundle-version="1.0.0",
+ org.eclipse.jface.text;bundle-version="3.10.0",
+ org.eclipse.ui.console;bundle-version="3.6.0",
+ org.eclipse.ui.ide;bundle-version="3.11.0",
+ org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.resources;bundle-version="3.10.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Service-Component: OSGI-INF/consoleservice.xml
diff --git a/build/org.eclipse.cdt.build.ui/OSGI-INF/consoleservice.xml b/build/org.eclipse.cdt.build.ui/OSGI-INF/consoleservice.xml
new file mode 100644
index 0000000000..f1990da3d9
--- /dev/null
+++ b/build/org.eclipse.cdt.build.ui/OSGI-INF/consoleservice.xml
@@ -0,0 +1,6 @@
+<component name="NewConsoleService">
+ <implementation class="org.eclipse.cdt.build.ui.internal.CConsoleService"/>
+ <service>
+ <provide interface="org.eclipse.cdt.build.core.IConsoleService"/>
+ </service>
+</component>
diff --git a/build/org.eclipse.cdt.build.ui/about.html b/build/org.eclipse.cdt.build.ui/about.html
new file mode 100644
index 0000000000..d7c511887d
--- /dev/null
+++ b/build/org.eclipse.cdt.build.ui/about.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>About</title></head>
+
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 22, 2007</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body></html> \ No newline at end of file
diff --git a/build/org.eclipse.cdt.build.ui/build.properties b/build/org.eclipse.cdt.build.ui/build.properties
new file mode 100644
index 0000000000..17daa5b49c
--- /dev/null
+++ b/build/org.eclipse.cdt.build.ui/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.html
diff --git a/build/org.eclipse.cdt.build.ui/pom.xml b/build/org.eclipse.cdt.build.ui/pom.xml
new file mode 100644
index 0000000000..2e2d7b43d5
--- /dev/null
+++ b/build/org.eclipse.cdt.build.ui/pom.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.cdt</groupId>
+ <artifactId>cdt-parent</artifactId>
+ <version>8.8.0-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+
+ <version>1.0.0-SNAPSHOT</version>
+ <artifactId>org.eclipse.cdt.build.ui</artifactId>
+ <packaging>eclipse-plugin</packaging>
+</project> \ No newline at end of file
diff --git a/build/org.eclipse.cdt.build.ui/src/org/eclipse/cdt/build/ui/internal/Activator.java b/build/org.eclipse.cdt.build.ui/src/org/eclipse/cdt/build/ui/internal/Activator.java
new file mode 100644
index 0000000000..2d00aaabe8
--- /dev/null
+++ b/build/org.eclipse.cdt.build.ui/src/org/eclipse/cdt/build/ui/internal/Activator.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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.build.ui.internal;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+public class Activator extends AbstractUIPlugin {
+
+ private static Activator plugin;
+
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ plugin = this;
+ }
+
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+ public static String getId() {
+ return plugin.getBundle().getSymbolicName();
+ }
+
+ public static void log(Exception e) {
+ if (e instanceof CoreException) {
+ plugin.getLog().log(((CoreException) e).getStatus());
+ } else {
+ plugin.getLog().log(new Status(IStatus.ERROR, getId(), e.getLocalizedMessage(), e));
+ }
+ }
+
+ public static <T> T getService(Class<T> service) {
+ BundleContext context = plugin.getBundle().getBundleContext();
+ ServiceReference<T> ref = context.getServiceReference(service);
+ return ref != null ? context.getService(ref) : null;
+ }
+
+}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/build/CConsoleService.java b/build/org.eclipse.cdt.build.ui/src/org/eclipse/cdt/build/ui/internal/CConsoleService.java
index fc74d0cda9..3dbf85157b 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/build/CConsoleService.java
+++ b/build/org.eclipse.cdt.build.ui/src/org/eclipse/cdt/build/ui/internal/CConsoleService.java
@@ -5,16 +5,18 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
-package org.eclipse.cdt.internal.ui.build;
+package org.eclipse.cdt.build.ui.internal;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
-import org.eclipse.core.resources.IFolder;
+import org.eclipse.cdt.build.core.CConsoleParser;
+import org.eclipse.cdt.build.core.IConsoleService;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IncrementalProjectBuilder;
@@ -26,17 +28,13 @@ import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.MessageConsole;
import org.eclipse.ui.console.MessageConsoleStream;
-import org.eclipse.cdt.core.build.CConsoleParser;
-import org.eclipse.cdt.core.build.IConsoleService;
-import org.eclipse.cdt.ui.CUIPlugin;
-
public class CConsoleService implements IConsoleService, IResourceChangeListener {
private MessageConsole console;
private MessageConsoleStream out;
private MessageConsoleStream err;
- private IFolder buildDirectory;
+ private Path buildDirectory;
List<CPatternMatchListener> listeners = new ArrayList<>();
private void initConsole() {
@@ -72,7 +70,7 @@ public class CConsoleService implements IConsoleService, IResourceChangeListener
}
@Override
- public void monitor(final Process process, CConsoleParser[] consoleParsers, IFolder buildDirectory)
+ public void monitor(final Process process, CConsoleParser[] consoleParsers, Path buildDirectory)
throws IOException {
if (console == null) {
initConsole();
@@ -103,8 +101,7 @@ public class CConsoleService implements IConsoleService, IResourceChangeListener
new Thread("C/C++ Build Console Output") { //$NON-NLS-1$
@Override
public void run() {
- try (BufferedReader processOut = new BufferedReader(
- new InputStreamReader(process.getInputStream()))) {
+ try (BufferedReader processOut = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
for (String line = processOut.readLine(); line != null; line = processOut.readLine()) {
out.write(line);
out.write('\n');
@@ -121,8 +118,7 @@ public class CConsoleService implements IConsoleService, IResourceChangeListener
new Thread("C/C++ Build Console Error") { //$NON-NLS-1$
@Override
public void run() {
- try (BufferedReader processErr = new BufferedReader(
- new InputStreamReader(process.getErrorStream()))) {
+ try (BufferedReader processErr = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {
for (String line = processErr.readLine(); line != null; line = processErr.readLine()) {
err.write(line);
out.write('\n');
@@ -139,7 +135,7 @@ public class CConsoleService implements IConsoleService, IResourceChangeListener
latch.await();
process.waitFor();
} catch (InterruptedException e) {
- CUIPlugin.log(e);
+ Activator.log(e);
}
}
@@ -159,7 +155,7 @@ public class CConsoleService implements IConsoleService, IResourceChangeListener
err.write(msg);
}
- public IFolder getBuildDirectory() {
+ public Path getBuildDirectory() {
return buildDirectory;
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/build/CHyperlink.java b/build/org.eclipse.cdt.build.ui/src/org/eclipse/cdt/build/ui/internal/CHyperlink.java
index 853ef9cf54..2d3c571644 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/build/CHyperlink.java
+++ b/build/org.eclipse.cdt.build.ui/src/org/eclipse/cdt/build/ui/internal/CHyperlink.java
@@ -5,7 +5,7 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
-package org.eclipse.cdt.internal.ui.build;
+package org.eclipse.cdt.build.ui.internal;
import org.eclipse.core.resources.IMarker;
import org.eclipse.ui.IWorkbenchPage;
@@ -14,8 +14,6 @@ import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.console.IHyperlink;
import org.eclipse.ui.ide.IDE;
-import org.eclipse.cdt.ui.CUIPlugin;
-
public class CHyperlink implements IHyperlink {
private final IMarker marker;
@@ -38,7 +36,7 @@ public class CHyperlink implements IHyperlink {
try {
IDE.openEditor(page, marker);
} catch (PartInitException e) {
- CUIPlugin.log(e);
+ Activator.log(e);
}
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/build/CPatternMatchListener.java b/build/org.eclipse.cdt.build.ui/src/org/eclipse/cdt/build/ui/internal/CPatternMatchListener.java
index c267199ccf..d27471236a 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/build/CPatternMatchListener.java
+++ b/build/org.eclipse.cdt.build.ui/src/org/eclipse/cdt/build/ui/internal/CPatternMatchListener.java
@@ -5,17 +5,15 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
-package org.eclipse.cdt.internal.ui.build;
+package org.eclipse.cdt.build.ui.internal;
+import org.eclipse.cdt.build.core.CConsoleParser;
import org.eclipse.core.resources.IMarker;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.ui.console.IPatternMatchListener;
import org.eclipse.ui.console.PatternMatchEvent;
import org.eclipse.ui.console.TextConsole;
-import org.eclipse.cdt.core.build.CConsoleParser;
-import org.eclipse.cdt.ui.CUIPlugin;
-
public class CPatternMatchListener implements IPatternMatchListener {
protected final CConsoleService console;
@@ -48,7 +46,7 @@ public class CPatternMatchListener implements IPatternMatchListener {
marker.getAttribute(CConsoleParser.LINK_LENGTH, event.getLength()));
}
} catch (BadLocationException e) {
- CUIPlugin.log(e);
+ Activator.log(e);
}
}
diff --git a/build/org.eclipse.cdt.gnu.build-feature/feature.xml b/build/org.eclipse.cdt.gnu.build-feature/feature.xml
index 9f31162265..9ed97d90b6 100644
--- a/build/org.eclipse.cdt.gnu.build-feature/feature.xml
+++ b/build/org.eclipse.cdt.gnu.build-feature/feature.xml
@@ -26,4 +26,11 @@
version="0.0.0"
unpack="false"/>
+ <plugin
+ id="org.eclipse.cdt.build.gcc.core"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
</feature>
diff --git a/build/org.eclipse.cdt.gnu.build.source-feature/feature.xml b/build/org.eclipse.cdt.gnu.build.source-feature/feature.xml
index 957b40433f..07076e3b60 100644
--- a/build/org.eclipse.cdt.gnu.build.source-feature/feature.xml
+++ b/build/org.eclipse.cdt.gnu.build.source-feature/feature.xml
@@ -26,4 +26,11 @@
version="0.0.0"
unpack="false"/>
+ <plugin
+ id="org.eclipse.cdt.build.gcc.core.source"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
</feature>
diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/build/GCCTests.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/build/GCCTests.java
deleted file mode 100644
index dfdfbe9eb6..0000000000
--- a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/internal/build/GCCTests.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.eclipse.cdt.core.internal.build;
-
-import java.io.IOException;
-
-import org.eclipse.cdt.core.build.gcc.GCCToolChainFactory;
-import org.junit.Test;
-
-public class GCCTests {
-
- @Test
- public void tryGCCDiscovery() throws IOException {
- long start = System.currentTimeMillis();
- new GCCToolChainFactory().discover();
- System.out.println("Time: " + (System.currentTimeMillis() - start));
- }
-
-}
diff --git a/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF
index 6a7b917f1c..47379a8363 100644
--- a/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF
+++ b/core/org.eclipse.cdt.core/META-INF/MANIFEST.MF
@@ -8,8 +8,6 @@ Bundle-Vendor: %providerName
Bundle-Localization: plugin
Export-Package: org.eclipse.cdt.core,
org.eclipse.cdt.core.browser,
- org.eclipse.cdt.core.build,
- org.eclipse.cdt.core.build.gcc,
org.eclipse.cdt.core.cdtvariables,
org.eclipse.cdt.core.dom,
org.eclipse.cdt.core.dom.ast,
@@ -128,7 +126,6 @@ Require-Bundle: org.eclipse.cdt.core.native;bundle-version="[5.7.0,6.0.0)";visib
org.eclipse.core.variables;bundle-version="[3.1.100,4.0.0)",
org.eclipse.ltk.core.refactoring;bundle-version="3.4.0",
org.eclipse.text;bundle-version="[3.2.0,4.0.0)",
- com.ibm.icu;bundle-version="4.4.2",
- com.google.gson;bundle-version="2.2.4";resolution:=optional
+ com.ibm.icu;bundle-version="4.4.2"
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/IncludeSearchPathElement.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/IncludeSearchPathElement.java
index 8c397858cf..00cb4a7b40 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/IncludeSearchPathElement.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/IncludeSearchPathElement.java
@@ -8,7 +8,7 @@
* Contributors:
* Markus Schorn - initial API and implementation
* Sergey Prigogin (Google)
- *******************************************************************************/
+ *******************************************************************************/
package org.eclipse.cdt.internal.core.parser.scanner;
import java.io.File;
@@ -17,29 +17,36 @@ import org.eclipse.cdt.utils.PathUtil;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
-/**
+/**
* Represents an entry of the include search path
*/
public final class IncludeSearchPathElement {
private static final boolean NON_SLASH_SEPARATOR = File.separatorChar != '/';
public static final String FRAMEWORK_VAR = "__framework__"; //$NON-NLS-1$
public static final String FILE_VAR = "__header__"; //$NON-NLS-1$
+ private static final String FRAMEWORK_HEADERS = ".framework/Headers"; //$NON-NLS-1$
private final String fPath;
private final boolean fForQuoteIncludesOnly;
- private final boolean fIsFrameworkDirectory;
-
+ private final boolean fIsFrameworkDirectory;
+ private final boolean fIsNewFrameworkDirectory;
+
IncludeSearchPathElement(String path, boolean forQuoteIncludesOnly) {
- fPath= path;
- fForQuoteIncludesOnly= forQuoteIncludesOnly;
-
+ fPath = path;
+ fForQuoteIncludesOnly = forQuoteIncludesOnly;
+
if (path.indexOf('_') != -1 && path.indexOf(FRAMEWORK_VAR) != -1 && path.indexOf(FILE_VAR) != -1) {
- fIsFrameworkDirectory= true;
+ fIsFrameworkDirectory = true;
+ fIsNewFrameworkDirectory = false;
+ } else if (path.endsWith(FRAMEWORK_HEADERS)) {
+ fIsFrameworkDirectory = false;
+ fIsNewFrameworkDirectory = true;
} else {
- fIsFrameworkDirectory= false;
+ fIsFrameworkDirectory = false;
+ fIsNewFrameworkDirectory = false;
}
}
-
+
public boolean isForQuoteIncludesOnly() {
return fForQuoteIncludesOnly;
}
@@ -51,22 +58,33 @@ public final class IncludeSearchPathElement {
return null;
}
String framework = includeDirective.substring(0, firstSep);
- String file= includeDirective.substring(firstSep + 1);
+ String file = includeDirective.substring(firstSep + 1);
if (file.length() == 0)
return null;
- StringBuilder buf= new StringBuilder(fPath);
+ StringBuilder buf = new StringBuilder(fPath);
replace(buf, FRAMEWORK_VAR, framework);
replace(buf, FILE_VAR, file);
return ScannerUtility.reconcilePath(buf.toString());
+ } else if (fIsNewFrameworkDirectory) {
+ int firstSep = firstSeparator(includeDirective);
+ if (firstSep > 0) {
+ String framework = includeDirective.substring(0, firstSep);
+ String file = includeDirective.substring(firstSep + 1);
+ if (file.length() > 0) {
+ if (fPath.endsWith(framework + FRAMEWORK_HEADERS)) { // $NON-NLS-1$
+ return ScannerUtility.createReconciledPath(fPath, file);
+ }
+ }
+ }
}
return ScannerUtility.createReconciledPath(fPath, includeDirective);
}
/**
- * Returns the include directive for the given location satisfying the condition
- * {@code getLocation(getIncludeDirective(location) == location}. If no such include directive
- * without ".." exists, returns {@code null}.
+ * Returns the include directive for the given location satisfying the
+ * condition {@code getLocation(getIncludeDirective(location) == location}.
+ * If no such include directive without ".." exists, returns {@code null}.
*/
public String getIncludeDirective(String location) {
IPath dirPath = new Path(fPath);
@@ -95,20 +113,20 @@ public final class IncludeSearchPathElement {
}
if (!PathUtil.isPrefix(dirPath, locationPath))
- return null;
- return locationPath.removeFirstSegments(dirPath.segmentCount()).setDevice(null).toPortableString();
+ return null;
+ return locationPath.removeFirstSegments(dirPath.segmentCount()).setDevice(null).toPortableString();
}
private int firstSeparator(String path) {
- int firstSep= path.indexOf('/');
+ int firstSep = path.indexOf('/');
if (NON_SLASH_SEPARATOR) {
- firstSep= Math.max(firstSep, path.indexOf(File.separatorChar));
+ firstSep = Math.max(firstSep, path.indexOf(File.separatorChar));
}
return firstSep;
}
private void replace(StringBuilder buf, String find, final String replace) {
- int idx= buf.indexOf(find);
+ int idx = buf.indexOf(find);
if (idx >= 0) {
buf.replace(idx, idx + find.length(), replace);
}
diff --git a/core/org.eclipse.cdt.core/plugin.xml b/core/org.eclipse.cdt.core/plugin.xml
index dd0c96dd82..d5e0020806 100644
--- a/core/org.eclipse.cdt.core/plugin.xml
+++ b/core/org.eclipse.cdt.core/plugin.xml
@@ -683,7 +683,6 @@
<extension-point id="LanguageSettingsProvider" name="%LanguageSettingsProvider.name" schema="schema/LanguageSettingsProvider.exsd"/>
<extension-point id="UNCPathConverter" name="%uncPathConverter.name" schema="schema/UNCPathConverter.exsd"/>
<extension-point id="ProblemMarkerFilter" name="%problemMarkerFilter.name" schema="schema/ProblemMarkerFilter.exsd"/>
- <extension-point id="ToolChainFactory" name="Tool Chain Factory" schema="schema/ToolChainFactory.exsd"/>
<extension
point="org.eclipse.cdt.core.templateProcessTypes">
@@ -857,12 +856,5 @@
ordering="first">
</filterMatcher>
</extension>
- <extension
- point="org.eclipse.cdt.core.ToolChainFactory">
- <factory
- class="org.eclipse.cdt.core.build.gcc.GCCToolChainFactory"
- family="GCC">
- </factory>
- </extension>
</plugin>
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java
index 0d832f3859..49223fd6f0 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java
@@ -50,7 +50,6 @@ import org.eclipse.cdt.internal.core.CDTLogWriter;
import org.eclipse.cdt.internal.core.CdtVarPathEntryVariableManager;
import org.eclipse.cdt.internal.core.ICConsole;
import org.eclipse.cdt.internal.core.PositionTrackerManager;
-import org.eclipse.cdt.internal.core.build.ScannerInfoSaveParticipant;
import org.eclipse.cdt.internal.core.cdtvariables.CdtVariableManager;
import org.eclipse.cdt.internal.core.cdtvariables.UserVarSupplier;
import org.eclipse.cdt.internal.core.dom.ast.tag.TagService;
@@ -391,9 +390,6 @@ public class CCorePlugin extends Plugin {
// job.
post1.schedule();
post2.schedule();
-
- // Save participant for toolchain data
- ResourcesPlugin.getWorkspace().addSaveParticipant(PLUGIN_ID, new ScannerInfoSaveParticipant());
}
/**
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java
deleted file mode 100644
index ff28c16cbb..0000000000
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CBuildConfiguration.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 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.core.build;
-
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.model.ILanguage;
-import org.eclipse.cdt.core.parser.ExtendedScannerInfo;
-import org.eclipse.cdt.core.parser.IScannerInfo;
-import org.eclipse.cdt.internal.core.build.ScannerInfoData;
-import org.eclipse.cdt.internal.core.build.ToolChainScannerInfo;
-import org.eclipse.core.resources.IBuildConfiguration;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ProjectScope;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.PlatformObject;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.osgi.service.prefs.BackingStoreException;
-
-/**
- * Root class for CDT build configurations. Provides access to the build
- * settings for subclasses.
- *
- * @since 5.12
- */
-public abstract class CBuildConfiguration extends PlatformObject {
-
- private static final String TOOLCHAIN = "cdt.toolChain"; //$NON-NLS-1$
-
- private final IBuildConfiguration config;
- private CToolChain toolChain;
- private ScannerInfoData scannerInfoData;
-
- protected CBuildConfiguration(IBuildConfiguration config) {
- this.config = config;
- }
-
- public IBuildConfiguration getBuildConfiguration() {
- return config;
- }
-
- public String getName() {
- return config.getName();
- }
-
- public IProject getProject() {
- return config.getProject();
- }
-
- public void setActive(IProgressMonitor monitor) throws CoreException {
- IProject project = config.getProject();
- if (config.equals(project.getActiveBuildConfig())) {
- // already set
- return;
- }
-
- IProjectDescription projectDesc = project.getDescription();
- projectDesc.setActiveBuildConfig(config.getName());
- project.setDescription(projectDesc, monitor);
- }
-
- protected IEclipsePreferences getSettings() {
- return (IEclipsePreferences) new ProjectScope(config.getProject()).getNode("org.eclipse.cdt.core") //$NON-NLS-1$
- .node("config") //$NON-NLS-1$
- .node(config.getName());
- }
-
- private synchronized CToolChain getToolChain(String id) throws CoreException {
- IExtensionRegistry registry = Platform.getExtensionRegistry();
- IExtensionPoint point = registry.getExtensionPoint(CCorePlugin.PLUGIN_ID + ".ToolChain"); //$NON-NLS-1$
- for (IExtension extension : point.getExtensions()) {
- for (IConfigurationElement element : extension.getConfigurationElements()) {
- String eid = element.getAttribute("id"); //$NON-NLS-1$
- if (id.equals(eid)) {
- String clsName = element.getAttribute("adaptor"); //$NON-NLS-1$
- if (clsName != null) {
- try {
- Class<?> cls = Class.forName(clsName);
- return (CToolChain) getAdapter(cls);
- } catch (ClassNotFoundException e) {
- throw new CoreException(new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID,
- "creating toolchain", e)); //$NON-NLS-1$
- }
- }
- }
- }
- }
- return null;
- }
-
- public synchronized void setToolChain(CToolChain toolChain) throws CoreException {
- this.toolChain = toolChain;
-
- IEclipsePreferences settings = getSettings();
- settings.put(TOOLCHAIN, toolChain.getId());
- try {
- settings.flush();
- } catch (BackingStoreException e) {
- throw new CoreException(
- new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, "saving toolchain id", e)); //$NON-NLS-1$
- }
- }
-
- public CToolChain getToolChain() throws CoreException {
- if (toolChain == null) {
- IEclipsePreferences settings = getSettings();
- String id = settings.get(TOOLCHAIN, ""); //$NON-NLS-1$
- if (id.isEmpty()) {
- return null;
- } else {
- toolChain = getToolChain(id);
- }
- }
- return toolChain;
- }
-
- public IScannerInfo getScannerInfo(IResource resource) throws CoreException {
- return getScannerInfoData().getScannerInfo(resource);
- }
-
- public void putScannerInfo(ILanguage language, ExtendedScannerInfo info) {
- getScannerInfoData().putScannerInfo(language, info);
- }
-
- public void putScannerInfo(IResource resource, ToolChainScannerInfo info) {
- getScannerInfoData().putScannerInfo(resource, info);
- }
-
- private ScannerInfoData getScannerInfoData() {
- if (scannerInfoData == null) {
- scannerInfoData = ScannerInfoData.load(this);
- }
- return scannerInfoData;
- }
-
- public void clearScannerInfo() throws CoreException {
- scannerInfoData = null;
- }
-
- public CConsoleParser[] getConsoleParsers() throws CoreException {
- CToolChain toolChain = getToolChain();
- return toolChain != null ? toolChain.getConsoleParsers() : null;
- }
-
-}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CToolChain.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CToolChain.java
deleted file mode 100644
index 4bc6182a1b..0000000000
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CToolChain.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 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.core.build;
-
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.cdt.core.parser.ExtendedScannerInfo;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.PlatformObject;
-import org.osgi.service.prefs.Preferences;
-
-/**
- * Root class for CDT toolchains.
- *
- * @since 5.12
- */
-public abstract class CToolChain extends PlatformObject {
-
- public static final String FAMILY = "family"; //$NON-NLS-1$
- private static final String NAME = "name"; //$NON-NLS-1$
-
- private String id;
- private String name;
-
- protected CToolChain(String id, Preferences settings) {
- this.id = id;
- this.name = settings.get(NAME, "<Unknown>"); //$NON-NLS-1$
- }
-
- protected CToolChain(String name) {
- this.name = name;
- }
-
- public abstract String getFamily();
-
- public String getId() {
- return id;
- }
-
- void setId(String id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void save(Preferences settings) {
- settings.put(FAMILY, getFamily());
- settings.put(NAME, name);
- }
-
- public static String[] splitCommand(String command) {
- // TODO deal with quotes properly, for now just strip
- return command.replace("\"", "").split("\\s+"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- }
-
- public static String[] fixPaths(String[] command) {
- for (int i = 0; i < command.length; ++i) {
- if (command[i].indexOf('\\') >= 0) {
- command[i] = command[i].replace('\\', '/');
- }
- }
- return command;
- }
-
- /**
- * Update the given environment to run the toolchain.
- *
- * @param env
- */
- public void setEnvironment(Map<String, String> env) {
- // default, nothing
- }
-
- /**
- * Find the file mentioned in the command line.
- *
- * @param buildFolder
- * @param commandLine
- * @return the file in the command line or null if can't be found.
- */
- public IFile getResource(IFolder buildFolder, String[] commandLine) {
- // default, not found
- return null;
- }
-
- public IFile getResource(IFolder buildFolder, String commandLine) {
- return getResource(buildFolder, splitCommand(commandLine));
- }
-
- /**
- * Calculate the scanner info from the given command line
- *
- * @param buildFolder
- * @param commandLine
- * @return scanner info, or null if can't be calculated
- * @throws CoreException
- */
- public ExtendedScannerInfo getScannerInfo(IFolder buildFolder, List<String> commandLine)
- throws CoreException {
- // default, null
- return null;
- }
-
- /**
- * Return the console parsers to be used when this toolchain is being used
- * for a build.
- *
- * @return console parsers, or null if there aren't any
- */
- public CConsoleParser[] getConsoleParsers() {
- return null;
- }
-
-}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CToolChainManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CToolChainManager.java
deleted file mode 100644
index 4ea9fe4c0b..0000000000
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/CToolChainManager.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 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.core.build;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IExtensionRegistry;
-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.eclipse.core.runtime.jobs.Job;
-import org.eclipse.core.runtime.preferences.ConfigurationScope;
-import org.osgi.service.prefs.BackingStoreException;
-import org.osgi.service.prefs.Preferences;
-
-/**
- * Manager that manages the list of toolchains available.
- *
- * @since 5.12
- */
-public class CToolChainManager {
-
- private static final String TOOLCHAINS = "toolchains"; //$NON-NLS-1$
-
- public static final CToolChainManager instance = new CToolChainManager();
-
- private Map<String, IConfigurationElement> toolChainFamilies = new HashMap<>();
- private Map<String, CToolChain> toolChains = new HashMap<>();
-
- private CToolChainManager() {
- new Job("Load toolchains") {
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- try {
- // Load up the families
- IExtensionRegistry registry = Platform.getExtensionRegistry();
- IExtensionPoint point = registry
- .getExtensionPoint("org.eclipse.cdt.core.ToolChainFactory"); //$NON-NLS-1$
- for (IExtension extension : point.getExtensions()) {
- for (IConfigurationElement element : extension.getConfigurationElements()) {
- String family = element.getAttribute(CToolChain.FAMILY);
- if (family != null) {
- toolChainFamilies.put(family, element);
- }
- }
- }
-
- // Load up the toolchains
- Preferences toolChainsPref = getToolChainSettings();
- for (String toolChainId : toolChainsPref.childrenNames()) {
- Preferences toolChainPref = toolChainsPref.node(toolChainId);
- String family = toolChainPref.get(CToolChain.FAMILY, ""); //$NON-NLS-1$
- if (!family.isEmpty()) {
- IConfigurationElement element = toolChainFamilies.get(family);
- if (element != null) {
- IToolChainFactory factory = (IToolChainFactory) element
- .createExecutableExtension("class"); //$NON-NLS-1$
- CToolChain toolChain = factory.createToolChain(toolChainId, toolChainPref);
- toolChains.put(toolChain.getName(), toolChain);
- }
- }
- }
- return Status.OK_STATUS;
- } catch (BackingStoreException e) {
- return new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, "loading toolchains", e);
- } catch (CoreException e) {
- return e.getStatus();
- }
- }
- }.schedule();
- }
-
- private Preferences getToolChainSettings() {
- return ConfigurationScope.INSTANCE.getNode(CCorePlugin.PLUGIN_ID).node(TOOLCHAINS);
- }
-
- Preferences getSettings(String id) {
- return getToolChainSettings().node(id);
- }
-
- public Collection<CToolChain> getToolChains() {
- return toolChains.values();
- }
-
- public void addToolChain(CToolChain toolChain) throws CoreException {
- // First find an open id for the toolchain
- String id = null;
- for (int i = 0; i < toolChains.size(); ++i) {
- String istr = String.valueOf(i);
- if (toolChains.containsKey(istr)) {
- id = istr;
- break;
- }
- }
-
- if (id == null) {
- id = String.valueOf(toolChains.size());
- }
-
- toolChain.setId(id);
- toolChains.put(id, toolChain);
-
- // save
- try {
- Preferences toolChainsPref = getToolChainSettings();
- toolChain.save(toolChainsPref.node(id));
- toolChainsPref.flush();
- } catch (BackingStoreException e) {
- throw new CoreException(
- new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, "saving toolchain " + id, e));
- }
- }
-
-}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/gcc/GCCToolChain.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/gcc/GCCToolChain.java
deleted file mode 100644
index 5eefd9fbbd..0000000000
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/gcc/GCCToolChain.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 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.core.build.gcc;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.nio.file.FileAlreadyExistsException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.build.CConsoleParser;
-import org.eclipse.cdt.core.build.CToolChain;
-import org.eclipse.cdt.core.model.CoreModel;
-import org.eclipse.cdt.core.parser.ExtendedScannerInfo;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.osgi.service.prefs.Preferences;
-
-/**
- * The GCC toolchain. Placing it in cdt.core for now.
- *
- * TODO move to it's own plug-in.
- *
- * @since 5.12
- */
-public class GCCToolChain extends CToolChain {
-
- public GCCToolChain(String id, Preferences settings) {
- super(id, settings);
- }
-
- public GCCToolChain(String name) {
- super(name);
- }
-
- @Override
- public String getFamily() {
- return "GCC"; //$NON-NLS-1$
- }
-
- @Override
- public IFile getResource(IFolder buildFolder, String[] commandLine) {
- for (String arg : commandLine) {
- if (!arg.startsWith("-")) { //$NON-NLS-1$
- // TODO optimize by dealing with multi arg options like -o
- IFile file = buildFolder.getFile(arg);
- if (file.exists() && CoreModel.isTranslationUnit(file)) {
- return file;
- }
- }
- }
-
- return null;
- }
-
- @Override
- public ExtendedScannerInfo getScannerInfo(IFolder buildFolder, List<String> cmd) throws CoreException {
- try {
- String[] commandLine = cmd.toArray(new String[cmd.size()]);
-
- // Change output to stdout
- for (int i = 0; i < commandLine.length - 1; ++i) {
- if (commandLine[i].equals("-o")) { //$NON-NLS-1$
- commandLine[i + 1] = "-"; //$NON-NLS-1$
- break;
- }
- }
-
- // Change source file to a tmp file (needs to be empty)
- Path tmpFile = null;
- for (int i = 1; i < commandLine.length; ++i) {
- if (!commandLine[i].startsWith("-")) { //$NON-NLS-1$
- // TODO optimize by dealing with multi arg options like -o
- IFile file = buildFolder.getFile(commandLine[i]);
- if (file.exists() && CoreModel.isTranslationUnit(file)) {
- // replace it with a temp file
- Path parentPath = new File(((IFolder) file.getParent()).getLocationURI()).toPath();
- int n = 0;
- while (true) {
- tmpFile = parentPath.resolve(".sc" + n + "." + file.getFileExtension()); //$NON-NLS-1$ //$NON-NLS-2$
- commandLine[i] = tmpFile.toString();
- try {
- Files.createFile(tmpFile);
- break;
- } catch (FileAlreadyExistsException e) {
- // try again
- ++n;
- }
- }
- break;
- }
- }
- }
-
- // Add in the magic potion: -E -P -v -dD
- String[] fullCmd = new String[commandLine.length + 4];
- fullCmd[0] = commandLine[0];
- fullCmd[1] = "-E"; //$NON-NLS-1$
- fullCmd[2] = "-P"; //$NON-NLS-1$
- fullCmd[3] = "-v"; //$NON-NLS-1$
- fullCmd[4] = "-dD"; //$NON-NLS-1$
- System.arraycopy(commandLine, 1, fullCmd, 5, commandLine.length - 1);
- fixPaths(fullCmd);
-
- File buildDir = new File(buildFolder.getLocationURI());
- Files.createDirectories(buildDir.toPath());
-
- // Startup the command
- ProcessBuilder processBuilder = new ProcessBuilder(fullCmd).directory(buildDir)
- .redirectErrorStream(true);
- setEnvironment(processBuilder.environment());
- Process process = processBuilder.start();
-
- // Scan for the scanner info
- Map<String, String> symbols = new HashMap<>();
- List<String> includePath = new ArrayList<>();
- Pattern definePattern = Pattern.compile("#define (.*)\\s(.*)"); //$NON-NLS-1$
- boolean inIncludePaths = false;
- try (BufferedReader reader = new BufferedReader(
- new InputStreamReader(process.getInputStream()))) {
- for (String line = reader.readLine(); line != null; line = reader.readLine()) {
- if (inIncludePaths) {
- if (line.equals("End of search list.")) { //$NON-NLS-1$
- inIncludePaths = false;
- } else {
- includePath.add(line.trim());
- }
- } else if (line.startsWith("#define ")) { //$NON-NLS-1$
- Matcher matcher = definePattern.matcher(line);
- if (matcher.matches()) {
- symbols.put(matcher.group(1), matcher.group(2));
- }
- } else if (line.equals("#include <...> search starts here:")) { //$NON-NLS-1$
- inIncludePaths = true;
- }
- }
- }
-
- return new ExtendedScannerInfo(symbols, includePath.toArray(new String[includePath.size()]));
- } catch (IOException e) {
- throw new CoreException(new Status(IStatus.ERROR, CCorePlugin.PLUGIN_ID, "scanner info", e)); //$NON-NLS-1$
- }
- }
-
- @Override
- public CConsoleParser[] getConsoleParsers() {
- // ../src/Test.cpp:4:1: error: 'x' was not declared in this scope
-
- return new CConsoleParser[] { new CConsoleParser("(.*?):(\\d+):(\\d+:)? (fatal )?error: (.*)") { //$NON-NLS-1$
- @Override
- protected int getSeverity(Matcher matcher) {
- return IMarker.SEVERITY_ERROR;
- }
-
- @Override
- protected String getMessage(Matcher matcher) {
- return matcher.group(5);
- }
-
- @Override
- protected int getLineNumber(Matcher matcher) {
- return Integer.parseInt(matcher.group(2));
- }
-
- @Override
- protected String getFileName(Matcher matcher) {
- return matcher.group(1);
- }
-
- @Override
- protected int getLinkOffset(Matcher matcher) {
- return 0;
- }
-
- @Override
- protected int getLinkLength(Matcher matcher) {
- return matcher.group(1).length() + 1 + matcher.group(2).length() + 1
- + matcher.group(3).length();
- }
- } };
- }
-
-}
diff --git a/core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF b/core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF
index 0c0eda18f0..f56f421f0c 100644
--- a/core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF
+++ b/core/org.eclipse.cdt.ui/META-INF/MANIFEST.MF
@@ -15,7 +15,6 @@ Export-Package: org.eclipse.cdt.internal.corext;x-internal:=true,
org.eclipse.cdt.internal.ui;x-friends:="org.eclipse.cdt.debug.edc.tests",
org.eclipse.cdt.internal.ui.actions;x-internal:=true,
org.eclipse.cdt.internal.ui.browser.opentype;x-internal:=true,
- org.eclipse.cdt.internal.ui.build;x-internal:=true,
org.eclipse.cdt.internal.ui.buildconsole;x-internal:=true,
org.eclipse.cdt.internal.ui.callhierarchy;x-internal:=true,
org.eclipse.cdt.internal.ui.compare;x-internal:=true,
@@ -126,4 +125,3 @@ Require-Bundle: org.eclipse.cdt.core;bundle-version="[5.2.0,6.0.0)",
org.eclipse.e4.ui.css.swt.theme
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
-Service-Component: OSGI-INF/consoleservice.xml
diff --git a/core/org.eclipse.cdt.ui/OSGI-INF/consoleservice.xml b/core/org.eclipse.cdt.ui/OSGI-INF/consoleservice.xml
deleted file mode 100644
index bedd5d3682..0000000000
--- a/core/org.eclipse.cdt.ui/OSGI-INF/consoleservice.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<component name="QtConsoleService">
- <implementation class="org.eclipse.cdt.internal.ui.build.CConsoleService"/>
- <service>
- <provide interface="org.eclipse.cdt.core.build.IConsoleService"/>
- </service>
-</component>
diff --git a/pom.xml b/pom.xml
index cd189057e3..9208c69e2b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -61,6 +61,8 @@
<module>releng/org.eclipse.cdt</module>
<module>core/org.eclipse.cdt.core</module>
+ <module>build/org.eclipse.cdt.build.core</module>
+ <module>build/org.eclipse.cdt.build.ui</module>
<module>codan/org.eclipse.cdt.codan.core</module>
<module>codan/org.eclipse.cdt.codan.ui</module>
<module>codan/org.eclipse.cdt.codan.core.cxx</module>
@@ -80,6 +82,7 @@
<module>releng/org.eclipse.cdt.platform-feature</module>
<module>releng/org.eclipse.cdt.platform.source-feature</module>
+ <module>build/org.eclipse.cdt.build.gcc.core</module>
<module>build/org.eclipse.cdt.managedbuilder.gnu.ui</module>
<module>build/org.eclipse.cdt.gnu.build-feature</module>
<module>build/org.eclipse.cdt.gnu.build.source-feature</module>
diff --git a/qt/org.eclipse.cdt.qt.core/META-INF/MANIFEST.MF b/qt/org.eclipse.cdt.qt.core/META-INF/MANIFEST.MF
index 275c3fdc82..eea77498c8 100644
--- a/qt/org.eclipse.cdt.qt.core/META-INF/MANIFEST.MF
+++ b/qt/org.eclipse.cdt.qt.core/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@ Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.cdt.qt.core;singleton:=true
Bundle-Version: 2.0.0.qualifier
-Bundle-Activator: org.eclipse.cdt.internal.qt.core.QtPlugin
+Bundle-Activator: org.eclipse.cdt.internal.qt.core.Activator
Bundle-Vendor: %providerName
Require-Bundle: org.eclipse.core.runtime,
org.eclipse.core.resources,
@@ -16,7 +16,9 @@ Require-Bundle: org.eclipse.core.runtime,
org.eclipse.remote.core;bundle-version="2.0.0",
org.eclipse.debug.core;bundle-version="3.10.0",
org.eclipse.cdt.debug.core,
- org.freemarker;bundle-version="2.3.22"
+ org.freemarker;bundle-version="2.3.22",
+ org.eclipse.cdt.build.core;bundle-version="1.0.0",
+ org.eclipse.cdt.build.gcc.core;bundle-version="1.0.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Bundle-Localization: plugin
diff --git a/qt/org.eclipse.cdt.qt.core/plugin.xml b/qt/org.eclipse.cdt.qt.core/plugin.xml
index b99dd5f513..509ccab57e 100644
--- a/qt/org.eclipse.cdt.qt.core/plugin.xml
+++ b/qt/org.eclipse.cdt.qt.core/plugin.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
- <extension-point id="qmakeEnvProvider" name="%qmakeEnvProvider.name" schema="schema/qmakeEnvProvider.exsd"/>
+ <extension-point id="qtInstallTargetMapper" name="Qt Install Target Mapper" schema="schema/qtInstallTargetMapper.exsd"/>
<extension
point="org.eclipse.cdt.core.templates">
@@ -124,6 +124,7 @@
</extension>
<extension
id="qtBuilder"
+ name="Qt Builder"
point="org.eclipse.core.resources.builders">
<builder
callOnEmptyDelta="true"
@@ -178,10 +179,17 @@
point="org.eclipse.core.runtime.adapters">
<factory
adaptableType="org.eclipse.core.resources.IBuildConfiguration"
- class="org.eclipse.cdt.internal.qt.core.build.QtBuildConfiguration$Factory">
+ class="org.eclipse.cdt.internal.qt.core.build.QtBuildConfigurationFactory">
<adapter
type="org.eclipse.cdt.internal.qt.core.build.QtBuildConfiguration">
</adapter>
</factory>
</extension>
+ <extension
+ point="org.eclipse.cdt.qt.core.qtInstallTargetMapper">
+ <mapper
+ class="org.eclipse.cdt.internal.qt.core.LocalQtInstallTargetMapper"
+ targetTypeId="org.eclipse.launchbar.core.launchTargetType.local">
+ </mapper>
+ </extension>
</plugin>
diff --git a/qt/org.eclipse.cdt.qt.core/schema/qmakeEnvProvider.exsd b/qt/org.eclipse.cdt.qt.core/schema/qmakeEnvProvider.exsd
deleted file mode 100644
index 6ea5bf9ae5..0000000000
--- a/qt/org.eclipse.cdt.qt.core/schema/qmakeEnvProvider.exsd
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.cdt.qt.core" xmlns="http://www.w3.org/2001/XMLSchema">
-
-<include schemaLocation="schema://org.eclipse.core.expressions/schema/expressionLanguage.exsd"/>
-
-<annotation>
- <appinfo>
- <meta.schema plugin="org.eclipse.cdt.qt.core" id="qmakeEnvProvider" name="QMake Environment Provider"/>
- </appinfo>
- <documentation>
- This extension point allows to provide environment for qmake cmd-line tool execution.
- </documentation>
- </annotation>
-
- <element name="extension">
- <annotation>
- <appinfo>
- <meta.element />
- </appinfo>
- </annotation>
- <complexType>
- <sequence>
- <element ref="qmakeEnvProvider" minOccurs="1" maxOccurs="unbounded"/>
- </sequence>
- <attribute name="point" type="string" use="required">
- <annotation>
- <documentation>
- a fully qualified identifier of the target extension point
- </documentation>
- </annotation>
- </attribute>
- <attribute name="id" type="string">
- <annotation>
- <documentation>
- an optional identifier of the extension instance
- </documentation>
- </annotation>
- </attribute>
- <attribute name="name" type="string">
- <annotation>
- <documentation>
- an optional name of the extension instance
- </documentation>
- <appinfo>
- <meta.attribute translatable="true"/>
- </appinfo>
- </annotation>
- </attribute>
- </complexType>
- </element>
-
- <element name="qmakeEnvProvider">
- <complexType>
- <sequence>
- <element ref="enablement" minOccurs="0" maxOccurs="1"/>
- </sequence>
- <attribute name="class" type="string" use="required">
- <annotation>
- <documentation>
- Implementation of QMake environment provider which is used to determinate environment for running QMake.
- </documentation>
- <appinfo>
- <meta.attribute kind="java" basedOn=":org.eclipse.cdt.qt.core.index.IQMakeEnvProvider"/>
- </appinfo>
- </annotation>
- </attribute>
- <attribute name="priority" type="integer">
- <annotation>
- <documentation>
- Priority of QMake environment provider. Less number means higher priority. Default priority is 0.
- </documentation>
- </annotation>
- </attribute>
- </complexType>
- </element>
-
- <annotation>
- <appinfo>
- <meta.section type="since"/>
- </appinfo>
- <documentation>
- 8.2
- </documentation>
- </annotation>
-
- <annotation>
- <appinfo>
- <meta.section type="examples"/>
- </appinfo>
- <documentation>
- The following is an example of a qmakeEnvProvider contribution:
-&lt;p&gt;
-&lt;pre&gt;
-&lt;extension
- point=&quot;org.eclipse.cdt.qt.core.qmakeEnvProvider&quot;
- id=&quot;example&quot;
- name=&quot;Example QMake Env Provider Extension&quot;&gt;
- &lt;qmakeEnvProvider
- class=&quot;com.example.internal.ExampleProvider&quot;&gt;
- &lt;enablement&gt;
- &lt;with variable=&quot;projectNatures&quot;&gt;
- &lt;iterate operator=&quot;or&quot;&gt;
- &lt;equals value=&quot;com.example.my-nature&quot;/&gt;
- &lt;/iterate&gt;
- &lt;/with&gt;
- &lt;/enablement&gt;
- &lt;/qmakeEnvProvider&gt;
-&lt;/extension&gt;
-&lt;/pre&gt;
-&lt;/p&gt;
- </documentation>
- </annotation>
-
- <annotation>
- <appinfo>
- <meta.section type="apiinfo"/>
- </appinfo>
- <documentation>
- The contributed class must implement &lt;code&gt;org.eclipse.cdt.qt.core.index.IQMakeEnvProvider&lt;/code&gt;.
- </documentation>
- </annotation>
-
-
- <annotation>
- <appinfo>
- <meta.section type="copyright"/>
- </appinfo>
- <documentation>
- Copyright (c) 2013 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
- </documentation>
- </annotation>
-
-</schema>
diff --git a/core/org.eclipse.cdt.core/schema/ToolChainFactory.exsd b/qt/org.eclipse.cdt.qt.core/schema/qtInstallTargetMapper.exsd
index bc18ce610a..4dbb8ca5f7 100644
--- a/core/org.eclipse.cdt.core/schema/ToolChainFactory.exsd
+++ b/qt/org.eclipse.cdt.qt.core/schema/qtInstallTargetMapper.exsd
@@ -1,10 +1,10 @@
<?xml version='1.0' encoding='UTF-8'?>
<!-- Schema file written by PDE -->
-<schema targetNamespace="org.eclipse.cdt.core" xmlns="http://www.w3.org/2001/XMLSchema">
+<schema targetNamespace="org.eclipse.cdt.qt.core" xmlns="http://www.w3.org/2001/XMLSchema">
<annotation>
- <appInfo>
- <meta.schema plugin="org.eclipse.cdt.core" id="ToolChainFactory" name="Tool Chain Factory"/>
- </appInfo>
+ <appinfo>
+ <meta.schema plugin="org.eclipse.cdt.qt.core" id="qtInstallTargetMapper" name="Qt Install Target Mapper"/>
+ </appinfo>
<documentation>
[Enter description of this extension point.]
</documentation>
@@ -12,13 +12,13 @@
<element name="extension">
<annotation>
- <appInfo>
+ <appinfo>
<meta.element />
- </appInfo>
+ </appinfo>
</annotation>
<complexType>
- <sequence minOccurs="1" maxOccurs="unbounded">
- <element ref="factory"/>
+ <sequence>
+ <element ref="mapper"/>
</sequence>
<attribute name="point" type="string" use="required">
<annotation>
@@ -39,21 +39,24 @@
<documentation>
</documentation>
- <appInfo>
+ <appinfo>
<meta.attribute translatable="true"/>
- </appInfo>
+ </appinfo>
</annotation>
</attribute>
</complexType>
</element>
- <element name="factory">
+ <element name="mapper">
<complexType>
- <attribute name="family" type="string" use="required">
+ <attribute name="targetTypeId" type="string" use="required">
<annotation>
<documentation>
</documentation>
+ <appinfo>
+ <meta.attribute kind="identifier" basedOn="org.eclipse.launchbar.core.launchTargetTypes/launchTargetType/@id"/>
+ </appinfo>
</annotation>
</attribute>
<attribute name="class" type="string" use="required">
@@ -61,45 +64,45 @@
<documentation>
</documentation>
- <appInfo>
- <meta.attribute kind="java" basedOn=":org.eclipse.cdt.core.build.IToolChainFactory"/>
- </appInfo>
+ <appinfo>
+ <meta.attribute kind="java" basedOn=":org.eclipse.cdt.qt.core.IQtInstallTargetMapper"/>
+ </appinfo>
</annotation>
</attribute>
</complexType>
</element>
<annotation>
- <appInfo>
+ <appinfo>
<meta.section type="since"/>
- </appInfo>
+ </appinfo>
<documentation>
[Enter the first release in which this extension point appears.]
</documentation>
</annotation>
<annotation>
- <appInfo>
+ <appinfo>
<meta.section type="examples"/>
- </appInfo>
+ </appinfo>
<documentation>
[Enter extension point usage example here.]
</documentation>
</annotation>
<annotation>
- <appInfo>
+ <appinfo>
<meta.section type="apiinfo"/>
- </appInfo>
+ </appinfo>
<documentation>
[Enter API information here.]
</documentation>
</annotation>
<annotation>
- <appInfo>
+ <appinfo>
<meta.section type="implementation"/>
- </appInfo>
+ </appinfo>
<documentation>
[Enter information about supplied implementation of this extension point.]
</documentation>
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/ASTUtil.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/ASTUtil.java
index f38286159c..8f0841094e 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/ASTUtil.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/ASTUtil.java
@@ -85,7 +85,7 @@ public class ASTUtil {
try {
return getFullyQualifiedName(((ICPPBinding) binding).getQualifiedName());
} catch(DOMException e) {
- QtPlugin.log(e);
+ Activator.log(e);
return null;
}
@@ -165,7 +165,7 @@ public class ASTUtil {
if (scope instanceof ICPPClassScope)
return ((ICPPClassScope) scope).getClassType();
} catch (DOMException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
return null;
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtPlugin.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/Activator.java
index c4d7dfe98f..02b449db6d 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtPlugin.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/Activator.java
@@ -7,22 +7,19 @@
*/
package org.eclipse.cdt.internal.qt.core;
-import java.util.concurrent.atomic.AtomicBoolean;
-
import org.eclipse.cdt.core.model.CModelException;
-import org.eclipse.cdt.internal.qt.core.index.QMakeProjectInfoManager;
+import org.eclipse.cdt.internal.qt.core.build.QtBuildConfigurationFactory;
import org.eclipse.cdt.qt.core.IQtInstallManager;
+import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.core.runtime.Status;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleEvent;
-import org.osgi.framework.BundleListener;
import org.osgi.framework.ServiceReference;
-public class QtPlugin extends Plugin {
+public class Activator extends Plugin {
public static final String ID = "org.eclipse.cdt.qt.core"; //$NON-NLS-1$
public static final String SIGNAL_SLOT_TAGGER_ID = ID + ".signalslot.tagger"; //$NON-NLS-1$
@@ -42,43 +39,34 @@ public class QtPlugin extends Plugin {
*/
public static final QualifiedName QTINDEX_PROP_NAME = new QualifiedName(ID, "qtindex"); //$NON-NLS-1$
- private static QtPlugin instance;
+ private static Activator instance;
+ private static QtBuildConfigurationFactory.Cleanup configCleanup;
- public static QtPlugin getDefault() {
+ public static Activator getDefault() {
return instance;
}
- public QtPlugin() {
+ public Activator() {
instance = this;
}
@Override
public void start(BundleContext context) throws Exception {
- // have to wait for STARTED event because
- // cannot access CoreModel.getDefault().addCProjectDescriptionListener()
- // since the CoreModel is not completely initialized at this time
- BundleListener bundleListener = new BundleListener() {
- final AtomicBoolean initStarted = new AtomicBoolean(false);
-
- @Override
- public void bundleChanged(BundleEvent bundleEvent) {
- if (bundleEvent.getType() == BundleEvent.STARTED) {
- if (!initStarted.getAndSet(true)) {
- QMakeProjectInfoManager.start();
- }
- }
- }
- };
- context.addBundleListener(bundleListener);
+ super.start(context);
context.registerService(IQtInstallManager.class, new QtInstallManager(), null);
- super.start(context);
+ configCleanup = new QtBuildConfigurationFactory.Cleanup();
+ ResourcesPlugin.getWorkspace().addResourceChangeListener(configCleanup);
}
@Override
public void stop(BundleContext context) throws Exception {
- QMakeProjectInfoManager.stop();
+ // QMakeProjectInfoManager.stop();
+
+ ResourcesPlugin.getWorkspace().removeResourceChangeListener(configCleanup);
+ configCleanup = null;
+
super.stop(context);
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/LocalQtInstallTargetMapper.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/LocalQtInstallTargetMapper.java
new file mode 100644
index 0000000000..45fbcee596
--- /dev/null
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/LocalQtInstallTargetMapper.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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;
+
+import org.eclipse.cdt.build.core.IToolChain;
+import org.eclipse.cdt.build.gcc.core.GCCToolChainType;
+import org.eclipse.cdt.qt.core.IQtInstall;
+import org.eclipse.cdt.qt.core.IQtInstallTargetMapper;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.launchbar.core.target.ILaunchTarget;
+
+public class LocalQtInstallTargetMapper implements IQtInstallTargetMapper {
+
+ @Override
+ public boolean supported(IQtInstall qtInstall, ILaunchTarget launchTarget) {
+ String os = Platform.getOS();
+ String arch = Platform.getOSArch();
+
+ switch (qtInstall.getSpec()) {
+ case "macx-clang": //$NON-NLS-1$
+ return Platform.OS_MACOSX.equals(os) && Platform.ARCH_X86_64.equals(arch);
+ case "win32-g++": //$NON-NLS-1$
+ return Platform.OS_WIN32.equals(os);
+ default:
+ return false;
+ }
+ }
+
+ @Override
+ public boolean supported(IQtInstall qtInstall, IToolChain toolChain) {
+ if (toolChain.getType().equals(GCCToolChainType.ID)) {
+ String spec = qtInstall.getSpec();
+ return spec.endsWith("-clang") || spec.endsWith("-g++"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ return false;
+ }
+
+}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtIncludePaths.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtIncludePaths.java
index 654654a817..aba50fbcc0 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtIncludePaths.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtIncludePaths.java
@@ -200,7 +200,7 @@ public class QtIncludePaths extends LanguageSettingsSerializableProvider {
try {
return Long.parseLong(value);
} catch(NumberFormatException e) {
- QtPlugin.log("attribute name:" + attr + " value:" + value, e);
+ Activator.log("attribute name:" + attr + " value:" + value, e);
return 0;
}
}
@@ -230,7 +230,7 @@ public class QtIncludePaths extends LanguageSettingsSerializableProvider {
reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
qtInstallHeadersPath = reader.readLine();
} catch(IOException e) {
- QtPlugin.log(e);
+ Activator.log(e);
} finally {
try {
if (reader != null)
@@ -275,7 +275,7 @@ public class QtIncludePaths extends LanguageSettingsSerializableProvider {
try {
entries.add(new CIncludePathEntry(file.getCanonicalPath(), ICSettingEntry.READONLY | ICSettingEntry.RESOLVED));
} catch(IOException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
}
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtInstall.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtInstall.java
index fd144ffb9e..fb1a853203 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtInstall.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtInstall.java
@@ -13,7 +13,6 @@ import java.io.InputStreamReader;
import java.nio.file.Path;
import org.eclipse.cdt.qt.core.IQtInstall;
-import org.eclipse.core.runtime.Platform;
public class QtInstall implements IQtInstall {
@@ -41,17 +40,6 @@ public class QtInstall implements IQtInstall {
return qmakePath.resolve("../lib"); //$NON-NLS-1$
}
- @Override
- public boolean supports(String os, String arch) {
- switch (getSpec()) {
- case "macx-clang": //$NON-NLS-1$
- return Platform.OS_MACOSX.equals(os) && Platform.ARCH_X86_64.equals(arch);
- case "win32-g++": //$NON-NLS-1$
- return Platform.OS_WIN32.equals(os);
- }
- return false;
- }
-
public static String getSpec(String qmakePath) throws IOException {
Process proc = new ProcessBuilder(qmakePath, "-query", "QMAKE_XSPEC").start(); //$NON-NLS-1$ //$NON-NLS-2$
try (BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()))) {
@@ -69,7 +57,7 @@ public class QtInstall implements IQtInstall {
try {
spec = getSpec(getQmakePath().toString());
} catch (IOException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
}
return spec;
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtInstallManager.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtInstallManager.java
index 0d4e074b2b..c71cb9afa8 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtInstallManager.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtInstallManager.java
@@ -13,18 +13,28 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import org.eclipse.cdt.build.core.IToolChain;
import org.eclipse.cdt.qt.core.IQtInstall;
import org.eclipse.cdt.qt.core.IQtInstallManager;
-import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.cdt.qt.core.IQtInstallTargetMapper;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.preferences.ConfigurationScope;
+import org.eclipse.launchbar.core.target.ILaunchTarget;
import org.osgi.service.prefs.BackingStoreException;
import org.osgi.service.prefs.Preferences;
public class QtInstallManager implements IQtInstallManager {
private Map<String, IQtInstall> installs;
+ private Map<String, IConfigurationElement> mapperElements;
+ private Map<String, IQtInstallTargetMapper> mappers;
private Preferences getPreferences() {
- return InstanceScope.INSTANCE.getNode(QtPlugin.ID).node("qtInstalls"); //$NON-NLS-1$
+ return ConfigurationScope.INSTANCE.getNode(Activator.ID).node("qtInstalls"); //$NON-NLS-1$
}
private void initInstalls() {
@@ -36,7 +46,7 @@ public class QtInstallManager implements IQtInstallManager {
installs.put(key, new QtInstall(key, Paths.get(prefs.get(key, "/")))); //$NON-NLS-1$
}
} catch (BackingStoreException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
}
}
@@ -58,8 +68,10 @@ public class QtInstallManager implements IQtInstallManager {
prefs.put(key, installs.get(key).getQmakePath().toString());
}
}
+
+ prefs.flush();
} catch (BackingStoreException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
}
@@ -88,4 +100,48 @@ public class QtInstallManager implements IQtInstallManager {
saveInstalls();
}
+ @Override
+ public boolean supports(IQtInstall install, ILaunchTarget target) {
+ if (mapperElements == null) {
+ // init the extension point
+ mapperElements = new HashMap<>();
+ mappers = new HashMap<>();
+
+ IExtensionPoint point = Platform.getExtensionRegistry()
+ .getExtensionPoint(Activator.ID + ".qtInstallTargetMapper"); //$NON-NLS-1$
+ for (IExtension extension : point.getExtensions()) {
+ for (IConfigurationElement element : extension.getConfigurationElements()) {
+ String targetTypeId = element.getAttribute("targetTypeId"); //$NON-NLS-1$
+ mapperElements.put(targetTypeId, element);
+ }
+ }
+ }
+
+ String targetTypeId = target.getTypeId();
+ IQtInstallTargetMapper mapper = mappers.get(targetTypeId);
+ if (mapper == null) {
+ IConfigurationElement element = mapperElements.get(targetTypeId);
+ if (element != null) {
+ try {
+ mapper = (IQtInstallTargetMapper) element.createExecutableExtension("class"); //$NON-NLS-1$
+ mappers.put(targetTypeId, mapper);
+ } catch (CoreException e) {
+ Activator.log(e);
+ }
+ }
+ }
+
+ if (mapper == null) {
+ return false;
+ }
+
+ return mapper.supported(install, target);
+ }
+
+ @Override
+ public boolean supports(IQtInstall install, IToolChain toolChain) {
+ // TODO need another extension point for this
+ return true;
+ }
+
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtKeywords.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtKeywords.java
index 97080df0e6..72a03f105f 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtKeywords.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtKeywords.java
@@ -108,7 +108,7 @@ public class QtKeywords {
try {
return ((ICPPFunction) binding).getQualifiedName();
} catch (DOMException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
return null;
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtMethodReference.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtMethodReference.java
index cbde756f05..b24f74bc0a 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtMethodReference.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtMethodReference.java
@@ -173,7 +173,7 @@ public class QtMethodReference extends ASTNameReference {
try {
qualName = cls.getQualifiedName();
} catch(DOMException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
IProject project = ASTUtil.getProject(delegate);
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 cadb9bb254..dadaeab188 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
@@ -36,7 +36,7 @@ public class QtNature implements IProjectNature {
try {
return project.hasNature(ID);
} catch (CoreException e) {
- QtPlugin.log(e);
+ Activator.log(e);
return false;
}
}
@@ -57,6 +57,9 @@ public class QtNature implements IProjectNature {
@Override
public void configure() throws CoreException {
+ }
+
+ public void configurex() throws CoreException {
ICProject cProject = CCorePlugin.getDefault().getCoreModel().create(project);
if (cProject == null)
return;
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtTemplateGenerator.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtTemplateGenerator.java
index b84d0adb4f..98f4492af5 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtTemplateGenerator.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/QtTemplateGenerator.java
@@ -26,11 +26,11 @@ public class QtTemplateGenerator {
public QtTemplateGenerator() throws CoreException {
config = new Configuration(Configuration.VERSION_2_3_22);
- URL templateDirURL = FileLocator.find(QtPlugin.getDefault().getBundle(), new Path("/templates"), null); //$NON-NLS-1$
+ URL templateDirURL = FileLocator.find(Activator.getDefault().getBundle(), new Path("/templates"), null); //$NON-NLS-1$
try {
config.setDirectoryForTemplateLoading(new File(FileLocator.toFileURL(templateDirURL).toURI()));
} catch (IOException | URISyntaxException e) {
- throw new CoreException(new Status(IStatus.ERROR, QtPlugin.ID, "Template configuration", e));
+ throw new CoreException(new Status(IStatus.ERROR, Activator.ID, "Template configuration", e));
}
}
@@ -50,7 +50,7 @@ public class QtTemplateGenerator {
}
}
} catch (IOException | TemplateException e) {
- throw new CoreException(new Status(IStatus.ERROR, QtPlugin.ID, "Processing template " + templateFile, e));
+ throw new CoreException(new Status(IStatus.ERROR, Activator.ID, "Processing template " + templateFile, e));
}
}
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 e86c64a464..97f1fb89ab 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
@@ -12,124 +12,79 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
-import java.util.Set;
+import org.eclipse.cdt.build.core.CBuildConfiguration;
+import org.eclipse.cdt.build.core.IToolChain;
import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.build.CBuildConfiguration;
import org.eclipse.cdt.core.model.ILanguage;
import org.eclipse.cdt.core.model.LanguageManager;
+import org.eclipse.cdt.core.parser.IExtendedScannerInfo;
import org.eclipse.cdt.core.parser.IScannerInfo;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.cdt.qt.core.IQtInstall;
import org.eclipse.cdt.qt.core.IQtInstallManager;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IFolder;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdapterFactory;
-import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
public class QtBuildConfiguration extends CBuildConfiguration {
- private IQtInstall qtInstall;
- private String launchMode;
+ private static final String QTINSTALL_NAME = "cdt.qt.install.name"; //$NON-NLS-1$
+ private static final String LAUNCH_MODE = "cdt.qt.launchMode"; //$NON-NLS-1$
+
+ private final IQtInstall qtInstall;
+ private final String launchMode;
private Map<String, String> properties;
public QtBuildConfiguration(IBuildConfiguration config) {
super(config);
- }
- private static Map<IBuildConfiguration, QtBuildConfiguration> cache = new HashMap<>();
-
- public static class Factory implements IAdapterFactory {
- @SuppressWarnings("unchecked")
- @Override
- public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) {
- if (adapterType.equals(QtBuildConfiguration.class) && adaptableObject instanceof IBuildConfiguration) {
- synchronized (cache) {
- IBuildConfiguration config = (IBuildConfiguration) adaptableObject;
- QtBuildConfiguration qtConfig = cache.get(config);
- if (qtConfig == null) {
- qtConfig = new QtBuildConfiguration(config);
- cache.put(config, qtConfig);
- }
- return (T) qtConfig;
- }
- }
- return null;
+ Preferences settings = getSettings();
+ String installName = settings.get(QTINSTALL_NAME, ""); //$NON-NLS-1$
+ if (!installName.isEmpty()) {
+ IQtInstallManager manager = Activator.getService(IQtInstallManager.class);
+ qtInstall = manager.getInstall(installName);
+ } else {
+ qtInstall = null;
}
- @Override
- public Class<?>[] getAdapterList() {
- return new Class<?>[] { QtBuildConfiguration.class };
- }
+ launchMode = settings.get(LAUNCH_MODE, ""); //$NON-NLS-1$
}
- public static QtBuildConfiguration getConfig(IProject project, String os, String arch, String launchMode,
- IProgressMonitor monitor) throws CoreException {
- // return it if it exists already
- for (IBuildConfiguration config : project.getBuildConfigs()) {
- QtBuildConfiguration qtConfig = config.getAdapter(QtBuildConfiguration.class);
- IQtInstall qtInstall = qtConfig.getQtInstall();
- if (qtInstall != null && qtInstall.supports(os, arch) && launchMode.equals(qtConfig.getLaunchMode())) {
- return qtConfig;
- }
- }
+ public QtBuildConfiguration(IBuildConfiguration config, IToolChain toolChain, IQtInstall qtInstall,
+ String launchMode) {
+ super(config, toolChain);
+ this.qtInstall = qtInstall;
+ this.launchMode = launchMode;
- // Nope, create it
- for (IQtInstall qtInstall : QtPlugin.getService(IQtInstallManager.class).getInstalls()) {
- if (qtInstall.supports(os, arch)) {
- Set<String> configNames = new HashSet<>();
- for (IBuildConfiguration config : project.getBuildConfigs()) {
- configNames.add(config.getName());
- }
- String baseName = qtInstall.getSpec() + ":" + launchMode; //$NON-NLS-1$
- String newName = baseName;
- int n = 0;
- while (configNames.contains(newName)) {
- newName = baseName + (++n);
- }
- configNames.add(newName);
- IProjectDescription projectDesc = project.getDescription();
- projectDesc.setBuildConfigs(configNames.toArray(new String[configNames.size()]));
- project.setDescription(projectDesc, monitor);
-
- QtBuildConfiguration qtConfig = project.getBuildConfig(newName).getAdapter(QtBuildConfiguration.class);
- qtConfig.setup(qtInstall, launchMode);
- return qtConfig;
- }
+ Preferences settings = getSettings();
+ settings.put(QTINSTALL_NAME, qtInstall.getName());
+ settings.put(LAUNCH_MODE, launchMode);
+ try {
+ settings.flush();
+ } catch (BackingStoreException e) {
+ Activator.log(e);
}
- return null;
}
public IQtInstall getQtInstall() {
- if (qtInstall == null) {
- // TODO set based on settings
- }
return qtInstall;
}
- private String getLaunchMode() {
- if (launchMode != null) {
- // TODO set based on settings
- }
+ public String getLaunchMode() {
return launchMode;
}
- private void setup(IQtInstall qtInstall, String launchMode) {
- this.qtInstall = qtInstall;
- this.launchMode = launchMode;
- // TODO save settings
- }
-
public String getQmakeCommand() {
return qtInstall.getQmakePath().toString();
}
@@ -157,8 +112,28 @@ public class QtBuildConfiguration extends CBuildConfiguration {
}
}
- public IFolder getBuildFolder() {
- return getProject().getFolder("build").getFolder(getBuildConfiguration().getName()); //$NON-NLS-1$
+ private IFolder getBuildFolder() {
+ String configName = getBuildConfiguration().getName();
+ if (configName.isEmpty()) {
+ configName = "default"; //$NON-NLS-1$
+ }
+
+ try {
+ // TODO should really be passing a monitor in here or create this in
+ // a better spot. should also throw the core exception
+ IFolder buildRootFolder = getProject().getFolder("build"); //$NON-NLS-1$
+ if (!buildRootFolder.exists()) {
+ buildRootFolder.create(IResource.FORCE | IResource.DERIVED, true, new NullProgressMonitor());
+ }
+ IFolder buildFolder = buildRootFolder.getFolder(configName);
+ if (!buildFolder.exists()) {
+ buildFolder.create(true, true, new NullProgressMonitor());
+ }
+ return buildFolder;
+ } catch (CoreException e) {
+ Activator.log(e);
+ }
+ return null;
}
public Path getBuildDirectory() {
@@ -183,16 +158,16 @@ public class QtBuildConfiguration extends CBuildConfiguration {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()))) {
properties = new HashMap<>();
for (String line = reader.readLine(); line != null; line = reader.readLine()) {
- if (line.contains("=")) { //$NON-NLS-1$
- String[] parts = line.split("="); //$NON-NLS-1$
- if (parts.length == 2) {
- properties.put(parts[0].trim(), parts[1].trim());
- }
+ int i = line.indexOf('=');
+ if (i >= 0) {
+ String k = line.substring(0, i);
+ String v = line.substring(i + 1);
+ properties.put(k.trim(), v.trim());
}
}
}
} catch (IOException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
}
@@ -200,28 +175,31 @@ public class QtBuildConfiguration extends CBuildConfiguration {
}
@Override
- public IScannerInfo getScannerInfo(IResource resource) throws CoreException {
+ public IScannerInfo getScannerInfo(IResource resource) throws IOException {
IScannerInfo info = super.getScannerInfo(resource);
if (info == null) {
- List<String> cmd = new ArrayList<>();
- cmd.add(getProperty("QMAKE_CXX")); //$NON-NLS-1$
- cmd.addAll(Arrays.asList(getProperty("QMAKE_CXXFLAGS").split(" "))); //$NON-NLS-1$ //$NON-NLS-2$
+ String cxx = getProperty("QMAKE_CXX"); //$NON-NLS-1$
+ String[] cxxSplit = cxx.split(" "); //$NON-NLS-1$
+ String command = cxxSplit[0];
- for (String include : getProperty("INCLUDEPATH").split(" ")) { //$NON-NLS-1$ //$NON-NLS-2$
- cmd.add("-I"); //$NON-NLS-1$
- cmd.add(include);
+ List<String> args = new ArrayList<>();
+ for (int i = 1; i < cxxSplit.length; ++i) {
+ args.add(cxxSplit[i]);
}
+ args.addAll(Arrays.asList(getProperty("QMAKE_CXXFLAGS").split(" "))); //$NON-NLS-1$ //$NON-NLS-2$
+ args.add("-o"); //$NON-NLS-1$
+ args.add("-"); //$NON-NLS-1$
+ args.add(resource.getLocation().toString());
- cmd.add("-o"); //$NON-NLS-1$
- cmd.add("-"); //$NON-NLS-1$
-
- // TODO need to make sure this path is valid
- // The gcc toolchain uses IFile to make sure it exists
- cmd.add(resource.getFullPath().toPortableString());
+ String[] includePaths = getProperty("INCLUDEPATH").split(" "); //$NON-NLS-1$ //$NON-NLS-2$
ILanguage language = LanguageManager.getInstance()
.getLanguage(CCorePlugin.getContentType(getProject(), resource.getName()), getProject()); // $NON-NLS-1$
- putScannerInfo(language, getToolChain().getScannerInfo(getBuildFolder(), cmd));
+ Path dir = Paths.get(getProject().getLocationURI());
+ IExtendedScannerInfo extendedInfo = getToolChain().getScannerInfo(command, args,
+ Arrays.asList(includePaths), resource, dir);
+ putScannerInfo(language, extendedInfo);
+ info = extendedInfo;
}
return info;
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationFactory.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationFactory.java
new file mode 100644
index 0000000000..5fdafd47a5
--- /dev/null
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtBuildConfigurationFactory.java
@@ -0,0 +1,171 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.cdt.build.core.IToolChain;
+import org.eclipse.cdt.build.core.IToolChainManager;
+import org.eclipse.cdt.internal.qt.core.Activator;
+import org.eclipse.cdt.internal.qt.core.QtNature;
+import org.eclipse.cdt.qt.core.IQtInstall;
+import org.eclipse.cdt.qt.core.IQtInstallManager;
+import org.eclipse.core.resources.IBuildConfiguration;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdapterFactory;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.launchbar.core.target.ILaunchTarget;
+import org.eclipse.launchbar.core.target.ILaunchTargetManager;
+
+public class QtBuildConfigurationFactory implements IAdapterFactory {
+
+ private static IQtInstallManager qtInstallManager = Activator.getService(IQtInstallManager.class);
+ private static IToolChainManager toolChainManager = Activator.getService(IToolChainManager.class);
+
+ private static Map<IBuildConfiguration, QtBuildConfiguration> cache = new HashMap<>();
+
+ @Override
+ public Class<?>[] getAdapterList() {
+ return new Class<?>[] { QtBuildConfiguration.class };
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public <T> T getAdapter(Object adaptableObject, Class<T> adapterType) {
+ if (adapterType.equals(QtBuildConfiguration.class) && adaptableObject instanceof IBuildConfiguration) {
+ IBuildConfiguration config = (IBuildConfiguration) adaptableObject;
+ synchronized (cache) {
+ QtBuildConfiguration qtConfig = cache.get(config);
+ if (qtConfig == null) {
+ if (!config.getName().equals(IBuildConfiguration.DEFAULT_CONFIG_NAME)) {
+ qtConfig = new QtBuildConfiguration(config);
+ cache.put(config, qtConfig);
+ return (T) qtConfig;
+ } else {
+ // Default to local
+ ILaunchTargetManager targetManager = Activator.getService(ILaunchTargetManager.class);
+ ILaunchTarget localTarget = targetManager
+ .getLaunchTargetsOfType(ILaunchTargetManager.localLaunchTargetTypeId)[0];
+ qtConfig = createDefaultConfig(config, localTarget);
+ if (qtConfig != null) {
+ cache.put(config, qtConfig);
+ return (T) qtConfig;
+ }
+
+ // Just find a combination that works
+ for (ILaunchTarget target : targetManager.getLaunchTargets()) {
+ if (!target.equals(localTarget)) {
+ qtConfig = createDefaultConfig(config, localTarget);
+ if (qtConfig != null) {
+ cache.put(config, qtConfig);
+ return (T) qtConfig;
+ }
+ }
+ }
+
+ // TODO if we don't have a target, need another way to
+ // match whatever qtInstalls we have with matching
+ // toolchains
+ }
+ }
+ return (T) qtConfig;
+ }
+ }
+ return null;
+ }
+
+ private static QtBuildConfiguration createDefaultConfig(IBuildConfiguration config, ILaunchTarget target) {
+ for (IQtInstall qtInstall : qtInstallManager.getInstalls()) {
+ if (qtInstallManager.supports(qtInstall, target)) {
+ // Find the toolchain
+ for (IToolChain toolChain : toolChainManager.getToolChainsSupporting(target)) {
+ if (qtInstallManager.supports(qtInstall, toolChain)) {
+ return new QtBuildConfiguration(config, toolChain, qtInstall, "run"); //$NON-NLS-1$
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+
+ public static QtBuildConfiguration getConfig(IProject project, String launchMode, ILaunchTarget target,
+ IProgressMonitor monitor) throws CoreException {
+ // return it if it exists already
+ for (IBuildConfiguration config : project.getBuildConfigs()) {
+ QtBuildConfiguration qtConfig = config.getAdapter(QtBuildConfiguration.class);
+ IQtInstall qtInstall = qtConfig.getQtInstall();
+ if (qtInstall != null && qtInstallManager.supports(qtInstall, target)
+ && launchMode.equals(qtConfig.getLaunchMode())) {
+ return qtConfig;
+ }
+ }
+
+ // Nope, create it
+ for (IQtInstall qtInstall : qtInstallManager.getInstalls()) {
+ if (qtInstallManager.supports(qtInstall, target)) {
+ // Create the build config
+ Set<String> configNames = new HashSet<>();
+ for (IBuildConfiguration config : project.getBuildConfigs()) {
+ configNames.add(config.getName());
+ }
+ String baseName = qtInstall.getSpec() + ":" + launchMode; //$NON-NLS-1$
+ String newName = baseName;
+ int n = 0;
+ while (configNames.contains(newName)) {
+ newName = baseName + (++n);
+ }
+ configNames.add(newName);
+ IProjectDescription projectDesc = project.getDescription();
+ projectDesc.setBuildConfigs(configNames.toArray(new String[configNames.size()]));
+ project.setDescription(projectDesc, monitor);
+
+ // Find the toolchain
+ IToolChainManager toolChainManager = Activator.getService(IToolChainManager.class);
+ for (IToolChain toolChain : toolChainManager.getToolChainsSupporting(target)) {
+ if (qtInstallManager.supports(qtInstall, toolChain)) {
+ QtBuildConfiguration qtConfig = new QtBuildConfiguration(project.getBuildConfig(newName),
+ toolChain, qtInstall, launchMode);
+ return qtConfig;
+ // TODO what if there's more than toolChain supported?
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ public static class Cleanup implements IResourceChangeListener {
+ @Override
+ public void resourceChanged(IResourceChangeEvent event) {
+ if (event.getType() == IResourceChangeEvent.PRE_CLOSE
+ || event.getType() == IResourceChangeEvent.PRE_DELETE) {
+ if (event.getResource().getType() == IResource.PROJECT) {
+ IProject project = event.getResource().getProject();
+ if (QtNature.hasNature(project)) {
+ try {
+ for (IBuildConfiguration config : project.getBuildConfigs()) {
+ cache.remove(config);
+ }
+ } catch (CoreException e) {
+ Activator.log(e);
+ }
+ }
+ }
+ }
+ }
+ }
+
+} \ No newline at end of file
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
index 33b7a952f1..ab843b5b50 100644
--- 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
@@ -7,17 +7,15 @@
*******************************************************************************/
package org.eclipse.cdt.internal.qt.core.build;
-import java.io.File;
import java.io.IOException;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import org.eclipse.cdt.core.build.IConsoleService;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
-import org.eclipse.core.resources.IContainer;
+import org.eclipse.cdt.build.core.IConsoleService;
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IncrementalProjectBuilder;
@@ -29,20 +27,17 @@ import org.eclipse.core.runtime.Status;
public class QtBuilder extends IncrementalProjectBuilder {
- public static final String ID = QtPlugin.ID + ".qtBuilder"; //$NON-NLS-1$
+ 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 {
- IConsoleService console = QtPlugin.getService(IConsoleService.class);
+ IConsoleService console = Activator.getService(IConsoleService.class);
QtBuildConfiguration qtConfig = getBuildConfig().getAdapter(QtBuildConfiguration.class);
- IFolder buildFolder = qtConfig.getBuildFolder();
- createFolder(buildFolder, monitor);
-
- IFile makeFile = buildFolder.getFile("Makefile"); //$NON-NLS-1$
- if (!makeFile.exists()) {
+ 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());
@@ -55,21 +50,21 @@ public class QtBuilder extends IncrementalProjectBuilder {
IFile projectFile = qtConfig.getProject().getFile("main.pro");
command.add(projectFile.getLocation().toOSString());
- Process process = new ProcessBuilder(command).directory(new File(buildFolder.getLocationURI())).start();
+ Process process = new ProcessBuilder(command).directory(buildDir.toFile()).start();
StringBuffer msg = new StringBuffer();
for (String arg : command) {
msg.append(arg).append(' ');
}
msg.append('\n');
console.writeOutput(msg.toString());
- console.monitor(process, null, buildFolder);
+ console.monitor(process, null, buildDir);
}
// run make
// TODO obviously hardcoding here
boolean isWin = Platform.getOS().equals(Platform.OS_WIN32);
String make = isWin ? "C:/Qt/Tools/mingw492_32/bin/mingw32-make" : "make";
- ProcessBuilder procBuilder = new ProcessBuilder(make).directory(new File(buildFolder.getLocationURI())); //$NON-NLS-1$
+ ProcessBuilder procBuilder = new ProcessBuilder(make).directory(buildDir.toFile());
if (isWin) {
// Need to put the toolchain into env
Map<String, String> env = procBuilder.environment();
@@ -79,22 +74,13 @@ public class QtBuilder extends IncrementalProjectBuilder {
}
Process process = procBuilder.start();
console.writeOutput("make\n"); //$NON-NLS-1$
- console.monitor(process, null, buildFolder);
+ console.monitor(process, null, buildDir);
- buildFolder.refreshLocal(IResource.DEPTH_INFINITE, monitor);
+ project.refreshLocal(IResource.DEPTH_INFINITE, monitor);
return new IProject[] { project };
} catch (IOException e) {
- throw new CoreException(new Status(IStatus.ERROR, QtPlugin.ID, "Building " + project.getName(), e));
+ throw new CoreException(new Status(IStatus.ERROR, Activator.ID, "Building " + project.getName(), e));
}
}
- private void createFolder(IFolder folder, IProgressMonitor monitor) throws CoreException {
- IContainer parent = folder.getParent();
- if (!parent.exists()) {
- createFolder((IFolder) parent, monitor);
- }
- if (!folder.exists()) {
- folder.create(IResource.FORCE | IResource.DERIVED, true, monitor);
- }
- }
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtScannerInfoProvider.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtScannerInfoProvider.java
index e17d379b74..e1c086e068 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtScannerInfoProvider.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/build/QtScannerInfoProvider.java
@@ -7,10 +7,12 @@
*******************************************************************************/
package org.eclipse.cdt.internal.qt.core.build;
+import java.io.IOException;
+
import org.eclipse.cdt.core.parser.IScannerInfo;
import org.eclipse.cdt.core.parser.IScannerInfoChangeListener;
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
@@ -24,11 +26,13 @@ public class QtScannerInfoProvider implements IScannerInfoProvider {
IProject project = resource.getProject();
IBuildConfiguration config = project.getActiveBuildConfig();
QtBuildConfiguration qtConfig = config.getAdapter(QtBuildConfiguration.class);
- return qtConfig.getScannerInfo(resource);
- } catch (CoreException e) {
- QtPlugin.log(e);
- return null;
+ if (qtConfig != null) {
+ return qtConfig.getScannerInfo(resource);
+ }
+ } catch (CoreException | IOException e) {
+ Activator.log(e);
}
+ return null;
}
@Override
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/codan/QtSyntaxChecker.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/codan/QtSyntaxChecker.java
index e4d54f86f9..e63cc65509 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/codan/QtSyntaxChecker.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/codan/QtSyntaxChecker.java
@@ -22,7 +22,7 @@ import org.eclipse.cdt.internal.qt.core.ASTUtil;
import org.eclipse.cdt.internal.qt.core.QtFunctionCall;
import org.eclipse.cdt.internal.qt.core.QtMethodReference;
import org.eclipse.cdt.internal.qt.core.QtNature;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.cdt.internal.qt.core.index.IQMethod;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.OperationCanceledException;
@@ -94,9 +94,9 @@ public class QtSyntaxChecker extends AbstractIndexAstChecker implements IChecker
private void report(IASTNode node, String message, Object... args) {
if (args.length <= 0)
- reportProblem(QtPlugin.QT_SYNTAX_ERR_ID, node, message);
+ reportProblem(Activator.QT_SYNTAX_ERR_ID, node, message);
else
- reportProblem(QtPlugin.QT_SYNTAX_ERR_ID, node, NLS.bind(message, args));
+ reportProblem(Activator.QT_SYNTAX_ERR_ID, node, NLS.bind(message, args));
}
};
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/CDTIndex.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/CDTIndex.java
index 3c541c2109..c7bcbd0e41 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/CDTIndex.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/CDTIndex.java
@@ -8,7 +8,7 @@
package org.eclipse.cdt.internal.qt.core.index;
import org.eclipse.cdt.core.index.IIndex;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.core.runtime.CoreException;
/**
@@ -52,7 +52,7 @@ public class CDTIndex {
try {
return accessor.access(index);
} catch(CoreException e) {
- QtPlugin.log( e );
+ Activator.log( e );
} finally {
index.releaseReadLock();
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeEnvProviderDescriptor.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeEnvProviderDescriptor.java
index 1d4492378b..068a41e05c 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeEnvProviderDescriptor.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeEnvProviderDescriptor.java
@@ -11,7 +11,7 @@ import java.util.Arrays;
import java.util.concurrent.atomic.AtomicReference;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.cdt.internal.qt.core.index.IQMakeEnvProvider.IController;
import org.eclipse.core.expressions.EvaluationContext;
import org.eclipse.core.expressions.EvaluationResult;
@@ -49,7 +49,7 @@ public final class QMakeEnvProviderDescriptor implements Comparable<QMakeEnvProv
try {
prio = Integer.parseInt(priorityString);
} catch (NumberFormatException e) {
- QtPlugin.log("Invalid priority value of " + id, e); //$NON-NLS-1$
+ Activator.log("Invalid priority value of " + id, e); //$NON-NLS-1$
}
}
this.priority = prio;
@@ -66,11 +66,11 @@ public final class QMakeEnvProviderDescriptor implements Comparable<QMakeEnvProv
ExpressionConverter parser = ExpressionConverter.getDefault();
expr = parser.perform(children[0]);
} catch (CoreException e) {
- QtPlugin.log("Error in enablement expression of " + id, e); //$NON-NLS-1$
+ Activator.log("Error in enablement expression of " + id, e); //$NON-NLS-1$
}
break;
default:
- QtPlugin.log("Too many enablement expressions for " + id); //$NON-NLS-1$
+ Activator.log("Too many enablement expressions for " + id); //$NON-NLS-1$
evaluation.set(Boolean.FALSE);
break;
}
@@ -99,7 +99,7 @@ public final class QMakeEnvProviderDescriptor implements Comparable<QMakeEnvProv
try {
provider = (IQMakeEnvProvider) element.createExecutableExtension(ATTR_CLASS);
} catch (CoreException e) {
- QtPlugin.log("Error in class attribute of " + id, e); //$NON-NLS-1$
+ Activator.log("Error in class attribute of " + id, e); //$NON-NLS-1$
return null;
}
return provider.createEnv(controller);
@@ -127,7 +127,7 @@ public final class QMakeEnvProviderDescriptor implements Comparable<QMakeEnvProv
}
return enablementExpression.evaluate(evalContext) == EvaluationResult.TRUE;
} catch (CoreException e) {
- QtPlugin.log("Error while evaluating enablement expression for " + id, e); //$NON-NLS-1$
+ Activator.log("Error while evaluating enablement expression for " + id, e); //$NON-NLS-1$
}
}
evaluation.set(Boolean.FALSE);
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeEnvProviderManager.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeEnvProviderManager.java
index a4b29fb6b3..12a89fef3b 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeEnvProviderManager.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeEnvProviderManager.java
@@ -14,7 +14,7 @@ import java.util.List;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.IConfigurationElement;
@@ -45,7 +45,7 @@ public final class QMakeEnvProviderManager {
private static List<QMakeEnvProviderDescriptor> loadDescriptors() {
List<QMakeEnvProviderDescriptor> descriptors = new ArrayList<QMakeEnvProviderDescriptor>();
IConfigurationElement[] elements = Platform.getExtensionRegistry()
- .getConfigurationElementsFor(QtPlugin.ID, QtPlugin.QMAKE_ENV_PROVIDER_EXT_POINT_NAME);
+ .getConfigurationElementsFor(Activator.ID, Activator.QMAKE_ENV_PROVIDER_EXT_POINT_NAME);
for (IConfigurationElement element : elements) {
descriptors.add(new QMakeEnvProviderDescriptor(element));
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeInfo.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeInfo.java
index f715abe455..eb39465c10 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeInfo.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeInfo.java
@@ -17,7 +17,7 @@ import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.cdt.utils.spawner.ProcessFactory;
/**
@@ -176,7 +176,7 @@ public final class QMakeInfo implements IQMakeInfo {
*/
private static Map<String, String> exec(Pattern regex, String[] extraEnv, String...command) {
if (command.length < 1 || ! new File(command[0]).exists()) {
- QtPlugin.log("qmake: cannot run command: " + (command.length > 0 ? command[0] : ""));
+ Activator.log("qmake: cannot run command: " + (command.length > 0 ? command[0] : ""));
return null;
}
BufferedReader reader = null;
@@ -190,7 +190,7 @@ public final class QMakeInfo implements IQMakeInfo {
reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
return QMakeParser.parse(regex, reader);
} catch(IOException e) {
- QtPlugin.log(e);
+ Activator.log(e);
return null;
} finally {
if (reader != null)
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeParser.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeParser.java
index 0107155fdc..86d684ac30 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeParser.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeParser.java
@@ -17,7 +17,7 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
/**
* Provides a parser for QMake output.
@@ -54,13 +54,13 @@ public final class QMakeParser {
while((line = reader.readLine()) != null) {
Matcher m = regex.matcher(line);
if (!m.matches() || m.groupCount() != 2) {
- QtPlugin.log("qmake: cannot decode query line '" + line + '\'');
+ Activator.log("qmake: cannot decode query line '" + line + '\'');
} else {
String key = m.group(1);
String value = m.group(2);
String oldValue = result.put(key, value);
if (oldValue != null)
- QtPlugin.log("qmake: duplicate keys in query info '" + line + "' was '" + oldValue + '\'');
+ Activator.log("qmake: duplicate keys in query info '" + line + "' was '" + oldValue + '\'');
}
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeVersion.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeVersion.java
index 1e338138a0..3667cc56cb 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeVersion.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QMakeVersion.java
@@ -10,7 +10,7 @@ package org.eclipse.cdt.internal.qt.core.index;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
/**
* A container class to interpret and store value of the the qmake version.
@@ -36,7 +36,7 @@ public final class QMakeVersion implements IQtVersion {
int minor = Integer.parseInt(m.group(2));
return new QMakeVersion(major, minor);
} catch(NumberFormatException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
return null;
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QtFactory.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QtFactory.java
index c1831bc70c..ee65a32277 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QtFactory.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QtFactory.java
@@ -18,7 +18,7 @@ import org.eclipse.cdt.core.index.IIndexMacro;
import org.eclipse.cdt.core.index.IndexFilter;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICProject;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
@@ -29,13 +29,13 @@ public class QtFactory {
public static QtIndex create(IProject project) {
CDTIndex cdtIndex = getCDTIndex(project);
if (cdtIndex == null) {
- QtPlugin.log("could not get CDT index from project " + project.getName());
+ Activator.log("could not get CDT index from project " + project.getName());
return null;
}
QtVersion qtVersion = cdtIndex.get(QtVersionAccessor);
if (qtVersion == null) {
- QtPlugin.log("could not find Qt version in CDT index from project " + project.getName());
+ Activator.log("could not find Qt version in CDT index from project " + project.getName());
return null;
}
@@ -58,7 +58,7 @@ public class QtFactory {
try {
index = CCorePlugin.getIndexManager().getIndex(cProject);
} catch( CoreException e ) {
- QtPlugin.log(e);
+ Activator.log(e);
return null;
}
@@ -88,7 +88,7 @@ public class QtFactory {
int patch = Integer.parseInt(m.group(3), 16);
return new QtVersion(major, minor, patch);
} catch(NumberFormatException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
return null;
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QtIndex.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QtIndex.java
index fb66625a3b..3f4066b8c0 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QtIndex.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/index/QtIndex.java
@@ -9,7 +9,7 @@ package org.eclipse.cdt.internal.qt.core.index;
import java.util.Collection;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
@@ -37,11 +37,11 @@ public abstract class QtIndex {
return null;
try {
- Object index = project.getSessionProperty(QtPlugin.QTINDEX_PROP_NAME);
+ Object index = project.getSessionProperty(Activator.QTINDEX_PROP_NAME);
if (index instanceof QtIndex)
return (QtIndex)index;
} catch(CoreException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
// create and store a new instance when needed
@@ -50,9 +50,9 @@ public abstract class QtIndex {
return null;
try {
- project.setSessionProperty(QtPlugin.QTINDEX_PROP_NAME, index);
+ project.setSessionProperty(Activator.QTINDEX_PROP_NAME, index);
} catch( CoreException e ) {
- QtPlugin.log(e);
+ Activator.log(e);
}
return index;
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLocalRunLaunchConfigDelegate.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLocalRunLaunchConfigDelegate.java
index eedd0d35d1..33d3081c70 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLocalRunLaunchConfigDelegate.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/launch/QtLocalRunLaunchConfigDelegate.java
@@ -12,10 +12,9 @@ import java.io.IOException;
import java.nio.file.Path;
import java.util.Map;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.cdt.internal.qt.core.build.QtBuildConfiguration;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
+import org.eclipse.cdt.internal.qt.core.build.QtBuildConfigurationFactory;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.runtime.CoreException;
@@ -27,11 +26,21 @@ import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.debug.core.model.LaunchConfigurationDelegate;
+import org.eclipse.launchbar.core.target.ILaunchTarget;
+import org.eclipse.launchbar.core.target.launch.ITargetedLaunch;
+import org.eclipse.launchbar.core.target.launch.LaunchConfigurationTargetedDelegate;
+import org.eclipse.launchbar.core.target.launch.TargetedLaunch;
-public class QtLocalRunLaunchConfigDelegate extends LaunchConfigurationDelegate {
+public class QtLocalRunLaunchConfigDelegate extends LaunchConfigurationTargetedDelegate {
- public static final String TYPE_ID = QtPlugin.ID + ".launchConfigurationType"; //$NON-NLS-1$
+ public static final String TYPE_ID = Activator.ID + ".launchConfigurationType"; //$NON-NLS-1$
+
+ @Override
+ public ITargetedLaunch getLaunch(ILaunchConfiguration configuration, String mode, ILaunchTarget target)
+ throws CoreException {
+ // TODO sourcelocator?
+ return new TargetedLaunch(configuration, mode, target, null);
+ }
@Override
public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor)
@@ -40,29 +49,32 @@ public class QtLocalRunLaunchConfigDelegate extends LaunchConfigurationDelegate
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
- QtBuildConfiguration qtBuildConfig = getQtBuildConfiguration(configuration, mode, monitor);
+ ILaunchTarget target = ((ITargetedLaunch) launch).getLaunchTarget();
+ QtBuildConfiguration qtBuildConfig = getQtBuildConfiguration(configuration, mode, target, monitor);
// get the executable
- IFolder buildFolder = qtBuildConfig.getBuildFolder();
- IFile exeFile;
+ Path buildFolder = qtBuildConfig.getBuildDirectory();
+ Path exeFile;
switch (Platform.getOS()) {
case Platform.OS_MACOSX:
- // TODO this is mac local specific and really should be in the config
- // TODO also need to pull the app name out of the pro file name
- IFolder appFolder = buildFolder.getFolder("main.app");
- IFolder contentsFolder = appFolder.getFolder("Contents");
- IFolder macosFolder = contentsFolder.getFolder("MacOS");
- exeFile = macosFolder.getFile("main");
+ // TODO this is mac local specific and really should be
+ // in the config
+ // TODO also need to pull the app name out of the pro
+ // file name
+ Path appFolder = buildFolder.resolve("main.app");
+ Path contentsFolder = appFolder.resolve("Contents");
+ Path macosFolder = contentsFolder.resolve("MacOS");
+ exeFile = macosFolder.resolve("main");
break;
case Platform.OS_WIN32:
- IFolder releaseFolder = buildFolder.getFolder("release");
- exeFile = releaseFolder.getFile("main.exe");
+ Path releaseFolder = buildFolder.resolve("release");
+ exeFile = releaseFolder.resolve("main.exe");
break;
default:
- return new Status(IStatus.ERROR, QtPlugin.ID, "platform not supported: " + Platform.getOS());
+ return new Status(IStatus.ERROR, Activator.ID, "platform not supported: " + Platform.getOS());
}
- ProcessBuilder builder = new ProcessBuilder(exeFile.getLocation().toFile().getAbsolutePath())
+ ProcessBuilder builder = new ProcessBuilder(exeFile.toString())
.directory(qtBuildConfig.getProject().getLocation().toFile());
// need to add the Qt libraries to the env
@@ -90,7 +102,7 @@ public class QtLocalRunLaunchConfigDelegate extends LaunchConfigurationDelegate
Process process = builder.start();
DebugPlugin.newProcess(launch, process, "main");
} catch (IOException e) {
- return new Status(IStatus.ERROR, QtPlugin.ID, "running", e);
+ return new Status(IStatus.ERROR, Activator.ID, "running", e);
} catch (CoreException e) {
return e.getStatus();
}
@@ -100,9 +112,9 @@ public class QtLocalRunLaunchConfigDelegate extends LaunchConfigurationDelegate
}
@Override
- public boolean buildForLaunch(ILaunchConfiguration configuration, String mode, IProgressMonitor monitor)
- throws CoreException {
- QtBuildConfiguration qtBuildConfig = getQtBuildConfiguration(configuration, mode, monitor);
+ public boolean buildForLaunch(ILaunchConfiguration configuration, String mode, ILaunchTarget target,
+ IProgressMonitor monitor) throws CoreException {
+ QtBuildConfiguration qtBuildConfig = getQtBuildConfiguration(configuration, mode, target, monitor);
// Set it as active
IProject project = qtBuildConfig.getProject();
@@ -111,7 +123,7 @@ public class QtLocalRunLaunchConfigDelegate extends LaunchConfigurationDelegate
project.setDescription(desc, monitor);
// And build
- return super.buildForLaunch(configuration, mode, monitor);
+ return superBuildForLaunch(configuration, mode, monitor);
}
@Override
@@ -123,12 +135,10 @@ public class QtLocalRunLaunchConfigDelegate extends LaunchConfigurationDelegate
}
private QtBuildConfiguration getQtBuildConfiguration(ILaunchConfiguration configuration, String mode,
- IProgressMonitor monitor) throws CoreException {
+ ILaunchTarget target, IProgressMonitor monitor) throws CoreException {
// Find the Qt build config
IProject project = configuration.getMappedResources()[0].getProject();
- String os = Platform.getOS();
- String arch = Platform.getOSArch();
- return QtBuildConfiguration.getConfig(project, os, arch, mode, monitor);
+ return QtBuildConfigurationFactory.getConfig(project, mode, target, monitor);
}
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/AbstractQtPDOMClass.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/AbstractQtPDOMClass.java
index bd521d8129..1a87ec8ab9 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/AbstractQtPDOMClass.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/AbstractQtPDOMClass.java
@@ -20,7 +20,7 @@ import org.eclipse.cdt.internal.core.pdom.dom.IPDOMBinding;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.core.runtime.CoreException;
/**
@@ -106,7 +106,7 @@ public abstract class AbstractQtPDOMClass extends QtPDOMBinding {
try {
children.accept(collector);
} catch(CoreException e) {
- QtPlugin.log(e);
+ Activator.log(e);
return Collections.emptyList();
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/PDOMQtLinkageFactory.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/PDOMQtLinkageFactory.java
index fe87b9f43e..acd33b6377 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/PDOMQtLinkageFactory.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/PDOMQtLinkageFactory.java
@@ -10,7 +10,7 @@ package org.eclipse.cdt.internal.qt.core.pdom;
import org.eclipse.cdt.internal.core.pdom.PDOM;
import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.core.runtime.CoreException;
@SuppressWarnings("restriction")
@@ -21,7 +21,7 @@ public class PDOMQtLinkageFactory implements IPDOMLinkageFactory {
try {
return new QtPDOMLinkage(pdom, record);
} catch(CoreException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
return null;
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/QtPDOMLinkage.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/QtPDOMLinkage.java
index 285e6a081b..2c4af25b73 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/QtPDOMLinkage.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/QtPDOMLinkage.java
@@ -31,7 +31,7 @@ import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMName;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPGlobalScope;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.core.runtime.CoreException;
@SuppressWarnings("restriction")
@@ -279,21 +279,21 @@ public class QtPDOMLinkage extends PDOMLinkage {
@Override
public PDOMBinding addTypeBinding(IBinding binding) throws CoreException {
- throw new CoreException(QtPlugin.error("Qt Linkage does not manage types")); //$NON-NLS-1$
+ throw new CoreException(Activator.error("Qt Linkage does not manage types")); //$NON-NLS-1$
}
@Override
public IType unmarshalType(ITypeMarshalBuffer buffer) throws CoreException {
- throw new CoreException(QtPlugin.error("Qt Linkage does not marshal types")); //$NON-NLS-1$
+ throw new CoreException(Activator.error("Qt Linkage does not marshal types")); //$NON-NLS-1$
}
@Override
public IBinding unmarshalBinding(ITypeMarshalBuffer buffer) throws CoreException {
- throw new CoreException(QtPlugin.error("Qt Linkage does not marshal bindings")); //$NON-NLS-1$
+ throw new CoreException(Activator.error("Qt Linkage does not marshal bindings")); //$NON-NLS-1$
}
@Override
public ISerializableEvaluation unmarshalEvaluation(ITypeMarshalBuffer typeMarshalBuffer) throws CoreException {
- throw new CoreException(QtPlugin.error("Qt Linkage does not marshal evaluations")); //$NON-NLS-1$
+ throw new CoreException(Activator.error("Qt Linkage does not marshal evaluations")); //$NON-NLS-1$
}
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/QtPDOMProperty.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/QtPDOMProperty.java
index 8fc268c94c..46bf4bf9b8 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/QtPDOMProperty.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/internal/qt/core/pdom/QtPDOMProperty.java
@@ -10,7 +10,7 @@ package org.eclipse.cdt.internal.qt.core.pdom;
import org.eclipse.cdt.internal.core.pdom.db.Database;
import org.eclipse.cdt.internal.core.pdom.db.IString;
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.cdt.internal.qt.core.index.IQProperty;
import org.eclipse.core.runtime.CoreException;
@@ -145,7 +145,7 @@ public class QtPDOMProperty extends QtPDOMBinding {
long cppRec = linkage.getDB().getRecPtr(record + 1 + Database.PTR_SIZE);
if (attrId < 0 || attrId >= IQProperty.Attribute.values().length)
- throw QtPlugin.coreException("invalid QProperty attribute id read from datbase, was " + attrId);
+ throw Activator.coreException("invalid QProperty attribute id read from datbase, was " + attrId);
IQProperty.Attribute attr = IQProperty.Attribute.values()[attrId];
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 810b1e493c..8b422f92b7 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
@@ -12,11 +12,14 @@ import java.util.Map;
import org.eclipse.cdt.core.CCProjectNature;
import org.eclipse.cdt.core.CProjectNature;
+import org.eclipse.cdt.core.model.CoreModel;
+import org.eclipse.cdt.core.model.IPathEntry;
import org.eclipse.cdt.internal.qt.core.QtNature;
import org.eclipse.cdt.internal.qt.core.QtTemplateGenerator;
import org.eclipse.cdt.internal.qt.core.build.QtBuilder;
import org.eclipse.core.resources.ICommand;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IncrementalProjectBuilder;
@@ -32,7 +35,26 @@ public class QtProjectGenerator {
}
public void generate(IProgressMonitor monitor) throws CoreException {
- // Add natures to project: C, C++, Arduino
+ // Generate the files
+ IFolder sourceFolder = project.getFolder("src"); //$NON-NLS-1$
+ if (!sourceFolder.exists()) {
+ sourceFolder.create(true, true, monitor);
+ }
+
+ QtTemplateGenerator templateGen = new QtTemplateGenerator();
+ Map<String, Object> fmModel = new HashMap<>();
+ fmModel.put("projectName", project.getName()); //$NON-NLS-1$
+
+ IFile sourceFile = sourceFolder.getFile("main.cpp"); //$NON-NLS-1$
+ templateGen.generateFile(fmModel, "project2/appProject/main.cpp", sourceFile, monitor); //$NON-NLS-1$
+ sourceFile = project.getFile("main.qml"); //$NON-NLS-1$
+ templateGen.generateFile(fmModel, "project2/appProject/main.qml", sourceFile, monitor); //$NON-NLS-1$
+ sourceFile = project.getFile("main.qrc"); //$NON-NLS-1$
+ templateGen.generateFile(fmModel, "project2/appProject/main.qrc", sourceFile, monitor); //$NON-NLS-1$
+ sourceFile = project.getFile("main.pro"); //$NON-NLS-1$
+ templateGen.generateFile(fmModel, "project2/appProject/main.pro", sourceFile, monitor); //$NON-NLS-1$
+
+ // Set up the project
IProjectDescription projDesc = project.getDescription();
String[] oldIds = projDesc.getNatureIds();
String[] newIds = new String[oldIds.length + 3];
@@ -42,7 +64,6 @@ public class QtProjectGenerator {
newIds[newIds.length - 1] = QtNature.ID;
projDesc.setNatureIds(newIds);
- // Add Arduino Builder
ICommand command = projDesc.newCommand();
command.setBuilderName(QtBuilder.ID);
command.setBuilding(IncrementalProjectBuilder.AUTO_BUILD, false);
@@ -50,19 +71,8 @@ public class QtProjectGenerator {
project.setDescription(projDesc, monitor);
- // Generate the project
- QtTemplateGenerator templateGen = new QtTemplateGenerator();
- Map<String, Object> fmModel = new HashMap<>();
- fmModel.put("projectName", project.getName()); //$NON-NLS-1$
-
- IFile sourceFile = project.getFile("main.cpp"); //$NON-NLS-1$
- templateGen.generateFile(fmModel, "project2/appProject/main.cpp", sourceFile, monitor); //$NON-NLS-1$
- sourceFile = project.getFile("main.qml"); //$NON-NLS-1$
- templateGen.generateFile(fmModel, "project2/appProject/main.qml", sourceFile, monitor); //$NON-NLS-1$
- sourceFile = project.getFile("main.qrc"); //$NON-NLS-1$
- templateGen.generateFile(fmModel, "project2/appProject/main.qrc", sourceFile, monitor); //$NON-NLS-1$
- sourceFile = project.getFile("main.pro"); //$NON-NLS-1$
- templateGen.generateFile(fmModel, "project2/appProject/main.pro", sourceFile, monitor); //$NON-NLS-1$
+ IPathEntry[] entries = new IPathEntry[] { CoreModel.newOutputEntry(sourceFolder.getFullPath()) };
+ CoreModel.getDefault().create(project).setRawPathEntries(entries, monitor);
}
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtInstall.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtInstall.java
index 93cd5fdb58..4c063b1442 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtInstall.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtInstall.java
@@ -23,8 +23,6 @@ public interface IQtInstall {
String getSpec();
- boolean supports(String os, String arch);
-
Path getLibPath();
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtInstallManager.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtInstallManager.java
index 21d843507f..424c5cfd47 100644
--- a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtInstallManager.java
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtInstallManager.java
@@ -9,6 +9,9 @@ package org.eclipse.cdt.qt.core;
import java.util.Collection;
+import org.eclipse.cdt.build.core.IToolChain;
+import org.eclipse.launchbar.core.target.ILaunchTarget;
+
/**
* The manager for Qt installs.
*
@@ -24,4 +27,8 @@ public interface IQtInstallManager {
public void removeInstall(IQtInstall install);
+ public boolean supports(IQtInstall install, ILaunchTarget target);
+
+ public boolean supports(IQtInstall install, IToolChain toolChain);
+
}
diff --git a/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtInstallTargetMapper.java b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtInstallTargetMapper.java
new file mode 100644
index 0000000000..9e61e12b25
--- /dev/null
+++ b/qt/org.eclipse.cdt.qt.core/src/org/eclipse/cdt/qt/core/IQtInstallTargetMapper.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2015 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.qt.core;
+
+import org.eclipse.cdt.build.core.IToolChain;
+import org.eclipse.launchbar.core.target.ILaunchTarget;
+
+public interface IQtInstallTargetMapper {
+
+ /**
+ * Does the Qt install support the given target.
+ *
+ * @param qtInstall
+ * Qt install
+ * @param launchTarget
+ * launch target
+ * @return does the Qt install support the target
+ */
+ public boolean supported(IQtInstall qtInstall, ILaunchTarget launchTarget);
+
+ /**
+ * Does the Qt install build using the given toolchain?
+ *
+ * @param qtInstall
+ * Qt install
+ * @param toolChain
+ * ToolChain
+ * @return does the Qt install build with the toolchain
+ */
+ public boolean supported(IQtInstall qtInstall, IToolChain toolChain);
+
+}
diff --git a/qt/org.eclipse.cdt.qt.core/templates/project2/appProject/main.pro b/qt/org.eclipse.cdt.qt.core/templates/project2/appProject/main.pro
index 9ec8d9075b..3f13cc635b 100644
--- a/qt/org.eclipse.cdt.qt.core/templates/project2/appProject/main.pro
+++ b/qt/org.eclipse.cdt.qt.core/templates/project2/appProject/main.pro
@@ -1,8 +1,6 @@
-TEMPLATE = app
+\TEMPLATE = app
QT += qml quick
CONFIG += c++11
-SOURCES += main.cpp
-
RESOURCES += main.qrc
diff --git a/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/NewQtProjectWizard.java b/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/NewQtProjectWizard.java
index 0f153537bf..5dfb6dfc16 100644
--- a/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/NewQtProjectWizard.java
+++ b/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/NewQtProjectWizard.java
@@ -7,12 +7,14 @@
*******************************************************************************/
package org.eclipse.cdt.internal.qt.ui;
+import java.lang.reflect.InvocationTargetException;
+
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.cdt.internal.qt.core.project.QtProjectGenerator;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation;
import org.eclipse.ui.wizards.newresource.BasicNewProjectResourceWizard;
public class NewQtProjectWizard extends BasicNewProjectResourceWizard {
@@ -23,19 +25,25 @@ public class NewQtProjectWizard extends BasicNewProjectResourceWizard {
return false;
}
- new Job("Creating Qt Project") {
+ IRunnableWithProgress op = new WorkspaceModifyDelegatingOperation(new IRunnableWithProgress() {
@Override
- protected IStatus run(IProgressMonitor monitor) {
+ public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
try {
+ monitor.beginTask("Generating project", 1);
QtProjectGenerator generator = new QtProjectGenerator(getNewProject());
generator.generate(monitor);
+ monitor.done();
} catch (CoreException e) {
- return e.getStatus();
+ Activator.log(e);
}
- return Status.OK_STATUS;
}
- }.schedule();
+ });
+ try {
+ getContainer().run(false, true, op);
+ } catch (InvocationTargetException | InterruptedException e) {
+ return false;
+ }
return true;
}
diff --git a/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/preferences/QtPreferencePage.java b/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/preferences/QtPreferencePage.java
index 2b84f7bfb7..27d3e49b51 100644
--- a/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/preferences/QtPreferencePage.java
+++ b/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/preferences/QtPreferencePage.java
@@ -113,8 +113,7 @@ public class QtPreferencePage extends PreferencePage implements IWorkbenchPrefer
removeButton.setText(Messages.QtPreferencePage_4);
removeButton.setEnabled(false);
removeButton.addListener(SWT.Selection, e -> {
- if (MessageDialog.openConfirm(getShell(), Messages.QtPreferencePage_5,
- Messages.QtPreferencePage_6)) {
+ if (MessageDialog.openConfirm(getShell(), Messages.QtPreferencePage_5, Messages.QtPreferencePage_6)) {
for (TableItem item : installTable.getSelection()) {
IQtInstall install = (IQtInstall) item.getData();
installsToRemove.put(install.getName(), install);
@@ -149,7 +148,7 @@ public class QtPreferencePage extends PreferencePage implements IWorkbenchPrefer
List<IQtInstall> sorted = new ArrayList<>(getInstalls().values());
Collections.sort(sorted, (o1, o2) -> o1.getName().compareToIgnoreCase(o2.getName()));
- installTable.clearAll();
+ installTable.removeAll();
for (IQtInstall install : sorted) {
TableItem item = new TableItem(installTable, SWT.NONE);
item.setText(0, install.getName());
diff --git a/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/pro/parser/QtProjectFileModifier.java b/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/pro/parser/QtProjectFileModifier.java
index d09a646e31..dc72f33140 100644
--- a/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/pro/parser/QtProjectFileModifier.java
+++ b/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/pro/parser/QtProjectFileModifier.java
@@ -10,7 +10,7 @@
*******************************************************************************/
package org.eclipse.cdt.internal.qt.ui.pro.parser;
-import org.eclipse.cdt.internal.qt.core.QtPlugin;
+import org.eclipse.cdt.internal.qt.core.Activator;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
@@ -151,7 +151,7 @@ public class QtProjectFileModifier {
document.replace(offset, length, newValue);
return true;
} catch (BadLocationException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
return false;
}
@@ -182,7 +182,7 @@ public class QtProjectFileModifier {
try {
document.replace(offset, 0, "\n" + indent + value); //$NON-NLS-1$
} catch (BadLocationException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
try {
@@ -191,7 +191,7 @@ public class QtProjectFileModifier {
document.replace(offset, 0, lineEscape);
} catch (BadLocationException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
}
} else {
@@ -203,19 +203,19 @@ public class QtProjectFileModifier {
try {
document.replace(0, document.getLength(), baseVariable);
} catch (BadLocationException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
} else if (document.get().endsWith("\n")) { //$NON-NLS-1$
try {
document.replace(document.getLength(), 0, "\n" + baseVariable); //$NON-NLS-1$
} catch (BadLocationException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
} else {
try {
document.replace(document.getLength(), 0, "\n\n" + baseVariable); //$NON-NLS-1$
} catch (BadLocationException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
}
}
@@ -243,7 +243,7 @@ public class QtProjectFileModifier {
try {
document.replace(offset, end - offset, ""); //$NON-NLS-1$
} catch (BadLocationException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
} else if (line >= 0) {
int offset = var.getLineOffset(line);
@@ -257,7 +257,7 @@ public class QtProjectFileModifier {
try {
document.replace(offset, length, ""); //$NON-NLS-1$
} catch (BadLocationException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
// Remove the previous line's line escape character if necessary
@@ -268,7 +268,7 @@ public class QtProjectFileModifier {
document.replace(offset, length, ""); //$NON-NLS-1$
} catch (BadLocationException e) {
- QtPlugin.log(e);
+ Activator.log(e);
}
}
}
diff --git a/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/resources/QtResourceChangeListener.java b/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/resources/QtResourceChangeListener.java
index bfd679202c..5dc5370b6e 100644
--- a/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/resources/QtResourceChangeListener.java
+++ b/qt/org.eclipse.cdt.qt.ui/src/org/eclipse/cdt/internal/qt/ui/resources/QtResourceChangeListener.java
@@ -24,8 +24,9 @@ import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.runtime.CoreException;
/**
- * Detects the addition or removal of a file to a Qt project. If one of these resource changes is found, it triggers an update of
- * the project's *.pro file to reflect the change.
+ * Detects the addition or removal of a file to a Qt project. If one of these
+ * resource changes is found, it triggers an update of the project's *.pro file
+ * to reflect the change.
*/
public class QtResourceChangeListener implements IResourceChangeListener {
@@ -50,7 +51,7 @@ public class QtResourceChangeListener implements IResourceChangeListener {
// Only traverse children of Qt Projects
try {
IProject project = (IProject) resource;
- if (project.hasNature(QtNature.ID)) {
+ if (project.exists() && project.hasNature(QtNature.ID)) {
return true;
}
} catch (CoreException e) {
@@ -65,7 +66,8 @@ public class QtResourceChangeListener implements IResourceChangeListener {
}
}
- // Then check to make sure that the folder lies in a Qt Project
+ // Then check to make sure that the folder lies in a Qt
+ // Project
try {
IProject project = resource.getProject();
if (project != null && project.hasNature(QtNature.ID)) {
@@ -84,12 +86,15 @@ public class QtResourceChangeListener implements IResourceChangeListener {
if ("cpp".equals(resource.getFileExtension()) //$NON-NLS-1$
|| "h".equals(resource.getFileExtension())) { //$NON-NLS-1$
- // If we make it to this point, then we have a .cpp or .h file that's been added to or removed from a Qt
- // Project. Add it to the list of deltas so we can update the project file later.
+ // If we make it to this point, then we have a .cpp or .h
+ // file that's been added to or removed from a Qt
+ // Project. Add it to the list of deltas so we can update
+ // the project file later.
deltaList.add(delta);
}
- // Doesn't really matter since this line can only be reached if we're dealing with a file that shouldn't have
+ // Doesn't really matter since this line can only be reached if
+ // we're dealing with a file that shouldn't have
// children anyway
return false;
}
diff --git a/releng/org.eclipse.cdt.platform-feature/feature.xml b/releng/org.eclipse.cdt.platform-feature/feature.xml
index aae72abe71..440291a914 100644
--- a/releng/org.eclipse.cdt.platform-feature/feature.xml
+++ b/releng/org.eclipse.cdt.platform-feature/feature.xml
@@ -156,4 +156,18 @@
version="0.0.0"
unpack="false"/>
+ <plugin
+ id="org.eclipse.cdt.build.core"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.cdt.build.ui"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
</feature>
diff --git a/releng/org.eclipse.cdt.platform.source-feature/feature.xml b/releng/org.eclipse.cdt.platform.source-feature/feature.xml
index f2a97c6c9e..885cea1d71 100644
--- a/releng/org.eclipse.cdt.platform.source-feature/feature.xml
+++ b/releng/org.eclipse.cdt.platform.source-feature/feature.xml
@@ -135,4 +135,18 @@
version="0.0.0"
unpack="false"/>
+ <plugin
+ id="org.eclipse.cdt.build.core.source"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.cdt.build.ui.source"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
</feature>
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF b/toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF
index 454e80cf25..49a4ec7fab 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF
@@ -14,7 +14,9 @@ Require-Bundle: org.eclipse.core.runtime,
org.eclipse.cdt.native.serial;bundle-version="1.0.0",
org.eclipse.remote.serial.core;bundle-version="1.0.0",
com.google.gson;bundle-version="2.2.4",
- org.apache.commons.compress;bundle-version="1.6.0"
+ org.apache.commons.compress;bundle-version="1.6.0",
+ org.eclipse.cdt.build.core;bundle-version="1.0.0",
+ org.eclipse.cdt.build.gcc.core;bundle-version="1.0.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Bundle-ClassPath: libs/freemarker-2.3.22.jar,
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/plugin.xml b/toolchains/arduino/org.eclipse.cdt.arduino.core/plugin.xml
index 198bb473d4..989488795e 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/plugin.xml
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/plugin.xml
@@ -116,13 +116,6 @@
</factory>
</extension>
<extension
- point="org.eclipse.cdt.core.ToolChainFactory">
- <factory
- class="org.eclipse.cdt.arduino.core.internal.build.ArduinoGCCToolChain$ArduinoFactory"
- family="Arduino GCC">
- </factory>
- </extension>
- <extension
point="org.eclipse.launchbar.core.launchTargetTypes">
<launchTargetType
id="org.eclipse.cdt.arduino.core.connectionType"
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoProjectGenerator.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoProjectGenerator.java
index ccf734665c..9b12dbb1de 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoProjectGenerator.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoProjectGenerator.java
@@ -13,15 +13,11 @@ package org.eclipse.cdt.arduino.core.internal;
import java.util.HashMap;
import java.util.Map;
-import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoard;
-import org.eclipse.cdt.arduino.core.internal.board.ArduinoManager;
-import org.eclipse.cdt.arduino.core.internal.build.ArduinoBuildConfiguration;
import org.eclipse.cdt.arduino.core.internal.build.ArduinoBuilder;
import org.eclipse.cdt.core.CCProjectNature;
import org.eclipse.cdt.core.CProjectNature;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.IPathEntry;
-import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.ICommand;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
@@ -57,16 +53,8 @@ public class ArduinoProjectGenerator {
command.setBuilding(IncrementalProjectBuilder.AUTO_BUILD, false);
projDesc.setBuildSpec(new ICommand[] { command });
- // Create the default config - uno
- projDesc.setBuildConfigs(new String[] { "uno" }); //$NON-NLS-1$
-
project.setDescription(projDesc, monitor);
- IBuildConfiguration config = project.getBuildConfig("uno"); //$NON-NLS-1$
- ArduinoBuildConfiguration arduinoConfig = config.getAdapter(ArduinoBuildConfiguration.class);
- ArduinoBoard board = ArduinoManager.instance.getBoard("Arduino Uno", "Arduino AVR Boards", "arduino"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- arduinoConfig.setBoard(board);
-
// Generate files
ArduinoTemplateGenerator templateGen = new ArduinoTemplateGenerator();
Map<String, Object> fmModel = new HashMap<>();
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoScannerInfoProvider.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoScannerInfoProvider.java
index 648a20c77d..c5db121cbb 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoScannerInfoProvider.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/ArduinoScannerInfoProvider.java
@@ -7,6 +7,8 @@
*******************************************************************************/
package org.eclipse.cdt.arduino.core.internal;
+import java.io.IOException;
+
import org.eclipse.cdt.arduino.core.internal.build.ArduinoBuildConfiguration;
import org.eclipse.cdt.core.parser.IScannerInfo;
import org.eclipse.cdt.core.parser.IScannerInfoChangeListener;
@@ -28,7 +30,7 @@ public class ArduinoScannerInfoProvider implements IScannerInfoProvider {
IBuildConfiguration config = project.getActiveBuildConfig();
ArduinoBuildConfiguration arduinoConfig = config.getAdapter(ArduinoBuildConfiguration.class);
return arduinoConfig.getScannerInfo(resource);
- } catch (CoreException e) {
+ } catch (IOException | CoreException e) {
Activator.log(e);
return null;
}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfiguration.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfiguration.java
index 7a2a1eb861..7f1dc360eb 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfiguration.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuildConfiguration.java
@@ -9,6 +9,7 @@ package org.eclipse.cdt.arduino.core.internal.build;
import java.io.File;
import java.io.FilenameFilter;
+import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
@@ -31,10 +32,10 @@ import org.eclipse.cdt.arduino.core.internal.board.ArduinoPackage;
import org.eclipse.cdt.arduino.core.internal.board.ArduinoPlatform;
import org.eclipse.cdt.arduino.core.internal.board.ArduinoTool;
import org.eclipse.cdt.arduino.core.internal.board.ToolDependency;
+import org.eclipse.cdt.build.core.CBuildConfiguration;
+import org.eclipse.cdt.build.core.IToolChain;
+import org.eclipse.cdt.build.core.IToolChainManager;
import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.build.CBuildConfiguration;
-import org.eclipse.cdt.core.build.CToolChain;
-import org.eclipse.cdt.core.build.CToolChainManager;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.IOutputEntry;
@@ -55,8 +56,8 @@ 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.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
public class ArduinoBuildConfiguration extends CBuildConfiguration {
@@ -138,7 +139,7 @@ public class ArduinoBuildConfiguration extends CBuildConfiguration {
ArduinoPlatform platform = board.getPlatform();
ArduinoPackage pkg = platform.getPackage();
- IEclipsePreferences settings = getSettings();
+ Preferences settings = getSettings();
settings.put(PACKAGE_NAME, pkg.getName());
settings.put(PLATFORM_NAME, platform.getName());
settings.put(BOARD_NAME, board.getName());
@@ -151,7 +152,7 @@ public class ArduinoBuildConfiguration extends CBuildConfiguration {
public ArduinoBoard getBoard() throws CoreException {
if (board == null) {
- IEclipsePreferences settings = getSettings();
+ Preferences settings = getSettings();
String packageName = settings.get(PACKAGE_NAME, ""); //$NON-NLS-1$
String platformName = settings.get(PLATFORM_NAME, ""); //$NON-NLS-1$
String boardName = settings.get(BOARD_NAME, ""); //$NON-NLS-1$
@@ -424,48 +425,39 @@ public class ArduinoBuildConfiguration extends CBuildConfiguration {
String command = resolveProperty("tools." + toolName + ".upload.pattern", properties); //$NON-NLS-1$ //$NON-NLS-2$
if (isWindows) {
- return CToolChain.splitCommand(command);
+ return command.split(" "); //$NON-NLS-1$
} else {
return new String[] { "sh", "-c", command }; //$NON-NLS-1$ //$NON-NLS-2$
}
}
- @Override
- public CToolChain getToolChain() throws CoreException {
- CToolChain toolChain = super.getToolChain();
- if (toolChain == null) {
- // figure out which one it is
- ArduinoPlatform platform = board.getPlatform();
- String compilerPath = resolveProperty("compiler.path", platform.getPlatformProperties()); //$NON-NLS-1$
- if (compilerPath != null) {
- // TODO what if it is null?
- Path path = Paths.get(compilerPath);
- for (ToolDependency toolDep : platform.getToolsDependencies()) {
- ArduinoTool tool = toolDep.getTool();
- if (path.startsWith(tool.getInstallPath())) {
- // this is it, find the matching
- for (CToolChain tc : CToolChainManager.instance.getToolChains()) {
- if (tc instanceof ArduinoGCCToolChain) {
- if (((ArduinoGCCToolChain) tc).getTool().equals(tool)) {
- setToolChain(tc);
- toolChain = tc;
- break;
- }
- }
+ public IToolChain getToolChainx() {
+ try {
+ IToolChain toolChain = super.getToolChain();
+ if (toolChain == null) {
+ // figure out which one it is
+ IToolChainManager toolChainManager = Activator.getService(IToolChainManager.class);
+ ArduinoPlatform platform = board.getPlatform();
+ String compilerPath = resolveProperty("compiler.path", platform.getPlatformProperties()); //$NON-NLS-1$
+ if (compilerPath != null) {
+ // TODO what if it is null?
+ Path path = Paths.get(compilerPath);
+ for (ToolDependency toolDep : platform.getToolsDependencies()) {
+ ArduinoTool tool = toolDep.getTool();
+ if (path.startsWith(tool.getInstallPath())) {
}
- // not found, create
- toolChain = new ArduinoGCCToolChain(tool);
- CToolChainManager.instance.addToolChain(toolChain);
- setToolChain(toolChain);
- break;
}
}
}
+ return toolChain;
+ } catch (CoreException e) {
+ Activator.log(e);
+ return null;
}
- return toolChain;
}
- public IScannerInfo getScannerInfo(IResource resource) throws CoreException {
+ @Override
+ public IScannerInfo getScannerInfo(IResource resource) throws IOException {
IScannerInfo info = super.getScannerInfo(resource);
if (info == null) {
// what language is this resource and pick the right recipe
@@ -479,29 +471,34 @@ public class ArduinoBuildConfiguration extends CBuildConfiguration {
recipe = "recipe.c.o.pattern"; //$NON-NLS-1$
}
- ArduinoPlatform platform = getBoard().getPlatform();
- Properties properties = new Properties();
- properties.putAll(getProperties());
+ try {
+ ArduinoPlatform platform = getBoard().getPlatform();
+ Properties properties = new Properties();
+ properties.putAll(getProperties());
- Path resourcePath = new File(resource.getLocationURI()).toPath();
- Path sourcePath = getBuildDirectory().toPath().relativize(resourcePath);
- properties.put("source_file", pathString(sourcePath)); //$NON-NLS-1$
- properties.put("object_file", "-"); //$NON-NLS-1$ //$NON-NLS-2$
+ Path resourcePath = new File(resource.getLocationURI()).toPath();
+ Path sourcePath = getBuildDirectory().toPath().relativize(resourcePath);
+ properties.put("source_file", pathString(sourcePath)); //$NON-NLS-1$
+ properties.put("object_file", "-"); //$NON-NLS-1$ //$NON-NLS-2$
- String includes = ""; //$NON-NLS-1$
- for (Path include : platform.getIncludePath()) {
- includes += " -I\"" + pathString(include) + '"'; //$NON-NLS-1$
- }
- Collection<ArduinoLibrary> libs = ArduinoManager.instance.getLibraries(getProject());
- for (ArduinoLibrary lib : libs) {
- for (Path path : lib.getIncludePath()) {
- includes += " -I\"" + pathString(path) + '"'; //$NON-NLS-1$
+ String includes = ""; //$NON-NLS-1$
+ for (Path include : platform.getIncludePath()) {
+ includes += " -I\"" + pathString(include) + '"'; //$NON-NLS-1$
}
- }
- properties.put("includes", includes); //$NON-NLS-1$
+ Collection<ArduinoLibrary> libs = ArduinoManager.instance.getLibraries(getProject());
+ for (ArduinoLibrary lib : libs) {
+ for (Path path : lib.getIncludePath()) {
+ includes += " -I\"" + pathString(path) + '"'; //$NON-NLS-1$
+ }
+ }
+ properties.put("includes", includes); //$NON-NLS-1$
- List<String> cmd = Arrays.asList(resolveProperty(recipe, properties).split(" ")); //$NON-NLS-1$
- info = getToolChain().getScannerInfo(getBuildFolder(), cmd);
+ List<String> cmd = Arrays.asList(resolveProperty(recipe, properties).split(" ")); //$NON-NLS-1$
+ // TODO for reals
+ info = getToolChain().getScannerInfo(cmd.get(0), cmd.subList(1, cmd.size()), null, resource, null);
+ } catch (CoreException e) {
+ throw new IOException(e);
+ }
}
return info;
}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuilder.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuilder.java
index 0275c0c4a2..a3a907ed17 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuilder.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoBuilder.java
@@ -15,7 +15,8 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.cdt.arduino.core.internal.Activator;
-import org.eclipse.cdt.core.build.IConsoleService;
+import org.eclipse.cdt.build.core.CConsoleParser;
+import org.eclipse.cdt.build.core.IConsoleService;
import org.eclipse.cdt.core.model.ICModelMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
@@ -50,7 +51,8 @@ public class ArduinoBuilder extends IncrementalProjectBuilder {
config.setEnvironment(processBuilder.environment());
Process process = processBuilder.start();
- consoleService.monitor(process, config.getConsoleParsers(), config.getBuildFolder());
+ consoleService.monitor(process, config.getConsoleParsers().toArray(new CConsoleParser[0]),
+ config.getBuildDirectory().toPath());
if (process.exitValue() == 0) {
showSizes(config, consoleService);
@@ -82,7 +84,8 @@ public class ArduinoBuilder extends IncrementalProjectBuilder {
config.setEnvironment(processBuilder.environment());
Process process = processBuilder.start();
- consoleService.monitor(process, config.getConsoleParsers(), config.getBuildFolder());
+ consoleService.monitor(process, config.getConsoleParsers().toArray(new CConsoleParser[0]),
+ config.getBuildDirectory().toPath());
config.getBuildFolder().refreshLocal(IResource.DEPTH_INFINITE, monitor);
consoleService.writeOutput("\n"); //$NON-NLS-1$
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoGCCToolChain.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoGCCToolChain.java
deleted file mode 100644
index 7670e10083..0000000000
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/build/ArduinoGCCToolChain.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 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.arduino.core.internal.build;
-
-import org.eclipse.cdt.arduino.core.internal.board.ArduinoManager;
-import org.eclipse.cdt.arduino.core.internal.board.ArduinoPackage;
-import org.eclipse.cdt.arduino.core.internal.board.ArduinoTool;
-import org.eclipse.cdt.core.build.CToolChain;
-import org.eclipse.cdt.core.build.IToolChainFactory;
-import org.eclipse.cdt.core.build.gcc.GCCToolChain;
-import org.osgi.service.prefs.Preferences;
-
-public class ArduinoGCCToolChain extends GCCToolChain {
-
- private static final String PACKAGE = "arduinoPackage"; //$NON-NLS-1$
- private static final String TOOL = "arduinoTool"; //$NON-NLS-1$
-
- private final ArduinoTool tool;
-
- public ArduinoGCCToolChain(String id, Preferences settings) {
- super(id, settings);
- ArduinoPackage pkg = ArduinoManager.instance.getPackage(settings.get(PACKAGE, "")); //$NON-NLS-1$
- if (pkg != null) {
- this.tool = pkg.getLatestTool(settings.get(TOOL, "")); //$NON-NLS-1$
- } else {
- // TODO where did it go?
- this.tool = null;
- }
- }
-
- public ArduinoGCCToolChain(ArduinoTool tool) {
- super(tool.getName());
- this.tool = tool;
- }
-
- public static class ArduinoFactory implements IToolChainFactory {
- @Override
- public CToolChain createToolChain(String id, Preferences settings) {
- return new ArduinoGCCToolChain(id, settings);
- }
- }
-
- @Override
- public String getFamily() {
- return "Arduino GCC"; //$NON-NLS-1$
- }
-
- public ArduinoTool getTool() {
- return tool;
- }
-
- @Override
- public void save(Preferences settings) {
- super.save(settings);
- settings.put(TOOL, tool.getName());
- settings.put(PACKAGE, tool.getPackage().getName());
- }
-
-}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunchConfigurationDelegate.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunchConfigurationDelegate.java
index e6dc733cd0..10df23e55a 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunchConfigurationDelegate.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunchConfigurationDelegate.java
@@ -17,7 +17,7 @@ import org.eclipse.cdt.arduino.core.internal.Messages;
import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoard;
import org.eclipse.cdt.arduino.core.internal.build.ArduinoBuildConfiguration;
import org.eclipse.cdt.arduino.core.internal.remote.ArduinoRemoteConnection;
-import org.eclipse.cdt.core.build.IConsoleService;
+import org.eclipse.cdt.build.core.IConsoleService;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;

Back to the top