diff --git a/build/org.eclipse.cdt.meson.ui.editor/.classpath b/build/org.eclipse.cdt.meson.ui.editor/.classpath
index eca7bdba8f0..075009d7745 100644
--- a/build/org.eclipse.cdt.meson.ui.editor/.classpath
+++ b/build/org.eclipse.cdt.meson.ui.editor/.classpath
@@ -2,6 +2,5 @@
-
diff --git a/core/org.eclipse.cdt.core/.settings/.api_filters b/core/org.eclipse.cdt.core/.settings/.api_filters
index 23a1d1aab40..98ebe057151 100644
--- a/core/org.eclipse.cdt.core/.settings/.api_filters
+++ b/core/org.eclipse.cdt.core/.settings/.api_filters
@@ -1,71 +1,71 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core/org.eclipse.cdt.core/plugin.properties b/core/org.eclipse.cdt.core/plugin.properties
index 4f50e819b40..cfc68c22f90 100755
--- a/core/org.eclipse.cdt.core/plugin.properties
+++ b/core/org.eclipse.cdt.core/plugin.properties
@@ -95,6 +95,7 @@ binaryFileName=Binary File
cdt_pathentry_var.description=CDT PathEntry variable
config_name_var.description=The name of the active configuration for the project specified as an argument
config_description_var.description=The description of the active configuration for the project specified as an argument
+core_build_dir.description=The build directory for the active Core Build configuration for the given project
PDOMProviderName=PDOM Provider
diff --git a/core/org.eclipse.cdt.core/plugin.xml b/core/org.eclipse.cdt.core/plugin.xml
index 297d15424d6..a2c915f60c8 100644
--- a/core/org.eclipse.cdt.core/plugin.xml
+++ b/core/org.eclipse.cdt.core/plugin.xml
@@ -608,6 +608,12 @@
resolver="org.eclipse.cdt.internal.core.PathEntryVariableResolver"
description="%cdt_pathentry_var.description">
+
+
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
index c78536658ee..bc2e24cd2e7 100644
--- 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
@@ -236,6 +236,7 @@ public abstract class CBuildConfiguration extends PlatformObject
return buildFolder;
}
+ @Override
public URI getBuildDirectoryURI() throws CoreException {
return getBuildContainer().getLocationURI();
}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfiguration2.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfiguration2.java
index 9471777548d..763e0d88a22 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfiguration2.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/build/ICBuildConfiguration2.java
@@ -10,6 +10,10 @@
*******************************************************************************/
package org.eclipse.cdt.core.build;
+import java.net.URI;
+
+import org.eclipse.core.runtime.CoreException;
+
/**
* @since 6.5
*/
@@ -20,4 +24,9 @@ public interface ICBuildConfiguration2 {
*/
void setActive();
+ /**
+ * The URI for the directory in which the build is executed.
+ */
+ URI getBuildDirectoryURI() throws CoreException;
+
}
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/CBuildDirectoryResolver.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/CBuildDirectoryResolver.java
new file mode 100644
index 00000000000..7c5d3cf8c22
--- /dev/null
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/build/CBuildDirectoryResolver.java
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2018 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.core.build;
+
+import java.io.File;
+import java.net.URI;
+
+import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.build.ICBuildConfiguration;
+import org.eclipse.cdt.core.build.ICBuildConfiguration2;
+import org.eclipse.cdt.core.build.ICBuildConfigurationManager;
+import org.eclipse.core.resources.IBuildConfiguration;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.variables.IDynamicVariable;
+import org.eclipse.core.variables.IDynamicVariableResolver;
+
+public class CBuildDirectoryResolver implements IDynamicVariableResolver {
+
+ @Override
+ public String resolveValue(IDynamicVariable variable, String argument) throws CoreException {
+ if (argument == null || argument.isEmpty()) {
+ return null;
+ }
+
+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(argument);
+ if (project == null || !project.exists()) {
+ return null;
+ }
+
+ IBuildConfiguration config = project.getActiveBuildConfig();
+
+ ICBuildConfigurationManager manager = CCorePlugin.getService(ICBuildConfigurationManager.class);
+ ICBuildConfiguration coreConfig = manager.getBuildConfiguration(config);
+ if (coreConfig == null) {
+ return null;
+ }
+
+ if (coreConfig instanceof ICBuildConfiguration2) {
+ URI uri = ((ICBuildConfiguration2) coreConfig).getBuildDirectoryURI();
+ if (uri != null) {
+ return new File(uri).getAbsolutePath();
+ }
+ }
+
+ return null;
+ }
+
+}