blob: b156d235a706305f196174673d4935d3a16d28a3 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2012 IBM Corporation and others.
*
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.managedbuilder.xlc.ui;
import org.eclipse.cdt.core.cdtvariables.ICdtVariable;
import org.eclipse.cdt.managedbuilder.core.IManagedProject;
import org.eclipse.cdt.managedbuilder.internal.macros.BuildMacro;
import org.eclipse.cdt.managedbuilder.macros.IBuildMacro;
import org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider;
import org.eclipse.cdt.managedbuilder.macros.IProjectBuildMacroSupplier;
import org.eclipse.cdt.managedbuilder.xlc.ui.preferences.PreferenceConstants;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.QualifiedName;
import org.eclipse.jface.preference.IPreferenceStore;
/**
* @author crecoskie
*
*/
public class XLCProjectMacroSupplier implements IProjectBuildMacroSupplier {
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.macros.IProjectBuildMacroSupplier#getMacro(java.lang.String, org.eclipse.cdt.managedbuilder.core.IManagedProject, org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider)
*/
@Override
public IBuildMacro getMacro(String macroName, IManagedProject project, IBuildMacroProvider provider) {
if (macroName.equals(PreferenceConstants.P_XL_COMPILER_ROOT)) {
String compilerPath = null;
// figure out compiler path from properties and preferences
// search for property first
IProject theProject = (IProject) project.getOwner();
try {
compilerPath = theProject
.getPersistentProperty(new QualifiedName("", PreferenceConstants.P_XL_COMPILER_ROOT));
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (compilerPath == null) {
// use the workbench preference
IPreferenceStore prefStore = XLCUIPlugin.getDefault().getPreferenceStore();
compilerPath = prefStore.getString(PreferenceConstants.P_XL_COMPILER_ROOT);
}
BuildMacro macro = new BuildMacro(macroName, ICdtVariable.VALUE_PATH_DIR, compilerPath);
return macro;
}
else
return provider.getMacro(macroName, IBuildMacroProvider.CONTEXT_PROJECT, project, true);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.macros.IProjectBuildMacroSupplier#getMacros(org.eclipse.cdt.managedbuilder.core.IManagedProject, org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider)
*/
@Override
public IBuildMacro[] getMacros(IManagedProject project, IBuildMacroProvider provider) {
String macroName = PreferenceConstants.P_XL_COMPILER_ROOT;
String compilerPath = null;
// figure out compiler path from properties and preferences
// search for property first
IProject theProject = (IProject) project.getOwner();
try {
compilerPath = theProject
.getPersistentProperty(new QualifiedName("", PreferenceConstants.P_XL_COMPILER_ROOT));
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (compilerPath == null) {
// use the workbench preference
IPreferenceStore prefStore = XLCUIPlugin.getDefault().getPreferenceStore();
compilerPath = prefStore.getString(PreferenceConstants.P_XL_COMPILER_ROOT);
}
BuildMacro macro = new BuildMacro(macroName, ICdtVariable.VALUE_PATH_DIR, compilerPath);
// our array consists of our macro, plus all the macros from our parent
IBuildMacro[] parentMacros = provider.getMacros(IBuildMacroProvider.CONTEXT_PROJECT, project, true);
// look for an existing macro definition
int foundIndex = -1;
for (int k = 0; k < parentMacros.length; k++) {
if (parentMacros[k].getName().equals(macro.getName())) {
foundIndex = k;
break;
}
}
int numMacros = (foundIndex == -1) ? parentMacros.length + 1 : parentMacros.length;
IBuildMacro[] macros = new IBuildMacro[numMacros];
// if there was no existing value then add it to the front
if (foundIndex == -1) {
macros[0] = macro;
for (int k = 1; k < macros.length; k++) {
macros[k] = parentMacros[k - 1];
}
}
else { // replace the old value
for (int k = 0; k < macros.length; k++) {
macros[k] = parentMacros[k];
}
macros[foundIndex] = macro;
}
return macros;
}
}