From 5bde16a1f94ebe5b52d4d065b2aa5f7315b62cb3 Mon Sep 17 00:00:00 2001 From: Leo Treggiari 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 @@ - - - - + + + + + + + + + + + + + + + + + + + + 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 @@ + @@ -1202,9 +1203,9 @@ + isTest="true" + name="testgnu21.exe" + id="cdt.managedbuild.target.testgnu21.exe"> + name="testgnu21.so" + id="cdt.managedbuild.target.testgnu21.so"> + id="cdt.managedbuild.target.testgnu21.lib"> Lgr9Ka!F&=-;$IqjxCb4-(p(^{ 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 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 zcmZ`*2{=@3`#%_K_I=AvWX+Zsg+wC8WX(2~!PuFxg~pn+5F`7RY}vC6MYb$Sws#_o zEs79{?BW}*{(tpdeb>33b6wB<-1mK+d;9%Pz1Ail8lp=AVg>+!0>D9YW%ob2Ym$Hf zAf5{VC<#(2dk2)AFT%}X+1%X|uSkDz5q79PP)MWBo**E`Si*+#xJm7NC#M%17a=iN zY!bsLD(1blg6e-Tv`H4 zbeWGnU*H$oksTAW*0rYnA=LwQ_zdX&iN<R94)TxwjL%R^P-3-<+7i|yO< z*XpNJ-d$~SDG1Yt)jr#moKp@fOYo*QX|C1v-6VE0OUE~~B*AvW((&vIGS}}x>k6om zC4=s(hEu_;dx)}u^p9S3@9?G#aO)qY&tSDNvU%&ulfJmm?m@t`d$+dvI;{K(v*f(c=KX*0w9VbfMz7bfI&;hT%XL-Vkd%l_X+p;%kf>o%2@$K`G)2d3yi=C-cIX=woXUx`aB*ix9tdI$|UFeMTp1OqJ^|n#1d(FQo zXCr3dw3GM78lJk4d54w~V zO`X0shYcY)GTdsbXhwYLoawkKeQBUMk}$b5XuV`O!6%}xdsUs4sG^~kZ`#$vKo61I`>gPej%ltb>i`ABRemW7o& zkj%%p#F98lg9$a3SP}MudW2KWi97M;lO2zl!Yop4P}+2Q7G_e^wW}{SLvalK2GN^k zhPu6ZmA`Nzbi?&qsZQ8e5h+DKL7?lQ;Z|{iWL!t8AO08#c?9PHK_z2+ojR@UBOd z!^W#qmh+1|_cOzF-b1mI_}H-NEewA{PC?MyJF6FB`I}yZ2`2}=CvnjApDqbo%?@Uk zU^DFBJ7oDOk?s5({Vq0%zgbCE@74{dtPyXBpf**Q-W|~T!e^dF)4thLafRJ=LX)LV zgR=Z9HzF$bt2I`Y%UFPhTHVofNJv9w2(R)19U$ zObENZ^-w@Q-;|Bj(J|VVV`|C|4W79y!#QfIwOYJX@RNz$=y59O65w8OlIjwEW67p|JGAIAiqTB z{AHUWkpcS&im36cx|3}+IiHJ^q(~88wB2*GoFPbI7Yob#RLgRK?AbWsWwbu6pXwUX zNw7ukd9u0ZQBoO%K>G=hcr;MI%^1?x&H>>=h_x2;@91=8yRQ0g#|ianh}2Ekn_V-h z6Bkd6#8xJ^LL^36t9`W+s-vENYpRZ*oanKZ4eMA~IWuA7zvhe@W6%~1b|XO#$)@O; z3|TXextxhGd2>CVX`E4l)EVB!RbT*~DKgDre&9Yf&0j`b`=k!3t)TJjl@?zy`>0{3 zM)xg06oZ?^4Y99zay}M_IHj9YV6c5t`v>QJ-LpeVnd#YAr6!-xU)l3|OmETL&|c@C zj?QsW!}ZSL*Ka6Kdu9(WC69KXiQcA>oyJXk(svXNZZPg#ka&cD>Jb7nz!?SAV{s`M zl`o3e(86K(S9v0i(dlAiGQLq)sqa_~p;R%CM|OrW9`y;U`k`wy1l z^BSWax%w=N>lgh)Y4X|q4Bgwq;%rH-RX4r7lQ5dS0j*J;0Sd1-mRf8LD(1h(HwWFN zX^&$nUP`oT?z{E1?Tr0H=^b9q-F?$!8C7t~C5SE&G4sF0`}=<}p{f88zz1L^dARug zMuY#Sa0H+j4&HMDN7?`oM@oR^U-WqVjojMBiVSy({=0|2Va$mKDZ>3uW(RY~%O>$R vEIBc#_|rg@k4^7y^LS#AMxelxFG&CYbV77V2}uV48p5+p3;@nFN4x(3hSZ49 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 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 Z8wDV;|Epx;pTtZcCJ-m^CXEpy=s!Dt $(@:%.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 +#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 +#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 +#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 +#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 zcmZ`*2{@E%8~*HL3`ZzsiOJ4jOxaV4GhysgGFoIewy~G}l=89( zEJc34`0UnEpP?5U5m za(aEO1opD{ZKY1B)rIlL+%lwsVm%yNza$N@V}cv4BrjN&&V&Q3JKHU%6qJ~f%kg(T`}N`)sf200_P> zt~tNN-*>YS6az|}BwUXlla97=i0x%|{ag(dKazGfApbtet-DZFsk&AyHhRbSib52CNx5v zJRPhvZ~4V&L)vhO><2K)*Js_QAT?&LvyoQsF!u;}Ub~!Y_s@Hl~i2V5;A_ zrSuyPB+rd1aIAop5QYOmo5yt0FXkC^CD%3zH-EXh{e0-mWFW;jsihH)?{{K`YYTJU zoxNIQ%^VCnlWqbJ*;#$P5h#XQtQulEq|I4VHrlF)e#*IlfA@m1R%ocQ_eDXHn}*Mh z-2DwmqUmVVmYy7xDEri(RC!6OM;{8S&aMczh&-BX7_O_$nVv66ciTGY;cbao;rBe2 zTcxAJ=M>NNwAWa4Tf07VJ)0{Q@Oe%wb}UAmx5tN0D-4vyDjuuD+tYd*E|Mr{!ot{V zUT6I=c&=!D@cAHr&TICQc;{t^BU-Zsg;CC)murpbR+BqO2k<$>&&;=_*8*X~ry#0%uPQGLsl6A3dh0j5SqXes6BQV-T$KNiQ2W3~l zYouTHYlu2~c$Ac&sdgsoo_pk5!D|9}SU$r0Wze{`s$8y89_3~KxvVLI;)#N-axN}X zn6;j7#0oCk>FnTf34K%E9M=4=iC9JEB_?@@N6K?^gFcejAgCAmn2nhyu8eQlI!o5$HMWGlNsXEA~TPq;#eqEb#hrT*rhP>9vkM{8rfj?0ZN*O2ZbYG~FAb;dIqS96du z0(z1{XGfU%w$lnSj8 z@cAp=3NprEeY#R@M}226m&_x{hfQABFZ1cF#bQu;cgjKWD5pX5?2gb3!uNt7Y_TH?M{8MVBQjejP)f1 z;*A!fH*J^p^j%uUW#9Tp8B#MnOWlX}XB=lu8(Lm+uFhz)e7T8fQ!{s%Y&X#W)~#>Y z+g;diVDuU#s|V9HFwyDh)g3^)cVF)6kvGvX=!Tgv7Ud%*rYEO=EP8{@$}5=^v_h|i zPHv|+Xa@eo=C654bD$44D3wJu>`8^)0SCNrKAtvqGzUsziQrH;q;ny>Nef9_qGML? zJsUZPFlk_KfA#@Z5Uw=(pShtZmYZv#%@5?EpCsCwCiR=e?hC3TiufZo)>~PxT`2g3 zW!4w2g=6UZBRD()96UNPgM*jM+P*>323*m}zt`x_hmZ_1#>^h@PR|6N>fj%RoY8R= zkglxQI6BiZGQlHfe7tjlRrC(BEG_QPvkQ@n=Mp{-In}M+(1pEe+ASl1T5q;aFZv3p z_mO7;0NPFW)SH)&wJp|@dZjt^H5>`f6LdXyD>5{tME^d|t1H@1`rI<1MFx;4UQzO} zp|xU#NC>1TYUhm)@)AB0oVys2C;CQX?PHluEHakRXB(#6k{aXJff;dIvT(vadO)A# zWOv((!S!^mF@@Fd><_(!EP80Bw@?EEiC%o&$`V6rQSQ^dWnrF+EZ_Khda}@7mt5*#0{w3`qr2Alq)jTC?ThgjBmMB!N$8H7uR@v zp#qh%9#J08<*o7QS%Ht_`dHp)fsFw+@`?=k@i#`Ogw}xW7jxMqvzcM#ldT3yPu|C^ zJ>W@8dz%;&;ZlcO^}c?b*WUN)pXk4`te~lnC%;48iN_EnX3Gs)!T7Bap=rD-@p$Km z5xJ!Am7=%0uk@CZ!o8e_1a1%G@NXf9DJ5X+4{l==9X-#_H2yomqvjW&1B7WW>e@s1 z4hkNmIJD!x1eK{+`G@cvlsd=@cBNFPY=LI(CrkJx_WxTxO$-1ysXLL{+xGx+uf2a8 z0W`5+UN-I*{AVB>RB*7P>?$Z@-e-BYzZ_I?uqW)QfV1pVvD+c`s`$4O+*QFyrI&l| 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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 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 zcmZ`*2{=^i8$Ys7*{8@7bEC$-Z)KOAF(MkJn6YFV8pd)XSzE1B z;wHwvZZ6_xM%jIegMRMWyC`dwb#Wu;;7g8LV)!-RT&gI!8+^Dlj-yFI=`OC;XhM$Sl@ z&mwp$WG$Wqe{pT$2!5c16!9yqSqD_e3tu;~LxtKPD8r~w#J+xj=Gjfs^yL;bX%wY) zjcZ*tT{=Hwy)K3LJQ)hGENz7==)g6?#0i%fkpG75DHyghM<$y_!EkYdVPm6*?eCby zCwCy4#GtW#S!frCVT4YHE4SVF1V2YmDx=lSYcgG0wZTv zl!KkuBq`RSZnUkqy9#dK;4rU|sV`!Tw6W5ew3)M$=;&na(2G8JSfIEG=j2s1knr*i zs{)6|l#t*CXIk)^+y^N~)H?d~KIYWN%QWDwsW6k5P@AoGhTUgnmY&R&M+T%{Sge2a zV7ol4t}8=+hL^T5*Qfi9ogM`UxL*J$!=@^Yv@b1*gKN4mgBIYYD2MUH28w|TF*tn@ zA}Mx>1Hz7T3&i8FV$#wf$2lP39FQHF9*~B&15wKZ!s+&dMoA76?MWs8-~(|6Zdl9(Ul*KrfV{7Zx0}1Cj~nS^17bpfTboaETcIdd zEh^@cxHx>y>$xMFS8F66Zrlt#|Dho$X>~a`1^UDZDSuPGCFI^nt-A8*0^$tkLor)$v+6ObrDl=hy!?e1^G9nU?nb{bwE}dChv#;SYir7_q^wi6C<0TPb$`?S}|KHU6q3Mk) zK+f0O*1k|~bn2wNzl>~4mz7M5C8E8hxYx?M!$Q_v#>~pbw5{Fj4_p5hhc|8VHl|iB zGB!*lg-WAS<5Mf20wMN~9y2Q%Mmt51)3R&z!hoIPr#o=Q{jd-T{4ohUe?K`8;D^Uy z+~^LFkZq7?1@2nb6|OT{eO&OrkfK*t(MTpPW}8Y9gKCn=&4>}Wf$i^jXBYS2j9B)l zaD6j?-+S_dz+2Tu1<@RhJg!Kz6DCX`M|X}aBt>}06?#}U9}Z}N4t9B=-WF< z^%7F#4)1)m)hJmtA?QF*3s<)C=Q}D9JDLQYziNQ8SaA#_p#sgk&A00AVbuIubN8@Af*PCmpQ?LoI+9FM&cab$3D5?mEXT2mz{0cd2M%}1z0esvuj3pRCy&~m zqJ?dF29D2J!MGM}t8ACnn_qKoRN9qX{N3$xu109{y{7zCE#IyOCo-IdXt#4O^Vyl0 z(wx$89HQy18nTQvvTAQxS5>U)Vs93&?5}ZBr`UglX1hLMPjZb`ZWADPRqE^W1v>46 zWO|s`%J#*K8JSp>Q!;`Z!x!UbR^u^z2dFB-!A5Qv7{Q&Zgo3%&kFL0q@glBh*dT0r z8-T%zbln=5Xu6QsuLsv{N+o6bj%EA5^@uiz|1ipst1B|LsqkomJYHR0tE)GtAGUp_ zBz1Zdi5^*eQb8$S-w0~l#0Us1otxs{>7yN23Y5T9{d>`8`L4X}BzPS>z`|ML8Pnk8 zI?e$A?BIv=p^wIU`ndk-;ABlzfQILgx4EZ8CKAIm1VsiQgd~byH0<0^ljK1&;eI*6 z?aM*$3StY%>>sPrTPwP1v~~LG)isZ8otf-pOqb%DYBBl1xmH;gjf zKgYTbV4I|vLgELTo0i?-l1dQq)tS|!zCA->|g zIZQs&j#e~(JfoOR9x8dZR-sr>)UKVhapBT+7H%SgF%$1Q^F;;KW^Lj7Xe-*Ao?dZ@I>zygOTa9E<_-MD1V3uv=`!hL`; z5Q&m!;_-~9PNfij=M5mns8FqgEiQEe`X>~OVTINznQ3K{Eq`DX`D#iy+LVd%^J3}; z`mochtMBnXxW6)MPD-}z_p8Ev*u-d)J%#YN&tn7e$&y_QH9T>?|kXG?XLRlk{Q;# zvUnE$(M$j-zX;v*vS-07^y9X^KB76E^!TvlRMvKSmM4d0nusAK%idnSL-MI^O201F z#KY-ACfd}RDGTLSname 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 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 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"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 "buildPathResolver" attribute is specified, the "pathDelim - The following is an example of the extension point usage: -<p> -<pre> - <extension - id="buildExample" - name="Definitions for Build Example" - point="org.eclipse.cdt.managedbuilder.core.buildDefinitions"> - etc... -</pre> + [Enter examples here.] 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 IOption in the receiver with the specified + * ID, or an option with a superclass with this id. + * + *

If the receiver does not have an option with that ID, the method + * returns null. It is the responsibility of the caller to + * verify the return value. + * + * @param id unique identifier of the option to search for + * @return IOption + * @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 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 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 0) { + String primaryOutput = (String)enumeratedPrimaryOutputs.get(0); + for (int i=0; i 0) { + for (int j=0; j 0) { for (int i=0; i 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 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; jmake. + * + * 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; iIProject 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id="cdt.managedbuild.tool.gnu.archiver.cygwin.lib.release" + superClass="cdt.managedbuild.tool.gnu.archiver"> - - + @@ -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"> + + + + + + + +