From 5bde16a1f94ebe5b52d4d065b2aa5f7315b62cb3 Mon Sep 17 00:00:00 2001
From: Leo Treggiari <leo.treggiari@intel.com>
Date: Mon, 9 May 2005 03:37:42 +0000
Subject: [PATCH] Second set of changes for multiple input & output Gnu
 definitions are updated to use new schema elements

---
 .../.classpath                                |  24 +-
 .../plugin.xml                                |  15 +-
 .../resources/oldTypeProjects/1.2/test12.zip  | Bin 1844 -> 3820 bytes
 .../resources/oldTypeProjects/2.0/test20.zip  | Bin 9016 -> 4214 bytes
 .../resources/oldTypeProjects/2.1/test21.zip  | Bin 0 -> 6770 bytes
 .../linkedFolder/Benchmarks/makefile          |  43 +++
 .../linkedFolder/Benchmarks/objects.mk        |   7 +
 .../linkedFolder/Benchmarks/sources.mk        |  15 +
 .../linkedFolder/Benchmarks/subdir.mk         |  34 ++
 .../test21Projects/linkedFolder/f1.c          |   8 +
 .../test21Projects/linkedFolder/f2.c          |   8 +
 .../test21Projects/linkedFolder/test_ar.h     |   2 +
 .../resources/test21Projects/linkedLib/f1.c   |   8 +
 .../resources/test21Projects/linkedLib/f2.c   |   8 +
 .../test21Projects/linkedLib/linkedLib.zip    | Bin 0 -> 3037 bytes
 .../test21Projects/linkedLib/test_ar.h        |   2 +
 .../multiResConfig/testResCfg.zip             | Bin 0 -> 7101 bytes
 .../singleFileExe/testSingleExe.zip           | Bin 0 -> 3168 bytes
 .../test21Projects/twoFileSO/testDoubleSO.zip | Bin 0 -> 3430 bytes
 .../testplugin/ManagedBuildTestHelper.java    | 279 ++++++++++++++-
 .../tests/suite/AllManagedBuildTests.java     |   4 +-
 .../tests/ScannerConfigDiscoveryTests.java    |   6 +-
 .../core/tests/ManagedBuildCoreTests.java     |   6 +-
 .../core/tests/ManagedBuildCoreTests20.java   |  34 +-
 .../tests/ManagedProject21MakefileTests.java  | 307 +++++++++++++++++
 .../core/tests/ManagedProjectUpdateTests.java |  63 +++-
 .../core/tests/ResourceBuildCoreTests.java    |  47 +--
 .../plugin.properties                         |   9 +-
 .../plugin.xml                                |  42 +++
 .../schema/buildDefinitions.exsd              |  10 +-
 .../managedbuilder/core/IAdditionalInput.java |   6 +-
 .../cdt/managedbuilder/core/IOutputType.java  |  10 +-
 .../cdt/managedbuilder/core/ITool.java        |  20 +-
 .../cdt/managedbuilder/core/IToolChain.java   |  29 +-
 .../core/ManagedBuildManager.java             |  29 +-
 .../internal/core/AdditionalInput.java        |  11 +-
 .../internal/core/Configuration.java          |  30 +-
 .../internal/core/InputType.java              |  16 +-
 .../internal/core/ManagedBuildInfo.java       |  11 +-
 .../internal/core/OutputType.java             |  19 +-
 .../managedbuilder/internal/core/Tool.java    |  75 +++-
 .../internal/core/ToolChain.java              |  59 +++-
 .../internal/core/ToolReference.java          |   4 +
 .../makegen/gnu/GnuMakefileGenerator.java     | 324 ++++++++++++------
 .../makegen/gnu/IManagedBuildGnuToolInfo.java |  11 +-
 .../makegen/gnu/ManagedBuildGnuToolInfo.java  | 192 +++++++----
 .../UpdateManagedProject21.java               |  73 ++++
 .../UpdateManagedProjectManager.java          |   8 +-
 .../plugin.xml                                | 306 +++++++++++++----
 .../internal/ui/ToolsSettingsBlock.java       |  71 +++-
 50 files changed, 1831 insertions(+), 454 deletions(-)
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.1/test21.zip
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/Benchmarks/makefile
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/Benchmarks/objects.mk
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/Benchmarks/sources.mk
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/Benchmarks/subdir.mk
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/f1.c
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/f2.c
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/test_ar.h
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedLib/f1.c
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedLib/f2.c
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedLib/linkedLib.zip
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedLib/test_ar.h
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/multiResConfig/testResCfg.zip
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/singleFileExe/testSingleExe.zip
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/twoFileSO/testDoubleSO.zip
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedProject21MakefileTests.java
 create mode 100644 build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject21.java

diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/.classpath b/build/org.eclipse.cdt.managedbuilder.core.tests/.classpath
index ec976833fce..14d41daf60e 100644
--- a/build/org.eclipse.cdt.managedbuilder.core.tests/.classpath
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/.classpath
@@ -1,8 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="tests"/>
-	<classpathentry kind="src" path="suite"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="src" path="tests">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="suite">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry excluding="tests/|suite/" kind="src" path="">
+		<attributes>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
+		<attributes>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/plugin.xml b/build/org.eclipse.cdt.managedbuilder.core.tests/plugin.xml
index f5f7d616476..e31ef0b4db0 100644
--- a/build/org.eclipse.cdt.managedbuilder.core.tests/plugin.xml
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/plugin.xml
@@ -16,6 +16,7 @@
       <import plugin="org.eclipse.core.resources"/>
       <import plugin="org.eclipse.ui"/>
       <import plugin="org.eclipse.ui.ide"/>
+      <import plugin="org.eclipse.compare"/>
    </requires>
 
 <!-- Managed Make Builder Tool Specifications - CDT 2.0 format -->
@@ -1202,9 +1203,9 @@
       
       <projectType      
             isAbstract="false"     
-            isTest="true"
-            name="testgnu.exe"
-            id="cdt.managedbuild.target.testgnu.exe">
+            isTest="true" 
+            name="testgnu21.exe"
+            id="cdt.managedbuild.target.testgnu21.exe">
          <configuration
                name="Dbg"
                id="cdt.managedbuild.config.testgnu.exe.debug"
@@ -1343,8 +1344,8 @@
       <projectType      
             isAbstract="false"     
             isTest="true"
-            name="testgnu.so"
-            id="cdt.managedbuild.target.testgnu.so">
+            name="testgnu21.so"
+            id="cdt.managedbuild.target.testgnu21.so">
          <configuration
                name="Debug"
                cleanCommand="rm -rf"
@@ -1511,9 +1512,9 @@
           
       <projectType 
             isTest="true"
-            name="testgnu.lib"
+            name="testgnu21.lib"
             isAbstract="false"
-            id="cdt.managedbuild.target.testgnu.lib">                        
+            id="cdt.managedbuild.target.testgnu21.lib">                        
          <configuration
 			   name="Dbg"
 			   artifactExtension="a"
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/1.2/test12.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/1.2/test12.zip
index f1a0046625e8072a605bd06dd31dc33975b249f1..d37ca3b4f20aa4b46d46d04335e12b6f9f25e915 100644
GIT binary patch
literal 3820
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
R0#<+(2mnX@U-F3#_&<ZcetrM|

