diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/managedbuilder/testplugin/ManagedBuildTestHelper.java b/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/managedbuilder/testplugin/ManagedBuildTestHelper.java index b7af0418379..ff2f95db1ef 100644 --- a/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/managedbuilder/testplugin/ManagedBuildTestHelper.java +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/managedbuilder/testplugin/ManagedBuildTestHelper.java @@ -15,6 +15,7 @@ import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; +import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; @@ -136,6 +137,14 @@ public class ManagedBuildTestHelper { } static public IFile createFile(IProject project, String name){ + return createFile(project, name, new ByteArrayInputStream(new byte[0])); + } + + static public IFile createFile(IProject project, String name, String contents){ + return createFile(project, name, new ByteArrayInputStream(contents.getBytes())); + } + + static public IFile createFile(IProject project, String name, InputStream contents){ IFile file = project.getFile(name); if( !file.exists() ){ try { @@ -148,7 +157,7 @@ public class ManagedBuildTestHelper { } // file.create( new ByteArrayInputStream( "#include \n extern void bar(); \n int main() { \nprintf(\"Hello, World!!\"); \n bar();\n return 0; }".getBytes() ), false, null ); - file.create( new ByteArrayInputStream( new byte[0] ), false, null ); + file.create(contents, false, null ); } catch (CoreException e) { TestCase.fail(e.getLocalizedMessage()); } diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/BuildDescriptionModelTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/BuildDescriptionModelTests.java index 1381d277538..9d75960ad0a 100644 --- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/BuildDescriptionModelTests.java +++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuilder/core/tests/BuildDescriptionModelTests.java @@ -23,6 +23,10 @@ import junit.framework.TestCase; import junit.framework.TestSuite; import org.eclipse.cdt.core.CCProjectNature; +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.model.ICProject; +import org.eclipse.cdt.internal.core.pdom.indexer.fast.PDOMFastIndexer; import org.eclipse.cdt.managedbuilder.buildmodel.BuildDescriptionManager; import org.eclipse.cdt.managedbuilder.buildmodel.IBuildDescription; import org.eclipse.cdt.managedbuilder.buildmodel.IBuildIOType; @@ -239,7 +243,7 @@ public class BuildDescriptionModelTests extends TestCase { IBuildDescription des = null; try { - des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED); + des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED | BuildDescriptionManager.DEPS); } catch (CoreException e) { fail("build description creation failed: " + e.getLocalizedMessage()); } @@ -262,7 +266,7 @@ public class BuildDescriptionModelTests extends TestCase { BuildDescription tDes = new BuildDescription(cfg); IBuildDescription des = null; try { - des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED); + des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED | BuildDescriptionManager.DEPS); } catch (CoreException e) { fail("build description creation failed: " + e.getLocalizedMessage()); } @@ -331,7 +335,7 @@ public class BuildDescriptionModelTests extends TestCase { IBuildDescription des = null; try { - des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED); + des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED | BuildDescriptionManager.DEPS); } catch (CoreException e) { fail("build description creation failed: " + e.getLocalizedMessage()); } @@ -451,7 +455,7 @@ public class BuildDescriptionModelTests extends TestCase { IBuildDescription des = null; try { - des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED); + des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED | BuildDescriptionManager.DEPS); } catch (CoreException e) { fail("build description creation failed: " + e.getLocalizedMessage()); } @@ -529,7 +533,7 @@ public class BuildDescriptionModelTests extends TestCase { IBuildDescription des = null; try { - des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED); + des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED | BuildDescriptionManager.DEPS); } catch (CoreException e) { fail("build description creation failed: " + e.getLocalizedMessage()); } @@ -964,7 +968,7 @@ public class BuildDescriptionModelTests extends TestCase { IBuildDescription des = null; try { - des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED); + des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED | BuildDescriptionManager.DEPS); } catch (CoreException e) { fail("build description creation failed: " + e.getLocalizedMessage()); } @@ -972,6 +976,144 @@ public class BuildDescriptionModelTests extends TestCase { doTestBuildDescription(des, tDes); } + public void testDes_gnu30_exe_deps(){ + IProject project = createProject(PREFIX + "gnu30_exe_deps", "cdt.managedbuild.target.gnu30.exe"); + try { + CCProjectNature.addCCNature(project, null); + } catch (CoreException e1) { + fail("fail to add CC nature"); + } + + ManagedBuildTestHelper.createFile(project, "a.c", "\n#include \"a.h\"\n#include \"d.h\"\n"); + ManagedBuildTestHelper.createFile(project, "b.c"); + ManagedBuildTestHelper.createFile(project, "c.cpp", "\n#include \"b.h\"\n#include \"e.h\"\n"); + ManagedBuildTestHelper.createFile(project, "d.cpp"); + ManagedBuildTestHelper.createFile(project, "a.h", "\n#include \"b.h\"\n"); + ManagedBuildTestHelper.createFile(project, "b.h", "\n#include \"c.h\"\n"); + ManagedBuildTestHelper.createFile(project, "c.h", "\n"); + ManagedBuildTestHelper.createFile(project, "d.h", "\n"); + ManagedBuildTestHelper.createFile(project, "e.h", "\n"); + ManagedBuildTestHelper.createFile(project, "f.h", "\n"); + + ICProject cProject = CoreModel.getDefault().create(project); + try { + CCorePlugin.getPDOMManager().setIndexerId(cProject, PDOMFastIndexer.ID); + } catch (CoreException e2) { + doFail("testDes_gnu30_exe_deps: failed to associate the fast indexer with the project"); + } + IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project); + IManagedProject mProj = info.getManagedProject(); + IConfiguration cfg = mProj.getConfigurations()[0]; + String art = cfg.getArtifactName(); + String ext = cfg.getArtifactExtension(); + if(ext != null && ext.length() > 0) + art = art + "." + ext; + + String cName = cfg.getName(); + + BuildDescription tDes = new BuildDescription(cfg); + BuildStep step; + BuildIOType type; + + // + step = (BuildStep)tDes.getInputStep(); + + type = step.createIOType(false, false, null); + type.addResource(tDes.createResource("c.cpp")); + type.addResource(tDes.createResource("d.cpp")); + + type = step.createIOType(false, false, null); + type.addResource(tDes.createResource("a.c")); + type.addResource(tDes.createResource("b.c")); + + type = step.createIOType(false, false, null); + type.addResource(tDes.createResource("a.h")); + type.addResource(tDes.createResource("b.h")); + type.addResource(tDes.createResource("c.h")); + type.addResource(tDes.createResource("d.h")); + type.addResource(tDes.createResource("e.h")); + // + // + step = tDes.createStep(null, null); + + type = step.createIOType(true, false, null); + type.addResource(tDes.createResource("a.c")); + + type = step.createIOType(true, false, null); + type.addResource(tDes.createResource("a.h")); + type.addResource(tDes.createResource("b.h")); + type.addResource(tDes.createResource("c.h")); + type.addResource(tDes.createResource("d.h")); + + type = step.createIOType(false, true, null); + type.addResource(tDes.createResource(cName + "/a.o")); + // + // + step = tDes.createStep(null, null); + + type = step.createIOType(true, false, null); + type.addResource(tDes.createResource("b.c")); + + type = step.createIOType(false, true, null); + type.addResource(tDes.createResource(cName + "/b.o")); + // + // + step = tDes.createStep(null, null); + + type = step.createIOType(true, false, null); + type.addResource(tDes.createResource("c.cpp")); + + type = step.createIOType(true, false, null); + type.addResource(tDes.createResource("b.h")); + type.addResource(tDes.createResource("c.h")); + type.addResource(tDes.createResource("e.h")); + + type = step.createIOType(false, true, null); + type.addResource(tDes.createResource(cName + "/c.o")); + // + // + step = tDes.createStep(null, null); + + type = step.createIOType(true, false, null); + type.addResource(tDes.createResource("d.cpp")); + + type = step.createIOType(false, true, null); + type.addResource(tDes.createResource(cName + "/d.o")); + // + // + step = tDes.createStep(null, null); + + type = step.createIOType(true, true, null); + type.addResource(tDes.createResource(cName + "/a.o")); + type.addResource(tDes.createResource(cName + "/b.o")); + type.addResource(tDes.createResource(cName + "/c.o")); + type.addResource(tDes.createResource(cName + "/d.o")); + + type = step.createIOType(false, false, null); + type.addResource(tDes.createResource(cName + "/" + art)); + // + // + step = (BuildStep)tDes.getOutputStep(); + + type = step.createIOType(true, true, null); + type.addResource(tDes.createResource(cName + "/" + art)); + // + + //FIXME: this is very bad, need to wait until the indexing is completed here + try { + Thread.sleep(10000); + } catch (InterruptedException e1) { + } + + IBuildDescription des = null; + try { + des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED | BuildDescriptionManager.DEPS); + } catch (CoreException e) { + fail("build description creation failed: " + e.getLocalizedMessage()); + } + + doTestBuildDescription(des, tDes); + } public void testDesTestgnu21_exe(){ IProject project = createProject(PREFIX + "1", "cdt.managedbuild.target.testgnu21.exe"); @@ -1069,7 +1211,7 @@ public class BuildDescriptionModelTests extends TestCase { IBuildDescription des = null; try { - des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED); + des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED | BuildDescriptionManager.DEPS); } catch (CoreException e) { fail("build description creation failed: " + e.getLocalizedMessage()); } @@ -1177,7 +1319,7 @@ public class BuildDescriptionModelTests extends TestCase { IBuildDescription des = null; try { - des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED); + des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED | BuildDescriptionManager.DEPS); } catch (CoreException e) { fail("build description creation failed: " + e.getLocalizedMessage()); } @@ -1355,7 +1497,7 @@ public class BuildDescriptionModelTests extends TestCase { IBuildDescription des = null; try { - des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED); + des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED | BuildDescriptionManager.DEPS); } catch (CoreException e) { fail("build description creation failed: " + e.getLocalizedMessage()); } @@ -1548,7 +1690,7 @@ public class BuildDescriptionModelTests extends TestCase { IBuildDescription des = null; try { - des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED); + des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED | BuildDescriptionManager.DEPS); } catch (CoreException e) { fail("build description creation failed: " + e.getLocalizedMessage()); } @@ -1711,7 +1853,7 @@ public class BuildDescriptionModelTests extends TestCase { IBuildDescription des = null; try { - des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED); + des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED | BuildDescriptionManager.DEPS); } catch (CoreException e) { fail("build description creation failed: " + e.getLocalizedMessage()); } @@ -1817,7 +1959,7 @@ public class BuildDescriptionModelTests extends TestCase { IBuildDescription des = null; try { - des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED); + des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED | BuildDescriptionManager.DEPS); } catch (CoreException e) { fail("build description creation failed: " + e.getLocalizedMessage()); } @@ -2377,7 +2519,7 @@ public class BuildDescriptionModelTests extends TestCase { IBuildDescription des = null; try { - des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED); + des = BuildDescriptionManager.createBuildDescription(cfg, null, BuildDescriptionManager.REBUILD | BuildDescriptionManager.REMOVED | BuildDescriptionManager.DEPS); } catch (CoreException e) { fail("build description creation failed: " + e.getLocalizedMessage()); }