From 33eeb12ae8e2f0dbf1cf244c3aae57928a5d4188 Mon Sep 17 00:00:00 2001 From: Jeff Johnston Date: Wed, 31 Jan 2018 18:38:29 -0500 Subject: [PATCH] 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 --- .../meson/core/MesonBuildConfiguration.java | 64 ++++- .../ui/properties/MesonPropertyCheckbox.java | 10 +- .../ui/properties/MesonPropertyPage.java | 262 ++++++++++-------- .../cdt/meson/ui/properties/Messages.java | 4 + .../meson/ui/properties/messages.properties | 4 + 5 files changed, 213 insertions(+), 131 deletions(-) diff --git a/build/org.eclipse.cdt.meson.core/src/org/eclipse/cdt/internal/meson/core/MesonBuildConfiguration.java b/build/org.eclipse.cdt.meson.core/src/org/eclipse/cdt/internal/meson/core/MesonBuildConfiguration.java index 22c4518841c..5be0271507d 100644 --- a/build/org.eclipse.cdt.meson.core/src/org/eclipse/cdt/internal/meson/core/MesonBuildConfiguration.java +++ b/build/org.eclipse.cdt.meson.core/src/org/eclipse/cdt/internal/meson/core/MesonBuildConfiguration.java @@ -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 envMap = System.getenv(); + List envList = new ArrayList<>(); + for (Map.Entry 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 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 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; + } } diff --git a/build/org.eclipse.cdt.meson.ui/src/org/eclipse/cdt/meson/ui/properties/MesonPropertyCheckbox.java b/build/org.eclipse.cdt.meson.ui/src/org/eclipse/cdt/meson/ui/properties/MesonPropertyCheckbox.java index 31d45e07318..8809d4010ce 100644 --- a/build/org.eclipse.cdt.meson.ui/src/org/eclipse/cdt/meson/ui/properties/MesonPropertyCheckbox.java +++ b/build/org.eclipse.cdt.meson.ui/src/org/eclipse/cdt/meson/ui/properties/MesonPropertyCheckbox.java @@ -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); } diff --git a/build/org.eclipse.cdt.meson.ui/src/org/eclipse/cdt/meson/ui/properties/MesonPropertyPage.java b/build/org.eclipse.cdt.meson.ui/src/org/eclipse/cdt/meson/ui/properties/MesonPropertyPage.java index 518fa6362bf..5a40ec6d229 100644 --- a/build/org.eclipse.cdt.meson.ui/src/org/eclipse/cdt/meson/ui/properties/MesonPropertyPage.java +++ b/build/org.eclipse.cdt.meson.ui/src/org/eclipse/cdt/meson/ui/properties/MesonPropertyPage.java @@ -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 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 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 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 parseHelpOutput(ByteArrayOutputStream stdout, Composite composite, Map argMap, String defaultBuildType) { + List 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 defaultOptions(Composite composite, Map argMap, String defaultBuildType) { - List 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; - } } \ No newline at end of file diff --git a/build/org.eclipse.cdt.meson.ui/src/org/eclipse/cdt/meson/ui/properties/Messages.java b/build/org.eclipse.cdt.meson.ui/src/org/eclipse/cdt/meson/ui/properties/Messages.java index 7e3ec684443..aef4f6a5f60 100644 --- a/build/org.eclipse.cdt.meson.ui/src/org/eclipse/cdt/meson/ui/properties/Messages.java +++ b/build/org.eclipse.cdt.meson.ui/src/org/eclipse/cdt/meson/ui/properties/Messages.java @@ -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; diff --git a/build/org.eclipse.cdt.meson.ui/src/org/eclipse/cdt/meson/ui/properties/messages.properties b/build/org.eclipse.cdt.meson.ui/src/org/eclipse/cdt/meson/ui/properties/messages.properties index 55734e34786..7ba5cc72633 100644 --- a/build/org.eclipse.cdt.meson.ui/src/org/eclipse/cdt/meson/ui/properties/messages.properties +++ b/build/org.eclipse.cdt.meson.ui/src/org/eclipse/cdt/meson/ui/properties/messages.properties @@ -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