diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/plugin.xml b/build/org.eclipse.cdt.managedbuilder.core.tests/plugin.xml
index fb1fef30d4f..00647923140 100644
--- a/build/org.eclipse.cdt.managedbuilder.core.tests/plugin.xml
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/plugin.xml
@@ -6541,6 +6541,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0){
List entryList = new ArrayList();
for(int i = 0; i < options.length; i++){
- IOption option = options[i];
- List list = (List)option.getValue();
+ Option option = (Option)options[i];
+ List list = (List)option.getExactValue();
int size = list.size();
if(size > 0){
for(int j = 0; j < size; j++){
- String value = (String)list.get(j);
- if(value.indexOf('"') == 0 && value.lastIndexOf('"') == value.length() - 1 && value.length() != 1){
- value = value.substring(1, value.length() - 1);
- }
- ICLanguageSettingEntry entry = createUserEntry(option, value, flags);
- entryList.add(new UserEntryInfo(entry, value));
+ OptionStringValue ve = (OptionStringValue)list.get(j);
+// if(value.indexOf('"') == 0 && value.lastIndexOf('"') == value.length() - 1 && value.length() != 1){
+// value = value.substring(1, value.length() - 1);
+// }
+ ICLanguageSettingEntry entry = createUserEntry(option, ve, flags);
+ entryList.add(new UserEntryInfo(entry, ve));
}
}
}
@@ -165,6 +169,14 @@ public class BuildEntryStorage extends AbstractEntryStorage {
return new UserEntryInfo[0];
}
+ private static String stripQuotes(String value){
+ if(value.indexOf('"') == 0 && value.lastIndexOf('"') == value.length() - 1 && value.length() != 1){
+ value = value.substring(1, value.length() - 1);
+ }
+ return value;
+ }
+
+
private HashSet getUserUndefinedStringSet(){
HashSet set = null;
IOption options[] = fLangData.getUndefOptionsForKind(getKind());
@@ -209,14 +221,18 @@ public class BuildEntryStorage extends AbstractEntryStorage {
return new ICLanguageSettingEntry[0];
}
- private ICLanguageSettingEntry createUserEntry(IOption option, String optionValue, int flags){
+ private ICLanguageSettingEntry createUserEntry(Option option, OptionStringValue optionValue, int flags){
+// private ICLanguageSettingEntry createUserEntry(Option option, String optionValue, int flags){
int kind = getKind();
ICLanguageSettingEntry entry = null;
+ IPath srcPath = null, srcRootPath = null, srcPrefixMapping = null;
+
switch (kind){
case ICLanguageSettingEntry.MACRO:
- String nv[] = macroNameValueFromValue(optionValue);
+ String nv[] = macroNameValueFromValue(optionValue.getValue());
+// String nv[] = macroNameValueFromValue(optionValue);
entry = new CMacroEntry(nv[0], nv[1], flags);
break;
@@ -225,9 +241,21 @@ public class BuildEntryStorage extends AbstractEntryStorage {
// case ICLanguageSettingEntry.MACRO_FILE:
// case ICLanguageSettingEntry.LIBRARY_PATH:
// case ICLanguageSettingEntry.LIBRARY_FILE:
+ case ICLanguageSettingEntry.LIBRARY_FILE:
+ String tmp = optionValue.getSourceAttachmentPath();
+ if(tmp != null)
+ srcPath = new Path(tmp);
+ tmp = optionValue.getSourceAttachmentRootPath();
+ if(tmp != null)
+ srcRootPath = new Path(tmp);
+ tmp = optionValue.getSourceAttachmentPrefixMapping();
+ if(tmp != null)
+ srcPrefixMapping = new Path(tmp);
+ //do not break
default:
IOptionPathConverter optionPathConverter = fLangData.getTool().getOptionPathConverter();
- Object[] v = optionPathValueToEntry(optionValue);
+ Object[] v = optionPathValueToEntry(stripQuotes(optionValue.getValue()));
+// Object[] v = optionPathValueToEntry(optionValue);
String name = (String)v[0];
if(((Boolean)v[1]).booleanValue()){
flags |= ICLanguageSettingEntry.VALUE_WORKSPACE_PATH;
@@ -236,21 +264,38 @@ public class BuildEntryStorage extends AbstractEntryStorage {
if(path != null)
name = path.toString();
}
- entry = (ICLanguageSettingEntry)CDataUtil.createEntry(kind, name, null, null, flags);
+ entry = (ICLanguageSettingEntry)CDataUtil.createEntry(kind, name, null, null, flags, srcPath, srcRootPath, srcPrefixMapping);
break;
}
return entry;
}
- private String createOptionValue(IOption option, UserEntryInfo info){
+ private OptionStringValue createOptionValue(IOption option, UserEntryInfo info){
if(info.fOptionValue != null)
return info.fOptionValue;
return entryValueToOption(option, info.fEntry);
}
+
+ private OptionStringValue entryValueToOption(IOption option, ICLanguageSettingEntry entry){
+ String optionValue = entryValueToOptionStringValue(option, entry);
+ if(entry.getKind() == ICSettingEntry.LIBRARY_FILE){
+ ICLibraryFileEntry libFile = (ICLibraryFileEntry)entry;
+ return new OptionStringValue(optionValue,
+ false,
+ pathToString(libFile.getSourceAttachmentPath()),
+ pathToString(libFile.getSourceAttachmentRootPath()),
+ pathToString(libFile.getSourceAttachmentPrefixMapping()));
+ }
+ return new OptionStringValue(optionValue);
+ }
- private String entryValueToOption(IOption option, ICLanguageSettingEntry entry){
+ private static String pathToString(IPath path){
+ return path != null ? path.toString() : null;
+ }
+
+ private String entryValueToOptionStringValue(IOption option, ICLanguageSettingEntry entry){
if(entry.getKind() == ICLanguageSettingEntry.MACRO && entry.getValue().length() > 0){
return new StringBuffer(entry.getName()).append('=').append(entry.getValue()).toString();
} else if(entry instanceof ICLanguageSettingPathEntry){
@@ -292,7 +337,7 @@ public class BuildEntryStorage extends AbstractEntryStorage {
IOption options[] = fLangData.getOptionsForKind(kind);
if(options.length != 0){
IOption option = options[0];
- String optValue[] = new String[entries.length];
+ OptionStringValue optValue[] = new OptionStringValue[entries.length];
if(entries.length != 0){
for(int i = 0; i < entries.length; i++){
optValue[i] = createOptionValue(option, entries[i]);
diff --git a/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/util/TestFolderInfo.java b/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/util/TestFolderInfo.java
index ea1f4e8bc3a..073a9f67b47 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/util/TestFolderInfo.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui.tests/src/org/eclipse/cdt/managedbuilder/ui/tests/util/TestFolderInfo.java
@@ -11,6 +11,7 @@ import org.eclipse.cdt.managedbuilder.core.IModificationStatus;
import org.eclipse.cdt.managedbuilder.core.IOption;
import org.eclipse.cdt.managedbuilder.core.ITool;
import org.eclipse.cdt.managedbuilder.core.IToolChain;
+import org.eclipse.cdt.managedbuilder.core.OptionStringValue;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.PluginVersionIdentifier;
@@ -226,4 +227,10 @@ public class TestFolderInfo implements IFolderInfo {
return false;
}
+ public IOption setOption(IHoldsOptions parent, IOption option,
+ OptionStringValue[] value) throws BuildException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
}
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/util/CDataUtil.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/util/CDataUtil.java
index 536e06089b4..d5631d80258 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/util/CDataUtil.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/settings/model/util/CDataUtil.java
@@ -188,6 +188,7 @@ public class CDataUtil {
String value = null;
IPath[] exclusionFilters = null;
+ IPath srcPath = null, srcRootPath = null, srcPrefixMapping = null;
switch (entry.getKind()) {
case ICSettingEntry.MACRO:
@@ -198,6 +199,18 @@ public class CDataUtil {
CCorePlugin.log(e);
}
break;
+ case ICSettingEntry.LIBRARY_FILE:
+ ICLibraryFileEntry libFile = (ICLibraryFileEntry)entry;
+ srcPath = libFile.getSourceAttachmentPath();
+ srcRootPath = libFile.getSourceAttachmentRootPath();
+ srcPrefixMapping = libFile.getSourceAttachmentPrefixMapping();
+ if(srcPath != null)
+ srcPath = resolvePath(mngr, cfg, srcPath);
+ if(srcRootPath != null)
+ srcRootPath = resolvePath(mngr, cfg, srcRootPath);
+ if(srcPrefixMapping != null)
+ srcPrefixMapping = resolvePath(mngr, cfg, srcPrefixMapping);
+ break;
case ICSettingEntry.SOURCE_PATH:
case ICSettingEntry.OUTPUT_PATH:
exclusionFilters = ((ICExclusionPatternPathEntry)entry).getExclusionPatterns();
@@ -215,7 +228,23 @@ public class CDataUtil {
// throw new IllegalArgumentException();
}
- return createEntry(entry.getKind(), name, value, exclusionFilters, entry.getFlags() | ICSettingEntry.RESOLVED);
+ return createEntry(entry.getKind(), name, value, exclusionFilters, entry.getFlags() | ICSettingEntry.RESOLVED, srcPath, srcRootPath, srcPrefixMapping);
+ }
+
+ private static IPath resolvePath(ICdtVariableManager mngr, ICConfigurationDescription cfg, IPath path){
+ if(path == null)
+ return null;
+
+ try {
+ String unresolved = path.toString();
+ String resolved = mngr.resolveValue(unresolved, "", " ", cfg); //$NON-NLS-1$ //$NON-NLS-2$
+ if(resolved != null && !resolved.equals(unresolved))
+ path = new Path(resolved);
+ } catch (CdtVariableException e) {
+ CCorePlugin.log(e);
+ }
+
+ return path;
}
public static ICLanguageSettingEntry createEntry(ICLanguageSettingEntry entry, int flagsToAdd, int flafsToClear){
@@ -253,6 +282,11 @@ public class CDataUtil {
}
public static ICSettingEntry createEntry(int kind, String name, String value, IPath[] exclusionPatterns, int flags){
+ return createEntry(kind, name, value, exclusionPatterns, flags, null, null, null);
+ }
+
+
+ public static ICSettingEntry createEntry(int kind, String name, String value, IPath[] exclusionPatterns, int flags, IPath srcPath, IPath srcRootPath, IPath srcPrefixMapping){
switch (kind){
case ICLanguageSettingEntry.INCLUDE_PATH:
return new CIncludePathEntry(name, flags);
@@ -265,7 +299,7 @@ public class CDataUtil {
case ICLanguageSettingEntry.LIBRARY_PATH:
return new CLibraryPathEntry(name, flags);
case ICLanguageSettingEntry.LIBRARY_FILE:
- return new CLibraryFileEntry(name, flags);
+ return new CLibraryFileEntry(name, flags, srcPath, srcRootPath, srcPrefixMapping);
case ICLanguageSettingEntry.OUTPUT_PATH:
return new COutputEntry(name, exclusionPatterns, flags);
case ICLanguageSettingEntry.SOURCE_PATH: