Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 177224 Details for
Bug 321588
Headless Builder allow extending the build environment from the command line
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
patch 1
bug-321588.patch (text/plain), 13.66 KB, created by
James Blackburn
on 2010-08-23 10:22:50 EDT
(
hide
)
Description:
patch 1
Filename:
MIME Type:
Creator:
James Blackburn
Created:
2010-08-23 10:22:50 EDT
Size:
13.66 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.cdt.core >Index: META-INF/MANIFEST.MF >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.cdt/all/org.eclipse.cdt.core/META-INF/MANIFEST.MF,v >retrieving revision 1.69 >diff -u -r1.69 MANIFEST.MF >--- META-INF/MANIFEST.MF 18 Jun 2010 07:47:43 -0000 1.69 >+++ META-INF/MANIFEST.MF 23 Aug 2010 14:19:45 -0000 >@@ -53,7 +53,7 @@ > org.eclipse.cdt.internal.core.dom.rewrite.changegenerator;x-internal:=true, > org.eclipse.cdt.internal.core.dom.rewrite.commenthandler;x-internal:=true, > org.eclipse.cdt.internal.core.dom.rewrite.util;x-internal:=true, >- org.eclipse.cdt.internal.core.envvar;x-friends:="org.eclipse.cdt.ui", >+ org.eclipse.cdt.internal.core.envvar;x-friends:="org.eclipse.cdt.ui,org.eclipse.cdt.managedbuilder.core", > org.eclipse.cdt.internal.core.index;x-friends:="org.eclipse.cdt.ui", > org.eclipse.cdt.internal.core.index.composite;x-internal:=true, > org.eclipse.cdt.internal.core.index.composite.c;x-internal:=true, >Index: src/org/eclipse/cdt/internal/core/envvar/UserDefinedEnvironmentSupplier.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.cdt/all/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/envvar/UserDefinedEnvironmentSupplier.java,v >retrieving revision 1.5 >diff -u -r1.5 UserDefinedEnvironmentSupplier.java >--- src/org/eclipse/cdt/internal/core/envvar/UserDefinedEnvironmentSupplier.java 16 Nov 2009 20:07:36 -0000 1.5 >+++ src/org/eclipse/cdt/internal/core/envvar/UserDefinedEnvironmentSupplier.java 23 Aug 2010 14:19:45 -0000 >@@ -1,5 +1,5 @@ > /******************************************************************************* >- * Copyright (c) 2005, 2009 Intel Corporation and others. >+ * Copyright (c) 2005, 2010 Intel Corporation and others. > * All rights reserved. This program and the accompanying materials > * are made available under the terms of the Eclipse Public License v1.0 > * which accompanies this distribution, and is available at >@@ -11,8 +11,10 @@ > *******************************************************************************/ > package org.eclipse.cdt.internal.core.envvar; > >+import java.util.HashMap; > import java.util.HashSet; > import java.util.Iterator; >+import java.util.Map; > import java.util.Set; > > import org.eclipse.cdt.core.CCorePlugin; >@@ -35,9 +37,18 @@ > import org.osgi.service.prefs.Preferences; > > /** >- * This is the Environment Variable Supplier used to supply variables >- * defined by a user >- * >+ * This is the Environment Variable Supplier used to supply and persist user >+ * defined variables. Variables are stored in the context of a CDT {@link ICConfigurationDescription}, >+ * or, globally at the {@link IWorkspace} level. >+ * >+ * <p> >+ * This class is Singleton held by {@link EnvironmentVariableManager}. >+ * >+ * <p> >+ * It also allows temporary 'overriding' of variables. These are not persisted, but override >+ * the values of any existing user-defined variable. This functionality is used by HeadlessBuilder >+ * to temporarily override environment variables on the command line. >+ * > * @since 3.0 > */ > public class UserDefinedEnvironmentSupplier extends >@@ -56,8 +67,8 @@ > }; > */ > private StorableEnvironment fWorkspaceVariables; >- >- >+ private StorableEnvironment fOverrideVariables = new StorableEnvironment(false); >+ > static class VarKey { > private IEnvironmentVariable fVar; > private boolean fNameOnly; >@@ -375,10 +386,11 @@ > public IEnvironmentVariable getVariable(String name, Object context) { > if(getValidName(name) == null) > return null; >+ IEnvironmentVariable var = fOverrideVariables.getVariable(name); > StorableEnvironment env = getEnvironment(context); >- if(env == null) >- return null; >- return env.getVariable(name); >+ if (env == null) >+ return var; >+ return EnvVarOperationProcessor.performOperation(env.getVariable(name), var); > } > > /* (non-Javadoc) >@@ -388,9 +400,41 @@ > StorableEnvironment env = getEnvironment(context); > if(env == null) > return null; >- return filterVariables(env.getVariables()); >+ IEnvironmentVariable[] override = filterVariables(fOverrideVariables.getVariables()); >+ IEnvironmentVariable[] normal = filterVariables(env.getVariables()); >+ return combineVariables(normal, override); >+ } >+ >+ private IEnvironmentVariable[] combineVariables(IEnvironmentVariable[] oldVariables, IEnvironmentVariable[] newVariables) { >+ Map<String, IEnvironmentVariable> vars = new HashMap<String, IEnvironmentVariable>(oldVariables.length + newVariables.length); >+ for (IEnvironmentVariable variable : oldVariables) >+ vars.put(variable.getName(), variable); >+ for (IEnvironmentVariable variable : newVariables) { >+ if (!vars.containsKey(variable.getName())) >+ vars.put(variable.getName(), variable); >+ else >+ vars.put(variable.getName(), EnvVarOperationProcessor.performOperation(vars.get(variable.getName()), variable)); >+ } >+ return vars.values().toArray(new IEnvironmentVariable[vars.size()]); >+ } >+ >+ /** >+ * Add an environment variable 'override'. This variable won't be persisted but will instead >+ * replace / remove / prepend / append any existing environment variable with the same name. >+ * This change is not persisted and remains for the current eclipse session. >+ * >+ * @param name Environment variable name >+ * @param value Environment variable value >+ * @param op one of the IBuildEnvironmentVariable.ENVVAR_* operation types >+ * @param delimiter delimiter to use or null for default >+ * @return Overriding IEnvironmentVariable or null if name is not valid >+ */ >+ public IEnvironmentVariable createOverrideVariable(String name, String value, int op, String delimiter) { >+ if (getValidName(name) == null) >+ return null; >+ return fOverrideVariables.createVariable(name,value,op,delimiter); > } >- >+ > public IEnvironmentVariable createVariable(String name, String value, int op, String delimiter, Object context){ > if(getValidName(name) == null) > return null; >#P org.eclipse.cdt.managedbuilder.core >Index: src/org/eclipse/cdt/managedbuilder/internal/core/HeadlessBuildMessages.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.cdt/all/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/HeadlessBuildMessages.java,v >retrieving revision 1.7 >diff -u -r1.7 HeadlessBuildMessages.java >--- src/org/eclipse/cdt/managedbuilder/internal/core/HeadlessBuildMessages.java 2 Aug 2010 16:55:56 -0000 1.7 >+++ src/org/eclipse/cdt/managedbuilder/internal/core/HeadlessBuildMessages.java 23 Aug 2010 14:19:47 -0000 >@@ -22,6 +22,10 @@ > public static String HeadlessBuilder_cleaning_all_projects; > public static String HeadlessBuilder_CouldntLockWorkspace; > public static String HeadlessBuilder_Directory; >+ public static String HeadlessBuilder_EnvVar_Append; >+ public static String HeadlessBuilder_EnvVar_Prepend; >+ public static String HeadlessBuilder_EnvVar_Remove; >+ public static String HeadlessBuilder_EnvVar_Replace; > public static String HeadlessBuilder_Error; > public static String HeadlessBuilder_importAll; > public static String HeadlessBuilder_IncludeFile; >Index: src/org/eclipse/cdt/managedbuilder/internal/core/HeadlessBuildMessages.properties >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.cdt/all/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/HeadlessBuildMessages.properties,v >retrieving revision 1.1 >diff -u -r1.1 HeadlessBuildMessages.properties >--- src/org/eclipse/cdt/managedbuilder/internal/core/HeadlessBuildMessages.properties 2 Aug 2010 16:55:56 -0000 1.1 >+++ src/org/eclipse/cdt/managedbuilder/internal/core/HeadlessBuildMessages.properties 23 Aug 2010 14:19:47 -0000 >@@ -17,6 +17,10 @@ > HeadlessBuilder_cleaning_all_projects=Cleaning All Projects... > HeadlessBuilder_CouldntLockWorkspace=Could not obtain lock for workspace location > HeadlessBuilder_Directory=Directory: >+HeadlessBuilder_EnvVar_Append=\ \ \ -Ea {var=value} append value to environment variable when running all tools >+HeadlessBuilder_EnvVar_Prepend=\ \ \ -Ep {var=value} prepend value to environment variable when running all tools >+HeadlessBuilder_EnvVar_Remove=\ \ \ -Er {var} remove/unset the given environment variable >+HeadlessBuilder_EnvVar_Replace=\ \ \ -E {var=value} replace/add value to environment variable when running all tools > HeadlessBuilder_Error=Error: > HeadlessBuilder_invalid_argument=Invalid Arguments: > HeadlessBuilder_is_not_accessible=\ is not accessible\! >@@ -36,7 +40,7 @@ > HeadlessBuilder_usage_build=\ \ \ -build {project_name_reg_ex{/config_reg_ex} | all} > HeadlessBuilder_usage_clean_build=\ \ \ -cleanBuild {project_name_reg_ex{/config_reg_ex} | all} > HeadlessBuilder_usage_import=\ \ \ -import {[uri:/]/path/to/project} >-HeadlessBuilder_importAll=\ \ \ -importAll {[uri:/]/path/to/projectTreeURI} Import all projects under URI >+HeadlessBuilder_importAll=\ \ \ -importAll {[uri:/]/path/to/projectTreeURI} Import all projects under URI > HeadlessBuilder_IncludeFile=\ \ \ -include {include_file} additional include_file to pass to tools > HeadlessBuilder_InlucdePath=\ \ \ -I {include_path} additional include_path to add to tools > HeadlessBuilder_invalid_uri=Invalid project URI: >Index: src/org/eclipse/cdt/managedbuilder/internal/core/HeadlessBuilder.java >=================================================================== >RCS file: /cvsroot/tools/org.eclipse.cdt/all/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/HeadlessBuilder.java,v >retrieving revision 1.10 >diff -u -r1.10 HeadlessBuilder.java >--- src/org/eclipse/cdt/managedbuilder/internal/core/HeadlessBuilder.java 24 Jun 2010 13:26:20 -0000 1.10 >+++ src/org/eclipse/cdt/managedbuilder/internal/core/HeadlessBuilder.java 23 Aug 2010 14:19:47 -0000 >@@ -28,6 +28,7 @@ > import java.util.regex.Pattern; > import java.util.regex.PatternSyntaxException; > >+import org.eclipse.cdt.core.envvar.IEnvironmentVariable; > import org.eclipse.cdt.core.model.CoreModel; > import org.eclipse.cdt.core.resources.ACBuilder; > import org.eclipse.cdt.core.settings.model.CIncludeFileEntry; >@@ -35,6 +36,7 @@ > import org.eclipse.cdt.core.settings.model.CMacroEntry; > import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; > import org.eclipse.cdt.core.settings.model.ICProjectDescription; >+import org.eclipse.cdt.internal.core.envvar.EnvironmentVariableManager; > import org.eclipse.cdt.managedbuilder.core.IConfiguration; > import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; > import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin; >@@ -76,6 +78,10 @@ > * - Add Include path to build : -I {include_path} > * - Add Include file to build : -include {include_file} > * - Add preprocessor define to build : -D {prepoc_define} >+ * - Replace environment variable in build : -E {var=value} >+ * - Append environment variable to build : -Ea {var=value} >+ * - Prepend environment variable to build : -Ep {var=value} >+ * - Remove environment variable in build : -Er {var} > * > * Build output is automatically sent to stdout. > * @since 6.0 >@@ -480,6 +486,10 @@ > * -I {include_path} additional include_path to add to tools > * -include {include_file} additional include_file to pass to tools > * -D {prepoc_define} addition preprocessor defines to pass to the tools >+ * -E {var=value} replace/add value to environment variable when running all tools >+ * -Ea {var=value} append value to environment variable when running all tools >+ * -Ep {var=value} prepend value to environment variable when running all tools >+ * -Er {var} remove/unset the given environment variable > * > * Each argument may be specified more than once > * @param args String[] of arguments to parse >@@ -510,6 +520,14 @@ > HeadlessBuilderExternalSettingsProvider.additionalSettings.add(new CIncludePathEntry(args[++i], 0)); > } else if ("-include".equals(args[i])) { //$NON-NLS-1$ > HeadlessBuilderExternalSettingsProvider.additionalSettings.add(new CIncludeFileEntry(args[++i], 0)); >+ } else if ("-E".equals(args[i])) { //$NON-NLS-1$ >+ addEnvironmentVariable(args[++i], IEnvironmentVariable.ENVVAR_REPLACE); >+ } else if ("-Ea".equals(args[i])) { //$NON-NLS-1$ >+ addEnvironmentVariable(args[++i], IEnvironmentVariable.ENVVAR_APPEND); >+ } else if ("-Ep".equals(args[i])) { //$NON-NLS-1$ >+ addEnvironmentVariable(args[++i], IEnvironmentVariable.ENVVAR_PREPEND); >+ } else if ("-Er".equals(args[i])) { //$NON-NLS-1$ >+ addEnvironmentVariable(args[++i], IEnvironmentVariable.ENVVAR_REMOVE); > } else { > throw new Exception(HeadlessBuildMessages.HeadlessBuilder_unknown_argument + args[i]); > } >@@ -526,6 +544,10 @@ > System.err.println(HeadlessBuildMessages.HeadlessBuilder_InlucdePath); > System.err.println(HeadlessBuildMessages.HeadlessBuilder_IncludeFile); > System.err.println(HeadlessBuildMessages.HeadlessBuilder_PreprocessorDefine); >+ System.err.println(HeadlessBuildMessages.HeadlessBuilder_EnvVar_Replace); >+ System.err.println(HeadlessBuildMessages.HeadlessBuilder_EnvVar_Append); >+ System.err.println(HeadlessBuildMessages.HeadlessBuilder_EnvVar_Prepend); >+ System.err.println(HeadlessBuildMessages.HeadlessBuilder_EnvVar_Remove); > return false; > } > >@@ -544,6 +566,14 @@ > return true; > } > >+ private void addEnvironmentVariable(String string, int op) throws Exception { >+ String[] parts = string.split("=", 2); //$NON-NLS-1$ >+ String name = parts[0]; >+ String value = ""; //$NON-NLS-1$ >+ if (parts.length > 1) >+ value = parts[1]; >+ EnvironmentVariableManager.fUserSupplier.createOverrideVariable(name, value, op, null); >+ } > > public void stop() { > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
jamesblackburn+eclipse
:
iplog-
Actions:
View
|
Diff
Attachments on
bug 321588
: 177224