mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-07 17:56:01 +02:00
Fix meson build under Docker Tooling (#491)
* Fix meson build under Docker Tooling - add new IToolChainConstants containing SECCOMP_UNCONFINED property constant - add new setLauncher() method to CBuildConfiguration so that watchProcess() can be used for container building - enhance ContainerCommandLauncher to discover specification of SECCOMP_UNDEFINED boolean option for execute() so "seccomp=undefined" can be specified - fix ContainerCommandLauncherFactory.verifyIncludePaths() to only look at filtered includes that have been made absolute and to recognize matches when the prefix shows up in the loaded list - add setting a property to ContainerGCCToolChain to set SECCOMP_UNCONFINED to true by default for the time-being - when generating scannerinfo, specify "seccomp=unconfined" - in ContainerGCCToolChain.startBuildProcess() remove extraneous banner statement and ensure that the build directory is created - fixes #479
This commit is contained in:
parent
1e04efa017
commit
dd4a40a683
7 changed files with 76 additions and 19 deletions
|
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
||||||
Bundle-ManifestVersion: 2
|
Bundle-ManifestVersion: 2
|
||||||
Bundle-Name: %pluginName
|
Bundle-Name: %pluginName
|
||||||
Bundle-SymbolicName: org.eclipse.cdt.core; singleton:=true
|
Bundle-SymbolicName: org.eclipse.cdt.core; singleton:=true
|
||||||
Bundle-Version: 8.3.0.qualifier
|
Bundle-Version: 8.4.0.qualifier
|
||||||
Bundle-Activator: org.eclipse.cdt.core.CCorePlugin
|
Bundle-Activator: org.eclipse.cdt.core.CCorePlugin
|
||||||
Bundle-Vendor: %providerName
|
Bundle-Vendor: %providerName
|
||||||
Bundle-Localization: plugin
|
Bundle-Localization: plugin
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2015, 2022 QNX Software Systems and others.
|
* Copyright (c) 2015, 2023 QNX Software Systems and others.
|
||||||
*
|
*
|
||||||
* This program and the accompanying materials
|
* This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License 2.0
|
* are made available under the terms of the Eclipse Public License 2.0
|
||||||
|
@ -80,7 +80,6 @@ import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
|
||||||
import org.eclipse.core.runtime.Platform;
|
import org.eclipse.core.runtime.Platform;
|
||||||
import org.eclipse.core.runtime.PlatformObject;
|
import org.eclipse.core.runtime.PlatformObject;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
|
@ -1052,6 +1051,14 @@ public abstract class CBuildConfiguration extends PlatformObject implements ICBu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 8.4
|
||||||
|
* @param launcher - launcher to set
|
||||||
|
*/
|
||||||
|
public void setLauncher(ICommandLauncher launcher) {
|
||||||
|
this.launcher = launcher;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 6.5
|
* @since 6.5
|
||||||
* @throws CoreException
|
* @throws CoreException
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2023 Red Hat Inc. and others.
|
||||||
|
*
|
||||||
|
* This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License 2.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* https://www.eclipse.org/legal/epl-2.0/
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: EPL-2.0
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Red Hat Inc. - initial contribution
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.core.build;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tool chain constants
|
||||||
|
*
|
||||||
|
* @since 8.4
|
||||||
|
* @noimplement This interface is not intended to be implemented by clients.
|
||||||
|
* @noextend This interface is not intended to be extended by clients.
|
||||||
|
*/
|
||||||
|
public interface IToolChainConstants {
|
||||||
|
|
||||||
|
public final static String SECCOMP_UNDEFINED = "seccomp_undefined"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
}
|
|
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
||||||
Bundle-ManifestVersion: 2
|
Bundle-ManifestVersion: 2
|
||||||
Bundle-Name: %Plugin.name
|
Bundle-Name: %Plugin.name
|
||||||
Bundle-SymbolicName: org.eclipse.cdt.docker.launcher;singleton:=true
|
Bundle-SymbolicName: org.eclipse.cdt.docker.launcher;singleton:=true
|
||||||
Bundle-Version: 2.0.100.qualifier
|
Bundle-Version: 2.0.200.qualifier
|
||||||
Bundle-Activator: org.eclipse.cdt.docker.launcher.DockerLaunchUIPlugin
|
Bundle-Activator: org.eclipse.cdt.docker.launcher.DockerLaunchUIPlugin
|
||||||
Bundle-Vendor: %Plugin.vendor
|
Bundle-Vendor: %Plugin.vendor
|
||||||
Bundle-Localization: plugin
|
Bundle-Localization: plugin
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2017, 2022 Red Hat Inc. and others.
|
* Copyright (c) 2017, 2023 Red Hat Inc. and others.
|
||||||
*
|
*
|
||||||
* This program and the accompanying materials
|
* This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License 2.0
|
* are made available under the terms of the Eclipse Public License 2.0
|
||||||
|
@ -29,6 +29,7 @@ import org.eclipse.cdt.core.ICommandLauncher;
|
||||||
import org.eclipse.cdt.core.build.ICBuildCommandLauncher;
|
import org.eclipse.cdt.core.build.ICBuildCommandLauncher;
|
||||||
import org.eclipse.cdt.core.build.ICBuildConfiguration;
|
import org.eclipse.cdt.core.build.ICBuildConfiguration;
|
||||||
import org.eclipse.cdt.core.build.IToolChain;
|
import org.eclipse.cdt.core.build.IToolChain;
|
||||||
|
import org.eclipse.cdt.core.build.IToolChainConstants;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
||||||
import org.eclipse.cdt.internal.core.ProcessClosure;
|
import org.eclipse.cdt.internal.core.ProcessClosure;
|
||||||
|
@ -67,6 +68,8 @@ public class ContainerCommandLauncher implements ICommandLauncher, ICBuildComman
|
||||||
|
|
||||||
public final static String VOLUME_SEPARATOR_REGEX = "[|]"; //$NON-NLS-1$
|
public final static String VOLUME_SEPARATOR_REGEX = "[|]"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
public final static String SECCOMP_UNCONFINED_STR = "seccomp=unconfined"; //$NON-NLS-1$
|
||||||
|
|
||||||
private IProject fProject;
|
private IProject fProject;
|
||||||
private Process fProcess;
|
private Process fProcess;
|
||||||
private boolean fShowCommand;
|
private boolean fShowCommand;
|
||||||
|
@ -259,12 +262,14 @@ public class ContainerCommandLauncher implements ICommandLauncher, ICBuildComman
|
||||||
final String connectionName;
|
final String connectionName;
|
||||||
final String imageName;
|
final String imageName;
|
||||||
final String pathMapProperty;
|
final String pathMapProperty;
|
||||||
|
final String seccompUndefinedStr;
|
||||||
if (buildCfg != null) {
|
if (buildCfg != null) {
|
||||||
IToolChain toolChain = buildCfg.getToolChain();
|
IToolChain toolChain = buildCfg.getToolChain();
|
||||||
selectedVolumeString = toolChain.getProperty(SELECTED_VOLUMES_ID);
|
selectedVolumeString = toolChain.getProperty(SELECTED_VOLUMES_ID);
|
||||||
connectionName = toolChain.getProperty(IContainerLaunchTarget.ATTR_CONNECTION_URI);
|
connectionName = toolChain.getProperty(IContainerLaunchTarget.ATTR_CONNECTION_URI);
|
||||||
imageName = toolChain.getProperty(IContainerLaunchTarget.ATTR_IMAGE_ID);
|
imageName = toolChain.getProperty(IContainerLaunchTarget.ATTR_IMAGE_ID);
|
||||||
pathMapProperty = toolChain.getProperty(DOCKERD_PATH);
|
pathMapProperty = toolChain.getProperty(DOCKERD_PATH);
|
||||||
|
seccompUndefinedStr = toolChain.getProperty(IToolChainConstants.SECCOMP_UNDEFINED);
|
||||||
} else {
|
} else {
|
||||||
ICConfigurationDescription cfgd = CoreModel.getDefault().getProjectDescription(fProject)
|
ICConfigurationDescription cfgd = CoreModel.getDefault().getProjectDescription(fProject)
|
||||||
.getActiveConfiguration();
|
.getActiveConfiguration();
|
||||||
|
@ -277,6 +282,7 @@ public class ContainerCommandLauncher implements ICommandLauncher, ICBuildComman
|
||||||
connectionName = props.getProperty(ContainerCommandLauncher.CONNECTION_ID);
|
connectionName = props.getProperty(ContainerCommandLauncher.CONNECTION_ID);
|
||||||
imageName = props.getProperty(ContainerCommandLauncher.IMAGE_ID);
|
imageName = props.getProperty(ContainerCommandLauncher.IMAGE_ID);
|
||||||
pathMapProperty = props.getProperty(DOCKERD_PATH);
|
pathMapProperty = props.getProperty(DOCKERD_PATH);
|
||||||
|
seccompUndefinedStr = props.getProperty(IToolChainConstants.SECCOMP_UNDEFINED);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add any specified volumes to additional dir list
|
// Add any specified volumes to additional dir list
|
||||||
|
@ -314,8 +320,10 @@ public class ContainerCommandLauncher implements ICommandLauncher, ICBuildComman
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean seccompUndefined = Boolean.parseBoolean(seccompUndefinedStr);
|
||||||
fProcess = launcher.runCommand(connectionName, imageName, fProject, this, cmdList, workingDir, additionalDirs,
|
fProcess = launcher.runCommand(connectionName, imageName, fProject, this, cmdList, workingDir, additionalDirs,
|
||||||
origEnv, fEnvironment, supportStdin, privilegedMode, labels, keepContainer);
|
origEnv, fEnvironment, supportStdin, privilegedMode, labels, keepContainer,
|
||||||
|
seccompUndefined ? List.of(SECCOMP_UNCONFINED_STR) : null);
|
||||||
|
|
||||||
return fProcess;
|
return fProcess;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2017, 2022 Red Hat Inc. and others.
|
* Copyright (c) 2017, 2023 Red Hat Inc. and others.
|
||||||
*
|
*
|
||||||
* This program and the accompanying materials
|
* This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License 2.0
|
* are made available under the terms of the Eclipse Public License 2.0
|
||||||
|
@ -302,7 +302,7 @@ public class ContainerCommandLauncherFactory implements ICommandLauncherFactory,
|
||||||
return includePaths;
|
return includePaths;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!getPaths(imgCnn, includePaths)) {
|
if (!getPaths(imgCnn, fetchPaths)) {
|
||||||
// There should be sufficient log messages by the root cause
|
// There should be sufficient log messages by the root cause
|
||||||
return includePaths;
|
return includePaths;
|
||||||
}
|
}
|
||||||
|
@ -313,13 +313,20 @@ public class ContainerCommandLauncherFactory implements ICommandLauncherFactory,
|
||||||
Set<IPath> copiedVolumes = ContainerLauncher.getCopiedVolumes(tpath);
|
Set<IPath> copiedVolumes = ContainerLauncher.getCopiedVolumes(tpath);
|
||||||
List<String> newEntries = new ArrayList<>();
|
List<String> newEntries = new ArrayList<>();
|
||||||
|
|
||||||
for (String path : includePaths) {
|
for (String includePath : includePaths) {
|
||||||
if (copiedVolumes.contains(new Path(path))) {
|
IPath path = new Path(includePath).makeAbsolute();
|
||||||
IPath newPath = tpath.append(path);
|
boolean found = false;
|
||||||
String newEntry = newPath.toOSString();
|
for (IPath copiedVolume : copiedVolumes) {
|
||||||
newEntries.add(newEntry);
|
if (copiedVolume.isPrefixOf(path)) {
|
||||||
} else {
|
IPath newPath = tpath.append(path);
|
||||||
newEntries.add(path);
|
String newEntry = newPath.toOSString();
|
||||||
|
newEntries.add(newEntry);
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
newEntries.add(path.toPortableString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return newEntries;
|
return newEntries;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2015, 2019 QNX Software Systems and others.
|
* Copyright (c) 2015, 2023 QNX Software Systems and others.
|
||||||
*
|
*
|
||||||
* This program and the accompanying materials
|
* This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License 2.0
|
* are made available under the terms of the Eclipse Public License 2.0
|
||||||
|
@ -33,10 +33,12 @@ import java.util.regex.Pattern;
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.CommandLauncherManager;
|
import org.eclipse.cdt.core.CommandLauncherManager;
|
||||||
import org.eclipse.cdt.core.ICommandLauncher;
|
import org.eclipse.cdt.core.ICommandLauncher;
|
||||||
|
import org.eclipse.cdt.core.build.CBuildConfiguration;
|
||||||
import org.eclipse.cdt.core.build.ICBuildCommandLauncher;
|
import org.eclipse.cdt.core.build.ICBuildCommandLauncher;
|
||||||
import org.eclipse.cdt.core.build.ICBuildConfiguration;
|
import org.eclipse.cdt.core.build.ICBuildConfiguration;
|
||||||
import org.eclipse.cdt.core.build.IToolChain;
|
import org.eclipse.cdt.core.build.IToolChain;
|
||||||
import org.eclipse.cdt.core.build.IToolChain2;
|
import org.eclipse.cdt.core.build.IToolChain2;
|
||||||
|
import org.eclipse.cdt.core.build.IToolChainConstants;
|
||||||
import org.eclipse.cdt.core.build.IToolChainProvider;
|
import org.eclipse.cdt.core.build.IToolChainProvider;
|
||||||
import org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage;
|
import org.eclipse.cdt.core.dom.ast.gnu.c.GCCLanguage;
|
||||||
import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage;
|
import org.eclipse.cdt.core.dom.ast.gnu.cpp.GPPLanguage;
|
||||||
|
@ -94,6 +96,7 @@ public class ContainerGCCToolChain extends PlatformObject implements IToolChain,
|
||||||
this.id = id;
|
this.id = id;
|
||||||
|
|
||||||
this.properties.putAll(properties);
|
this.properties.putAll(properties);
|
||||||
|
setProperty(IToolChainConstants.SECCOMP_UNDEFINED, "true"); //$NON-NLS-1$
|
||||||
this.envVars = envVars;
|
this.envVars = envVars;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,6 +359,9 @@ public class ContainerGCCToolChain extends PlatformObject implements IToolChain,
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!Files.exists(buildDirectory)) {
|
||||||
|
Files.createDirectories(buildDirectory);
|
||||||
|
}
|
||||||
Path tmpFile = Files.createTempFile(buildDirectory, ".sc", extension); //$NON-NLS-1$
|
Path tmpFile = Files.createTempFile(buildDirectory, ".sc", extension); //$NON-NLS-1$
|
||||||
commandLine.add(tmpFile.toString());
|
commandLine.add(tmpFile.toString());
|
||||||
|
|
||||||
|
@ -624,8 +630,6 @@ public class ContainerGCCToolChain extends PlatformObject implements IToolChain,
|
||||||
buf.deleteCharAt(buf.length() - 1); // remove last blank;
|
buf.deleteCharAt(buf.length() - 1); // remove last blank;
|
||||||
argList.add(buf.toString());
|
argList.add(buf.toString());
|
||||||
|
|
||||||
ICommandLauncher launcher = CommandLauncherManager.getInstance().getCommandLauncher(config);
|
|
||||||
|
|
||||||
// Bug 536884 - following is a kludge to allow us to check if the
|
// Bug 536884 - following is a kludge to allow us to check if the
|
||||||
// Container headers have been deleted by the user in which case
|
// Container headers have been deleted by the user in which case
|
||||||
// we need to re-perform scanner info collection and copy headers
|
// we need to re-perform scanner info collection and copy headers
|
||||||
|
@ -633,16 +637,20 @@ public class ContainerGCCToolChain extends PlatformObject implements IToolChain,
|
||||||
// TODO: make this cleaner
|
// TODO: make this cleaner
|
||||||
CommandLauncherManager.getInstance().processIncludePaths(config, Collections.emptyList());
|
CommandLauncherManager.getInstance().processIncludePaths(config, Collections.emptyList());
|
||||||
|
|
||||||
|
ICommandLauncher launcher = CommandLauncherManager.getInstance().getCommandLauncher(config);
|
||||||
launcher.setProject(config.getBuildConfiguration().getProject());
|
launcher.setProject(config.getBuildConfiguration().getProject());
|
||||||
|
((CBuildConfiguration) config).setLauncher(launcher);
|
||||||
|
|
||||||
if (launcher instanceof ICBuildCommandLauncher) {
|
if (launcher instanceof ICBuildCommandLauncher) {
|
||||||
((ICBuildCommandLauncher) launcher).setBuildConfiguration(config);
|
((ICBuildCommandLauncher) launcher).setBuildConfiguration(config);
|
||||||
console.getOutputStream().write(((ICBuildCommandLauncher) launcher).getConsoleHeader());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
org.eclipse.core.runtime.Path workingDir = new org.eclipse.core.runtime.Path(buildDirectory);
|
org.eclipse.core.runtime.Path workingDir = new org.eclipse.core.runtime.Path(buildDirectory);
|
||||||
|
Files.createDirectories(Path.of(buildDirectory));
|
||||||
|
|
||||||
Process p = launcher.execute(cmdPath, argList.toArray(new String[0]), new String[0], workingDir, monitor);
|
Process p = launcher.execute(cmdPath, argList.toArray(new String[0]), new String[0], workingDir, monitor);
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue