From b7fa35979a7eb3dee815c3e647f5bd4a0733320f Mon Sep 17 00:00:00 2001 From: betamax Date: Wed, 7 Feb 2024 18:52:58 +0000 Subject: [PATCH] Bug579242: allow user to override CMake Settings (#683) The Launch Bar Launch Configuration, Build Settings tab allows the user to customise the CMake Settings (CMake generator, extra arguments, build command and clean command). But changing these settings did not affect the CMake build. This is now fixed. A "Use these settings" checkbox allows the user to choose settings from the UI or use the operating system defaults. --- NewAndNoteworthy/CDT-11.5.md | 12 + ...ld_Settings_Use_these_settings_checked.PNG | Bin 0 -> 18370 bytes ..._Settings_Use_these_settings_unchecked.PNG | Bin 0 -> 20343 bytes TESTING.md | 8 + .../META-INF/MANIFEST.MF | 2 +- .../internal/CMakeBuildConfiguration.java | 59 +++- .../internal/CommandDescriptorBuilder.java | 4 +- .../properties/AbstractOsOverrides.java | 3 +- .../cmake/core/properties/CMakeGenerator.java | 12 + .../manualTests/Bug579242_manual_tests.md | 331 ++++++++++++++++++ .../META-INF/MANIFEST.MF | 2 +- .../cdt/cmake/ui/internal/CMakeBuildTab.java | 75 +++- .../cdt/cmake/ui/internal/Messages.java | 2 + .../cdt/cmake/ui/internal/messages.properties | 2 + 14 files changed, 492 insertions(+), 20 deletions(-) create mode 100644 NewAndNoteworthy/images/CDT-11.5-Build_Settings_Use_these_settings_checked.PNG create mode 100644 NewAndNoteworthy/images/CDT-11.5-Build_Settings_Use_these_settings_unchecked.PNG create mode 100644 cmake/org.eclipse.cdt.cmake.ui.tests/manualTests/Bug579242_manual_tests.md diff --git a/NewAndNoteworthy/CDT-11.5.md b/NewAndNoteworthy/CDT-11.5.md index 9efcb0e721c..9c5a2139275 100644 --- a/NewAndNoteworthy/CDT-11.5.md +++ b/NewAndNoteworthy/CDT-11.5.md @@ -32,6 +32,18 @@ The original locations of object files within a GNU archive are now calculated u Managed build _Static Library_ projects using a _Cross GCC_, _Cygwin GCC_, _Linux GCC_ or _MinGW GCC_ toolchain now use the `-P` archiver flag by default to generate the necessary path information. +# CMake +The Launch Bar Launch Configuration Build Settings tab has been updated so it can now correctly control the CMake Generator setting. The "Additional CMake arguments" field can also be used to inject CMake defines into the CMakeCache.txt file to populate it with customizable settings for the project. Use the new "Use these settings" checkbox to control whether to use either the operating system defaults or settings from the UI. + +When "Use these settings" checkbox is unchecked, the operating system defaults are used during the CMake build. + +

+ +When the "Use these settings" checkbox is checked, the UI settings are used during the CMake build. + +

+ + # API Changes, current and planned ## Breaking API changes diff --git a/NewAndNoteworthy/images/CDT-11.5-Build_Settings_Use_these_settings_checked.PNG b/NewAndNoteworthy/images/CDT-11.5-Build_Settings_Use_these_settings_checked.PNG new file mode 100644 index 0000000000000000000000000000000000000000..add5a814ec4c61d116a4f479b9732cc224defab6 GIT binary patch literal 18370 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 a%!{@b$E&CsoCOB-9xe9ky$_?0mHZ91M-12i literal 0 HcmV?d00001 diff --git a/TESTING.md b/TESTING.md index e9981712a8d..45067a77de9 100644 --- a/TESTING.md +++ b/TESTING.md @@ -117,3 +117,11 @@ DISPLAY=:99 mvn verify or specify the `DISPLAY` in the Eclipse JUnit launch configuration: ![junit_env_display.png](images/junit_env_display.png "screenshot of how to set custom DISPLAY") + +## Manual Testing +### CMake Build Settings tab +A set of manual tests that check it is possible to control the CMake build using the Launch Bar Launch Configuration > Build Settings tab. + +[CMake Build Settings tests](./cmake/org.eclipse.cdt.cmake.ui.tests/manualTests/Bug579242_manual_tests.md) + + diff --git a/cmake/org.eclipse.cdt.cmake.core/META-INF/MANIFEST.MF b/cmake/org.eclipse.cdt.cmake.core/META-INF/MANIFEST.MF index 276fc467efd..5b71c64ffbf 100644 --- a/cmake/org.eclipse.cdt.cmake.core/META-INF/MANIFEST.MF +++ b/cmake/org.eclipse.cdt.cmake.core/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.cdt.cmake.core;singleton:=true -Bundle-Version: 1.5.400.qualifier +Bundle-Version: 1.5.500.qualifier Bundle-Activator: org.eclipse.cdt.cmake.core.internal.Activator Bundle-Vendor: %providerName Require-Bundle: org.eclipse.core.runtime, diff --git a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfiguration.java b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfiguration.java index 55eca78c4e8..02c5b7a0bbb 100644 --- a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfiguration.java +++ b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CMakeBuildConfiguration.java @@ -18,11 +18,13 @@ import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.function.Consumer; +import java.util.stream.Collectors; import org.eclipse.cdt.cmake.core.CMakeErrorParser; import org.eclipse.cdt.cmake.core.CMakeExecutionMarkerFactory; @@ -66,14 +68,19 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.jobs.Job; +import org.osgi.service.prefs.Preferences; public class CMakeBuildConfiguration extends CBuildConfiguration { + public static final String CMAKE_USE_UI_OVERRIDES = "cmake.use.ui.overrides"; //$NON-NLS-1$ + public static final boolean CMAKE_USE_UI_OVERRIDES_DEFAULT = false; public static final String CMAKE_GENERATOR = "cmake.generator"; //$NON-NLS-1$ public static final String CMAKE_ARGUMENTS = "cmake.arguments"; //$NON-NLS-1$ public static final String CMAKE_ENV = "cmake.environment"; //$NON-NLS-1$ public static final String BUILD_COMMAND = "cmake.command.build"; //$NON-NLS-1$ + public static final String BUILD_COMMAND_DEFAULT = "cmake"; //$NON-NLS-1$ public static final String CLEAN_COMMAND = "cmake.command.clean"; //$NON-NLS-1$ + public static final String CLEAN_COMMAND_DEFAULT = "clean"; //$NON-NLS-1$ private ICMakeToolChainFile toolChainFile; @@ -261,6 +268,23 @@ public class CMakeBuildConfiguration extends CBuildConfiguration { } } + /** + * When UI overrides are in force, gets the user specified clean target (if not blank), otherwise the default clean target. + * @return Always a non-null String indicating the clean target. + */ + private String getCleanCommand() { + String retVal = CLEAN_COMMAND_DEFAULT; + Preferences settings = this.getSettings(); + boolean useUiOverrides = settings.getBoolean(CMAKE_USE_UI_OVERRIDES, CMAKE_USE_UI_OVERRIDES_DEFAULT); + if (useUiOverrides) { + String cleanCommand = settings.get(CLEAN_COMMAND, CLEAN_COMMAND_DEFAULT); + if (!cleanCommand.isBlank()) { + retVal = cleanCommand; + } + } + return retVal; + } + @Override public void clean(IConsole console, IProgressMonitor monitor) throws CoreException { IProject project = getProject(); @@ -271,7 +295,7 @@ public class CMakeBuildConfiguration extends CBuildConfiguration { ICMakeProperties cmakeProperties = getPropertiesController().load(); CommandDescriptorBuilder cmdBuilder = new CommandDescriptorBuilder(cmakeProperties, new SimpleOsOverridesSelector()); - CommandDescriptor command = cmdBuilder.makeCMakeBuildCommandline("clean"); //$NON-NLS-1$ + CommandDescriptor command = cmdBuilder.makeCMakeBuildCommandline(getCleanCommand()); ConsoleOutputStream outStream = console.getOutputStream(); Path buildDir = getBuildDirectory(); @@ -547,7 +571,12 @@ public class CMakeBuildConfiguration extends CBuildConfiguration { } } // CMakeIndexerInfoConsumer - private static class SimpleOsOverridesSelector implements IOsOverridesSelector { + /** + * Supports OS overrides and also User Interface (UI) overrides, provided in the CMakeBuildTab. The UI + * overrides are stored in the intermediary CBuildConfiguration Preferences (CBuildConfiguration.getSettings()) + * and used only when CMAKE_USE_UI_OVERRIDES is true. + */ + private class SimpleOsOverridesSelector implements IOsOverridesSelector { @Override public IOsOverrides getOsOverrides(ICMakeProperties cmakeProperties) { @@ -561,7 +590,31 @@ public class CMakeBuildConfiguration extends CBuildConfiguration { // fall back to linux, if OS is unknown overrides = cmakeProperties.getLinuxOverrides(); } - return overrides; + return getUiOrOsOverrides(overrides); + } + + private IOsOverrides getUiOrOsOverrides(IOsOverrides osOverrides) { + IOsOverrides retVal = Objects.requireNonNull(osOverrides, "osOverrides must not be null"); //$NON-NLS-1$ + Preferences settings = getSettings(); + boolean useUiOverrides = settings.getBoolean(CMAKE_USE_UI_OVERRIDES, CMAKE_USE_UI_OVERRIDES_DEFAULT); + if (useUiOverrides) { + // Set UI override for generator + String gen = settings.get(CMAKE_GENERATOR, ""); //$NON-NLS-1$ + retVal.setGenerator(CMakeGenerator.getGenerator(gen)); + // Set UI override for Extra Arguments + String extraArgsStr = settings.get(CMAKE_ARGUMENTS, ""); //$NON-NLS-1$ + // Convert String of args, separated by 1 or more spaces, into list of Strings + List extraArgs = Arrays.stream(extraArgsStr.split("\\s+")).map(entry -> entry.trim()) //$NON-NLS-1$ + .collect(Collectors.toList()); + retVal.setExtraArguments(extraArgs); + // Set UI override for cmake build command, unless it's the default + String buildCommand = settings.get(BUILD_COMMAND, BUILD_COMMAND_DEFAULT); + if (!buildCommand.isBlank() && !BUILD_COMMAND_DEFAULT.equals(buildCommand)) { + retVal.setUseDefaultCommand(false); + retVal.setCommand(buildCommand); + } + } + return retVal; } } // SimpleOsOverridesSelector } diff --git a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CommandDescriptorBuilder.java b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CommandDescriptorBuilder.java index 81702a28391..a0957a66df4 100644 --- a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CommandDescriptorBuilder.java +++ b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/CommandDescriptorBuilder.java @@ -56,7 +56,7 @@ class CommandDescriptorBuilder { List env = new ArrayList<>(); // defaults for all OSes... - args.add("cmake"); //$NON-NLS-1$ + args.add(CMakeBuildConfiguration.BUILD_COMMAND_DEFAULT); /* add general settings */ if (cmakeProperties.isWarnNoDev()) args.add("-Wno-dev"); //$NON-NLS-1$ @@ -111,7 +111,7 @@ class CommandDescriptorBuilder { IOsOverrides osOverrides = overridesSelector.getOsOverrides(cmakeProperties); if (osOverrides.getUseDefaultCommand()) { - args.add("cmake"); //$NON-NLS-1$ + args.add(CMakeBuildConfiguration.BUILD_COMMAND_DEFAULT); } else { IStringVariableManager varManager = VariablesPlugin.getDefault().getStringVariableManager(); String cmd = varManager.performStringSubstitution(osOverrides.getCommand()); diff --git a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/properties/AbstractOsOverrides.java b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/properties/AbstractOsOverrides.java index 4451ca6ad69..d2b644ce404 100644 --- a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/properties/AbstractOsOverrides.java +++ b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/internal/properties/AbstractOsOverrides.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; +import org.eclipse.cdt.cmake.core.internal.CMakeBuildConfiguration; import org.eclipse.cdt.cmake.core.properties.CMakeGenerator; import org.eclipse.cdt.cmake.core.properties.IOsOverrides; @@ -42,7 +43,7 @@ public abstract class AbstractOsOverrides implements IOsOverrides { * Sets each value to its default. */ public void reset() { - setCommand("cmake"); //$NON-NLS-1$ + setCommand(CMakeBuildConfiguration.BUILD_COMMAND_DEFAULT); useDefaultCommand = true; setGenerator(CMakeGenerator.UnixMakefiles); extraArguments.clear(); diff --git a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/properties/CMakeGenerator.java b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/properties/CMakeGenerator.java index 553cb0767d5..4ff5a2296c4 100644 --- a/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/properties/CMakeGenerator.java +++ b/cmake/org.eclipse.cdt.cmake.core/src/org/eclipse/cdt/cmake/core/properties/CMakeGenerator.java @@ -81,4 +81,16 @@ public enum CMakeGenerator { public String getIgnoreErrOption() { return ignoreErrOption; } + + /** + * @since 1.5 + */ + public static CMakeGenerator getGenerator(String generatorName) { + for (CMakeGenerator gen : values()) { + if (gen.getCMakeName().equals(generatorName)) { + return gen; + } + } + return null; + } } diff --git a/cmake/org.eclipse.cdt.cmake.ui.tests/manualTests/Bug579242_manual_tests.md b/cmake/org.eclipse.cdt.cmake.ui.tests/manualTests/Bug579242_manual_tests.md new file mode 100644 index 00000000000..26d5ad05b51 --- /dev/null +++ b/cmake/org.eclipse.cdt.cmake.ui.tests/manualTests/Bug579242_manual_tests.md @@ -0,0 +1,331 @@ +Bug 579242 - Ninja generator not connected + +## Overview +Tests that it is possible to control the CMake build using the Launch Bar Launch Configuration > Build Settings tab. +The Build Settings page allows the user to control: + + * "Use these settings" checkbox allows user to use these settings instead of operating system defaults. + * Generator "Unix Makefiles" or "Ninja" radio group allows choice of CMake generator. + * "Additional CMake arguments" allows variable=value arguments to be passed to CMake CACHE entry to customise settings for the project. + +## Test cases +The following test cases use a Launch Target set to Local. + +### 1) Operating system defaults used +#### 1.1) Launch Bar Launch Mode=Run, CMake Settings > "Use these settings"=unchecked + Expected: Build uses default generator (win32: -G MinGW Makefiles) +#### 1.2) Launch Bar Launch Mode=Debug, CMake Settings > "Use these settings"=unchecked + Expected: Build uses default generator (win32: -G MinGW Makefiles) + +### 2) Build Settings specific generator used: +Note, the Build Settings tab settings are stored separately for Run mode and Debug mode. +#### 2.1) Launch Bar Launch Mode=Run, CMake Settings > Use these settings=checked, Generator=Ninja + Expected: Build uses generator Ninja +#### 2.2) Launch Bar Launch Mode=Debug, CMake Settings > Use these settings=checked, Generator=Unix Makefiles + Expected: Build uses generator Unix Makefiles +#### 2.3) Build Settings are remembered +#### 2.4) Build Settings for Run mode can be different to settings stored for Debug + +### 3) Build Settings specific Additional CMake arguments: +#### 3.1) CMake Settings > Use these settings=checked, Additional CMake arguments are used during build +#### 3.2) CMake Settings > Use these settings=unchecked, Additional CMake arguments are NOT used during build + +### 4) Build Settings specific Build and Clean command: +Note, not tested. These may be removed in future. + +## Setup & prerequisites +### Setup Host + Note, these instructions do not require the following tools to be added to the system path environment variable in the OS before starting Eclipse. This allows a clean environment to be maintained. + +- Install Eclipse/CDT on host. +- Install gcc toolchain and make tools on host. + - On Windows I used msys64 (https://www.msys2.org/), which contains mingw64. +- Install CMake and Ninja on host. + +### In Eclipse, setup tool paths. + #### Toolchain + When using a recognised gcc toolchain (mingw64 is one of these), CDT automatically registers the toolchain for use within the workbench. + * To check if the toolchain is registered, open Preferences > C/C++ > Core Build Toolchains. In the Available Toolchains list, check if it contains the toolchain you installed on the host. + +For example, when using mingw64 the following toolchain is available: + + Type Name OS Arch + GCC win32 x86_64 C:\msys64\mingw64\bin\gcc.exe win32 x86_64 +Otherwise, register your toolchain by clicking Add... in the User Defined Toolchains list. + +#### CMake & Ninja +* Open Preferences > C/C++ > Build > Environment and click Add... + + In Name enter "PATH" and in Value enter the path to CMake and Ninja, for example + + `C:\Program Files\CMake\bin;C:\Ninja\bin` + + + You probably want to make sure "Append variables to native environment" (default) is selected. + +#### Create a CMake project +* In Eclipse, choose File > C/C++ Project. +* In the New C/C++ Project wizard, choose CMake in the left hand side sash and then CMake Project and click Next. +* Enter a project name, for example helloworld and click Finish. +* In the Project Explorer, expand the generated project. It contains 3 files : + + helloworld.cpp + + CMakeLists.txt + + config.h.in + + +## Test Execution +### 20240129 Windows 10. All tests pass. + +### Setup + Create CMake Project called helloworld. +### 1) Operating system defaults used +#### 1.1) Launch Bar Launch Mode=Run, CMake Settings > "Use these settings"=unchecked + * Set Launch Bar Launch Mode to Run. + * Set CMake Settings > "Use these settings" to unchecked. + * On the Launch Bar, click Build button. + +Expected: Build uses default generator (win32: -G MinGW Makefiles) + +Actual: + + Configuring in: C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\default + cmake -G MinGW Makefiles -DCMAKE_EXPORT_COMPILE_COMMANDS=ON C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld + -- The C compiler identification is GNU 11.2.0 + -- The CXX compiler identification is GNU 11.2.0 + -- Detecting C compiler ABI info + -- Detecting C compiler ABI info - done + -- Check for working C compiler: C:/msys64/mingw64/bin/cc.exe - skipped + -- Detecting C compile features + -- Detecting C compile features - done + -- Detecting CXX compiler ABI info + -- Detecting CXX compiler ABI info - done + -- Check for working CXX compiler: C:/msys64/mingw64/bin/c++.exe - skipped + -- Detecting CXX compile features + -- Detecting CXX compile features - done + -- Configuring done (3.1s) + -- Generating done (0.0s) + -- Build files have been written to: C:/Users/betamax/cdt-only2/runtime-New_configuration(1)/helloworld/build/default + Building in: C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\default + cmake --build . --target all + [ 50%] Building CXX object CMakeFiles/helloworld.dir/helloworld.cpp.obj + [100%] Linking CXX executable helloworld.exe + [100%] Built target helloworld + Build complete (0 errors, 0 warnings): C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\default + +#### 1.2) Launch Bar Launch Mode=Debug, CMake Settings > "Use these settings"=unchecked + * Set Launch Bar Launch Mode to Debug. + * Make sure CMake Settings > "Use these settings" to unchecked. + * On the Launch Bar, click Build button. + +Expected: Build uses default generator (win32: -G MinGW Makefiles) + +Actual: + + Configuring in: C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\cmake.debug.win32.x86_64 + cmake -G MinGW Makefiles -DCMAKE_EXPORT_COMPILE_COMMANDS=ON C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld + -- The C compiler identification is GNU 11.2.0 + -- The CXX compiler identification is GNU 11.2.0 + -- Detecting C compiler ABI info + -- Detecting C compiler ABI info - done + -- Check for working C compiler: C:/msys64/mingw64/bin/cc.exe - skipped + -- Detecting C compile features + -- Detecting C compile features - done + -- Detecting CXX compiler ABI info + -- Detecting CXX compiler ABI info - done + -- Check for working CXX compiler: C:/msys64/mingw64/bin/c++.exe - skipped + -- Detecting CXX compile features + -- Detecting CXX compile features - done + -- Configuring done (2.8s) + -- Generating done (0.0s) + -- Build files have been written to: C:/Users/betamax/cdt-only2/runtime-New_configuration(1)/helloworld/build/cmake.debug.win32.x86_64 + Building in: C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\cmake.debug.win32.x86_64 + cmake --build . --target all + [ 50%] Building CXX object CMakeFiles/helloworld.dir/helloworld.cpp.obj + [100%] Linking CXX executable helloworld.exe + [100%] Built target helloworld + Build complete (0 errors, 0 warnings): C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\cmake.debug.win32.x86_64 + + +### 2) Build Settings specific generator used: +#### 2.1) Launch Bar Launch Mode=Run, CMake Settings > Use these settings=checked, Generator=Ninja + * Set Launch Bar Launch Mode to Run. + * Set CMake Settings > "Use these settings" to checked. + * Make sure CMake Settings > Generator is set to Ninja. + * In Project Explorer, delete the build directory. + * On the Launch Bar, click Build button. + +Expected: Build uses generator Ninja + +Actual: + + Configuring in: C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\default + cmake -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld + -- The C compiler identification is GNU 11.2.0 + -- The CXX compiler identification is GNU 11.2.0 + -- Detecting C compiler ABI info + -- Detecting C compiler ABI info - done + -- Check for working C compiler: C:/msys64/mingw64/bin/cc.exe - skipped + -- Detecting C compile features + -- Detecting C compile features - done + -- Detecting CXX compiler ABI info + -- Detecting CXX compiler ABI info - done + -- Check for working CXX compiler: C:/msys64/mingw64/bin/c++.exe - skipped + -- Detecting CXX compile features + -- Detecting CXX compile features - done + -- Configuring done (2.3s) + -- Generating done (0.0s) + -- Build files have been written to: C:/Users/betamax/cdt-only2/runtime-New_configuration(1)/helloworld/build/default + Building in: C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\default + cmake --build . --target all + [1/2] Building CXX object CMakeFiles/helloworld.dir/helloworld.cpp.obj + [2/2] Linking CXX executable helloworld.exe + Build complete (0 errors, 0 warnings): C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\default + +#### 2.2) Launch Bar Launch Mode=Debug, CMake Settings > Use these settings=checked, Generator=Unix Makefiles + * Set Launch Bar Launch Mode to Debug. + * Set CMake Settings > "Use these settings" to checked. + * Make sure CMake Settings > Generator is set to Unix Makefiles. + * On the Launch Bar, click Build button. + +Expected: Build uses generator Unix Makefiles + +Actual: + + Configuring in: C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\cmake.debug.win32.x86_64 + cmake -G Unix Makefiles -DCMAKE_EXPORT_COMPILE_COMMANDS=ON C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld + -- The C compiler identification is GNU 11.2.0 + -- The CXX compiler identification is GNU 11.2.0 + -- Detecting C compiler ABI info + -- Detecting C compiler ABI info - done + -- Check for working C compiler: C:/msys64/mingw64/bin/cc.exe - skipped + -- Detecting C compile features + -- Detecting C compile features - done + -- Detecting CXX compiler ABI info + -- Detecting CXX compiler ABI info - done + -- Check for working CXX compiler: C:/msys64/mingw64/bin/c++.exe - skipped + -- Detecting CXX compile features + -- Detecting CXX compile features - done + -- Configuring done (3.3s) + -- Generating done (0.0s) + -- Build files have been written to: C:/Users/betamax/cdt-only2/runtime-New_configuration(1)/helloworld/build/cmake.debug.win32.x86_64 + Building in: C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\cmake.debug.win32.x86_64 + cmake --build . --target all + [ 50%] Building CXX object CMakeFiles/helloworld.dir/helloworld.cpp.obj + [100%] Linking CXX executable helloworld.exe + [100%] Built target helloworld + Build complete (0 errors, 0 warnings): C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\cmake.debug.win32.x86_64 + + +#### 2.3) Build Settings are remembered + * With Launch Bar Launch Mode still set to Debug. + * Open CMake Settings > "Use these settings". + +Expected: + + checked. + +Actual: + + checked. + +#### 2.4) Build Settings for Run mode can be different to settings stored for Debug + * Make sure Launch Bar Launch Mode still set to Debug. + * Set CMake Settings > "Use these settings" to unchecked. + * Set Launch Bar Launch Mode to Run. + * Open CMake Settings > "Use these settings". + +Expected: + + checked. + +Actual: + + checked. + * Set Launch Bar Launch Mode to Debug. + * Open CMake Settings > "Use these settings". + +Expected: + + unchecked. + +Actual: + + unchecked. + + +### 3) Build Settings specific Additional CMake arguments: +#### 3.1) CMake Settings > Use these settings=checked, Additional CMake arguments are used during build + * Make sure Launch Bar Launch Mode still set to Debug. + * Set CMake Settings > "Use these settings" to checked. + * Set CMake Settings > Generator to Ninja. + * Set CMake Settings > "Additional CMake arguments" to "-DVAR=TEST" + * On the Launch Bar, click Build button. + +Expected: args in "Additional CMake arguments" are used during build. + +Actual: + + Configuring in: C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\cmake.debug.win32.x86_64 + cmake -G Ninja -DVAR=TEST -DCMAKE_EXPORT_COMPILE_COMMANDS=ON C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld + -- The C compiler identification is GNU 11.2.0 + -- The CXX compiler identification is GNU 11.2.0 + -- Detecting C compiler ABI info + -- Detecting C compiler ABI info - done + -- Check for working C compiler: C:/msys64/mingw64/bin/cc.exe - skipped + -- Detecting C compile features + -- Detecting C compile features - done + -- Detecting CXX compiler ABI info + -- Detecting CXX compiler ABI info - done + -- Check for working CXX compiler: C:/msys64/mingw64/bin/c++.exe - skipped + -- Detecting CXX compile features + -- Detecting CXX compile features - done + -- Configuring done (2.4s) + -- Generating done (0.0s) + CMake Warning: + Manually-specified variables were not used by the project: + + VAR + + + -- Build files have been written to: C:/Users/betamax/cdt-only2/runtime-New_configuration(1)/helloworld/build/cmake.debug.win32.x86_64 + Building in: C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\cmake.debug.win32.x86_64 + cmake --build . --target all + [1/2] Building CXX object CMakeFiles/helloworld.dir/helloworld.cpp.obj + [2/2] Linking CXX executable helloworld.exe + Build complete (0 errors, 0 warnings): C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\cmake.debug.win32.x86_64 + +#### 3.2) CMake Settings > Use these settings=unchecked, Additional CMake arguments are NOT used during build + * Make sure Launch Bar Launch Mode still set to Debug. + * Set CMake Settings > "Use these settings" to unchecked. + * On the Launch Bar, click Build button. + +Expected: args in "Additional CMake arguments" are NOT used during build. + +Actual: + + Configuring in: C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\cmake.debug.win32.x86_64 + cmake -G MinGW Makefiles -DCMAKE_EXPORT_COMPILE_COMMANDS=ON C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld + -- The C compiler identification is GNU 11.2.0 + -- The CXX compiler identification is GNU 11.2.0 + -- Detecting C compiler ABI info + -- Detecting C compiler ABI info - done + -- Check for working C compiler: C:/msys64/mingw64/bin/cc.exe - skipped + -- Detecting C compile features + -- Detecting C compile features - done + -- Detecting CXX compiler ABI info + -- Detecting CXX compiler ABI info - done + -- Check for working CXX compiler: C:/msys64/mingw64/bin/c++.exe - skipped + -- Detecting CXX compile features + -- Detecting CXX compile features - done + -- Configuring done (2.5s) + -- Generating done (0.0s) + -- Build files have been written to: C:/Users/betamax/cdt-only2/runtime-New_configuration(1)/helloworld/build/cmake.debug.win32.x86_64 + Building in: C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\cmake.debug.win32.x86_64 + cmake --build . --target all + [ 50%] Building CXX object CMakeFiles/helloworld.dir/helloworld.cpp.obj + [100%] Linking CXX executable helloworld.exe + [100%] Built target helloworld + Build complete (0 errors, 0 warnings): C:\Users\betamax\cdt-only2\runtime-New_configuration(1)\helloworld\build\cmake.debug.win32.x86_64 diff --git a/cmake/org.eclipse.cdt.cmake.ui/META-INF/MANIFEST.MF b/cmake/org.eclipse.cdt.cmake.ui/META-INF/MANIFEST.MF index e1aa576a785..a646de41f3f 100644 --- a/cmake/org.eclipse.cdt.cmake.ui/META-INF/MANIFEST.MF +++ b/cmake/org.eclipse.cdt.cmake.ui/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.cdt.cmake.ui;singleton:=true -Bundle-Version: 1.4.300.qualifier +Bundle-Version: 1.4.400.qualifier Bundle-Activator: org.eclipse.cdt.cmake.ui.internal.Activator Bundle-Vendor: %providerName Require-Bundle: org.eclipse.core.runtime, diff --git a/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/CMakeBuildTab.java b/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/CMakeBuildTab.java index 24636bb0a36..8d8b77064d2 100644 --- a/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/CMakeBuildTab.java +++ b/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/CMakeBuildTab.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.cdt.cmake.ui.internal; +import java.util.HashMap; import java.util.Map; import org.eclipse.cdt.cmake.core.internal.CMakeBuildConfiguration; @@ -32,11 +33,20 @@ import org.eclipse.swt.widgets.Text; public class CMakeBuildTab extends CommonBuildTab { + /** + * Checkbox allowing user to choose these settings over the default operating system defaults. + * This is connected to the CMakeBuildConfiguration.CMAKE_USE_UI_OVERRIDES preference. + */ + private Button useUiCmakeSettings; private Button unixGenButton; private Button ninjaGenButton; private Text cmakeArgsText; private Text buildCommandText; private Text cleanCommandText; + private Label generatorLabel; + private Label cmakeArgsLabel; + private Label buildCommandLabel; + private Label cleanCommandLabel; @Override protected String getBuildConfigProviderId() { @@ -57,8 +67,19 @@ public class CMakeBuildTab extends CommonBuildTab { cmakeGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); cmakeGroup.setLayout(new GridLayout()); - Label label = new Label(cmakeGroup, SWT.NONE); - label.setText(Messages.CMakeBuildTab_Generator); + useUiCmakeSettings = new Button(cmakeGroup, SWT.CHECK); + useUiCmakeSettings.setText(Messages.CMakeBuildTab_useUICmakeSettings); + useUiCmakeSettings.setToolTipText(Messages.CMakeBuildTab_useUICmakeSettingsTip); + useUiCmakeSettings.addSelectionListener(new SelectionAdapter() { + @Override + public void widgetSelected(SelectionEvent e) { + updateEnablement(); + updateLaunchConfigurationDialog(); + } + }); + + generatorLabel = new Label(cmakeGroup, SWT.NONE); + generatorLabel.setText(Messages.CMakeBuildTab_Generator); Composite genComp = new Composite(cmakeGroup, SWT.BORDER); genComp.setLayout(new GridLayout(2, true)); @@ -81,31 +102,50 @@ public class CMakeBuildTab extends CommonBuildTab { } }); - label = new Label(cmakeGroup, SWT.NONE); - label.setText(Messages.CMakeBuildTab_CMakeArgs); + cmakeArgsLabel = new Label(cmakeGroup, SWT.NONE); + cmakeArgsLabel.setText(Messages.CMakeBuildTab_CMakeArgs); cmakeArgsText = new Text(cmakeGroup, SWT.BORDER); cmakeArgsText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); cmakeArgsText.addModifyListener(e -> updateLaunchConfigurationDialog()); - label = new Label(cmakeGroup, SWT.NONE); - label.setText(Messages.CMakeBuildTab_BuildCommand); + buildCommandLabel = new Label(cmakeGroup, SWT.NONE); + buildCommandLabel.setText(Messages.CMakeBuildTab_BuildCommand); buildCommandText = new Text(cmakeGroup, SWT.BORDER); buildCommandText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); buildCommandText.addModifyListener(e -> updateLaunchConfigurationDialog()); - label = new Label(cmakeGroup, SWT.NONE); - label.setText(Messages.CMakeBuildTab_CleanCommand); + cleanCommandLabel = new Label(cmakeGroup, SWT.NONE); + cleanCommandLabel.setText(Messages.CMakeBuildTab_CleanCommand); cleanCommandText = new Text(cmakeGroup, SWT.BORDER); cleanCommandText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); cleanCommandText.addModifyListener(e -> updateLaunchConfigurationDialog()); } + /** + * Updates the enabled state of the CMake settings controls based on useUiCmakeSettings checkbox + */ + private void updateEnablement() { + boolean isSelected = useUiCmakeSettings.getSelection(); + generatorLabel.setEnabled(isSelected); + unixGenButton.setEnabled(isSelected); + ninjaGenButton.setEnabled(isSelected); + cmakeArgsLabel.setEnabled(isSelected); + cmakeArgsText.setEnabled(isSelected); + buildCommandLabel.setEnabled(isSelected); + buildCommandText.setEnabled(isSelected); + cleanCommandLabel.setEnabled(isSelected); + cleanCommandText.setEnabled(isSelected); + } + @Override public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { - // TODO + // Set defaults for Build Settings + ICBuildConfiguration buildConfig = getBuildConfiguration(); + buildConfig.setProperty(CMakeBuildConfiguration.CMAKE_USE_UI_OVERRIDES, + Boolean.toString(CMakeBuildConfiguration.CMAKE_USE_UI_OVERRIDES_DEFAULT)); } @Override @@ -133,10 +173,14 @@ public class CMakeBuildTab extends CommonBuildTab { String cleanCommand = buildConfig.getProperty(CMakeBuildConfiguration.CLEAN_COMMAND); if (cleanCommand != null) { - cleanCommandText.setText(buildCommand); + cleanCommandText.setText(cleanCommand); } else { cleanCommandText.setText(""); //$NON-NLS-1$ } + + boolean isSelected = Boolean.valueOf(buildConfig.getProperty(CMakeBuildConfiguration.CMAKE_USE_UI_OVERRIDES)); + useUiCmakeSettings.setSelection(isSelected); + updateEnablement(); } private void updateGeneratorButtons(String generator) { @@ -153,8 +197,8 @@ public class CMakeBuildTab extends CommonBuildTab { ICBuildConfiguration buildConfig = getBuildConfiguration(); - buildConfig.setProperty(CMakeBuildConfiguration.CMAKE_GENERATOR, - ninjaGenButton.getSelection() ? "Ninja" : "Unix Makefiles"); //$NON-NLS-1$ //$NON-NLS-2$ + String gen = ninjaGenButton.getSelection() ? "Ninja" : "Unix Makefiles"; //$NON-NLS-1$ //$NON-NLS-2$ + buildConfig.setProperty(CMakeBuildConfiguration.CMAKE_GENERATOR, gen); String cmakeArgs = cmakeArgsText.getText().trim(); if (!cmakeArgs.isEmpty()) { @@ -176,6 +220,13 @@ public class CMakeBuildTab extends CommonBuildTab { } else { buildConfig.removeProperty(CMakeBuildConfiguration.CLEAN_COMMAND); } + + boolean isSelected = useUiCmakeSettings.getSelection(); + buildConfig.setProperty(CMakeBuildConfiguration.CMAKE_USE_UI_OVERRIDES, Boolean.toString(isSelected)); + + Map saved = new HashMap<>(); + saved.put(CMakeBuildConfiguration.CMAKE_USE_UI_OVERRIDES, Boolean.toString(isSelected)); + getBuildConfiguration().setProperties(saved); } @Override diff --git a/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/Messages.java b/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/Messages.java index 5593767532a..deeb27c78e3 100644 --- a/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/Messages.java +++ b/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/Messages.java @@ -24,6 +24,8 @@ public class Messages extends NLS { public static String CMakeBuildTab_Settings; public static String CMakeBuildTab_Toolchain; public static String CMakeBuildTab_UnixMakefiles; + public static String CMakeBuildTab_useUICmakeSettings; + public static String CMakeBuildTab_useUICmakeSettingsTip; public static String CMakePreferencePage_Add; public static String CMakePreferencePage_ConfirmRemoveDesc; public static String CMakePreferencePage_ConfirmRemoveTitle; diff --git a/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/messages.properties b/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/messages.properties index c1588d15a4f..b13c7c24520 100644 --- a/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/messages.properties +++ b/cmake/org.eclipse.cdt.cmake.ui/src/org/eclipse/cdt/cmake/ui/internal/messages.properties @@ -8,6 +8,8 @@ CMakeBuildTab_NoneAvailable=No Toolchains Available for this Target CMakeBuildTab_Settings=CMake Settings CMakeBuildTab_Toolchain=Toolchain CMakeBuildTab_UnixMakefiles=Unix Makefiles +CMakeBuildTab_useUICmakeSettings=Use these settings +CMakeBuildTab_useUICmakeSettingsTip=Use these settings instead of the operating system defaults CMakePreferencePage_Add=Add... CMakePreferencePage_ConfirmRemoveDesc=Do you wish to deregister the selected files? CMakePreferencePage_ConfirmRemoveTitle=Deregister CMake ToolChain File