From f4f1f44b2f87f584109ab75d8d24f085e2c16f61 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Thu, 4 Dec 2008 11:26:34 +0000 Subject: Added preferences for Cygwin, MinGW and MSYS paths on windows. --- .../org/rtems/cdt/Constants.java | 37 +++++- .../org/rtems/cdt/Storage.java | 140 ++++++++++++++++++--- .../org/rtems/cdt/build/CommandLineGenerator.java | 7 ++ .../cdt/build/CygwinCommandLineGenerator.java | 21 ++++ .../rtems/cdt/build/CygwinEnvironmentSupplier.java | 21 ++++ .../cdt/build/CygwinRunScannerInfoProvider.java | 21 ++++ .../cdt/build/CygwinScannerInfoCollector.java | 60 +++++++++ .../org/rtems/cdt/build/EnvironmentSupplier.java | 31 +++-- .../rtems/cdt/build/RunScannerInfoProvider.java | 9 +- .../rtems/cdt/build/WinScannerInfoCollector.java | 60 --------- .../cdt/preferences/PreferenceInitializer.java | 6 + .../org/rtems/cdt/preferences/PreferencePage.java | 26 +++- .../org/rtems/cdt/properties/PropertyPage.java | 4 +- .../org/rtems/cdt/wizards/FinishSetup.java | 4 +- org.rtems.cdt.toolchain2/plugin.xml | 36 +++--- 15 files changed, 365 insertions(+), 118 deletions(-) create mode 100644 org.rtems.cdt.toolchain2/org/rtems/cdt/build/CygwinCommandLineGenerator.java create mode 100644 org.rtems.cdt.toolchain2/org/rtems/cdt/build/CygwinEnvironmentSupplier.java create mode 100644 org.rtems.cdt.toolchain2/org/rtems/cdt/build/CygwinRunScannerInfoProvider.java create mode 100644 org.rtems.cdt.toolchain2/org/rtems/cdt/build/CygwinScannerInfoCollector.java delete mode 100644 org.rtems.cdt.toolchain2/org/rtems/cdt/build/WinScannerInfoCollector.java diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/Constants.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/Constants.java index 08ccd04..829a5b2 100644 --- a/org.rtems.cdt.toolchain2/org/rtems/cdt/Constants.java +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/Constants.java @@ -12,20 +12,44 @@ package org.rtems.cdt; +import java.util.Map; + public class Constants { - public static final String PATH_SEPERATOR = System.getProperty( "path.separator"); + public static final String PATH_SEPARATOR = System.getProperty( "path.separator"); + + public static final String PATH_VARIABLE_NAME = getPathVariableName(); + + public static final String PLATFORM_DEFAULT = "default"; + + public static final String PLATFORM_CYGWIN = "cygwin"; public static final String BSP_PATH_MAKE_VARIABLE = "PROJECT_RELEASE"; public static final String DEFAULT_BASE_PATH = "/opt/rtems-4.9"; public static final String DEFAULT_BSP_PATH = "/opt/rtems-4.9/powerpc-rtems4.9/psim"; + + public static final String DEFAULT_CYGWIN_PATH = "C:\\"; + + public static final String DEFAULT_MINGW_PATH = "C:\\"; + + public static final String DEFAULT_MSYS_PATH = "C:\\"; public static final String KEY_PREFIX = "org.rtems.cdt"; + public static final String PLATFORM_KEY = KEY_PREFIX + ".platform"; + public static final String BASE_PATH_KEY = KEY_PREFIX + ".basePath"; public static final String BSP_PATH_KEY = KEY_PREFIX + ".bspPath"; + + public static final String CYGWIN_PATH_KEY = KEY_PREFIX + ".cygwinPath"; + + public static final String MINGW_PATH_KEY = KEY_PREFIX + ".mingwPath"; + + public static final String MSYS_PATH_KEY = KEY_PREFIX + ".msysPath"; + + public static final String PATH_PREPEND_KEY = KEY_PREFIX + ".pathPrepend"; public static final String TOOL_KEY_PREFIX = KEY_PREFIX + ".tool"; @@ -59,6 +83,17 @@ public class Constants { public static final String TOOL_OPTIONS_LINKER_CPP_KEY = TOOL_LINKER_CPP_KEY + TOOL_OPTIONS_KEY_POSTFIX; + private static String getPathVariableName() { + Map env = System.getenv(); + for (String name : env.keySet()) { + if (name.equalsIgnoreCase( "PATH")) { + return name; + } + } + + return "PATH"; + } + private Constants() { // Do nothing } diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/Storage.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/Storage.java index 5a4ae30..a1c2190 100644 --- a/org.rtems.cdt.toolchain2/org/rtems/cdt/Storage.java +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/Storage.java @@ -13,11 +13,13 @@ package org.rtems.cdt; import java.io.BufferedReader; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.List; +import java.util.Map; import org.eclipse.cdt.build.core.scannerconfig.CfgInfoContext; import org.eclipse.cdt.build.internal.core.scannerconfig.CfgDiscoveredPathManager; @@ -28,6 +30,8 @@ import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.QualifiedName; @@ -65,9 +69,9 @@ public class Storage { if (value == null) { if (key.startsWith( Constants.TOOL_KEY_PREFIX)) { - updateTools( project); + changePlatform( project, Constants.PLATFORM_DEFAULT); } else { - value = Activator.getDefault().getPreferenceStore().getString( key); + value = getPreference( key); setProperty( project, key, value); } } @@ -104,26 +108,130 @@ public class Storage { return cfg; } - public static void updateTools( IProject project) { - String path = getProperty( project, Constants.BSP_PATH_KEY); + public static String prependToPath( String path, String part) { + if (path == null || path.isEmpty()) { + return part; + } else { + return part + Constants.PATH_SEPARATOR + path; + } + } + + public static String prependToPathByPreference( String path, String key) { + String basePath = getPreference( key); + + if (basePath != null) { + IPath part = new Path( basePath).append( "bin"); + + return prependToPath( path, part.toOSString()); + } + + return path; + } + + public static String prependToPathByProperty( IProject project, String path, String key) { + String basePath = getProperty( project, key); + + if (basePath != null) { + IPath part = new Path( basePath).append( "bin"); + + return prependToPath( path, part.toOSString()); + } + + return path; + } + + public static void clearPlatform( IProject project) { + setProperty( project, Constants.PLATFORM_KEY, null); + + // Delete discovered paths for all configurations of the project + for (IConfiguration cfg : getConfigurations( project)) { + CfgDiscoveredPathManager.getInstance().removeDiscoveredInfo( + project, + new CfgInfoContext( cfg) + ); + } + } + + public static String getPlatform( IProject project) { + return getPristineProperty( project, Constants.PLATFORM_KEY); + } + + public static void changePlatform( IProject project, String newPlatform) { + String platform = getPlatform( project); + + // Check if we have already the requested platform + if (platform != null && platform == newPlatform) { + // Nothing to do + return; + } + + // Set new platform + setProperty( project, Constants.PLATFORM_KEY, newPlatform); + + // Update path prepends + String path = null; + if (Platform.getOS().equals( Platform.OS_WIN32)) { + if (newPlatform.equals( Constants.PLATFORM_CYGWIN)) { + path = prependToPathByPreference( path, Constants.CYGWIN_PATH_KEY); + } else { + path = prependToPathByPreference( path, Constants.MINGW_PATH_KEY); + path = prependToPathByPreference( path, Constants.MSYS_PATH_KEY); + } + } + path = prependToPathByProperty( project, path, Constants.BASE_PATH_KEY); + setProperty( project, Constants.PATH_PREPEND_KEY, path); + + // Update tools + updateTools( project, newPlatform); + } + + private static void updateTools( IProject project, String platform) { + String bspPath = getProperty( project, Constants.BSP_PATH_KEY); + IPath make = new Path( "make"); // Translate path if necessary if (Platform.getOS().equals( Platform.OS_WIN32)) { - // FIXME: MinGW? - - String device = path.split( ":") [0]; - path = path.replaceFirst( "^" + device + ":", "/cygdrive/" + device).replaceAll( "\\\\", "/"); + if (platform.equals( Constants.PLATFORM_CYGWIN)) { + String s [] = bspPath.split( ":"); + if (s.length > 0) { + bspPath = bspPath.replaceFirst( "^" + s [0] + ":", "/cygdrive/" + s [0]); + } + } + bspPath = bspPath.replaceAll( "\\\\", "/"); } // Create make process builder - ProcessBuilder pb = new ProcessBuilder( - "make", - Constants.BSP_PATH_MAKE_VARIABLE + "=" + path - ); + ProcessBuilder pb = new ProcessBuilder(); // Change working directory to the Makefile location pb.directory( Activator.getDefault().getMakefileLocation().toFile()); + // Update path environment variable + Map env = pb.environment(); + String path = env.get( Constants.PATH_VARIABLE_NAME); + String part = getProperty( project, Constants.PATH_PREPEND_KEY); + path = Storage.prependToPath( path, part); + env.put( Constants.PATH_VARIABLE_NAME, path); + + // On windows we have to search for the make program in the new path environment + if (Platform.getOS().equals( Platform.OS_WIN32)) { + String parts [] = path.split( Constants.PATH_SEPARATOR); + for (String p : parts) { + IPath makeCandidate = new Path( p).append( "make.exe"); + File file = new File( makeCandidate.toOSString()); + if (file.exists()) { + make = makeCandidate; + break; + } + } + } + + // Set command line + pb.command( + make.toOSString(), + Constants.BSP_PATH_MAKE_VARIABLE + "=" + bspPath + ); + // Start make process and parse its output Process p = null; try { @@ -186,14 +294,6 @@ public class Storage { } } } - - // Delete discovered paths for all configurations of the project - for (IConfiguration cfg : getConfigurations( project)) { - CfgDiscoveredPathManager.getInstance().removeDiscoveredInfo( - project, - new CfgInfoContext( cfg) - ); - } } private static void updateTool( IProject project, String toolKey, String command, List options) { diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/build/CommandLineGenerator.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/CommandLineGenerator.java index 6276708..9fa7bdd 100644 --- a/org.rtems.cdt.toolchain2/org/rtems/cdt/build/CommandLineGenerator.java +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/CommandLineGenerator.java @@ -21,6 +21,10 @@ import org.rtems.cdt.Constants; import org.rtems.cdt.Storage; public class CommandLineGenerator extends ManagedCommandLineGenerator implements IManagedCommandLineGenerator { + protected String getPlatform() { + return Constants.PLATFORM_DEFAULT; + } + public IManagedCommandLineInfo generateCommandLineInfo( ITool tool, String commandName, @@ -33,6 +37,9 @@ public class CommandLineGenerator extends ManagedCommandLineGenerator implements ) { // Get associated project of the tool IProject project = (IProject) tool.getParentResourceInfo().getParent().getOwner(); + + // Change platform + Storage.changePlatform( project, getPlatform()); // Determine tool key via the tool ID String id = tool.getId(); diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/build/CygwinCommandLineGenerator.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/CygwinCommandLineGenerator.java new file mode 100644 index 0000000..b7012e6 --- /dev/null +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/CygwinCommandLineGenerator.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2008 + * Embedded Brains GmbH + * Obere Lagerstr. 30 + * D-82178 Puchheim + * Germany + * rtems@embedded-brains.de + * + * The license and distribution terms for this file may be found in the file + * LICENSE in this distribution or at http://www.rtems.com/license/LICENSE. + */ + +package org.rtems.cdt.build; + +import org.rtems.cdt.Constants; + +public class CygwinCommandLineGenerator extends CommandLineGenerator { + protected String getPlatform() { + return Constants.PLATFORM_CYGWIN; + } +} diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/build/CygwinEnvironmentSupplier.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/CygwinEnvironmentSupplier.java new file mode 100644 index 0000000..cb0ecac --- /dev/null +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/CygwinEnvironmentSupplier.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2008 + * Embedded Brains GmbH + * Obere Lagerstr. 30 + * D-82178 Puchheim + * Germany + * rtems@embedded-brains.de + * + * The license and distribution terms for this file may be found in the file + * LICENSE in this distribution or at http://www.rtems.com/license/LICENSE. + */ + +package org.rtems.cdt.build; + +import org.rtems.cdt.Constants; + +public class CygwinEnvironmentSupplier extends EnvironmentSupplier { + protected String getPlatform() { + return Constants.PLATFORM_CYGWIN; + } +} \ No newline at end of file diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/build/CygwinRunScannerInfoProvider.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/CygwinRunScannerInfoProvider.java new file mode 100644 index 0000000..75027c3 --- /dev/null +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/CygwinRunScannerInfoProvider.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2008 + * Embedded Brains GmbH + * Obere Lagerstr. 30 + * D-82178 Puchheim + * Germany + * rtems@embedded-brains.de + * + * The license and distribution terms for this file may be found in the file + * LICENSE in this distribution or at http://www.rtems.com/license/LICENSE. + */ + +package org.rtems.cdt.build; + +import org.rtems.cdt.Constants; + +public class CygwinRunScannerInfoProvider extends RunScannerInfoProvider { + protected String getPlatform() { + return Constants.PLATFORM_CYGWIN; + } +} diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/build/CygwinScannerInfoCollector.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/CygwinScannerInfoCollector.java new file mode 100644 index 0000000..56e627d --- /dev/null +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/CygwinScannerInfoCollector.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2008 + * Embedded Brains GmbH + * Obere Lagerstr. 30 + * D-82178 Puchheim + * Germany + * rtems@embedded-brains.de + * + * The license and distribution terms for this file may be found in the file + * LICENSE in this distribution or at http://www.rtems.com/license/LICENSE. + */ + +package org.rtems.cdt.build; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.eclipse.cdt.make.core.scannerconfig.InfoContext; +import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector3; +import org.eclipse.cdt.make.core.scannerconfig.ScannerInfoTypes; +import org.eclipse.cdt.make.internal.core.scannerconfig2.PerProjectSICollector; +import org.eclipse.cdt.make.internal.core.scannerconfig.util.CygpathTranslator; +import org.eclipse.cdt.managedbuilder.scannerconfig.IManagedScannerInfoCollector; +import org.eclipse.core.resources.IProject; + +/** + * This class exists only to disable the specialized UI elements of the scanner configuration. + * + * See also 'org.eclipse.cdt.managedbuilder.internal.scannerconfig.DefaultGnuWinScannerInfoCollector'. + */ +public class CygwinScannerInfoCollector extends PerProjectSICollector implements IScannerInfoCollector3, IManagedScannerInfoCollector { + private IProject mProject; + + public void contributeToScannerConfig( Object resource, Map scannerInfo) { + List includes = (List) scannerInfo.get( ScannerInfoTypes.INCLUDE_PATHS); + List translatedIncludes = CygpathTranslator.translateIncludePaths( mProject, includes); + + Iterator iter = translatedIncludes.listIterator(); + while (iter.hasNext()) { + String convertedPath = iter.next(); + if (convertedPath.startsWith( "/")) { + iter.remove(); + } + } + scannerInfo.put( ScannerInfoTypes.INCLUDE_PATHS, translatedIncludes); + + super.contributeToScannerConfig( resource, scannerInfo); +} + + public void setProject( IProject project) { + mProject = project; + super.setProject( project); + } + + public void setInfoContext( InfoContext context) { + mProject = context.getProject(); + super.setInfoContext( context); + } +} diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/build/EnvironmentSupplier.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/EnvironmentSupplier.java index 2099038..acde119 100644 --- a/org.rtems.cdt.toolchain2/org/rtems/cdt/build/EnvironmentSupplier.java +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/EnvironmentSupplier.java @@ -13,38 +13,43 @@ package org.rtems.cdt.build; import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; -import org.eclipse.cdt.managedbuilder.core.IManagedProject; +import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable; +import org.eclipse.cdt.managedbuilder.envvar.IConfigurationEnvironmentVariableSupplier; import org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider; -import org.eclipse.cdt.managedbuilder.envvar.IProjectEnvironmentVariableSupplier; import org.eclipse.cdt.managedbuilder.internal.envvar.BuildEnvVar; import org.rtems.cdt.Constants; import org.rtems.cdt.Storage; -public class EnvironmentSupplier implements IProjectEnvironmentVariableSupplier { +public class EnvironmentSupplier implements IConfigurationEnvironmentVariableSupplier { private static final int PATH_INDEX = 0; private static final int VARIABLE_COUNT = 1; + + protected String getPlatform() { + return Constants.PLATFORM_DEFAULT; + } - public IBuildEnvironmentVariable getVariable( String name, IManagedProject project, IEnvironmentVariableProvider provider) { + public IBuildEnvironmentVariable getVariable( String name, IConfiguration configuration, IEnvironmentVariableProvider provider) { if (name.equals( "PATH")) { - IPath path = new Path( - Storage.getProperty( (IProject) project.getOwner(), Constants.BASE_PATH_KEY) - ); - path = path.append( "bin"); + IProject project = (IProject) configuration.getOwner(); + + // Change platform + Storage.changePlatform( project, getPlatform()); + + // Get path parts + String part = Storage.getProperty( project, Constants.PATH_PREPEND_KEY); - return new BuildEnvVar( name, path.toOSString(), IBuildEnvironmentVariable.ENVVAR_PREPEND, Constants.PATH_SEPERATOR); + return new BuildEnvVar( name, part, IBuildEnvironmentVariable.ENVVAR_PREPEND, Constants.PATH_SEPARATOR); } return null; } - public IBuildEnvironmentVariable [] getVariables( IManagedProject project, IEnvironmentVariableProvider provider) { + public IBuildEnvironmentVariable [] getVariables( IConfiguration configuration, IEnvironmentVariableProvider provider) { IBuildEnvironmentVariable variables [] = new IBuildEnvironmentVariable [VARIABLE_COUNT]; - variables [PATH_INDEX] = getVariable( "PATH", project, provider); + variables [PATH_INDEX] = getVariable( "PATH", configuration, provider); return variables; } diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/build/RunScannerInfoProvider.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/RunScannerInfoProvider.java index 2616602..1e11df3 100644 --- a/org.rtems.cdt.toolchain2/org/rtems/cdt/build/RunScannerInfoProvider.java +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/RunScannerInfoProvider.java @@ -19,7 +19,11 @@ import org.eclipse.core.runtime.Path; import org.rtems.cdt.Constants; import org.rtems.cdt.Storage; -public class RunScannerInfoProvider extends GCCSpecsRunSIProvider { +public class RunScannerInfoProvider extends GCCSpecsRunSIProvider { + protected String getPlatform() { + return Constants.PLATFORM_DEFAULT; + } + protected boolean initialize() { if (!super.initialize()) { return false; @@ -42,6 +46,9 @@ public class RunScannerInfoProvider extends GCCSpecsRunSIProvider { return false; } + // Change platform + Storage.changePlatform( project, getPlatform()); + /* * FIXME: Added absolute path since it seams that the build * environment is ignored. diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/build/WinScannerInfoCollector.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/build/WinScannerInfoCollector.java deleted file mode 100644 index 6667ade..0000000 --- a/org.rtems.cdt.toolchain2/org/rtems/cdt/build/WinScannerInfoCollector.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2008 - * Embedded Brains GmbH - * Obere Lagerstr. 30 - * D-82178 Puchheim - * Germany - * rtems@embedded-brains.de - * - * The license and distribution terms for this file may be found in the file - * LICENSE in this distribution or at http://www.rtems.com/license/LICENSE. - */ - -package org.rtems.cdt.build; - -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.eclipse.cdt.make.core.scannerconfig.InfoContext; -import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector3; -import org.eclipse.cdt.make.core.scannerconfig.ScannerInfoTypes; -import org.eclipse.cdt.make.internal.core.scannerconfig2.PerProjectSICollector; -import org.eclipse.cdt.make.internal.core.scannerconfig.util.CygpathTranslator; -import org.eclipse.cdt.managedbuilder.scannerconfig.IManagedScannerInfoCollector; -import org.eclipse.core.resources.IProject; - -/** - * This class exists only to disable the specialized UI elements of the scanner configuration. - * - * See also 'org.eclipse.cdt.managedbuilder.internal.scannerconfig.DefaultGnuWinScannerInfoCollector'. - */ -public class WinScannerInfoCollector extends PerProjectSICollector implements IScannerInfoCollector3, IManagedScannerInfoCollector { - private IProject mProject; - - public void contributeToScannerConfig( Object resource, Map scannerInfo) { - List includes = (List) scannerInfo.get( ScannerInfoTypes.INCLUDE_PATHS); - List translatedIncludes = CygpathTranslator.translateIncludePaths( mProject, includes); - - Iterator iter = translatedIncludes.listIterator(); - while (iter.hasNext()) { - String convertedPath = iter.next(); - if (convertedPath.startsWith( "/")) { - iter.remove(); - } - } - scannerInfo.put( ScannerInfoTypes.INCLUDE_PATHS, translatedIncludes); - - super.contributeToScannerConfig( resource, scannerInfo); - } - - public void setProject( IProject project) { - mProject = project; - super.setProject( project); - } - - public void setInfoContext( InfoContext context) { - mProject = context.getProject(); - super.setInfoContext( context); - } -} diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/preferences/PreferenceInitializer.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/preferences/PreferenceInitializer.java index 19d9232..c15343b 100644 --- a/org.rtems.cdt.toolchain2/org/rtems/cdt/preferences/PreferenceInitializer.java +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/preferences/PreferenceInitializer.java @@ -12,6 +12,7 @@ package org.rtems.cdt.preferences; +import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; import org.eclipse.jface.preference.IPreferenceStore; import org.rtems.cdt.Activator; @@ -22,5 +23,10 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer { IPreferenceStore store = Activator.getDefault().getPreferenceStore(); store.setDefault( Constants.BASE_PATH_KEY, Constants.DEFAULT_BASE_PATH); store.setDefault( Constants.BSP_PATH_KEY, Constants.DEFAULT_BSP_PATH); + if (Platform.getOS().equals( Platform.OS_WIN32)) { + store.setDefault( Constants.CYGWIN_PATH_KEY, Constants.DEFAULT_CYGWIN_PATH); + store.setDefault( Constants.MINGW_PATH_KEY, Constants.DEFAULT_MINGW_PATH); + store.setDefault( Constants.MSYS_PATH_KEY, Constants.DEFAULT_MSYS_PATH); + } } } diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/preferences/PreferencePage.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/preferences/PreferencePage.java index bf9890e..efe214c 100644 --- a/org.rtems.cdt.toolchain2/org/rtems/cdt/preferences/PreferencePage.java +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/preferences/PreferencePage.java @@ -12,6 +12,7 @@ package org.rtems.cdt.preferences; +import org.eclipse.core.runtime.Platform; import org.eclipse.jface.preference.DirectoryFieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.ui.IWorkbenchPreferencePage; @@ -42,7 +43,30 @@ public class PreferencePage "BSP path:", getFieldEditorParent() ) - ); + ); + if (Platform.getOS().equals( Platform.OS_WIN32)) { + addField( + new DirectoryFieldEditor( + Constants.CYGWIN_PATH_KEY, + "Cygwin path:", + getFieldEditorParent() + ) + ); + addField( + new DirectoryFieldEditor( + Constants.MINGW_PATH_KEY, + "MinGW path:", + getFieldEditorParent() + ) + ); + addField( + new DirectoryFieldEditor( + Constants.MSYS_PATH_KEY, + "MSYS path:", + getFieldEditorParent() + ) + ); + } } public void init( IWorkbench workbench) { diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/properties/PropertyPage.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/properties/PropertyPage.java index 11b5018..65365e3 100644 --- a/org.rtems.cdt.toolchain2/org/rtems/cdt/properties/PropertyPage.java +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/properties/PropertyPage.java @@ -89,8 +89,8 @@ public class PropertyPage extends FieldEditorPreferencePage implements IWorkbenc setProperty( Constants.BASE_PATH_KEY); setProperty( Constants.BSP_PATH_KEY); - // Update tools - Storage.updateTools( mProject); + // Clear platform + Storage.clearPlatform( mProject); return true; } diff --git a/org.rtems.cdt.toolchain2/org/rtems/cdt/wizards/FinishSetup.java b/org.rtems.cdt.toolchain2/org/rtems/cdt/wizards/FinishSetup.java index d891c83..6b37412 100644 --- a/org.rtems.cdt.toolchain2/org/rtems/cdt/wizards/FinishSetup.java +++ b/org.rtems.cdt.toolchain2/org/rtems/cdt/wizards/FinishSetup.java @@ -41,8 +41,8 @@ public class FinishSetup implements Runnable { Storage.setProperty( project, Constants.BASE_PATH_KEY, basePath); Storage.setProperty( project, Constants.BSP_PATH_KEY, bspPath); - // Update tools - Storage.updateTools( project); + // Clear platform + Storage.clearPlatform( project); } } } diff --git a/org.rtems.cdt.toolchain2/plugin.xml b/org.rtems.cdt.toolchain2/plugin.xml index 5741067..05d2b3a 100644 --- a/org.rtems.cdt.toolchain2/plugin.xml +++ b/org.rtems.cdt.toolchain2/plugin.xml @@ -72,7 +72,7 @@ name="RTEMS Scanner Configuration Discovery Profile (Windows)" point="org.eclipse.cdt.make.core.ScannerConfigurationDiscoveryProfile"> @@ -81,7 +81,7 @@ + class="org.rtems.cdt.build.CygwinRunScannerInfoProvider"/> @@ -90,7 +90,7 @@ name="RTEMS Scanner Configuration Discovery Profile (Windows)" point="org.eclipse.cdt.make.core.ScannerConfigurationDiscoveryProfile"> @@ -99,7 +99,7 @@ + class="org.rtems.cdt.build.CygwinRunScannerInfoProvider"/> @@ -108,7 +108,7 @@ name="RTEMS Scanner Configuration Discovery Profile (Windows)" point="org.eclipse.cdt.make.core.ScannerConfigurationDiscoveryProfile"> @@ -117,7 +117,7 @@ + class="org.rtems.cdt.build.CygwinRunScannerInfoProvider"/> @@ -145,12 +145,13 @@ + scannerConfigDiscoveryProfileId="org.rtems.cdt.toolchain2.RtemsSCDProfile" + targetTool="org.rtems.cdt.linker.c;org.rtems.cdt.linker.cpp;org.rtems.cdt.archiver"> + commandLineGenerator="org.rtems.cdt.build.CygwinCommandLineGenerator"> + commandLineGenerator="org.rtems.cdt.build.CygwinCommandLineGenerator"> + commandLineGenerator="org.rtems.cdt.build.CygwinCommandLineGenerator"> + commandLineGenerator="org.rtems.cdt.build.CygwinCommandLineGenerator"> + commandLineGenerator="org.rtems.cdt.build.CygwinCommandLineGenerator"> + commandLineGenerator="org.rtems.cdt.build.CygwinCommandLineGenerator"> + name="RTEMS Executable">