From 350233f9740d6c876ba4a5fdbfd5c219a4f49634 Mon Sep 17 00:00:00 2001 From: unknown Date: Sat, 8 Feb 2014 09:02:44 +0000 Subject: [PATCH] drop support for pdb file caching (pdb files get merged if they exist already so are not a deterministic output) increase compiler client timeout to ~5 sec (up from 0.5 sec) --- CClash.Tests/CompilerTest.cs | 26 +++++++++++++------------- CClash/Compiler.cs | 20 +++++--------------- cclash.v11.suo | Bin 147456 -> 163840 bytes 3 files changed, 18 insertions(+), 28 deletions(-) diff --git a/CClash.Tests/CompilerTest.cs b/CClash.Tests/CompilerTest.cs index 4873a52..f791011 100644 --- a/CClash.Tests/CompilerTest.cs +++ b/CClash.Tests/CompilerTest.cs @@ -89,23 +89,23 @@ public void ParseSupportedArgs(params string[] argv) [TestCase("/c", "test-sources\\exists.c", "/Zi", "/Fowhatever.obj")] [TestCase("/c", "test-sources\\exists.c", "/Zi", "/Fotest-sources")] [TestCase("/c", "test-sources\\exists.c", "/Zi", "/Fdtest-sources\\stuff.pdb")] - public void ParseSupportedPdbArgs(params string[] argv) + public void ParseUnSupportedPdbArgs(params string[] argv) { + var c = new Compiler(); + c.CompilerExe = CompilerPath; + Assert.IsFalse(c.ProcessArguments(argv)); + } + + [Test] + [TestCase("/c", "test-sources\\exists.c", "/Zi","/Z7")] + [TestCase("/c", "test-sources\\exists.c", "/Zi", "/Fowhatever.obj", "/Z7")] + [TestCase("/c", "test-sources\\exists.c", "/Zi", "/Fotest-sources", "/Z7")] + [TestCase("/c", "test-sources\\exists.c", "/Zi", "/Fdtest-sources\\stuff.pdb", "/Z7")] + public void ParseSupportedPdbArgs(params string[] argv) { var c = new Compiler(); c.CompilerExe = CompilerPath; Assert.IsTrue(c.ProcessArguments(argv)); - Assert.IsTrue(c.GeneratePdb); - Assert.IsNotNullOrEmpty(c.PdbFile); - EnsureDeleted(c.PdbFile); - EnsureDeleted(c.ObjectTarget); - var stderr = new StringBuilder(); - var stdout = new StringBuilder(); - var ec = c.InvokeCompiler(c.CommandLine, - x => stderr.AppendLine(x), - x => stdout.AppendLine(x), false, null); - Assert.AreEqual(0, ec); - Assert.IsTrue(File.Exists(c.ObjectTarget)); - Assert.IsTrue(File.Exists(c.PdbFile)); + Assert.IsFalse(c.GeneratePdb); } [Test] diff --git a/CClash/Compiler.cs b/CClash/Compiler.cs index 95c17e6..cc2fdd8 100644 --- a/CClash/Compiler.cs +++ b/CClash/Compiler.cs @@ -331,6 +331,7 @@ public bool ProcessArguments(string[] args) case "/Z7": GeneratePdb = false; + PdbFile = null; break; case "/Yu": @@ -442,22 +443,11 @@ public bool ProcessArguments(string[] args) var f = Path.GetFileNameWithoutExtension(SingleSourceFile) + ".obj"; ObjectTarget = Path.Combine(Environment.CurrentDirectory, f); } - if (GeneratePdb && PdbFile == null) - { - for ( int x = 14; x > 8; x-- ) - { - if ( CompilerExe.Contains(string.Format("Microsoft Visual Studio {0}.0",x)) ) - { - var f = string.Format("vc{0}0.pdb", x); - PdbFile = Path.Combine(Environment.CurrentDirectory, f); - break; - } - } - if ( PdbFile == null ) { - Logging.Emit("could not work out compiler version for auto generated pdb"); - return false; - } + + if (GeneratePdb) { + return false; } + } } diff --git a/cclash.v11.suo b/cclash.v11.suo index f32405664a6ac05cfaf8bbd00fa5e7c4d5cb84e9..f387dcc2ce34c16fb31afe5132277988ec032de6 100644 GIT binary patch delta 13649 zcmdU03tW^{+JB#6xC)2@0|F`#TZn?gMHm&8%ZP-6c*(qwD;g?=N-*A%68%~;Gt)Wb z*{{tszcMYm=%}Mx*;v+=x~bjPHS@OCy4EWGvc77+a{tf!GB7hRsqOA>zdih(dCz&z zdCz&yInV8X-j~M4z{bX))w$hADvII*`tj=3tGFlxx((zHiW6tnkK9%}o~*i>z?W;Y z?t4DzFx@BS>K4;z@wINTa9q-h1wIWScc5_uh*Pd0eRv3W$LR;qSdpL)?;e1<&Y(aL z*LKA<9K_G{5u@}`31P_H4&vHwxZ-lv0Dkz&DMXy94qsCnL1ki_ehB4@%ldFi)NaQA zq8v{|pmq0_C;5p^$d3Ur7o0F5?%@IbdE6A=k|nS?*7o&tm{p3H>$g}pn#4DL_qR-I zxOme)J=t|?S|?YpCbV?vI!O^1kR{6X0aKz;X#m{}az5ak6_?|=9(?j_ZvsVu5<$rz z=AU_HetY5C1Ej;fR9yMlLAZ+DdQ%rJ6reB!ln06y6qwm%6mneSOru45V0hek+>HZG z08Io<0#$&RdtnJI*4LsS9D&g^U;Ht!r*9I9jpB!ae-qyZnF6^L(@60{Zl2L*uAK|!ESpq>z|n@BH4ZHP7IpzPcsJbpDE^raSGx4E#Ydd>w;HebvdCW$-x>cV9e*ahEn>6K;4*=z6!6j+fsIeQ-4+OwZlW&3eV5vfe_wyWG&Zd+*`d_`9d`5t_~Z!T^( zh=tu31ua4D{4epNh#yP8p~<$d%R13UlioVMSU-;MVk&-@keL)?yZ8TYC0~U(;DzvI zy}c^Fi(R~?Pk?9~Tqxd*OLq=10CmfG0KeYI?Mk(MKg3UGEh`LEg^*QB?d{UGO7y6>|$8w%!(Ri!VA&R0rStJ(UtY?we z`YJx`tCXrG?2_fyk%3f(5?ckX53EM!m%d!0;P5!k_<`8U@uIOb1>qVB5`BWB1Na7$ z7=c0z?#6OWP4EJ>W*`^7EGZ7)A=rY7+>qo5PvugdUl5oa&zZZ>>TXaCXclNTXby-) zO*lgGtiuvTQm;7M;PPGM$MZPgBfd{h?6Mr$he7B`f2Y|IaXtPObq;}7$?D2f~$rpwX?V=(J|$zpRubRM2lQyP9}D|12BiUp=>8s;@y zsmE`PQibvY#iV2_X-X~bRe|c2X?1hz=S&xQ_c_G=`w~RL*`D1C3dfY6>zV(~x$kBT z+ZNX+`NdD(>AxSMKdfL(VS&7yLOrd^Q^d$A(X!D@N&Z7$zrF5`9*5<+AnI#BZl+|i zRut>ms`1opmWq`mbwxB$Zt6?L(%6?q%dH{E?Y#rJ6RA`utRmT#Jo#9xHOm5jGB@ig zMT@!p9+tXd`mH=&gl4NlC|VZB(20%r`&qM{GHAybsthi(>q=;?Ue@H$MH=p8Q94Fb znXJjCFxg`i`N^`8G@1ss)SB!U%c+svTQ{^-OH?P>9b;&;f8gGh$>%wH7M-gMa_J;W z^nWI1lFQ^Lp+}c#9vViQd4{>n|D8PH^E`_@{$NwJvk&y!;{675dA->6`G6-%ee9YR%I4o-eF&Me42D~q@YPRi@%F> zvu<;e3AfP_dt(+g`nW1tFzfDeRvx778w)9ru;i+zhpC5jyhsDYlo^ID1xlr=k!jG_ zdT{iZb3C@(20UJbJUGfl=w#uEBmDJgT2kh`J(=hu@O>HqvmraRH@~ICrEZ zJV(j#X!5ySvXx5Z=7nUDPtT*0$SkD*X2;d&D9RgJqv`k3`^-sfKE}#u*XmmcfX>BzaF3MN*RNatB3DN>a*T+RVyA7`aNA@@gz!1)|J_SVRj9+$@Y*hN}hF zF=#mrW}i#-D33*{7A~~9rR{9g)ZxCi0biWo)YE$ zMKn)c&;Ho3EG)Tu`wwL0e6+`AkCrJ03dKIXAlEd)k)B>1A%ERK73#zJm`IM&-{avo zRYrJ~v#>z!9skLGxq+&6>eD&cu1qYndy7xSk_U&2`)K8s(*`uR5abT)=HwG)_+#QLL^;-rjIr@||i zfmLzm;kW8`unP;TjOnR~$9xD!9fV^ngn&iIDF%C4SFlgNj&50-eo!e-f&a5S^DG*T ze|)0cu!{6@!>{N7Ha*1H+LGVe-_uqtK?6g5Iu7bxyM!lb)l@z%Of0 zA%cWzEWqp*4be2=3vgR$*RP~iBsZ>YGg?9Z>ZT}Fa&aW}#J*gVw1P?_S%i%qT@WAU>Uwh<;uYYal*Y$$7$hq6drIx@mE^za5N>v`>8$0fyQW zOM7-Z(VxnZ?CkUUrh_N9@5dOy}F*#=D|#Q&SRI@c5t}dY^5XWRt?1l zcuMYh^=X;Xgc#=dp5iE0k(_p1o@wEdSHsi9p5ysPvV61sPgCy1rcB45qP#47K0*`3 zx_J>;j;-o4LCf^^RZTQr6CO5Lp7MU2#m#P9O9Om7Ht<$#HO!&9f$-3mFhq^!P41X) zz!1;#whb4XUXK?$4i<}&*CS-aPAV4VGfZf1YioW|M%$lwoDNZx2~*92B)O~HyF6Vn z`HiX8Hzr4MgZ8HWLs*7Vd&)YhAes0Gjf)xy>ukZ)wE)(skQcZo`QDQh_fr9Jyy>42 z2qTQO75})KY+8tl1G!zhTR1I3Z)*nUrk|C%`STB+D@Fhc(J848ubMO02vvP%^8l8xsP z7Y9etN;S;x&)Bw5wF4ZE%tTLhs)eXSZUH=FmCK%JJ2I?b#I0Qr*X?5ucPy3iWUzsZ zvM7S$WpWID-Wf()IsA>2wULw|8-poDerP~Q3=Cirx`SiI*bhs7=Ui9LyB86Yw2&*x$Q-(84U^`_fct4uMnN8%bq-87;a_=yn*oI!JvrXh!=< z$(%^)FN0!W<#G*_CO1Zc@4GlRJp_DTh$4e{sn$bgw&%IBlAJ>+@{OyC%~DdsrMD3k^Jp4PfyoYy}$Si{s?v-T)fWZ|hk& zRFoxwvhJ0}KGfuc;}22!b}#vA8lo)~QSI+T4!N{1LZmkM@jxmiYoH78tIQ4zvdkCI zXiZm2PcOp}qXrk_Rb$4{PCDeZLYb;AQ-x+E03O-Y;l5mxN#XLYT<$WH;_UDBr1z-} zIJMxaR-Dxeq*CY~8`6#;pY{*D0VKNA6^yxI&U3sPW98sfDr&`+DlA*}9|a=+McfYd z_hq~Sv=&EE)NG?=XPhp#LqOsdtaSutPCaH1D@PwPKN1n8N;3oL@QbCqRnYWYZ&BaPI}8sBSoZ5!`*ls#kd?v0hL> ztGl$mA1yXL+N8Gif-unb--&y?L6L0-OT`1LYvrBuwK%X1fL1*O<7uYN(3A1@$9 z0>+fu&Re&tt-K)zIDR#n>Hu(b2u{2J8QYpB73p|ELR#?GAtvDnMKrCgQ^nN_{%}(T zPu$XiP1NPPPW+*+s}~%j*7Z|8PkTt>id(z_5fz2Xamy&eHtxSo9Ibf4A1vgykAE}H zX$Crk7uwQwj7pwbp~grNwiPeVBiZl>8El5_4MaZ&kFX$kgAu$%Cu|KGKz zrRC(MJ%|zDRBYT~5oaG9=L973o=0h#n74DXCm=bxbCN0yUZ9BFw~|KM7VJvVmdzU| z(dN@J6j|~KEf&o?)5M6~5$g7Ih&ebAv~AuULy;Y$79PO_uig>Z;5siLr47p1j_*OF z!g0AP`sf&>KrBlmI|L#Oyr;?9MvAxH`^pGCd4LV~jd2Ah2zD>Aw8wgZ7ciHz8Mxdb zgPwq74RG8~tw=?z{&kr*%%L4Z9eM)tZ+N3zC!03`u($Uk9OA2>Bj(!Bgkyj4z=OrM zl((j9+pdNGo)O^L)>DY`rP*@tM)I>g`MYeLTX??)IIzQj-gfleyD5s%e+OZ+?ec-E zB%WSTB4f5tggE~DFIh&rw2PhPsrfWYgdW}<Et&yDu%~5 z0~L72)yLdzZ1)yH!2us1;LTHiox{GW?yzmZ@o_{=DtFTH0!8;418B)efDZ}pY>xw4 z+5W5Tkx%Y(ZX>hfc{1~kT(_Ns?eR|=wRv%n;CWv7I~E@-G6Q1`rG7fx@%7 zA#%Kfg5?wk>En!Or=@|IvZ5?fQH*BVw|_)B755F+Vw&IKT zb#mo?3M%Ad(0+JkC?=eW94|{ga(oob$I7WHV#>gRrlOp#wl2Wc2r9&$=P21C;X*G_ zaWOaj`rc#Z;-H`wyE$7Kj3cgLl{fYlEJV@Xtj(>js^c}{#BU&sfW3U|?D~fn>Rcn9 zy40P&PUv~ z!uY>g^m1EA7|Kjfww6Uha|Uf`D^9uMCymF+&u>~yb=7Q()^!{A{`FNBOZDs-vhf)8 zap}gtX3mTmd|zc{hQzBJlV4$BO=bN|G3nc0w5N?Z`G-&{BwO2!&Mn-|L}PSe5%*k4 zgDN-|EP(INwN%$=eQ#*1;OVIqDla?Q%#1e7ceYWI9jlOM$uf5!L>e0` zpIVA{q#zRyGXI2(XixEX6Dofw^l*4t{g5 zPRU*Fv?24I%@m`9Kajz>lI!ZaN?bwq-7bw6x8%)R$UMM^zePC(g+=LnlCFV;DyVT4 z8jZD|d4UG~w4-8UEt=Qr?ccvdPxyFuRx0j0X`^FqukwO^+8uG{v0mI7`1@HdN<~k* zcG3ZTR5na&M?Q+dfc?-OO4HsId2>ahJ}gyV#IYKW1`3CRid=uV9zN>l+8neiRNH6Z%78Un$#A+F5qdF0Jbg3{*evyi{D(-m z6e$uvGV#|{oWwmRV&&9#smCo`(t)n+Br@SlBE%G*uALI0Z>%)2|7K?))?d-Aj({)F zSI@4putP}q^daueYO8CjxLLBS{5_dfqs5PVx{`duqr5a~ig7%PE1M>BJAWZ(1yZ;d z_mcmZk%EG6airqOoA_xD-!j3#IA9XKje6GA;zjI@&6*GYGiaIEQSUmdTj zC1JgkCbxH`uJ*hW6yU?JD*b;97(&XzeP&c_Ul0y3pgDtfn+~yFP-=!ymEC{BxL-lw>{B!U&u@+_i z=%`NVg}!w1(KEEK4R*VtJ8;129|7WPx?C5pdtNSy(4_=t<(LxV=T};$&Ainj($7Zt z&N2>4td&P1bhpUHZq&FbMb~v#m@Zf+E00j5>>i=(Y0vAb8&5u_%q;nva9uZPjMBx* z$0BuoSQdSQOqs@hS=l*R_dVO{h+E}TKee*HC5CeMPuGl#UU2IyjCBQ({f|Nm!=&bL#H?PYCp4Ttku8_)k;+3y@l8s`;6L z9-ED826`Nn{aXS()sMAIu{F?h*PvDhG0eb$tCpHy=kEXmKxU8DPCqfsFtnvDKCxC! zc^J38RuHL%yzX7965Xo8`38RXr=>8*FOca8GP~=wwtf8Zwli_uSp;(N60Uk!V5o7n z#Fb-jPUfG6P5%;K=V44bvN-G?gM-+x2Qrf$PjqB{@(q4GA2r1|l5jPF%pF^l0++}> zLXGUhx$*UwnW4-XzrfV1#U3Z*Zqhooulm|PSD3V_lu?; z{w;h+|5JEzp4W}^_^`L-3*j4#I3{8`9Y-9&y^0WNOhb&pA89Sb;hYwMxPGsceB)6D z$2sbMs<@5n#)C_g5*t~F;b*Ha!^2iz0%b%L-^NWP5>+I+mDprm(cXEq-kC ak%dd2I&@{ogi|wKv8{d%A?N>V?*0ya=onuB delta 11914 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 DqAJFr