literal 1844
zcmWIWW@Zs#U|`^2_*3d`$Yb2~>Ix$R!!~vX22O@52EF8zlBCkioRnafRE9l3Wk7Wa
zTuySyDG8YZi3te?2@MSL3TY{<#*wa#E*Dk_OTO`6yLGwTZ7~`BzUaP*osEs13mY0)
zb#xDYm>)QgQH3pNHG_)CfgHgO3uTuW4xg0{M?T!(G|E?P7U-(%axh~E4dG>Azay9G
zm@f~(S3`aM9~+45QT`~eGyg%r@`b7*nv5G`!)`IlJH@_R_c=-O=i(xn7w^^|FXLFU
zBG%!S-XZhnm1*<TllT59S*fy%J(_zl_nb+JZVP5=wmxJ1XZqW4#)Hd~@6P?xlyz$1
zo^8+gX8gX!5&7@R)Q_r9!r!fU`aoc-U&xf5-m4ZI;LDmWClJBp=EHO~c(KUU)W)?=
z%+U|UWWqQ_bC+1hTV2T27F0czF7|D<J%{WGiIbN;R+LQXbGKy+oPRbueQ!mhw$|&0
zb?I`y_gvk$GV_V!^Lfh)OY~|J9d$G6*Qq!9$IU2CD^aaTUio?M(RshlMtlfg-6$g`
z?|(^WwoI9qd2XU^efz7|Tim3S^A|AnCkSlqdCD?FgnRu#FZX8$tA);$&NEmn=G0W{
zE5><NspPNI&nI7Wr}n=8cq)AA4`z><w-)X_cr`=*d;X0;VLmCHsYkXnWUx*w;1^Pt
zpT5^b>e}lm2Kg4>U*2|@r>@PnH}`(k=^c3-x0e;JW{TeaK3-ymy0&Bef9{S+DMntK
z9~xMn*!8ELfByC5_DXivzYiY$@VxE6>L>9M&5*@=6z+dHw$JOExy1IXC;lJZ_crzZ
z{Qly#x9zr?^t#_S<d_tGAktd({+ukv>FTrH-zf*6B)Z4nUYV^2CM|DZ!sCV}x`Lwo
ztkmR^flGF^6Ap46GT>=@-}FA9YWwBc?dJ|U9BeiSkYBK^Fl2j4O6i&H+oM_erJsFK
zfA~8}Y4g5y5$so@+BNTYn5H+}lI%`BwSM~HtkawC7AbE1$h(t0<NO-Wor{AS*5zDo
z;?NFUozBsh;A118Go|GoGvBKl{HFekwGQ5i+h*i&vAAn<&5WZyb4<@In*T|;;2M|U
zi;nW}39oYuKBjz{c=Nmaz8n9)KNl0-%kBC$TxatAK&Rh~s3EHM>|n`lV2E-tfif&G
z8xMGJ_D(#T$D}CIdVSUpzO-*myNVi<lccBL-D1ZOm&ajsfMv$A{`drmvnveWS=|3?
z$)2#={_dIji<PNow?$1%HFakW(@@@i_2csmH$rw-nWe7XoZj-GQ*KU{^P9esLp;|b
z*uNxhO*83sIhfU}cBO}Jxyxy;`K+=lgO^KvysM-V`ovx4sar}=&zi|B3j^1>Gbv4o
zcrN6c=k9*MN=2ymnYhjyF|BtG{K_<Y^=I`lF8;o+mFHkm#|2BByL&56OmTLI_j$MT
z<<$e5y+yY9zj^&PbnkcJ&kyG;il1NiXZn9o&~t%`Mh3kycSEgZ-<)KCY!C(oeMxF@
ziC%I+0ew@lIkfNu6{4AWB?`HTnRyzT)x2DsMX4pFMR^Ja*1TM`yj%g^j7(zOxXOP)
zkf#_J859_{HG)`3wE+vbHV6%2g%sB4=AdS2WOGV^NfKlZJVg>P2{kDrn{=ERXcB&7
la77EUF;1)uNRfo(8c-Mpc(byBe9i)d3c%v&A5bv^0|52gw+jFO

diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.0/test20.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.0/test20.zip
index e783c848ce4817a238a8eb57f3a6a4f070e84256..fec4d8bd5be59124a7e8c05aec35e4e7392d6852 100644
GIT binary patch
delta 3376
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

literal 9016
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
TV#Net0_-5`v;p!j0N}p>uTJ$J

diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.1/test21.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/oldTypeProjects/2.1/test21.zip
new file mode 100644
index 0000000000000000000000000000000000000000..57a52f38655ab8a4762f05bd39612a8ad84e24ac
GIT binary patch
literal 6770
zcmeHLc{r49`yL`P_H0=~A|rd*vM<@mPC}LjV;kF$t;JSjCtJ4c%9dn#ZLg)s#2~U|
z&r+6BWGTt_Ox~K|H~rrKzQ4XXj)&)Xj{7{X`@Zh;zV7R~^t6r;(Sbl9Qc!SJmgw?*
zGQ@EL5a=Nx2m}Vc3ff)scK3ukLG8Sg5_AkhgsH<<d$!qA$H7Y|<@lVW3#<yN%cDqC
z#FGk}<i4D}Nur2M{gMrpwS`fK^;Vgs<(FfG)tYvlg1g`a0x|*mWX=Hd$M(bg^-}Wb
zY8-rnRl>*nS+~!2H9)~5jhwrbZPzu!wG9_nwE`RFhFSfNtrZw15v_&sq*g}3Z`Gab
zV^KJ>$z0YKm_lwG8_Y#muw4x9zXC<9%q5Se3RsB8Ac>2%ta#_D&PrClNTW21|E^ZA
zt*^9KLfueo5a1-N<@VPO-;s^amEq|U3d#*L{_+l!9ra2>3D#L)<(efuriNahs+-&h
z2c9(t1;>nA@>ZOY>)V2LK~|IRmL<{m?&vf96+#}ec&&BjPUQfV-f!Q@0KQ{=a0xmF
z`0NefKT?eE{&8GTyrSDP4(f};(XXXdCK=zB)^o%ps!UX~oFU16MjFpl0aBB?K`?7l
zUh;7p{-Zna)(7_bD^suhpy={qRH1nu!P&(4h9%D%0e)qh==F$=9xIx*W3rNicizW*
zL7pgo;wN8q#YP$Jn2Zb=WY%$H%G5<BbIO4)7(NJDQW@hqZ9FGZ<H;ooDJi{2lw;VW
zMtCaD>>cgJnmjIRHd>_WIt#<*alW2uT}nu_P+AW`Uh@`%C~+ib+jPZWYEL>7m0QfT
z$DS@Whc^rAk8nPTZGX6!5gaH#_Z|K>2<re}zyUWQ-#RV<3%3KFqrl^819KC!(<<ZD
z5O`_W*?m@@S5QavHAqBs{d}2U-Ss+!mGS4@G8NXg`u>$MN}j5=@xjRqafXGD^w3@H
z#}fE71@tSz93_Ys=ZMG>2`PvT6s!brOr`-QRgIRB0)QzY;GqE?RfL<JHw^CPC4_ks
z5wz?2Www(@l<z!!v0t6!SvnVbKDsJ;^0M0*xvvxYb7jKFI2w{uz(2Xk02UC)-6BWy
z=gU8TFki9U*kv~Y<AhGEN_zn3MT{H-ItGlxoEcjL%;nmL<V)~$VNm<(y-hZL-SpxM
zOm-pF_WJ2QgZcKwLoU+N)50bd@wdfyH_yf8YcMMP;H`zEJikG;w-&{2L2eHt%nI$X
z<KAHit|1O3H)85~2;XJ8DYaGB`fh7g@aTXfjXVomOJBH;m<x}p#hQBPmiaD?qK9#Z
z#<sDp@jNO`g!)d9v-ieyXt9DYDL7R;OM^R{csQQd`m`2Pqe}0SP+J}j+wx0n_FTP$
z2}QZ^iEb4=hQI{UPctUTE$-hVpbxXwV;NF~#BQLXJZrg2$wc%#nbiswE^ajQ_1)}_
zo)fsr%L65%QA`!qOl`<+EbpM88dhT1u|yMEFn&%XX|Mfe5ZT!s<5>1ZcDN4J42Q5O
z(wz24j=X?YfDx#D*B@_uDd$QzL3w8)tzp>>J^w6XA!*0ngmiRV!?=Y*ohU^)DUC?G
z@&fTYfAbesyh-FY*Uf?(yF*X%$n;8lNRKB@D&>A0y;D6w6#t>FMknxrKuvc(VMhm%
zQ!e*a3G=77kf+hzGkrTCpUa$_;%zaj{w0YE=OoOUf<&IKkoLLS-$iR&lxzRUyfivW
zQz49;pH)QGFy%xZL!8(c;%v1Pkmp4!(~OnHNsjo6C~dnYkl3cd;&mxUKl_|fNtAqU
zLs?@A5n>EKT3IVIv+=k(O}5y#S~%0To>YIyF4R?(k!~veep7>~P~hH}?~7BGJT+JM
z1Z#WNEe066m5W@a-8$XQeYxN2&Fb@(b}|XkFwq#Tr}Rk8Wi?-?(W|n|L><z)@MI>d
zGJ1=&nvG6Bh4z7nw(ez=bgtXF(p%dX<E1rTDrdJA9>3by(qE3;y^7K0zJ65-3J>TP
z6U&vLZg!5YHlEI2LfC<)eDe<sq(3<Dpyv0vI}e?WlK@1=&j{-3E@TAt^7i`qS5!nu
z&<pDA4RdqAHJ7TBd%zs~AFz1mnt2Ee`FAkB`IBoOoCEV8XjGuK2nQTj9mbvhe{uLM
zAC4-2^4vk}{_Tv3G+&WiF~1@WEnxk3q`4|8VrygPjBx*NgdF#58k1-Cw$Hg^RjxlC
zWT&Asg=U0aoi{ShDm`(;W29EqluGv@8Bs{ZE!gaRBU>|fHYA~HWoWC`7gjA^d%{x-
z-(K5@ukmyE@qHUYYZF0R&mckUZqQ@oFCLqPFG=k=-u`MZo6^ned!?<I`UrQChmn(&
z(OwDR?u&8t$+a+B16698&|`U_b>NrFPUD~41+G1r8su+5&|LD<3oH?;zT3TWcSv)}
zD>ME3PI5mDog%G6-NOO$L<aZg?Ct21l>yaPAKXXE>KZ-{S;&<-TGher!{X4HM#SX7
zD(+H7k2G3Nml(R27a>-{3{amWV!1oJwBOsbtp^VLed4kn%6#q3UsuO;s7JG$$DVJE
z+IDI4S-WUw^O&z8^2ETY>iylUlucCDDfG0qTr1n<wVE(FuaLnp#&caUpb7i%kqo0b
z!<F)!tV}in@I5oRlZlRzH1(-^Df)0W+VR1)kbW7uClh4IkRV2`&?z22j>7v4i*s>o
za9<@Aq%!M*bwJXZr;Q^=K-Y1rJ@b;$JbzR00HiRIx<F2K#NJ!+bJP9NhJcN>t>z$K
z{(h+K&c>?evP`d-Ypaa+%cCE|SHzVcoX~z@b4GB+@^bAMdW@7i(f|3T?wjY*XU3eu
z5@}sdvV4S$U60ipQ=~yaKA(6tmzdPZwInWdTF|E(?If*M<q7}6Y<ZKt`tOlFV(e8|
ze@LL1>liCgm>bL+X5;cdeg03M|8;%hzqT-64_;CGf%cwjzNiNyFAow(<L?{+fiOWD
z=Q_g1W-o;8HJGQMt8<xwrSq6DT~K-J-b~bKbQ=%c4sHXvJU}JR3;AFz6q2J}DPX_M
z9OMno+iM!8<XqnDSA>$AZe@7Mi!sZtqMp*o6{?p-nV<?sBVJ0*LeDc7xN6@%7o10$
z=Nj0$;vnZIZj>!nx@<rmryF9xy3%hLX_jtHjbttykAJI#BKG-0DvlCo_U*q?2h&!_
zD*JnCvefOf({1?Z_B`5u7rMD{N=mHr=(1%_-#g0(HzwC_Xq8FBHFv=6>?^}jALyPB
z1qoe{ZoW~ezIrhz_MO2XDJ-u{f-hkzSBJB*XgN(FaH&KHwR)klTq%2wUfMPE6l2pw
zzN1nWo2U+1+U(THGhr{E<`w9R+4$E}4a4t^vKNx99PeExvGcMhH<^xo6La~8!lT4s
zv*xgelgfefTLi5!m13NoFYk8z#Ww`*fHlsIG<}rkmXuq7uu+VL&blRgxjBnKzC;Ph
z@JFSb%aA$hlg2qPNWYgtJxneCAhEXBZ%uO2<`m=5sNVY66ny3}(x(2(yCc|OBn9L@
z%5O50`hZOoB?5ttAKXM&8)v9J%mrFz&>E92Of4%!yC-a1sToIBvU#_v|ESWK5vr05
z`C8WaC>4^$uBfB*P4g<~a+r}Z<={8MS-*4e$@M5zcz}fi(bJBlh|BuIkefTwMvkc$
zDGTD5S}a2P8REb@F@5krix-F?SpDr!Cxf%219Qkm-9tZD>0I}vm$sIO&};MAHjWgh
z-!62qGvMHUPrGt5XDAv{5zcikU!7GW<;`t9OHp{}Tnjm2QF6rjkFTb0tsAi!-HBAJ
zbUlBy^y#O~ADiWFo`U3@jRY$1<SQzIGI{BLgf3n;zrqz`Bzq}Kv^QYYvT8-pl7yad
z9x-~}DJTIY1(6c3Ia(<BzQbp);Fa;&$Ep?PTEUI)gT0-N2ig_3!RLbK6UL>+YHaN9
zTszwoL|VeT(^<VsJuS4tncmD?-$Q-8zY6w6Z2f%$I$>i=&^<GqgnyHnM_+5~8(f+p
zSYEqll(<?}Pdv2OgIt6^>_WEG5ub|$)61MQ@?Uw)1aq^tZaRH~$-VL)3@}H2U+NQH
zjMhMzczMQJKu(L&({>kaUGaOIQRI8_(ml9F<3x8ZRB1d#d}^DqETl+ian_6U3r8QK
zz*4q9E!)X2m>)Ut;;YLptJM_q&V^BStN_43k|)rIfan4nzYIKw@>;kprlsKp99~0{
zLc!^I0~2?C0aULJKT2D-8};b5&Ly;#fF{3&j=p+Vx5l8MJIb`POGsZ`2gR>XR9q-J
zJ^yxo?Xx$TNkt{Gh;oQ!$lKk_Muk9}>J*cK=d{~}RRP9h0TmvafEOI$X$Qqjpe(kR
ztWB7_V>Rq=<!cT>pw?$UjP!_JEVP6O*9g|P)hMO&1q3XQ*i3FIPIslmeF6s~+Ao80
zxF$^VuMHw*H^YvkMO54_T5=~rhASSo&U2itHDz$fXoqICORZ3~T()9>@l{^*+)Wo;
zdoR<VlK=F$FAZa@aQ$7W?HQy*8ck^l3sf&*6RoBXHj(D?$gS#=*3#oT?^vK;T?BuX
zy=SI^f~1$rj`R$_qDV+QS-O=GM1b`(CR(z4o~{Z8mS_M(OH2&KiI#tkk-inR6^W%V
z)59^6!fr2Un3Bhv$}U8cbS|K0ux`uZ5>Ic#noIB&#Nce6aV2asSG4E)iD*?Ai{W&_
zG;f<D%T?i>`=(hG^o|tE^>jz_2eRqz1S~$fSgIp@SB1jxq`F7W93hE6QNuNsXp+UU
zaWNi_Uh%1qtKwVNtJ{WMzOA`6>^4d|7a+ovgld|$&j-sF3}s3b1gUszrg0sK-d-zl
zu(F!?k@-l?eyT0WNKEMsY&kk&Zp+c|F6&~wJ=KG6Z#CEM1ecXi^ZK<bvgCALg!@9$
z;vAj^Co_Q`(DU``4yg`?er->ELlrKyx}dhgb!9#C33s^!%csH`yJUF-z5<RKI7e|U
z_0{XIsabii91kvya*QgmZL-ZMbiUEhyVFaTkyXicCM3;${Fy%rU1}d@^@)TfWYPcj
zdQl6fgI;~zj2DFm`19-o?*R0A(JC9;SL;j)vAvGG*_)E#Uv0dbf9~1-O?bGF!SrhW
zt=OUdJqCLL>S+-W(*4|V{LMoE0wMr$VEzF=oK_+(5MSpEGkhN?1IX%E9}O3Uuib=2
z$pYP&{pJ%c24BAji>UxG*rj3KfbP*geBWz_i?{u+7y^uM$N}wR;kah;wTQ50&jYyM
zSu(CUd=)$fwr{SR_`os41>&pdvA~Ukz{6ACUlhIyA4|at=;hz)eT*>nx$sr|Sgvb-
z;KB(ZxNF1L0l<>w{5u)`^&UPDn2rFJ_Wd7de;pa@S`YJJIs{lA4ifx++vmYQv%{jp
zB%@eH+dnWK=K6C70mHR_(y{=q-$MM|Prwy2z5)-6mj|{Ri~pzG!`-{XqB?kfrhw)t
zZZ?jMEco(qtXUF@0|x=S^4~WP?h^2&g;=g`$^%@#l0;krd}#%i01ZR}9OYt@3|tC)
zi2;^E7bu%?D6nY)E(N|z7fT@qw1#jgew8Wv4Et_BtW-ea|NJn)Y!OJ8|6Sdfk^4W)
Z8wDV;|Epx;pTtZcCJ-m^CXEpy=s!Dt<Ffz&

literal 0
HcmV?d00001

diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/Benchmarks/makefile b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/Benchmarks/makefile
new file mode 100644
index 00000000000..35ecf0d02bc
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/Benchmarks/makefile
@@ -0,0 +1,43 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+ROOT := ..
+
+-include $(ROOT)/makefile.init
+
+RM := rm -rf
+
+# All of the sources participating in the build are defined here
+-include sources.mk
+-include $(SUBDIRS:%=%/subdir.mk)
+-include objects.mk
+ifneq ($(strip $(DEPS)),)
+-include $(DEPS)
+endif
+
+-include $(ROOT)/makefile.defs
+
+# Add inputs and outputs from these tool invocations to the build variables 
+
+# All Target
+all: lib.a
+
+# Tool invocations
+lib.a: $(OBJS) $(USER_OBJS)
+	@echo 'Building target: $@'
+	@echo 'Invoking: archiver.gnu'
+	@echo ar -r lib.a $(OBJS) $(USER_OBJS) $(LIBS)
+	@ar -r lib.a $(OBJS) $(USER_OBJS) $(LIBS)
+	@echo 'Finished building target: $@'
+	@echo ' '
+
+# Other Targets
+clean:
+	-$(RM) $(OBJS)$(DEPS) lib.a
+	-@echo ' '
+
+.PHONY: all clean dependents
+.SECONDARY:
+
+-include $(ROOT)/makefile.targets
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/Benchmarks/objects.mk b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/Benchmarks/objects.mk
new file mode 100644
index 00000000000..eae6a31b65d
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/Benchmarks/objects.mk
@@ -0,0 +1,7 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+LIBS :=
+
+USER_OBJS :=
\ No newline at end of file
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/Benchmarks/sources.mk b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/Benchmarks/sources.mk
new file mode 100644
index 00000000000..754c6cdd840
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/Benchmarks/sources.mk
@@ -0,0 +1,15 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+C_SRCS := 
+S_UPPER_SRCS := 
+O_SRCS := 
+S_SRCS := 
+OBJS := 
+DEPS := 
+
+# Every subdirectory with source files must be described here
+SUBDIRS := \
+. \
+
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/Benchmarks/subdir.mk b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/Benchmarks/subdir.mk
new file mode 100644
index 00000000000..b7f88c05d88
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/Benchmarks/subdir.mk
@@ -0,0 +1,34 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables 
+C_SRCS += \
+$(ROOT)/f1.c \
+$(ROOT)/f2.c 
+
+OBJS += \
+${addprefix ./, \
+f1.o \
+f2.o \
+}
+
+DEPS += \
+${addprefix ./, \
+f1.d \
+f2.d \
+}
+
+
+# Each subdirectory must supply rules for building sources it contributes
+%.o: $(ROOT)/%.c
+	@echo 'Building file: $<'
+	@echo 'Invoking: compiler.gnu.c'
+	@echo gcc -O0 -g3 -Wall -c -fmessage-length=0 -o$@ $<
+	@gcc -O0 -g3 -Wall -c -fmessage-length=0 -o$@ $< && \
+	echo -n $(@:%.o=%.d) $(dir $@) > $(@:%.o=%.d) && \
+	gcc -MM -MG -P -w -O0 -g3 -Wall -c -fmessage-length=0  $< >> $(@:%.o=%.d)
+	@echo 'Finished building: $<'
+	@echo ' '
+
+
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/f1.c b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/f1.c
new file mode 100644
index 00000000000..5e77893b8a6
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/f1.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+#include "test_ar.h"
+
+void f1_ar()
+{
+	printf ( "Hello from f1_ar.\n" ) ;
+	return ;
+}
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/f2.c b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/f2.c
new file mode 100644
index 00000000000..56e2c730d4d
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/f2.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+#include "test_ar.h"
+
+void f2_ar()
+{
+	printf ( "Hello from f2_ar.\n" ) ;
+	return ;
+}
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/test_ar.h b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/test_ar.h
new file mode 100644
index 00000000000..55e38f0d5ac
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedFolder/test_ar.h
@@ -0,0 +1,2 @@
+void f1_ar() ;
+void f2_ar() ;
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedLib/f1.c b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedLib/f1.c
new file mode 100644
index 00000000000..5e77893b8a6
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedLib/f1.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+#include "test_ar.h"
+
+void f1_ar()
+{
+	printf ( "Hello from f1_ar.\n" ) ;
+	return ;
+}
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedLib/f2.c b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedLib/f2.c
new file mode 100644
index 00000000000..56e2c730d4d
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedLib/f2.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+#include "test_ar.h"
+
+void f2_ar()
+{
+	printf ( "Hello from f2_ar.\n" ) ;
+	return ;
+}
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedLib/linkedLib.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedLib/linkedLib.zip
new file mode 100644
index 0000000000000000000000000000000000000000..c13a0f08a7770d5ebb61d2e7dc4ca308634a408b
GIT binary patch
literal 3037
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
Z|G$DXMln(Sqp?pA@Rgd7aT*H){tI~?>P!Ft

literal 0
HcmV?d00001

diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedLib/test_ar.h b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedLib/test_ar.h
new file mode 100644
index 00000000000..55e38f0d5ac
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/linkedLib/test_ar.h
@@ -0,0 +1,2 @@
+void f1_ar() ;
+void f2_ar() ;
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/multiResConfig/testResCfg.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/multiResConfig/testResCfg.zip
new file mode 100644
index 0000000000000000000000000000000000000000..d60c3f775ceb3ef8f67dc3b1e8654350d541763b
GIT binary patch
literal 7101
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
D@xgt$

literal 0
HcmV?d00001

diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/singleFileExe/testSingleExe.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/singleFileExe/testSingleExe.zip
new file mode 100644
index 0000000000000000000000000000000000000000..e8ba2abbf1fad6feec77cf94e4a74f32462f5dc0
GIT binary patch
literal 3168
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

literal 0
HcmV?d00001

diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/twoFileSO/testDoubleSO.zip b/build/org.eclipse.cdt.managedbuilder.core.tests/resources/test21Projects/twoFileSO/testDoubleSO.zip
new file mode 100644
index 0000000000000000000000000000000000000000..c4e8bd95c9d3bcb1a9d90f3e6633896bf796bc4a
GIT binary patch
literal 3430
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

literal 0
HcmV?d00001

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 b867f1f4163..cf40dbf8c39 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
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2004 Intel Corporation and others.
+ * Copyright (c) 2004, 2005 Intel Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Common Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,8 @@
 package org.eclipse.cdt.managedbuilder.testplugin;
 
 import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.util.zip.ZipFile;
@@ -18,23 +20,37 @@ import java.util.zip.ZipFile;
 import junit.framework.Assert;
 
 import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.ICDescriptor;
+import org.eclipse.cdt.managedbuilder.core.IConfiguration;
+import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
+import org.eclipse.cdt.managedbuilder.core.IManagedProject;
+import org.eclipse.cdt.managedbuilder.core.IProjectType;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
+import org.eclipse.cdt.managedbuilder.core.ManagedCProjectNature;
 import org.eclipse.cdt.make.core.MakeCorePlugin;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IProjectDescription;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.IWorkspaceDescription;
 import org.eclipse.core.resources.IWorkspaceRoot;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.ui.dialogs.IOverwriteQuery;
 import org.eclipse.ui.wizards.datatransfer.ImportOperation;
 import org.eclipse.ui.wizards.datatransfer.ZipFileStructureProvider;
+//import org.eclipse.compare.structuremergeviewer.Differencer;
+//import org.eclipse.compare.ResourceNode;;
 
 public class ManagedBuildTestHelper {
+	
 	/* (non-Javadoc)
 	 * Create a new project named <code>name</code> or return the project in 
 	 * the workspace of the same name if it exists.
@@ -43,19 +59,23 @@ public class ManagedBuildTestHelper {
 	 * @return 
 	 * @throws CoreException
 	 */
-	static public IProject createProject(String name) throws CoreException {
+	static public IProject createProject(String name, IPath location, String projectId, String projectTypeId) throws CoreException {
 		IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
 		IProject newProjectHandle = root.getProject(name);
 		IProject project = null;
 		
 		if (!newProjectHandle.exists()) {
-			IWorkspace workspace = ResourcesPlugin.getWorkspace();
-			IWorkspaceDescription workspaceDesc = workspace.getDescription();
-			workspaceDesc.setAutoBuilding(false);
-			workspace.setDescription(workspaceDesc);
-			IProjectDescription description = workspace.newProjectDescription(newProjectHandle.getName());
-			//description.setLocation(root.getLocation());
-			project = CCorePlugin.getDefault().createCProject(description, newProjectHandle, new NullProgressMonitor(), MakeCorePlugin.MAKE_PROJECT_ID);
+			if (projectId.equals(ManagedBuilderCorePlugin.MANAGED_MAKE_PROJECT_ID)) {
+				project = createNewManagedProject(newProjectHandle, name, location, projectId, projectTypeId);
+			} else {
+				IWorkspace workspace = ResourcesPlugin.getWorkspace();
+				IWorkspaceDescription workspaceDesc = workspace.getDescription();
+				workspaceDesc.setAutoBuilding(false);
+				workspace.setDescription(workspaceDesc);
+				IProjectDescription description = workspace.newProjectDescription(newProjectHandle.getName());
+				//description.setLocation(root.getLocation());
+				project = CCorePlugin.getDefault().createCProject(description, newProjectHandle, new NullProgressMonitor(), MakeCorePlugin.MAKE_PROJECT_ID);
+			}
 		} else {
 			newProjectHandle.refreshLocal(IResource.DEPTH_INFINITE, null);
 			project = newProjectHandle;
@@ -94,15 +114,20 @@ public class ManagedBuildTestHelper {
 		}
 	}
 	
-	static public IProject createProject(String projectName, File zip) throws CoreException, InvocationTargetException, IOException {
+	static public IProject createProject(String projectName, File zip, IPath location, String projectTypeId) throws CoreException, InvocationTargetException, IOException {
 		IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
 		IProject project= root.getProject(projectName);
 		if (project.exists()) 
 			removeProject(projectName);
 		
-		importFilesFromZip(new ZipFile(zip),project.getFullPath(),null);
+		IPath destPath = (location != null) ?
+				location :
+				project.getFullPath();
+		if (zip != null) {
+			importFilesFromZip(new ZipFile(zip), destPath, null);
+		}
 		
-		return createProject(projectName);
+		return createProject(projectName, location, ManagedBuilderCorePlugin.MANAGED_MAKE_PROJECT_ID, projectTypeId);
 	}
 	
 	static public void importFilesFromZip(ZipFile srcZipFile, IPath destPath, IProgressMonitor monitor) throws InvocationTargetException {		
@@ -116,6 +141,234 @@ public class ManagedBuildTestHelper {
 			op.run(monitor);
 		} catch (InterruptedException e) {
 			// should not happen
+			Assert.assertTrue(false);
 		}
 	}
-}
+
+	static public IProject createNewManagedProject(IProject newProjectHandle, String name, IPath location, 
+			String projectId, String projectTypeId) throws CoreException {
+		// Create the base project
+		IProject project = null;
+		IWorkspace workspace = ResourcesPlugin.getWorkspace();
+		IWorkspaceDescription workspaceDesc = workspace.getDescription();
+		workspaceDesc.setAutoBuilding(false);
+		workspace.setDescription(workspaceDesc);
+		IProjectDescription description = workspace.newProjectDescription(newProjectHandle.getName());
+		if (location != null) {
+			description.setLocation(location);
+		}
+		project = CCorePlugin.getDefault().createCProject(description, newProjectHandle, new NullProgressMonitor(), projectId);
+		// Add the managed build nature and builder
+		addManagedBuildNature(project);
+		
+		// Find the base project type definition
+		IProjectType[] projTypes = ManagedBuildManager.getDefinedProjectTypes();
+		IProjectType projType = ManagedBuildManager.getProjectType(projectTypeId);
+		Assert.assertNotNull(projType);
+		
+		// Create the managed-project (.cdtbuild) for our project that builds an executable.
+		IManagedProject newProject = null;
+		try {
+			newProject = ManagedBuildManager.createManagedProject(project, projType);
+		} catch (Exception e) {
+			Assert.fail("Failed to create managed project for: " + project.getName());
+		}
+		Assert.assertEquals(newProject.getName(), projType.getName());
+		Assert.assertFalse(newProject.equals(projType));
+		ManagedBuildManager.setNewProjectVersion(project);
+		// Copy over the configs
+		IConfiguration defaultConfig = null;
+		IConfiguration[] configs = projType.getConfigurations();
+		for (int i = 0; i < configs.length; ++i) {
+			// Make the first configuration the default 
+			if (i == 0) {
+				defaultConfig = newProject.createConfiguration(configs[i], projType.getId() + "." + i);
+			} else {
+				newProject.createConfiguration(configs[i], projType.getId() + "." + i);
+			}
+		}
+		ManagedBuildManager.setDefaultConfiguration(project, defaultConfig);
+
+		// Initialize the path entry container
+		IStatus initResult = ManagedBuildManager.initBuildInfoContainer(project);
+		if (initResult.getCode() != IStatus.OK) {
+			Assert.fail("Initializing build information failed for: " + project.getName() + " because: " + initResult.getMessage());
+		}
+		return project;
+	}
+
+	static public void addManagedBuildNature (IProject project) {
+		// Create the buildinformation object for the project
+		IManagedBuildInfo info = ManagedBuildManager.createBuildInfo(project);
+		info.setValid(true);
+		
+		// Add the managed build nature
+		try {
+			ManagedCProjectNature.addManagedNature(project, new NullProgressMonitor());
+			ManagedCProjectNature.addManagedBuilder(project, new NullProgressMonitor());
+		} catch (CoreException e) {
+			Assert.fail("Test failed on adding managed build nature or builder: " + e.getLocalizedMessage());
+		}
+
+		// Associate the project with the managed builder so the clients can get proper information
+		ICDescriptor desc = null;
+		try {
+			desc = CCorePlugin.getDefault().getCProjectDescription(project, true);
+			desc.remove(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID);
+			desc.create(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID, ManagedBuildManager.INTERFACE_IDENTITY);
+		} catch (CoreException e) {
+			Assert.fail("Test failed on adding managed builder as scanner info provider: " + e.getLocalizedMessage());
+		}
+		try {
+			desc.saveProjectData();
+		} catch (CoreException e) {
+			Assert.fail("Test failed on saving the ICDescriptor data: " + e.getLocalizedMessage());		}
+	}
+	
+	static public void compareBenchmarks(IProject project, IPath testDir, IPath[] files) {
+		try {
+			project.refreshLocal(IResource.DEPTH_INFINITE, null);
+		} catch (Exception e) {
+			Assert.fail("File " + files[0].lastSegment() + " - project refresh failed.");
+		}
+		for (int i=0; i<files.length; i++) {
+			IPath testFile = testDir.append(files[i]);
+			IPath benchmarkFile = Path.fromOSString("Benchmarks/" + files[i]);
+			StringBuffer testBuffer = readContentsStripLineEnds(project, testFile);
+			StringBuffer benchmarkBuffer = readContentsStripLineEnds(project, benchmarkFile);
+			if (!testBuffer.toString().equals(benchmarkBuffer.toString())) {
+				Assert.fail("File " + testFile.lastSegment() + " does not match its benchmark.");
+			} 
+		}
+	}
+
+	static public StringBuffer readContentsStripLineEnds(IProject project, IPath path) {
+		StringBuffer buff = new StringBuffer();
+		IFile file = project.getFile(path);
+		IWorkspaceRoot root = project.getWorkspace().getRoot();
+		IPath fullPath = root.getLocation();
+		fullPath = fullPath.append(file.getFullPath());
+		try {
+			FileReader input = null;
+			try {
+				input = new FileReader(fullPath.toFile());
+			} catch (Exception e) {
+				Assert.fail("File " + fullPath.toString() + " could not be read.");
+			}
+			//InputStream input = file.getContents(true);
+			int c;
+			do {
+				c = input.read();
+				if (c == -1) break;
+				if (c != '\r' && c != '\n') {
+					buff.append((char)c);
+				}
+			} while (c != -1);
+			input.close();
+		} catch (Exception e) {
+			Assert.fail("File " + file.toString() + " could not be read.");
+		}
+		return buff;
+	}
+	
+	static public IPath copyFilesToTempDir(IPath srcDir, IPath tmpSubDir, IPath[] files) {
+		IPath tmpSrcDir = null;
+		String userDirStr = System.getProperty("user.home");
+		if (userDirStr != null) {
+			IPath userDir = Path.fromOSString(userDirStr);
+			tmpSrcDir = userDir.append(tmpSubDir);
+			if (userDir.toString().equalsIgnoreCase(tmpSrcDir.toString())) {
+				Assert.fail("Temporary sub-directory cannot be the empty string.");				
+			} else {
+				File tmpSrcDirFile = tmpSrcDir.toFile();
+				if (tmpSrcDirFile.exists()) {
+					//  Make sure that this is the expected directory before we delete it...
+					if (tmpSrcDir.lastSegment().equals(tmpSubDir.lastSegment())) {
+						deleteDirectory(tmpSrcDirFile);
+					} else {
+						Assert.fail("Temporary directory " + tmpSrcDirFile.toString() + " already exists.");
+					}
+				}
+				boolean succeed = tmpSrcDirFile.mkdir();
+				if (succeed) {
+					for (int i=0; i<files.length; i++) {
+						IPath file = files[i];
+						IPath srcFile = srcDir.append(file);
+						FileReader srcReader = null;
+						try {
+							srcReader = new FileReader(srcFile.toFile());
+						} catch (Exception e) {
+							Assert.fail("File " + file.toString() + " could not be read.");
+						}
+						if (file.segmentCount() > 1) {
+							IPath newDir = tmpSrcDir;
+							do {
+								IPath dir = file.uptoSegment(1);
+								newDir = newDir.append(dir);
+								file = file.removeFirstSegments(1);
+								succeed = newDir.toFile().mkdir();
+							} while (file.segmentCount() > 1);
+						}
+						IPath destFile = tmpSrcDir.append(files[i]);
+						FileWriter writer = null;
+						try {
+							writer = new FileWriter(destFile.toFile());
+						} catch (Exception e) {
+							Assert.fail("File " + files[i].toString() + " could not be written.");
+						}
+						try {
+							int c;
+							do {
+								c = srcReader.read();
+								if (c == -1) break;
+								writer.write(c);
+							} while (c != -1);
+							srcReader.close();
+							writer.close();
+						} catch (Exception e) {
+							Assert.fail("File " + file.toString() + " could not be copied.");
+						}
+					}
+				}
+			}
+		}
+		return tmpSrcDir;
+	}
+	
+	static public void deleteTempDir(IPath tmpSubDir, IPath[] files) {
+		IPath tmpSrcDir = null;
+		String userDirStr = System.getProperty("user.home");
+		if (userDirStr != null) {
+			IPath userDir = Path.fromOSString(userDirStr);
+			tmpSrcDir = userDir.append(tmpSubDir);
+			if (userDir.toString().equalsIgnoreCase(tmpSrcDir.toString())) {
+				Assert.fail("Temporary sub-directory cannot be the empty string.");				
+			} else {
+				File tmpSrcDirFile = tmpSrcDir.toFile();
+				if (!tmpSrcDirFile.exists()) {
+					Assert.fail("Temporary directory " + tmpSrcDirFile.toString() + " does not exist.");				
+				} else {
+					boolean succeed;
+					for (int i=0; i<files.length; i++) {
+						// Delete the file
+						IPath thisFile = tmpSrcDir.append(files[i]);
+						succeed = thisFile.toFile().delete();
+					}
+					// Delete the dir
+					succeed = tmpSrcDirFile.delete();
+				}
+			}
+		}
+	}
+
+	static private void deleteDirectory(File dir) {
+		File[] toDelete = dir.listFiles();
+		for (int i=0; i<toDelete.length; i++) {
+			File fileToDelete = toDelete[i];
+			if (fileToDelete.isDirectory()) {
+				deleteDirectory(fileToDelete);
+			}
+			fileToDelete.delete();
+		}
+	}
+}
\ No newline at end of file
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 b6b3f3729de..6e2ba27f8d1 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
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Common Public License v1.0
  * which accompanies this distribution, and is available at
@@ -16,6 +16,7 @@ import org.eclipse.cdt.managedbuild.core.tests.ManagedBuildCoreTests20;
 import org.eclipse.cdt.managedbuild.core.tests.ManagedCommandLineGeneratorTest;
 import org.eclipse.cdt.managedbuild.core.tests.ManagedProjectUpdateTests;
 import org.eclipse.cdt.managedbuild.core.tests.ResourceBuildCoreTests;
+import org.eclipse.cdt.managedbuild.core.tests.ManagedProject21MakefileTests;
 
 import junit.framework.Test;
 import junit.framework.TestSuite;
@@ -38,6 +39,7 @@ public class AllManagedBuildTests {
 		suite.addTest(ManagedProjectUpdateTests.suite());
 		suite.addTest(ManagedCommandLineGeneratorTest.suite());
 		suite.addTest(ResourceBuildCoreTests.suite());
+		suite.addTest(ManagedProject21MakefileTests.suite());
 		//$JUnit-END$
 		return suite;
 	}
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/standardbuilder/core/tests/ScannerConfigDiscoveryTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/standardbuilder/core/tests/ScannerConfigDiscoveryTests.java
index d6eb36c4b05..23d94685777 100644
--- a/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/standardbuilder/core/tests/ScannerConfigDiscoveryTests.java
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/suite/org/eclipse/cdt/standardbuilder/core/tests/ScannerConfigDiscoveryTests.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2004, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Common Public License v1.0
  * which accompanies this distribution, and is available at
@@ -18,6 +18,7 @@ import junit.framework.TestCase;
 import org.eclipse.cdt.core.CCProjectNature;
 import org.eclipse.cdt.core.CCorePlugin;
 import org.eclipse.cdt.core.parser.IScannerInfo;
+import org.eclipse.cdt.make.core.MakeCorePlugin;
 import org.eclipse.cdt.make.core.MakeProjectNature;
 import org.eclipse.cdt.make.core.scannerconfig.ScannerConfigNature;
 import org.eclipse.cdt.make.internal.core.scannerconfig2.PerProjectSICollector;
@@ -25,6 +26,7 @@ import org.eclipse.cdt.managedbuilder.testplugin.ManagedBuildTestHelper;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 
@@ -48,7 +50,7 @@ public class ScannerConfigDiscoveryTests extends TestCase {
 	protected void setUp() throws Exception {
 		fMonitor = new NullProgressMonitor();
 		
-		fCProject = ManagedBuildTestHelper.createProject("SCD");
+		fCProject = ManagedBuildTestHelper.createProject("SCD", (IPath)null, MakeCorePlugin.MAKE_PROJECT_ID, null);
 		fCFile = fCProject.getProject().getFile("main.c");
 		if (!fCFile.exists()) {
 			fCFile.create(new ByteArrayInputStream(" \n".getBytes()), false, fMonitor);
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests.java
index d49761a8e25..2707426e40b 100644
--- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests.java
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests.java
@@ -54,11 +54,11 @@ public class ManagedBuildCoreTests extends TestCase {
 	 */
 	public void testLoadManifest() throws Exception {
 		IProjectType[] projTypes = ManagedBuildManager.getDefinedProjectTypes();
-		exeType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu.exe");
+		exeType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu21.exe");
 		checkExeProjectType(exeType);				
-		dllType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu.so");
+		dllType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu21.so");
 		checkSoProjectType(dllType);	
-		libType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu.lib");
+		libType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu21.lib");
 		checkLibProjectType(libType);	
 	}
 		
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests20.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests20.java
index b8124804171..49df8c72dc1 100644
--- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests20.java
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests20.java
@@ -20,7 +20,6 @@ import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
 import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.ICDescriptor;
 import org.eclipse.cdt.core.parser.CodeReader;
 import org.eclipse.cdt.core.parser.IParser;
 import org.eclipse.cdt.core.parser.IScanner;
@@ -62,6 +61,7 @@ import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
+import org.eclipse.cdt.managedbuilder.testplugin.ManagedBuildTestHelper;
 
 /*
  *  These tests exercise CDT 2.0 manifest file functionality 
@@ -505,7 +505,7 @@ public class ManagedBuildCoreTests20 extends TestCase {
 		try {
 			project = createProject(projectName);
 			// Now associate the builder with the project
-			addManagedBuildNature(project);
+			ManagedBuildTestHelper.addManagedBuildNature(project);
 			IProjectDescription description = project.getDescription();
 			// Make sure it has a managed nature
 			if (description != null) {
@@ -731,34 +731,6 @@ public class ManagedBuildCoreTests20 extends TestCase {
 		assertEquals(4, i);
 	}
 	
-	private void addManagedBuildNature (IProject project) {
-		// Create the buildinformation object for the project
-		IManagedBuildInfo info = ManagedBuildManager.createBuildInfo(project);
-		info.setValid(true);
-		
-		// Add the managed build nature
-		try {
-			ManagedCProjectNature.addManagedNature(project, new NullProgressMonitor());
-			ManagedCProjectNature.addManagedBuilder(project, new NullProgressMonitor());
-		} catch (CoreException e) {
-			fail("Test failed on adding managed build nature or builder: " + e.getLocalizedMessage());
-		}
-
-		// Associate the project with the managed builder so the clients can get proper information
-		ICDescriptor desc = null;
-		try {
-			desc = CCorePlugin.getDefault().getCProjectDescription(project, true);
-			desc.remove(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID);
-			desc.create(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID, ManagedBuildManager.INTERFACE_IDENTITY);
-		} catch (CoreException e) {
-			fail("Test failed on adding managed builder as scanner info provider: " + e.getLocalizedMessage());
-		}
-		try {
-			desc.saveProjectData();
-		} catch (CoreException e) {
-			fail("Test failed on saving the ICDescriptor data: " + e.getLocalizedMessage());		}
-	}
-
 	/**
 	 * Tests the tool settings through the interface the makefile generator
 	 * uses.
@@ -1772,7 +1744,7 @@ public class ManagedBuildCoreTests20 extends TestCase {
 		try {
 			project = createProject(projectName2);
 			// Now associate the builder with the project
-			addManagedBuildNature(project);
+			ManagedBuildTestHelper.addManagedBuildNature(project);
 			IProjectDescription description = project.getDescription();
 			// Make sure it has a managed nature
 			if (description != null) {
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedProject21MakefileTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedProject21MakefileTests.java
new file mode 100644
index 00000000000..cf7fff5248a
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedProject21MakefileTests.java
@@ -0,0 +1,307 @@
+/**********************************************************************
+ * Copyright (c) 2005 Intel Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors: 
+ * Intel Corporation - Initial API and implementation
+ **********************************************************************/
+
+/**********************************************************************
+ * These tests are for a 2.1 style tool integration.  That is, the
+ * tool integration does not use any 3.0 elements or attributes,
+ * including InputType, OutputType, etc.
+ **********************************************************************/
+
+package org.eclipse.cdt.managedbuild.core.tests;
+
+import java.io.File;
+import java.io.FileFilter;
+import java.util.ArrayList;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.projectconverter.UpdateManagedProjectManager;
+import org.eclipse.cdt.managedbuilder.testplugin.CTestPlugin;
+import org.eclipse.cdt.managedbuilder.testplugin.ManagedBuildTestHelper;
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.ui.dialogs.IOverwriteQuery;
+
+public class ManagedProject21MakefileTests extends TestCase {
+	public static final String MBS_TEMP_DIR = "MBSTemp";
+
+	static boolean pathVariableCreated = false;
+	
+	public ManagedProject21MakefileTests(String name) {
+		super(name);
+	}
+	
+	public static Test suite() {
+		TestSuite suite = new TestSuite(ManagedProject21MakefileTests.class.getName());
+		
+		suite.addTest(new ManagedProject21MakefileTests("testSingleFileExe"));
+		suite.addTest(new ManagedProject21MakefileTests("testTwoFileSO"));
+		suite.addTest(new ManagedProject21MakefileTests("testMultiResConfig"));
+		//suite.addTest(new ManagedProject21MakefileTests("testLinkedLib"));
+		//suite.addTest(new ManagedProject21MakefileTests("testLinkedFolder"));
+		
+		return suite;
+	}
+
+	private IProject[] createProject(String projName, IPath location, String projectTypeId, boolean containsZip){
+		File testDir = CTestPlugin.getFileInPlugin(new Path("resources/test21Projects/" + projName));
+		if(testDir == null) {
+			fail("Test project directory " + testDir.getName() + " is missing.");
+			return null;
+		}
+
+		ArrayList projectList = null;
+		if (containsZip) {
+			File projectZips[] = testDir.listFiles(new FileFilter(){
+				public boolean accept(File pathname){
+					if(pathname.isDirectory())
+						return false;
+					return true;
+				}
+			});
+			
+			projectList = new ArrayList(projectZips.length);
+			for(int i = 0; i < projectZips.length; i++){
+				try{
+					String projectName = projectZips[i].getName();
+					if(!projectName.endsWith(".zip"))
+						continue;
+					
+					projectName = projectName.substring(0,projectName.length()-".zip".length());
+					if(projectName.length() == 0)
+						continue;
+					IProject project = ManagedBuildTestHelper.createProject(projectName, projectZips[i], location, projectTypeId);
+					if(project != null)
+						projectList.add(project);
+				}
+				catch(Exception e){
+				}
+			}
+			if(projectList.size() == 0) {
+				fail("No projects found in test project directory " + testDir.getName() + ".  The .zip file may be missing or corrupt.");
+				return null;
+			}
+		} else {
+			try{
+				IProject project = ManagedBuildTestHelper.createProject(projName, null, location, projectTypeId);
+				if(project != null)
+					projectList = new ArrayList(1);
+					projectList.add(project);
+			} catch(Exception e){}
+		}
+		
+		return (IProject[])projectList.toArray(new IProject[projectList.size()]);
+	}
+	
+	private IProject[] createProjects(String projName, IPath location, String projectTypeId, boolean containsZip) {
+		
+		//  In case the projects need to be updated...
+		IOverwriteQuery queryALL = new IOverwriteQuery(){
+			public String queryOverwrite(String file) {
+				return ALL;
+			}};
+		IOverwriteQuery queryNOALL = new IOverwriteQuery(){
+			public String queryOverwrite(String file) {
+				return NO_ALL;
+			}};
+		
+		UpdateManagedProjectManager.setBackupFileOverwriteQuery(queryALL);
+		UpdateManagedProjectManager.setUpdateProjectQuery(queryALL);
+		
+		IProject projects[] = createProject(projName, location, projectTypeId, containsZip);
+		return projects;
+	}
+		
+	private void buildProjects(IProject projects[], IPath[] files) {	
+		if(projects == null || projects.length == 0)
+			return;
+				
+		for(int i = 0; i < projects.length; i++){
+			IProject curProject = projects[i];
+			
+			IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(curProject);
+			
+			//check whether the managed build info is converted
+			boolean isCompatible = UpdateManagedProjectManager.isCompatibleProject(info);
+			assertTrue(isCompatible);
+			
+			if(isCompatible){
+				// Build the project in order to generate the maekfiles 
+				try{
+					curProject.build(IncrementalProjectBuilder.INCREMENTAL_BUILD,null);
+				}
+				catch(CoreException e){
+					fail(e.getStatus().getMessage());
+				}
+				catch(OperationCanceledException e){
+					fail("the project \"" + curProject.getName() + "\" build was cancelled, exception message: " + e.getMessage());
+				}
+				
+				//compare the generated makefiles to their benchmarks
+				if (files != null && files.length > 0) {
+					if (i == 0) {
+						String configName = info.getDefaultConfiguration().getName();
+						IPath buildDir = Path.fromOSString(configName);
+						ManagedBuildTestHelper.compareBenchmarks(curProject, buildDir, files);
+					}
+				}
+			}
+		}
+		
+		for(int i = 0; i < projects.length; i++)
+			ManagedBuildTestHelper.removeProject(projects[i].getName());
+	}
+
+	private void createPathVariable(IPath tmpDir) {
+		IWorkspace workspace = ResourcesPlugin.getWorkspace();
+		workspace = ResourcesPlugin.getWorkspace();
+		IPathVariableManager pathMan = workspace.getPathVariableManager();
+		String name = MBS_TEMP_DIR;
+		try {
+			if (pathMan.validateName(name).isOK() && pathMan.validateValue(tmpDir).isOK()) {
+			    pathMan.setValue(name, tmpDir);
+			} else {
+				fail("could not create the path variable " + name);
+			}
+		} catch (Exception e) {fail("could not create the path variable " + name);}
+	}
+	
+	private void createFileLink(IProject project, IPath tmpDir, String linkName, String fileName) {
+		IWorkspace workspace = ResourcesPlugin.getWorkspace();
+		String name = MBS_TEMP_DIR;
+		if (!pathVariableCreated) {
+			createPathVariable(tmpDir);
+			pathVariableCreated = true;
+		}
+			
+		try {	
+			// Now we can create a linked resource relative to the defined path variable: 
+			IFile linkF1 = project.getFile(linkName);
+			IPath location = new Path("MBSTemp/" + fileName);
+			if (workspace.validateLinkLocation(linkF1, location).isOK()) {
+			    linkF1.createLink(location, IResource.NONE, null);
+			} else {
+				fail("could not create the link to " + name);
+			}
+		} catch (Exception e) {fail("could not create the link to " + name);}		
+	}
+	
+	/* (non-Javadoc)
+	 * tests 2.1 style tool integration for a single file executable
+	 */
+	public void testSingleFileExe(){
+		IPath[] makefiles = {
+				 Path.fromOSString("makefile"), 
+				 Path.fromOSString("objects.mk"), 
+				 Path.fromOSString("sources.mk"), 
+				 Path.fromOSString("subdir.mk")};
+		IProject[] projects = createProjects("singleFileExe", null, null, true);
+		buildProjects(projects, makefiles);
+	}
+	
+	/* (non-Javadoc)
+	 * tests 2.1 style tool integration for a two file SO
+	 */
+	public void testTwoFileSO(){
+		IPath[] makefiles = {
+				 Path.fromOSString("makefile"), 
+				 Path.fromOSString("objects.mk"), 
+				 Path.fromOSString("sources.mk"), 
+				 Path.fromOSString("subdir.mk")};
+		IProject[] projects = createProjects("twoFileSO", null, null, true);
+		buildProjects(projects, makefiles);
+	}
+
+	/* (non-Javadoc)
+	 * tests 2.1 style tool integration for multiple source files & a resource configuration
+	 */
+	public void testMultiResConfig(){
+		IPath[] makefiles = {
+				 Path.fromOSString("makefile"), 
+				 Path.fromOSString("objects.mk"), 
+				 Path.fromOSString("sources.mk"), 
+				 Path.fromOSString("subdir.mk"),
+				 Path.fromOSString("source1/subdir.mk"),
+				 Path.fromOSString("source2/subdir.mk"),
+				 Path.fromOSString("source2/source21/subdir.mk")};
+		IProject[] projects = createProjects("multiResConfig", null, null, true);
+		buildProjects(projects, makefiles);
+	}
+	
+	/* (non-Javadoc)
+	 * tests 2.1 style tool integration for linked files
+	 */
+	public void testLinkedLib(){
+		IPath[] makefiles = {
+				 Path.fromOSString("makefile"), 
+				 Path.fromOSString("objects.mk"), 
+				 //Path.fromOSString("subdir.mk")   // Can't compare this yet since it contains absolute paths!
+				 Path.fromOSString("sources.mk")}; 
+		IPath[] linkedFiles = {
+				 Path.fromOSString("f1.c"), 
+				 Path.fromOSString("f2.c"), 
+				 Path.fromOSString("test_ar.h")};
+		File srcDirFile = CTestPlugin.getFileInPlugin(new Path("resources/test21Projects/linkedLib/"));
+		IPath srcDir = Path.fromOSString(srcDirFile.toString());
+		IPath tmpSubDir = Path.fromOSString("CDTMBSTest");
+		IPath tmpDir = ManagedBuildTestHelper.copyFilesToTempDir(srcDir, tmpSubDir, linkedFiles);
+		try {
+			IProject[] projects = createProjects("linkedLib", null, "cdt.managedbuild.target.testgnu21.lib", true);
+			//  There should be only one project.  Add our linked files to it.
+			IProject project = projects[0];
+			createFileLink(project, tmpDir, "f1.c", "f1.c");
+			createFileLink(project, tmpDir, "f2link.c", "f2.c");
+			createFileLink(project, tmpDir, "test_ar.h", "test_ar.h");
+			//  Build the project
+			buildProjects(projects, makefiles);
+		} finally {ManagedBuildTestHelper.deleteTempDir(tmpSubDir, linkedFiles);}
+	}
+	
+	/* (non-Javadoc)
+	 * tests 2.1 style tool integration for a linked folder
+	 */
+	public void testLinkedFolder(){
+		IPath[] makefiles = {
+				 Path.fromOSString("makefile"), 
+				 Path.fromOSString("objects.mk"), 
+				 Path.fromOSString("subdir.mk"),
+				 Path.fromOSString("sources.mk")}; 
+		IPath[] linkedFiles = {
+				 Path.fromOSString("f1.c"), 
+				 Path.fromOSString("f2.c"), 
+				 Path.fromOSString("test_ar.h"),
+				 Path.fromOSString("Benchmarks/makefile"), 
+				 Path.fromOSString("Benchmarks/objects.mk"), 
+				 Path.fromOSString("Benchmarks/subdir.mk"),
+				 Path.fromOSString("Benchmarks/sources.mk")}; 
+		File srcDirFile = CTestPlugin.getFileInPlugin(new Path("resources/test21Projects/linkedFolder/"));
+		IPath srcDir = Path.fromOSString(srcDirFile.toString());
+		IPath tmpSubDir = Path.fromOSString("CDTMBSTest");
+		IPath tmpDir = ManagedBuildTestHelper.copyFilesToTempDir(srcDir, tmpSubDir, linkedFiles);
+		if (!pathVariableCreated) {
+			createPathVariable(tmpDir);
+			pathVariableCreated = true;
+		}
+		try {
+			IPath location = Path.fromOSString(MBS_TEMP_DIR);
+			IProject[] projects = createProjects("linkedFolder", location, "cdt.managedbuild.target.testgnu21.lib", false);
+			//  Build the project
+			buildProjects(projects, makefiles);
+		} finally {ManagedBuildTestHelper.deleteTempDir(tmpSubDir, linkedFiles);}
+	}
+}
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedProjectUpdateTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedProjectUpdateTests.java
index 914c5f8e162..b1a2fdcca9b 100644
--- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedProjectUpdateTests.java
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedProjectUpdateTests.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2004 Intel Corporation and others.
+ * Copyright (c) 2004, 2005 Intel Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Common Public License v1.0
  * which accompanies this distribution, and is available at
@@ -26,6 +26,7 @@ import org.eclipse.cdt.managedbuilder.testplugin.ManagedBuildTestHelper;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IncrementalProjectBuilder;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.ui.dialogs.IOverwriteQuery;
@@ -40,8 +41,10 @@ public class ManagedProjectUpdateTests extends TestCase {
 		
 		suite.addTest(new ManagedProjectUpdateTests("testProjectUpdate12_Update"));
 		suite.addTest(new ManagedProjectUpdateTests("testProjectUpdate20_Update"));
+		suite.addTest(new ManagedProjectUpdateTests("testProjectUpdate21_Update"));
 		suite.addTest(new ManagedProjectUpdateTests("testProjectUpdate12_NoUpdate"));
 		suite.addTest(new ManagedProjectUpdateTests("testProjectUpdate20_NoUpdate"));
+		suite.addTest(new ManagedProjectUpdateTests("testProjectUpdate21_NoUpdate"));
 		
 		return suite;
 	}
@@ -75,7 +78,7 @@ public class ManagedProjectUpdateTests extends TestCase {
 				projectName = projectName.substring(0,projectName.length()-".zip".length());
 				if(projectName.length() == 0)
 					continue;
-				IProject project = ManagedBuildTestHelper.createProject(projectName,projectZips[i]);
+				IProject project = ManagedBuildTestHelper.createProject(projectName, projectZips[i], null, null);
 				if(project != null)
 					projectList.add(project);
 			}
@@ -89,7 +92,8 @@ public class ManagedProjectUpdateTests extends TestCase {
 		return (IProject[])projectList.toArray(new IProject[projectList.size()]);
 	}
 	
-	private void doTestProjectUpdate(String version, boolean updateProject, boolean overwriteBackupFiles){
+	private void doTestProjectUpdate(String version, boolean updateProject, boolean overwriteBackupFiles, 
+			IPath[] files){
 		IOverwriteQuery queryALL = new IOverwriteQuery(){
 			public String queryOverwrite(String file) {
 				return ALL;
@@ -99,8 +103,8 @@ public class ManagedProjectUpdateTests extends TestCase {
 				return NO_ALL;
 			}};
 		
-		UpdateManagedProjectManager.setBackupFileOverwriteQuery(updateProject ? queryALL : queryNOALL);
-		UpdateManagedProjectManager.setUpdateProjectQuery(overwriteBackupFiles ? queryALL : queryNOALL);
+		UpdateManagedProjectManager.setBackupFileOverwriteQuery(overwriteBackupFiles ? queryALL : queryNOALL);
+		UpdateManagedProjectManager.setUpdateProjectQuery(updateProject ? queryALL : queryNOALL);
 		
 		IProject projects[] = createVersionProjects(version);
 		if(projects == null || projects.length == 0)
@@ -132,6 +136,15 @@ public class ManagedProjectUpdateTests extends TestCase {
 				catch(OperationCanceledException e){
 					fail("the project \"" + curProject.getName() + "\" build was cancelled, exception message: " + e.getMessage());
 				}
+				
+				//compare the generated makefiles to their benchmarks
+				if (files != null && files.length > 0) {
+					if (i == 0) {
+						String configName = info.getDefaultConfiguration().getName();
+						IPath buildDir = Path.fromOSString(configName);
+						ManagedBuildTestHelper.compareBenchmarks(curProject, buildDir, files);
+					}
+				}
 			}
 		}
 		
@@ -144,7 +157,12 @@ public class ManagedProjectUpdateTests extends TestCase {
 	 * in case when user chooses to update the project 
 	 */
 	public void testProjectUpdate12_Update(){
-		doTestProjectUpdate("1.2",true,true);
+		IPath[] makefiles = {
+				 Path.fromOSString("makefile"), 
+				 Path.fromOSString("objects.mk"), 
+				 Path.fromOSString("sources.mk"), 
+				 Path.fromOSString("subdir.mk")};
+		doTestProjectUpdate("1.2", true, true, makefiles);
 	}
 
 	/* (non-Javadoc)
@@ -152,7 +170,26 @@ public class ManagedProjectUpdateTests extends TestCase {
 	 * in case when user chooses to update the project 
 	 */
 	public void testProjectUpdate20_Update(){
-		doTestProjectUpdate("2.0",true,true);
+		IPath[] makefiles = {
+				 Path.fromOSString("makefile"), 
+				 Path.fromOSString("objects.mk"), 
+				 Path.fromOSString("sources.mk"), 
+				 Path.fromOSString("subdir.mk")};
+		doTestProjectUpdate("2.0", true, true, makefiles);
+	}
+
+	/* (non-Javadoc)
+	 * tests project v2.1 update 
+	 * in case when user chooses to update the project 
+	 */
+	public void testProjectUpdate21_Update(){
+		IPath[] makefiles = {
+				 Path.fromOSString("makefile"), 
+				 Path.fromOSString("objects.mk"), 
+				 Path.fromOSString("sources.mk"), 
+				 Path.fromOSString("subdir.mk"), 
+				 Path.fromOSString("Functions/subdir.mk")};
+		doTestProjectUpdate("2.1", true, true, makefiles);
 	}
 
 	/* (non-Javadoc)
@@ -160,7 +197,7 @@ public class ManagedProjectUpdateTests extends TestCase {
 	 * in case when user chooses not to update the project 
 	 */
 	public void testProjectUpdate12_NoUpdate(){
-		doTestProjectUpdate("1.2",false,true);
+		doTestProjectUpdate("1.2", false, true, null);
 	}
 
 	/* (non-Javadoc)
@@ -168,6 +205,14 @@ public class ManagedProjectUpdateTests extends TestCase {
 	 * in case when user chooses not to update the project 
 	 */
 	public void testProjectUpdate20_NoUpdate(){
-		doTestProjectUpdate("2.0",false,true);
+		doTestProjectUpdate("2.0", false, true, null);
+	}
+
+	/* (non-Javadoc)
+	 * tests project v2.1 update 
+	 * in case when user chooses not to update the project 
+	 */
+	public void testProjectUpdate21_NoUpdate(){
+		doTestProjectUpdate("2.1", false, true, null);
 	}
 }
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ResourceBuildCoreTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ResourceBuildCoreTests.java
index d1566ae3db5..dc9f3b1a25f 100644
--- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ResourceBuildCoreTests.java
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ResourceBuildCoreTests.java
@@ -17,7 +17,6 @@ import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
 import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.ICDescriptor;
 import org.eclipse.cdt.make.core.MakeCorePlugin;
 import org.eclipse.cdt.managedbuilder.core.BuildException;
 import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
@@ -31,6 +30,7 @@ import org.eclipse.cdt.managedbuilder.core.IOptionCategory;
 import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
 import org.eclipse.cdt.managedbuilder.core.ManagedCProjectNature;
 import org.eclipse.cdt.managedbuilder.internal.core.Tool;
+import org.eclipse.cdt.managedbuilder.testplugin.ManagedBuildTestHelper;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IProjectDescription;
@@ -84,7 +84,7 @@ public class ResourceBuildCoreTests extends TestCase {
 			project = createProject(projectName);
 			
 			// Now associate the builder with the project
-			addManagedBuildNature(project);
+			ManagedBuildTestHelper.addManagedBuildNature(project);
 			IProjectDescription description = project.getDescription();
 			// Make sure it has a managed nature
 			if (description != null) {
@@ -97,7 +97,7 @@ public class ResourceBuildCoreTests extends TestCase {
 	
 		// Find the base project type definition
 		IProjectType[] projTypes = ManagedBuildManager.getDefinedProjectTypes();
-		IProjectType projType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu.exe");
+		IProjectType projType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu21.exe");
 		assertNotNull(projType);
 		
 		// Create the managed-project (.cdtbuild) for our project that builds an executable.
@@ -271,7 +271,7 @@ public class ResourceBuildCoreTests extends TestCase {
 			project = createProject(projectName);
 			
 			// Now associate the builder with the project
-			addManagedBuildNature(project);
+			ManagedBuildTestHelper.addManagedBuildNature(project);
 			IProjectDescription description = project.getDescription();
 			// Make sure it has a managed nature
 			if (description != null) {
@@ -284,7 +284,7 @@ public class ResourceBuildCoreTests extends TestCase {
 	
 		// Find the base project type definition
 		IProjectType[] projTypes = ManagedBuildManager.getDefinedProjectTypes();
-		IProjectType projType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu.exe");
+		IProjectType projType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu21.exe");
 		assertNotNull(projType);
 		
 		// Create the managed-project (.cdtbuild) for our project that builds an executable.
@@ -372,7 +372,7 @@ public class ResourceBuildCoreTests extends TestCase {
 			project = createProject(projectName);
 			
 			// Now associate the builder with the project
-			addManagedBuildNature(project);
+			ManagedBuildTestHelper.addManagedBuildNature(project);
 			IProjectDescription description = project.getDescription();
 			// Make sure it has a managed nature
 			if (description != null) {
@@ -385,7 +385,7 @@ public class ResourceBuildCoreTests extends TestCase {
 	
 		// Find the base project type definition
 		IProjectType[] projTypes = ManagedBuildManager.getDefinedProjectTypes();
-		IProjectType projType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu.exe");
+		IProjectType projType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu21.exe");
 		assertNotNull(projType);
 		
 		// Create the managed-project (.cdtbuild) for our project that builds an executable.
@@ -624,7 +624,7 @@ public class ResourceBuildCoreTests extends TestCase {
 		try {
 			project = createProject(projectName);
 			// Now associate the builder with the project
-			addManagedBuildNature(project);
+			ManagedBuildTestHelper.addManagedBuildNature(project);
 			IProjectDescription description = project.getDescription();
 			// Make sure it has a managed nature
 			if (description != null) {
@@ -637,7 +637,7 @@ public class ResourceBuildCoreTests extends TestCase {
 	
 		// Find the base project type definition
 		IProjectType[] projTypes = ManagedBuildManager.getDefinedProjectTypes();
-		IProjectType projType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu.exe");
+		IProjectType projType = ManagedBuildManager.getProjectType("cdt.managedbuild.target.testgnu21.exe");
 		assertNotNull(projType);
 		
 		// Create the managed-project (.cdtbuild) for our project that builds a dummy executable
@@ -711,34 +711,5 @@ public class ResourceBuildCoreTests extends TestCase {
 	//	checkBuildTestSettings(info);
 		ManagedBuildManager.removeBuildInfo(project);
 	}
-
-	private void addManagedBuildNature (IProject project) {
-		// Create the buildinformation object for the project
-		IManagedBuildInfo info = ManagedBuildManager.createBuildInfo(project);
-		info.setValid(true);
-		
-		// Add the managed build nature
-		try {
-			ManagedCProjectNature.addManagedNature(project, new NullProgressMonitor());
-			// ManagedCProjectNature.addManagedBuilder(project, new NullProgressMonitor());
-		} catch (CoreException e) {
-			fail("Test failed on adding managed build nature or builder: " + e.getLocalizedMessage());
-		}
-
-		// Associate the project with the managed builder so the clients can get proper information
-		ICDescriptor desc = null;
-		try {
-			desc = CCorePlugin.getDefault().getCProjectDescription(project, true);
-			desc.remove(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID);
-			desc.create(CCorePlugin.BUILD_SCANNER_INFO_UNIQ_ID, ManagedBuildManager.INTERFACE_IDENTITY);
-		} catch (CoreException e) {
-			fail("Test failed on adding managed builder as scanner info provider: " + e.getLocalizedMessage());
-		}
-		try {
-			desc.saveProjectData();
-		} catch (CoreException e) {
-			fail("Test failed on saving the ICDescriptor data: " + e.getLocalizedMessage());		}
-	}
-		
 	
 }	
\ No newline at end of file
diff --git a/build/org.eclipse.cdt.managedbuilder.core/plugin.properties b/build/org.eclipse.cdt.managedbuilder.core/plugin.properties
index e02c184fb59..0642eac89d8 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/plugin.properties
+++ b/build/org.eclipse.cdt.managedbuilder.core/plugin.properties
@@ -1,5 +1,5 @@
 ###############################################################################
-# Copyright (c) 2003, 2004 IBM Corporation and others.
+# Copyright (c) 2003, 2005 IBM Corporation and others.
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Common Public License v1.0
 # which accompanies this distribution, and is available at
@@ -13,4 +13,9 @@ providerName=Eclipse.org
 
 GeneratedMakefileCBuilder.name=Generated Makefile Builder
 ManagedBuildNature.name=Managed Builder Project
-ManagedMakeProject.name=Managed Make Project
\ No newline at end of file
+ManagedMakeProject.name=Managed Make Project
+
+objectFileName=Object File
+executableName=Executable File
+staticLibraryName=Static Library
+sharedLibraryName=Shared Library
diff --git a/build/org.eclipse.cdt.managedbuilder.core/plugin.xml b/build/org.eclipse.cdt.managedbuilder.core/plugin.xml
index 7a7a29b5e70..e54cc6a881b 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/plugin.xml
+++ b/build/org.eclipse.cdt.managedbuilder.core/plugin.xml
@@ -121,4 +121,46 @@
             type="text"/>
    </extension>
 
+<!-- =================================================================================== -->
+<!-- Define C/C++ "object" files ContentTypes                                            -->
+<!-- =================================================================================== -->
+  <extension point="org.eclipse.core.runtime.contentTypes">
+	  <!-- declares a content type for object files -->
+	  <content-type id="compiledObjectFile" name="%objectFileName" 
+		  priority="high"/>
+	  <!-- declares a content type for executable files -->
+      <content-type id="executableFile" name="%executableName" 
+          priority="high"/>
+	  <!-- declares a content type for static libraries -->
+      <content-type id="staticLibrary" name="%staticLibraryName" 
+          priority="high"/>
+	  <!-- declares a content type for shared libraries -->
+      <content-type id="sharedLibrary" name="%sharedLibraryName" 
+          priority="high"/>
+  </extension>
+
+  <extension point="org.eclipse.core.runtime.contentTypes"> 
+      <file-association 
+       content-type="org.eclipse.cdt.managedbuilder.core.compiledObjectFile"
+       file-extensions="obj,o"/>
+   </extension> 
+
+   <extension point="org.eclipse.core.runtime.contentTypes"> 
+      <file-association 
+       content-type="org.eclipse.cdt.managedbuilder.core.executableFile"
+       file-extensions="exe,"/>
+   </extension> 
+
+   <extension point="org.eclipse.core.runtime.contentTypes"> 
+      <file-association 
+       content-type="org.eclipse.cdt.managedbuilder.core.staticLibrary"
+       file-extensions="lib,a"/>
+   </extension> 
+
+   <extension point="org.eclipse.core.runtime.contentTypes"> 
+      <file-association 
+       content-type="org.eclipse.cdt.managedbuilder.core.sharedLibrary"
+       file-extensions="dll,so"/>
+   </extension> 
+
 </plugin>
diff --git a/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd b/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd
index 79f85f11548..1e2ccbe535b 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd
+++ b/build/org.eclipse.cdt.managedbuilder.core/schema/buildDefinitions.exsd
@@ -1330,15 +1330,7 @@ If the &quot;buildPathResolver&quot; attribute is specified, the &quot;pathDelim
          <meta.section type="examples"/>
       </appInfo>
       <documentation>
-         The following is an example of the extension point usage:
-&lt;p&gt;
-&lt;pre&gt;
-   &lt;extension
-         id=&quot;buildExample&quot;
-         name=&quot;Definitions for Build Example&quot;
-         point=&quot;org.eclipse.cdt.managedbuilder.core.buildDefinitions&quot;&gt;
-   etc...
-&lt;/pre&gt;
+         [Enter examples here.]
       </documentation>
    </annotation>
 
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IAdditionalInput.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IAdditionalInput.java
index 62b0050d647..f8b82373dd8 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IAdditionalInput.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IAdditionalInput.java
@@ -39,15 +39,15 @@ public interface IAdditionalInput {
 	public IInputType getParent();
 
 	/**
-	 * Returns a semi-colon separated list of the relative or absolute paths of the resources
+	 * Returns an array of the relative or absolute paths of the resources
 	 * to which this element applies.
 	 * The resources must be a member of the project, the output from another tool in the 
 	 * tool-chain, or an external file.  The file name of the path can use GNU Make pattern 
 	 * rule syntax (in order to generate the name from the input file name).
 	 * 
-	 * @return String
+	 * @return String[]
 	 */
-	public String getPaths();
+	public String[] getPaths();
 
 	/**
 	 * Sets semi-colon separated list of the relative or absolute paths of the resources to 
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOutputType.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOutputType.java
index 470042d5bb5..9965d7cd7b3 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOutputType.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOutputType.java
@@ -189,18 +189,18 @@ public interface IOutputType extends IBuildObject {
 	public void setOutputPrefix(String prefix);
 
 	/**
-	 * Returns the paths of the complete set of output files for this outputType 
+	 * Returns the file names of the complete set of output files for this outputType 
 	 * 
-	 * @return String
+	 * @return String[]
 	 */
-	public String getOutputNames();
+	public String[] getOutputNames();
 
 	/**
-	 * Sets the complete set of output files for this outputType 
+	 * Sets the complete set of output file names for this outputType 
 	 * 
 	 * @param names
 	 */
-	public void getOutputNames(String names);
+	public void setOutputNames(String names);
 
 	/**
 	 * Returns the pattern, using the Gnu pattern rule syntax, for deriving the 
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ITool.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ITool.java
index 6a44e523ac8..81d8efe4de8 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ITool.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ITool.java
@@ -102,6 +102,20 @@ public interface ITool extends IBuildObject {
 	 * @since 2.0
 	 */
 	public IOption getOptionById(String id);
+
+	/**
+	 * Get the <code>IOption</code> in the receiver with the specified 
+	 * ID, or an option with a superclass with this id. 
+	 * 
+	 * <p>If the receiver does not have an option with that ID, the method 
+	 * returns <code>null</code>. It is the responsibility of the caller to 
+	 * verify the return value.  
+	 * 
+	 * @param id unique identifier of the option to search for
+	 * @return <code>IOption</code>
+	 * @since 3.0
+	 */
+	public IOption getOptionBySuperClassId(String id);
 	
 	/**
 	 * Returns the complete list of options that are available for this tool.
@@ -187,7 +201,8 @@ public interface ITool extends IBuildObject {
 
 	/**
 	 * Returns all of the additional input resources of all InputType children.
-	 * Note: This does not include additional dependencies.
+	 * Note: This does not include the primary InputType and does not include
+	 * additional dependencies.
 	 * 
 	 * @return IPath[]
 	 */
@@ -195,7 +210,8 @@ public interface ITool extends IBuildObject {
 
 	/**
 	 * Returns all of the additional dependency resources of all InputType children.
-	 * Note: This does not include additional inputs.
+	 * Note: This does not include the primary InputType and does not include 
+	 * additional inputs.
 	 * 
 	 * @return IPath[]
 	 */
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IToolChain.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IToolChain.java
index 399d9569fa0..ff6da2e3fcd 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IToolChain.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IToolChain.java
@@ -264,18 +264,37 @@ public interface IToolChain extends IBuildObject {
 	public void setScannerConfigDiscoveryProfileId(String profileId);
 
 	/**
-	 * Returns the id in this tool-chain that creates the build artifact.  
+	 * Returns the sem-colon separated list of Tool ids containing each 
+	 * tool that can create the final build artifact (the end target of 
+	 * the build).  MBS will use the first ID in the list that matches 
+	 * a Tool in the ToolChain.  One reason for specifying a list, is 
+	 * that different versions of a tool can be selected based upon the 
+	 * project nature (e.g. different tool definitions for a linker for C vs. C++).
 	 * 
 	 * @return String
 	 */
-	public String getTargetToolId();
+	public String getTargetToolIds();
 
 	/**
-	 * Sets the tool in this tool-chain that creates the build artifact.  
+	 * Sets the sem-colon separated list of Tool ids containing each 
+	 * tool that can create the final build artifact (the end target of 
+	 * the build).  
 	 * 
-	 * @param targetToolId
+	 * @param targetToolIds
 	 */
-	public void setTargetTool(String targetToolId);
+	public void setTargetToolIds(String targetToolIds);
+
+	/**
+	 * Returns the list of Tool ids containing each 
+	 * tool that can create the final build artifact (the end target of 
+	 * the build).  MBS will use the first ID in the list that matches 
+	 * a Tool in the ToolChain.  One reason for specifying a list, is 
+	 * that different versions of a tool can be selected based upon the 
+	 * project nature (e.g. different tool definitions for a linker for C vs. C++).
+	 * 
+	 * @return String[]
+	 */
+	public String[] getTargetToolList();
 	
 	/**
 	 * Returns the OutputTypes in this tool-chain, besides the primary 
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java
index 29858ecef50..1c54ebeacb3 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java
@@ -114,8 +114,8 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
 	public  static final String MANIFEST_ERROR_DUPLICATE = "ManagedBuildManager.error.manifest.duplicate";	//$NON-NLS-1$
 	private static final String NEWLINE = System.getProperty("line.separator");	//$NON-NLS-1$
 	
-	// This is the version of the manifest and project files that
-	private static final PluginVersionIdentifier buildInfoVersion = new PluginVersionIdentifier(2, 1, 0);
+	// This is the version of the manifest and project files
+	private static final PluginVersionIdentifier buildInfoVersion = new PluginVersionIdentifier(3, 0, 0);
 	private static Map depCalculatorsMap;
 	private static boolean projectTypesLoaded = false;
 	// Project types defined in the manifest files
@@ -1291,11 +1291,7 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
 			// This is a 1.2 manifest and we are compatible for now
 			return true;
 		}
-		//  isCompatibleWith will return FALSE, if:
-		//   o  The major versions are not equal
-		//   o  The major versions are equal, but the remainder of the manifest version # is
-		//      greater than the MBS version #
-		return(buildInfoVersion.isCompatibleWith(version));
+		return(buildInfoVersion.isGreaterOrEqualTo(version));
 	}
 	
 	/* (non-Javadoc)
@@ -1322,20 +1318,21 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI
 			// Since 2.0 this will be a processing instruction containing version
 			if (rootElement.getNodeType() != Node.PROCESSING_INSTRUCTION_NODE) {
 				// This is a 1.2 project and it must be updated
-
 			} else {
 				// Make sure that the version is compatible with the manager
 				fileVersion = rootElement.getNodeValue();
 				PluginVersionIdentifier version = new PluginVersionIdentifier(fileVersion);
-				//  isCompatibleWith will return FALSE, if:
-				//   o  The major versions are not equal
-				//   o  The major versions are equal, but the remainder of the .cdtbuild version # is
-				//      greater than the MBS version #
-				if (!buildInfoVersion.isCompatibleWith(version)) {
-					throw new BuildException(ManagedMakeMessages.getFormattedString(PROJECT_VERSION_ERROR, project.getName())); 
-				}
 				if (buildInfoVersion.isGreaterThan(version)) {
-					// TODO Upgrade the project
+					// This is >= 2.0 project, but earlier than the current MBS version - it may need to be updated
+				} else {
+					// This is a 
+					//  isCompatibleWith will return FALSE, if:
+					//   o  The major versions are not equal
+					//   o  The major versions are equal, but the remainder of the .cdtbuild version # is
+					//      greater than the MBS version #
+					if (!buildInfoVersion.isCompatibleWith(version)) {
+						throw new BuildException(ManagedMakeMessages.getFormattedString(PROJECT_VERSION_ERROR, project.getName())); 
+					}
 				}
 			}
 			
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 a33a4403667..c949d6ea3e6 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
@@ -210,8 +210,12 @@ public class AdditionalInput implements IAdditionalInput {
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.core.build.managed.IAdditionalInput#getPaths()
 	 */
-	public String getPaths() {
-		return paths;
+	public String[] getPaths() {
+		if (paths == null) {
+			return null;
+		}
+		String[] nameTokens = paths.split(";"); //$NON-NLS-1$
+		return nameTokens;
 	}
 
 	/* (non-Javadoc)
@@ -229,6 +233,9 @@ public class AdditionalInput implements IAdditionalInput {
 	 * @see org.eclipse.cdt.core.build.managed.IAdditionalInput#getKind()
 	 */
 	public int getKind() {
+		if (kind == null) {
+			return KIND_ADDITIONAL_INPUT_DEPENDENCY;
+		}
 		return kind.intValue();
 	}
 
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java
index e2e6474568e..8b8a8a8d311 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java
@@ -642,22 +642,26 @@ public class Configuration extends BuildObject implements IConfiguration {
 	 * @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getTargetTool()
 	 */
 	public ITool getTargetTool() {
-		String targetToolId = toolChain.getTargetToolId();
-		if (targetToolId == null) return null;
+		String[] targetToolIds = toolChain.getTargetToolList();
+		if (targetToolIds == null || targetToolIds.length == 0) return null;
 		
-		//  Look for a tool with this ID, or a tool with a superclass with this id
+		//  For each target tool id, in list order,
+		//  look for a tool with this ID, or a tool with a superclass with this id.
+		//  Stop when we find a match
 		ITool[] tools = getFilteredTools();
-		for (int i = 0; i < tools.length; i++) {
-			ITool targetTool = tools[i];
-			ITool tool = targetTool;
-			do {
-				if (targetToolId.equals(tool.getId())) {
-					return targetTool;
-				}		
-				tool = tool.getSuperClass();
-			} while (tool != null);
+		for (int i=0; i<targetToolIds.length; i++) {
+			String targetToolId = targetToolIds[i];
+			for (int j=0; j<tools.length; j++) {
+				ITool targetTool = tools[j];
+				ITool tool = targetTool;
+				do {
+					if (targetToolId.equals(tool.getId())) {
+						return targetTool;
+					}		
+					tool = tool.getSuperClass();
+				} while (tool != null);
+			}
 		}
-		
 		return null;
 	}
 
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/InputType.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/InputType.java
index 015f080e8dd..d32325a5eb7 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/InputType.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/InputType.java
@@ -595,7 +595,7 @@ public class InputType extends BuildObject implements IInputType {
 		while (iter.hasNext()) {
 			AdditionalInput ai = (AdditionalInput) iter.next();
 			boolean match = false;
-			String[] tokens = ai.getPaths().split(";"); //$NON-NLS-1$
+			String[] tokens = ai.getPaths();
 			if (tokens.length == inputTokens.length) {
 				match = true;
 				for (int i = 0; i < tokens.length; i++) {
@@ -637,11 +637,10 @@ public class InputType extends BuildObject implements IInputType {
 			int kind = current.getKind();
 			if (kind == IAdditionalInput.KIND_ADDITIONAL_DEPENDENCY ||
 				kind == IAdditionalInput.KIND_ADDITIONAL_INPUT_DEPENDENCY) {
-				String paths = current.getPaths();
+				String[] paths = current.getPaths();
 				if (paths != null) {
-					String[] pathTokens = paths.split(";"); //$NON-NLS-1$
-					for (int i = 0; i < pathTokens.length; i++) {
-						deps.add(Path.fromOSString(pathTokens[i]));
+					for (int i = 0; i < paths.length; i++) {
+						deps.add(Path.fromOSString(paths[i]));
 					}
 				}
 			}
@@ -660,11 +659,10 @@ public class InputType extends BuildObject implements IInputType {
 			int kind = current.getKind();
 			if (kind == IAdditionalInput.KIND_ADDITIONAL_INPUT ||
 				kind == IAdditionalInput.KIND_ADDITIONAL_INPUT_DEPENDENCY) {
-				String paths = current.getPaths();
+				String[] paths = current.getPaths();
 				if (paths != null) {
-					String[] pathTokens = paths.split(";"); //$NON-NLS-1$
-					for (int i = 0; i < pathTokens.length; i++) {
-						ins.add(Path.fromOSString(pathTokens[i]));
+					for (int i = 0; i < paths.length; i++) {
+						ins.add(Path.fromOSString(paths[i]));
 					}
 				}
 			}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java
index 571007d30ae..92fa003c498 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java
@@ -440,13 +440,12 @@ public class ManagedBuildInfo implements IManagedBuildInfo, IScannerInfo {
 					}
 				}
 			}
+			//add paths specified in the environment
+			String envIncludePaths[] = ManagedBuildManager.getEnvironmentVariableProvider().getBuildPaths(config,IEnvVarBuildPath.BUILDPATH_INCLUDE);
+			if(envIncludePaths != null)
+				paths.addAll(Arrays.asList(envIncludePaths));
 		}
-		
-		//add paths specified in the environment
-		String envIncludePaths[] = ManagedBuildManager.getEnvironmentVariableProvider().getBuildPaths(config,IEnvVarBuildPath.BUILDPATH_INCLUDE);
-		if(envIncludePaths != null)
-			paths.addAll(Arrays.asList(envIncludePaths));
-		
+				
 		// Answer the results as an array
 		return (String[])paths.toArray(new String[paths.size()]); 
 	}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OutputType.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OutputType.java
index d7f9ed7b597..a5969f547dc 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OutputType.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OutputType.java
@@ -685,7 +685,7 @@ public class OutputType extends BuildObject implements IOutputType {
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.core.build.managed.IOuputType#getOutputNames()
 	 */
-	public String getOutputNames() {
+	public String[] getOutputNames() {
 		if (outputNames == null) {
 			// If I have a superClass, ask it
 			if (superClass != null) {
@@ -694,14 +694,15 @@ public class OutputType extends BuildObject implements IOutputType {
 				return null;
 			}
 		}
-		return outputNames;
+		String[] nameTokens = outputNames.split(";"); //$NON-NLS-1$
+		return nameTokens;
 	}
 
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.core.build.managed.IOuputType#setOutputNames()
 	 */
-	public void getOutputNames(String names) {
+	public void setOutputNames(String names) {
 		if (names == null && outputNames == null) return;
 		if (outputNames == null || names == null || !(names.equals(outputNames))) {
 			outputNames = names;
@@ -713,14 +714,16 @@ public class OutputType extends BuildObject implements IOutputType {
 	 * @see org.eclipse.cdt.core.build.managed.IOuputType#getPrimaryInputType()
 	 */
 	public IInputType getPrimaryInputType() {
-		if (primaryInputType == null) {
+		IInputType ret = primaryInputType;
+		if (ret == null) {
 			if (superClass != null) {
-				return superClass.getPrimaryInputType();
-			} else {
-				return null;
+				ret = superClass.getPrimaryInputType();
+			}
+			if (ret == null) {
+				ret = getParent().getPrimaryInputType();
 			}			
 		}
-		return primaryInputType;
+		return ret;
 	}
 
 	/* (non-Javadoc)
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java
index 4e8f53326a9..3e052ac304a 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java
@@ -242,9 +242,11 @@ public class Tool extends BuildObject implements ITool, IOptionCategory {
 			} else if (toolElement.getNodeName().equals(ITool.OPTION_CAT)) {
 				new OptionCategory(this, (Element)toolElement);
 			} else if (toolElement.getNodeName().equals(ITool.INPUT_TYPE)) {
-				new InputType(this, (Element)toolElement);
+				InputType inputType = new InputType(this, (Element)toolElement);
+				addInputType(inputType);
 			} else if (toolElement.getNodeName().equals(ITool.OUTPUT_TYPE)) {
-				new OutputType(this, (Element)toolElement);
+				OutputType outputType = new OutputType(this, (Element)toolElement);
+				addOutputType(outputType);
 			}
 		}
 	}
@@ -923,6 +925,28 @@ public class Tool extends BuildObject implements ITool, IOptionCategory {
 		return opt;
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.core.build.managed.ITool#getOptionBySuperClassId(java.lang.String)
+	 */
+	public IOption getOptionBySuperClassId(String optionId) {
+		if (optionId == null) return null;
+		
+		//  Look for an option with this ID, or an option with a superclass with this id
+		IOption[] options = getOptions();
+		for (int i = 0; i < options.length; i++) {
+			IOption targetOption = options[i];
+			IOption option = targetOption;
+			do {
+				if (optionId.equals(option.getId())) {
+					return targetOption;
+				}		
+				option = option.getSuperClass();
+			} while (option != null);
+		}
+		
+		return null;
+	}
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.core.build.managed.IOptionCategory#getChildCategories()
 	 */
@@ -973,7 +997,8 @@ public class Tool extends BuildObject implements ITool, IOptionCategory {
 				IInputType ourType = (IInputType)ourTypes.get(i);
 				int j;
 				for (j = 0; j < types.length; j++) {
-					if (ourType.getSuperClass().getId().equals(types[j].getId())) {
+					if (ourType.getSuperClass() != null &&
+					    ourType.getSuperClass().getId().equals(types[j].getId())) {
 						types[j] = ourType;
 						break;
 					}
@@ -1045,7 +1070,8 @@ public class Tool extends BuildObject implements ITool, IOptionCategory {
 				IOutputType ourType = (IOutputType)ourTypes.get(i);
 				int j;
 				for (j = 0; j < types.length; j++) {
-					if (ourType.getSuperClass().getId().equals(types[j].getId())) {
+					if (ourType.getSuperClass() != null &&
+					    ourType.getSuperClass().getId().equals(types[j].getId())) {
 						types[j] = ourType;
 						break;
 					}
@@ -1533,10 +1559,37 @@ public class Tool extends BuildObject implements ITool, IOptionCategory {
 		List allDeps = new ArrayList();
 		IInputType[] types = getInputTypes();
 		for (int i=0; i<types.length; i++) {
-			IPath[] deps = types[i].getAdditionalDependencies();
+			IInputType type = types[i];
+			//  Additional dependencies come from 2 places.
+			//  1.  From AdditionalInput childen
+			IPath[] deps = type.getAdditionalDependencies();
 			for (int j=0; j<deps.length; j++) {
 				allDeps.add(deps[j]);
 			}
+			//  2.  From InputTypes that other than the primary input type
+			if (!type.getPrimaryInput()) {
+				if (type.getOptionId() != null) {
+					IOption option = getOptionBySuperClassId(type.getOptionId());
+					if (option != null) {
+						try {
+							List inputs = new ArrayList();
+							int optType = option.getValueType();
+							if (optType == IOption.STRING) {
+								inputs.add(option.getStringValue());
+							} else if (
+									optType == IOption.STRING_LIST ||
+									optType == IOption.LIBRARIES ||
+									optType == IOption.OBJECTS) {
+								inputs = (List)option.getValue();
+							}
+							allDeps.addAll(inputs);
+						} catch( BuildException ex ) {
+						}
+					}
+				} else if (type.getBuildVariable() != null && type.getBuildVariable().length() > 0) {
+					allDeps.add("$(" + type.getBuildVariable() + ")");   //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			}
 		}
 		return (IPath[])allDeps.toArray(new IPath[allDeps.size()]);
 	}
@@ -1548,10 +1601,20 @@ public class Tool extends BuildObject implements ITool, IOptionCategory {
 		List allRes = new ArrayList();
 		IInputType[] types = getInputTypes();
 		for (int i=0; i<types.length; i++) {
-			IPath[] res = types[i].getAdditionalResources();
+			IInputType type = types[i];
+			//  Additional dependencies come from 2 places.
+			//  1.  From AdditionalInput childen
+			IPath[] res = type.getAdditionalResources();
 			for (int j=0; j<res.length; j++) {
 				allRes.add(res[j]);
 			}
+			//  2.  From InputTypes that other than the primary input type
+			if (!type.getPrimaryInput()) {
+				String var = type.getBuildVariable();
+				if (var != null && var.length() > 0) {
+					allRes.add("$(" + type.getBuildVariable() + ")");   //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			}
 		}
 		return (IPath[])allRes.toArray(new IPath[allRes.size()]);
 	}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java
index 406cc3c76bc..aa76a5ff413 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java
@@ -54,7 +54,7 @@ public class ToolChain extends BuildObject implements IToolChain {
 	private String errorParserIds;
 	private List osList;
 	private List archList;
-	private String targetToolId;
+	private String targetToolIds;
 	private String secondaryOutputIds;
 	private Boolean isAbstract;
     private String scannerConfigDiscoveryProfileId;
@@ -216,8 +216,8 @@ public class ToolChain extends BuildObject implements IToolChain {
 		if (toolChain.archList != null) {
 			archList = new ArrayList(toolChain.archList);
 		}
-		if (toolChain.targetToolId != null) {
-			targetToolId = new String(toolChain.targetToolId);
+		if (toolChain.targetToolIds != null) {
+			targetToolIds = new String(toolChain.targetToolIds);
 		}
 		if (toolChain.secondaryOutputIds != null) {
 			secondaryOutputIds = new String(toolChain.secondaryOutputIds);
@@ -321,7 +321,7 @@ public class ToolChain extends BuildObject implements IToolChain {
 		secondaryOutputIds = element.getAttribute(SECONDARY_OUTPUTS);
 		
 		// Get the target tool id
-		targetToolId = element.getAttribute(TARGET_TOOL);
+		targetToolIds = element.getAttribute(TARGET_TOOL);
 		
 		// Get the scanner config discovery profile id
         scannerConfigDiscoveryProfileId = element.getAttribute(SCANNER_CONFIG_PROFILE_ID);
@@ -415,7 +415,7 @@ public class ToolChain extends BuildObject implements IToolChain {
 		
 		// Get the target tool id
 		if (element.hasAttribute(TARGET_TOOL)) {
-			targetToolId = element.getAttribute(TARGET_TOOL);
+			targetToolIds = element.getAttribute(TARGET_TOOL);
 		}
 		
         // Get the scanner config discovery profile id
@@ -490,8 +490,8 @@ public class ToolChain extends BuildObject implements IToolChain {
 			element.setAttribute(SECONDARY_OUTPUTS, secondaryOutputIds);
 		}
         
-        if (targetToolId != null) {
-            element.setAttribute(TARGET_TOOL, targetToolId);
+        if (targetToolIds != null) {
+            element.setAttribute(TARGET_TOOL, targetToolIds);
         }
         
         if (scannerConfigDiscoveryProfileId != null) {
@@ -839,20 +839,45 @@ public class ToolChain extends BuildObject implements IToolChain {
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getTargetTool()
+	 * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getTargetToolIds()
 	 */
-	public String getTargetToolId() {
-		if (targetToolId == null) {
+	public String getTargetToolIds() {
+		if (targetToolIds == null) {
 			// Ask superClass for its list
 			if (superClass != null) {
-				return superClass.getTargetToolId();
+				return superClass.getTargetToolIds();
 			} else {
 				return null;
 			}
 		}
-		return targetToolId;
+		return targetToolIds;
 	}
 
+	/* (non-Javadoc)
+	 * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getTargetToolList()
+	 */
+	public String[] getTargetToolList() {
+		String IDs = getTargetToolIds();
+		String[] targetTools;
+		if (IDs != null) {
+			// Check for an empty string
+			if (IDs.length() == 0) {
+				targetTools = new String[0];
+			} else {
+				StringTokenizer tok = new StringTokenizer(IDs, ";"); //$NON-NLS-1$
+				List list = new ArrayList(tok.countTokens());
+				while (tok.hasMoreElements()) {
+					list.add(tok.nextToken());
+				}
+				String[] strArr = {""};	//$NON-NLS-1$
+				targetTools = (String[]) list.toArray(strArr);
+			}
+		} else {
+			targetTools = new String[0];
+		}
+		return targetTools;
+	}
+	
 	/* (non-Javadoc)
 	 * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getErrorParserIds(IConfiguration)
 	 */
@@ -975,12 +1000,12 @@ public class ToolChain extends BuildObject implements IToolChain {
 	}
 
 	/* (non-Javadoc)
-	 * @see org.eclipse.cdt.managedbuilder.core.IToolChain#setTargetTool()
+	 * @see org.eclipse.cdt.managedbuilder.core.IToolChain#setTargetToolIds()
 	 */
-	public void setTargetTool(String newId) {
-		if (targetToolId == null && newId == null) return;
-		if (targetToolId == null || newId == null || !newId.equals(targetToolId)) {
-			targetToolId = newId;
+	public void setTargetToolIds(String newIds) {
+		if (targetToolIds == null && newIds == null) return;
+		if (targetToolIds == null || newIds == null || !newIds.equals(targetToolIds)) {
+			targetToolIds = newIds;
 			isDirty = true;					
 		}
 	}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java
index bbbc29f49b0..bdbe2e49916 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java
@@ -1061,6 +1061,10 @@ public class ToolReference implements IToolReference {
 	public void setCustomBuildStep(boolean customBuildStep) {
 	}
 
+	public IOption getOptionBySuperClassId(String id) {
+		return null;
+	}
+
 	/*
 	 * The following methods are added to allow the converter from ToolReference -> Tool
 	 * to retrieve the actual value of attributes.  These routines do not go to the
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java
index 2d8175b8dbd..e6147f0de67 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java
@@ -240,11 +240,13 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 
 	private static final String OBJS_MACRO = "OBJS";	//$NON-NLS-1$
 	private static final String DEPS_MACRO = "DEPS";	//$NON-NLS-1$
+	private static final String MACRO_ADDITION_ADDPREFIX_HEADER = "${addprefix ";	//$NON-NLS-1$
 	private static final String MACRO_ADDITION_ADDPREFIX_SUFFIX = "," + WHITESPACE + LINEBREAK;	//$NON-NLS-1$
 	private static final String MACRO_ADDITION_PREFIX_SUFFIX = "+=" + WHITESPACE + LINEBREAK;	//$NON-NLS-1$
 	private static final String PREBUILD = "pre-build"; //$NON-NLS-1$ 
 	private static final String MAINBUILD = "main-build"; //$NON-NLS-1$ 
 	private static final String POSTBUILD = "post-build"; //$NON-NLS-1$ 
+	private static final String SECONDARY_OUTPUTS = "secondary-outputs"; //$NON-NLS-1$ 
 	
 	// Local variables needed by generator
 	private String buildTargetName;
@@ -1144,6 +1146,13 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 		if (buildTargetExt.length() > 0) {
 			buffer.append(DOT + buildTargetExt);
 		}
+		
+		// Add the Secondary Outputs to the all target, if any
+		IOutputType[] secondaryOutputs = config.getToolChain().getSecondaryOutputs();
+		if (secondaryOutputs.length > 0) {
+			buffer.append(WHITESPACE + SECONDARY_OUTPUTS);
+		}
+
 		buffer.append(NEWLINE + NEWLINE);
 
 		/*
@@ -1218,6 +1227,17 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 			buffer.append(TAB + DASH + AT + ECHO + WHITESPACE + SINGLE_QUOTE
 					+ WHITESPACE + SINGLE_QUOTE + NEWLINE + NEWLINE);
 		} 
+
+		// Add the Secondary Outputs target, if needed
+		if (secondaryOutputs.length > 0) {
+			buffer.append(SECONDARY_OUTPUTS + COLON);
+			Vector outs2 = calculateSecondaryOutputs(secondaryOutputs);
+			for (int i=0; i<outs2.size(); i++) {
+				buffer.append(WHITESPACE + (String)outs2.get(i));
+			}
+			buffer.append(NEWLINE + NEWLINE); 
+		}
+
 		// Add all the needed dummy and phony targets
 		buffer.append(".PHONY: all clean dependents" + NEWLINE); //$NON-NLS-1$
 		buffer.append(".SECONDARY:"); //$NON-NLS-1$
@@ -1340,14 +1360,23 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 		Vector inputs = new Vector();
 		Vector dependencies = new Vector();
 		Vector outputs = new Vector();
-		Vector enumeratedOutputs = new Vector();
+		Vector enumeratedPrimaryOutputs = new Vector();
+		Vector enumeratedSecondaryOutputs = new Vector();
 		Vector outputVariables = new Vector();
 		String outputPrefix = EMPTY_STRING;
-		if (!getToolInputsOutputs(tool, inputs, dependencies, outputs, enumeratedOutputs, outputVariables, 
-				bTargetTool, managedProjectOutputs)) {
+
+		if (!getToolInputsOutputs(tool, inputs, dependencies, outputs, 
+				enumeratedPrimaryOutputs, enumeratedSecondaryOutputs,
+				outputVariables, bTargetTool, managedProjectOutputs)) {
 			return false;
 		}
 
+		//  If we have no primary output, make all of the secondary outputs the primary output
+		if (enumeratedPrimaryOutputs.size() == 0) {
+			enumeratedPrimaryOutputs = enumeratedSecondaryOutputs;
+			enumeratedSecondaryOutputs.clear();
+		}
+		
 		//  Add the output variables for this tool to our list
 		outputVarsAdditionsList.addAll(outputVariables);
 		
@@ -1355,20 +1384,20 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 		String buildRule = EMPTY_STRING;
 		String outflag = tool.getOutputFlag();
 		
-		Iterator iter = enumeratedOutputs.listIterator();
+		String primaryOutputs = EMPTY_STRING;
 		boolean first = true;
-		while(iter.hasNext()) {
-			String output = (String)iter.next();
-			if (!first) buildRule += WHITESPACE;
+		for (int i=0; i<enumeratedPrimaryOutputs.size(); i++) {
+			String output = (String)enumeratedPrimaryOutputs.get(i);
+			if (!first) primaryOutputs += WHITESPACE;
 			first = false;
-			buildRule += output;
+			primaryOutputs += output;
 		}
-		buildRule += (COLON + WHITESPACE);
-		iter = inputs.listIterator();
+
+		buildRule += (primaryOutputs + COLON + WHITESPACE);
+		
 		first = true;
-		iter = dependencies.listIterator();
-		while(iter.hasNext()) {
-			String input = (String)iter.next();
+		for (int i=0; i<dependencies.size(); i++) {
+			String input = (String)dependencies.get(i);
 			if (!first) buildRule += WHITESPACE;
 			first = false;
 			buildRule += input;
@@ -1398,7 +1427,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 		String[] cmdInputs = (String[])inputs.toArray(new String[inputs.size()]);
 		IManagedCommandLineGenerator gen = tool.getCommandLineGenerator();
 		IManagedCommandLineInfo cmdLInfo = gen.generateCommandLineInfo( tool, tool.getToolCommand(), 
-				flags, outflag, outputPrefix, OUT_MACRO, cmdInputs, tool.getCommandLinePattern() );
+				flags, outflag, outputPrefix, primaryOutputs, cmdInputs, tool.getCommandLinePattern() );
 		// The command to build
 		String buildCmd = null;
 		if( cmdLInfo == null ) {
@@ -1409,7 +1438,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 				// TODO report error
 				toolFlags = EMPTY_STRING;
 			}
-			buildCmd = tool.getToolCommand() + WHITESPACE + toolFlags + WHITESPACE + outflag + WHITESPACE + outputPrefix + OUT_MACRO + WHITESPACE + IN_MACRO;
+			buildCmd = tool.getToolCommand() + WHITESPACE + toolFlags + WHITESPACE + outflag + WHITESPACE + outputPrefix + primaryOutputs + WHITESPACE + IN_MACRO;
 		}
 		else buildCmd = cmdLInfo.getCommandLine();
 		buffer.append(TAB + AT + ECHO + WHITESPACE + buildCmd + NEWLINE);
@@ -1426,6 +1455,17 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 			buffer.append(TAB + AT + ECHO + WHITESPACE + SINGLE_QUOTE + MESSAGE_FINISH_FILE + WHITESPACE + OUT_MACRO + SINGLE_QUOTE + NEWLINE);
 		}
 		buffer.append(TAB + AT + ECHO + WHITESPACE + SINGLE_QUOTE + WHITESPACE + SINGLE_QUOTE + NEWLINE + NEWLINE);
+		
+		// If we have secondary outputs, output dependency rules without commands
+		if (enumeratedSecondaryOutputs.size() > 0) {
+			String primaryOutput = (String)enumeratedPrimaryOutputs.get(0);
+			for (int i=0; i<enumeratedSecondaryOutputs.size(); i++) {
+				String output = (String)enumeratedSecondaryOutputs.get(0);
+				buffer.append(output + COLON + WHITESPACE + primaryOutput + NEWLINE);
+			}
+			buffer.append(NEWLINE);
+		}
+				
 		return true;
 	}
 
@@ -1465,8 +1505,9 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 	}
 
 	protected boolean getToolInputsOutputs(ITool tool, 
-			Vector inputs, Vector dependencies, Vector outputs, Vector enumeratedOutputs, Vector outputVariables,
-			boolean bTargetTool, Vector managedProjectOutputs) {
+			Vector inputs, Vector dependencies, Vector outputs, 
+			Vector enumeratedPrimaryOutputs, Vector enumeratedSecondaryOutputs, 
+			Vector outputVariables,	boolean bTargetTool, Vector managedProjectOutputs) {
 		
 		//  Get the information regarding the tool's inputs and outputs from the objects
 		//  created by calculateToolInputsOutputs
@@ -1482,7 +1523,8 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 		//  Populate the output Vectors
 		inputs.addAll(toolInfo.getCommandInputs());
 		outputs.addAll(toolInfo.getCommandOutputs());
-		enumeratedOutputs.addAll(toolInfo.getEnumeratedOutputs());
+		enumeratedPrimaryOutputs.addAll(toolInfo.getEnumeratedPrimaryOutputs());
+		enumeratedSecondaryOutputs.addAll(toolInfo.getEnumeratedSecondaryOutputs());
 		outputVariables.addAll(toolInfo.getOutputVariables());
 		dependencies.addAll(toolInfo.getCommandDependencies());
 		
@@ -1494,6 +1536,37 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 		}
 		return true;
 	}
+
+	/* (non-Javadoc)
+	 * @param fileHandle
+	 * @throws CoreException
+	 */
+	protected Vector calculateSecondaryOutputs(IOutputType[] secondaryOutputs) {
+		Vector buildVars = new Vector();
+		for (int i=0; i<buildTools.length; i++) {
+			// Add the specified output build variables
+			IOutputType[] outTypes = buildTools[i].getOutputTypes();
+			if (outTypes != null && outTypes.length > 0) {
+				for (int j=0; j<outTypes.length; j++) {
+					IOutputType outType = outTypes[j];
+					//  Is this one of the secondary outputs?
+					//  Look for an outputType with this ID, or one with a superclass with this id
+					thisType: 
+					for (int k = 0; k < secondaryOutputs.length; k++) {
+						IOutputType matchType = outType;
+						do {
+							if (matchType.getId().equals(secondaryOutputs[k].getId())) {
+								buildVars.add(outType.getBuildVariable());
+								break thisType;
+							}		
+							matchType = matchType.getSuperClass();
+						} while (matchType != null);
+					}
+				}
+			}
+		}
+		return buildVars;
+	}
 	
 	
 	/*************************************************************************
@@ -1566,16 +1639,16 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 		while (iterator.hasNext()) {
 			Map.Entry entry = (Map.Entry)iterator.next();
 			String macroName = (String)entry.getKey();
-			addMacroAdditionPrefix(buildVarToRuleStringMap, macroName, "$(ROOT)/" + relativePath, true);	//$NON-NLS-1$
+			addMacroAdditionPrefix(buildVarToRuleStringMap, macroName, null, false);
 		}
 		iterator = buildOutVars.entrySet().iterator();
 		while (iterator.hasNext()) {
 			Map.Entry entry = (Map.Entry)iterator.next();
 			String macroName = (String)entry.getKey();
-			addMacroAdditionPrefix(buildVarToRuleStringMap, macroName, "./" + relativePath, true);
+			addMacroAdditionPrefix(buildVarToRuleStringMap, macroName, "./" + relativePath, true);	  //$NON-NLS-1$
 		}
 		// Create an entry for the DEPS macro
-		addMacroAdditionPrefix(buildVarToRuleStringMap, DEPS_MACRO, "./" + relativePath, true);
+		addMacroAdditionPrefix(buildVarToRuleStringMap, DEPS_MACRO, "./" + relativePath, true);	  //$NON-NLS-1$
  		
  		// String buffers
  		StringBuffer buffer = new StringBuffer();	// Return buffer
@@ -1601,7 +1674,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 		}
 							
 		// Write out the macro addition entries to the buffer
-		buffer.append(writeAdditionMacros(buildVarToRuleStringMap, true));
+		buffer.append(writeAdditionMacros(buildVarToRuleStringMap));
 		return buffer.append(ruleBuffer + NEWLINE);
 	}
 
@@ -1642,7 +1715,20 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 					continue;
 				}
 				//  Add the resource name to the makefile line that adds resources to the build variable
-				addMacroAdditionFile(buildVarToRuleStringMap, varName, resource.getName());
+				String srcName;
+				if (generatedSource) { 
+					srcName = resource.getName();
+				} else {
+					String resourceLocation = resource.getLocation().toString();
+					String projectLocation = project.getLocation().toString();
+					//if (resource.isLinked()) {   NOTE: we don't use this since children of linked resources return false
+					if(!resourceLocation.startsWith(projectLocation)) {
+						srcName = resourceLocation;
+					} else {
+						srcName = "$(ROOT)/" + relativePath + resource.getName();     //$NON-NLS-1$
+					}
+				}
+				addMacroAdditionFile(buildVarToRuleStringMap, varName, srcName); 
 				
 				//  Generate the rule to build this source file
 				IInputType inputType = tool.getInputType(ext);
@@ -1670,7 +1756,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 						// For support of pre-CDT 3.0 integrations.
 						buildVariable = OBJS_MACRO;   //$NON-NLS-1$
 					}
-					Vector generatedOutputs = calculateOutputsForSource(tool, relativePath, resource);
+					Vector generatedOutputs = calculateOutputsForSource(tool, relativePath, resource, false);
 					for (int k=0; k<generatedOutputs.size(); k++) {
 						//  TODO - this will only work for outputs generated below the build output directory?
 						//         try an option that generates an output outside of the project
@@ -1724,13 +1810,14 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 		String outflag = null;
 		String outputPrefix = null;
 		IManagedDependencyGenerator depGen = info.getDependencyGenerator(inputExtension);
-		boolean doDepGen = (depGen != null && depGen.getCalculatorType() == IManagedDependencyGenerator.TYPE_COMMAND); 
+		boolean doDepGen = (depGen != null && depGen.getCalculatorType() == IManagedDependencyGenerator.TYPE_COMMAND);
+		boolean patternRule = false;
 
 		// If the tool creates a dependency file, add it to the list
 		if (doDepGen) {
 			String depFile =  relativePath + resourceName + DOT + DEP_EXT;
 			getDependencyMakefiles().add(depFile);
-			generatedDepFile.append(depFile);
+			generatedDepFile.append(resourceName + DOT + DEP_EXT);
 		}
 	
 		/*
@@ -1755,31 +1842,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 		//	We need to check whether we have any resource specific build information.
 		IResourceConfiguration resConfig = null;
 		if( config != null ) resConfig = config.getResourceConfiguration(resource.getFullPath().toString());
-		
-		// figure out path to use to resource
-		if(!resourceLocation.toString().startsWith(projectLocation)) {
-			// it IS linked, so use the actual location
-			isItLinked = true;
-			resourcePath = resourceLocation.toString();
-			// Need a hardcoded rule, not a pattern rule, as a linked file
-			// can reside in any path
-			buildRule = relativePath + resourceName + OptDotExt + COLON + WHITESPACE + resourcePath;
-		} else {
-			// use the relative path (not really needed to store per se but in the future someone may want this)
-			resourcePath = relativePath; 
-			
-			// The rule and command to add to the makefile
-			String home = (generatedSource)? DOT : ROOT;
-			if( resConfig != null) {
-				buildRule = resourcePath + resourceName + OptDotExt + COLON + WHITESPACE + home + SEPARATOR + resourcePath + resourceName + DOT + inputExtension;
-			} else {
-				buildRule = relativePath + WILDCARD + OptDotExt + COLON + WHITESPACE + home + SEPARATOR + resourcePath + WILDCARD + DOT + inputExtension;
-			}
-		} // end fix for PR 70491
 
-		// Add any additional dependencies specified:
-		//  1. in additionalInput elements
-		//  2. from a dependency calculator not of TYPE_COMMAND
 		ITool tool;
 		if( resConfig != null) {
 			ITool[] tools = resConfig.getTools();
@@ -1787,17 +1850,55 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 		} else {
 			tool = info.getToolFromInputExtension(inputExtension);
 		}
-		// Get any additional dependencies specified for the tool
+		
+		// figure out path to use to resource
+		String primaryOutputName = EMPTY_STRING;
+		String primaryDependencyName = EMPTY_STRING;
+		//if (resource.isLinked()) {   NOTE: we don't use this since children of linked resources return false
+		if(!resourceLocation.toString().startsWith(projectLocation)) {
+			// it IS linked, so use the actual location
+			isItLinked = true;
+			resourcePath = resourceLocation.toString();
+			// Need a hardcoded rule, not a pattern rule, as a linked file
+			// can reside in any path
+			primaryOutputName = relativePath + resourceName + OptDotExt;
+			primaryDependencyName = resourcePath;
+		} else {
+			// use the relative path (not really needed to store per se but in the future someone may want this)
+			resourcePath = relativePath; 
+			
+			// The rule and command to add to the makefile
+			String home = (generatedSource)? DOT : ROOT;
+			if( resConfig != null) {
+				// Need a hardcoded rule, not a pattern rule
+				primaryOutputName = resourcePath + resourceName + OptDotExt;
+				primaryDependencyName = home + SEPARATOR + resourcePath + resourceName + DOT + inputExtension;
+			} else {
+				primaryOutputName = relativePath + WILDCARD + OptDotExt;
+				primaryDependencyName = home + SEPARATOR + resourcePath + WILDCARD + DOT + inputExtension;
+				patternRule = true;
+			}
+		} // end fix for PR 70491
+
+		buildRule = primaryOutputName;
+
+		// If this is a pattern rule, add any additional outputs here
+		String otherPrimaryOutputs = EMPTY_STRING;
+		if (patternRule) {
+			Vector addlOutputs = calculateOutputsForSource(tool, relativePath, resource, true);
+			for (int i=0; i<addlOutputs.size(); i++) {
+				otherPrimaryOutputs += WHITESPACE + ((IPath)addlOutputs.get(i)).toString();
+			}
+		}
+		
+		buildRule += otherPrimaryOutputs + COLON + WHITESPACE + primaryDependencyName;
+
+		// Other additional inputs
+		// Get any additional dependencies specified for the tool in other InputType elements and AdditionalInput elements
 		IPath[] addlDepPaths = tool.getAdditionalDependencies();
 		for (int i=0; i<addlDepPaths.length; i++) {
 			buildRule += WHITESPACE + addlDepPaths[i].toString();
 		}
-		if (depGen != null && depGen.getCalculatorType() != IManagedDependencyGenerator.TYPE_COMMAND) { 
-			Vector addlDepsVector = calculateDependenciesForSource(depGen, tool, relativePath, resource);
-			for (int i=0; i<addlDepsVector.size(); i++) {
-				buildRule += WHITESPACE + addlDepsVector.get(i).toString();
-			}
-		}
 				
 		// No duplicates in a makefile
 		if (getRuleList().contains(buildRule)) {
@@ -1824,7 +1925,8 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 				// TODO add some routines to catch this
 				flags = EMPTY_STRING_ARRAY;
 			}
-			// Get any additional dependencies specified for the tool
+			// Other additional inputs
+			// Get any additional dependencies specified for the tool in other InputType elements and AdditionalInput elements
 			IPath[] addlInputPaths = tool.getAdditionalResources();
 			for (int i=0; i<addlInputPaths.length; i++) {
 				inputs.add(addlDepPaths[i].toString());
@@ -1832,7 +1934,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 			// Call the command line generator
 			IManagedCommandLineGenerator cmdLGen = tool.getCommandLineGenerator();
 			cmdLInfo = cmdLGen.generateCommandLineInfo( tool, cmd, flags, outflag, outputPrefix,
-					OUT_MACRO, (String[])inputs.toArray(new String[inputs.size()]), tool.getCommandLinePattern() );
+					OUT_MACRO + otherPrimaryOutputs, (String[])inputs.toArray(new String[inputs.size()]), tool.getCommandLinePattern() );
 	
 			String buildCmd = cmdLInfo.getCommandLine();
 			buffer.append(TAB + AT + ECHO + WHITESPACE + buildCmd + NEWLINE);
@@ -1847,17 +1949,19 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 			outflag = info.getOutputFlag(outputExtension);
 			outputPrefix = info.getOutputPrefix(outputExtension);
 			String[] flags = buildFlags.split( "\\s" ); //$NON-NLS-1$
-			// Get any additional dependencies specified for the tool
+			// Other additional inputs
+			// Get any additional dependencies specified for the tool in other InputType elements and AdditionalInput elements
 			IPath[] addlInputPaths = tool.getAdditionalResources();
 			for (int i=0; i<addlInputPaths.length; i++) {
 				inputs.add(addlDepPaths[i].toString());
 			}
 			// Call the command line generator
 			cmdLInfo = info.generateCommandLineInfo( inputExtension, flags, outflag, outputPrefix, 
-					OUT_MACRO, (String[])inputs.toArray(new String[inputs.size()]) );
+					OUT_MACRO + otherPrimaryOutputs, (String[])inputs.toArray(new String[inputs.size()]) );
 			// The command to build
 			String buildCmd = null;
-			if( cmdLInfo == null ) buildCmd = cmd + WHITESPACE + buildFlags + WHITESPACE + outflag + WHITESPACE + outputPrefix + OUT_MACRO + WHITESPACE + IN_MACRO;
+			if( cmdLInfo == null ) buildCmd = cmd + WHITESPACE + buildFlags + WHITESPACE + 
+					outflag + WHITESPACE + outputPrefix + OUT_MACRO + otherPrimaryOutputs + WHITESPACE + IN_MACRO;
 			else buildCmd = cmdLInfo.getCommandLine();
 			buffer.append(TAB + AT + ECHO + WHITESPACE + buildCmd + NEWLINE);
 			buffer.append(TAB + AT + buildCmd);
@@ -1875,6 +1979,30 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 		buffer.append(NEWLINE);
 		buffer.append(TAB + AT + ECHO + WHITESPACE + SINGLE_QUOTE + MESSAGE_FINISH_FILE + WHITESPACE + IN_MACRO + SINGLE_QUOTE + NEWLINE);
 		buffer.append(TAB + AT + ECHO + WHITESPACE + SINGLE_QUOTE + WHITESPACE + SINGLE_QUOTE + NEWLINE + NEWLINE);
+
+
+		//  Add separate dependency lines per file if necessary
+		boolean addedDepLines = false; 
+		if (depGen != null && depGen.getCalculatorType() != IManagedDependencyGenerator.TYPE_COMMAND) { 
+			Vector addlDepsVector = calculateDependenciesForSource(depGen, tool, relativePath, resource);
+			for (int i=0; i<addlDepsVector.size(); i++) {
+				buffer.append(primaryOutputName + COLON + WHITESPACE + addlDepsVector.get(i).toString() + NEWLINE);
+				addedDepLines = true;
+			}
+		}
+
+		// If this is NOT a pattern rule, add any additional outputs here using dependency lines
+		if (!patternRule) {
+			Vector addlOutputs = calculateOutputsForSource(tool, relativePath, resource, true);
+			for (int i=0; i<addlOutputs.size(); i++) {
+				buffer.append(((IPath)addlOutputs.get(i)).toString() + COLON + WHITESPACE + primaryOutputName + NEWLINE);
+				addedDepLines = true;
+			}
+		}
+		if (addedDepLines) {
+			buffer.append(NEWLINE);			
+		}
+
 	}
 
 	/* (non-Javadoc)
@@ -1895,7 +2023,8 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 	 *  @param resource
 	 *  @return Vector of IPaths that are relative to the build directory 
 	 */  
-	protected Vector calculateOutputsForSource(ITool tool, String relativePath, IResource resource) {
+	protected Vector calculateOutputsForSource(ITool tool, 
+			String relativePath, IResource resource, boolean ignorePrimary) {
 		Vector outputs = new Vector();
 		String inExt = resource.getFileExtension();
 		String outExt = tool.getOutputExtension(inExt);
@@ -1904,13 +2033,14 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 		if (outTypes != null && outTypes.length > 0) {
 			for (int i=0; i<outTypes.length; i++) {
 				IOutputType type = outTypes[i];
+				boolean primaryOutput = (type == tool.getPrimaryOutputType());
+				if (primaryOutput && ignorePrimary) continue;
 				String outputPrefix = type.getOutputPrefix();
 				String variable = type.getBuildVariable();
 				boolean multOfType = type.getMultipleOfType();
-				boolean primaryOutput = (type == tool.getPrimaryOutputType());
-				IOption option = getOption(tool, type.getOptionId());
+				IOption option = tool.getOptionBySuperClassId(type.getOptionId());
 				IManagedOutputNameProvider nameProvider = type.getNameProvider();
-				String outputNames = type.getOutputNames();
+				String[] outputNames = type.getOutputNames();
 
 				//  1.  If the tool is the build target and this is the primary output, 
 				//      use artifact name & extension
@@ -1950,9 +2080,8 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 				} else
 				//  4.  If outputNames is specified, use it
 				if (outputNames != null) {
-					String[] pathTokens = outputNames.split(";"); //$NON-NLS-1$
-					for (int j = 0; j < pathTokens.length; j++) {
-						outputs.add(Path.fromOSString(pathTokens[j]));
+					for (int j = 0; j < outputNames.length; j++) {
+						outputs.add(Path.fromOSString(outputNames[j]));
 					}
 				} else {
 				//  4.  Use the name pattern to generate a transformation macro 
@@ -1990,14 +2119,16 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 			//     In this case, the output file name is the input file name with
 			//     the output extension.
 
-			IPath outPath = resource.getFullPath().removeFileExtension();
-			String outPrefix = tool.getOutputPrefix();
-			if (outPrefix.length() > 0) {
-				String outName = outPrefix + outPath.lastSegment();
-				outPath = outPath.removeLastSegments(1).append(outName);
+			if (!ignorePrimary) {
+				IPath outPath = Path.fromOSString(resource.getFullPath().removeFileExtension().lastSegment());
+				String outPrefix = tool.getOutputPrefix();
+				if (outPrefix.length() > 0) {
+					String outName = outPrefix + outPath.lastSegment();
+					outPath = outPath.removeLastSegments(1).append(outName);
+				}
+				outPath = outPath.addFileExtension(outExt);
+				outputs.add(outPath);
 			}
-			outPath = outPath.addFileExtension(outExt);
-			outputs.add(outPath);
 		}
 		
 		return outputs;
@@ -2143,9 +2274,9 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 	protected void addMacroAdditionPrefix(HashMap map, String macroName, String relativePath, boolean addPrefix) {
 		// there is no entry in the map, so create a buffer for this macro
 		StringBuffer tempBuffer = new StringBuffer();
-		tempBuffer.append(macroName + WHITESPACE + MACRO_ADDITION_PREFIX_SUFFIX);	//$NON-NLS-1$
+		tempBuffer.append(macroName + WHITESPACE + MACRO_ADDITION_PREFIX_SUFFIX);
 		if (addPrefix) {
-			tempBuffer.append("${addprefix " + relativePath + MACRO_ADDITION_ADDPREFIX_SUFFIX);	//$NON-NLS-1$ //$NON-NLS-2$
+			tempBuffer.append(MACRO_ADDITION_ADDPREFIX_HEADER + relativePath + MACRO_ADDITION_ADDPREFIX_SUFFIX);
 		}
 		
 		// have to store the buffer in String form as StringBuffer is not a sublcass of Object
@@ -2186,7 +2317,7 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 	/* (non-Javadoc)
 	 * Write all macro addition entries in a map to the buffer
 	 */
-	protected StringBuffer writeAdditionMacros(HashMap map, boolean addPrefix) {
+	protected StringBuffer writeAdditionMacros(HashMap map) {
 		StringBuffer buffer = new StringBuffer();
 		// Add the comment
 		buffer.append(COMMENT_SYMBOL + WHITESPACE + ManagedMakeMessages.getResourceString(MOD_VARS) + NEWLINE);
@@ -2199,12 +2330,17 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 			// Check if we added any files to the rule
 			// Currently, we do this by comparing the end of the rule buffer to MACRO_ADDITION_PREFIX_SUFFIX
 			if (!(macroString.endsWith(MACRO_ADDITION_PREFIX_SUFFIX)) && 
-					!(macroString.endsWith(MACRO_ADDITION_ADDPREFIX_SUFFIX))) {
+				!(macroString.endsWith(MACRO_ADDITION_ADDPREFIX_SUFFIX))) {
 				StringBuffer currentBuffer = new StringBuffer();
-				currentBuffer.append( macroString);
 				// Close off the rule
-				if (addPrefix) {
-					currentBuffer.append("}"); //$NON-NLS-1$
+				if (macroString.indexOf(MACRO_ADDITION_ADDPREFIX_HEADER) >= 0) {
+					currentBuffer.append(macroString + "}" + NEWLINE); //$NON-NLS-1$
+				} else {
+					// Remove the final "/"
+					if (macroString.endsWith(LINEBREAK)) {
+						macroString = macroString.substring(0, (macroString.length() - 2)) + NEWLINE;
+					}
+					currentBuffer.append(macroString);
 				}
 				currentBuffer.append(NEWLINE);
  			
@@ -2404,28 +2540,6 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator {
 		}
 		return ruleList;
 	}
-
-	/* (non-Javadoc)
-	 * Returns the option that matches the option ID in this tool
-	 */
-	public IOption getOption(ITool tool, String optionId) {
-		if (optionId == null) return null;
-		
-		//  Look for an option with this ID, or an option with a superclass with this id
-		IOption[] options = tool.getOptions();
-		for (int i = 0; i < options.length; i++) {
-			IOption targetOption = options[i];
-			IOption option = targetOption;
-			do {
-				if (optionId.equals(option.getId())) {
-					return targetOption;
-				}		
-				option = option.getSuperClass();
-			} while (option != null);
-		}
-		
-		return null;
-	}
 	
 	/*************************************************************************
 	 *   R E S O U R C E   V I S I T O R   M E T H O D S 
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/IManagedBuildGnuToolInfo.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/IManagedBuildGnuToolInfo.java
index c883f6bf50b..654b263c23c 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/IManagedBuildGnuToolInfo.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/IManagedBuildGnuToolInfo.java
@@ -59,11 +59,18 @@ public interface IManagedBuildGnuToolInfo {
 	public Vector getCommandOutputs();
 	
 	/**
-	 * Returns the raw list of tool's output file names.
+	 * Returns the raw list of tool's primary output file names.
 	 * 
 	 *  @return Vector
 	 */
-	public Vector getEnumeratedOutputs();
+	public Vector getEnumeratedPrimaryOutputs();
+	
+	/**
+	 * Returns the raw list of tool's secondary output file names.
+	 * 
+	 *  @return Vector
+	 */
+	public Vector getEnumeratedSecondaryOutputs();
 	
 	/**
 	 * Returns the raw list of tool's output variable names.
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/ManagedBuildGnuToolInfo.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/ManagedBuildGnuToolInfo.java
index eb5de96fcde..71f933b9831 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/ManagedBuildGnuToolInfo.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/ManagedBuildGnuToolInfo.java
@@ -61,7 +61,8 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
 	private Vector commandInputs = new Vector();
 	private Vector enumeratedInputs = new Vector();
 	private Vector commandOutputs = new Vector();
-	private Vector enumeratedOutputs = new Vector();
+	private Vector enumeratedPrimaryOutputs = new Vector();
+	private Vector enumeratedSecondaryOutputs = new Vector();
 	private Vector outputVariables = new Vector();
 	private Vector commandDependencies = new Vector();
 	//private Vector enumeratedDependencies = new Vector();
@@ -103,8 +104,12 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
 		return commandOutputs;
 	}
 
-	public Vector getEnumeratedOutputs() {
-		return enumeratedOutputs;
+	public Vector getEnumeratedPrimaryOutputs() {
+		return enumeratedPrimaryOutputs;
+	}
+
+	public Vector getEnumeratedSecondaryOutputs() {
+		return enumeratedSecondaryOutputs;
 	}
 
 	public Vector getOutputVariables() {
@@ -138,61 +143,110 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
 	public boolean calculateInputs(GnuMakefileGenerator makeGen, IResource[] projResources, boolean lastChance) {
 		// Get the inputs for this tool invocation
 		// Note that command inputs that are also dependencies are also added to the command dependencies list
+		
+		/* The priorities for determining the names of the inputs of a tool are:
+		 *  1.  If an option is specified, use the value of the option.
+		 *  2.  If a build variable is specified, use the files that have been added to the build variable as
+		 *      the output(s) of other build steps.
+		 *  3.  Use the file extensions and the resources in the project 
+		 */
 		boolean done = true;
-		Vector myCommandInputs = new Vector();
-		Vector myCommandDependencies = new Vector();
-		Vector myEnumeratedInputs = new Vector();
+		Vector myCommandInputs = new Vector();			// Inputs for the tool command line
+		Vector myCommandDependencies = new Vector();	// Dependencies for the make rule
+		Vector myEnumeratedInputs = new Vector();		// Complete list of individual inputs
 
 		IInputType[] inTypes = tool.getInputTypes();
 		if (inTypes != null && inTypes.length > 0) {
 			for (int i=0; i<inTypes.length; i++) {
 				IInputType type = inTypes[i];
 				String variable = type.getBuildVariable();
+				boolean primaryInput = type.getPrimaryInput();
 				boolean useFileExts = false;
-				if (variable.length() > 0) {
-					String cmdVariable = variable = "$(" + variable + ")";			//$NON-NLS-1$	//$NON-NLS-2$
-					myCommandInputs.add(cmdVariable);
-					myCommandDependencies.add(cmdVariable);
-					// If there is an output variable with the same name, get
-					// the files associated with it.
-					List outMacroList = makeGen.getBuildVariableList(variable, true);
-					if (outMacroList != null) {
-						myEnumeratedInputs.addAll(outMacroList);
-					} else {
-						// If "last chance", then calculate using file extensions below
-						if (lastChance) {
-							useFileExts = true;
+				IOption option = tool.getOptionBySuperClassId(type.getOptionId());
+				
+				//  Option?
+				if (option != null) {
+					try {
+						List inputs = new ArrayList();
+						int optType = option.getValueType();
+						if (optType == IOption.STRING) {
+							inputs.add(option.getStringValue());
+						} else if (
+								optType == IOption.STRING_LIST ||
+								optType == IOption.LIBRARIES ||
+								optType == IOption.OBJECTS) {
+							inputs = (List)option.getValue();
+						}
+						//myCommandInputs.add(inputs);
+						if (primaryInput) {
+							myCommandDependencies.add(0, inputs);
 						} else {
-							done = false;
-							break;
+							myCommandDependencies.add(inputs);
+						}
+						//myEnumeratedInputs.add(inputs);
+					} catch( BuildException ex ) {
+					}
+					
+				} else {
+				
+					//  Build Variable?
+					if (variable.length() > 0) {
+						String cmdVariable = variable = "$(" + variable + ")";			//$NON-NLS-1$	//$NON-NLS-2$
+						myCommandInputs.add(cmdVariable);
+						if (primaryInput) {
+							myCommandDependencies.add(0, cmdVariable);
+						} else {
+							myCommandDependencies.add(cmdVariable);
+						}
+						// If there is an output variable with the same name, get
+						// the files associated with it.
+						List outMacroList = makeGen.getBuildVariableList(variable, true);
+						if (outMacroList != null) {
+							myEnumeratedInputs.addAll(outMacroList);
+						} else {
+							// If "last chance", then calculate using file extensions below
+							if (lastChance) {
+								useFileExts = true;
+							} else {
+								done = false;
+								break;
+							}
 						}
 					}
-				} 
-				if (variable.length() == 0 || useFileExts) {
-					if (type.getMultipleOfType()) {
-						// Calculate myEnumeratedInputs using the file extensions and the resources in the project
-						String[] exts = tool.getAllInputExtensions();
-						if (projResources != null) {
-							for (int j=0; j<projResources.length; j++) {
-								if (projResources[i].getType() == IResource.FILE) {
-									String fileExt = projResources[i].getFileExtension();
-									for (int k=0; k<exts.length; k++) {
-										if (fileExt.equals(exts[k])) {
-											//  TODO - is project relative correct?
-											if (!useFileExts) {
-												myCommandInputs.add(projResources[i].getProjectRelativePath());
+					
+					//  Use file extensions
+					if (variable.length() == 0 || useFileExts) {
+						if (type.getMultipleOfType()) {
+							// Calculate myEnumeratedInputs using the file extensions and the resources in the project
+							String[] exts = tool.getAllInputExtensions();
+							if (projResources != null) {
+								for (int j=0; j<projResources.length; j++) {
+									if (projResources[i].getType() == IResource.FILE) {
+										String fileExt = projResources[i].getFileExtension();
+										for (int k=0; k<exts.length; k++) {
+											if (fileExt.equals(exts[k])) {
+												//  TODO - is project relative correct?
+												if (!useFileExts) {
+													myCommandInputs.add(projResources[i].getProjectRelativePath());
+													if (primaryInput) {
+														myCommandDependencies.add(0, projResources[i].getProjectRelativePath());
+													} else {
+														myCommandDependencies.add(projResources[i].getProjectRelativePath());
+													}
+												}
+												myEnumeratedInputs.add(projResources[i].getProjectRelativePath());
+												break;
 											}
-											myEnumeratedInputs.add(projResources[i].getProjectRelativePath());
-											break;
 										}
 									}
 								}
 							}
+						} else {
+							// Rule will be generated by addRuleForSource
 						}
-					} else {
-						// Rule will be generated by addRuleForSource
 					}
 				}
+				
 				// Get any additional inputs specified in the manifest file or the project file
 				IAdditionalInput[] addlInputs = type.getAdditionalInputs();
 				if (addlInputs != null) {
@@ -201,12 +255,11 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
 						int kind = addlInput.getKind();
 						if (kind == IAdditionalInput.KIND_ADDITIONAL_INPUT ||
 							kind == IAdditionalInput.KIND_ADDITIONAL_INPUT_DEPENDENCY) {
-							String paths = addlInput.getPaths();
+							String[] paths = addlInput.getPaths();
 							if (paths != null) {
-								String[] pathTokens = paths.split(";"); //$NON-NLS-1$
-								for (int k = 0; k < pathTokens.length; k++) {
-									myCommandInputs.add(pathTokens[k]);
-									myEnumeratedInputs.add(pathTokens[k]);
+								for (int k = 0; k < paths.length; k++) {
+									myCommandInputs.add(paths[k]);
+									myEnumeratedInputs.add(paths[k]);
 								}
 							}
 						}
@@ -233,7 +286,7 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
 		
 		if (done) {
 			commandInputs.addAll(myCommandInputs);
-			commandDependencies.addAll(myCommandDependencies);
+			commandDependencies.addAll(0, myCommandDependencies);
 			enumeratedInputs.addAll(myEnumeratedInputs);
 			inputsCalculated = true;
 			return true;
@@ -243,7 +296,7 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
 	}
 	
 	 /*
-	 * The priorities for determining the names of the ouputs of a tool are:
+	 * The priorities for determining the names of the outputs of a tool are:
 	 *  1.  If the tool is the build target and primary output, use artifact name & extension
 	 *  2.  If an option is specified, use the value of the option
 	 *  3.  If a nameProvider is specified, call it
@@ -251,12 +304,16 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
 	 *  5.  Use the name pattern to generate a transformation macro 
 	 *      so that the source names can be transformed into the target names 
 	 *      using the built-in string substitution functions of <code>make</code>.
+	 *      
+	 * NOTE: If an option is not specified and this is not the primary output type, the outputs
+	 *       from the type are not added to the command line     
 	 */  
 	public boolean calculateOutputs(GnuMakefileGenerator makeGen, HashSet handledInputExtensions, boolean lastChance) {
 
 		boolean done = true;
 		Vector myCommandOutputs = new Vector();
-		Vector myEnumeratedOutputs = new Vector();
+		Vector myEnumeratedPrimaryOutputs = new Vector();
+		Vector myEnumeratedSecondaryOutputs = new Vector();
 	    HashMap myOutputMacros = new HashMap();
 		//  The next two fields are used together
 		Vector myBuildVars = new Vector();
@@ -272,9 +329,9 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
 				String variable = type.getBuildVariable();
 				boolean multOfType = type.getMultipleOfType();
 				boolean primaryOutput = (type == tool.getPrimaryOutputType());
-				IOption option = makeGen.getOption(tool, type.getOptionId());
+				IOption option = tool.getOptionBySuperClassId(type.getOptionId());
 				IManagedOutputNameProvider nameProvider = type.getNameProvider();
-				String outputNames = type.getOutputNames();
+				String[] outputNames = type.getOutputNames();
 				
 				//  1.  If the tool is the build target and this is the primary output, 
 				//      use artifact name & extension
@@ -306,7 +363,7 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
 								}
 							}
 						}
-						myCommandOutputs.addAll(outputs);
+						//myCommandOutputs.addAll(outputs);
 						typeEnumeratedOutputs.addAll(outputs);
 						if (variable.length() > 0) {
 							if (myOutputMacros.containsKey(variable)) {
@@ -334,7 +391,9 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
 						}
 						outNames = nameProvider.getOutputNames(tool, inputPaths);
 						if (outNames != null) {
-							myCommandOutputs.addAll(Arrays.asList(outNames));
+							if (primaryOutput) {
+								myCommandOutputs.addAll(Arrays.asList(outNames));
+							}
 							typeEnumeratedOutputs.addAll(Arrays.asList(outNames));
 						}
 					}
@@ -350,10 +409,11 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
 				} else
 				//  4.  If outputNames is specified, use it
 				if (outputNames != null) {
-					String[] pathTokens = outputNames.split(";"); //$NON-NLS-1$
-					if (pathTokens.length > 0) {
-						List namesList = Arrays.asList(pathTokens);
-						myCommandOutputs.addAll(namesList);
+					if (outputNames.length > 0) {
+						List namesList = Arrays.asList(outputNames);
+						if (primaryOutput) {
+							myCommandOutputs.addAll(namesList);
+						}
 						typeEnumeratedOutputs.addAll(namesList);
 						if (variable.length() > 0) {
 							if (myOutputMacros.containsKey(variable)) {
@@ -405,7 +465,9 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
 								fileName = "default"; //$NON-NLS-1$
 							}
 							//  Replace the % with the file name
-							myCommandOutputs.add(namePattern.replaceAll("%", fileName)); //$NON-NLS-1$ 
+							if (primaryOutput) {
+								myCommandOutputs.add(namePattern.replaceAll("%", fileName)); //$NON-NLS-1$
+							}
 							typeEnumeratedOutputs.add(namePattern.replaceAll("%", fileName)); //$NON-NLS-1$
 							if (variable.length() > 0) {
 								List outputs = new ArrayList();
@@ -425,7 +487,11 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
 					myBuildVars.add(variable);
 					myBuildVarsValues.add(typeEnumeratedOutputs);
 				}
-				myEnumeratedOutputs.addAll(typeEnumeratedOutputs);
+				if (primaryOutput) {
+					myEnumeratedPrimaryOutputs.addAll(typeEnumeratedOutputs);
+				} else {
+					myEnumeratedSecondaryOutputs.addAll(typeEnumeratedOutputs);
+				}
 			}
 		} else {
 			if (bIsTargetTool) {
@@ -435,7 +501,7 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
 					outputName += (DOT + targetExt);
 				}
 				myCommandOutputs.add(outputName);
-				myEnumeratedOutputs.add(outputName);
+				myEnumeratedPrimaryOutputs.add(outputName);
 			} else {
 				// For support of pre-CDT 3.0 integrations.
 				// NOTE WELL:  This only supports the case of a single "target tool"
@@ -463,7 +529,8 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
 
 		if (done) {
 			commandOutputs.addAll(myCommandOutputs);
-			enumeratedOutputs.addAll(myEnumeratedOutputs);
+			enumeratedPrimaryOutputs.addAll(myEnumeratedPrimaryOutputs);
+			enumeratedSecondaryOutputs.addAll(myEnumeratedSecondaryOutputs);
 			outputVariables.addAll(myOutputMacros.keySet());
 			outputsCalculated = true;
 			for (int i=0; i<myBuildVars.size(); i++) {
@@ -548,11 +615,10 @@ public class ManagedBuildGnuToolInfo implements IManagedBuildGnuToolInfo {
 						int kind = addlInput.getKind();
 						if (kind == IAdditionalInput.KIND_ADDITIONAL_DEPENDENCY ||
 							kind == IAdditionalInput.KIND_ADDITIONAL_INPUT_DEPENDENCY) {
-							String paths = addlInput.getPaths();
+							String[] paths = addlInput.getPaths();
 							if (paths != null) {
-								String[] pathTokens = paths.split(";"); //$NON-NLS-1$
-								for (int k = 0; k < pathTokens.length; k++) {
-									myCommandDependencies.add(pathTokens[k]);
+								for (int k = 0; k < paths.length; k++) {
+									myCommandDependencies.add(paths[k]);
 									//myEnumeratedInputs.add(pathTokens[k]);
 								}
 							}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject21.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject21.java
new file mode 100644
index 00000000000..04da0a2d011
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProject21.java
@@ -0,0 +1,73 @@
+/**********************************************************************
+ * Copyright (c) 2005 Intel Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors: 
+ * Intel Corporation - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.cdt.managedbuilder.projectconverter;
+
+
+import java.io.File;
+
+import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.WorkspaceJob;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.ISchedulingRule;
+
+class UpdateManagedProject21 {
+	
+	/**
+	 * @param monitor the monitor to allow users to cancel the long-running operation
+	 * @param project the <code>IProject</code> that needs to be upgraded
+	 * @throws CoreException
+	 */
+	static void doProjectUpdate(IProgressMonitor monitor, final IProject project) throws CoreException {
+		String[] projectName = new String[]{project.getName()};
+		IFile file = project.getFile(ManagedBuildManager.SETTINGS_FILE_NAME);
+		File settingsFile = file.getLocation().toFile();
+		if (!settingsFile.exists()) {
+			monitor.done();
+			return;
+		}
+		
+		// Backup the file
+		monitor.beginTask(ConverterMessages.getFormattedString("UpdateManagedProject20.0", projectName), 1); //$NON-NLS-1$
+		IManagedBuildInfo info = ManagedBuildManager.getBuildInfo(project);
+		UpdateManagedProjectManager.backupFile(file, "_21backup", monitor, project); //$NON-NLS-1$
+		// No physical conversion is need since the 3.0 model is a superset of the 2.1 model 
+		// Just upgrade the version
+		((ManagedBuildInfo)info).setVersion(ManagedBuildManager.getBuildInfoVersion().toString());
+		info.setValid(true);
+
+		// Save the updated file
+		// If the tree is locked spawn a job to this.
+		IWorkspace workspace = project.getWorkspace();
+		boolean treeLock = workspace.isTreeLocked();
+		ISchedulingRule rule = workspace.getRuleFactory().createRule(project);
+		if (treeLock) {
+			WorkspaceJob job = new WorkspaceJob("Updating managed Project") {
+				public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
+					ManagedBuildManager.saveBuildInfo(project, true);
+					return Status.OK_STATUS;
+				}
+			};
+			job.setRule(rule);
+			job.schedule();
+		} else {
+			ManagedBuildManager.saveBuildInfo(project, true);
+		}
+		monitor.done();
+	}
+}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProjectManager.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProjectManager.java
index 6cb433cf7c3..3726ecdad8b 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProjectManager.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/projectconverter/UpdateManagedProjectManager.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2004 Intel Corporation and others.
+ * Copyright (c) 2004, 2005 Intel Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Common Public License v1.0
  * which accompanies this distribution, and is available at
@@ -112,7 +112,7 @@ public class UpdateManagedProjectManager {
 
 		PluginVersionIdentifier compVersion = ManagedBuildManager.getBuildInfoVersion();
 
-		if(projVersion.isEquivalentTo(compVersion))
+		if(compVersion.isEquivalentTo(projVersion))
 			return true;
 		return false;
 	}
@@ -291,6 +291,10 @@ public class UpdateManagedProjectManager {
 				UpdateManagedProject20.doProjectUpdate(monitor, fProject);
 				version = getManagedBuildInfoVersion(info.getVersion());
 			}
+			if(version.isEquivalentTo(new PluginVersionIdentifier(2,1,0))){
+				UpdateManagedProject21.doProjectUpdate(monitor, fProject);
+				version = getManagedBuildInfoVersion(info.getVersion());
+			}
 	
 			if(!isCompatibleProject(info)){
 				throw new CoreException(new Status(IStatus.ERROR, ManagedBuilderCorePlugin.getUniqueIdentifier(), -1,
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml b/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml
index 587086b25e6..7d9c205c958 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml
+++ b/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml
@@ -118,12 +118,9 @@
       </managedBuildRevision>
       <tool
             natureFilter="cnature"
-            sources="o"
-			outputs=""
             name="%ToolName.linker.gnu.c"
             outputFlag="-o"
             command="gcc"
-            dependencyCalculator="org.eclipse.cdt.managedbuilder.makegen.internal.DefaultNoDependencyCalculator"
             id="cdt.managedbuild.tool.gnu.c.linker">
          <envVarBuildPath 
          	pathType="buildpathLibrary"
@@ -255,15 +252,32 @@
                id="gnu.c.link.option.defname"
                valueType="string">
          </option>
+         <inputType
+            sources="o"
+			multipleOfType="true"
+            dependencyCalculator="org.eclipse.cdt.managedbuilder.makegen.internal.DefaultNoDependencyCalculator"
+            buildVariable="OBJS"
+            id="cdt.managedbuild.tool.gnu.c.linker.input">
+            <additionalInput
+            	paths="$(USER_OBJS)"
+            	kind="additionalinputdependency">
+            </additionalInput>
+            <additionalInput
+            	paths="$(LIBS)"
+            	kind="additionalinput">
+            </additionalInput>
+         </inputType>
+         <outputType
+			outputs=""
+            buildVariable="EXECUTABLES"
+            id="cdt.managedbuild.tool.gnu.c.linker.output">
+         </outputType>
       </tool>
       <tool
             natureFilter="ccnature"
-            sources="o"
-            outputs=""
             name="%ToolName.linker.gnu.cpp"
             outputFlag="-o"
             command="g++"
-            dependencyCalculator="org.eclipse.cdt.managedbuilder.makegen.internal.DefaultNoDependencyCalculator"
             id="cdt.managedbuild.tool.gnu.cpp.linker">
          <envVarBuildPath 
          	pathType="buildpathLibrary"
@@ -386,16 +400,32 @@
                valueType="string"
                id="gnu.cpp.link.option.defname">
          </option>
+         <inputType
+            sources="o"
+			multipleOfType="true"
+            dependencyCalculator="org.eclipse.cdt.managedbuilder.makegen.internal.DefaultNoDependencyCalculator"
+            buildVariable="OBJS"
+            id="cdt.managedbuild.tool.gnu.cpp.linker.input">
+            <additionalInput
+            	paths="$(USER_OBJS)"
+            	kind="additionalinputdependency">
+            </additionalInput>
+            <additionalInput
+            	paths="$(LIBS)"
+            	kind="additionalinput">
+            </additionalInput>
+         </inputType>
+         <outputType
+			outputs=""
+            buildVariable="EXECUTABLES"
+            id="cdt.managedbuild.tool.gnu.cpp.linker.output">
+         </outputType>
       </tool>
       <tool
             natureFilter="both"
             isAbstract="true"
-            sources="o"
             name="%ToolName.archiver.gnu"
-            outputs="a"
             command="ar"
-            outputPrefix="lib"
-            dependencyCalculator="org.eclipse.cdt.managedbuilder.makegen.internal.DefaultNoDependencyCalculator"
             id="cdt.managedbuild.tool.gnu.archiver">
          <optionCategory
                owner="cdt.managedbuild.tool.gnu.archiver"
@@ -409,6 +439,27 @@
                valueType="string"
                id="gnu.both.lib.option.flags">
          </option>
+         <inputType
+            sources="o"
+			multipleOfType="true"
+            dependencyCalculator="org.eclipse.cdt.managedbuilder.makegen.internal.DefaultNoDependencyCalculator"
+            buildVariable="OBJS"
+            id="cdt.managedbuild.tool.gnu.archiver.input">
+            <additionalInput
+            	paths="$(USER_OBJS)"
+            	kind="additionalinputdependency">
+            </additionalInput>
+            <additionalInput
+            	paths="$(LIBS)"
+            	kind="additionalinput">
+            </additionalInput>
+         </inputType>
+         <outputType
+			outputs="a"
+            outputPrefix="lib"
+            buildVariable="ARCHIVES"
+            id="cdt.managedbuild.tool.gnu.archiver.output">
+         </outputType>
       </tool>
       <!--tool
             command="windres"
@@ -475,8 +526,6 @@
       </tool-->
       <tool
             command="as"
-            sources="s,S"
-            outputs="o"
             name="%ToolName.assembler.gnu"
             outputFlag="-o"
             id="cdt.managedbuild.tool.gnu.assembler"
@@ -513,15 +562,21 @@
                category="gnu.asm.category.general"
                name="%Option.Gnu.Assembler.version"
                id="gnu.both.asm.option.version"/>
+         <inputType
+            sources="s,S"
+            id="cdt.managedbuild.tool.gnu.assembler.input">
+         </inputType>
+         <outputType
+			outputs="o"
+            buildVariable="OBJS"
+            id="cdt.managedbuild.tool.gnu.assembler.output">
+         </outputType>
       </tool>
       <tool
             natureFilter="cnature"
-            sources="o"
-            outputs=""
             name="%ToolName.linker.macosx.c"
             outputFlag="-o"
             command="gcc"
-            dependencyCalculator="org.eclipse.cdt.managedbuilder.makegen.internal.DefaultNoDependencyCalculator"
             id="cdt.managedbuild.tool.macosx.c.linker">
          <envVarBuildPath 
          	pathType="buildpathLibrary"
@@ -632,15 +687,32 @@
                id="macosx.c.link.option.shared"
                valueType="boolean">
          </option>
+         <inputType
+            sources="o"
+			multipleOfType="true"
+            dependencyCalculator="org.eclipse.cdt.managedbuilder.makegen.internal.DefaultNoDependencyCalculator"
+            buildVariable="OBJS"
+            id="cdt.managedbuild.tool.macosx.c.linker.input">
+            <additionalInput
+            	paths="$(USER_OBJS)"
+            	kind="additionalinputdependency">
+            </additionalInput>
+            <additionalInput
+            	paths="$(LIBS)"
+            	kind="additionalinput">
+            </additionalInput>
+         </inputType>
+         <outputType
+			outputs=""
+            buildVariable="EXECUTABLES"
+            id="cdt.managedbuild.tool.macosx.c.linker.output">
+         </outputType>
       </tool>
       <tool
             natureFilter="ccnature"
-            sources="o"
-            outputs=""
             name="%ToolName.linker.macosx.cpp"
             outputFlag="-o"
             command="g++"
-            dependencyCalculator="org.eclipse.cdt.managedbuilder.makegen.internal.DefaultNoDependencyCalculator"
             id="cdt.managedbuild.tool.macosx.cpp.linker">
          <envVarBuildPath 
          	pathType="buildpathLibrary"
@@ -742,18 +814,34 @@
                valueType="boolean"
                id="macosx.cpp.link.option.shared">
          </option>
+         <inputType
+            sources="o"
+			multipleOfType="true"
+            dependencyCalculator="org.eclipse.cdt.managedbuilder.makegen.internal.DefaultNoDependencyCalculator"
+            buildVariable="OBJS"
+            id="cdt.managedbuild.tool.macosx.cpp.linker.input">
+            <additionalInput
+            	paths="$(USER_OBJS)"
+            	kind="additionalinputdependency">
+            </additionalInput>
+            <additionalInput
+            	paths="$(LIBS)"
+            	kind="additionalinput">
+            </additionalInput>
+         </inputType>
+         <outputType
+			outputs=""
+            buildVariable="EXECUTABLES"
+            id="cdt.managedbuild.tool.macosx.cpp.linker.output">
+         </outputType>
       </tool>
       
       <tool
 		  name="%ToolName.compiler.gnu.c"
 		  id="cdt.managedbuild.tool.gnu.c.compiler"
 		  isAbstract="true"
-		  sources="c"
 		  command="gcc"
-		  dependencyCalculator="org.eclipse.cdt.managedbuilder.makegen.gnu.DefaultGCCDependencyCalculator"
-		  headerExtensions="h"
 		  natureFilter="cnature"
-		  outputs="o"
 		  outputFlag="-o">
          <envVarBuildPath 
          	pathType="buildpathInclude"
@@ -987,17 +1075,24 @@
 			  id="gnu.c.compiler.option.misc.ansi"
 			  valueType="boolean">
 		  </option>
+          <inputType
+		      sources="c"
+			  dependencyExtensions="h"
+			  dependencyCalculator="org.eclipse.cdt.managedbuilder.makegen.gnu.DefaultGCCDependencyCalculator"
+              id="cdt.managedbuild.tool.gnu.c.compiler.input">
+          </inputType>
+          <outputType
+			  outputs="o"
+              buildVariable="OBJS"
+              id="cdt.managedbuild.tool.gnu.c.compiler.output">
+          </outputType>
 	  </tool>
 	  <tool
 		  name="%ToolName.compiler.gnu.cpp"
 		  id="cdt.managedbuild.tool.gnu.cpp.compiler"
 		  isAbstract="true"
-		  sources="c,C,cc,cxx,cpp"
 		  command="g++"
-		  dependencyCalculator="org.eclipse.cdt.managedbuilder.makegen.gnu.DefaultGCCDependencyCalculator"
-		  headerExtensions="h,H,hpp"
 		  natureFilter="ccnature"
-		  outputs="o"
 		  outputFlag="-o">
          <envVarBuildPath 
          	pathType="buildpathInclude"
@@ -1217,6 +1312,17 @@
 			  id="gnu.cpp.compiler.option.other.verbose"
 			  valueType="boolean">
 		  </option>
+          <inputType
+			  sources="c,C,cc,cxx,cpp"
+			  dependencyExtensions="h,H,hpp"
+			  dependencyCalculator="org.eclipse.cdt.managedbuilder.makegen.gnu.DefaultGCCDependencyCalculator"
+              id="cdt.managedbuild.tool.gnu.cpp.compiler.input">
+          </inputType>
+          <outputType
+			  outputs="o"
+              buildVariable="OBJS"
+              id="cdt.managedbuild.tool.gnu.cpp.compiler.output">
+          </outputType>
 	  </tool>
       
       <tool
@@ -1227,6 +1333,11 @@
               variableList="LIBRARY_PATH"
               buildPathResolver="org.eclipse.cdt.managedbuilder.toolchain.gnu.cygwin.CygwinPathResolver">
           </envVarBuildPath>
+          <outputType
+			  outputs="exe"
+              superClass="cdt.managedbuild.tool.gnu.c.linker.output"
+              id="cdt.managedbuild.tool.gnu.c.linker.cygwin.output">
+          </outputType>
       </tool>
       <tool
           id="cdt.managedbuild.tool.gnu.cpp.linker.cygwin"
@@ -1236,6 +1347,11 @@
               variableList="LIBRARY_PATH"
               buildPathResolver="org.eclipse.cdt.managedbuilder.toolchain.gnu.cygwin.CygwinPathResolver">
           </envVarBuildPath>
+		  <outputType
+			  outputs="exe"
+              superClass="cdt.managedbuild.tool.gnu.cpp.linker.output"
+			  id="cdt.managedbuild.tool.gnu.cpp.linker.cygwin.output">
+		  </outputType>
       </tool>
       <tool
           id="cdt.managedbuild.tool.gnu.c.compiler.cygwin"
@@ -1271,6 +1387,7 @@
                      archList="all"
                      osList="solaris,linux,hpux,aix,qnx"
                      name="%ToolChainName.Dbg"
+                     targetTool="cdt.managedbuild.tool.gnu.c.linker.exe.debug;cdt.managedbuild.tool.gnu.cpp.linker.exe.debug"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"
                      id="cdt.managedbuild.toolchain.gnu.exe.debug">
 		          <targetPlatform
@@ -1338,6 +1455,7 @@
                      archList="all"
                      osList="solaris,linux,hpux,aix,qnx"
                      name="%ToolChainName.Rel"
+                     targetTool="cdt.managedbuild.tool.gnu.c.linker.exe.release;cdt.managedbuild.tool.gnu.cpp.linker.exe.release"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"
                      id="cdt.managedbuild.toolchain.gnu.exe.release">
 		          <targetPlatform
@@ -1413,6 +1531,7 @@
                      archList="all"
                      osList="solaris,linux,hpux,aix,qnx"
                      name="%ToolChainName.Dbg"
+                     targetTool="cdt.managedbuild.tool.gnu.c.linker.so.debug;cdt.managedbuild.tool.gnu.cpp.linker.so.debug"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"
                      id="cdt.managedbuild.toolchain.gnu.so.debug">
 		          <targetPlatform
@@ -1459,25 +1578,35 @@
 				  </tool>
 				  <tool
 				      id="cdt.managedbuild.tool.gnu.c.linker.so.debug"
-					  outputs="so"
-					  outputPrefix="lib"
 					  superClass="cdt.managedbuild.tool.gnu.c.linker">
 					  <option
 						  id="gnu.c.link.so.debug.option.shared"
 						  defaultValue="true"
 						  superClass="gnu.c.link.option.shared">
 					  </option>
+			          <outputType
+						  outputs="so"
+						  outputPrefix="lib"
+			              buildVariable="LIBRARIES"
+			              superClass="cdt.managedbuild.tool.gnu.c.linker.output"
+			              id="cdt.managedbuild.tool.gnu.c.linker.so.debug.output">
+			          </outputType>
 				  </tool>
 				  <tool
 					  id="cdt.managedbuild.tool.gnu.cpp.linker.so.debug"
-					  outputs="so"
-					  outputPrefix="lib"
 					  superClass="cdt.managedbuild.tool.gnu.cpp.linker">
 					  <option
 						  id="gnu.cpp.link.so.debug.option.shared"
 						  defaultValue="true"
 						  superClass="gnu.cpp.link.option.shared">
 					  </option>
+			          <outputType
+						  outputs="so"
+						  outputPrefix="lib"
+			              buildVariable="LIBRARIES"
+			              superClass="cdt.managedbuild.tool.gnu.cpp.linker.output"
+			              id="cdt.managedbuild.tool.gnu.cpp.linker.so.debug.output">
+			          </outputType>
 				  </tool>
 				  <tool
 					  id="cdt.managedbuild.tool.gnu.assembler.so.debug"
@@ -1495,6 +1624,7 @@
                      archList="all"
                      osList="solaris,linux,hpux,aix,qnx"
                      name="%ToolChainName.Rel"
+                     targetTool="cdt.managedbuild.tool.gnu.c.linker.so.release;cdt.managedbuild.tool.gnu.cpp.linker.so.release"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"
                      id="cdt.managedbuild.toolchain.gnu.so.release">
 		          <targetPlatform
@@ -1541,25 +1671,35 @@
 				  </tool>				
 				  <tool
 				      id="cdt.managedbuild.tool.gnu.c.linker.so.release"
-					  outputs="so"
-					  outputPrefix="lib"
 					  superClass="cdt.managedbuild.tool.gnu.c.linker">
 					  <option
 						  id="gnu.c.link.so.release.option.shared"
 						  defaultValue="true"
 						  superClass="gnu.c.link.option.shared">
 					  </option>
+			          <outputType
+						  outputs="so"
+						  outputPrefix="lib"
+			              buildVariable="LIBRARIES"
+			              superClass="cdt.managedbuild.tool.gnu.c.linker.output"
+			              id="cdt.managedbuild.tool.gnu.c.linker.so.release.output">
+			          </outputType>
 				  </tool>
 				  <tool
 					  id="cdt.managedbuild.tool.gnu.cpp.linker.so.release"
-					  outputs="so"
-					  outputPrefix="lib"
 					  superClass="cdt.managedbuild.tool.gnu.cpp.linker">
 					  <option
 						  id="gnu.cpp.link.so.release.option.shared"
 						  defaultValue="true"
 						  superClass="gnu.cpp.link.option.shared">
 					  </option>
+			          <outputType
+						  outputs="so"
+						  outputPrefix="lib"
+			              buildVariable="LIBRARIES"
+			              superClass="cdt.managedbuild.tool.gnu.cpp.linker.output"
+			              id="cdt.managedbuild.tool.gnu.cpp.linker.so.release.output">
+			          </outputType>
 				  </tool>
 				  <tool
 					  id="cdt.managedbuild.tool.gnu.assembler.so.release"
@@ -1584,6 +1724,7 @@
                      archList="all"
                      osList="solaris,linux,hpux,aix,qnx"
                      name="%ToolChainName.Dbg"
+                     targetTool="cdt.managedbuild.tool.gnu.archiver.lib.debug"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"
                      id="cdt.managedbuild.toolchain.gnu.lib.debug">
 				  <targetPlatform
@@ -1630,8 +1771,6 @@
                   </tool>
 			      <tool
 		    		  id="cdt.managedbuild.tool.gnu.archiver.lib.debug"
-				      outputs="a"
-                      outputPrefix="lib"
 			          superClass="cdt.managedbuild.tool.gnu.archiver">
 				  </tool>                 
 				  <tool
@@ -1650,6 +1789,7 @@
                      archList="all"
                      osList="solaris,linux,hpux,aix,qnx"
                      name="%ToolChainName.Rel"
+                     targetTool="cdt.managedbuild.tool.gnu.archiver.lib.release"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"
                      id="cdt.managedbuild.toolchain.gnu.lib.release">
 		          <targetPlatform
@@ -1696,8 +1836,6 @@
 				  </tool>
 				  <tool
 					  id="cdt.managedbuild.tool.gnu.archiver.lib.release"
-					  outputs="a"
-                      outputPrefix="lib"
 				      superClass="cdt.managedbuild.tool.gnu.archiver">
 				  </tool>
 				  <tool
@@ -1723,6 +1861,7 @@
                      archList="all"
                      osList="win32"
                      name="%ToolChainName.Dbg"
+                     targetTool="cdt.managedbuild.tool.gnu.c.linker.cygwin.exe.debug;cdt.managedbuild.tool.gnu.cpp.linker.cygwin.exe.debug"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"
                      isToolChainSupported="org.eclipse.cdt.managedbuilder.toolchain.gnu.cygwin.IsGnuCygwinToolChainSupported"
                      configurationEnvironmentSupplier="org.eclipse.cdt.managedbuilder.toolchain.gnu.cygwin.GnuCygwinConfigurationEnvironmentSupplier"
@@ -1771,12 +1910,10 @@
                   </tool>
                   <tool
                       id="cdt.managedbuild.tool.gnu.c.linker.cygwin.exe.debug"
-                      outputs="exe"
                       superClass="cdt.managedbuild.tool.gnu.c.linker.cygwin">
                   </tool>
                   <tool
                       id="cdt.managedbuild.tool.gnu.cpp.linker.cygwin.exe.debug"
-                      outputs="exe"
                       superClass="cdt.managedbuild.tool.gnu.cpp.linker.cygwin">
                   </tool>                  
 				  <tool
@@ -1795,6 +1932,7 @@
                      archList="all"
                      osList="win32"
                      name="%ToolChainName.Rel"
+                     targetTool="cdt.managedbuild.tool.gnu.c.linker.cygwin.exe.release;cdt.managedbuild.tool.gnu.cpp.linker.cygwin.exe.release"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"
                      isToolChainSupported="org.eclipse.cdt.managedbuilder.toolchain.gnu.cygwin.IsGnuCygwinToolChainSupported"
                      configurationEnvironmentSupplier="org.eclipse.cdt.managedbuilder.toolchain.gnu.cygwin.GnuCygwinConfigurationEnvironmentSupplier"
@@ -1843,12 +1981,10 @@
                   </tool>                      
                   <tool
                       id="cdt.managedbuild.tool.gnu.c.linker.cygwin.exe.release"
-                      outputs="exe"
                       superClass="cdt.managedbuild.tool.gnu.c.linker.cygwin">
                   </tool>
                   <tool
                       id="cdt.managedbuild.tool.gnu.cpp.linker.cygwin.exe.release"
-                      outputs="exe"
                       superClass="cdt.managedbuild.tool.gnu.cpp.linker.cygwin">
                   </tool>
 				  <tool
@@ -1874,6 +2010,7 @@
                      archList="all"
                      osList="win32"
                      name="%ToolChainName.Dbg"
+                     targetTool="cdt.managedbuild.tool.gnu.c.linker.cygwin.so.debug;cdt.managedbuild.tool.gnu.cpp.linker.cygwin.so.debug"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"
                      isToolChainSupported="org.eclipse.cdt.managedbuilder.toolchain.gnu.cygwin.IsGnuCygwinToolChainSupported"
                      configurationEnvironmentSupplier="org.eclipse.cdt.managedbuilder.toolchain.gnu.cygwin.GnuCygwinConfigurationEnvironmentSupplier"
@@ -1922,23 +2059,33 @@
                   </tool>
                   <tool
                       id="cdt.managedbuild.tool.gnu.c.linker.cygwin.so.debug"
-                      outputs="dll,a.dll"
                       superClass="cdt.managedbuild.tool.gnu.c.linker.cygwin">
                       <option
                           id="gnu.c.link.cygwin.so.debug.option.shared"
                           defaultValue="true"
                           superClass="gnu.c.link.option.shared">
                       </option>
+			          <outputType
+	                      outputs="dll,a.dll"
+			              buildVariable="LIBRARIES"
+			              superClass="cdt.managedbuild.tool.gnu.c.linker.cygwin.output"
+			              id="cdt.managedbuild.tool.gnu.c.linker.cygwin.so.debug.output">
+			          </outputType>
                   </tool>
                   <tool
                       id="cdt.managedbuild.tool.gnu.cpp.linker.cygwin.so.debug"
-                      outputs="dll,a.dll"
                       superClass="cdt.managedbuild.tool.gnu.cpp.linker.cygwin">
                       <option
                           id="gnu.cpp.link.cygwin.so.debug.option.shared"
                           defaultValue="true"
                           superClass="gnu.cpp.link.option.shared">
                       </option>
+			          <outputType
+	                      outputs="dll,a.dll"
+			              buildVariable="LIBRARIES"
+			              superClass="cdt.managedbuild.tool.gnu.cpp.linker.cygwin.output"
+			              id="cdt.managedbuild.tool.gnu.cpp.linker.cygwin.so.debug.output">
+			          </outputType>
                   </tool>                  
 				  <tool
 					  id="cdt.managedbuild.tool.gnu.assembler.cygwin.so.debug"
@@ -1956,6 +2103,7 @@
                      archList="all"
                      osList="win32"
                      name="%ToolChainName.Rel"
+                     targetTool="cdt.managedbuild.tool.gnu.c.linker.cygwin.so.release;cdt.managedbuild.tool.gnu.cpp.linker.cygwin.so.release"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"
                      isToolChainSupported="org.eclipse.cdt.managedbuilder.toolchain.gnu.cygwin.IsGnuCygwinToolChainSupported"
                      configurationEnvironmentSupplier="org.eclipse.cdt.managedbuilder.toolchain.gnu.cygwin.GnuCygwinConfigurationEnvironmentSupplier"
@@ -2004,23 +2152,33 @@
                   </tool>
                   <tool
                       id="cdt.managedbuild.tool.gnu.c.linker.cygwin.so.release"
-                      outputs="dll,a.dll"
                       superClass="cdt.managedbuild.tool.gnu.c.linker.cygwin">
                       <option
                           id="gnu.c.link.cygwin.so.release.option.shared"
                           defaultValue="true"
                           superClass="gnu.c.link.option.shared">
                       </option>
+			          <outputType
+	                      outputs="dll,a.dll"
+			              buildVariable="LIBRARIES"
+			              superClass="cdt.managedbuild.tool.gnu.c.linker.cygwin.output"
+			              id="cdt.managedbuild.tool.gnu.c.linker.cygwin.so.release.output">
+			          </outputType>
                   </tool>
                   <tool
                       id="cdt.managedbuild.tool.gnu.cpp.linker.cygwin.so.release"
-                      outputs="dll,a.dll"
                       superClass="cdt.managedbuild.tool.gnu.cpp.linker.cygwin">
                       <option
                           id="gnu.cpp.link.cygwin.so.release.option.shared"
                           defaultValue="true"
                           superClass="gnu.cpp.link.option.shared">
                       </option>
+			          <outputType
+	                      outputs="dll,a.dll"
+			              buildVariable="LIBRARIES"
+			              superClass="cdt.managedbuild.tool.gnu.cpp.linker.cygwin.output"
+			              id="cdt.managedbuild.tool.gnu.cpp.linker.cygwin.so.release.output">
+			          </outputType>
                   </tool>
 				  <tool
 					  id="cdt.managedbuild.tool.gnu.assembler.cygwin.so.release"
@@ -2045,6 +2203,7 @@
                      archList="all"
                      osList="win32"
                      name="%ToolChainName.Dbg"
+                     targetTool="cdt.managedbuild.tool.gnu.archiver.cygwin.lib.debug"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"
                      isToolChainSupported="org.eclipse.cdt.managedbuilder.toolchain.gnu.cygwin.IsGnuCygwinToolChainSupported"
                      configurationEnvironmentSupplier="org.eclipse.cdt.managedbuilder.toolchain.gnu.cygwin.GnuCygwinConfigurationEnvironmentSupplier"
@@ -2093,8 +2252,6 @@
 				  </tool>  
                   <tool
                       id="cdt.managedbuild.tool.gnu.archiver.cygwin.lib.debug"
-                      outputPrefix="lib"
-                      outputs="a"
                       superClass="cdt.managedbuild.tool.gnu.archiver">
                   </tool>
 				  <tool
@@ -2113,6 +2270,7 @@
                      archList="all"
                      osList="win32"
                      name="%ToolChainName.Rel"
+                     targetTool="cdt.managedbuild.tool.gnu.archiver.cygwin.lib.release"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCWinManagedMakePerProjectProfile"
                      isToolChainSupported="org.eclipse.cdt.managedbuilder.toolchain.gnu.cygwin.IsGnuCygwinToolChainSupported"
                      configurationEnvironmentSupplier="org.eclipse.cdt.managedbuilder.toolchain.gnu.cygwin.GnuCygwinConfigurationEnvironmentSupplier"
@@ -2160,15 +2318,13 @@
                      </option>
                  </tool>
                  <tool
-                    id="cdt.managedbuild.tool.gnu.archiver.cygwin.lib.release"
-                    outputPrefix="lib"
-                    outputs="a"
-                    superClass="cdt.managedbuild.tool.gnu.archiver">
+                     id="cdt.managedbuild.tool.gnu.archiver.cygwin.lib.release"
+                     superClass="cdt.managedbuild.tool.gnu.archiver">
                  </tool>
-				  <tool
+				 <tool
 					  id="cdt.managedbuild.tool.gnu.assembler.cygwin.lib.release"
 					  superClass="cdt.managedbuild.tool.gnu.assembler">
-				  </tool>   
+				 </tool>   
               </toolChain>                                                                                				                    
          </configuration>         
       </projectType>
@@ -2187,6 +2343,7 @@
                      archList="all"
                      osList="macosx"
                      name="%ToolChainName.Dbg"
+                     targetTool="cdt.managedbuild.tool.macosx.c.linker.macosx.exe.debug;cdt.managedbuild.tool.macosx.cpp.linker.macosx.exe.debug"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"
                      id="cdt.managedbuild.toolchain.gnu.macosx.exe.debug">
                   <targetPlatform
@@ -2254,6 +2411,7 @@
                      archList="all"
                      osList="macosx"
                      name="%ToolChainName.Rel"
+                     targetTool="cdt.managedbuild.tool.macosx.c.linker.macosx.exe.release;cdt.managedbuild.tool.macosx.cpp.linker.macosx.exe.release"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"
                      id="cdt.managedbuild.toolchain.gnu.macosx.exe.release">
                   <targetPlatform
@@ -2329,6 +2487,7 @@
                      archList="all"
                      osList="macosx"
                      name="%ToolChainName.Dbg"
+                     targetTool="cdt.managedbuild.tool.macosx.c.linker.macosx.so.debug;cdt.managedbuild.tool.macosx.cpp.linker.macosx.so.debug"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"
                      id="cdt.managedbuild.toolchain.gnu.macosx.so.debug">
                   <targetPlatform
@@ -2375,8 +2534,6 @@
                   </tool>
 				  <tool
 				      id="cdt.managedbuild.tool.macosx.c.linker.macosx.so.debug"
-					  outputs="dylib"
-					  outputPrefix="lib"
 					  superClass="cdt.managedbuild.tool.macosx.c.linker">
 					  <option
 					      id="macosx.c.link.macosx.so.debug.option.shared"
@@ -2393,16 +2550,28 @@
 						  defaultValue="true"
 						  superClass="macosx.c.link.option.nodeflibs">
 					  </option>
+			          <outputType
+	                      outputs="dylib"
+	                      outputPrefix="lib"
+			              buildVariable="LIBRARIES"
+			              superClass="cdt.managedbuild.tool.macosx.c.linker.output"
+			              id="cdt.managedbuild.tool.macosx.c.linker.macosx.so.debug.output">
+			          </outputType>
 				  </tool>
 				  <tool
 				      id="cdt.managedbuild.tool.macosx.cpp.linker.macosx.so.debug"
-					  outputs="dylib"
 					  superClass="cdt.managedbuild.tool.macosx.cpp.linker">
 					  <option
 					      id="macosx.cpp.link.macosx.so.debug.option.shared"
 						  defaultValue="true"
 						  superClass="macosx.cpp.link.option.shared">
 					  </option>
+			          <outputType
+	                      outputs="dylib"
+			              buildVariable="LIBRARIES"
+			              superClass="cdt.managedbuild.tool.macosx.cpp.linker.output"
+			              id="cdt.managedbuild.tool.macosx.cpp.linker.macosx.so.debug.output">
+			          </outputType>
 				  </tool>                                  
 				  <tool
 					  id="cdt.managedbuild.tool.gnu.assembler.macosx.so.debug"
@@ -2420,6 +2589,7 @@
                      archList="all"
                      osList="macosx"
                      name="%ToolChainName.Rel"
+                     targetTool="cdt.managedbuild.tool.macosx.c.linker.macosx.so.release;cdt.managedbuild.tool.macosx.cpp.linker.macosx.so.release"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"
                      id="cdt.managedbuild.toolchain.gnu.macosx.so.release">
                   <targetPlatform
@@ -2466,8 +2636,6 @@
                   </tool>
 				  <tool
 				      id="cdt.managedbuild.tool.macosx.c.linker.macosx.so.release"
-					  outputs="dylib"
-					  outputPrefix="lib"
 					  superClass="cdt.managedbuild.tool.macosx.c.linker">
 					  <option
 					      id="macosx.c.link.macosx.so.release.option.shared"
@@ -2484,16 +2652,28 @@
 						  defaultValue="true"
 						  superClass="macosx.c.link.option.nodeflibs">
 					  </option>
+			          <outputType
+	                      outputs="dylib"
+	                      outputPrefix="lib"
+			              buildVariable="LIBRARIES"
+			              superClass="cdt.managedbuild.tool.macosx.c.linker.output"
+			              id="cdt.managedbuild.tool.macosx.c.linker.macosx.so.release.output">
+			          </outputType>
 				  </tool>
 				  <tool
 				      id="cdt.managedbuild.tool.macosx.cpp.linker.macosx.so.release"
-					  outputs="dylib"
 					  superClass="cdt.managedbuild.tool.macosx.cpp.linker">
 					  <option
 					      id="macosx.cpp.link.macosx.so.release.option.shared"
 						  defaultValue="true"
 						  superClass="macosx.cpp.link.option.shared">
 					  </option>
+			          <outputType
+	                      outputs="dylib"
+			              buildVariable="LIBRARIES"
+			              superClass="cdt.managedbuild.tool.macosx.cpp.linker.output"
+			              id="cdt.managedbuild.tool.macosx.cpp.linker.macosx.so.release.output">
+			          </outputType>
 				  </tool>                
 				  <tool
 					  id="cdt.managedbuild.tool.gnu.assembler.macosx.so.release"
@@ -2518,6 +2698,7 @@
                      archList="all"
                      osList="macosx"
                      name="%ToolChainName.Dbg"
+                     targetTool="cdt.managedbuild.toolmacosx.lib.debug.gnu.archiver"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"
                      id="cdt.managedbuild.toolchain.gnu.macosx.lib.debug">
                   <targetPlatform
@@ -2564,8 +2745,6 @@
                   </tool>
                   <tool
                       id="cdt.managedbuild.toolmacosx.lib.debug.gnu.archiver"
-                      outputPrefix="lib"
-                      outputs="a"
                       superClass="cdt.managedbuild.tool.gnu.archiver">
                   </tool>                                   
 				  <tool
@@ -2584,6 +2763,7 @@
                      archList="all"
                      osList="macosx"
                      name="%ToolChainName.Rel"
+                     targetTool="cdt.managedbuild.toolmacosx.lib.release.gnu.archiver"
                      scannerConfigDiscoveryProfileId="org.eclipse.cdt.managedbuilder.core.GCCManagedMakePerProjectProfile"
                      id="cdt.managedbuild.toolchain.gnu.macosx.lib.release">
                   <targetPlatform
@@ -2630,8 +2810,6 @@
                   </tool>
                   <tool
                       id="cdt.managedbuild.toolmacosx.lib.release.gnu.archiver"
-                      outputPrefix="lib"
-                      outputs="a"
                       superClass="cdt.managedbuild.tool.gnu.archiver">
                   </tool>                 
 				  <tool
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ToolsSettingsBlock.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ToolsSettingsBlock.java
index 85ebe279ebf..e8e8daf0b9e 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ToolsSettingsBlock.java
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/ToolsSettingsBlock.java
@@ -1,5 +1,5 @@
 /**********************************************************************
- * Copyright (c) 2002,2004 IBM Corporation and others.
+ * Copyright (c) 2002, 2005 IBM Corporation and others.
  * All rights reserved.   This program and the accompanying materials
  * are made available under the terms of the Common Public License v0.5
  * which accompanies this distribution, and is available at
@@ -17,7 +17,10 @@ import java.util.List;
 import java.util.ListIterator;
 import java.util.Map;
 
+import org.eclipse.cdt.managedbuilder.core.IBuildObject;
 import org.eclipse.cdt.managedbuilder.core.IOptionCategory;
+import org.eclipse.cdt.managedbuilder.core.IConfiguration;
+import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration;
 import org.eclipse.cdt.managedbuilder.core.ITool;
 import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
 import org.eclipse.cdt.managedbuilder.ui.properties.BuildOptionSettingsPage;
@@ -67,6 +70,8 @@ public class ToolsSettingsBlock extends AbstractCOptionPage {
 	private static final String TREE_LABEL = LABEL + ".ToolTree";	//$NON-NLS-1$
 	private static final String OPTIONS_LABEL = LABEL + ".ToolOptions";	//$NON-NLS-1$
 	private static final int[] DEFAULT_SASH_WEIGHTS = new int[] { 20, 30 };
+
+	private static final String EMPTY_STRING = new String();
 	
 	/*
 	 * Dialog widgets
@@ -365,6 +370,9 @@ public class ToolsSettingsBlock extends AbstractCOptionPage {
 
 	protected void setValues() {
 		
+		IConfiguration config = null;	
+		IResourceConfiguration resConfig = null;
+		
 		if (provider == null) {
 //			IResource element = parent.getProject(); 
 			IResource resource = (IResource) element;
@@ -372,9 +380,11 @@ public class ToolsSettingsBlock extends AbstractCOptionPage {
 			optionList.setContentProvider(provider);
 		}
 		if ( element instanceof IProject ) {
-			optionList.setInput(parent.getSelectedConfiguration());	
+			config = parent.getSelectedConfiguration();	
+			optionList.setInput(config);	
 		} else if ( element instanceof IFile){
-			optionList.setInput(resParent.getCurrentResourceConfig());
+			resConfig = resParent.getCurrentResourceConfig();
+			optionList.setInput(resConfig);
 		}
 		
 		optionList.expandAll();
@@ -399,11 +409,58 @@ public class ToolsSettingsBlock extends AbstractCOptionPage {
 		// Determine what the selection in the tree should be
 		Object primary = null;
 		if (selectedTool != null) {
-			// There is a selected tool defined
-			primary = selectedTool;
+			// There is a selected tool defined.  See if it matches any current tool (by name)
+			ITool[] tools = null;
+			if ( element instanceof IProject ) {
+				tools = config.getFilteredTools();
+			} else if ( element instanceof IFile){
+				tools = resConfig.getTools();
+			}			
+			String matchName = selectedTool.getName();
+			for (int i=0; i<tools.length; i++) {
+				ITool tool = tools[i];
+				if (tool.getName().equals(matchName)) {
+					primary = tool;
+					break;
+				}
+			}
 		} else if (selectedCategory != null) {
-			// There is a selected option or category
-			primary = selectedCategory;
+			// There is a selected option or category.  
+			// See if it matches any category in the current config (by name)
+			ITool[] tools = null;
+			if ( element instanceof IProject ) {
+				tools = config.getFilteredTools();
+			} else if ( element instanceof IFile){
+				tools = resConfig.getTools();
+			}
+			String matchName = EMPTY_STRING;
+			IBuildObject catOrTool = selectedCategory;
+			do {
+				matchName = catOrTool.getName() + matchName;
+				if (catOrTool instanceof ITool) break;
+				else if (catOrTool instanceof IOptionCategory) {
+					catOrTool = ((IOptionCategory)catOrTool).getOwner();					
+				} else break;
+			} while (catOrTool != null);
+			for (int i=0; i<tools.length && primary == null; i++) {
+				ITool tool = tools[i];
+				IOptionCategory[] cats = tool.getChildCategories();
+				for (int j=0; j<cats.length; j++) {
+					String catName = EMPTY_STRING;
+					catOrTool = cats[j]; 
+					do {
+						catName = catOrTool.getName() + catName;
+						if (catOrTool instanceof ITool) break;
+						else if (catOrTool instanceof IOptionCategory) {
+							catOrTool = ((IOptionCategory)catOrTool).getOwner();					
+						} else break;
+					} while (catOrTool != null);
+					if (catName.equals(matchName)) {
+						primary = cats[j];
+						break;
+					}
+				}
+			}
 		} 
 		
 		if (primary == null) {