blob: 82368a98c5fe4d198d7386e4586869b1a66a26ea [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2016 Nokia Siemens Networks Oyj, Finland.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Nokia Siemens Networks - initial implementation
* Petri Tuononen - Initial implementation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.llvm.ui.preferences;
import org.eclipse.cdt.managedbuilder.llvm.ui.LlvmEnvironmentVariableSupplier;
import org.eclipse.cdt.managedbuilder.llvm.ui.LlvmUIPlugin;
import org.eclipse.cdt.managedbuilder.llvm.util.FindStdLibPath;
import org.eclipse.cdt.managedbuilder.llvm.util.LlvmToolOptionPathUtil;
import org.eclipse.cdt.managedbuilder.llvm.util.Separators;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.InstanceScope;
/**
* Class used to access the LLVM Preference store values.
*
* This class is not intended to be subclassed by clients.
*/
public class LlvmPreferenceStore {
/**
* Get the LLVM Preference store.
*
* @return LLVM Preference store.
*/
public static IEclipsePreferences getPreferenceStore() {
IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(LlvmUIPlugin.PLUGIN_ID);
return prefs;
}
/**
* Get a value from the LLVM Preference store.
*
* @param name the name of the preference
* @return the string-valued preference
*/
public static String getPreferenceStoreValue(String name) {
return getPreferenceStore().get(name, ""); //$NON-NLS-1$
}
/**
* Get the LLVM bin path value from the LLVM Preference store.
*
* @return the LLVM bin path value.
*/
public static String getBinPath() {
return getPreferenceStoreValue(PreferenceConstants.P_LLVM_PATH);
}
/**
* Get the LLVM include path value from the LLVM Preference store.
*
* @return the LLVM include path value.
*/
public static String getIncludePath() {
return getPreferenceStoreValue(PreferenceConstants.P_LLVM_INCLUDE_PATH);
}
/**
* Get the LLVM library path value from the LLVM Preference Store.
*
* @return the LLVM library path value.
*/
public static String getLibraryPath() {
return getPreferenceStoreValue(PreferenceConstants.P_LLVM_LIBRARY_PATH);
}
/**
* Get the LLVM library from the LLVM Preference store.
*
* @return the LLVM library value.
*/
public static String getLibraries() {
return getPreferenceStoreValue(PreferenceConstants.P_LLVM_LIBRARIES);
}
/**
* Get values from the LLVM Preference store as a String array.
* Used to get Preference store values which consist of multiple paths
* separated by a path separator.
*
* @param name the name of the preference
* @return A String array containing all Preference store values
*/
public static String[] getPreferenceStoreValueAsArray(String name) {
return LlvmToolOptionPathUtil.stringToArray(name);
}
/**
* Set LLVM Preference store value.
*
* @param name the name of the preference
* @param value the string-valued preference
*/
public static void setPreferenceStoreValue(String name, String value) {
getPreferenceStore().put(name, value);
}
/**
* Set LLVM bin path to the LLVM Preference store.
*
* @param path the path to the LLVM bin path.
*/
public static void setBinPath(String path) {
setPreferenceStoreValue(PreferenceConstants.P_LLVM_PATH, path);
}
/**
* Set LLVM include path to the LLVM Preference store.
*
* @param path LLVM include path.
*/
public static void setIncludePath(String path) {
setPreferenceStoreValue(PreferenceConstants.P_LLVM_INCLUDE_PATH, path);
}
/**
* Set LLVM library path to the LLVM Preference store.
*
* @param path LLVM library path.
*/
public static void setLibraryPath(String path) {
setPreferenceStoreValue(PreferenceConstants.P_LLVM_LIBRARY_PATH, path);
}
/**
* Set LLVM library to the LLVM Preference store.
*
* @param lib LLVM library.
*/
public static void setLibrary(String lib) {
setPreferenceStoreValue(PreferenceConstants.P_LLVM_LIBRARIES, lib);
}
/**
* Get existing paths from the Preference store.
*
* @param name the name of the preference
* @return paths
*/
private static String getExistingPaths(String name) {
String paths = ""; //$NON-NLS-1$
if (name.equals(PreferenceConstants.P_LLVM_INCLUDE_PATH)) {
paths = getIncludePath();
} else if (name.equals(PreferenceConstants.P_LLVM_LIBRARY_PATH)) {
paths = getLibraryPath();
} else if (name.equals(PreferenceConstants.P_LLVM_LIBRARIES)) {
paths = getLibraries();
}
return paths;
}
/**
* Append a new value to the Preference store if it doesn't already exists.
*
* @param name the name of the preference
* @param value the string-valued preference
*/
public static void appendValue(String name, String value) {
StringBuilder sB = new StringBuilder();
String paths = null;
//get existing paths
paths = getExistingPaths(name);
//if values exist
if (paths.length() != 0) {
//if the value is reasonable
if (!value.equalsIgnoreCase("") && value.length() != 0) { //$NON-NLS-1$
//if the paths doesn't contain the new value
if (!paths.contains(value)) {
//append existing paths to the string buffer
sB.append(paths);
//add a path separator in the end if it doesn't exists
if (paths.charAt(paths.length() - 1) != Separators.getPathSeparator().charAt(0)) {
sB.append(Separators.getPathSeparator());
}
//append the new value to end of the list
sB.append(value);
}
}
} else { //no existing values
//if the value is reasonable
if (!value.equalsIgnoreCase("") && value.length() != 0) { //$NON-NLS-1$
//append a new path to the string buffer
sB.append(value);
}
}
String newValues = sB.toString();
if (newValues.length() != 0) {
//set the new preference store value
setPreferenceStoreValue(name, newValues);
}
}
/**
* Append an include path to the LLVM Preference store.
*
* @param path the LLVM include path.
*/
public static void appendIncludePath(String path) {
appendValue(PreferenceConstants.P_LLVM_INCLUDE_PATH, path);
}
/**
* Append a library path to the LLVM Preference store.
*
* @param path the LLVM library path.
*/
public static void appendLibraryPath(String path) {
appendValue(PreferenceConstants.P_LLVM_LIBRARY_PATH, path);
}
/**
* Append a library to the LLVM Preference store.
*
* @param lib the LLVM library.
*/
public static void appendLibrary(String lib) {
appendValue(PreferenceConstants.P_LLVM_LIBRARIES, lib);
}
/**
* Remove a value from the LLVM preference store.
*
* @param name Name of the preference
* @param value Value to remove from the preference store
*/
public static void removeValue(String name, String value) {
StringBuilder sB = new StringBuilder();
String existingValues = null;
String newValue = null;
//get existing values
existingValues = getExistingPaths(name);
//if the String contains the value
if (existingValues.contains(value)) {
//if many values i.e. contains path separator
if (existingValues.contains(Separators.getPathSeparator())) {
//separate String of values to an array
String[] exValArray = existingValues.split(Separators.getPathSeparator());
//if more than one value
if (exValArray.length > 1) {
//remove the value from the array
exValArray = LlvmToolOptionPathUtil.removePathFromExistingPathList(exValArray, value);
//if the array isn't empty
if (exValArray.length > 0) {
//append all values to the StringBuilder excluding the removed one
for (String val : exValArray) {
//append a value
sB.append(val);
//append a path separator
sB.append(Separators.getPathSeparator());
}
//form a String
newValue = sB.toString();
}
} else { //only one value with a path separator at the end
newValue = ""; //$NON-NLS-1$
}
} else { //only value without a path separator at the end
newValue = ""; //$NON-NLS-1$
}
//set the new preference store value
setPreferenceStoreValue(name, newValue);
}
}
/**
* Remove a include path from the LLVM preference store.
*
* @param path The include path to be removed from the LLVM preference store.
*/
public static void removeIncludePath(String path) {
removeValue(PreferenceConstants.P_LLVM_INCLUDE_PATH, path);
}
/**
* Remove a library path from the LLVM preference store.
*
* @param path The library path to be removed from the LLVM preference store.
*/
public static void removeLibraryPath(String path) {
removeValue(PreferenceConstants.P_LLVM_LIBRARY_PATH, path);
}
/**
* Remove a library from the LLVM preference store.
*
* @param lib The library to be removed from the LLVM preference store.
*/
public static void removeLibrary(String lib) {
removeValue(PreferenceConstants.P_LLVM_LIBRARIES, lib);
}
public static void addMinGWStdLib() {
String path = LlvmEnvironmentVariableSupplier.getMinGWStdLib();
if (path != null) {
//add to preference store
appendLibraryPath(path);
// ProjectIndex.rebuiltIndex(proj);
appendLibrary("stdc++"); //$NON-NLS-1$
}
}
public static void addStdLibUnix() {
String path = FindStdLibPath.find();
String lib = "stdc++"; //$NON-NLS-1$
if (path != null) {
//add to preference store
appendLibraryPath(path);
// ProjectIndex.rebuiltIndex(proj);
appendLibrary(lib);
}
}
}