1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 14:42:11 +02:00

[autotools]Bug 402595:added code that gets the current list of build

commands to the job that sets build commands for an autotools project.

Change-Id: Ib4782aa32a99da3da34ff2c1a22a544f531c2d54
Reviewed-on: https://git.eclipse.org/r/10919
Reviewed-by: Jesse Weinstein <Jesse.Weinstein@clinicomp.com>
Reviewed-by: Jeff Johnston <jjohnstn@redhat.com>
IP-Clean: Jeff Johnston <jjohnstn@redhat.com>
Tested-by: Jeff Johnston <jjohnstn@redhat.com>
This commit is contained in:
Anna Dushistova 2013-03-08 14:27:32 -05:00 committed by Jeff Johnston
parent 395e7c941e
commit a6a57864bb

View file

@ -1,13 +1,14 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2008, 2009 Red Hat Inc.. and others * Copyright (c) 2008, 2013 Red Hat Inc.. and others
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html * http://www.eclipse.org/legal/epl-v10.html
* *
* Contributors: * Contributors:
* Red Hat Incorporated - initial implementation * Red Hat Incorporated - initial implementation
* IBM Rational Software - add and remove nature static methods * IBM Rational Software - add and remove nature static methods
* Anna Dushistova (MontaVista) - [402595]Autotools nature loses builders added by contributed wizard pages
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.autotools.core; package org.eclipse.cdt.autotools.core;
@ -80,39 +81,8 @@ public class AutotoolsNewProjectNature implements IProjectNature {
// Add the builder to the project // Add the builder to the project
IProjectDescription description = project.getDescription(); IProjectDescription description = project.getDescription();
ICommand[] commands = description.getBuildSpec(); ICommand[] commands = description.getBuildSpec();
ArrayList<ICommand> commandList = new ArrayList<ICommand>(); if(checkEquals(commands,getBuildCommandsList(description, commands))){
return;
// Make sure the Autotools Configuration builder just precedes the Common Builder
for (int i = 0; i < commands.length; i++) {
ICommand command = commands[i];
if (command.getBuilderName().equals(AutotoolsConfigurationBuilder.BUILDER_ID)) {
// ignore it
} else {
if (command.getBuilderName().equals(OLD_AUTOTOOLS_BUILDER_ID)) {
ICommand newCommand = description.newCommand();
newCommand.setBuilderName(BUILDER_ID);
command = newCommand;
}
if (command.getBuilderName().equals(BUILDER_ID)) {
// add Autotools Configuration builder just before builder
ICommand newCommand = description.newCommand();
newCommand.setBuilderName(AutotoolsConfigurationBuilder.BUILDER_ID);
commandList.add(newCommand);
}
commandList.add(command);
}
}
final ICommand[] newCommands = commandList.toArray(new ICommand[commandList.size()]);
if (newCommands.length == commands.length) {
boolean hasCorrectBuilderCommands = true;
for (int j = 0; j < commands.length; ++j) {
if (!commands[j].getBuilderName().equals(newCommands[j].getBuilderName())) {
hasCorrectBuilderCommands = false;
break;
}
}
if (hasCorrectBuilderCommands)
return;
} }
final ISchedulingRule rule = ResourcesPlugin.getWorkspace().getRoot(); final ISchedulingRule rule = ResourcesPlugin.getWorkspace().getRoot();
final IProject proj = project; final IProject proj = project;
@ -129,9 +99,15 @@ public class AutotoolsNewProjectNature implements IProjectNature {
public void run(IProgressMonitor monitor) throws CoreException { public void run(IProgressMonitor monitor) throws CoreException {
IWorkspace workspace = ResourcesPlugin.getWorkspace(); IWorkspace workspace = ResourcesPlugin.getWorkspace();
turnOffAutoBuild(workspace); turnOffAutoBuild(workspace);
IProjectDescription description = proj.getDescription(); IProjectDescription prDescription = proj.getDescription();
description.setBuildSpec(newCommands); //Other pieces of wizard might have contributed new builder commands;
proj.setDescription(description, new NullProgressMonitor()); //need to make sure we are using the most recent ones
ICommand[] currentCommands = prDescription.getBuildSpec();
ICommand[] newCommands = getBuildCommandsList(prDescription, currentCommands);
if(!checkEquals(currentCommands,newCommands)){
prDescription.setBuildSpec(newCommands);
proj.setDescription(prDescription, new NullProgressMonitor());
}
restoreAutoBuild(workspace); restoreAutoBuild(workspace);
} }
@ -160,6 +136,46 @@ public class AutotoolsNewProjectNature implements IProjectNature {
backgroundJob.schedule(); backgroundJob.schedule();
} }
static boolean checkEquals(ICommand[] commands,
ICommand[] newCommands) {
if (newCommands.length != commands.length){
return false;
}
for (int j = 0; j < commands.length; ++j) {
if (!commands[j].getBuilderName().equals(newCommands[j].getBuilderName())) {
return false;
}
}
return true;
}
static ICommand[] getBuildCommandsList(IProjectDescription description,
ICommand[] commands) {
ArrayList<ICommand> commandList = new ArrayList<ICommand>();
// Make sure the Autotools Configuration builder just precedes the Common Builder
for (int i = 0; i < commands.length; i++) {
ICommand command = commands[i];
if (command.getBuilderName().equals(AutotoolsConfigurationBuilder.BUILDER_ID)) {
// ignore it
} else {
if (command.getBuilderName().equals(OLD_AUTOTOOLS_BUILDER_ID)) {
ICommand newCommand = description.newCommand();
newCommand.setBuilderName(BUILDER_ID);
command = newCommand;
}
if (command.getBuilderName().equals(BUILDER_ID)) {
// add Autotools Configuration builder just before builder
ICommand newCommand = description.newCommand();
newCommand.setBuilderName(AutotoolsConfigurationBuilder.BUILDER_ID);
commandList.add(newCommand);
}
commandList.add(command);
}
}
return commandList.toArray(new ICommand[commandList.size()]);
}
/** /**
* Utility method for adding an autotools nature to a project. * Utility method for adding an autotools nature to a project.
* *