mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-10 17:55:39 +02:00
Bug 530000 - Add Meson Build support
- rewrite unconfigure Meson Property page logic to parse the output of meson --help and form the controls accordingly - do not add an entry for help option - add environment variable text entry to unconfigured property page to allow the user to add things such as CFLAGS=xxxxx - fix MesonBuildConfiguration to only use the MESON_ENV property when running meson for the first time and to prepend the current environment first to ensure local path, etc.. is still set, otherwise it won't be able to find commands it needs such as execvp - parse the environment text string to look for entries that use single or double quotes so that entries may use the = sign or spaces - when building, have ninja use the -v option so that the compile and link commands are output to the console Change-Id: I40d04234a7de74417c43f4c39bb2e21c86deb8a2
This commit is contained in:
parent
f6b60ed850
commit
33eeb12ae8
5 changed files with 213 additions and 131 deletions
|
@ -17,6 +17,8 @@ import java.util.Arrays;
|
|||
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.CommandLauncherManager;
|
||||
import org.eclipse.cdt.core.ConsoleOutputStream;
|
||||
|
@ -139,11 +141,17 @@ public class MesonBuildConfiguration extends CBuildConfiguration {
|
|||
|
||||
argsList.add(getBuildDirectory().toString());
|
||||
|
||||
String envStr = getProperty(IMesonConstants.MESON_ENV);
|
||||
String[] env = new String[0];
|
||||
if (envStr != null) {
|
||||
env = envStr.split(IMesonConstants.MESON_ENV_SEPARATOR); //$NON-NLS-1$
|
||||
Map<String, String> envMap = System.getenv();
|
||||
List<String> envList = new ArrayList<>();
|
||||
for (Map.Entry<String, String> entry : envMap.entrySet()) {
|
||||
envList.add(entry.getKey() + "=" + entry.getValue());
|
||||
}
|
||||
String envStr = getProperty(IMesonConstants.MESON_ENV);
|
||||
if (envStr != null) {
|
||||
envList.addAll(stripEnvVars(envStr));
|
||||
}
|
||||
String[] env = envList.toArray(new String[0]);
|
||||
|
||||
ICommandLauncher launcher = CommandLauncherManager.getInstance().getCommandLauncher(this);
|
||||
|
||||
launcher.setProject(getProject());
|
||||
|
@ -176,12 +184,8 @@ public class MesonBuildConfiguration extends CBuildConfiguration {
|
|||
buildCommand = "ninja";
|
||||
}
|
||||
|
||||
|
||||
String envStr = getProperty(IMesonConstants.MESON_ENV);
|
||||
String[] env = new String[0];
|
||||
if (envStr != null) {
|
||||
env = envStr.split(envStr);
|
||||
}
|
||||
|
||||
ICommandLauncher launcher = CommandLauncherManager.getInstance().getCommandLauncher(this);
|
||||
|
||||
launcher.setProject(getProject());
|
||||
|
@ -195,7 +199,7 @@ public class MesonBuildConfiguration extends CBuildConfiguration {
|
|||
outStream.write(String.join(" ", ninjaPath.toString() + '\n')); //$NON-NLS-1$
|
||||
org.eclipse.core.runtime.Path workingDir = new org.eclipse.core.runtime.Path(getBuildDirectory().toString());
|
||||
|
||||
launcher.execute(ninjaPath, new String[0], env, workingDir, monitor);
|
||||
launcher.execute(ninjaPath, new String[] {"-v"}, env, workingDir, monitor); //$NON-NLS-1$
|
||||
if (launcher.waitAndRead(epm.getOutputStream(), epm.getOutputStream(), SubMonitor.convert(monitor)) != ICommandLauncher.OK) {
|
||||
String errMsg = launcher.getErrorMessage();
|
||||
console.getErrorStream().write(String.format(Messages.MesonBuildConfiguration_RunningNinjaFailure, errMsg));
|
||||
|
@ -295,5 +299,45 @@ public class MesonBuildConfiguration extends CBuildConfiguration {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Strip a command of VAR=VALUE pairs that appear ahead or behind the command and add
|
||||
* them to a list of environment variables.
|
||||
*
|
||||
* @param command - command to strip
|
||||
* @param envVars - ArrayList to add environment variables to
|
||||
* @return stripped command
|
||||
*/
|
||||
public static List<String> stripEnvVars(String envString) {
|
||||
Pattern p1 = Pattern.compile("(\\w+[=]\\\".*?\\\").*"); //$NON-NLS-1$
|
||||
Pattern p2 = Pattern.compile("(\\w+[=]'.*?').*"); //$NON-NLS-1$
|
||||
Pattern p3 = Pattern.compile("(\\w+[=][^\\s]+).*"); //$NON-NLS-1$
|
||||
boolean finished = false;
|
||||
List<String> envVars = new ArrayList<>();
|
||||
while (!finished) {
|
||||
Matcher m1 = p1.matcher(envString);
|
||||
if (m1.matches()) {
|
||||
envString = envString.replaceFirst("\\w+[=]\\\".*?\\\"","").trim(); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
String s = m1.group(1).trim();
|
||||
envVars.add(s.replaceAll("\\\"", "")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
} else {
|
||||
Matcher m2 = p2.matcher(envString);
|
||||
if (m2.matches()) {
|
||||
envString = envString.replaceFirst("\\w+[=]'.*?'", "").trim(); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
String s = m2.group(1).trim();
|
||||
envVars.add(s.replaceAll("'", "")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
} else {
|
||||
Matcher m3 = p3.matcher(envString);
|
||||
if (m3.matches()) {
|
||||
envString = envString.replaceFirst("\\w+[=][^\\s]+", "").trim(); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
envVars.add(m3.group(1).trim());
|
||||
} else {
|
||||
finished = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return envVars;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@ import org.eclipse.swt.SWT;
|
|||
import org.eclipse.swt.layout.GridData;
|
||||
import org.eclipse.swt.widgets.Button;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
|
||||
public class MesonPropertyCheckbox implements IMesonPropertyPageControl {
|
||||
|
||||
|
@ -26,11 +27,18 @@ public class MesonPropertyCheckbox implements IMesonPropertyPageControl {
|
|||
this.initialValue = initialValue;
|
||||
checkbox = new Button(composite, SWT.CHECK);
|
||||
GridData data = new GridData(GridData.FILL, GridData.FILL, true, false);
|
||||
data.horizontalSpan = 2;
|
||||
data.grabExcessHorizontalSpace = true;
|
||||
data.horizontalSpan = 1;
|
||||
checkbox.setText(name);
|
||||
checkbox.setLayoutData(data);
|
||||
checkbox.setSelection(initialValue);
|
||||
checkbox.setToolTipText(tooltip);
|
||||
GridData data2 = new GridData(GridData.FILL, GridData.FILL, true, false);
|
||||
data2.grabExcessHorizontalSpace = true;
|
||||
data2.horizontalSpan = 1;
|
||||
Label label = new Label(composite, SWT.NONE);
|
||||
label.setText(tooltip);
|
||||
label.setLayoutData(data2);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -45,11 +45,14 @@ import org.eclipse.swt.widgets.Composite;
|
|||
import org.eclipse.swt.widgets.Control;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.swt.widgets.Group;
|
||||
import org.eclipse.swt.widgets.Label;
|
||||
import org.eclipse.swt.widgets.Text;
|
||||
import org.eclipse.ui.dialogs.PropertyPage;
|
||||
|
||||
/**
|
||||
* Property page for CMake projects. The only thing we have here at the moment is a button
|
||||
* to launch the CMake GUI configurator (cmake-qt-gui).
|
||||
* Property page for Meson projects. For unconfigured projects, we use the meson command and parse
|
||||
* the output of the --help option. Otherwise, we use the meson configure command to find current
|
||||
* options and what may be changed via a meson configure call.
|
||||
*
|
||||
* We assume that the build directory is in project/build/configname, which is where
|
||||
* the CMake project wizard puts it. We also assume that "cmake-gui" is in the user's
|
||||
|
@ -61,6 +64,7 @@ public class MesonPropertyPage extends PropertyPage {
|
|||
private List<IMesonPropertyPageControl> componentList = new ArrayList<>();
|
||||
private boolean configured;
|
||||
private CBuildConfiguration buildConfig;
|
||||
private Text envText;
|
||||
|
||||
@Override
|
||||
protected Control createContents(Composite parent) {
|
||||
|
@ -97,25 +101,73 @@ public class MesonPropertyPage extends PropertyPage {
|
|||
}
|
||||
|
||||
} else {
|
||||
Map<String, String> argMap = new HashMap<>();
|
||||
String mesonArgs = buildConfig.getProperty(IMesonConstants.MESON_ARGUMENTS);
|
||||
if (mesonArgs != null) {
|
||||
String[] argStrings = mesonArgs.split("\\s+");
|
||||
for (String argString : argStrings) {
|
||||
String[] s = argString.split("=");
|
||||
if (s.length == 2) {
|
||||
argMap.put(s[0], s[1]);
|
||||
} else {
|
||||
argMap.put(argString, "true");
|
||||
ICommandLauncher launcher = CommandLauncherManager.getInstance().getCommandLauncher(project.getActiveBuildConfig().getAdapter(ICBuildConfiguration.class));
|
||||
Process p = launcher.execute(new Path("meson"), new String[] { "-h"}, new String[0], sourceDir, new NullProgressMonitor());
|
||||
ByteArrayOutputStream stdout = new ByteArrayOutputStream();
|
||||
ByteArrayOutputStream stderr = new ByteArrayOutputStream();
|
||||
int rc = -1;
|
||||
try {
|
||||
if (launcher.waitAndRead(stdout, stderr, new NullProgressMonitor()) == ICommandLauncher.OK) {
|
||||
p.waitFor();
|
||||
}
|
||||
rc = p.exitValue();
|
||||
} catch (InterruptedException e) {
|
||||
// ignore for now
|
||||
}
|
||||
if (rc == 0) {
|
||||
Map<String, String> argMap = new HashMap<>();
|
||||
String mesonArgs = buildConfig.getProperty(IMesonConstants.MESON_ARGUMENTS);
|
||||
if (mesonArgs != null) {
|
||||
String[] argStrings = mesonArgs.split("\\s+");
|
||||
for (String argString : argStrings) {
|
||||
String[] s = argString.split("=");
|
||||
if (s.length == 2) {
|
||||
argMap.put(s[0], s[1]);
|
||||
} else {
|
||||
argMap.put(argString, "true");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Group group = new Group(composite, SWT.BORDER);
|
||||
GridLayout layout = new GridLayout(2, true);
|
||||
layout.marginLeft = 10;
|
||||
layout.marginRight = 10;
|
||||
group.setLayout(layout);
|
||||
group.setLayoutData(new GridData(GridData.FILL_BOTH));
|
||||
group.setText("Environment");
|
||||
|
||||
Label envLabel = new Label(group, SWT.NONE);
|
||||
envLabel.setText(Messages.MesonPropertyPage_env_label);
|
||||
GridData data = new GridData(GridData.FILL, GridData.FILL, true, false);
|
||||
data.grabExcessHorizontalSpace = true;
|
||||
data.horizontalSpan = 1;
|
||||
envLabel.setLayoutData(data);
|
||||
|
||||
|
||||
String mesonEnv = buildConfig.getProperty(IMesonConstants.MESON_ENV);
|
||||
|
||||
envText = new Text(group, SWT.BORDER);
|
||||
if (mesonEnv != null) {
|
||||
envText.setText(mesonEnv);
|
||||
}
|
||||
envText.setToolTipText(Messages.MesonPropertyPage_env_tooltip);
|
||||
data = new GridData(GridData.FILL, GridData.FILL, true, false);
|
||||
data.grabExcessHorizontalSpace = true;
|
||||
data.horizontalSpan = 1;
|
||||
envText.setLayoutData(data);
|
||||
|
||||
// default buildtype based on active build configuration
|
||||
// user can always override and we will use override from then on
|
||||
String defaultBuildType = "release"; //$NON-NLS-1$
|
||||
if (configName.contains("debug")) { //$NON-NLS-1$
|
||||
defaultBuildType = "debug"; //$NON-NLS-1$
|
||||
}
|
||||
if (argMap.get("buildtype") == null) { //$NON-NLS-1$
|
||||
argMap.put("buildtype", defaultBuildType); //$NON-NLS-1$
|
||||
}
|
||||
componentList = parseHelpOutput(stdout, composite, argMap, defaultBuildType);
|
||||
}
|
||||
|
||||
String defaultBuildType = "release";
|
||||
if (configName.contains("debug")) { //$NON-NLS-1$
|
||||
defaultBuildType = "debug"; //$NON-NLS-1$
|
||||
}
|
||||
componentList = defaultOptions(composite, argMap, defaultBuildType);
|
||||
}
|
||||
} catch (CoreException e2) {
|
||||
// TODO Auto-generated catch block
|
||||
|
@ -201,14 +253,85 @@ public class MesonPropertyPage extends PropertyPage {
|
|||
} else {
|
||||
StringBuilder mesonargs = new StringBuilder();
|
||||
for (IMesonPropertyPageControl control : componentList) {
|
||||
System.out.println(control.getUnconfiguredString());
|
||||
mesonargs.append(control.getUnconfiguredString());
|
||||
mesonargs.append(" "); //$NON-NLS-1$
|
||||
}
|
||||
buildConfig.setProperty(IMesonConstants.MESON_ARGUMENTS, mesonargs.toString());
|
||||
buildConfig.setProperty(IMesonConstants.MESON_ENV, envText.getText().trim());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* Parse output of meson help call to determine options to show to user
|
||||
* @param stdout - ByteArrayOutputStream containing output of command
|
||||
* @param composite - Composite to add Controls to
|
||||
* @return - list of Controls
|
||||
*/
|
||||
List<IMesonPropertyPageControl> parseHelpOutput(ByteArrayOutputStream stdout, Composite composite, Map<String, String> argMap, String defaultBuildType) {
|
||||
List<IMesonPropertyPageControl> controls = new ArrayList<>();
|
||||
|
||||
Group group = new Group(composite, SWT.BORDER);
|
||||
GridLayout layout = new GridLayout(2, true);
|
||||
layout.marginLeft = 10;
|
||||
layout.marginRight = 10;
|
||||
group.setLayout(layout);
|
||||
group.setLayoutData(new GridData(GridData.FILL_BOTH));
|
||||
group.setText(Messages.MesonPropertyPage_options_group);
|
||||
|
||||
try {
|
||||
String output = stdout.toString(StandardCharsets.UTF_8.name()).replaceAll("\\r?\\n\\s+", " "); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
String[] lines = output.split("--"); //$NON-NLS-1$
|
||||
Pattern optionPattern = Pattern.compile("(([a-z-]+)\\s+(([A-Z_][A-Z_]+))?\\s*(\\{.*?\\})?([^\\[\\]]*))");
|
||||
Pattern descPattern1 = Pattern.compile("([^\\.]+).*");
|
||||
Pattern descPattern = Pattern.compile("([^\\(]*)(\\(default\\:\\s+([^\\)]+)\\).*)");
|
||||
for (String line : lines) {
|
||||
// System.out.println(line);
|
||||
Matcher optionMatcher = optionPattern.matcher(line);
|
||||
if (optionMatcher.matches() && !optionMatcher.group(2).equals("help")) {
|
||||
// System.out.println("group 1 is " + (optionMatcher.group(1) != null ? optionMatcher.group(1).trim() : null));
|
||||
// System.out.println("group 2 is " + (optionMatcher.group(2) != null ? optionMatcher.group(2).trim() : null));
|
||||
// System.out.println("group 3 is " + (optionMatcher.group(3) != null ? optionMatcher.group(3).trim() : null));
|
||||
// System.out.println("group 4 is " + (optionMatcher.group(4) != null ? optionMatcher.group(4).trim() : null));
|
||||
// System.out.println("group 5 is " + (optionMatcher.group(5) != null ? optionMatcher.group(5).trim() : null));
|
||||
// System.out.println("group 6 is " + (optionMatcher.group(6) != null ? optionMatcher.group(6).trim() : null));
|
||||
if (optionMatcher.group(3) != null) {
|
||||
String defaultValue = argMap.get(optionMatcher.group(2));
|
||||
String description = optionMatcher.group(6);
|
||||
Matcher m = descPattern1.matcher(optionMatcher.group(6));
|
||||
if (m.matches()) {
|
||||
description = m.group(1).trim();
|
||||
}
|
||||
IMesonPropertyPageControl control = new MesonPropertyText(group, optionMatcher.group(2), defaultValue, description);
|
||||
controls.add(control);
|
||||
} else if (optionMatcher.group(5) != null) {
|
||||
String defaultValue = argMap.get(optionMatcher.group(2));
|
||||
Matcher m = descPattern.matcher(optionMatcher.group(6));
|
||||
if (m.matches()) {
|
||||
String valueString = optionMatcher.group(5).replaceAll("\\{", ""); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
valueString = valueString.replaceAll("\\}", ""); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
String[] values = valueString.split(","); //$NON-NLS-1$
|
||||
if (defaultValue == null) {
|
||||
defaultValue = m.group(3).trim();
|
||||
}
|
||||
IMesonPropertyPageControl control = new MesonPropertyCombo(group, optionMatcher.group(2), values, defaultValue, m.group(1).trim());
|
||||
controls.add(control);
|
||||
}
|
||||
} else {
|
||||
boolean defaultValue = false;
|
||||
if (argMap.containsKey(optionMatcher.group(2))) {
|
||||
defaultValue = Boolean.getBoolean(argMap.get(optionMatcher.group(2)));
|
||||
}
|
||||
IMesonPropertyPageControl control = new MesonPropertySpecialCheckbox(group, optionMatcher.group(2), defaultValue, optionMatcher.group(6));
|
||||
controls.add(control);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
return controls;
|
||||
}
|
||||
return controls;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse output of meson configure call to determine options to show to user
|
||||
|
@ -355,105 +478,4 @@ public class MesonPropertyPage extends PropertyPage {
|
|||
return controls;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create list of options for initial meson call
|
||||
* @param stdout - ByteArrayOutputStream containing output of command
|
||||
* @param composite - Composite to add Controls to
|
||||
* @return - list of Controls
|
||||
*/
|
||||
List<IMesonPropertyPageControl> defaultOptions(Composite composite, Map<String, String> argMap, String defaultBuildType) {
|
||||
List<IMesonPropertyPageControl> controls = new ArrayList<>();
|
||||
|
||||
Group group = new Group(composite, SWT.BORDER);
|
||||
group.setLayout(new GridLayout(2, true));
|
||||
group.setLayoutData(new GridData(GridData.FILL_BOTH));
|
||||
group.setText("Options");
|
||||
|
||||
IMesonPropertyPageControl prefix = new MesonPropertyText(group, "prefix", argMap.get("--prefix"), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Messages.MesonPropertyPage_prefix_tooltip);
|
||||
controls.add(prefix);
|
||||
IMesonPropertyPageControl libdir = new MesonPropertyText(group, "libdir", argMap.get("--libdir"), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Messages.MesonPropertyPage_libdir_tooltip);
|
||||
controls.add(libdir);
|
||||
IMesonPropertyPageControl libexecdir = new MesonPropertyText(group, "libexecdir", argMap.get("--libexecdir"), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Messages.MesonPropertyPage_libexecdir_tooltip);
|
||||
controls.add(libexecdir);
|
||||
IMesonPropertyPageControl bindir = new MesonPropertyText(group, "bindir", argMap.get("--bindir"), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Messages.MesonPropertyPage_bindir_tooltip);
|
||||
controls.add(bindir);
|
||||
IMesonPropertyPageControl sbindir = new MesonPropertyText(group, "sbindir", argMap.get("--sbindir"), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Messages.MesonPropertyPage_sbindir_tooltip);
|
||||
controls.add(sbindir);
|
||||
IMesonPropertyPageControl includedir = new MesonPropertyText(group, "includedir", argMap.get("--includedir"), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Messages.MesonPropertyPage_includedir_tooltip);
|
||||
controls.add(includedir);
|
||||
IMesonPropertyPageControl datadir = new MesonPropertyText(group, "datadir", argMap.get("--datadir"), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Messages.MesonPropertyPage_datadir_tooltip);
|
||||
controls.add(datadir);
|
||||
IMesonPropertyPageControl mandir = new MesonPropertyText(group, "mandir", argMap.get("--mandir"), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Messages.MesonPropertyPage_mandir_tooltip);
|
||||
controls.add(mandir);
|
||||
IMesonPropertyPageControl infodir = new MesonPropertyText(group, "infodir", argMap.get("--infodir"), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Messages.MesonPropertyPage_infodir_tooltip);
|
||||
controls.add(infodir);
|
||||
IMesonPropertyPageControl localedir = new MesonPropertyText(group, "localedir", argMap.get("--localedir"), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Messages.MesonPropertyPage_localedir_tooltip);
|
||||
controls.add(localedir);
|
||||
IMesonPropertyPageControl sysconfdir = new MesonPropertyText(group, "sysconfdir", argMap.get("--sysconfdir"), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Messages.MesonPropertyPage_sysconfdir_tooltip);
|
||||
controls.add(sysconfdir);
|
||||
IMesonPropertyPageControl localstatedir = new MesonPropertyText(group, "localstatedir", argMap.get("--localstatedir"), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Messages.MesonPropertyPage_localstatedir_tooltip);
|
||||
controls.add(localstatedir);
|
||||
IMesonPropertyPageControl sharedstatedir = new MesonPropertyText(group, "sharedstatedir", argMap.get("--sharedstatedir"), //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Messages.MesonPropertyPage_sharedstatedir_tooltip);
|
||||
controls.add(sharedstatedir);
|
||||
IMesonPropertyPageControl buildtype = new MesonPropertyCombo(group, "buildtype", //$NON-NLS-1$
|
||||
new String[] {"plain", "debug", "debugoptimized", "release", "minsize"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
|
||||
argMap.get("--buildtype") != null ? argMap.get("--buildtype") : defaultBuildType, //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Messages.MesonPropertyPage_buildtype_tooltip);
|
||||
controls.add(buildtype);
|
||||
IMesonPropertyPageControl strip = new MesonPropertySpecialCheckbox(group, "strip", argMap.get("--strip") != null, //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Messages.MesonPropertyPage_strip_tooltip);
|
||||
controls.add(strip);
|
||||
IMesonPropertyPageControl unity = new MesonPropertyCombo(group, "unity", //$NON-NLS-1$
|
||||
new String[] {"on", "off", "subprojects"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
argMap.get("--unity") != null ? argMap.get("--unity") : "off", //$NON-NLS-1$ //$NON-NLS-2$
|
||||
Messages.MesonPropertyPage_unity_tooltip);
|
||||
controls.add(unity);
|
||||
IMesonPropertyPageControl werror = new MesonPropertySpecialCheckbox(group, "werror", //$NON-NLS-1$
|
||||
argMap.get("--werror") != null, Messages.MesonPropertyPage_werror_tooltip); //$NON-NLS-1$
|
||||
controls.add(werror);
|
||||
IMesonPropertyPageControl layout = new MesonPropertyCombo(group, "layout", //$NON-NLS-1$
|
||||
new String[] {"mirror", "flat"}, //$NON-NLS-1$ //$NON-NLS-2$
|
||||
argMap.get("--mirror") != null ? argMap.get("--mirror") : "mirror", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
Messages.MesonPropertyPage_layout_tooltip);
|
||||
controls.add(layout);
|
||||
IMesonPropertyPageControl default_library = new MesonPropertyCombo(group, "default-library", //$NON-NLS-1$
|
||||
new String[] {"shared", "static"}, //$NON-NLS-1$ //$NON-NLS-2$
|
||||
argMap.get("--default-library") != null ? argMap.get("--default-library") : "shared", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
Messages.MesonPropertyPage_default_library_tooltip);
|
||||
controls.add(default_library);
|
||||
IMesonPropertyPageControl warnlevel = new MesonPropertyCombo(group, "warnlevel", //$NON-NLS-1$
|
||||
new String[] {"1","2","3"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
argMap.get("--warnlevel") != null ? argMap.get("--warnlevel") : "1", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
Messages.MesonPropertyPage_warnlevel_tooltip);
|
||||
controls.add(warnlevel);
|
||||
IMesonPropertyPageControl stdsplit = new MesonPropertySpecialCheckbox(group, "stdsplit", //$NON-NLS-1$
|
||||
argMap.get("--stdsplit") != null, Messages.MesonPropertyPage_stdsplit_tooltip); //$NON-NLS-1$
|
||||
controls.add(stdsplit);
|
||||
IMesonPropertyPageControl errorlogs = new MesonPropertySpecialCheckbox(group, "errorlogs", //$NON-NLS-1$
|
||||
argMap.get("--errorlogs") != null, Messages.MesonPropertyPage_errorlogs_tooltip); //$NON-NLS-1$
|
||||
controls.add(errorlogs);
|
||||
IMesonPropertyPageControl cross_file = new MesonPropertyText(group, "cross-file", //$NON-NLS-1$
|
||||
argMap.get("--cross-file"), Messages.MesonPropertyPage_cross_file_tooltip); //$NON-NLS-1$
|
||||
controls.add(cross_file);
|
||||
IMesonPropertyPageControl wrap_mode = new MesonPropertyCombo(group, "wrap-mode", //$NON-NLS-1$
|
||||
new String[] {"default", "nofallback", "nodownload"}, //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
argMap.get("--wrap-mode") != null ? argMap.get("--wrap-mode") : "default", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
Messages.MesonPropertyPage_wrap_mode_tooltip);
|
||||
controls.add(wrap_mode);
|
||||
|
||||
return controls;
|
||||
}
|
||||
}
|
|
@ -23,6 +23,10 @@ public class Messages extends NLS {
|
|||
public static String MesonPropertyPage_configure_failed;
|
||||
public static String MesonPropertyPage_terminated_rc;
|
||||
|
||||
public static String MesonPropertyPage_options_group;
|
||||
public static String MesonPropertyPage_env_tooltip;
|
||||
public static String MesonPropertyPage_env_label;
|
||||
|
||||
public static String MesonPropertyPage_prefix_tooltip;
|
||||
public static String MesonPropertyPage_libdir_tooltip;
|
||||
public static String MesonPropertyPage_libexecdir_tooltip;
|
||||
|
|
|
@ -17,6 +17,10 @@ MesonPropertyPage_meson_error=Meson configurator encountered an error:
|
|||
MesonPropertyPage_configure_failed=Meson configure command failed (see console output)
|
||||
MesonPropertyPage_terminated_rc=Command terminated with rc={0}\n
|
||||
|
||||
MesonPropertyPage_options_group=Options
|
||||
MesonPropertyPage_env_tooltip=Environment variables for initial meson call
|
||||
MesonPropertyPage_env_label=Environment
|
||||
|
||||
MesonPropertyPage_prefix_tooltip=Installation prefix
|
||||
MesonPropertyPage_libdir_tooltip=Library directory
|
||||
MesonPropertyPage_libexecdir_tooltip=Library executable directory
|
||||
|
|
Loading…
Add table
Reference in a new issue