From a3dd98987aac6bbe923499647d75c6e1f135f654 Mon Sep 17 00:00:00 2001 From: "Christian W. Damus" Date: Mon, 21 Nov 2011 21:56:38 -0500 Subject: [PATCH 1/4] Bug 210248 - [Internal Builder]does not rebuild a dependent project in case of a reference library project change Conflicts: build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/AdditionalInput.java --- .../resources/depLibsProjects/tapp.zip | Bin 0 -> 4514 bytes .../resources/depLibsProjects/tlib.zip | Bin 0 -> 3091 bytes .../resources/depLibsProjects/tobjs.zip | Bin 0 -> 3603 bytes .../tests/suite/AllManagedBuildTests.java | 2 + .../ManagedBuildDependencyLibsTests.java | 285 +++++++++++++++ .../internal/core/AdditionalInput.java | 332 +++++++++++++++++- .../plugin.xml | 10 +- 7 files changed, 622 insertions(+), 7 deletions(-) create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tapp.zip create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tlib.zip create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tobjs.zip create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedBuildDependencyLibsTests.java diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tapp.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tapp.zip new file mode 100644 index 0000000000000000000000000000000000000000..56f88881c1a0ecf9c98be04dc41553c85a92fad1 GIT binary patch literal 4514 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 literal 0 HcmV?d00001 diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tlib.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tlib.zip new file mode 100644 index 0000000000000000000000000000000000000000..2167f3f90247d6535bedd90d2a67ed32e8e6b7ce GIT binary patch literal 3091 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 literal 0 HcmV?d00001 diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tobjs.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tobjs.zip new file mode 100644 index 0000000000000000000000000000000000000000..3fe31c0ee4c0144f5a8336a9c0bcad1eddee8396 GIT binary patch literal 3603 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 H`?LQ8{|yeR literal 0 HcmV?d00001 diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/managedbuilder/tests/suite/AllManagedBuildTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/managedbuilder/tests/suite/AllManagedBuildTests.java index 65fdaadca1d..d90c1e4adde 100644 --- a/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/managedbuilder/tests/suite/AllManagedBuildTests.java +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/managedbuilder/tests/suite/AllManagedBuildTests.java @@ -26,6 +26,7 @@ import org.eclipse.cdt.managedbuilder.core.tests.ManagedBuildCoreTests; import org.eclipse.cdt.managedbuilder.core.tests.ManagedBuildCoreTests20; import org.eclipse.cdt.managedbuilder.core.tests.ManagedBuildCoreTests_SharedToolOptions; import org.eclipse.cdt.managedbuilder.core.tests.ManagedBuildDependencyCalculatorTests; +import org.eclipse.cdt.managedbuilder.core.tests.ManagedBuildDependencyLibsTests; import org.eclipse.cdt.managedbuilder.core.tests.ManagedBuildEnvironmentTests; import org.eclipse.cdt.managedbuilder.core.tests.ManagedBuildMacrosTests; import org.eclipse.cdt.managedbuilder.core.tests.ManagedBuildTCSupportedTest; @@ -61,6 +62,7 @@ public class AllManagedBuildTests { suite.addTestSuite(GCCSpecsConsoleParserTest.class); // managedbuilder.core.tests + suite.addTest(ManagedBuildDependencyLibsTests.suite()); suite.addTest(ManagedBuildCoreTests20.suite()); suite.addTest(ManagedBuildCoreTests.suite()); suite.addTest(ManagedProjectUpdateTests.suite()); diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedBuildDependencyLibsTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedBuildDependencyLibsTests.java new file mode 100644 index 00000000000..05b0320ddec --- /dev/null +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/ManagedBuildDependencyLibsTests.java @@ -0,0 +1,285 @@ +package org.eclipse.cdt.managedbuilder.core.tests; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import junit.framework.Test; +import junit.framework.TestCase; +import junit.framework.TestSuite; + +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.settings.model.ICProjectDescription; +import org.eclipse.cdt.managedbuilder.core.IBuilder; +import org.eclipse.cdt.managedbuilder.core.IConfiguration; +import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo; +import org.eclipse.cdt.managedbuilder.core.IToolChain; +import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; +import org.eclipse.cdt.managedbuilder.internal.core.FolderInfo; +import org.eclipse.cdt.managedbuilder.tcmodification.IConfigurationModification; +import org.eclipse.cdt.managedbuilder.tcmodification.IToolChainModificationManager; +import org.eclipse.cdt.managedbuilder.testplugin.ManagedBuildTestHelper; +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IFolder; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IProjectDescription; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IWorkspaceDescription; +import org.eclipse.core.resources.IncrementalProjectBuilder; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.OperationCanceledException; + +public class ManagedBuildDependencyLibsTests extends TestCase { + private static final String PROJ_PATH = "depLibsProjects"; + private static final String MESSAGE_TAIL = " (see .log file for more details)."; + + private IProject fTapp, fTlib, fTobjs; + + private IToolChain[] allToolChains; + + public ManagedBuildDependencyLibsTests(String name) { + super(name); + // TODO Auto-generated constructor stub + } + + public static Test suite() { + TestSuite suite = new TestSuite(ManagedBuildDependencyLibsTests.class.getName()); + + suite.addTest(new ManagedBuildDependencyLibsTests("testDepLibs")); + suite.addTest(new ManagedBuildDependencyLibsTests("testDepUObjs")); + return suite; + } + + private void buildProject(IProject curProject) { + + IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(curProject); + try { + IProject[] referencedProjects = curProject.getReferencedProjects(); + for(int i = 0; i < referencedProjects.length; ++i) + buildProject(referencedProjects[i]); + + // Build the project in order to generate the makefiles + curProject.build(IncrementalProjectBuilder.INCREMENTAL_BUILD,new NullProgressMonitor()); + } + catch(CoreException e){ + fail(e.getStatus().getMessage()); + } + catch(OperationCanceledException e){ + fail("the project \"" + curProject.getName() + "\" build was cancelled, exception message: " + e.getMessage()); + } + + + } + + + + @Override + protected void setUp() throws Exception { + super.setUp(); + allToolChains = ManagedBuildManager. + getRealToolChains(); + IWorkspaceDescription wsDescription = ResourcesPlugin.getWorkspace().getDescription(); + wsDescription.setAutoBuilding(false); + ResourcesPlugin.getWorkspace().setDescription(wsDescription); + assertNotNull("Cannot create tapp project", + fTapp = ManagedBuildTestHelper.loadProject("tapp", PROJ_PATH)); + assertNotNull("Cannot create tlib project", + fTlib = ManagedBuildTestHelper.loadProject("tlib", PROJ_PATH)); + assertNotNull("Cannot create tobjs project", + fTobjs = ManagedBuildTestHelper.loadProject("tobjs", PROJ_PATH)); + IProjectDescription projDescription = fTapp.getDescription(); + projDescription.setReferencedProjects(new IProject[] + {fTlib, fTobjs}); + fTapp.setDescription(projDescription, new NullProgressMonitor()); + IToolChain toolChain = setToolChain(fTapp, null); + assertNotNull("No compatible tool chain.", toolChain); + setToolChain(fTlib, toolChain); + setToolChain(fTobjs, toolChain); + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + ManagedBuildTestHelper.removeProject(fTapp.getName()); + ManagedBuildTestHelper.removeProject(fTlib.getName()); + ManagedBuildTestHelper.removeProject(fTobjs.getName()); + } + + private void deleteFiles(IFolder dir, String pattern, IProgressMonitor monitor) { + List files = new ArrayList(); + findFiles(dir, pattern, files); + for(Iterator i = files.iterator(); i.hasNext(); ) { + IFile file = i.next(); + try { + file.delete(true, monitor); + } catch (CoreException e) { + e.printStackTrace(); + fail("Error deleting file " + file.getFullPath().toString() + '.' + MESSAGE_TAIL); + } + } + } + + private void findFiles(IResource dir, String pattern, List files) { + IResource resource = null; + try { + IResource[] members; + if(dir instanceof IContainer) + members = ((IContainer)dir).members(IFolder.INCLUDE_PHANTOMS); + else + if(dir instanceof IFolder) + members = ((IFolder)dir).members(IFolder.INCLUDE_PHANTOMS); + else // Not possible + return; + for(int i = 0; i < members.length; ++i) { + resource = members[i]; + if(resource.getType() == IResource.FOLDER) + findFiles((IFolder)resource, pattern, files); + else { + if(resource.getName().matches(pattern)) + files.add((IFile)resource); + } + } + } catch (CoreException e) { + e.printStackTrace(); + fail("Error while collecting files." + MESSAGE_TAIL); + } + } + + private IToolChain setToolChain(IProject project, IToolChain setTo) { + try { + IConfiguration cfg = getProjectConfiguration(project); + IToolChain currentToolChain = cfg.getToolChain(); + + IToolChainModificationManager mngr = + ManagedBuildManager.getToolChainModificationManager(); + IConfigurationModification cfgM = + (IConfigurationModification)mngr. + createModification(cfg.getRootFolderInfo()); + FolderInfo folderInfo = (FolderInfo)cfg.getRootFolderInfo(); + + if(setTo == null) { + for(int i = 0; i < allToolChains.length; ++i) { + // If predefined tool chain supported, leave it alone + if(allToolChains[i].equals(currentToolChain)) + return currentToolChain; + // In the same loop try to find compatible tool chain + if(setTo == null) { + IBuilder builder = allToolChains[i].getBuilder(); + if(cfg.isBuilderCompatible(builder) && + folderInfo.isToolChainCompatible(allToolChains[i])) + setTo = allToolChains[i]; + } + } + } + if(null != setTo) { + cfgM.setToolChain(setTo); + assertEquals(setTo, cfgM.getToolChain()); + assertEquals(setTo.getBuilder(), cfgM.getBuilder()); + } + } catch (CoreException e) { + e.printStackTrace(); + fail("Error. " + MESSAGE_TAIL); + } + return setTo; + } + + private IConfiguration getProjectConfiguration(IProject project) throws CoreException { + ICProjectDescription cProjDescription = CoreModel.getDefault(). + createProjectDescription(project, true); + return ManagedBuildManager. + getConfigurationForDescription( + cProjDescription.getConfigurations()[0]); + + } + + private void rebuildArtefact(IProject project) { +// deleteFiles(getProjectFolder(project), +// getArtefactFullName(project), +// new NullProgressMonitor()); + try { + project.build(IncrementalProjectBuilder.CLEAN_BUILD, new NullProgressMonitor()); + } catch (CoreException e) { + e.printStackTrace(); + fail("Cannot clean project " + fTapp.getName() + '.' + MESSAGE_TAIL); + } + buildProject(project); + } + + private long getArtifactTimeStamp(IProject project) { + List files = new ArrayList(); + findFiles(project, getArtefactFullName(project), files); + if(files.size() == 0) // File not exists + return 0; + IFile artefact = files.iterator().next(); + return artefact.getModificationStamp(); + } + + private String getArtefactFullName(IProject project) { + IConfiguration cfg = null; + try { + cfg = getProjectConfiguration(project); + } catch (CoreException e) { + e.printStackTrace(); + fail("Error. " + MESSAGE_TAIL); + } + String name = cfg.getArtifactName(); + String ext = cfg.getArtifactExtension(); + if((null != ext) && (ext.length() > 0)) { + name += '.'; + name += ext; + } + return name; + } + + + public void testDepLibs() { + buildProject(fTapp); + long timeStamp = getArtifactTimeStamp(fTapp); + if(timeStamp == 0) { + fail("Cannot build project " + fTapp.getName()); + } + try { // To be sure that in case of build the time should be changed + Thread.sleep(1000); + } catch (InterruptedException e) { + // Do nothing + } + // Check if no build any more + buildProject(fTapp); + if(timeStamp != getArtifactTimeStamp(fTapp)) { + fail("Error. This time it should be nothing to build"); + } + rebuildArtefact(fTlib); + buildProject(fTapp); + if(timeStamp == getArtifactTimeStamp(fTapp)) { + fail("Error. This time it should build application."); + } + } + + public void testDepUObjs() { + buildProject(fTapp); + long timeStamp = getArtifactTimeStamp(fTapp); + if(timeStamp == 0) { + fail("Cannot build project " + fTapp.getName()); + } + try { // To be sure that in case of build the time should be changed + Thread.sleep(1000); + } catch (InterruptedException e) { + // Do nothing + } + // Check if no build any more + buildProject(fTapp); + if(timeStamp != getArtifactTimeStamp(fTapp)) { + fail("Error. This time it should be nothing to build"); + } +// deleteFiles(getProjectFolder(fTobjs), "*.o", new NullProgressMonitor()); + rebuildArtefact(fTobjs); + buildProject(fTapp); + if(timeStamp == getArtifactTimeStamp(fTapp)) { + fail("Error. This time it should build application."); + } + } +} \ No newline at end of file diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/AdditionalInput.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/AdditionalInput.java index b0ba81b5e2c..01c05fd9479 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/AdditionalInput.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/AdditionalInput.java @@ -11,17 +11,51 @@ *******************************************************************************/ package org.eclipse.cdt.managedbuilder.internal.core; +import java.net.URI; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.cdt.core.cdtvariables.CdtVariableException; import org.eclipse.cdt.core.settings.model.ICStorageElement; import org.eclipse.cdt.core.settings.model.util.CDataUtil; import org.eclipse.cdt.internal.core.SafeStringInterner; +import org.eclipse.cdt.managedbuilder.core.BuildException; import org.eclipse.cdt.managedbuilder.core.IAdditionalInput; +import org.eclipse.cdt.managedbuilder.core.IBuildObject; +import org.eclipse.cdt.managedbuilder.core.IBuilder; +import org.eclipse.cdt.managedbuilder.core.IConfiguration; +import org.eclipse.cdt.managedbuilder.core.IFileInfo; import org.eclipse.cdt.managedbuilder.core.IInputType; import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement; +import org.eclipse.cdt.managedbuilder.core.IOption; +import org.eclipse.cdt.managedbuilder.core.IOutputType; +import org.eclipse.cdt.managedbuilder.core.ITool; +import org.eclipse.cdt.managedbuilder.core.IToolChain; +import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; +import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin; +import org.eclipse.cdt.managedbuilder.internal.macros.BuildMacroProvider; +import org.eclipse.cdt.managedbuilder.internal.macros.IMacroContextInfo; +import org.eclipse.cdt.managedbuilder.internal.macros.OptionContextData; +import org.eclipse.cdt.managedbuilder.macros.BuildMacroException; +import org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider; +import org.eclipse.cdt.utils.cdtvariables.CdtVariableResolver; +import org.eclipse.cdt.utils.cdtvariables.SupplierBasedCdtVariableSubstitutor; +import org.eclipse.core.filesystem.EFS; +import org.eclipse.core.filesystem.IFileStore; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.Path; public class AdditionalInput implements IAdditionalInput { private static final String EMPTY_STRING = new String(); + private static final String BUILD_VARIABLE_STATIC_LIB = "ARCHIVES"; //$NON-NLS-1$ + private static final String BUILD_VARIABLE_SHARED_LIB = "LIBRARIES"; //$NON-NLS-1$ + + private String[] expandedNames; + // Superclass // Parent and children private IInputType fParent; @@ -295,9 +329,303 @@ public class AdditionalInput implements IAdditionalInput { fResolved = true; } } + + public boolean needsRebuild() { + // This shouldn't be called for an extension AdditionalInput + if (fIsExtensionAdditionalInput) + return false; + if (fRebuildState) + return fRebuildState; + if (fKind.intValue() == IAdditionalInput.KIND_ADDITIONAL_DEPENDENCY + || fKind.intValue() == IAdditionalInput.KIND_ADDITIONAL_INPUT_DEPENDENCY) { + IToolChain toolChain = getToolChain(); + if (!toolChain.isExtensionElement()) { + long artifactTimeStamp = getArtifactTimeStamp(toolChain); + if (0 != artifactTimeStamp) { + String[] paths = getPaths(); + for (int i = 0; i < paths.length; ++i) { + if (paths[i].length() == 0) + continue; + if (dependencyChanged(paths[i], artifactTimeStamp)) + return true; + } + } + } + } + return false; + } + + private long getArtifactTimeStamp(IToolChain toolChain) { + IBuilder builder = toolChain.getBuilder(); + IConfiguration configuration = toolChain.getParent(); + URI buildLocationURI = ManagedBuildManager.getBuildLocationURI(configuration, builder); + if (buildLocationURI != null) { + if (!buildLocationURI.toString().endsWith("/")) { //$NON-NLS-1$ + // ensure that it's a directory URI + buildLocationURI = URI.create(buildLocationURI.toString() + "/"); //$NON-NLS-1$ + } + + String artifactName = configuration.getArtifactName(); + String artifactExt = configuration.getArtifactExtension(); + String artifactPref = configuration.getOutputPrefix(artifactExt); + if (artifactName.length() > 0) { + if (artifactExt.length() > 0) + artifactName += "." + artifactExt; //$NON-NLS-1$ + if (artifactPref.length() > 0) + artifactName = artifactPref + artifactName; + try { + artifactName = ManagedBuildManager.getBuildMacroProvider().resolveValue(artifactName, "", //$NON-NLS-1$ + " ", IBuildMacroProvider.CONTEXT_CONFIGURATION, configuration); //$NON-NLS-1$ + } catch (BuildMacroException e) { + } + + URI buildArtifactURI = buildLocationURI.resolve(artifactName); + + try { + IFileStore artifact = EFS.getStore(buildArtifactURI); + org.eclipse.core.filesystem.IFileInfo info = (artifact == null) ? null : artifact.fetchInfo(); + if ((info != null) && info.exists()) { + return info.getLastModified(); + } + } catch (CoreException e) { + // if we can't even inquire about it, then assume it doesn't exist + } + } + } + return 0; + } - public boolean needsRebuild(){ - return fRebuildState; + private boolean dependencyChanged(String sPath, long artefactTimeStamp) { + try { + IToolChain toolChain = getToolChain(); + IConfiguration configuration = toolChain.getParent(); + if (fIsDirty || (null == expandedNames)) { + if ("$(LIBS)".equals(sPath)) //$NON-NLS-1$ + expandedNames = getDepLibs(); + else if ("$(USER_OBJS)".equals(sPath)) //$NON-NLS-1$ + expandedNames = getDepObjs(configuration); + else { + expandedNames = getDepFiles(sPath); + } + } + for (int j = 0; j < expandedNames.length; ++j) { + if (expandedNames[j] != null) { + IFileStore file = getEFSFile(expandedNames[j]); + org.eclipse.core.filesystem.IFileInfo info = (file == null) ? null : file.fetchInfo(); + if ((info != null) && info.exists() && (info.getLastModified() > artefactTimeStamp)) { + return true; + } + } + } + } catch (Exception e) { + // we'll have to assume that the dependency didn't change if we couldn't get its timestamp + ManagedBuilderCorePlugin.log(e); + } + return false; + } + + private IToolChain getToolChain() { + IBuildObject bo = fParent.getParent().getParent(); + IToolChain tCh = null; + if (bo instanceof IToolChain) { + tCh = ((IToolChain) bo); + } else if (bo instanceof IFileInfo) { + tCh = ((ResourceConfiguration) bo).getBaseToolChain(); + } + return tCh; + } + + private String[] getDepLibs() throws CoreException, BuildException, CdtVariableException { + IOption[] options = fParent.getParent().getOptions(); + String[] libNames = null; + List libPaths = null; + for (int i = 0; i < options.length; ++i) { + int type = options[i].getValueType(); + if (type == IOption.LIBRARIES) { + libNames = options[i].getLibraries(); + } else if (type == IOption.LIBRARY_PATHS) { + if (null == libPaths) + libPaths = new ArrayList(); + libPaths.addAll(Arrays.asList(restoreLibraryPaths(options[i]))); + } + } + + if ((libNames != null) && (libPaths != null)) { + IToolChain toolChain = getToolChain(); + for (int i = 0; i < libNames.length; ++i) { + URI uri = findLibrary(toolChain, libNames[i], libPaths); + libNames[i] = (uri == null) ? null : uri.toString(); + } + return libNames; + } + return new String[0]; + } + + private String[] restoreLibraryPaths(IOption option) throws BuildException, CdtVariableException { + @SuppressWarnings("unchecked") + List libPaths = (List) option.getValue(); + String[] dirs = libPaths.toArray(new String[libPaths.size()]); + dirs = substituteEnvVars(option, dirs); + return dirs; + } + + private URI findLibrary(IToolChain toolChain, final String libName, List dirs) throws CoreException { + final String libSO = getDynamicLibPrefix(toolChain) + libName + '.' + + getDynamicLibExtension(toolChain); + final String libA = getStaticLibPrefix(toolChain) + libName + '.' + getStaticLibExtension(toolChain); + + class LibFilter { + public boolean accept(String name) { + if (equals(libA, name)) + return true; + if (!startsWith(name, libSO)) + return false; + if (libSO.length() == name.length()) + return true; // we don't necessarily have a version extension + if (name.charAt(libSO.length()) != '.') + return false; + String ext = libName.substring(libSO.length() + 1); + try { + Integer.parseInt(ext); + return true; + } catch (NumberFormatException e) { + return false; + } + } + + boolean equals(String a, String b) { + return a.equals(b); + } + + boolean startsWith(String string, String prefix) { + return string.startsWith(prefix); + } + + } + class CaseInsensitiveLibFilter extends LibFilter { + @Override + boolean equals(String a, String b) { + return a.equalsIgnoreCase(b); + } + + @Override + boolean startsWith(String string, String prefix) { + return string.toLowerCase().startsWith(prefix.toLowerCase()); + } + } + + for (Iterator i = dirs.iterator(); i.hasNext();) { + IFileStore dir = getEFSFile(i.next()); + LibFilter filter = dir.getFileSystem().isCaseSensitive() ? new LibFilter() : new CaseInsensitiveLibFilter(); + for (IFileStore child : dir.childStores(EFS.NONE, null)) { + if (filter.accept(child.getName())) { + return child.toURI(); + } + } + } + return null; + } + + /** + * Gets an EFS file-store for the specified path or URI, which may be a local filesystem path or may be a more abstract URI. + * + * @param pathOrURI a local filesystem path or URI + * + * @return the file store, if one could be determined + */ + private static IFileStore getEFSFile(String pathOrURI) { + IFileStore result; + + try { + // try it as a URI + result = EFS.getStore(URI.create(pathOrURI)); + } catch (Exception e) { + // most likely, the path is not a URI, so assume a local file and try again + result = EFS.getLocalFileSystem().getStore(new Path(pathOrURI)); + } + + return result; + } + + private String[] substituteEnvVars(IOption option, String[] paths) throws CdtVariableException { + BuildMacroProvider provider = (BuildMacroProvider) ManagedBuildManager.getBuildMacroProvider(); + IMacroContextInfo info = provider.getMacroContextInfo(IBuildMacroProvider.CONTEXT_OPTION, + new OptionContextData(option, fParent)); + String delimiter = ManagedBuildManager.getEnvironmentVariableProvider().getDefaultDelimiter(); + String inexVal = " "; //$NON-NLS-1$ + SupplierBasedCdtVariableSubstitutor subst = provider.getMacroSubstitutor(info, inexVal, delimiter); + + String[] newPaths = CdtVariableResolver.resolveStringListValues(paths, subst, false); + for (int i = 0; i < newPaths.length; ++i) { + String newPath = newPaths[i]; + int len = newPath.length(); + if ((len > 1) && (newPath.charAt(0) == '\"') && (newPath.charAt(len - 1) == '\"')) + newPaths[i] = newPaths[i].substring(1, len - 1); + } + return newPaths; + } + + private static String getStaticLibPrefix(IToolChain toolChain) { + IOutputType type = findOutputType(toolChain, BUILD_VARIABLE_STATIC_LIB); + if (null == type) + return "lib"; //$NON-NLS-1$ + return type.getOutputPrefix(); + } + + private static String getStaticLibExtension(IToolChain toolChain) { + IOutputType type = findOutputType(toolChain, BUILD_VARIABLE_STATIC_LIB); + if (null == type || type.getOutputExtensionsAttribute().length == 0) { + return "a"; //$NON-NLS-1$ + } + return type.getOutputExtensionsAttribute()[0]; + } + + private static String getDynamicLibPrefix(IToolChain toolChain) { + IOutputType type = findOutputType(toolChain, BUILD_VARIABLE_SHARED_LIB); + if (null == type) + return "lib"; //$NON-NLS-1$ + return type.getOutputPrefix(); + } + + private static String getDynamicLibExtension(IToolChain toolChain) { + IOutputType type = findOutputType(toolChain, BUILD_VARIABLE_SHARED_LIB); + if (null == type || type.getOutputExtensionsAttribute().length == 0) { + return "so"; //$NON-NLS-1$ + } + return type.getOutputExtensionsAttribute()[0]; + } + + public static IOutputType findOutputType(IToolChain toolChain, String buildVariable) { + // if we're determining whether to re-build an executable, then it won't have an output + // type for shared libraries from which we can get a filename extension or prefix. + // We have to scan the extension toolchain + toolChain = ManagedBuildManager.getExtensionToolChain(toolChain); + ITool[] tools = toolChain.getTools(); + for (int i = 0; i < tools.length; ++i) { + IOutputType[] oTypes = tools[i].getOutputTypes(); + for (int j = 0; j < oTypes.length; ++j) { + if (buildVariable.equals(oTypes[j].getBuildVariable())) + return oTypes[j]; + } + } + return null; + } + + private String[] getDepObjs(IConfiguration configuration) throws BuildException, CdtVariableException { + IOption[] options = fParent.getParent().getOptions(); + String[] userObjs = null; + for (int i = 0; i < options.length; ++i) { + int type = options[i].getValueType(); + if (type == IOption.OBJECTS) { + userObjs = options[i].getUserObjects(); + return substituteEnvVars(options[i], userObjs); + } + } + return new String[0]; + } + + private String[] getDepFiles(String sPath) { + return new String[0]; } public void setRebuildState(boolean rebuild){ diff --git a/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml b/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml index ddc4c317689..3fce76a186d 100644 --- a/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml +++ b/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml @@ -176,7 +176,7 @@ + kind="additionalinputdependency"> + kind="additionalinputdependency"> + kind="additionalinputdependency"> + kind="additionalinputdependency"> + kind="additionalinputdependency"> Date: Tue, 22 Nov 2011 19:34:55 -0500 Subject: [PATCH 2/4] Bug 210248 - [Internal Builder]does not rebuild a dependent project in case of a reference library project change - fixed external builder --- .../managedbuilder/internal/core/AdditionalInput.java | 10 +++++++++- build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml | 10 +++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/AdditionalInput.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/AdditionalInput.java index 01c05fd9479..0ac2ec3976f 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/AdditionalInput.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/AdditionalInput.java @@ -337,7 +337,8 @@ public class AdditionalInput implements IAdditionalInput { if (fRebuildState) return fRebuildState; if (fKind.intValue() == IAdditionalInput.KIND_ADDITIONAL_DEPENDENCY - || fKind.intValue() == IAdditionalInput.KIND_ADDITIONAL_INPUT_DEPENDENCY) { + || fKind.intValue() == IAdditionalInput.KIND_ADDITIONAL_INPUT_DEPENDENCY + || isLibrariesInput()) { IToolChain toolChain = getToolChain(); if (!toolChain.isExtensionElement()) { long artifactTimeStamp = getArtifactTimeStamp(toolChain); @@ -395,6 +396,13 @@ public class AdditionalInput implements IAdditionalInput { return 0; } + private boolean isLibrariesInput() { + // libraries are of the "additionalinput" kind, not "additionalinputdependency" because otherwise the + // external make builder would generate makefiles with $(LIBS) in the dependency list, resulting in + // failure to build dependency -lxyz etc. + return (fKind.intValue() == IAdditionalInput.KIND_ADDITIONAL_INPUT && Arrays.asList(getPaths()).contains("$(LIBS)")); //$NON-NLS-1$ + } + private boolean dependencyChanged(String sPath, long artefactTimeStamp) { try { IToolChain toolChain = getToolChain(); diff --git a/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml b/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml index 3fce76a186d..ddc4c317689 100644 --- a/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml +++ b/build/org.eclipse.cdt.managedbuilder.gnu.ui/plugin.xml @@ -176,7 +176,7 @@ + kind="additionalinput"> + kind="additionalinput"> + kind="additionalinput"> + kind="additionalinput"> + kind="additionalinput"> Date: Tue, 22 Nov 2011 19:38:11 -0500 Subject: [PATCH 3/4] Bug 210248 - test projects update --- .../resources/depLibsProjects/tapp.zip | Bin 4514 -> 3970 bytes .../resources/depLibsProjects/tlib.zip | Bin 3091 -> 3068 bytes .../resources/depLibsProjects/tobjs.zip | Bin 3603 -> 3362 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tapp.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tapp.zip index 56f88881c1a0ecf9c98be04dc41553c85a92fad1..13d5ab0e4ba02676a31936882b1c480b3f2a2846 100644 GIT binary patch delta 3233 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 Rum6c&yV9a7i=+AT`VW;Q@D2a~ delta 3779 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 diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tlib.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tlib.zip index 2167f3f90247d6535bedd90d2a67ed32e8e6b7ce..84ec0f936e7235f34570adf2977fe8aec4fa8238 100644 GIT binary patch delta 2592 zcmY+Gc{CJiAIF6;wn)RE$Zp8KUF*d#mc$rLWl6Gy8DuO&24hLKFlb~cYca@LacyPa z#x7fd^dF zOs8jAXCL3YC|76yjhi-p**)MeY#6|RDx=`!ut|hadrZWY24P&dR3mOZnM`!8M@uz? zcoJr=nxGp_ZwxYP!EX5V+{rC? zKsuAiSaxR8R=(22_O$BTCZ0E$6t;s@PiL2;m7t&lCwIWqi9k((!>uQ*?LFPgw4r~y zRY&nWKHittbPjErBT%QHv1({ACOw&hyFemRL?4XJVU;28E$<3<-GMDpsuEuKo3Yam z7FBQb|K-9|_r+Ck}s7A9fG{xo3gTQ6wpXD>ibej*N1A%pW-soSs5eRKd6mnMqx6Tgj;w&(=AL zTBbECdvaAV*)KRQC=^ zEmW^?S9#_m9=lg#;Rg2t<3eV6KV)I`%OC=FON&G$P5}HI5^pe=wC|4FdaHtl0b z=uous!Q2QN9?B4*g!R@C>XYWTzo{f(soqb4!KXj6F>@x0VbE}nRhe_iGbMEK-1?5X zimSAht{3#;Z+E`oacx4 zd#-`Jsi>YT7h|!&=PY(;8;+a)=>kh>{5D!Ug?0^i`Fn#S&?u0Lfie<0zI~zZk+FD6 z&E-Vjxn0GlJlNcYzbku*AVVJUhsE_n%(TXKs#Rp(V&(=>a{TpgbDzeg?mVjSTI&q{ zj@FvaL#(oYYkz%Gw5PI?hg;IckRnC&~mGHxy$h7)o09 zB-qpAtr)Vn3dTqL56HB%IhP9D3rLJzDEy}DR{Z)M=Nm+yftY~@yI05>t||r*cA2V6 zmX=uaUM!P(6cmCjkOP=2cWbaa*3EDMdhG1Sp2JHh5R4|(F-96`VD>;AN~E|t&ho84 z4%*my73tLbyeKx6^i@7@r>9hA1_j>lZp72sSb@Y@Q({CTSj^=6q84K7pOw8|vnIU9 z$O?JokV3FN-UwfKl)11 z{JW@Lp-{7}FYgsKw0ron={pyL6o37#^tg@fD#+at0y0ums(_JL9`IZ$7@xxFb+6^4 zbadWDABC@4m7BC?La`6Td$MddGlqIBB$(?D=nWja=Ixv$G{W-J)UJ#pTM?`SQ=@_E zWn!~?XugBcT$Hg3d}?z~4X3+=Ob%x5<14z$F~Ufge%Us~39;i=J~WKszk)HnM+5T1AXe@$(B@z214RcwXo;ZG=1EG-`16oG0@u~?|_3o-)17IQvSJXh!F zk4yG1O|?THWBaKYpYx2|Gjo9I)(@?G8+eV5``Kg!9^qUFZh8#oRTp_IfUT9AZk+oW zu#lU_YV?e^p?iRJGsE5BTN`ZDkY27(4C|0~TRT%*TF24nP36o;{8F7QVgzcP`azkH zyTI5dxwtuc5FQk?0&d>A?kP^O(#;x?I1?Qt#RBxOPrJCr` zc4S^AU=&)R!w`6P|L6Pa&2Dfv?tb!C1gPCCNPmi!xy_v(&w4AYc+@*~G`!=*LoI7- zFu6mh!C0J_+IJDZUSgqH@=aOMJpQ}_j$IFCDj3sbbSYCVq)8j;cRo+_#M`*|I|gK{ zG}tUff8RKyD;C-76+6(q^tC!1TM@1igI3PuGwC2nE5g8qJFDZj4AxqlUQ+^g#&?sR z`c!JnKZxbeo__;aZ)w{Bm6g%|kQj!)Y25D7S*TW||479HHczmj^NkJpN!oU8yTrP& z_g)U60}@|HblALcH;+8_YvcSTk?^`vn`{g^zBqK}#}6q~n%P-bWJRHj@JD{O>!9_c zZl5jlI5YG0#&(PbpOh{oD3&Fj+Ov$Ix zvCNp4|Ah~kX7>IFepc}Y+{kflvgrzi%X&qa{@SR2qAIE?M5#92HTnkZ8b|Wf!L0S2 zMqD$0^$v%fK*DN0T_7J%VBl>nc!H5<^P~mkrS`p!2^{6}sj|M2dco8FUj98b>tpuR z6CmO$kdg1x*pC;CG&I?kG&H}Mr}HcVrT&X~Ud}Mio)H2v$~r8G44t8&kvlc~636`? zkWwPRcyhm#g)w<(Qi42WI)WrEFG!onNXqnC$yY6xQfW_JK*oxyj7@>l;ryoyarF!> zC(SR=`aRB1(E4}%gI&MdI!~ki6D)0x<*dU`)8c7F+5bV>@9Ljne-FU&uNOWs)6n?& dI?MTcdN|3;IwP(E7=GTxPHoIL)|Rx%|Sg>@%Kt>_50oBd1?DMmqOTf(i6#j{yGLdbcO* zcfesv#aGFiy4_fpmJXjh?$N`V%_m>PIg$YPnPDM=?akG*Y|cf z*amBG@Xa1qQs$6uL#94COW1{9meDp9%ydzWiYxjS6w5d^)^Rp2zm;3X4)pQEhY29x zaP^$u*Ew?tOHE|HIw4j|J3*V_n$*TYWhG8ktETf++JY2|g@$W{{`g4j%5Zk`U#qLb za!mb2x!Ly-mC(V_LY=5Z$b7T`Oc< zQm%L?3LU?({+P=!)YM>tzuQ%sGl}N5qkQ2ERM@Vj?BEa&IRyypxBkmv{9;}K{B=sO!0Klq=BL_QBxT7}H_;u7 zghS}j9)nVbSS^!`=ADQ-Angz`-l7w#x!(59^45q5x_}AkSXRwgAk6xhR0q?kVr*4_ zO-e+9M+;H$QO({cT+xI+X<6g#vZclHI5-0NS%;%KCH-amMC-`|ZqSL~_SIY41S4SloYjU5F zUFYk|p0HrNY}$co6)mTWcw>rNAYSxwoA%Ukt5kfq!o4zj{*!erln{ssBG)BpHdeoP;GA4Ov2fI4Mrh}MW z(-+=46y}+y_Y>76Zy|jk@NpU6S9sUj6h8??~$`_SwJD#p;R&gZL(J(&)OPB>q`b$Xedkq%jmf}u25HRX7NXp%F#OlpKY#kE-~J= zyjs8G^fD=q>r@^G><)8ST~SXq8Y09Y#Br2E#mwx zUJJ>;;cz>f&z7>8xwOWnK~mg?CGbsQW6#jKagNXN+tweRgv{%eKGEl~O}$dcUTQ@G z?&UMD4xCH2fmT35B;;(R`UEW44a3^*xZe=t-4b~cy`)Rj9I!?icaWd;UQ@j&)g+5D zF~*FE1{~8#_sfF46;%|S^Ryh5AUPPNHcDl>^8+us*oU}{UH-Ep@ubSV!!{aSICMDFV%*pit(zl*Ti_x6vi%htjx>+*Lxpu zt6hLqK|?CWf(l%E3UN-A6P%Xiz6)&dSs@6TghTk8jQeCyD4q|;Jt)k<6Y4rY%00A; z#3Ey){Vux`>Y90Eo5Xmm%H0X)ClouR-~WN&?j#yUNx%GNRTbY?qvtQ~y*d({N=;{J zU{^o#G~C6gTug97Q_x0A^ieXfm;ve0eRNQ;J%zh2wQ8);snPZ9bClW`v^vC0PwQ--3QoC|T>f@ShPLzI$fh7*!nY*I5qr*b61`O@8jgudL_MM2oxV?@GaSxN>-<4BO6Xn zrJpW;UFii%sbJkBs2PkJN%ywKV3A0*OTZZKF4uS zb0uPtSr!mp?BY@fVX1rfXkd4b2H`yYXh^?rfmMS8$Bq=NC-b1~k==*QSYs65Iov!g zKMa>Qx1x<~+(Ny)O}e$zwalMvPGhQ1?(GhlKd$rso6+VEsYwiBJwak%9%ld;4nRQv z+j8hSK_BqFvhO@UGyi5id+=@sN}qe4v}ZU!bNdzqe1G(=2JMaAAd)_RjqGdDFIKdd z5TF;=?}_h@WQ6$9>)#z|KX?LkkG|elru`iK1Mvw9&~H7Zo0a5up)x`o+EqW$Vfv-T L00PzRN*?HME{|QT diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tobjs.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tobjs.zip index 3fe31c0ee4c0144f5a8336a9c0bcad1eddee8396..d80da1aae40a60ac812ea56f383270bbe553665e 100644 GIT binary patch delta 2528 zcmZ{mc{mhW8^Fgt*0RpXe#dSYWFJ%*8WRRdO0K0*jb&tPWtkaN#*$p3EXk5RLPqwq z*psn`WZx%@J;~+yzUOwoKfd!m=Q+#!JMZ)UcYcYY*{29-6ce)m0C*G|*nl&De+~Ad zy^5QUFAj@w^P@Rl#iyC`g$0DMAZA^vD@?~&>UMKI9op{>ITV*TieCeps<)0|0TRKL zd#j_TiOfJGG3l~iuWg5FU*FenL#O*PbHS^b1}S%pbbJ{PV+D1dVIJXFD1>RN&%?0H zGwE0;|HnLBn)gJ`>A@4jJ53F0<5r@eP>Xyu^;W#TeyH1JDV{L1OFu``_#x3uo|e@7 zx0a3{f;Kai_G7u%l8lp=BYCHw@VOEIM8)Vf7s?dcrLP86T9fP6Xm-D_0#}WR-Mk>d zHL^pV9&yx*O#8w9;2H0Y9K!zf4)&rFj-uyCJIwN%>NrD+q@#>I1uFfvKw2|trTD{wy#-p#tj@i~+ckz^>ZpXD@Is!{*zt-8y^ z?)qO0poh4rlms#)iZb+$-rDROb(>gOs032r@vLgu+nq1F9a__VieOq69z#{4mOsqG z2M}jtbgzB66W5FF6t-3o;BW2z@OtVHz4W2^VD&AeqZ2O*q0eogqJ$uAg`Bscv9cQ7 zv4AaOX4LbW4eYh(#B;aEKVQb7JZLIEa5Zh4Y$UcSj+&3+_-Hw(TTa_MOK@L(fbxQC zhI$s6ck(>sv}gB60`ja@x)OoUk51~$SSaT*wSMHx8P~PT;M#FXM{P>dhwVgO<#lbD zGG%&gMU*TywD8;fix9Ha!^3qECPAK7BSuf~8+QRsZ5=#NUwvKRBV;I6jsak^DkNrX z5&7k9I6gYtytV*o!_F+LUDN&Ej&ft4Stm7v&4Ih8zVYA}!Hg)8)APC~L*z1Hm3n2F zx9TU|sH|k0lACxZ27Pu39XvH^yDFhiRkrN>ZOLYuKBHmfC9eaIVRn-LvzfI^Q*306TC}J#ztm-(3Ujcx zLkie6RDo_)%!#Li^St1Ze0jl$akY4!nxfB{y~0`?2{_2NyHbI)T?V1x{S?^rB<<^` zk4-HESG)wq_N+Z^ z|Fj-4>dKLEeKy1o#iS}&48_%(m%{a`w6x$Hek z3$;GQ%)6&Q*QnkA?fg~r+YIgK{Hx)?F5N0JG|-ihG32PKC;zbQgS zc?{i>f!#SLfHQU~3aaY)qNJGA(6u8HuubdIPI;1Acq`50!s+|i3dN;xMQ=OImG18Q zdbZI&_{i=C2`mnFvyCbWQ>-?&w&FNRt(Q_SvazX(>mhPgh1?K$uMbl*GKFvv0W!gW zHuLmtqkHGuHeKds$fQKVnBZAGsc$HvufCXi zK4fl_tXlaAy=e_K>vgbbTsql(J}1Fhfrb z!j4&@l#JaWN#}=y0le%aD4ln2#*lAf0Br$0t8n=Jy#L{w7--stI4ALBOj%T0Hh^b1 z#9Tsx^X5E9fhNH*g1Ue{nL}x-Du^1a3k<$DNOGwf_22rm9uJ>%qD6X~gnQrLXB{Rr zZ*dkE_wQ1_YaIZ4<<7t>=#=VNvxLKiwZ++~^p>LAm4$Zguur{KI2>H`moRa3#m~Oq zvTn+uy+&}huRbj7K&nb5Pv+jm(p=^3dN|i$MaxdUKcTUSIql)sRi0@-NyI?I2}6OE zD}Mq41*#)VymmZZTH`|G3us>qzr02n3hZv*EcP6PNq~KtUQfBdSIpR;q%JL$bq!Ja zInSVQ<7oS^rJ=kGm7mv_hpi6TQ67QuuiegsuH?rfwnpBH!N_&NNd57X@dukuIY-~X zOnK(`sM$;UuvOExcTIMt_qwKgtSlID!i}>>k_X(dcSznl(i1k|cRH)X4IlvEWeWiO z)|E(WtnP1Hsm$S+V31`4F18v5^)LVcYDfJ4V-xN#$glzLX`*fo92ICgqJNX=|E`)C z!C-I61_Yj^ahe>F)<+YKVqg>i{1&Ev_jW8y|2zKCr+=O$_Hc^{A4AWM8dUkOT>Z|< zbBl={XLC6K0KBgo%n#>^#jCje23)wsI#!@$1NyykjLqy0{clYDP`JT^tp65KT_vick`O4W(kp#`qoLo?V0{{S% zE3PQ^@}qdzyYqN^AA-tHhUMz^FNXgIlT%)sq;@d5S(cho83v*B1i09XkCfL-hW+=1xj;evM{&D!9+ z)AXQ0bH?8}o5r&4=JJu3$;ncfN>XkcM+A+uD6UCV9&t|26Y;vvbQ{M*cI&J$9{MWkImts# z&W~{!l%yEBhXp4GtJANDCVn9e@m<)ox}Bb^IPa;@txA%nPTCNHn1+v|)I;wsXiNw#z`^r2xdh(KqSHhsV!$6(?McsY!j~r^huF z=J&}o63~<;rf_g&Fx5N|iU)K?6Y>^fu2?F8YJ0du)$9h}FpT#5+M0xhM?<<~d)DPE6vda}%&+kf3rN!J;ldpGI7^<5-j=*# zugkN(oXkJXp`&5VqA@xnfQfDcXH?7vGM`e7dqbs|M@n%Skjr=L{eg-z@Ii(5IPv20 zz{b>Diqdz^@AGPCHq;ss*(2o)<<2#YuP+En>Vx~+6wxuo*&34VSF*>7g@?&dV!#;p zp{51|f4Z!*619Kg!9D|pTa*hjGg$#+P7+5C|0Pk9>I5seUPLXpL_Q1+dEQ@T!-@V# zmTMIay)YM}k|jf;G{*~+gtTt@Yl{-K!6nc})W*@akYj0%_||& z2bypPbyb@aefXViq>E;=kv<_@`hIX~9g;DUo+Ajws%rWxr0dW$`54An&WK_}tO?-! z6mM*)#`h%De=?kM5lt1cqQo`oNS~c)>2ci@)=&(YtdP*A6gQ3@6`G zQ4wm?T6D&Lh?H|@y{*1DVA#T^AA|R?yq8mJ=g?uneR4Tdf>Fr~dvU`q+1AFwrLGZRbUk z*FFR8V)P-0N-G1}F9y2iCu$=)P0FmaKkbb#c6d77XkMyx6$Kqgj<~M|y4HFr$4n)0 z-4gb2Dd2g9I1&*3_~MF-%t-7_CwKclLM(2~So5VR4r!Q}Tr#Pt5OJkOx-b^Wqhtl7 z+^aB&teF{cQ)jerGY|k&uQ*~egBp!&H|D>2kv)BaHW(8LuGKYY%~Pl0VS*p9UGG9G zZA%uj@vVLZu5SGie%Wr|G`+&e=#ai0WU~S|49&s_B5ogP>`XX(eWNeXZa?z)<1bBJ z{p+7!GZtgCR21}cKffNI8k+lV8>{l_)tOk+X0nF3Y97omWYBsk`s-Ql*R-Y=Q7r99 zg*@e3bTm~jGpkbM{VziTfTmy52eE;1nC@4CA7qp-v5exm^j%P;9^gP#`9+mD>X#QH zhsweaSSVN6*ICJ&%EIrFraNdR$?~`_RI3W&!y&Lsc&g?~`6}jc_ycZ2^4mFmOuoYrhH~HWU^SAe%-$uK@ zhIvlkv@A!(57y-09y5rS@y8G)tLoEK>J~p$#JGA&-F?~U?O!)p5k^JBXu&2az&>tXHM)q$KQhDh8lUXFeC zYdw!fxnmQxm@%rHV$&Z>!&%ZYKS!a%3XVqGod!Joi)a=vCRB~Od9T4$_Ems7Vke9_ z30c3o8i>v2unm2iQCwT1S(bbV>nzGmlh{Kpqp^+xBG?^uv}dLwAp3s04$rs`&v9OqXF>Q$0?8ky}bgkj}Yt|p&thqgDR$a$l zYAB--s0@Fhp2~R{+je!Fh9GG38&t;|KhSaHWqSAE@7`URznL;qxWD2dnb3{WKfeXp zjb-(%r6_HbYJ)6Ty>jOOrbR`7XmtE{^+oh#U}Y~+vdvT0ls{f(#dneJYrEMY7B91o zV<6*a+>VSPld$(u`S)@=2xWjLsjW+n4Z>G^(Jd Date: Thu, 24 Nov 2011 12:30:37 -0500 Subject: [PATCH 4/4] Bug 210248 - test projects update, revert sample projects to MinGW toolchain This reverts commit 8cc8d861c8b0a8c839a59655719466d1fbc4e275. --- .../resources/depLibsProjects/tapp.zip | Bin 3970 -> 4514 bytes .../resources/depLibsProjects/tlib.zip | Bin 3068 -> 3091 bytes .../resources/depLibsProjects/tobjs.zip | Bin 3362 -> 3603 bytes .../ManagedBuildDependencyLibsTests.java | 11 ++++++++++- 4 files changed, 10 insertions(+), 1 deletion(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tapp.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tapp.zip index 13d5ab0e4ba02676a31936882b1c480b3f2a2846..56f88881c1a0ecf9c98be04dc41553c85a92fad1 100644 GIT binary patch delta 3779 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 delta 3233 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 Rum6c&yV9a7i=+AT`VW;Q@D2a~ diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tlib.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/depLibsProjects/tlib.zip index 84ec0f936e7235f34570adf2977fe8aec4fa8238..2167f3f90247d6535bedd90d2a67ed32e8e6b7ce 100644 GIT binary patch delta 2605 zcmai$2T)Vl8png8(gH3U6$GRhAv{`WiWKPzB$OB;(pLgV2`x0K7e$H?=_OL73oM`n zLX#!}Qi9SUf(oc8AYD)h>xPHoIL)|Rx%|Sg>@%Kt>_50oBd1?DMmqOTf(i6#j{yGLdbcO* zcfesv#aGFiy4_fpmJXjh?$N`V%_m>PIg$YPnPDM=?akG*Y|cf z*amBG@Xa1qQs$6uL#94COW1{9meDp9%ydzWiYxjS6w5d^)^Rp2zm;3X4)pQEhY29x zaP^$u*Ew?tOHE|HIw4j|J3*V_n$*TYWhG8ktETf++JY2|g@$W{{`g4j%5Zk`U#qLb za!mb2x!Ly-mC(V_LY=5Z$b7T`Oc< zQm%L?3LU?({+P=!)YM>tzuQ%sGl}N5qkQ2ERM@Vj?BEa&IRyypxBkmv{9;}K{B=sO!0Klq=BL_QBxT7}H_;u7 zghS}j9)nVbSS^!`=ADQ-Angz`-l7w#x!(59^45q5x_}AkSXRwgAk6xhR0q?kVr*4_ zO-e+9M+;H$QO({cT+xI+X<6g#vZclHI5-0NS%;%KCH-amMC-`|ZqSL~_SIY41S4SloYjU5F zUFYk|p0HrNY}$co6)mTWcw>rNAYSxwoA%Ukt5kfq!o4zj{*!erln{ssBG)BpHdeoP;GA4Ov2fI4Mrh}MW z(-+=46y}+y_Y>76Zy|jk@NpU6S9sUj6h8??~$`_SwJD#p;R&gZL(J(&)OPB>q`b$Xedkq%jmf}u25HRX7NXp%F#OlpKY#kE-~J= zyjs8G^fD=q>r@^G><)8ST~SXq8Y09Y#Br2E#mwx zUJJ>;;cz>f&z7>8xwOWnK~mg?CGbsQW6#jKagNXN+tweRgv{%eKGEl~O}$dcUTQ@G z?&UMD4xCH2fmT35B;;(R`UEW44a3^*xZe=t-4b~cy`)Rj9I!?icaWd;UQ@j&)g+5D zF~*FE1{~8#_sfF46;%|S^Ryh5AUPPNHcDl>^8+us*oU}{UH-Ep@ubSV!!{aSICMDFV%*pit(zl*Ti_x6vi%htjx>+*Lxpu zt6hLqK|?CWf(l%E3UN-A6P%Xiz6)&dSs@6TghTk8jQeCyD4q|;Jt)k<6Y4rY%00A; z#3Ey){Vux`>Y90Eo5Xmm%H0X)ClouR-~WN&?j#yUNx%GNRTbY?qvtQ~y*d({N=;{J zU{^o#G~C6gTug97Q_x0A^ieXfm;ve0eRNQ;J%zh2wQ8);snPZ9bClW`v^vC0PwQ--3QoC|T>f@ShPLzI$fh7*!nY*I5qr*b61`O@8jgudL_MM2oxV?@GaSxN>-<4BO6Xn zrJpW;UFii%sbJkBs2PkJN%ywKV3A0*OTZZKF4uS zb0uPtSr!mp?BY@fVX1rfXkd4b2H`yYXh^?rfmMS8$Bq=NC-b1~k==*QSYs65Iov!g zKMa>Qx1x<~+(Ny)O}e$zwalMvPGhQ1?(GhlKd$rso6+VEsYwiBJwak%9%ld;4nRQv z+j8hSK_BqFvhO@UGyi5id+=@sN}qe4v}ZU!bNdzqe1G(=2JMaAAd)_RjqGdDFIKdd z5TF;=?}_h@WQ6$9>)#z|KX?LkkG|elru`iK1Mvw9&~H7Zo0a5up)x`o+EqW$Vfv-T L00PzRN*?HME{|QT delta 2592 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